Codebase list flare-engine / upstream/1.11+git20210414.1.8769888
Import upstream version 1.11+git20210414.1.8769888 Debian Janitor 3 years ago
289 changed file(s) with 52385 addition(s) and 39355 deletion(s). Raw diff Collapse all Expand all
0 # do not export git related things
1 .gitattributes export-ignore
2 .gitignore export-ignore
3 .mailmap export-ignore
4
5 # formatting
6 astyle_flare.sh export-ignore
7
8 # related to coding and testing
9 .travis.yml export-ignore
10 qt.xml export-ignore
11
12 # do not export the language recreation script
13 mods/default/languages/regenerate_po.sh export-ignore
14 mods/default/languages/xgettext.py export-ignore
15
16 # regenerating the wiki pages
17 extract_xml.sh export-ignore
18 wiki.xslt export-ignore
19 regenerate_wiki_attributepage.sh export-ignore
20
21 # the script to generate tar balls
22 distribution/create_release_tarball.sh export-ignore
0 /flare
1 /flare.exe
2 /CMakeFiles/
3 /CMakeCache.txt
4 /Makefile
5 /cmake_install.cmake
6 /install_manifest.txt
7 /build/
8 /build-debug/
9 /build-release/
10 /config/
11 /saves/
12 # ignore also vim swap files
13 .*.sw*
14 /flare.desktop
15 gmon.out
16
17 # ignore copy-on-write backup files
18 *~
19
20 # a copy of the CMakeLists.txt generated by QtCreator:
21 /CMakeLists.txt.user
22 /Flare.cbp
23
24 # performance and benchmarking items
25 /perf.data
26
27 # from astyle:
28 *.orig
29
30 # from regenerate_wiki_attributepage.sh
31 /Attribute-Reference.md
32
33 # android stuff
34 /flare-android-project/.gradle
35 /flare-android-project/.idea
36 /flare-android-project/build
37 /flare-android-project/app/build
38 /flare-android-project/app/release
39 /flare-android-project/app/app.iml
40 /flare-android-project/local.properties
41 /flare-android-project/app/src/main/libs
42 /flare-android-project/app/src/main/obj
43 /flare-android-project/app/src/main/jni/SDL2
44 /flare-android-project/app/src/main/jni/SDL2_image
45 /flare-android-project/app/src/main/jni/SDL2_mixer
46 /flare-android-project/app/src/main/jni/SDL2_ttf
47
48 # os x
49 .DS_Store
50
51 # qt creator
52 *.autosave
53
54 # emscripten output
55 emscripten/
56 a.out.js
57 a.out.wasm
58
59 # visual studio and its cmake
60 .vs/
61 CMakeSettings.json
0 # Proper Name <proper@email.xx> Commit Name <commit@email.xx>
1 Clint Bellanger <clintbellanger@gmail.com> clintbellanger <clintbellanger@gmail.com>
2 Clint Bellanger <clintbellanger@gmail.com> unknown <cpb0001@LIB-AU16638.auburn.edu>
3 Clint Bellanger <clintbellanger@gmail.com> unknown <clintbellanger@gmail.com>
4 Thane Brimhall <thane.brimhall@gmail.com> Thane Brimhall <thane@lenny.(none)>
5 Thane Brimhall <thane.brimhall@gmail.com> Thane Brimhall <tbrimhall@turtle.(none)>
6 Thane Brimhall <thane.brimhall@gmail.com> Thane Brimhall <thane@thane-laptop.(none)>
7 Justin Jacobs <justin@justinjacobs.com> Justin Jacobs <jajdorkster@gmail.com>
8 Matthew Krohn <makrohn@gmail.com> makrohn <makrohn@gmail.com>
9 Stefan Beller <stefanbeller@gmail.com> stefanbeller
10 Stefan Beller <stefanbeller@gmail.com> <stefanbeller@googlemail.com>
11 Stefan Beller <stefanbeller@gmail.com> <sbeller@google.com>
12 Igor Paliychuk <mansonigor@gmail.com> igor <mansonigor@gmail.com>
13 Igor Paliychuk <mansonigor@gmail.com> igor Paliychuk <mansonigor@gmail.com>
14 Chris Oelmueller <chris.oelmueller@gmail.com> Chris Oelmueller <eoc.eoc.eoc@gmail.com>
15 Manuel A. Fernandez Montecelo <manuel.montezelo@gmail.com> Manuel A. Fernandez Montecelo <mafm@mafm-laptop.itsari.org>
16 Adrián Chaves Fernández (Gallaecio) <adriyetichaves@gmail.com> Adrian Chavez Fernandez (Gallaecio) <adriyetichaves@gmail.com>
17 Adrián Chaves Fernández (Gallaecio) <adriyetichaves@gmail.com> Adrian Chaves Fernandez <adriyetichaves@gmail.com>
18 Henrik Andersson <hean01@users.sourceforge.net> Henrik Andersson <henrik.4e@gmail.com>
19 Christoph J. Thompson <cjsthompson@gmail.com> Christoph <cjsthompson@gmail.com>
20 blazindragon <dragonslayer122@gmail.com> DRAGON <dragonslayer122@gmail.com>
21 Morel Bérenger <berenger.morel@neutralite.org> bmorel <berenger.morel@neutralite.org>
22
0 language: cpp
1 compiler:
2 - gcc
3 - clang
4 before_install:
5 # - yes | sudo add-apt-repository ppa:zoogie/sdl2-snapshots
6 - sudo apt-get clean -qq
7 - sudo apt-get update -qq
8 - sudo apt-get install -qq libegl1-mesa-dev libgles2-mesa-dev libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev cppcheck
9 script: cmake . && make
10 after_script: cppcheck --quiet --verbose --enable=all `git ls-files src/\*.cpp`
11 notifications:
12 irc:
13 channels:
14 - "irc.freenode.org#flarerpg"
15 on_success: always
16 on_failure: always
17 use_notice: true
18 skip_join: true
19 template:
20 - "%{repository} (%{commit}) : %{message} %{build_url}"
11 cmake_minimum_required (VERSION 2.6)
22
33 Set (PACKAGE "FLARE")
4 Set (VERSION "1.09.01")
4 Set (VERSION "1.11")
55
66 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
77
8 # can't use add_compile_options here. Seems to have something to do with add_compile_options appending it after the "-O3 -DNDEBUG" flags
9 if (MINGW AND CMAKE_BUILD_TYPE STREQUAL "Release")
10 set(CMAKE_CXX_FLAGS_RELEASE "-Wl,-subsystem,windows ${CMAKE_CXX_FLAGS_RELEASE}")
11 endif()
12
813 # Default definitions
9 if (NOT MSVC)
10 set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wunused -Wshadow -Woverloaded-virtual -Wunreachable-code -Wconversion -Wno-sign-conversion -Wformat-security ${CMAKE_CXX_FLAGS}")
11 set(CMAKE_CXX_FLAGS "-fno-math-errno -fno-exceptions ${CMAKE_CXX_FLAGS}")
12 set(CMAKE_CXX_FLAGS "-std=c++98 ${CMAKE_CXX_FLAGS}")
13 else (NOT MSVC)
14 add_definitions(-D_CRT_SECURE_NO_WARNINGS)
15 add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
16 add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE)
17 endif (NOT MSVC)
18
19 if(CMAKE_BUILD_TYPE STREQUAL "Release")
20 set(CMAKE_CXX_FLAGS_RELEASE "-O2 -g0")
21 if(MINGW)
22 set(CMAKE_CXX_FLAGS_RELEASE "-Wl,-subsystem,windows ${CMAKE_CXX_FLAGS_RELEASE}")
23 endif()
24 elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
25 set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
26 elseif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")
27 set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -g0")
28 elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
29 set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3 -pg")
30 set(CMAKE_EXE_LINKER_FLAGS_DEBUG "-pg")
31 set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "-pg")
32 set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "-pg")
14 if (MSVC)
15 add_definitions(-D_CRT_SECURE_NO_WARNINGS)
16 add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
17 add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE)
18 else ()
19 add_compile_options(
20 -Wall -Wextra -Wunused -Wshadow -Woverloaded-virtual -Wunreachable-code -Wconversion -Wno-sign-conversion -Wformat-security
21 -fno-math-errno -fno-exceptions
22 -std=c++98
23 )
24 endif ()
25
26 add_compile_options(
27 "$<$<CONFIG:RELEASE>:-O2>"
28 "$<$<CONFIG:RELEASE>:-g0>"
29
30 "$<$<CONFIG:RELWITHDEBINFO>:-O2>"
31 "$<$<CONFIG:RELWITHDEBINFO>:-g>"
32
33 "$<$<CONFIG:MINSIZEREL>:-Os>"
34 "$<$<CONFIG:MINSIZEREL>:-g0>"
35
36 "$<$<CONFIG:DEBUG>:-O0>"
37 "$<$<CONFIG:DEBUG>:-g3>"
38 "$<$<CONFIG:DEBUG>:-pg>"
39 )
40
41 # Not supported by CMake 3.12!
42 # Travis uses this version so we have to stick to modifying the strings...
43 # add_link_options(
44 # "$<$<CONFIG:DEBUG>:-pg>"
45 # )
46
47 if (CMAKE_BUILD_TYPE STREQUAL "Debug")
48 set(CMAKE_EXE_LINKER_FLAGS_DEBUG "-pg ${CMAKE_EXE_LINKER_FLAGS_DEBUG}")
49 set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "-pg ${CMAKE_SHARED_LINKER_FLAGS_DEBUG}")
50 set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "-pg ${CMAKE_MODULE_LINKER_FLAGS_DEBUG}")
3351 endif()
3452
3553 set(BINDIR "games" CACHE STRING "Directory from CMAKE_INSTALL_PREFIX where game executable will be installed.")
93111 # Sources
94112
95113 Set (FLARE_SOURCES
96 ./src/BehaviorAlly.cpp
97 ./src/Entity.cpp
98114 ./src/Animation.cpp
115 ./src/AnimationMedia.cpp
99116 ./src/AnimationManager.cpp
100117 ./src/AnimationSet.cpp
101118 ./src/AStarContainer.cpp
102119 ./src/AStarNode.cpp
103120 ./src/Avatar.cpp
104 ./src/BehaviorStandard.cpp
121 ./src/Camera.cpp
105122 ./src/CampaignManager.cpp
106123 ./src/CombatText.cpp
107124 ./src/CursorManager.cpp
108125 ./src/DeviceList.cpp
109126 ./src/EffectManager.cpp
110 ./src/Enemy.cpp
111 ./src/EnemyBehavior.cpp
112127 ./src/EnemyGroupManager.cpp
113 ./src/EnemyManager.cpp
114128 ./src/EngineSettings.cpp
129 ./src/Entity.cpp
130 ./src/EntityBehavior.cpp
131 ./src/EntityManager.cpp
115132 ./src/EventManager.cpp
116133 ./src/FileParser.cpp
117134 ./src/FontEngine.cpp
118135 ./src/GameSlotPreview.cpp
119136 ./src/GameState.cpp
120 ./src/GameStateConfigBase.cpp
121 ./src/GameStateConfigDesktop.cpp
137 ./src/GameStateConfig.cpp
122138 ./src/GameStateCutscene.cpp
123139 ./src/GameStateTitle.cpp
124140 ./src/GameStateLoad.cpp
143159 ./src/MenuActiveEffects.cpp
144160 ./src/MenuBook.cpp
145161 ./src/MenuCharacter.cpp
162 ./src/MenuConfig.cpp
146163 ./src/MenuConfirm.cpp
147164 ./src/MenuDevConsole.cpp
148165 ./src/MenuEnemy.cpp
149166 ./src/MenuExit.cpp
167 ./src/MenuGameOver.cpp
150168 ./src/MenuHUDLog.cpp
151169 ./src/MenuInventory.cpp
152170 ./src/MenuItemStorage.cpp
153171 ./src/MenuLog.cpp
154172 ./src/MenuManager.cpp
155173 ./src/MenuMiniMap.cpp
174 ./src/MenuMovementType.cpp
156175 ./src/MenuNumPicker.cpp
157176 ./src/MenuPowers.cpp
158177 ./src/MenuStash.cpp
191210 ./src/Widget.cpp
192211 ./src/WidgetCheckBox.cpp
193212 ./src/WidgetButton.cpp
213 ./src/WidgetHorizontalList.cpp
194214 ./src/WidgetInput.cpp
195215 ./src/WidgetLabel.cpp
196216 ./src/WidgetListBox.cpp
205225 )
206226
207227 Set (FLARE_HEADERS
208 ./src/BehaviorAlly.h
209 ./src/Entity.h
210228 ./src/Animation.h
229 ./src/AnimationMedia.h
211230 ./src/AnimationManager.h
212231 ./src/AnimationSet.h
213232 ./src/AStarContainer.h
214233 ./src/AStarNode.h
215234 ./src/Avatar.h
216 ./src/BehaviorStandard.h
235 ./src/Camera.h
217236 ./src/CampaignManager.h
218237 ./src/CombatText.h
219238 ./src/CommonIncludes.h
220239 ./src/CursorManager.h
221240 ./src/DeviceList.h
222241 ./src/EffectManager.h
223 ./src/Enemy.h
224 ./src/EnemyBehavior.h
225242 ./src/EnemyGroupManager.h
226 ./src/EnemyManager.h
227243 ./src/EngineSettings.h
244 ./src/Entity.h
245 ./src/EntityBehavior.h
246 ./src/EntityManager.h
228247 ./src/EventManager.h
229248 ./src/FileParser.h
230249 ./src/FontEngine.h
231250 ./src/GameSlotPreview.h
232251 ./src/GameState.h
233 ./src/GameStateConfigBase.h
234 ./src/GameStateConfigDesktop.h
252 ./src/GameStateConfig.h
235253 ./src/GameStateCutscene.h
236254 ./src/GameStateTitle.h
237255 ./src/GameStateLoad.h
256274 ./src/MenuActiveEffects.h
257275 ./src/MenuBook.h
258276 ./src/MenuCharacter.h
277 ./src/MenuConfig.h
259278 ./src/MenuConfirm.h
260279 ./src/MenuDevConsole.h
261280 ./src/MenuEnemy.h
262281 ./src/MenuExit.h
282 ./src/MenuGameOver.h
263283 ./src/MenuHUDLog.h
264284 ./src/MenuInventory.h
265285 ./src/MenuItemStorage.h
266286 ./src/MenuLog.h
267287 ./src/MenuManager.h
268288 ./src/MenuMiniMap.h
289 ./src/MenuMovementType.h
269290 ./src/MenuNumPicker.h
270291 ./src/MenuPowers.h
271292 ./src/MenuStash.h
304325 ./src/Widget.h
305326 ./src/WidgetCheckBox.h
306327 ./src/WidgetButton.h
328 ./src/WidgetHorizontalList.h
307329 ./src/WidgetInput.h
308330 ./src/WidgetLabel.h
309331 ./src/WidgetListBox.h
318340
319341 # Add icon and file info to executable for Windows systems
320342 IF (WIN32)
321 SET(FLARE_SOURCES
322 ${FLARE_SOURCES}
323 ./src/Flare.rc
324 )
343 SET(FLARE_SOURCES
344 ${FLARE_SOURCES}
345 ./src/Flare.rc
346 )
325347 ENDIF (WIN32)
326348
327349 Add_Executable (flare ${FLARE_SOURCES} ${FLARE_HEADERS})
328350
329351 # libSDLMain comes with libSDL if needed on certain platforms
330352 If (NOT SDL2MAIN_LIBRARY)
331 Set (SDL2MAIN_LIBRARY "")
353 Set (SDL2MAIN_LIBRARY "")
332354 EndIf (NOT SDL2MAIN_LIBRARY)
333355
334356 Target_Link_Libraries (flare ${CMAKE_LD_FLAGS} ${SDL2_LIBRARY} ${SDL2IMAGE_LIBRARY} ${SDL2MIXER_LIBRARY} ${SDL2TTF_LIBRARY} ${SDL2MAIN_LIBRARY})
336358
337359 # installing to the proper places
338360 install(PROGRAMS
339 ${CMAKE_CURRENT_BINARY_DIR}/flare
340 DESTINATION ${BINDIR})
361 ${CMAKE_CURRENT_BINARY_DIR}/flare
362 DESTINATION ${BINDIR})
341363 install(DIRECTORY
342 "${CMAKE_CURRENT_SOURCE_DIR}/mods"
343 DESTINATION ${DATADIR})
364 "${CMAKE_CURRENT_SOURCE_DIR}/mods"
365 DESTINATION ${DATADIR})
344366 install(FILES
345 "${CMAKE_CURRENT_SOURCE_DIR}/distribution/flare.man"
346 DESTINATION ${MANDIR}/man6
347 RENAME flare.6)
367 "${CMAKE_CURRENT_SOURCE_DIR}/distribution/flare.man"
368 DESTINATION ${MANDIR}/man6
369 RENAME flare.6)
348370 install(FILES
349 "${CMAKE_CURRENT_BINARY_DIR}/flare.desktop"
350 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications)
371 "${CMAKE_CURRENT_BINARY_DIR}/flare.desktop"
372 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications)
351373 install(FILES
352 "${CMAKE_CURRENT_SOURCE_DIR}/distribution/flare_logo.svg"
353 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps
354 RENAME flare.svg)
374 "${CMAKE_CURRENT_SOURCE_DIR}/distribution/flare_logo.svg"
375 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps
376 RENAME flare.svg)
55 Anton Golov | http://jesyspa.blogspot.com/
66 Artur "Zear" Rojek
77 blazindragon
8 bloodhero
89 Bonbadil
910 Chris Oelmueller
1011 Clint Bellanger | http://clintbellanger.net
2324 Matthew Krohn | https://github.com/makrohn
2425 Nojan
2526 Pavel Kirpichyov "Cheshire"
27 r-a-cristian-93
2628 runtime-x86
2729 Ryan Dansie | https://github.com/RyanDansie
2830 Stefan Beller | https://github.com/stefanbeller
4143
4244 (be) Belarussian by Mikhail Karalevich
4345 (bg) Bulgarian by Emil
44 (ca) Catalan by Marc Tormo i Bochaca
46 (ca) Catalan by Marc Tormo i Bochaca and Maria Cano
4547 (cs) Czech by Nikita Vanku (Zaraka), hark34
4648 (de) German by Thomas 'CruzR' Glamsch, Chris Oelmueller, Janet Hunt, Stefan Beller, and Wuzzy2
4749 (el) Greek by Yannis Anthymidis, Michael Papageorgiou, and Nea Retrogamer
4850 (es) Spanish by Juan Pablo 'morris989' Tamayo, Carlos Sanchez, Diego J. Romero López, and Eric R
4951 (fi) Finnish by Timo Sievänen
50 (fr) French by Quentin 'acieroid' Stievenart, Bonbadil, Morgan Strauss, and Christoph J. Thompson
52 (fr) French by Quentin 'acieroid' Stievenart, Bonbadil, Morgan Strauss, Christoph J. Thompson, syl_, and Christophe Nemo
5153 (gd) Scottish Gaelic by GunChleoc
5254 (gl) Galacian by Adrian Chaves Fernandez (Gallaecio)
55 (hu) Hungarian by bzt
5356 (it) Italian by Giovanni Dalla Torre, Gianfranco Del Borrello, Stefano Peris, Andrea Ranaldi, MOB2, and Fabio Loli
57 (ko) Korean by bnk159hair
5458 (ja) Japanese by Paul Wortmann, sujiniku
55 (nb) Norwegian Bokmal by Hans Joachim Desserud
59 (nb) Norwegian Bokmal by Hans Joachim Desserud, Elias Nykrem
5660 (nl) Dutch by Bas Doodeman
57 (pl) Polish by Paweł Puszczyński
61 (pl) Polish by Paweł Puszczyński and Błażej Pęksyk
5862 (pt) Portuguese by Rui
5963 (pt_BR) Brazilian Portuguese by Vicente Monteiro
60 (ru) Russian by Sergey Basalaev, Evgen Pavlov, and Ademaro
61 (sk) Slovak by Miro Jánošík
64 (ru) Russian by Sergey Basalaev, Evgen Pavlov, Ademaro, and Andrey Kapitonov
65 (sk) Slovak by Miro Jánošík, MiroslavR
6266 (sv) Swedish by Andreas Berheim Brudin
6367 (uk) Ukrainian by Igor Paliychuk, Denis Lysenko, Микола Франчук, Sergiy Borodych
6468 (vi) Vietnamese by Nguyễn Gia Phong
104104
105105 ### Windows
106106
107 #### MSYS2 / MinGW
108
109 We use [MSYS2](https://www.msys2.org/) as our official development environment on Windows.
110
111 ```
112 # install the build environment with SDL2 libraries
113 # 32-bit
114 pacman -S git mingw-w64-i686-SDL2 mingw-w64-i686-SDL2_image mingw-w64-i686-SDL2_mixer mingw-w64-i686-SDL2_ttf mingw-w64-i686-cmake mingw-w64-i686-gcc mingw-w64-i686-make
115 # 64-bit
116 pacman -S git mingw-w64-x86_64-SDL2 mingw-w64-x86_64-SDL2_image mingw-w64-x86_64-SDL2_mixer mingw-w64-x86_64-SDL2_ttf mingw-w64-x86_64-cmake mingw-w64-x86_64-gcc mingw-w64-x86_64-make
117
118 git clone https://github.com/flareteam/flare-engine.git
119 cd flare-engine
120 cmake . -DCMAKE_BUILD_TYPE=Release -G "MinGW Makefiles"
121 mingw32-make
122 ```
123
124 If you want a debug build, simply replace `Release` with `Debug` as the CMake build type.
125
126 It is highly recommended that you add `C:\msys64\mingw32\bin` (or `C:\msys64\mingw64\bin` for 64-bit) to your Windows PATH variable for running flare.exe outside of the MSYS environment.
127
128 To obtain and use the game files, continue from the previous set of commands:
129
130 ```
131 cd ../
132 git clone https://github.com/flareteam/flare-game.git
133 cd flare-game
134 cp -r mods/* ../flare-engine/mods/
135 ```
136
107137 #### Microsoft Visual C++
108138
109139 If you want to build flare under Microsoft Visual C++,
112142
113143 [dirent.h]: https://github.com/tronkko/dirent
114144
145 To get SDL2 [vcpkg](https://github.com/Microsoft/vcpkg) can be used. Its an elegant solution to manage C/C++ dependencies
146 in a central place.
147
148 Use Windows PowerShell or Git Bash and change to a directory where you want to store the dependencies:
149 ```bash
150 #get the vcpkg code
151 git clone https://github.com/Microsoft/vcpkg.git
152 cd vcpkg
153 #bootstrap vcpkg
154 ./bootstrap-vcpkg.bat
155 #install the dependencies (for 64bit builds, you can use x86-windows triplet instead if you want 32bit)
156 ./vcpkg install sdl2:x64-windows sdl2-image:x64-windows sdl2-mixer:x64-windows sdl2-ttf:x64-windows
157 ```
158 After that the dependencies have been downloaded and build. You can use them in your cmake projects by adding the path of the
159 toolchain file to your cmake configuration command line options: `-DCMAKE_TOOLCHAIN_FILE=[vcpkg root]\scripts\buildsystems\vcpkg.cmake`
160
115161 <a name="install_system_wide"></a>
116162 ## Install Flare system-wide
117163
142188 ```
143189
144190 **Windows** plus [MinGW]:
191
192 (Note: Due to an [issue](https://github.com/flareteam/flare-engine/issues/1723#issuecomment-511621267) with compilers that aren't VC++, it is recommended to use SDL\_image 2.0.4)
145193
146194 ```
147195 g++ -I C:\MinGW\include\SDL src\*.cpp -o flare.exe -lmingw32 -lSDLmain -lSDL2 -lSDL2_image -lSDL2_mixer -lSDL2_ttf
6969 ### Windows
7070 %APPDATA%\flare\config
7171 config\
72 ### Linux (Snap)
73 $HOME/snap/flare-rpg/current/.config/flare/
74 ### Linux (Flatpak)
75 $HOME/.var/app/org.flarerpg.Flare/config/flare/
7276
7377 Here you can enable fullscreen, change the game resolution, enable mouse-move, and change keybindings.
7478 The settings files are created the first time you run Flare.
8488 ### Windows
8589 %APPDATA%\flare\userdata
8690 userdata\
91 ### Linux (Snap)
92 $HOME/snap/flare-rpg/current/.local/share/flare/
93 ### Linux (Flatpak)
94 $HOME/.var/app/org.flarerpg.Flare/data/flare/
95
8796
8897 If permissions are correct, the game is automatically saved when you exit.
8998 In addition, there is a `mods` directory in this location, which can be used to override system-wide mods.
101110 | `--mods` | Starts the game with only these mods enabled.
102111 | `--load-slot` | Loads a save slot by numerical index.
103112 | `--load-script` | Execute's a script upon loading a saved game. The script path is mod-relative.
113 | `--safe-video` | Launches with the minimum video settings.
0 Flare v1.10 (WIP)
0 Flare v1.12 (WIP)
1
2 Engine features:
3
4 * NPC interactions are now canceled when the player is attacked. 'combat_aborts_npc_interact' has been added to engine/misc.txt to control this setting.
5 * Added 'bar_fill_offset' and 'bar_fill_size' to MenuStatBar and MenuEnemy properties.
6 * Added support for fading out combat text. See the 'fade_duration' property in engine/combat.txt.
7 * Added 'save_oncutscene' property to engine/misc.txt. Saving before a cutscene was previously controlled with 'save_onload', which caused issues with cutscenes when set to false.
8 * Added 'save_anywhere' property to engine/misc.txt. This allows for saving via the pause menu. (m7600)
9 * Added display of enemies, allies, NPCs, and intermap teleport events to the minimap.
10 * Added support for defining the colors of tiles and entities on the minimap.
11 * Added 'show_on_minimap' event component. Currently, this only applies to intermap teleport events.
12 * Added 'show_on_minimap' property to NPCs.
13 * Properties that take an alignment can now be aligned to the menu frame.
14 * Support multiple images in animation definitions. (bloodhero)
15 * Expanded slot widget configuration in engine/widget_settings.txt. Quantity text color can be changed, as well as label settings for displaying hotkeys.
16 * Re-implemented displaying hotkeys on action bar slots.
17 * Support for 'item:quantity' syntax for Event properties: 'requires_item', 'requires_not_item', 'remove_item', and 'reward_item'.
18 * Added 'show_randomize' property to new game menu configuration.
19 * Added 'disable_equip_slots' property for passive powers.
20 * 'Block' powers can now use post_power to trigger a power when taking damage.
21 * Power descriptions are now displayed in action bar tooltips. This can be controlled with the 'tooltip_length' property in menus/actionbar.txt.
22 * A dialog box is now displayed instead of a log message when the player dies, giving the options to exit or respawn (if applicable).
23 * Added movement input type dialog box. It is displayed for new players to easily select between keyboard, mouse, and joystick movement.
24 * Added '--safe-video' command line option. For troubleshooting purposes, this feature is displayed as an option when starting after a potential crash.
25 * The 'categories' property has been extended to the player character. The Power property 'target_categories' can now be used for the player as a result.
26 * The ability to stash quest items can now be controlled with the 'no_stash' property.
27 * Added a button for opening the pause/configuration menu as part of the minimap.
28 * Added 'script' property to items. This removes the need to create a power in order to execute a script via activating an item.
29 * Player 'melee_range' is now configurable in engine/stats.txt.
30 * Added comparison tooltips for items. These can be disabled in the Interface settings. (r-a-cristian-93, Justin Jacobs)
31 * Added 'parallax_layers' property to Events. This functions exactly like the Map property of the same name.
32 * Added 'visible' and 'visible_when_locked' to powers and upgrades in power trees.
33 * Added 'requires_status' and 'requires_not_status' to powers and upgrades in power trees. 'visible_requires_status' and 'visible_requires_not_status' have been marked as deprecated.
34 * Added 'on_interact' as a possible value for Event types. Essentially the same as 'on_trigger', except the event can ONLY be activated through the hotspot.
35 * Support an arbitrary number of Stash tabs. Each tab has a display name and an 'is_private' flag.
36 * Added 'save_onstash' property to engine/misc.txt, so it is now possible to disable the automatic save when modifying stash contents.
37 * The player's last used Stash tab is now remembered across sessions.
38 * Added the ability for NPCs to join the player's party. (Igor Paliychuk)
39
40 Engine fixes:
41
42 * Fix memory leak of tab control in stash menu (MiroslavR)
43 * Fixed stat bars not having any fill when the value they were representing was non-zero. Now they will always show at least 1 pixel of the bar's fill graphics.
44 * Fixed a bug where the game window could be resized below the minimum size after exiting fullscreen mode.
45 * Removed the default resolution scaling when virtual_heights is undefined.
46 * Improved performance when checking map event hotspots.
47 * Fix Windows-style paths with backslashes not working on non-Windows systems.
48 * Prevent allies counting as attack targets when using mouse movement.
49 * Fix needing to press the 'Cancel' key twice to exit the vendor menu.
50 * Fix unintended key presses being registered when quitting the game via an OS keyboard shortcut.
51 * Fix divide-by-zero crash when using the dev HUD with a game that uses orthogonal rendering.
52 * Fixed a memory leak in Loot copy constructor.
53 * Fixed 'resist_percent' property of engine/combat.txt not working when targets had 100% resistance.
54 * Support attack_speed effects with a magnitude less than 100%.
55 * Fixed bug where dead entities could steal HP/MP.
56 * Fix broken parsing of engine/default_keybindings.txt.
57 * Fix Effect animations not being synced properly in some cases.
58 * Removed hard-coded restrictions on using items from the inventory. Now any item that has a power and is not equipment can be used.
59 * Fix crash when fonts are missing. The engine will try to fall back to the next available font for the current language.
60 * Background color when using sdl_hardware renderer no longer fills entire window, instead only filling the drawing surface as it should.
61 * Fix crash when loading a cutscene from a book event.
62 * Fix infinite transformation loop when dying in a transformed state that was activated by a passive power.
63 * Fix bug where the player wasn't returned to their normal state after dying in a transformed state.
64 * Prevent combat text from overlapping.
65 * Improved performance when handling many status effects.
66 * Improved performance when an entity is repeatedly unable to find a path to thier target.
67 * Fix bug where killing an enemy with return damage would not set defeat status or reward XP/loot.
68 * Fix check of item requirements when a power requires an item but doesn't consume it.
69 * Fix 'respec' events to no longer remove item-based powers from the action bar.
70 * Fix log message when gaining more than one level at once.
71 * Fixed excessive memory usage when using Items, ItemSets, and Powers with high-value IDs.
72 * Fix bug where power upgrades that didn't require power points would not automatically upgrade if other requirements were met.
73 * Fix infinite loop bug when a power's list of upgrades contains the base power ID.
74 * Fix infinite loop bug when locking power upgrades.
75 * The executable directory is now used when trying to find PATH_DATA on Linux. (r-a-cristian-93)
76 * Fix 'corpse_timeout' in engine/misc.txt being parsed incorrectly (r-a-cristian-93)
77 * Reworked camera speed curve to prevent graphical "wiggle" during slow movement.
78 * Fix missing effect description text in power tooltips when using built-in types.
79 * Fix static events not executing on the same frame as on_load events.
80 * Fix parsing bug in power trees that would save base power properties to an upgrade power.
81 * Fix on_load events with requires_class not working in maps/spawn.txt
82 * Fix timing of Effects so that the first "tick" happens immediately.
83 * Fix "Press button to use" prompt no showing up for some items.
84
85 Game updates:
86
87 * New graphics for HP and MP status bars
88 * Reworked art for the Cleave power
89 * Cleave power radius reduced to closer match its artwork
90 * Reduced the strength and radius of Rakk's freeze attack
91 * Fixed the Goblin Thief being able to steal potions from a Summoned Zombie
92 * Reduced the hitbox for spike traps
93 * Greatly reduced the damage for spike traps in the Underworld. In exchange, the traps now inflict bleeding.
94 * Overall reduced drop rates for alchemy items
95 * Added animations for immunity and ice-based slow status effects
96 * Redesigned the Torture Chambers map and quest (again)
97 * Mortar & Pestle can now be placed on the action bar
98
99 Translation updates:
100
101 * Belarusian (be) update (Zmicer Turok)
102 * Catalan (ca) update (Maria Cano)
103 * German (de) update (Wuzzy2)
104 * Spanish (es) update (Agustin Ferrario)
105 * Basque (eu) by aitzkora
106 * French (fr) update (leø, Christophe Nemo)
107 * Scottish Gaelic (gd) update (GunChleoc)
108 * Hungarian (hu) update (litoll)
109 * Korean (ko) by Kor_OfenTHource (team members: bnk159hair, kangdonghun1230, HunSeongPark and paparad0x)
110 * Norwegian (nb) update (Elias Nykrem)
111 * Polish (pl) update (Błażej Pęksyk)
112 * Portuguese (pt) update (Rui)
113 * Russian (ru) update (Igor Polyakov)
114 * Slovak (sk) update (MiroslavR)
115 * Ukranian (uk) update (Sergiy Borodych)
116 * Vietnamese (vi) update (Nguyễn Gia Phong)
117 * Chinese (zh) update (dumaosen, sakura09123)
118
119
120
121 Flare v1.11 (http://flarerpg.org/index.php/2019/07/27/flare-1-11/)
122
123 Engine features:
124
125 * Players now have their own private stash in addition to the shared stash.
126 * Expanded the 'no_stash' Item variable to account for having multiple stashes.
127
128 Engine fixes:
129
130 * Fix bug where items could be dragged from the vendor window and dropped in the opposite vendor tab.
131 * Fix bug that caused item max_quantity to be reset when attempting to append an item definition.
132 * Fix bug where Powers with 'replace_by_effect' would still use properties from the parent power, such as animation state.
133
134 Game updates:
135
136 * Items that couldn't be stashed in the last update can now be put in the private stash.
137 * Salted Field: moved chest to the south end of the map to prevent easy farming.
138
139 Translation updates:
140
141 * Belarusian (be) update (Zmicer Turok)
142 * German (de) update (Wuzzy2)
143 * Hungarian (hu) by bzt
144 * Ukranian (uk) update (Igor Paliychuk)
145
146
147
148 Flare v1.10 (http://flarerpg.org/index.php/2019/05/17/flare-1-10/)
149
150 Engine features:
151
152 * The configuration menu has been redesigned and is now used as the pause menu.
153 * The interface features from version 1.09 have been reverted due to being accessible from the pause menu.
154 * Added an Interface option to disable showing hidden entity markers.
155 * Support floating point values for loot drop chance values.
156 * Add 'hide_timeout' option to stat bar configuration to support auto-hiding. (Leszek Cimała)
157 * Added an Interface option to disable stat bar auto-hiding globally.
158 * Add 'no_stash' property to item definitions to prevent items from being placed in the stash.
159 * Add low HP notification system. (Leszek Cimała)
160 * Add ability to change the minimap zoom level by clicking on the minimap.
161
162 Engine fixes:
163
164 * Fixed event activation being tied to distance to the camera position. It is now correctly tied to distance from the player.
165 * Mouse movement and mouse aim now calculate direction relative to the player instead of relative to the screen.
166 * Fixed enemy AI so that enemies can now enter combat if a hero ally is in their proximity.
167 * Fix --data-path command line flag on Windows.
168 * Fixed dialog not being available if it lacked a topic.
169 * Fixed loot drop rate bonus having no effect when loot drop chance was too low.
170 * Fix bug where the wrong requirements were checked for passive powers that had been granted bonus points.
171 * Items that can't be stashed are now dropped on the ground upon opening the stash.
172 * Prevent re-binding the primary Main1 binding, which could break many interactions.
173 * Removed the ability to re-bind the Ctrl, Shift, Alt, and Delete keys, since they correspond to specific keyboard keys.
174 * Fix crash when trying to load a mod that contained 'engine/default_keybindings.txt'. (nwtour)
175 * Display XP stat bar value as relative to current level instead of total XP. (Leszek Cimała)
176 * Fix key bindings not working when switched to a non-US keyboard layout. (nwtour)
177 * Fix segfault when NPC filename is invalid.
178 * Fix inventory tooltips covering books when using no mouse.
179 * Fix navigation of dialog menu when using no mouse.
180 * Fix upgrading powers when using no mouse.
181 * When using the sdl_hardware renderer on Windows, OpenGL will now be used instead of Direct3D. This fixes the loss of some textures when resizing the window.
182 * Fixed the "level up" string to represent the ability to allocate multiple stat points. Also note if Power points can be allocated.
183 * Refactored 'requires_hpmp_state' for Powers to check against both stats at once. See the attribute reference for syntax changes.
184 * Greatly improved performance of loot tooltips.
185 * Fix bug where high item find chance prevented the player from finding currency.
186
187 Game updates:
188
189 * Fixed an oversight that allowed easy farming of the Torture Chambers boss and loot chests.
190 * Made it so that potions and scrolls can not be stashed. This fixes an exploit where players could utilize a low level character to get these items for cheap.
191 * Added new attack and interact cursors.
192 * Added sound effect and cursors for indicating low health.
193
194 Translation updates:
195
196 * Belarusian (be) update (Zmicer Turok)
197 * Brazilian Portuguese (pt_BR) update (Vinicius Rech)
198 * Catalan (ca) update (Marc Tormo i Bochaca)
199 * German (de) update (Fyrenic)
200 * Spanish (es) update (Agustin Ferrario)
201 * French (fr) update (syl_)
202 * Scottish Gaelic (gd) update (GunChleoc)
203 * Japanese (ja) update (sujiniku)
204 * Portuguese (pt) update (Rui)
205 * Russian (ru) update (Andrey Kapitonov, Igor Paliychuk, nwtour)
206 * Ukranian (uk) update (Igor Paliychuk)
207 * Chinese (zh) update (dumaosen, neverwin)
208
209
210
211 Flare v1.09.01 (http://flarerpg.org/index.php/2018/12/12/flare-1-09-01/)
1212
2213 Engine fixes:
3214
0 #!/bin/sh
1
2 astyle -S -T4 --style=java -y src/*.[cpp,h]
3
Binary diff not shown
0 #!/bin/sh
1
2 # get the name from the git tag:
3 name=$(git describe --tags)
4 # go into the root of the repository
5 cd $(git rev-parse --show-toplevel)
6
7 # create the tarball
8 filename=flare-engine-${name}.tar.gz
9 git archive --format=tar.gz --prefix=flare-engine-${name}/ HEAD > ${filename}
10
11 echo "Released to $(git rev-parse --show-toplevel)/${filename}"
2626
2727 #loadingDiv {
2828 text-align: center;
29 font-family: monospace;
30 font-weight: bold;
31 font-size: 150%;
2932 }
3033 </style>
3134 </head>
4548 var e = document.getElementById('loadingDiv');
4649 e.style.visibility = 'hidden';
4750 },
51 setStatus: function(text) {
52 var e = document.getElementById('loadingDiv');
53 if (text.search("Downloading data...") != -1) {
54 var download_str = text.split("(")[1].split(")")[0];
55 var download_progress = parseInt(download_str.split("/")[0]);
56 var download_total = parseInt(download_str.split("/")[1]);
57 e.innerHTML = "Downloading data... " + Math.round((download_progress / download_total) * 100) + "%";
58 }
59 else {
60 e.innerHTML = text;
61 }
62 },
4863 canvas: (function() {
4964 var canvas = document.getElementById('canvas');
5065 return canvas;
5469 <script>
5570
5671 (function() {
57 var memoryInitializer = 'index.html.mem';
72 var memoryInitializer = 'index.wasm';
5873 if (typeof Module['locateFile'] === 'function') {
5974 memoryInitializer = Module['locateFile'](memoryInitializer);
6075 } else if (Module['memoryInitializerPrefixURL']) {
7085 script.src = "index.js";
7186 document.body.appendChild(script);
7287
88 // iframe-fix.js
89 var lastTarget, canvas, body;
90 window.onload = function() {
91 body = document.querySelector('body'),
92 canvas = document.getElementById('canvas');
93 var activateCanvas = function (event) {
94 lastTarget = event.target;
95 window.focus();
96 console.log("Set focus on window");
97 }
98 var preventScroll = function (event) {
99 var keyCodes = [ 32, 37, 38, 39, 40 ];
100 if (lastTarget != canvas) {
101 return false;
102 }
103 // console.log('Key pressed: ' + event.keyCode);
104 if (keyCodes.includes(event.keyCode)) {
105 event.preventDefault();
106 }
107 }
108 var handleMouseDown = function (event) {
109 window.focus();
110 event.preventDefault();
111 event.stopPropagation();
112 }
113 body.addEventListener('keydown', preventScroll, false);
114 body.addEventListener('click', activateCanvas, false);
115 canvas.addEventListener('mousedown', handleMouseDown, false);
116
117 // Work-around chromium autoplay policy
118 // https://github.com/emscripten-core/emscripten/issues/6511
119 function resumeAudio(e) {
120 if (typeof Module === 'undefined'
121 || typeof Module.SDL2 == 'undefined'
122 || typeof Module.SDL2.audioContext == 'undefined')
123 return;
124 if (Module.SDL2.audioContext.state == 'suspended') {
125 Module.SDL2.audioContext.resume();
126 }
127 if (Module.SDL2.audioContext.state == 'running') {
128 document.getElementById('canvas').removeEventListener('click', resumeAudio);
129 document.removeEventListener('keydown', resumeAudio);
130 }
131 }
132 document.getElementById('canvas').addEventListener('click', resumeAudio);
133 document.addEventListener('keydown', resumeAudio);
134 }
73135 </script>
74136
75137 </body>
0 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1 <svg
2 xmlns:dc="http://purl.org/dc/elements/1.1/"
3 xmlns:cc="http://creativecommons.org/ns#"
4 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
5 xmlns:svg="http://www.w3.org/2000/svg"
6 xmlns="http://www.w3.org/2000/svg"
7 xmlns:xlink="http://www.w3.org/1999/xlink"
8 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
9 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
10 version="1.1"
11 inkscape:output_extension="org.inkscape.output.svg.inkscape"
12 sodipodi:docname="flare_logo.svg"
13 inkscape:export-ydpi="48"
14 inkscape:export-xdpi="48"
15 inkscape:export-filename="/home/justin/Projects/flare-engine/mods/default/images/logo/icon.png"
16 inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
17 sodipodi:version="0.32"
18 id="svg2"
19 height="512"
20 width="512">
21 <defs
22 id="defs4">
23 <linearGradient
24 id="linearGradient841"
25 inkscape:collect="always">
26 <stop
27 id="stop837"
28 offset="0"
29 style="stop-color:#984d00;stop-opacity:1" />
30 <stop
31 id="stop839"
32 offset="1"
33 style="stop-color:#cc6800;stop-opacity:1" />
34 </linearGradient>
35 <linearGradient
36 id="linearGradient3163">
37 <stop
38 id="stop3165"
39 offset="0"
40 style="stop-color:#ffc641;stop-opacity:1;" />
41 <stop
42 id="stop3167"
43 offset="1"
44 style="stop-color:#ff7f00;stop-opacity:1;" />
45 </linearGradient>
46 <inkscape:perspective
47 id="perspective10"
48 inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
49 inkscape:vp_z="744.09448 : 526.18109 : 1"
50 inkscape:vp_y="0 : 1000 : 0"
51 inkscape:vp_x="0 : 526.18109 : 1"
52 sodipodi:type="inkscape:persp3d" />
53 <radialGradient
54 gradientUnits="userSpaceOnUse"
55 gradientTransform="matrix(1.0205265,0,0,1.5879962,-134.70516,193.70975)"
56 r="166.96552"
57 fy="417.52182"
58 fx="381.88892"
59 cy="417.52182"
60 cx="381.88892"
61 id="radialGradient3197"
62 xlink:href="#linearGradient3163"
63 inkscape:collect="always" />
64 <linearGradient
65 gradientUnits="userSpaceOnUse"
66 y2="1025.47"
67 x2="264.221"
68 y1="551.576"
69 x1="264.221"
70 id="linearGradient843"
71 xlink:href="#linearGradient841"
72 inkscape:collect="always" />
73 </defs>
74 <sodipodi:namedview
75 inkscape:document-rotation="0"
76 inkscape:window-maximized="1"
77 inkscape:window-y="0"
78 inkscape:window-x="0"
79 inkscape:window-height="835"
80 inkscape:window-width="1600"
81 inkscape:snap-global="false"
82 showgrid="false"
83 inkscape:current-layer="layer1"
84 inkscape:document-units="px"
85 inkscape:cy="251.844"
86 inkscape:cx="166.208"
87 inkscape:zoom="0.844497"
88 inkscape:pageshadow="2"
89 inkscape:pageopacity="0.0"
90 objecttolerance="10"
91 guidetolerance="10"
92 gridtolerance="10000"
93 borderopacity="1.0"
94 bordercolor="#666666"
95 pagecolor="#ffffff"
96 id="base">
97 <inkscape:grid
98 id="grid2385"
99 type="xygrid" />
100 </sodipodi:namedview>
101 <metadata
102 id="metadata7">
103 <rdf:RDF>
104 <cc:Work
105 rdf:about="">
106 <dc:format>image/svg+xml</dc:format>
107 <dc:type
108 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
109 <dc:title></dc:title>
110 </cc:Work>
111 </rdf:RDF>
112 </metadata>
113 <g
114 transform="translate(0,-540.36218)"
115 id="layer1"
116 inkscape:groupmode="layer"
117 inkscape:label="Layer 1">
118 <path
119 inkscape:connector-curvature="0"
120 sodipodi:nodetypes="csszczsczczzcccccccccccccscsccccccc"
121 id="path2383"
122 d="m 243.88464,563.00351 c 0,0 18.50806,81.75342 13.75477,109.3234 -4.67479,27.11462 -19.54913,61.3599 -45.49155,71.84691 -8.08294,3.26746 -32.95042,-13.30447 -42.00504,-23.63118 -9.05461,-10.32671 -15.2855,-39.32566 -15.2855,-39.32566 0,0 -5.79082,25.29208 -3.12621,49.69283 2.6646,24.40075 13.80668,60.15285 12.95592,78.89528 -0.91996,20.2666 -14.75939,42.4844 -14.75939,42.4844 0,0 -8.49818,-23.66422 -16.84347,-39.45783 -8.34529,-15.79361 -30.40054,-37.10158 -30.40054,-37.10158 0,0 11.44731,26.12679 11.86839,50.54845 0.42108,24.42166 -43.595202,76.06725 1.19301,143.20492 45.27464,67.86685 113.04859,59.95455 113.04859,59.95455 l 16.48789,-6.0625 -63.27265,-31.00003 81.64212,-40 -81.64212,-40 81.64212,-40 81.64212,40 71.08605,-34.84375 -1.97727,-11.28125 -69.10878,-33.875 60.17917,-29.46875 -2.42375,-19.8125 -9.95013,-73.15625 c 0,0 -11.4493,24.35655 -24.13109,32.91098 -8.34625,5.6299 -28.90597,7.64375 -28.90597,7.64375 0,0 -11.25588,-60.03153 -23.10376,-91.26566 -21.15345,-55.7661 -73.07293,-96.22353 -73.07293,-96.22353 z m 101.40846,349.37196 -81.64212,40 74.94492,36.71875 29.59526,-10.875 33.13522,-38.375 z"
123 style="fill:url(#radialGradient3197);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient843);stroke-width:16;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:8;stroke-dasharray:none" />
124 </g>
125 </svg>
0 #!/bin/bash
1 # requires: Inkscape
2
3 mkdir -p "flare.iconset"
4 cd "flare.iconset"
5
6 sizes=(1024 512 256 128 64 32)
7
8 for size in ${sizes[@]}; do
9 /Applications/Inkscape.app/Contents/MacOS/inkscape -w ${size} -h ${size} -o "icon_${size}x${size}.png" "../../flare_logo_icon.svg"
10 let half=size/2
11 cp "icon_${size}x${size}.png" "icon_${half}x${half}@2x.png"
12 done
13
14 cd ../
15 iconutil -c icns "flare.iconset"
16 rm -rf "flare.iconset"
7575 !insertmacro MUI_LANGUAGE "English"
7676
7777 ;--------------------------------
78 ; The "" makes the section hidden.
79 Section "" SecUninstallPrevious
80
81 Call UninstallPrevious
82
83 SectionEnd
84
85 Function UninstallPrevious
86
87 ; Check for uninstaller.
88 ReadRegStr $R0 HKLM "SOFTWARE\Flare" "Install_Dir"
89
90 ${If} $R0 == ""
91 Goto Done
92 ${EndIf}
93
94 DetailPrint "Removing previous installation."
95
96 ; Run the uninstaller silently.
97 ExecWait '"$R0\uninstall.exe /S"'
98
99 Done:
100
101 FunctionEnd
78102
79103 ; The stuff to install
80104 Section "Flare engine" SecEngine
172196 Delete "$INSTDIR\README.engine.md"
173197 Delete "$INSTDIR\README.md"
174198 Delete "$INSTDIR\RELEASE_NOTES.txt"
199 Delete "$INSTDIR\LICENSE.txt"
175200 Delete "$INSTDIR\*.dll"
176201 Delete "$INSTDIR\uninstall.exe"
177202 RMDir /r "$INSTDIR\mods\"
6969
7070 <p><code>predefined_string</code>, same as a string, but uses a value defined elsewhere</p>
7171
72 <p><code>alignment</code>, defined as: <code>["topleft", "top", "topright", "left", "center", "right", "bottomleft", "bottom", "bottomright"]</code></p>
72 <p><code>alignment</code>, defined as: <code>["topleft", "top", "topright", "left", "center", "right", "bottomleft", "bottom", "bottomright", "frame_topleft", "frame_top", "frame_topright", "frame_left", "frame_center", "frame_right", "frame_bottomleft", "frame_bottom", "frame_bottomright"]</code></p>
7373
7474 <p><code>direction</code>, defined as: <code>["N", "NE", "E", "SE", "S", "SW", "W", "NW", int]</code>. If defined as an integer, the value must be between 0-7 inclusive.</p>
7575
7777
7878 <p><code>label</code>, defined as: <code>"hidden"</code> <strong>or</strong> <code>int, int, ["left", "right", "center"], ["top", "center", "bottom"], string : X, Y, Justify, Vertical Align, Font style</code>. The font style can be any style defined in engine/font_settings.txt.</p>
7979
80 <p><code>loot</code>, defined as: <code>filename</code> <strong>or</strong> <code>["currency", item_id], ["fixed", int], int, int : Item, Drop chance, Min quantity, Max quantity</code>. There is a limitation when defining as part of a list(&hellip;): filenames can only be used in the first list element.</p>
80 <p><code>loot</code>, defined as: <code>filename</code> <strong>or</strong> <code>["currency", item_id], ["fixed", float], int, int : Item, Drop chance, Min quantity, Max quantity</code>. There is a limitation when defining as part of a list(&hellip;): filenames can only be used in the first list element.</p>
8181
8282 <p><code>version</code>, defined as: a string of three numbers, separated by dots (e.g. &ldquo;1.2.03&rdquo;)</p>
8383
8888
8989 <p>Description of animations in animations/</p>
9090
91 <p><strong>image</strong> | <code>filename</code> | Filename of sprite-sheet image.</p>
91 <p><strong>image</strong> | <code>filename, string : Filename, ID</code> | Filename of sprite-sheet image along with an identifier string. The identifier string may be omitted if there is only a single image.</p>
9292
9393 <p><strong>render_size</strong> | <code>int, int : Width, Height</code> | Width and height of animation.</p>
9494
110110
111111 <p><strong>animation.active_frame</strong> | <code>[list(int), "all"]</code> | A list of frames marked as &ldquo;active&rdquo;. Also, &ldquo;all&rdquo; can be used to mark all frames as active.</p>
112112
113 <p><strong>animation.frame</strong> | <code>int, int, int, int, int, int, int, int : Index, Direction, X, Y, Width, Height, X offset, Y offset</code> | A single frame of a compressed animation.</p>
113 <p><strong>animation.frame</strong> | <code>int, int, int, int, int, int, int, int, string : Index, Direction, X, Y, Width, Height, X offset, Y offset, Image ID</code> | A single frame of a compressed animation. The image ID may be omitted, in which case the first available image will be used.</p>
114114
115115 <hr />
116116
142142
143143 <p><strong>offset</strong> | <code>int</code> | The vertical offset for the combat text&rsquo;s starting position.</p>
144144
145 <p><strong>fade_duration</strong> | <code>duration</code> | How long the combat text will spend fading out in &lsquo;ms&rsquo; or &rsquo;s'.</p>
146
145147 <hr />
146148
147149 <h4>CursorManager</h4>
156158
157159 <p><strong>attack</strong> | <code>filename</code> | Filename of an image for the cursor when attacking enemies.</p>
158160
161 <p><strong>lowhp_normal</strong> | <code>filename</code> | Filename of an image for the normal cursor when health is low.</p>
162
163 <p><strong>lowhp_interact</strong> | <code>filename</code> | Filename of an image for the object interaction cursor when health is low.</p>
164
165 <p><strong>lowhp_talk</strong> | <code>filename</code> | Filename of an image for the NPC interaction cursor when health is low.</p>
166
167 <p><strong>lowhp_attack</strong> | <code>filename</code> | Filename of an image for the cursor when attacking enemies and health is low.</p>
168
159169 <hr />
160170
161171 <h4>EnemyGroupManager</h4>
206216
207217 <p><strong>save_pos_onexit</strong> | <code>bool</code> | If the game gets saved on exiting, store the player&rsquo;s current position instead of the map spawn position.</p>
208218
219 <p><strong>save_oncutscene</strong> | <code>bool</code> | Saves the game when triggering any cutscene via an Event.</p>
220
221 <p><strong>save_onstash</strong> | <code>[bool, "private", "shared"]</code> | Saves the game when changing the contents of a stash. The default is true (i.e. save when using both stash types). Use caution with the values &ldquo;private&rdquo; and false, since not saving shared stashes exposes an item duplication exploit.</p>
222
223 <p><strong>save_anywhere</strong> | <code>bool</code> | Saves the game when using a button.</p>
224
209225 <p><strong>camera_speed</strong> | <code>float</code> | Modifies how fast the camera moves to recenter on the player. Larger values mean a slower camera. Default value is 10.</p>
210226
211227 <p><strong>save_buyback</strong> | <code>bool</code> | Saves the vendor buyback stock whenever the game is saved.</p>
214230
215231 <p><strong>sfx_unable_to_cast</strong> | <code>filename</code> | Sound to play when the player lacks the MP to cast a power.</p>
216232
233 <p><strong>combat_aborts_npc_interact</strong> | <code>bool</code> | If true, the NPC dialog and vendor menus will be closed if the player is attacked.</p>
234
217235 <hr />
218236
219237 <h4>EngineSettings: Resolution</h4>
250268
251269 <p>Description of engine/combat.txt</p>
252270
253 <p><strong>absorb_percent</strong> | <code>int, int : Minimum, Maximum</code> | Limits the percentage of damage that can be absorbed.</p>
254
255 <p><strong>resist_percent</strong> | <code>int, int : Minimum, Maximum</code> | Limits the percentage of damage that can be resisted.</p>
256
257 <p><strong>block_percent</strong> | <code>int, int : Minimum, Maximum</code> | Limits the percentage of damage that can be blocked.</p>
271 <p><strong>absorb_percent</strong> | <code>int, int : Minimum, Maximum</code> | Limits the percentage of damage that can be absorbed. A max value less than 100 will ensure that the target always takes at least 1 damage from non-elemental attacks.</p>
272
273 <p><strong>resist_percent</strong> | <code>int, int : Minimum, Maximum</code> | Limits the percentage of damage that can be resisted. A max value less than 100 will ensure that the target always takes at least 1 damage from elemental attacks.</p>
274
275 <p><strong>block_percent</strong> | <code>int, int : Minimum, Maximum</code> | Limits the percentage of damage that can be absorbed when the target is in the &lsquo;block&rsquo; animation state. A max value less than 100 will ensure that the target always takes at least 1 damage from non-elemental attacks.</p>
258276
259277 <p><strong>avoidance_percent</strong> | <code>int, int : Minimum, Maximum</code> | Limits the percentage chance that damage will be avoided.</p>
260278
428446
429447 <p><strong>slot.quantity_label</strong> | <code>label</code> | Setting for the slot quantity text.</p>
430448
449 <p><strong>slot.quantity_color</strong> | <code>color</code> | Text color for the slot quantity text.</p>
450
431451 <p><strong>slot.quantity_bg_color</strong> | <code>color, int : Color, Alpha</code> | If a slot has a quantity, a rectangle filled with this color will be placed beneath the text.</p>
432452
453 <p><strong>slot.hotkey_label</strong> | <code>label</code> | Setting for the slot hotkey text.</p>
454
455 <p><strong>slot.hotkey_color</strong> | <code>color</code> | Text color for the slot hotkey text.</p>
456
457 <p><strong>slot.hotkey_bg_color</strong> | <code>color, int : Color, Alpha</code> | If a slot has a hotkey, a rectangle filled with this color will be placed beneath the text.</p>
458
433459 <p><strong>listbox.text_margin</strong> | <code>int, int : Left margin, Right margin</code> | The pixel margin to leave on the left and right sides of listbox element text.</p>
434460
461 <p><strong>horizontal_list.text_width</strong> | <code>int</code> | The pixel width of the text area that displays the currently selected item. Default is 150 pixels;</p>
462
435463 <hr />
436464
437465 <h4>EngineSettings: XP table</h4>
448476
449477 <p><strong>event.type</strong> | <code>string</code> | (IGNORED BY ENGINE) The &ldquo;type&rdquo; field, as used by Tiled and other mapping tools.</p>
450478
451 <p><strong>event.activate</strong> | <code>["on_trigger", "on_load", "on_leave", "on_mapexit", "on_clear", "static"]</code> | Set the state in which the event will be activated (map events only).</p>
479 <p><strong>event.activate</strong> | <code>["on_trigger", "on_interact", "on_load", "on_leave", "on_mapexit", "on_clear", "static"]</code> | Set the state in which the event will be activated (map events only). on_trigger = the player is standing in the event area or the player interacts with the hotspot. on_interact = the player ineracts with the hotspot. on_mapexit = as the player leaves the map. on_leave = as the player steps outside of an event area they were previously inside of. on_load = as the player enters a map. on_clear = all of the enemies on a map have been defeated. static = constantly, every frame.</p>
452480
453481 <p><strong>event.location</strong> | <code>rectangle</code> | Defines the location area for the event.</p>
454482
462490
463491 <p><strong>event.tooltip</strong> | <code>string</code> | Tooltip for event</p>
464492
465 <p><strong>event.power_path</strong> | <code>["hero", point]</code> | Event power path</p>
493 <p><strong>event.power_path</strong> | <code>int, int, ["hero", point] : Source X, Source Y, Destination</code> | Path that an event power will take.</p>
466494
467495 <p><strong>event.power_damage</strong> | <code>int, int : Min, Max</code> | Range of power damage</p>
468496
496524
497525 <p><strong>event.requires_not_currency</strong> | <code>int</code> | Event requires no more than this much currency</p>
498526
499 <p><strong>event.requires_item</strong> | <code>list(item_id)</code> | Event requires specific item (not equipped)</p>
500
501 <p><strong>event.requires_not_item</strong> | <code>list(item_id)</code> | Event requires not having a specific item (not equipped)</p>
527 <p><strong>event.requires_item</strong> | <code>list(item_id)</code> | Event requires specific item (not equipped). Quantity can be specified by appending &ldquo; Q&rdquo; to the item_id, where Q is an integer.</p>
528
529 <p><strong>event.requires_not_item</strong> | <code>list(item_id)</code> | Event requires not having a specific item (not equipped). Quantity can be specified by appending &ldquo; Q&rdquo; to the item_id, where Q is an integer.</p>
502530
503531 <p><strong>event.requires_class</strong> | <code>predefined_string</code> | Event requires this base class</p>
504532
510538
511539 <p><strong>event.remove_currency</strong> | <code>int</code> | Removes specified amount of currency from hero inventory</p>
512540
513 <p><strong>event.remove_item</strong> | <code>list(item_id)</code> | Removes specified item from hero inventory</p>
541 <p><strong>event.remove_item</strong> | <code>list(item_id)</code> | Removes specified item from hero inventory. Quantity can be specified by appending &ldquo; Q&rdquo; to the item_id, where Q is an integer.</p>
514542
515543 <p><strong>event.reward_xp</strong> | <code>int</code> | Reward hero with specified amount of experience points.</p>
516544
517545 <p><strong>event.reward_currency</strong> | <code>int</code> | Reward hero with specified amount of currency.</p>
518546
519 <p><strong>event.reward_item</strong> | <code>item_id, int : Item, Quantity</code> | Reward hero with y number of item x.</p>
547 <p><strong>event.reward_item</strong> | <code>(list(item_id)</code> | Reward hero with a specified item. Quantity can be specified by appending &ldquo; Q&rdquo; to the item_id, where Q is an integer. To maintain backwards compatibility, the quantity must be defined for at least the first item in the list in order to use this syntax.</p>
548
549 <p><strong>event.reward_item</strong> | <code>item_id, int : Item, Quantity</code> | Reward hero with y number of item x. NOTE This syntax is maintained for backwards compatibility. It is recommended to use the above syntax instead.</p>
520550
521551 <p><strong>event.reward_loot</strong> | <code>list(loot)</code> | Reward hero with random loot.</p>
522552
548578
549579 <p><strong>event.respec</strong> | <code>["xp", "stats", "powers"], bool : Respec mode, Ignore class defaults</code> | Resets various aspects of the character&rsquo;s progression. Resetting &ldquo;xp&rdquo; also resets &ldquo;stats&rdquo;. Resetting &ldquo;stats&rdquo; also resets &ldquo;powers&rdquo;.</p>
550580
581 <p><strong>event.show_on_minimap</strong> | <code>bool</code> | If true, this event will be shown on the minimap if it is the appropriate type (e.g. an intermap teleport).</p>
582
583 <p><strong>event.parallax_layers</strong> | <code>filename</code> | Filename of a parallax layers definition to load.</p>
584
551585 <hr />
552586
553587 <h4>EventManager: Random Map List</h4>
594628
595629 <hr />
596630
597 <h4>GameStateConfigBase</h4>
631 <h4>Cutscene</h4>
632
633 <p>Description of cutscenes in cutscenes/</p>
634
635 <p><strong>caption_margins</strong> | <code>float, float : X margin, Y margin</code> | Percentage-based margins for the caption text based on screen size</p>
636
637 <p><strong>caption_background</strong> | <code>color, int : Color, Alpha</code> | Color (RGBA) of the caption area background.</p>
638
639 <p><strong>vscroll_speed</strong> | <code>float</code> | The speed at which elements will scroll in &lsquo;vscroll&rsquo; scenes.</p>
640
641 <p><strong>menu_backgrounds</strong> | <code>bool</code> | This cutscene will use a random fullscreen background image, like the title screen does</p>
642
643 <p><strong>music</strong> | <code>filename</code> | The music file that will play during this cutscene.</p>
644
645 <p><strong>scene.caption</strong> | <code>string</code> | A caption that will be shown.</p>
646
647 <p><strong>scene.image</strong> | <code>filename, int : Filename, Scaling type</code> | Filename of an image that will be shown. The scaling type is a value between 0-2, corresponding to none, fit height, fit screen.</p>
648
649 <p><strong>scene.pause</strong> | <code>duration</code> | Pause before next component in &lsquo;ms&rsquo; or &rsquo;s'. A value of &lsquo;-1&rsquo; may be used to pause indefinitely.</p>
650
651 <p><strong>scene.soundfx</strong> | <code>filename</code> | Filename of a sound that will be played</p>
652
653 <p><strong>vscroll.text</strong> | <code>string</code> | A single, non-wrapping line of text.</p>
654
655 <p><strong>vscroll.image</strong> | <code>filename</code> | Filename of an image that will be shown.</p>
656
657 <p><strong>vscroll.separator</strong> | <code>int</code> | Places an invisible gap of a specified height between elements.</p>
658
659 <hr />
660
661 <h4>GameStateLoad</h4>
662
663 <p>Description of menus/gameload.txt</p>
664
665 <p><strong>button_new</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;New Game&rdquo; button.</p>
666
667 <p><strong>button_load</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;Load Game&rdquo; button.</p>
668
669 <p><strong>button_delete</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;Delete Save&rdquo; button.</p>
670
671 <p><strong>button_exit</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;Exit to Title&rdquo; button.</p>
672
673 <p><strong>portrait</strong> | <code>rectangle</code> | Position and dimensions of the portrait image.</p>
674
675 <p><strong>gameslot</strong> | <code>rectangle</code> | Position and dimensions of the first game slot.</p>
676
677 <p><strong>name</strong> | <code>label</code> | The label for the hero&rsquo;s name. Position is relative to game slot position.</p>
678
679 <p><strong>level</strong> | <code>label</code> | The label for the hero&rsquo;s level. Position is relative to game slot position.</p>
680
681 <p><strong>class</strong> | <code>label</code> | The label for the hero&rsquo;s class. Position is relative to game slot position.</p>
682
683 <p><strong>map</strong> | <code>label</code> | The label for the hero&rsquo;s current location. Position is relative to game slot position.</p>
684
685 <p><strong>slot_number</strong> | <code>label</code> | The label for the save slot index. Position is relative to game slot position.</p>
686
687 <p><strong>loading_label</strong> | <code>label</code> | The label for the &ldquo;Entering game world&hellip;&rdquo;/&ldquo;Loading saved game&hellip;&rdquo; text.</p>
688
689 <p><strong>sprite</strong> | <code>point</code> | Position for the avatar preview image in each slot</p>
690
691 <p><strong>visible_slots</strong> | <code>int</code> | The maximum numbers of visible save slots.</p>
692
693 <p><strong>text_trim_boundary</strong> | <code>int</code> | The position of the right-side boundary where text will be shortened with an ellipsis. Position is relative to game slot position.</p>
694
695 <hr />
696
697 <h4>GameStateNew: Layout</h4>
698
699 <p>Description of menus/gamenew.txt</p>
700
701 <p><strong>button_prev</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of button to choose the previous preset hero.</p>
702
703 <p><strong>button_next</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of button to choose the next preset hero.</p>
704
705 <p><strong>button_exit</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of &ldquo;Cancel&rdquo; button.</p>
706
707 <p><strong>button_create</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of &ldquo;Create&rdquo; button.</p>
708
709 <p><strong>button_permadeath</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of checkbox for toggling permadeath.</p>
710
711 <p><strong>button_randomize</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;Randomize&rdquo; button.</p>
712
713 <p><strong>name_input</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the hero name textbox.</p>
714
715 <p><strong>portrait_label</strong> | <code>label</code> | Label for the &ldquo;Choose a Portrait&rdquo; text.</p>
716
717 <p><strong>name_label</strong> | <code>label</code> | Label for the &ldquo;Choose a Name&rdquo; text.</p>
718
719 <p><strong>permadeath_label</strong> | <code>label</code> | Label for the &ldquo;Permadeath?&rdquo; text.</p>
720
721 <p><strong>classlist_label</strong> | <code>label</code> | Label for the &ldquo;Choose a Class&rdquo; text.</p>
722
723 <p><strong>classlist_height</strong> | <code>int</code> | Number of visible rows for the class list widget.</p>
724
725 <p><strong>portrait</strong> | <code>rectangle</code> | Position and dimensions of the portrait image.</p>
726
727 <p><strong>class_list</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the class list.</p>
728
729 <p><strong>show_classlist</strong> | <code>bool</code> | Allows hiding the class list.</p>
730
731 <p><strong>show_randomize</strong> | <code>bool</code> | Toggles the visibility of the &ldquo;Randomize&rdquo; button.</p>
732
733 <p><strong>random_option</strong> | <code>bool</code> | Initially picks a random character option (aka portrait/name).</p>
734
735 <p><strong>random_class</strong> | <code>bool</code> | Initially picks a random character class.</p>
736
737 <hr />
738
739 <h4>GameStateNew: Hero options</h4>
740
741 <p>Description of engine/hero_options.txt</p>
742
743 <p><strong>option</strong> | <code>int, string, string, filename, string : Index, Base, Head, Portrait, Name</code> | A default body, head, portrait, and name for a hero.</p>
744
745 <hr />
746
747 <h4>GameStatePlay: Titles</h4>
748
749 <p>Description of engine/titles.txt</p>
750
751 <p><strong>title.title</strong> | <code>string</code> | The displayed title.</p>
752
753 <p><strong>title.level</strong> | <code>int</code> | Requires level.</p>
754
755 <p><strong>title.power</strong> | <code>power_id</code> | Requires power.</p>
756
757 <p><strong>title.requires_status</strong> | <code>list(string)</code> | Requires status.</p>
758
759 <p><strong>title.requires_not_status</strong> | <code>list(string)</code> | Requires not status.</p>
760
761 <p><strong>title.primary_stat</strong> | <code>predefined_string, predefined_string : Primary stat, Lesser primary stat</code> | Required primary stat(s). The lesser stat is optional.</p>
762
763 <hr />
764
765 <h4>GameStateTitle</h4>
766
767 <p>Description of menus/gametitle.txt</p>
768
769 <p><strong>logo</strong> | <code>filename, int, int, alignment : Image file, X, Y, Alignment</code> | Filename and position of the main logo image.</p>
770
771 <p><strong>play_pos</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;Play Game&rdquo; button.</p>
772
773 <p><strong>config_pos</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;Configuration&rdquo; button.</p>
774
775 <p><strong>credits_pos</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;Credits&rdquo; button.</p>
776
777 <p><strong>exit_pos</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;Exit Game&rdquo; button.</p>
778
779 <hr />
780
781 <h4>GameSwitcher: Default music</h4>
782
783 <p>Description of engine/default_music.txt</p>
784
785 <p><strong>music</strong> | <code>filename</code> | Filename of a music file to play during game states that don&rsquo;t already have music.</p>
786
787 <hr />
788
789 <h4>GameSwitcher: Background images</h4>
790
791 <p>Description of engine/menu_backgrounds.txt</p>
792
793 <p><strong>background</strong> | <code>repeatable(filename)</code> | Filename of a background image to be added to the pool of random menu backgrounds</p>
794
795 <hr />
796
797 <h4>GameSwitcher: FPS counter</h4>
798
799 <p>Description of menus/fps.txt</p>
800
801 <p><strong>position</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the fps counter.</p>
802
803 <p><strong>color</strong> | <code>color</code> | Color of the fps counter text.</p>
804
805 <hr />
806
807 <h4>IconManager</h4>
808
809 <p>Description of engine/icons.txt</p>
810
811 <p><strong>icon_set</strong> | <code>repeatable(icon_id, filename) : First ID, Image file</code> | Defines an icon graphics file to load, as well as the index of the first icon.</p>
812
813 <p><strong>text_offset</strong> | <code>point</code> | A pixel offset from the top-left to place item quantity text on icons.</p>
814
815 <hr />
816
817 <h4>InputState: Default Keybindings</h4>
818
819 <p>Description of engine/default_keybindings.txt. Use <strong>-1</strong> for no binding. Keyboard values can be any of the key names listed in the <a href="https://wiki.libsdl.org/SDL_Keycode">SDL docs</a>. Mouse values are in the format <strong>mouse_0</strong>. Joystick buttons are in the format <strong>joy_0</strong>. Joystick axis are in the format <strong>axis_0-</strong> or <strong>axis_0+</strong>.</p>
820
821 <p><strong>default.cancel</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Cancel&rdquo;.</p>
822
823 <p><strong>default.accept</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Accept&rdquo;.</p>
824
825 <p><strong>default.up</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Up&rdquo;.</p>
826
827 <p><strong>default.down</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Down&rdquo;.</p>
828
829 <p><strong>default.left</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Left&rdquo;.</p>
830
831 <p><strong>default.right</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Right&rdquo;.</p>
832
833 <p><strong>default.bar1</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Bar1&rdquo;.</p>
834
835 <p><strong>default.bar2</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Bar2&rdquo;.</p>
836
837 <p><strong>default.bar3</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Bar3&rdquo;.</p>
838
839 <p><strong>default.bar4</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Bar4&rdquo;.</p>
840
841 <p><strong>default.bar5</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Bar5&rdquo;.</p>
842
843 <p><strong>default.bar6</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Bar6&rdquo;.</p>
844
845 <p><strong>default.bar7</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Bar7&rdquo;.</p>
846
847 <p><strong>default.bar8</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Bar8&rdquo;.</p>
848
849 <p><strong>default.bar9</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Bar9&rdquo;.</p>
850
851 <p><strong>default.bar0</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Bar0&rdquo;.</p>
852
853 <p><strong>default.main1</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Main1&rdquo;.</p>
854
855 <p><strong>default.main2</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Main2&rdquo;.</p>
856
857 <p><strong>default.character</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Character&rdquo;.</p>
858
859 <p><strong>default.inventory</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Inventory&rdquo;.</p>
860
861 <p><strong>default.powers</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Powers&rdquo;.</p>
862
863 <p><strong>default.log</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Log&rdquo;.</p>
864
865 <p><strong>default.ctrl</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Ctrl&rdquo;.</p>
866
867 <p><strong>default.shift</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Shift&rdquo;.</p>
868
869 <p><strong>default.alt</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Alt&rdquo;.</p>
870
871 <p><strong>default.delete</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Delete&rdquo;.</p>
872
873 <p><strong>default.actionbar</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Actionbar Accept&rdquo;.</p>
874
875 <p><strong>default.actionbar_back</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Actionbar Left&rdquo;.</p>
876
877 <p><strong>default.actionbar_forward</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Actionbar Right&rdquo;.</p>
878
879 <p><strong>default.actionbar_use</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Actionbar Use&rdquo;.</p>
880
881 <p><strong>default.developer_menu</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Developer Menu&rdquo;.</p>
882
883 <hr />
884
885 <h4>ItemManager: Items</h4>
886
887 <p>Description about the class and it usage, items/items.txt&hellip;</p>
888
889 <p><strong>id</strong> | <code>item_id</code> | An uniq id of the item used as reference from other classes.</p>
890
891 <p><strong>name</strong> | <code>string</code> | Item name displayed on long and short tooltips.</p>
892
893 <p><strong>flavor</strong> | <code>string</code> | A description of the item.</p>
894
895 <p><strong>level</strong> | <code>int</code> | The item&rsquo;s level. Has no gameplay impact. (Deprecated?)</p>
896
897 <p><strong>icon</strong> | <code>icon_id</code> | An id for the icon to display for this item.</p>
898
899 <p><strong>book</strong> | <code>filename</code> | A book file to open when this item is activated.</p>
900
901 <p><strong>book_is_readable</strong> | <code>bool</code> | If true, &ldquo;read&rdquo; is displayed in the tooltip instead of &ldquo;use&rdquo;. Defaults to true.</p>
902
903 <p><strong>quality</strong> | <code>predefined_string</code> | Item quality matching an id in items/qualities.txt</p>
904
905 <p><strong>item_type</strong> | <code>predefined_string</code> | Equipment slot matching an id in items/types.txt</p>
906
907 <p><strong>equip_flags</strong> | <code>list(predefined_string)</code> | A comma separated list of flags to set when this item is equipped. See engine/equip_flags.txt.</p>
908
909 <p><strong>dmg</strong> | <code>predefined_string, int, int : Damage type, Min, Max</code> | Defines the item&rsquo;s base damage type and range. Max may be ommitted and will default to Min.</p>
910
911 <p><strong>abs</strong> | <code>int, int : Min, Max</code> | Defines the item absorb value, if only min is specified the absorb value is fixed.</p>
912
913 <p><strong>requires_level</strong> | <code>int</code> | The hero&rsquo;s level must match or exceed this value in order to equip this item.</p>
914
915 <p><strong>requires_stat</strong> | <code>repeatable(predefined_string, int) : Primary stat name, Value</code> | Make item require specific stat level ex. requires_stat=physical,6 will require hero to have level 6 in physical stats</p>
916
917 <p><strong>requires_class</strong> | <code>predefined_string</code> | The hero&rsquo;s base class (engine/classes.txt) must match for this item to be equipped.</p>
918
919 <p><strong>bonus</strong> | <code>repeatable(predefined_string, int) : Stat name, Value</code> | Adds a bonus to the item by stat name, example bonus=hp, 50</p>
920
921 <p><strong>bonus_power_level</strong> | <code>repeatable(power_id, int) : Base power, Bonus levels</code> | Grants bonus levels to a given base power.</p>
922
923 <p><strong>soundfx</strong> | <code>filename</code> | Sound effect filename to play for the specific item.</p>
924
925 <p><strong>gfx</strong> | <code>filename</code> | Filename of an animation set to display when the item is equipped.</p>
926
927 <p><strong>loot_animation</strong> | <code>repeatable(filename, int, int) : Loot image, Min quantity, Max quantity</code> | Specifies the loot animation file for the item. The max quantity, or both quantity values, may be omitted.</p>
928
929 <p><strong>power</strong> | <code>power_id</code> | Adds a specific power to the item which makes it usable as a power and can be placed in action bar.</p>
930
931 <p><strong>replace_power</strong> | <code>repeatable(int, int) : Old power, New power</code> | Replaces the old power id with the new power id in the action bar when equipped.</p>
932
933 <p><strong>power_desc</strong> | <code>string</code> | A string describing the additional power.</p>
934
935 <p><strong>price</strong> | <code>int</code> | The amount of currency the item costs, if set to 0 the item cannot be sold.</p>
936
937 <p><strong>price_per_level</strong> | <code>int</code> | Additional price for each player level above 1</p>
938
939 <p><strong>price_sell</strong> | <code>int</code> | The amount of currency the item is sold for, if set to 0 the sell prices is prices*vendor_ratio.</p>
940
941 <p><strong>max_quantity</strong> | <code>int</code> | Max item count per stack.</p>
942
943 <p><strong>pickup_status</strong> | <code>string</code> | Set a campaign status when item is picked up, this is used for quest items.</p>
944
945 <p><strong>stepfx</strong> | <code>predefined_string</code> | Sound effect when walking, this applies only to armors.</p>
946
947 <p><strong>disable_slots</strong> | <code>list(predefined_string)</code> | A comma separated list of equip slot types to disable when this item is equipped.</p>
948
949 <p><strong>quest_item</strong> | <code>bool</code> | If true, this item is a quest item and can not be dropped or sold. The item also can&rsquo;t be stashed, unless the no_stash property is set to something other than &ldquo;all&rdquo;.</p>
950
951 <p><strong>no_stash</strong> | <code>["ignore", "private", "shared", "all"]</code> | If not set to &lsquo;ignore&rsquo;, this item will not be able to be put in the corresponding stash.</p>
952
953 <p><strong>item.script</strong> | <code>filename</code> | Loads and executes a script file when the item is activated from the player&rsquo;s inventory.</p>
954
955 <hr />
956
957 <h4>ItemManager: Types</h4>
958
959 <p>Definition of a item types, items/types.txt&hellip;</p>
960
961 <p><strong>type.id</strong> | <code>string</code> | Item type identifier.</p>
962
963 <p><strong>type.name</strong> | <code>string</code> | Item type name.</p>
964
965 <hr />
966
967 <h4>ItemManager: Qualities</h4>
968
969 <p>Definition of a item qualities, items/types.txt&hellip;</p>
970
971 <p><strong>quality.id</strong> | <code>string</code> | Item quality identifier.</p>
972
973 <p><strong>quality.name</strong> | <code>string</code> | Item quality name.</p>
974
975 <p><strong>quality.color</strong> | <code>color</code> | Item quality color.</p>
976
977 <p><strong>quality.overlay_icon</strong> | <code>icon_id</code> | The icon to be used as an overlay.</p>
978
979 <hr />
980
981 <h4>ItemManager: Sets</h4>
982
983 <p>Definition of a item sets, items/sets.txt&hellip;</p>
984
985 <p><strong>id</strong> | <code>int</code> | A uniq id for the item set.</p>
986
987 <p><strong>name</strong> | <code>string</code> | Name of the item set.</p>
988
989 <p><strong>items</strong> | <code>list(item_id)</code> | List of item id&rsquo;s that is part of the set.</p>
990
991 <p><strong>color</strong> | <code>color</code> | A specific of color for the set.</p>
992
993 <p><strong>bonus</strong> | <code>repeatable(int, string, int) : Required set item count, Stat name, Value</code> | Bonus to append to items in the set.</p>
994
995 <p><strong>bonus_power_level</strong> | <code>repeatable(int, power_id, int) : Required set item count, Base power, Bonus levels</code> | Grants bonus levels to a given base power.</p>
996
997 <hr />
998
999 <h4>Map</h4>
1000
1001 <p>Description of maps/</p>
1002
1003 <p><strong>title</strong> | <code>string</code> | Title of map</p>
1004
1005 <p><strong>width</strong> | <code>int</code> | Width of map</p>
1006
1007 <p><strong>height</strong> | <code>int</code> | Height of map</p>
1008
1009 <p><strong>tileset</strong> | <code>filename</code> | Filename of a tileset definition to use for map</p>
1010
1011 <p><strong>music</strong> | <code>filename</code> | Filename of background music to use for map</p>
1012
1013 <p><strong>hero_pos</strong> | <code>point</code> | The player will spawn in this location if no point was previously given.</p>
1014
1015 <p><strong>parallax_layers</strong> | <code>filename</code> | Filename of a parallax layers definition.</p>
1016
1017 <p><strong>background_color</strong> | <code>color, int : Color, alpha</code> | Background color for the map.</p>
1018
1019 <p><strong>tilewidth</strong> | <code>int</code> | Inherited from Tiled map file. Unused by engine.</p>
1020
1021 <p><strong>tileheight</strong> | <code>int</code> | Inherited from Tiled map file. Unused by engine.</p>
1022
1023 <p><strong>layer.type</strong> | <code>string</code> | Map layer type.</p>
1024
1025 <p><strong>layer.format</strong> | <code>string</code> | Format for map layer, must be &lsquo;dec&rsquo;</p>
1026
1027 <p><strong>layer.data</strong> | <code>raw</code> | Raw map layer data</p>
1028
1029 <p><strong>enemygroup.type</strong> | <code>string</code> | (IGNORED BY ENGINE) The &ldquo;type&rdquo; field, as used by Tiled and other mapping tools.</p>
1030
1031 <p><strong>enemygroup.category</strong> | <code>predefined_string</code> | The category of enemies that will spawn in this group.</p>
1032
1033 <p><strong>enemygroup.level</strong> | <code>int, int : Min, Max</code> | Defines the level range of enemies in group. If only one number is given, it&rsquo;s the exact level.</p>
1034
1035 <p><strong>enemygroup.location</strong> | <code>rectangle</code> | Location area for enemygroup</p>
1036
1037 <p><strong>enemygroup.number</strong> | <code>int, int : Min, Max</code> | Defines the range of enemies in group. If only one number is given, it&rsquo;s the exact amount.</p>
1038
1039 <p><strong>enemygroup.chance</strong> | <code>int</code> | Percentage of chance</p>
1040
1041 <p><strong>enemygroup.direction</strong> | <code>direction</code> | Direction that enemies will initially face.</p>
1042
1043 <p><strong>enemygroup.waypoints</strong> | <code>list(point)</code> | Enemy waypoints; single enemy only; negates wander_radius</p>
1044
1045 <p><strong>enemygroup.wander_radius</strong> | <code>int</code> | The radius (in tiles) that an enemy will wander around randomly; negates waypoints</p>
1046
1047 <p><strong>enemygroup.requires_status</strong> | <code>list(string)</code> | Status required for loading enemies</p>
1048
1049 <p><strong>enemygroup.requires_not_status</strong> | <code>list(string)</code> | Status required to be missing for loading enemies</p>
1050
1051 <p><strong>enemygroup.invincible_requires_status</strong> | <code>list(string)</code> | Enemies in this group are invincible to hero attacks when these statuses are set.</p>
1052
1053 <p><strong>enemygroup.invincible_requires_not_status</strong> | <code>list(string)</code> | Enemies in this group are invincible to hero attacks when these statuses are not set.</p>
1054
1055 <p><strong>npc.type</strong> | <code>string</code> | (IGNORED BY ENGINE) The &ldquo;type&rdquo; field, as used by Tiled and other mapping tools.</p>
1056
1057 <p><strong>npc.filename</strong> | <code>string</code> | Filename of an NPC definition.</p>
1058
1059 <p><strong>npc.requires_status</strong> | <code>list(string)</code> | Status required for NPC load. There can be multiple states, separated by comma</p>
1060
1061 <p><strong>npc.requires_not_status</strong> | <code>list(string)</code> | Status required to be missing for NPC load. There can be multiple states, separated by comma</p>
1062
1063 <p><strong>npc.location</strong> | <code>point</code> | Location of NPC</p>
1064
1065 <hr />
1066
1067 <h4>MapParallax</h4>
1068
1069 <p>Description of maps/parallax/</p>
1070
1071 <p><strong>layer.image</strong> | <code>filename</code> | Image file to use as a scrolling background.</p>
1072
1073 <p><strong>layer.speed</strong> | <code>float</code> | Speed at which the background will move relative to the camera.</p>
1074
1075 <p><strong>layer.fixed_speed</strong> | <code>float, float : X speed, Y speed</code> | Speed at which the background will move independent of the camera movement.</p>
1076
1077 <p><strong>layer.map_layer</strong> | <code>string</code> | The tile map layer that this parallax layer will be rendered on top of.</p>
1078
1079 <hr />
1080
1081 <h4>MenuActionBar</h4>
1082
1083 <p>Description of menus/actionbar.txt</p>
1084
1085 <p><strong>slot</strong> | <code>repeatable(int, int, int, bool) : Index, X, Y, Locked</code> | Index (max 10) and position for power slot. If a slot is locked, its Power can&rsquo;t be changed by the player.</p>
1086
1087 <p><strong>slot_M1</strong> | <code>point, bool : Position, Locked</code> | Position for the primary action slot. If the slot is locked, its Power can&rsquo;t be changed by the player.</p>
1088
1089 <p><strong>slot_M2</strong> | <code>point, bool : Position Locked</code> | Position for the secondary action slot. If the slot is locked, its Power can&rsquo;t be changed by the player.</p>
1090
1091 <p><strong>char_menu</strong> | <code>point</code> | Position for the Character menu button.</p>
1092
1093 <p><strong>inv_menu</strong> | <code>point</code> | Position for the Inventory menu button.</p>
1094
1095 <p><strong>powers_menu</strong> | <code>point</code> | Position for the Powers menu button.</p>
1096
1097 <p><strong>log_menu</strong> | <code>point</code> | Position for the Log menu button.</p>
1098
1099 <p><strong>tooltip_length</strong> | <code>["short", "long_menu", "long_all"]</code> | The length of power descriptions in tooltips. &lsquo;short&rsquo; will display only the power name. &lsquo;long_menu&rsquo; (the default setting) will display full tooltips, but only for powers that are in the Powers menu. &lsquo;long_all&rsquo; will display full tooltips for all powers.</p>
1100
1101 <hr />
1102
1103 <h4>MenuActiveEffects</h4>
1104
1105 <p>Description of menus/activeeffects.txt</p>
1106
1107 <p><strong>vertical</strong> | <code>bool</code> | True is vertical orientation; False is horizontal orientation.</p>
1108
1109 <hr />
1110
1111 <h4>MenuBook</h4>
1112
1113 <p>Description of books in books/</p>
1114
1115 <p><strong>close</strong> | <code>point</code> | Position of the close button.</p>
1116
1117 <p><strong>background</strong> | <code>filename</code> | Filename for the background image.</p>
1118
1119 <p><strong>image.image_pos</strong> | <code>point</code> | Position of the image.</p>
1120
1121 <p><strong>image.image</strong> | <code>filename</code> | Filename of the image.</p>
1122
1123 <p><strong>image_icon</strong> | <code>icon_id</code> | Use an icon as the image instead of a file.</p>
1124
1125 <p><strong>image.requires_status</strong> | <code>list(string)</code> | Image requires these campaign statuses in order to be visible.</p>
1126
1127 <p><strong>image.requires_not_status</strong> | <code>list(string)</code> | Image must not have any of these campaign statuses in order to be visible.</p>
1128
1129 <p><strong>text.text_pos</strong> | <code>int, int, int, ["left", "center", "right"] : X, Y, Width, Text justify</code> | Position of the text.</p>
1130
1131 <p><strong>text.text_font</strong> | <code>color, string : Font color, Font style</code> | Font color and style.</p>
1132
1133 <p><strong>text.shadow</strong> | <code>bool</code> | If true, the text will have a black shadow like the text labels in various menus.</p>
1134
1135 <p><strong>text.text</strong> | <code>string</code> | The text to be displayed.</p>
1136
1137 <p><strong>text.requires_status</strong> | <code>list(string)</code> | Text requires these campaign statuses in order to be visible.</p>
1138
1139 <p><strong>text.requires_not_status</strong> | <code>list(string)</code> | Text must not have any of these campaign statuses in order to be visible.</p>
1140
1141 <p><strong>button.button_pos</strong> | <code>point</code> | Position of the button.</p>
1142
1143 <p><strong>button.button_image</strong> | <code>filename</code> | Image file to use for this button. Default is the normal menu button.</p>
1144
1145 <p><strong>button.text</strong> | <code>string</code> | Optional text label for the button.</p>
1146
1147 <p><strong>book.${EVENT_COMPONENT}</strong> | <code>Event components to execute when the button is clicked. See the definitions in EventManager for possible attributes.</code> |</p>
1148
1149 <p><strong>event_open.${EVENT_COMPONENT}</strong> | <code>Event components to execute when the book is opened. See the definitions in EventManager for possible attributes.</code> |</p>
1150
1151 <p><strong>event_close.${EVENT_COMPONENT}</strong> | <code>Event components to execute when the book is closed. See the definitions in EventManager for possible attributes.</code> |</p>
1152
1153 <hr />
1154
1155 <h4>MenuCharacter</h4>
1156
1157 <p>Description of menus/character.txt</p>
1158
1159 <p><strong>close</strong> | <code>point</code> | Position of the close button.</p>
1160
1161 <p><strong>label_title</strong> | <code>label</code> | Position of the &ldquo;Character&rdquo; text.</p>
1162
1163 <p><strong>upgrade_primary</strong> | <code>predefined_string, point : Primary stat name, Button position</code> | Position of the button used to add a stat point to this primary stat.</p>
1164
1165 <p><strong>statlist</strong> | <code>point</code> | Position of the scrollbox containing non-primary stats.</p>
1166
1167 <p><strong>statlist_rows</strong> | <code>int</code> | The height of the statlist in rows.</p>
1168
1169 <p><strong>statlist_scrollbar_offset</strong> | <code>int</code> | Right margin in pixels for the statlist&rsquo;s scrollbar.</p>
1170
1171 <p><strong>label_name</strong> | <code>label</code> | Position of the &ldquo;Name&rdquo; text.</p>
1172
1173 <p><strong>label_level</strong> | <code>label</code> | Position of the &ldquo;Level&rdquo; text.</p>
1174
1175 <p><strong>label_primary</strong> | <code>predefined_string, label : Primary stat name, Text positioning</code> | Position of the text label for this primary stat.</p>
1176
1177 <p><strong>name</strong> | <code>rectangle</code> | Position of the player&rsquo;s name and dimensions of the tooltip hotspot.</p>
1178
1179 <p><strong>level</strong> | <code>rectangle</code> | Position of the player&rsquo;s level and dimensions of the tooltip hotspot.</p>
1180
1181 <p><strong>primary</strong> | <code>predefined_string, rectangle : Primary stat name, Hotspot position</code> | Position of this primary stat value display and dimensions of its tooltip hotspot.</p>
1182
1183 <p><strong>unspent</strong> | <code>label</code> | Position of the label showing the number of unspent stat points.</p>
1184
1185 <p><strong>show_resists</strong> | <code>bool</code> | Hide the elemental &ldquo;Resistance&rdquo; stats in the statlist if set to false.</p>
1186
1187 <p><strong>show_stat</strong> | <code>predefined_string, bool : Stat name / Damage type, Visible</code> | Hide the matching stat or damage type min/max in the statlist if set to false.</p>
1188
1189 <p><strong>name_max_width</strong> | <code>int</code> | The maxiumum width, in pixels, that the character name can occupy until it is abbreviated.</p>
1190
1191 <hr />
1192
1193 <h4>MenuConfig</h4>
5981194
5991195 <p>Description of menus/config.txt</p>
6001196
601 <p><strong>button_ok</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;OK&rdquo; button.</p>
602
603 <p><strong>button_defaults</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;Defaults&rdquo; button.</p>
604
605 <p><strong>button_cancel</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;Cancel&rdquo; button.</p>
1197 <p><strong>button_ok</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;OK&rdquo; button. Not used in the pause menu.</p>
1198
1199 <p><strong>button_defaults</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;Defaults&rdquo; button. Not used in the pause menu.</p>
1200
1201 <p><strong>button_cancel</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;Cancel&rdquo; button. Not used in the pause menu.</p>
6061202
6071203 <p><strong>listbox_scrollbar_offset</strong> | <code>int</code> | Horizontal offset from the right of listboxes (mods, languages, etc) to place the scrollbar.</p>
6081204
6101206
6111207 <p><strong>tab_offset</strong> | <code>point</code> | Offset for the row of tabs.</p>
6121208
613 <p><strong>music_volume</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Music Volume&rdquo; slider relative to the frame.</p>
614
615 <p><strong>sound_volume</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Sound Volume&rdquo; slider relative to the frame.</p>
616
617 <p><strong>language</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Language&rdquo; list box relative to the frame.</p>
618
619 <p><strong>language_height</strong> | <code>int</code> | Number of visible rows for the &ldquo;Language&rdquo; list box.</p>
620
621 <p><strong>show_fps</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Show FPS&rdquo; checkbox relative to the frame.</p>
622
623 <p><strong>colorblind</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Colorblind Mode&rdquo; checkbox relative to the frame.</p>
624
625 <p><strong>hardware_cursor</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Hardware mouse cursor&rdquo; checkbox relative to the frame.</p>
626
627 <p><strong>dev_mode</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Developer Mode&rdquo; checkbox relative to the frame.</p>
628
629 <p><strong>subtitles</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Subtitles&rdquo; checkbox relative to the frame.</p>
630
6311209 <p><strong>activemods</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Active Mods&rdquo; list box relative to the frame.</p>
6321210
6331211 <p><strong>activemods_height</strong> | <code>int</code> | Number of visible rows for the &ldquo;Active Mods&rdquo; list box.</p>
6441222
6451223 <p><strong>inactivemods_activate</strong> | <code>point</code> | Position of the &ldquo;Enable&rdquo; button relative to the frame.</p>
6461224
647 <hr />
648
649 <h4>GameStateConfigDesktop</h4>
650
651 <p>Description of menus/config.txt</p>
652
653 <p><strong>renderer</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Renderer&rdquo; list box relative to the frame.</p>
654
655 <p><strong>renderer_height</strong> | <code>int</code> | Number of visible rows for the &ldquo;Renderer&rdquo; list box.</p>
656
657 <p><strong>fullscreen</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Full Screen Mode&rdquo; checkbox relative to the frame.</p>
658
659 <p><strong>mouse_move</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Move hero using mouse&rdquo; checkbox relative to the frame.</p>
660
661 <p><strong>hwsurface</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Hardware surfaces&rdquo; checkbox relative to the frame.</p>
662
663 <p><strong>vsync</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;V-Sync&rdquo; checkbox relative to the frame.</p>
664
665 <p><strong>texture_filter</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Texture Filtering&rdquo; checkbox relative to the frame.</p>
666
667 <p><strong>dpi_scaling</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;DPI scaling&rdquo; checkbox relative to the frame.</p>
668
669 <p><strong>parallax_layers</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Parallax Layers&rdquo; checkbox relative to the frame.</p>
670
671 <p><strong>change_gamma</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Allow changing gamma&rdquo; checkbox relative to the frame.</p>
672
673 <p><strong>gamma</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Gamma&rdquo; slider relative to the frame.</p>
674
675 <p><strong>enable_joystick</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Use joystick&rdquo; checkbox relative to the frame.</p>
676
677 <p><strong>joystick_device</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Joystick&rdquo; list box relative to the frame.</p>
678
679 <p><strong>joystick_device_height</strong> | <code>int</code> | Number of visible rows for the &ldquo;Joystick&rdquo; list box.</p>
680
681 <p><strong>mouse_aim</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Mouse aim&rdquo; checkbox relative to the frame.</p>
682
683 <p><strong>no_mouse</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Do not use mouse&rdquo; checkbox relative to the frame.</p>
684
685 <p><strong>mouse_move_swap</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Swap mouse movement button&rdquo; checkbox relative to the frame.</p>
686
687 <p><strong>mouse_move_attack</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Attack with mouse movement&rdquo; checkbox relative to the frame.</p>
688
689 <p><strong>joystick_deadzone</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Joystick Deadzone&rdquo; slider relative to the frame.</p>
690
691 <p><strong>secondary_offset</strong> | <code>point</code> | Offset of the second (and third) columns of keybinds.</p>
692
693 <p><strong>keybinds_bg_color</strong> | <code>color</code> | Background color for the keybindings scrollbox.</p>
694
695 <p><strong>keybinds_bg_alpha</strong> | <code>int</code> | Alpha value for the keybindings scrollbox background color.</p>
696
6971225 <p><strong>scrollpane</strong> | <code>rectangle</code> | Position of the keybinding scrollbox relative to the frame.</p>
6981226
699 <p><strong>scrollpane_contents</strong> | <code>int</code> | The vertical size of the keybinding scrollbox&rsquo;s contents.</p>
700
701 <p><strong>cancel</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Cancel&rdquo; keybind relative to the keybinding scrollbox.</p>
702
703 <p><strong>accept</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Accept&rdquo; keybind relative to the keybinding scrollbox.</p>
704
705 <p><strong>up</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Up&rdquo; keybind relative to the keybinding scrollbox.</p>
706
707 <p><strong>down</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Down&rdquo; keybind relative to the keybinding scrollbox.</p>
708
709 <p><strong>left</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Left&rdquo; keybind relative to the keybinding scrollbox.</p>
710
711 <p><strong>right</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Right&rdquo; keybind relative to the keybinding scrollbox.</p>
712
713 <p><strong>bar1</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Bar1&rdquo; keybind relative to the keybinding scrollbox.</p>
714
715 <p><strong>bar2</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Bar2&rdquo; keybind relative to the keybinding scrollbox.</p>
716
717 <p><strong>bar3</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Bar3&rdquo; keybind relative to the keybinding scrollbox.</p>
718
719 <p><strong>bar4</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Bar4&rdquo; keybind relative to the keybinding scrollbox.</p>
720
721 <p><strong>bar5</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Bar5&rdquo; keybind relative to the keybinding scrollbox.</p>
722
723 <p><strong>bar6</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Bar6&rdquo; keybind relative to the keybinding scrollbox.</p>
724
725 <p><strong>bar7</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Bar7&rdquo; keybind relative to the keybinding scrollbox.</p>
726
727 <p><strong>Bar8</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Bar8&rdquo; keybind relative to the keybinding scrollbox.</p>
728
729 <p><strong>bar9</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Bar9&rdquo; keybind relative to the keybinding scrollbox.</p>
730
731 <p><strong>bar0</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Bar0&rdquo; keybind relative to the keybinding scrollbox.</p>
732
733 <p><strong>main1</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Main1&rdquo; keybind relative to the keybinding scrollbox.</p>
734
735 <p><strong>main2</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Main2&rdquo; keybind relative to the keybinding scrollbox.</p>
736
737 <p><strong>character</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Character&rdquo; keybind relative to the keybinding scrollbox.</p>
738
739 <p><strong>inventory</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Inventory&rdquo; keybind relative to the keybinding scrollbox.</p>
740
741 <p><strong>powers</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Powers&rdquo; keybind relative to the keybinding scrollbox.</p>
742
743 <p><strong>log</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Log&rdquo; keybind relative to the keybinding scrollbox.</p>
744
745 <p><strong>ctrl</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Ctrl&rdquo; keybind relative to the keybinding scrollbox.</p>
746
747 <p><strong>shift</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Shift&rdquo; keybind relative to the keybinding scrollbox.</p>
748
749 <p><strong>alt</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Alt&rdquo; keybind relative to the keybinding scrollbox.</p>
750
751 <p><strong>delete</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Delete&rdquo; keybind relative to the keybinding scrollbox.</p>
752
753 <p><strong>actionbar</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;ActionBar Accept&rdquo; keybind relative to the keybinding scrollbox.</p>
754
755 <p><strong>actionbar_back</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;ActionBar Left&rdquo; keybind relative to the keybinding scrollbox.</p>
756
757 <p><strong>actionbar_forward</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;ActionBar Right&rdquo; keybind relative to the keybinding scrollbox.</p>
758
759 <p><strong>actionbar_use</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;ActionBar Use&rdquo; keybind relative to the keybinding scrollbox.</p>
760
761 <p><strong>developer_menu</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Developer Menu&rdquo; keybind relative to the keybinding scrollbox.</p>
762
763 <hr />
764
765 <h4>Cutscene</h4>
766
767 <p>Description of cutscenes in cutscenes/</p>
768
769 <p><strong>caption_margins</strong> | <code>float, float : X margin, Y margin</code> | Percentage-based margins for the caption text based on screen size</p>
770
771 <p><strong>caption_background</strong> | <code>color, int : Color, Alpha</code> | Color (RGBA) of the caption area background.</p>
772
773 <p><strong>vscroll_speed</strong> | <code>float</code> | The speed at which elements will scroll in &lsquo;vscroll&rsquo; scenes.</p>
774
775 <p><strong>menu_backgrounds</strong> | <code>bool</code> | This cutscene will use a random fullscreen background image, like the title screen does</p>
776
777 <p><strong>music</strong> | <code>filename</code> | The music file that will play during this cutscene.</p>
778
779 <p><strong>scene.caption</strong> | <code>string</code> | A caption that will be shown.</p>
780
781 <p><strong>scene.image</strong> | <code>filename, int : Filename, Scaling type</code> | Filename of an image that will be shown. The scaling type is a value between 0-2, corresponding to none, fit height, fit screen.</p>
782
783 <p><strong>scene.pause</strong> | <code>duration</code> | Pause before next component in &lsquo;ms&rsquo; or &rsquo;s'. A value of &lsquo;-1&rsquo; may be used to pause indefinitely.</p>
784
785 <p><strong>scene.soundfx</strong> | <code>filename</code> | Filename of a sound that will be played</p>
786
787 <p><strong>vscroll.text</strong> | <code>string</code> | A single, non-wrapping line of text.</p>
788
789 <p><strong>vscroll.image</strong> | <code>filename</code> | Filename of an image that will be shown.</p>
790
791 <p><strong>vscroll.separator</strong> | <code>int</code> | Places an invisible gap of a specified height between elements.</p>
792
793 <hr />
794
795 <h4>GameStateLoad</h4>
796
797 <p>Description of menus/gameload.txt</p>
798
799 <p><strong>button_new</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;New Game&rdquo; button.</p>
800
801 <p><strong>button_load</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;Load Game&rdquo; button.</p>
802
803 <p><strong>button_delete</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;Delete Save&rdquo; button.</p>
804
805 <p><strong>button_exit</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;Exit to Title&rdquo; button.</p>
806
807 <p><strong>portrait</strong> | <code>rectangle</code> | Position and dimensions of the portrait image.</p>
808
809 <p><strong>gameslot</strong> | <code>rectangle</code> | Position and dimensions of the first game slot.</p>
810
811 <p><strong>name</strong> | <code>label</code> | The label for the hero&rsquo;s name. Position is relative to game slot position.</p>
812
813 <p><strong>level</strong> | <code>label</code> | The label for the hero&rsquo;s level. Position is relative to game slot position.</p>
814
815 <p><strong>class</strong> | <code>label</code> | The label for the hero&rsquo;s class. Position is relative to game slot position.</p>
816
817 <p><strong>map</strong> | <code>label</code> | The label for the hero&rsquo;s current location. Position is relative to game slot position.</p>
818
819 <p><strong>slot_number</strong> | <code>label</code> | The label for the save slot index. Position is relative to game slot position.</p>
820
821 <p><strong>loading_label</strong> | <code>label</code> | The label for the &ldquo;Entering game world&hellip;&rdquo;/&ldquo;Loading saved game&hellip;&rdquo; text.</p>
822
823 <p><strong>sprite</strong> | <code>point</code> | Position for the avatar preview image in each slot</p>
824
825 <p><strong>visible_slots</strong> | <code>int</code> | The maximum numbers of visible save slots.</p>
826
827 <p><strong>text_trim_boundary</strong> | <code>int</code> | The position of the right-side boundary where text will be shortened with an ellipsis. Position is relative to game slot position.</p>
828
829 <hr />
830
831 <h4>GameStateNew: Layout</h4>
832
833 <p>Description of menus/gamenew.txt</p>
834
835 <p><strong>button_prev</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of button to choose the previous preset hero.</p>
836
837 <p><strong>button_next</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of button to choose the next preset hero.</p>
838
839 <p><strong>button_exit</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of &ldquo;Cancel&rdquo; button.</p>
840
841 <p><strong>button_create</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of &ldquo;Create&rdquo; button.</p>
842
843 <p><strong>button_permadeath</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of checkbox for toggling permadeath.</p>
844
845 <p><strong>bytton_randomize</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;Randomize&rdquo; button.</p>
846
847 <p><strong>name_input</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the hero name textbox.</p>
848
849 <p><strong>portrait_label</strong> | <code>label</code> | Label for the &ldquo;Choose a Portrait&rdquo; text.</p>
850
851 <p><strong>name_label</strong> | <code>label</code> | Label for the &ldquo;Choose a Name&rdquo; text.</p>
852
853 <p><strong>permadeath_label</strong> | <code>label</code> | Label for the &ldquo;Permadeath?&rdquo; text.</p>
854
855 <p><strong>classlist_label</strong> | <code>label</code> | Label for the &ldquo;Choose a Class&rdquo; text.</p>
856
857 <p><strong>classlist_height</strong> | <code>int</code> | Number of visible rows for the class list widget.</p>
858
859 <p><strong>portrait</strong> | <code>rectangle</code> | Position and dimensions of the portrait image.</p>
860
861 <p><strong>class_list</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the class list.</p>
862
863 <p><strong>show_classlist</strong> | <code>bool</code> | Allows hiding the class list.</p>
864
865 <p><strong>random_option</strong> | <code>bool</code> | Initially picks a random character option (aka portrait/name).</p>
866
867 <p><strong>random_class</strong> | <code>bool</code> | Initially picks a random character class.</p>
868
869 <hr />
870
871 <h4>GameStateNew: Hero options</h4>
872
873 <p>Description of engine/hero_options.txt</p>
874
875 <p><strong>option</strong> | <code>int, string, string, filename, string : Index, Base, Head, Portrait, Name</code> | A default body, head, portrait, and name for a hero.</p>
876
877 <hr />
878
879 <h4>GameStatePlay: Titles</h4>
880
881 <p>Description of engine/titles.txt</p>
882
883 <p><strong>title.title</strong> | <code>string</code> | The displayed title.</p>
884
885 <p><strong>title.level</strong> | <code>int</code> | Requires level.</p>
886
887 <p><strong>title.power</strong> | <code>power_id</code> | Requires power.</p>
888
889 <p><strong>title.requires_status</strong> | <code>list(string)</code> | Requires status.</p>
890
891 <p><strong>title.requires_not_status</strong> | <code>list(string)</code> | Requires not status.</p>
892
893 <p><strong>title.primary_stat</strong> | <code>predefined_string, predefined_string : Primary stat, Lesser primary stat</code> | Required primary stat(s). The lesser stat is optional.</p>
894
895 <hr />
896
897 <h4>GameStateTitle</h4>
898
899 <p>Description of menus/gametitle.txt</p>
900
901 <p><strong>logo</strong> | <code>filename, int, int, alignment : Image file, X, Y, Alignment</code> | Filename and position of the main logo image.</p>
902
903 <p><strong>play_pos</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;Play Game&rdquo; button.</p>
904
905 <p><strong>config_pos</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;Configuration&rdquo; button.</p>
906
907 <p><strong>credits_pos</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;Credits&rdquo; button.</p>
908
909 <p><strong>exit_pos</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the &ldquo;Exit Game&rdquo; button.</p>
910
911 <hr />
912
913 <h4>GameSwitcher: Default music</h4>
914
915 <p>Description of engine/default_music.txt</p>
916
917 <p><strong>music</strong> | <code>filename</code> | Filename of a music file to play during game states that don&rsquo;t already have music.</p>
918
919 <hr />
920
921 <h4>GameSwitcher: Background images</h4>
922
923 <p>Description of engine/menu_backgrounds.txt</p>
924
925 <p><strong>background</strong> | <code>repeatable(filename)</code> | Filename of a background image to be added to the pool of random menu backgrounds</p>
926
927 <hr />
928
929 <h4>GameSwitcher: FPS counter</h4>
930
931 <p>Description of menus/fps.txt</p>
932
933 <p><strong>position</strong> | <code>int, int, alignment : X, Y, Alignment</code> | Position of the fps counter.</p>
934
935 <p><strong>color</strong> | <code>color</code> | Color of the fps counter text.</p>
936
937 <hr />
938
939 <h4>IconManager</h4>
940
941 <p>Description of engine/icons.txt</p>
942
943 <p><strong>icon_set</strong> | <code>repeatable(icon_id, filename) : First ID, Image file</code> | Defines an icon graphics file to load, as well as the index of the first icon.</p>
944
945 <p><strong>text_offset</strong> | <code>point</code> | A pixel offset from the top-left to place item quantity text on icons.</p>
946
947 <hr />
948
949 <h4>InputState: Default Keybindings</h4>
950
951 <p>Description of engine/default_keybindings.txt. Use <strong>-1</strong> for no binding. Keyboard values can be any of the key names listed in the <a href="https://wiki.libsdl.org/SDL_Keycode">SDL docs</a>. Mouse values are in the format <strong>mouse_0</strong>. Joystick buttons are in the format <strong>joy_0</strong>. Joystick axis are in the format <strong>axis_0-</strong> or <strong>axis_0+</strong>.</p>
952
953 <p><strong>default.cancel</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Cancel&rdquo;.</p>
954
955 <p><strong>default.accept</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Accept&rdquo;.</p>
956
957 <p><strong>default.up</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Up&rdquo;.</p>
958
959 <p><strong>default.down</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Down&rdquo;.</p>
960
961 <p><strong>default.left</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Left&rdquo;.</p>
962
963 <p><strong>default.right</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Right&rdquo;.</p>
964
965 <p><strong>default.bar1</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Bar1&rdquo;.</p>
966
967 <p><strong>default.bar2</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Bar2&rdquo;.</p>
968
969 <p><strong>default.bar3</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Bar3&rdquo;.</p>
970
971 <p><strong>default.bar4</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Bar4&rdquo;.</p>
972
973 <p><strong>default.bar5</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Bar5&rdquo;.</p>
974
975 <p><strong>default.bar6</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Bar6&rdquo;.</p>
976
977 <p><strong>default.bar7</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Bar7&rdquo;.</p>
978
979 <p><strong>default.bar8</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Bar8&rdquo;.</p>
980
981 <p><strong>default.bar9</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Bar9&rdquo;.</p>
982
983 <p><strong>default.bar0</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Bar0&rdquo;.</p>
984
985 <p><strong>default.main1</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Main1&rdquo;.</p>
986
987 <p><strong>default.main2</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Main2&rdquo;.</p>
988
989 <p><strong>default.character</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Character&rdquo;.</p>
990
991 <p><strong>default.inventory</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Inventory&rdquo;.</p>
992
993 <p><strong>default.powers</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Powers&rdquo;.</p>
994
995 <p><strong>default.log</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Log&rdquo;.</p>
996
997 <p><strong>default.ctrl</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Ctrl&rdquo;.</p>
998
999 <p><strong>default.shift</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Shift&rdquo;.</p>
1000
1001 <p><strong>default.alt</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Alt&rdquo;.</p>
1002
1003 <p><strong>default.delete</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Delete&rdquo;.</p>
1004
1005 <p><strong>default.actionbar</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Actionbar Accept&rdquo;.</p>
1006
1007 <p><strong>default.actionbar_back</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Actionbar Left&rdquo;.</p>
1008
1009 <p><strong>default.actionbar_forward</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Actionbar Right&rdquo;.</p>
1010
1011 <p><strong>default.actionbar_use</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Actionbar Use&rdquo;.</p>
1012
1013 <p><strong>default.developer_menu</strong> | <code>string, string, string : Keyboard/mouse 1, Keyboard/mouse 2, Joystick</code> | Bindings for &ldquo;Developer Menu&rdquo;.</p>
1014
1015 <hr />
1016
1017 <h4>ItemManager: Items</h4>
1018
1019 <p>Description about the class and it usage, items/items.txt&hellip;</p>
1020
1021 <p><strong>id</strong> | <code>item_id</code> | An uniq id of the item used as reference from other classes.</p>
1022
1023 <p><strong>name</strong> | <code>string</code> | Item name displayed on long and short tooltips.</p>
1024
1025 <p><strong>flavor</strong> | <code>string</code> | A description of the item.</p>
1026
1027 <p><strong>level</strong> | <code>int</code> | The item&rsquo;s level. Has no gameplay impact. (Deprecated?)</p>
1028
1029 <p><strong>icon</strong> | <code>icon_id</code> | An id for the icon to display for this item.</p>
1030
1031 <p><strong>book</strong> | <code>filename</code> | A book file to open when this item is activated.</p>
1032
1033 <p><strong>book_is_readable</strong> | <code>bool</code> | If true, &ldquo;read&rdquo; is displayed in the tooltip instead of &ldquo;use&rdquo;. Defaults to true.</p>
1034
1035 <p><strong>quality</strong> | <code>predefined_string</code> | Item quality matching an id in items/qualities.txt</p>
1036
1037 <p><strong>item_type</strong> | <code>predefined_string</code> | Equipment slot matching an id in items/types.txt</p>
1038
1039 <p><strong>equip_flags</strong> | <code>list(predefined_string)</code> | A comma separated list of flags to set when this item is equipped. See engine/equip_flags.txt.</p>
1040
1041 <p><strong>dmg</strong> | <code>predefined_string, int, int : Damage type, Min, Max</code> | Defines the item&rsquo;s base damage type and range. Max may be ommitted and will default to Min.</p>
1042
1043 <p><strong>abs</strong> | <code>int, int : Min, Max</code> | Defines the item absorb value, if only min is specified the absorb value is fixed.</p>
1044
1045 <p><strong>requires_level</strong> | <code>int</code> | The hero&rsquo;s level must match or exceed this value in order to equip this item.</p>
1046
1047 <p><strong>requires_stat</strong> | <code>repeatable(predefined_string, int) : Primary stat name, Value</code> | Make item require specific stat level ex. requires_stat=physical,6 will require hero to have level 6 in physical stats</p>
1048
1049 <p><strong>requires_class</strong> | <code>predefined_string</code> | The hero&rsquo;s base class (engine/classes.txt) must match for this item to be equipped.</p>
1050
1051 <p><strong>bonus</strong> | <code>repeatable(predefined_string, int) : Stat name, Value</code> | Adds a bonus to the item by stat name, example bonus=hp, 50</p>
1052
1053 <p><strong>bonus_power_level</strong> | <code>repeatable(power_id, int) : Base power, Bonus levels</code> | Grants bonus levels to a given base power.</p>
1054
1055 <p><strong>soundfx</strong> | <code>filename</code> | Sound effect filename to play for the specific item.</p>
1056
1057 <p><strong>gfx</strong> | <code>filename</code> | Filename of an animation set to display when the item is equipped.</p>
1058
1059 <p><strong>loot_animation</strong> | <code>repeatable(filename, int, int) : Loot image, Min quantity, Max quantity</code> | Specifies the loot animation file for the item. The max quantity, or both quantity values, may be omitted.</p>
1060
1061 <p><strong>power</strong> | <code>power_id</code> | Adds a specific power to the item which makes it usable as a power and can be placed in action bar.</p>
1062
1063 <p><strong>replace_power</strong> | <code>repeatable(int, int) : Old power, New power</code> | Replaces the old power id with the new power id in the action bar when equipped.</p>
1064
1065 <p><strong>power_desc</strong> | <code>string</code> | A string describing the additional power.</p>
1066
1067 <p><strong>price</strong> | <code>int</code> | The amount of currency the item costs, if set to 0 the item cannot be sold.</p>
1068
1069 <p><strong>price_per_level</strong> | <code>int</code> | Additional price for each player level above 1</p>
1070
1071 <p><strong>price_sell</strong> | <code>int</code> | The amount of currency the item is sold for, if set to 0 the sell prices is prices*vendor_ratio.</p>
1072
1073 <p><strong>max_quantity</strong> | <code>int</code> | Max item count per stack.</p>
1074
1075 <p><strong>pickup_status</strong> | <code>string</code> | Set a campaign status when item is picked up, this is used for quest items.</p>
1076
1077 <p><strong>stepfx</strong> | <code>predefined_string</code> | Sound effect when walking, this applies only to armors.</p>
1078
1079 <p><strong>disable_slots</strong> | <code>list(predefined_string)</code> | A comma separated list of equip slot types to disable when this item is equipped.</p>
1080
1081 <p><strong>quest_item</strong> | <code>bool</code> | If true, this item is a quest item and can not be dropped, stashed, or sold.</p>
1082
1083 <hr />
1084
1085 <h4>ItemManager: Types</h4>
1086
1087 <p>Definition of a item types, items/types.txt&hellip;</p>
1088
1089 <p><strong>type.id</strong> | <code>string</code> | Item type identifier.</p>
1090
1091 <p><strong>type.name</strong> | <code>string</code> | Item type name.</p>
1092
1093 <hr />
1094
1095 <h4>ItemManager: Qualities</h4>
1096
1097 <p>Definition of a item qualities, items/types.txt&hellip;</p>
1098
1099 <p><strong>quality.id</strong> | <code>string</code> | Item quality identifier.</p>
1100
1101 <p><strong>quality.name</strong> | <code>string</code> | Item quality name.</p>
1102
1103 <p><strong>quality.color</strong> | <code>color</code> | Item quality color.</p>
1104
1105 <p><strong>quality.overlay_icon</strong> | <code>icon_id</code> | The icon to be used as an overlay.</p>
1106
1107 <hr />
1108
1109 <h4>ItemManager: Sets</h4>
1110
1111 <p>Definition of a item sets, items/sets.txt&hellip;</p>
1112
1113 <p><strong>id</strong> | <code>int</code> | A uniq id for the item set.</p>
1114
1115 <p><strong>name</strong> | <code>string</code> | Name of the item set.</p>
1116
1117 <p><strong>items</strong> | <code>list(item_id)</code> | List of item id&rsquo;s that is part of the set.</p>
1118
1119 <p><strong>color</strong> | <code>color</code> | A specific of color for the set.</p>
1120
1121 <p><strong>bonus</strong> | <code>repeatable(int, string, int) : Required set item count, Stat name, Value</code> | Bonus to append to items in the set.</p>
1122
1123 <p><strong>bonus_power_level</strong> | <code>repeatable(int, power_id, int) : Required set item count, Base power, Bonus levels</code> | Grants bonus levels to a given base power.</p>
1124
1125 <hr />
1126
1127 <h4>Map</h4>
1128
1129 <p>Description of maps/</p>
1130
1131 <p><strong>title</strong> | <code>string</code> | Title of map</p>
1132
1133 <p><strong>width</strong> | <code>int</code> | Width of map</p>
1134
1135 <p><strong>height</strong> | <code>int</code> | Height of map</p>
1136
1137 <p><strong>tileset</strong> | <code>filename</code> | Filename of a tileset definition to use for map</p>
1138
1139 <p><strong>music</strong> | <code>filename</code> | Filename of background music to use for map</p>
1140
1141 <p><strong>hero_pos</strong> | <code>point</code> | The player will spawn in this location if no point was previously given.</p>
1142
1143 <p><strong>parallax_layers</strong> | <code>filename</code> | Filename of a parallax layers definition.</p>
1144
1145 <p><strong>background_color</strong> | <code>color, int : Color, alpha</code> | Background color for the map.</p>
1146
1147 <p><strong>tilewidth</strong> | <code>int</code> | Inherited from Tiled map file. Unused by engine.</p>
1148
1149 <p><strong>tileheight</strong> | <code>int</code> | Inherited from Tiled map file. Unused by engine.</p>
1150
1151 <p><strong>layer.type</strong> | <code>string</code> | Map layer type.</p>
1152
1153 <p><strong>layer.format</strong> | <code>string</code> | Format for map layer, must be &lsquo;dec&rsquo;</p>
1154
1155 <p><strong>layer.data</strong> | <code>raw</code> | Raw map layer data</p>
1156
1157 <p><strong>enemygroup.type</strong> | <code>string</code> | (IGNORED BY ENGINE) The &ldquo;type&rdquo; field, as used by Tiled and other mapping tools.</p>
1158
1159 <p><strong>enemygroup.category</strong> | <code>predefined_string</code> | The category of enemies that will spawn in this group.</p>
1160
1161 <p><strong>enemygroup.level</strong> | <code>int, int : Min, Max</code> | Defines the level range of enemies in group. If only one number is given, it&rsquo;s the exact level.</p>
1162
1163 <p><strong>enemygroup.location</strong> | <code>rectangle</code> | Location area for enemygroup</p>
1164
1165 <p><strong>enemygroup.number</strong> | <code>int, int : Min, Max</code> | Defines the range of enemies in group. If only one number is given, it&rsquo;s the exact amount.</p>
1166
1167 <p><strong>enemygroup.chance</strong> | <code>int</code> | Percentage of chance</p>
1168
1169 <p><strong>enemygroup.direction</strong> | <code>direction</code> | Direction that enemies will initially face.</p>
1170
1171 <p><strong>enemygroup.waypoints</strong> | <code>list(point)</code> | Enemy waypoints; single enemy only; negates wander_radius</p>
1172
1173 <p><strong>enemygroup.wander_radius</strong> | <code>int</code> | The radius (in tiles) that an enemy will wander around randomly; negates waypoints</p>
1174
1175 <p><strong>enemygroup.requires_status</strong> | <code>list(string)</code> | Status required for loading enemies</p>
1176
1177 <p><strong>enemygroup.requires_not_status</strong> | <code>list(string)</code> | Status required to be missing for loading enemies</p>
1178
1179 <p><strong>enemygroup.invincible_requires_status</strong> | <code>list(string)</code> | Enemies in this group are invincible to hero attacks when these statuses are set.</p>
1180
1181 <p><strong>enemygroup.invincible_requires_not_status</strong> | <code>list(string)</code> | Enemies in this group are invincible to hero attacks when these statuses are not set.</p>
1182
1183 <p><strong>npc.type</strong> | <code>string</code> | (IGNORED BY ENGINE) The &ldquo;type&rdquo; field, as used by Tiled and other mapping tools.</p>
1184
1185 <p><strong>npc.filename</strong> | <code>string</code> | Filename of an NPC definition.</p>
1186
1187 <p><strong>npc.requires_status</strong> | <code>list(string)</code> | Status required for NPC load. There can be multiple states, separated by comma</p>
1188
1189 <p><strong>npc.requires_not_status</strong> | <code>list(string)</code> | Status required to be missing for NPC load. There can be multiple states, separated by comma</p>
1190
1191 <p><strong>npc.location</strong> | <code>point</code> | Location of NPC</p>
1192
1193 <hr />
1194
1195 <h4>MapParallax</h4>
1196
1197 <p>Description of maps/parallax/</p>
1198
1199 <p><strong>layer.image</strong> | <code>filename</code> | Image file to use as a scrolling background.</p>
1200
1201 <p><strong>layer.speed</strong> | <code>float</code> | Speed at which the background will move relative to the camera.</p>
1202
1203 <p><strong>layer.fixed_speed</strong> | <code>float, float : X speed, Y speed</code> | Speed at which the background will move independent of the camera movement.</p>
1204
1205 <p><strong>layer.map_layer</strong> | <code>string</code> | The tile map layer that this parallax layer will be rendered on top of.</p>
1206
1207 <hr />
1208
1209 <h4>MenuActionBar</h4>
1210
1211 <p>Description of menus/actionbar.txt</p>
1212
1213 <p><strong>slot</strong> | <code>repeatable(int, int, int, bool) : Index, X, Y, Locked</code> | Index (max 10) and position for power slot. If a slot is locked, its Power can&rsquo;t be changed by the player.</p>
1214
1215 <p><strong>slot_M1</strong> | <code>point, bool : Position, Locked</code> | Position for the primary action slot. If the slot is locked, its Power can&rsquo;t be changed by the player.</p>
1216
1217 <p><strong>slot_M2</strong> | <code>point, bool : Position Locked</code> | Position for the secondary action slot. If the slot is locked, its Power can&rsquo;t be changed by the player.</p>
1218
1219 <p><strong>char_menu</strong> | <code>point</code> | Position for the Character menu button.</p>
1220
1221 <p><strong>inv_menu</strong> | <code>point</code> | Position for the Inventory menu button.</p>
1222
1223 <p><strong>powers_menu</strong> | <code>point</code> | Position for the Powers menu button.</p>
1224
1225 <p><strong>log_menu</strong> | <code>point</code> | Position for the Log menu button.</p>
1226
1227 <p><strong>loot_tip_toggle</strong> | <code>point</code> | Position for the button used to toggle loot tooltip visibility.</p>
1228
1229 <p><strong>minimap_mode_toggle</strong> | <code>point</code> | Position for the button used to toggle the mini-map mode.</p>
1230
1231 <p><strong>statbar_label_toggle</strong> | <code>point</code> | Position for the button used to toggle always showing the statbar labels.</p>
1232
1233 <p><strong>combat_text_toggle</strong> | <code>point</code> | Position for the button used to toggle the display of combat text.</p>
1234
1235 <hr />
1236
1237 <h4>MenuActiveEffects</h4>
1238
1239 <p>Description of menus/activeeffects.txt</p>
1240
1241 <p><strong>vertical</strong> | <code>bool</code> | True is vertical orientation; False is horizontal orientation.</p>
1242
1243 <hr />
1244
1245 <h4>MenuBook</h4>
1246
1247 <p>Description of books in books/</p>
1227 <p><strong>scrollpane_padding</strong> | <code>int, int : Horizontal padding, Vertical padding</code> | Pixel padding for each item listed in a tab&rsquo;s scroll box.</p>
1228
1229 <p><strong>scrollpane_separator_color</strong> | <code>color</code> | Color of the separator line in between scroll box items.</p>
1230
1231 <p><strong>keybinds_bg_color</strong> | <code>color, int : Color, Alpha</code> | Background color and alpha for the keybindings scrollbox.</p>
1232
1233 <hr />
1234
1235 <h4>Menu</h4>
1236
1237 <p>Description of menus in menus/</p>
1238
1239 <p><strong>pos</strong> | <code>rectangle</code> | Menu position and dimensions</p>
1240
1241 <p><strong>align</strong> | <code>alignment</code> | Position relative to screen edges</p>
1242
1243 <p><strong>soundfx_open</strong> | <code>filename</code> | Filename of a sound to play when opening this menu.</p>
1244
1245 <p><strong>soundfx_close</strong> | <code>filename</code> | Filename of a sound to play when closing this menu.</p>
1246
1247 <hr />
1248
1249 <h4>MenuDevConsole</h4>
1250
1251 <p>Description of menus/devconsole.txt</p>
12481252
12491253 <p><strong>close</strong> | <code>point</code> | Position of the close button.</p>
12501254
1251 <p><strong>background</strong> | <code>filename</code> | Filename for the background image.</p>
1252
1253 <p><strong>image.image_pos</strong> | <code>point</code> | Position of the image.</p>
1254
1255 <p><strong>image.image</strong> | <code>filename</code> | Filename of the image.</p>
1256
1257 <p><strong>image_icon</strong> | <code>icon_id</code> | Use an icon as the image instead of a file.</p>
1258
1259 <p><strong>image.requires_status</strong> | <code>list(string)</code> | Image requires these campaign statuses in order to be visible.</p>
1260
1261 <p><strong>image.requires_not_status</strong> | <code>list(string)</code> | Image must not have any of these campaign statuses in order to be visible.</p>
1262
1263 <p><strong>text.text_pos</strong> | <code>int, int, int, ["left", "center", "right"] : X, Y, Width, Text justify</code> | Position of the text.</p>
1264
1265 <p><strong>text.text_font</strong> | <code>color, string : Font color, Font style</code> | Font color and style.</p>
1266
1267 <p><strong>text.shadow</strong> | <code>bool</code> | If true, the text will have a black shadow like the text labels in various menus.</p>
1268
1269 <p><strong>text.text</strong> | <code>string</code> | The text to be displayed.</p>
1270
1271 <p><strong>text.requires_status</strong> | <code>list(string)</code> | Text requires these campaign statuses in order to be visible.</p>
1272
1273 <p><strong>text.requires_not_status</strong> | <code>list(string)</code> | Text must not have any of these campaign statuses in order to be visible.</p>
1274
1275 <p><strong>button.button_pos</strong> | <code>point</code> | Position of the button.</p>
1276
1277 <p><strong>button.button_image</strong> | <code>filename</code> | Image file to use for this button. Default is the normal menu button.</p>
1278
1279 <p><strong>button.text</strong> | <code>string</code> | Optional text label for the button.</p>
1280
1281 <p><strong>book.${EVENT_COMPONENT}</strong> | <code>Event components to execute when the button is clicked. See the definitions in EventManager for possible attributes.</code> |</p>
1282
1283 <p><strong>event_open.${EVENT_COMPONENT}</strong> | <code>Event components to execute when the book is opened. See the definitions in EventManager for possible attributes.</code> |</p>
1284
1285 <p><strong>event_close.${EVENT_COMPONENT}</strong> | <code>Event components to execute when the book is closed. See the definitions in EventManager for possible attributes.</code> |</p>
1286
1287 <hr />
1288
1289 <h4>MenuCharacter</h4>
1290
1291 <p>Description of menus/character.txt</p>
1255 <p><strong>label_title</strong> | <code>label</code> | Position of the &ldquo;Developer Console&rdquo; label.</p>
1256
1257 <p><strong>confirm</strong> | <code>point</code> | Position of the &ldquo;Execute&rdquo; button.</p>
1258
1259 <p><strong>input</strong> | <code>point</code> | Position of the command entry widget.</p>
1260
1261 <p><strong>history</strong> | <code>rectangle</code> | Position and dimensions of the command history.</p>
1262
1263 <hr />
1264
1265 <h4>MenuEnemy</h4>
1266
1267 <p>Description of menus/enemy.txt</p>
1268
1269 <p><strong>bar_pos</strong> | <code>rectangle</code> | Position and dimensions of the health bar.</p>
1270
1271 <p><strong>text_pos</strong> | <code>label</code> | Position of the text displaying the enemy&rsquo;s name and level.</p>
1272
1273 <p><strong>bar_fill_offset</strong> | <code>point</code> | Offset of the bar&rsquo;s fill graphics relative to the bar_pos X/Y.</p>
1274
1275 <p><strong>bar_fill_size</strong> | <code>int, int : Width, Height</code> | Size of the bar&rsquo;s fill graphics. If not defined, the width/height of bar_pos is used.</p>
1276
1277 <hr />
1278
1279 <h4>MenuGameOver</h4>
1280
1281 <p>Description of menus/game_over.txt</p>
1282
1283 <p><strong>label_title</strong> | <code>label</code> | Position of the &ldquo;Game Over&rdquo; text.</p>
1284
1285 <p><strong>button_continue</strong> | <code>point</code> | Position of the &ldquo;Continue&rdquo; button.</p>
1286
1287 <p><strong>button_exit</strong> | <code>point</code> | Position of the &ldquo;Exit&rdquo; button.</p>
1288
1289 <hr />
1290
1291 <h4>MenuHUDLog</h4>
1292
1293 <p>Description of menus/hudlog.txt</p>
1294
1295 <p><strong>enable_overlay</strong> | <code>bool</code> | If true, shows an overlay of the last message on top of other menus.</p>
1296
1297 <p><strong>start_at_bottom</strong> | <code>bool</code> | If true, messages start at the bottom and get pushed up. If false, messages start at the top and get pushed down.</p>
1298
1299 <p><strong>overlay_at_bottom</strong> | <code>bool</code> | If true, the overlay message will be at the bottom of the HUD log area. If false, it will be at the top.</p>
1300
1301 <hr />
1302
1303 <h4>MenuInventory</h4>
1304
1305 <p>Description of menus/inventory.txt</p>
12921306
12931307 <p><strong>close</strong> | <code>point</code> | Position of the close button.</p>
12941308
1295 <p><strong>label_title</strong> | <code>label</code> | Position of the &ldquo;Character&rdquo; text.</p>
1296
1297 <p><strong>upgrade_primary</strong> | <code>predefined_string, point : Primary stat name, Button position</code> | Position of the button used to add a stat point to this primary stat.</p>
1298
1299 <p><strong>statlist</strong> | <code>point</code> | Position of the scrollbox containing non-primary stats.</p>
1300
1301 <p><strong>statlist_rows</strong> | <code>int</code> | The height of the statlist in rows.</p>
1302
1303 <p><strong>statlist_scrollbar_offset</strong> | <code>int</code> | Right margin in pixels for the statlist&rsquo;s scrollbar.</p>
1304
1305 <p><strong>label_name</strong> | <code>label</code> | Position of the &ldquo;Name&rdquo; text.</p>
1306
1307 <p><strong>label_level</strong> | <code>label</code> | Position of the &ldquo;Level&rdquo; text.</p>
1308
1309 <p><strong>label_primary</strong> | <code>predefined_string, label : Primary stat name, Text positioning</code> | Position of the text label for this primary stat.</p>
1310
1311 <p><strong>name</strong> | <code>rectangle</code> | Position of the player&rsquo;s name and dimensions of the tooltip hotspot.</p>
1312
1313 <p><strong>level</strong> | <code>rectangle</code> | Position of the player&rsquo;s level and dimensions of the tooltip hotspot.</p>
1314
1315 <p><strong>primary</strong> | <code>predefined_string, rectangle : Primary stat name, Hotspot position</code> | Position of this primary stat value display and dimensions of its tooltip hotspot.</p>
1316
1317 <p><strong>unspent</strong> | <code>label</code> | Position of the label showing the number of unspent stat points.</p>
1318
1319 <p><strong>show_resists</strong> | <code>bool</code> | Hide the elemental &ldquo;Resistance&rdquo; stats in the statlist if set to false.</p>
1320
1321 <p><strong>show_stat</strong> | <code>predefined_string, bool : Stat name / Damage type, Visible</code> | Hide the matching stat or damage type min/max in the statlist if set to false.</p>
1322
1323 <p><strong>name_max_width</strong> | <code>int</code> | The maxiumum width, in pixels, that the character name can occupy until it is abbreviated.</p>
1324
1325 <hr />
1326
1327 <h4>Menu</h4>
1328
1329 <p>Description of menus in menus/</p>
1330
1331 <p><strong>pos</strong> | <code>rectangle</code> | Menu position and dimensions</p>
1332
1333 <p><strong>align</strong> | <code>alignment</code> | Position relative to screen edges</p>
1334
1335 <p><strong>soundfx_open</strong> | <code>filename</code> | Filename of a sound to play when opening this menu.</p>
1336
1337 <p><strong>soundfx_close</strong> | <code>filename</code> | Filename of a sound to play when closing this menu.</p>
1338
1339 <hr />
1340
1341 <h4>MenuDevConsole</h4>
1342
1343 <p>Description of menus/devconsole.txt</p>
1309 <p><strong>equipment_slot</strong> | <code>repeatable(int, int, string) : X, Y, Slot Type</code> | Position and item type of an equipment slot.</p>
1310
1311 <p><strong>carried_area</strong> | <code>point</code> | Position of the first normal inventory slot.</p>
1312
1313 <p><strong>carried_cols</strong> | <code>int</code> | The number of columns for the normal inventory.</p>
1314
1315 <p><strong>carried_rows</strong> | <code>int</code> | The number of rows for the normal inventory.</p>
1316
1317 <p><strong>label_title</strong> | <code>label</code> | Position of the &ldquo;Inventory&rdquo; label.</p>
1318
1319 <p><strong>currency</strong> | <code>label</code> | Position of the label that displays the total currency being carried.</p>
1320
1321 <p><strong>help</strong> | <code>rectangle</code> | A mouse-over area that displays some help text for inventory shortcuts.</p>
1322
1323 <hr />
1324
1325 <h4>MenuLog</h4>
1326
1327 <p>Description of menus/log.txt</p>
1328
1329 <p><strong>label_title</strong> | <code>label</code> | Position of the &ldquo;Log&rdquo; text.</p>
13441330
13451331 <p><strong>close</strong> | <code>point</code> | Position of the close button.</p>
13461332
1347 <p><strong>label_title</strong> | <code>label</code> | Position of the &ldquo;Developer Console&rdquo; label.</p>
1348
1349 <p><strong>confirm</strong> | <code>point</code> | Position of the &ldquo;Execute&rdquo; button.</p>
1350
1351 <p><strong>input</strong> | <code>point</code> | Position of the command entry widget.</p>
1352
1353 <p><strong>history</strong> | <code>rectangle</code> | Position and dimensions of the command history.</p>
1354
1355 <hr />
1356
1357 <h4>MenuEnemy</h4>
1358
1359 <p>Description of menus/enemy.txt</p>
1360
1361 <p><strong>bar_pos</strong> | <code>rectangle</code> | Position and dimensions of the health bar.</p>
1362
1363 <p><strong>text_pos</strong> | <code>label</code> | Position of the text displaying the enemy&rsquo;s name and level.</p>
1364
1365 <hr />
1366
1367 <h4>MenuExit</h4>
1368
1369 <p>Description of menus/exit.txt</p>
1370
1371 <p><strong>title</strong> | <code>label</code> | Position of the &ldquo;Paused&rdquo; text.</p>
1372
1373 <p><strong>exit</strong> | <code>point</code> | Position of the &ldquo;Save and Exit&rdquo; button.</p>
1374
1375 <p><strong>continue</strong> | <code>point</code> | Position of the &ldquo;Continue&rdquo; button.</p>
1376
1377 <p><strong>music_volume</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Music Volume&rdquo; slider relative to the frame.</p>
1378
1379 <p><strong>sound_volume</strong> | <code>int, int, int, int : Label X, Label Y, Widget X, Widget Y</code> | Position of the &ldquo;Sound Volume&rdquo; slider relative to the frame.</p>
1380
1381 <p><strong>enable_overlay</strong> | <code>bool</code> | If true, shows an overlay of the last message on top of other menus.</p>
1382
1383 <p><strong>start_at_bottom</strong> | <code>bool</code> | If true, messages start at the bottom and get pushed up. If false, messages start at the top and get pushed down.</p>
1384
1385 <p><strong>overlay_at_bottom</strong> | <code>bool</code> | If true, the overlay message will be at the bottom of the HUD log area. If false, it will be at the top.</p>
1386
1387 <hr />
1388
1389 <h4>MenuInventory</h4>
1390
1391 <p>Description of menus/inventory.txt</p>
1333 <p><strong>tab_area</strong> | <code>rectangle</code> | The position of the row of tabs, followed by the dimensions of the log text area.</p>
1334
1335 <hr />
1336
1337 <h4>MenuMiniMap</h4>
1338
1339 <p>Description of menus/minimap.txt</p>
1340
1341 <p><strong>map_pos</strong> | <code>rectangle</code> | Position and dimensions of the map.</p>
1342
1343 <p><strong>text_pos</strong> | <code>label</code> | Position of the text label with the map name.</p>
1344
1345 <p><strong>background</strong> | <code>filename</code> | Optional background image.</p>
1346
1347 <p><strong>color_wall</strong> | <code>color, int : Color, Alpha</code> | Color used for walls.</p>
1348
1349 <p><strong>color_obst</strong> | <code>color, int : Color, Alpha</code> | Color used for small obstacles and pits.</p>
1350
1351 <p><strong>color_hero</strong> | <code>color, int : Color, Alpha</code> | Color used for the player character.</p>
1352
1353 <p><strong>color_enemy</strong> | <code>color, int : Color, Alpha</code> | Color used for enemies engaged in combat.</p>
1354
1355 <p><strong>color_ally</strong> | <code>color, int : Color, Alpha</code> | Color used for allies.</p>
1356
1357 <p><strong>color_npc</strong> | <code>color, int : Color, Alpha</code> | Color used for NPCs.</p>
1358
1359 <p><strong>color_teleport</strong> | <code>color, int : Color, Alpha</code> | Color used for intermap teleports.</p>
1360
1361 <p><strong>button_config</strong> | <code>point</code> | Position of the &lsquo;Configuration&rsquo; button. The button will be hidden if not defined.</p>
1362
1363 <hr />
1364
1365 <h4>MenuMovementType</h4>
1366
1367 <p>Description of menus/movement_type.txt</p>
1368
1369 <p><strong>label_title</strong> | <code>label</code> | Position of the &ldquo;Select a Movement Type&rdquo; text.</p>
1370
1371 <p><strong>label_config_hint</strong> | <code>label</code> | Position of the &ldquo;Can be changed later in the Configuration menu&rdquo; text.</p>
1372
1373 <p><strong>button_keyboard</strong> | <code>point</code> | Position of the &ldquo;Keyboard&rdquo; button.</p>
1374
1375 <p><strong>button_mouse</strong> | <code>point</code> | Position of the &ldquo;Mouse&rdquo; button.</p>
1376
1377 <p><strong>button_joystick</strong> | <code>point</code> | Position of the &ldquo;Joystick&rdquo; button.</p>
1378
1379 <p><strong>icon_keyboard</strong> | <code>point</code> | Position of the keyboard icon.</p>
1380
1381 <p><strong>icon_mouse</strong> | <code>point</code> | Position of the mouse icon.</p>
1382
1383 <p><strong>icon_joystick</strong> | <code>point</code> | Position of the joystick icon.</p>
1384
1385 <hr />
1386
1387 <h4>MenuNumPicker</h4>
1388
1389 <p>Description of menus/num_picker.txt</p>
1390
1391 <p><strong>label_title</strong> | <code>label</code> | Position of the &ldquo;Enter amount &rdquo; text.</p>
1392
1393 <p><strong>confirm</strong> | <code>point</code> | Position of the &ldquo;OK&rdquo; button.</p>
1394
1395 <p><strong>increase</strong> | <code>point</code> | Position of the button used to increase the value.</p>
1396
1397 <p><strong>decrease</strong> | <code>point</code> | Position of the button used to decrease the value.</p>
1398
1399 <p><strong>close</strong> | <code>point</code> | Position of the button used to close the number picker window.</p>
1400
1401 <p><strong>input</strong> | <code>point</code> | Position of the text input box.</p>
1402
1403 <hr />
1404
1405 <h4>MenuPowers: Menu layout</h4>
1406
1407 <p>Description of menus/powers.txt</p>
1408
1409 <p><strong>label_title</strong> | <code>label</code> | Position of the &ldquo;Powers&rdquo; text.</p>
1410
1411 <p><strong>unspent_points</strong> | <code>label</code> | Position of the text that displays the amount of unused power points.</p>
13921412
13931413 <p><strong>close</strong> | <code>point</code> | Position of the close button.</p>
13941414
1395 <p><strong>auto_equip</strong> | <code>point</code> | Position of the auto-equip toggle switch.</p>
1396
1397 <p><strong>equipment_slot</strong> | <code>repeatable(int, int, string) : X, Y, Slot Type</code> | Position and item type of an equipment slot.</p>
1398
1399 <p><strong>carried_area</strong> | <code>point</code> | Position of the first normal inventory slot.</p>
1400
1401 <p><strong>carried_cols</strong> | <code>int</code> | The number of columns for the normal inventory.</p>
1402
1403 <p><strong>carried_rows</strong> | <code>int</code> | The number of rows for the normal inventory.</p>
1404
1405 <p><strong>label_title</strong> | <code>label</code> | Position of the &ldquo;Inventory&rdquo; label.</p>
1406
1407 <p><strong>currency</strong> | <code>label</code> | Position of the label that displays the total currency being carried.</p>
1408
1409 <p><strong>help</strong> | <code>rectangle</code> | A mouse-over area that displays some help text for inventory shortcuts.</p>
1410
1411 <hr />
1412
1413 <h4>MenuLog</h4>
1414
1415 <p>Description of menus/log.txt</p>
1416
1417 <p><strong>label_title</strong> | <code>label</code> | Position of the &ldquo;Log&rdquo; text.</p>
1415 <p><strong>tab_area</strong> | <code>rectangle</code> | Position and dimensions of the tree pages.</p>
1416
1417 <hr />
1418
1419 <h4>MenuPowers: Power tree layout</h4>
1420
1421 <p>Description of powers/trees/</p>
1422
1423 <p><strong>background</strong> | <code>filename</code> | Filename of the default background image</p>
1424
1425 <p><strong>tab.title</strong> | <code>string</code> | The name of this power tree tab</p>
1426
1427 <p><strong>tab.background</strong> | <code>filename</code> | Filename of the background image for this tab&rsquo;s power tree</p>
1428
1429 <p><strong>power.id</strong> | <code>int</code> | A power id from powers/powers.txt for this slot.</p>
1430
1431 <p><strong>power.tab</strong> | <code>int</code> | Tab index to place this power on, starting from 0.</p>
1432
1433 <p><strong>power.position</strong> | <code>point</code> | Position of this power icon; relative to MenuPowers &ldquo;pos&rdquo;.</p>
1434
1435 <p><strong>power.requires_point</strong> | <code>bool</code> | Power requires a power point to unlock.</p>
1436
1437 <p><strong>power.requires_primary</strong> | <code>predefined_string, int : Primary stat name, Required value</code> | Power requires this primary stat to be at least the specificed value.</p>
1438
1439 <p><strong>power.requires_level</strong> | <code>int</code> | Power requires at least this level for the hero.</p>
1440
1441 <p><strong>power.requires_power</strong> | <code>power_id</code> | Power requires another power id.</p>
1442
1443 <p><strong>power.requires_status</strong> | <code>repeatable(string)</code> | Power requires this campaign status.</p>
1444
1445 <p><strong>power.requires_not_status</strong> | <code>repeatable(string)</code> | Power requires not having this campaign status.</p>
1446
1447 <p><strong>power.visible_requires_status</strong> | <code>repeatable(string)</code> | (Deprecated as of v1.11.75) Hide the power if we don&rsquo;t have this campaign status.</p>
1448
1449 <p><strong>power.visible_requires_not_status</strong> | <code>repeatable(string)</code> | (Deprecated as of v1.11.75) Hide the power if we have this campaign status.</p>
1450
1451 <p><strong>power.upgrades</strong> | <code>list(power_id)</code> | A list of upgrade power ids that this power slot can upgrade to. Each of these powers should have a matching upgrade section.</p>
1452
1453 <p><strong>power.visible</strong> | <code>bool</code> | Controls whether or not a power is visible or hidden regardless of unlocked state. Defaults to true.</p>
1454
1455 <p><strong>power.visible_when_locked</strong> | <code>bool</code> | Controls whether or not a power is visible or hidden when the power is locked. Defaults to true.</p>
1456
1457 <p><strong>upgrade.id</strong> | <code>int</code> | A power id from powers/powers.txt for this upgrade.</p>
1458
1459 <p><strong>upgrade.requires_primary</strong> | <code>predefined_string, int : Primary stat name, Required value</code> | Upgrade requires this primary stat to be at least the specificed value.</p>
1460
1461 <p><strong>upgrade.requires_point</strong> | <code>bool</code> | Upgrade requires a power point to unlock.</p>
1462
1463 <p><strong>upgrade.requires_level</strong> | <code>int</code> | Upgrade requires at least this level for the hero.</p>
1464
1465 <p><strong>upgrade.requires_power</strong> | <code>int</code> | Upgrade requires another power id.</p>
1466
1467 <p><strong>upgrade.requires_status</strong> | <code>repeatable(string)</code> | Upgrade requires this campaign status.</p>
1468
1469 <p><strong>upgrade.requires_not_status</strong> | <code>repeatable(string)</code> | Upgrade requires not having this campaign status.</p>
1470
1471 <p><strong>upgrade.visible_requires_status</strong> | <code>repeatable(string)</code> | (Deprecated as of v1.11.75) Hide the upgrade if we don&rsquo;t have this campaign status.</p>
1472
1473 <p><strong>upgrade.visible_requires_not_status</strong> | <code>repeatable(string)</code> | (Deprecated as of v1.11.75) Hide the upgrade if we have this campaign status.</p>
1474
1475 <p><strong>upgrade.visible</strong> | <code>bool</code> | Controls whether or not a power is visible or hidden regardless of unlocked state. Defaults to true.</p>
1476
1477 <p><strong>upgrade.visible_when_locked</strong> | <code>bool</code> | Controls whether or not a power is visible or hidden when the power is locked. Defaults to true.</p>
1478
1479 <hr />
1480
1481 <h4>MenuStash</h4>
1482
1483 <p>Description of menus/stash.txt</p>
14181484
14191485 <p><strong>close</strong> | <code>point</code> | Position of the close button.</p>
14201486
1421 <p><strong>tab_area</strong> | <code>rectangle</code> | The position of the row of tabs, followed by the dimensions of the log text area.</p>
1422
1423 <hr />
1424
1425 <h4>MenuMiniMap</h4>
1426
1427 <p>Description of menus/minimap.txt</p>
1428
1429 <p><strong>map_pos</strong> | <code>rectangle</code> | Position and dimensions of the map.</p>
1430
1431 <p><strong>text_pos</strong> | <code>label</code> | Position of the text label with the map name.</p>
1432
1433 <p><strong>background</strong> | <code>filename</code> | Optional background image.</p>
1434
1435 <hr />
1436
1437 <h4>MenuNumPicker</h4>
1438
1439 <p>Description of menus/num_picker.txt</p>
1440
1441 <p><strong>label_title</strong> | <code>label</code> | Position of the &ldquo;Enter amount &rdquo; text.</p>
1442
1443 <p><strong>confirm</strong> | <code>point</code> | Position of the &ldquo;OK&rdquo; button.</p>
1444
1445 <p><strong>increase</strong> | <code>point</code> | Position of the button used to increase the value.</p>
1446
1447 <p><strong>decrease</strong> | <code>point</code> | Position of the button used to decrease the value.</p>
1448
1449 <p><strong>close</strong> | <code>point</code> | Position of the button used to close the number picker window.</p>
1450
1451 <p><strong>input</strong> | <code>point</code> | Position of the text input box.</p>
1452
1453 <hr />
1454
1455 <h4>MenuPowers: Menu layout</h4>
1456
1457 <p>Description of menus/powers.txt</p>
1458
1459 <p><strong>label_title</strong> | <code>label</code> | Position of the &ldquo;Powers&rdquo; text.</p>
1460
1461 <p><strong>unspent_points</strong> | <code>label</code> | Position of the text that displays the amount of unused power points.</p>
1487 <p><strong>slots_area</strong> | <code>point</code> | Position of the top-left slot.</p>
1488
1489 <p><strong>stash_cols</strong> | <code>int</code> | The number of columns for the grid of slots.</p>
1490
1491 <p><strong>stash_rows</strong> | <code>int</code> | The number of rows for the grid of slots.</p>
1492
1493 <p><strong>label_title</strong> | <code>label</code> | Position of the &ldquo;Stash&rdquo; label.</p>
1494
1495 <p><strong>currency</strong> | <code>label</code> | Position of the label displaying the amount of currency stored in the stash.</p>
1496
1497 <p><strong>tab.name</strong> | <code>["Private", "Shared", string]</code> | The displayed name of this tab. It is also used to determine the filename of the stash file that the engine will create. &lsquo;Private&rsquo; and &lsquo;Shared&rsquo; will use their legacy filenames for compatibility.</p>
1498
1499 <p><strong>tab.is_private</strong> | <code>bool</code> | If true, this stash will not be shared across other saves.</p>
1500
1501 <hr />
1502
1503 <h4>MenuStatBar</h4>
1504
1505 <p>Description of menus/hp.txt, menus/mp.txt, menus/xp.txt</p>
1506
1507 <p><strong>bar_pos</strong> | <code>rectangle</code> | Position and dimensions of the bar graphics.</p>
1508
1509 <p><strong>text_pos</strong> | <code>label</code> | Position of the text displaying the current value of the relevant stat.</p>
1510
1511 <p><strong>orientation</strong> | <code>bool</code> | True is vertical orientation; false is horizontal.</p>
1512
1513 <p><strong>bar_gfx</strong> | <code>filename</code> | Filename of the image to use for the &ldquo;fill&rdquo; of the bar.</p>
1514
1515 <p><strong>bar_gfx_background</strong> | <code>filename</code> | Filename of the image to use for the base of the bar.</p>
1516
1517 <p><strong>hide_timeout</strong> | <code>duration</code> | Hide HP and MP bar if full mana or health, after given amount of seconds; Hide XP bar if no changes in XP points for given amount of seconds. 0 disable hiding.</p>
1518
1519 <p><strong>bar_fill_offset</strong> | <code>point</code> | Offset of the bar&rsquo;s fill graphics relative to the bar_pos X/Y.</p>
1520
1521 <p><strong>bar_fill_size</strong> | <code>int, int : Width, Height</code> | Size of the bar&rsquo;s fill graphics. If not defined, the width/height of bar_pos is used.</p>
1522
1523 <hr />
1524
1525 <h4>MenuTalker</h4>
1526
1527 <p>Description of menus/talker.txt</p>
14621528
14631529 <p><strong>close</strong> | <code>point</code> | Position of the close button.</p>
14641530
1465 <p><strong>tab_area</strong> | <code>rectangle</code> | Position and dimensions of the tree pages.</p>
1466
1467 <hr />
1468
1469 <h4>MenuPowers: Power tree layout</h4>
1470
1471 <p>Description of powers/trees/</p>
1472
1473 <p><strong>background</strong> | <code>filename</code> | Filename of the default background image</p>
1474
1475 <p><strong>tab.title</strong> | <code>string</code> | The name of this power tree tab</p>
1476
1477 <p><strong>tab.background</strong> | <code>filename</code> | Filename of the background image for this tab&rsquo;s power tree</p>
1478
1479 <p><strong>power.id</strong> | <code>int</code> | A power id from powers/powers.txt for this slot.</p>
1480
1481 <p><strong>power.tab</strong> | <code>int</code> | Tab index to place this power on, starting from 0.</p>
1482
1483 <p><strong>power.position</strong> | <code>point</code> | Position of this power icon; relative to MenuPowers &ldquo;pos&rdquo;.</p>
1484
1485 <p><strong>power.requires_primary</strong> | <code>predefined_string, int : Primary stat name, Required value</code> | Power requires this primary stat to be at least the specificed value.</p>
1486
1487 <p><strong>power.requires_point</strong> | <code>bool</code> | Power requires a power point to unlock.</p>
1488
1489 <p><strong>power.requires_level</strong> | <code>int</code> | Power requires at least this level for the hero.</p>
1490
1491 <p><strong>power.requires_power</strong> | <code>power_id</code> | Power requires another power id.</p>
1492
1493 <p><strong>power.visible_requires_status</strong> | <code>repeatable(string)</code> | Hide the power if we don&rsquo;t have this campaign status.</p>
1494
1495 <p><strong>power.visible_requires_not_status</strong> | <code>repeatable(string)</code> | Hide the power if we have this campaign status.</p>
1496
1497 <p><strong>power.upgrades</strong> | <code>list(power_id)</code> | A list of upgrade power ids that this power slot can upgrade to. Each of these powers should have a matching upgrade section.</p>
1498
1499 <p><strong>upgrade.id</strong> | <code>int</code> | A power id from powers/powers.txt for this upgrade.</p>
1500
1501 <p><strong>upgrade.requires_primary</strong> | <code>predefined_string, int : Primary stat name, Required value</code> | Upgrade requires this primary stat to be at least the specificed value.</p>
1502
1503 <p><strong>upgrade.requires_point</strong> | <code>bool</code> | Upgrade requires a power point to unlock.</p>
1504
1505 <p><strong>upgrade.requires_level</strong> | <code>int</code> | Upgrade requires at least this level for the hero.</p>
1506
1507 <p><strong>upgrade.requires_power</strong> | <code>int</code> | Upgrade requires another power id.</p>
1508
1509 <p><strong>upgrade.visible_requires_status</strong> | <code>repeatable(string)</code> | Hide the upgrade if we don&rsquo;t have this campaign status.</p>
1510
1511 <p><strong>upgrade.visible_requires_not_status</strong> | <code>repeatable(string)</code> | Hide the upgrade if we have this campaign status.</p>
1512
1513 <hr />
1514
1515 <h4>MenuStash</h4>
1516
1517 <p>Description of menus/stash.txt</p>
1531 <p><strong>advance</strong> | <code>point</code> | Position of the button to advance dialog.</p>
1532
1533 <p><strong>dialogbox</strong> | <code>rectangle</code> | Position and dimensions of the text box graphics.</p>
1534
1535 <p><strong>dialogtext</strong> | <code>rectangle</code> | Rectangle where the dialog text is placed.</p>
1536
1537 <p><strong>text_offset</strong> | <code>point</code> | Margins for the left/right and top/bottom of the dialog text.</p>
1538
1539 <p><strong>portrait_he</strong> | <code>rectangle</code> | Position and dimensions of the NPC portrait graphics.</p>
1540
1541 <p><strong>portrait_you</strong> | <code>rectangle</code> | Position and dimensions of the player&rsquo;s portrait graphics.</p>
1542
1543 <p><strong>font_who</strong> | <code>predefined_string</code> | Font style to use for the name of the currently talking person.</p>
1544
1545 <p><strong>font_dialog</strong> | <code>predefined_string</code> | Font style to use for the dialog text.</p>
1546
1547 <p><strong>topic_color_normal</strong> | <code>color</code> | The normal color for topic text.</p>
1548
1549 <p><strong>topic_color_hover</strong> | <code>color</code> | The color for topic text when highlighted.</p>
1550
1551 <p><strong>topic_color_normal</strong> | <code>color</code> | The color for topic text when clicked.</p>
1552
1553 <p><strong>trade_color_normal</strong> | <code>color</code> | The normal color for the &ldquo;Trade&rdquo; text.</p>
1554
1555 <p><strong>trade_color_hover</strong> | <code>color</code> | The color for the &ldquo;Trade&rdquo; text when highlighted.</p>
1556
1557 <p><strong>trade_color_normal</strong> | <code>color</code> | The color for the &ldquo;Trade&rdquo; text when clicked.</p>
1558
1559 <hr />
1560
1561 <h4>MenuVendor</h4>
1562
1563 <p>Description of menus/vendor.txt</p>
15181564
15191565 <p><strong>close</strong> | <code>point</code> | Position of the close button.</p>
15201566
15211567 <p><strong>slots_area</strong> | <code>point</code> | Position of the top-left slot.</p>
15221568
1523 <p><strong>stash_cols</strong> | <code>int</code> | The number of columns for the grid of slots.</p>
1524
1525 <p><strong>stash_rows</strong> | <code>int</code> | The number of rows for the grid of slots.</p>
1526
1527 <p><strong>label_title</strong> | <code>label</code> | Position of the &ldquo;Stash&rdquo; label.</p>
1528
1529 <p><strong>currency</strong> | <code>label</code> | Position of the label displaying the amount of currency stored in the stash.</p>
1530
1531 <hr />
1532
1533 <h4>MenuStatBar</h4>
1534
1535 <p>Description of menus/hp.txt, menus/mp.txt, menus/xp.txt</p>
1536
1537 <p><strong>bar_pos</strong> | <code>rectangle</code> | Position and dimensions of the bar graphics.</p>
1538
1539 <p><strong>text_pos</strong> | <code>label</code> | Position of the text displaying the current value of the relevant stat.</p>
1540
1541 <p><strong>orientation</strong> | <code>bool</code> | True is vertical orientation; false is horizontal.</p>
1542
1543 <p><strong>bar_gfx</strong> | <code>filename</code> | Filename of the image to use for the &ldquo;fill&rdquo; of the bar.</p>
1544
1545 <p><strong>bar_gfx_background</strong> | <code>filename</code> | Filename of the image to use for the base of the bar.</p>
1546
1547 <hr />
1548
1549 <h4>MenuTalker</h4>
1550
1551 <p>Description of menus/talker.txt</p>
1552
1553 <p><strong>close</strong> | <code>point</code> | Position of the close button.</p>
1554
1555 <p><strong>advance</strong> | <code>point</code> | Position of the button to advance dialog.</p>
1556
1557 <p><strong>dialogbox</strong> | <code>rectangle</code> | Position and dimensions of the text box graphics.</p>
1558
1559 <p><strong>dialogtext</strong> | <code>rectangle</code> | Rectangle where the dialog text is placed.</p>
1560
1561 <p><strong>text_offset</strong> | <code>point</code> | Margins for the left/right and top/bottom of the dialog text.</p>
1562
1563 <p><strong>portrait_he</strong> | <code>rectangle</code> | Position and dimensions of the NPC portrait graphics.</p>
1564
1565 <p><strong>portrait_you</strong> | <code>rectangle</code> | Position and dimensions of the player&rsquo;s portrait graphics.</p>
1566
1567 <p><strong>font_who</strong> | <code>predefined_string</code> | Font style to use for the name of the currently talking person.</p>
1568
1569 <p><strong>font_dialog</strong> | <code>predefined_string</code> | Font style to use for the dialog text.</p>
1570
1571 <p><strong>topic_color_normal</strong> | <code>color</code> | The normal color for topic text.</p>
1572
1573 <p><strong>topic_color_hover</strong> | <code>color</code> | The color for topic text when highlighted.</p>
1574
1575 <p><strong>topic_color_normal</strong> | <code>color</code> | The color for topic text when clicked.</p>
1576
1577 <p><strong>trade_color_normal</strong> | <code>color</code> | The normal color for the &ldquo;Trade&rdquo; text.</p>
1578
1579 <p><strong>trade_color_hover</strong> | <code>color</code> | The color for the &ldquo;Trade&rdquo; text when highlighted.</p>
1580
1581 <p><strong>trade_color_normal</strong> | <code>color</code> | The color for the &ldquo;Trade&rdquo; text when clicked.</p>
1582
1583 <hr />
1584
1585 <h4>MenuVendor</h4>
1586
1587 <p>Description of menus/vendor.txt</p>
1588
1589 <p><strong>close</strong> | <code>point</code> | Position of the close button.</p>
1590
1591 <p><strong>slots_area</strong> | <code>point</code> | Position of the top-left slot.</p>
1592
15931569 <p><strong>vendor_cols</strong> | <code>int</code> | The number of columns in the grid of slots.</p>
15941570
15951571 <p><strong>vendor_rows</strong> | <code>int</code> | The number of rows in the grid of slots.</p>
16441620
16451621 <p><strong>dialog.portrait_you</strong> | <code>repeatable(filename)</code> | Filename of a portrait to display for the player during this dialog.</p>
16461622
1623 <p><strong>dialog.take_a_party</strong> | <code>bool</code> | Start/stop taking a party with player.</p>
1624
16471625 <p><strong>dialog.response</strong> | <code>repeatable(string)</code> | A dialog ID to present as a selectable response. This key must precede the dialog text line.</p>
16481626
16491627 <p><strong>dialog.response_only</strong> | <code>bool</code> | If true, this dialog topic will only appear when explicitly referenced with the &ldquo;response&rdquo; key.</p>
16501628
16511629 <p><strong>name</strong> | <code>string</code> | NPC&rsquo;s name.</p>
16521630
1653 <p><strong>gfx</strong> | <code>filename</code> | Filename of an animation definition.</p>
1654
16551631 <p><strong>direction</strong> | <code>direction</code> | The direction to use for this NPC&rsquo;s stance animation.</p>
16561632
1633 <p><strong>show_on_minimap</strong> | <code>bool</code> | If true, this NPC will be shown on the minimap. The default is true.</p>
1634
16571635 <p><strong>talker</strong> | <code>bool</code> | Allows this NPC to be talked to.</p>
16581636
16591637 <p><strong>portrait</strong> | <code>filename</code> | Filename of the default portrait image.</p>
17641742
17651743 <p><strong>power.cooldown</strong> | <code>duration</code> | Specify the duration for cooldown of the power in &lsquo;ms&rsquo; or &rsquo;s'.</p>
17661744
1767 <p><strong>power.requires_hpmp_state</strong> | <code>["hp", "mp"], ["percent", "not_percent", "ignore"], int : Stat, Current state, Percentage value</code> | Power can only be used when HP/MP matches the specified state</p>
1745 <p><strong>power.requires_hpmp_state</strong> | <code>["all", "any"], ["percent", "not_percent", "ignore"], int , ["percent", "not_percent", "ignore"], int : Mode, HP state, HP Percentage value, MP state, MP Percentage value</code> | Power can only be used when HP/MP matches the specified state. In &lsquo;all&rsquo; mode, both HP and MP must meet the requirements, where as only one must in &lsquo;any&rsquo; mode. To check a single stat, use &lsquo;all&rsquo; mode and set the &lsquo;ignore&rsquo; state for the other stat.</p>
17681746
17691747 <p><strong>power.animation</strong> | <code>filename</code> | The filename of the power animation.</p>
17701748
18621840
18631841 <p><strong>power.pre_power</strong> | <code>power_id, int : Power, Chance to cast</code> | Trigger a power immediately when casting this one.</p>
18641842
1865 <p><strong>power.post_power</strong> | <code>power_id, int : Power, Chance to cast</code> | Trigger a power if the hazard did damage.</p>
1843 <p><strong>power.post_power</strong> | <code>power_id, int : Power, Chance to cast</code> | Trigger a power if the hazard did damage. For &lsquo;block&rsquo; type powers, this power will be triggered when the blocker takes damage.</p>
18661844
18671845 <p><strong>power.wall_power</strong> | <code>power_id, int : Power, Chance to cast</code> | Trigger a power if the hazard hit a wall.</p>
18681846
19041882
19051883 <p><strong>power.target_nearest</strong> | <code>float</code> | Will automatically target the nearest enemy within the specified range.</p>
19061884
1885 <p><strong>power.disable_equip_slots</strong> | <code>list(predefined_string)</code> | Passive powers only. A comma separated list of equip slot types to disable when this power is active.</p>
1886
19071887 <hr />
19081888
19091889 <h4>QuestLog</h4>
19681948
19691949 <p><strong>power_filter</strong> | <code>list(power_id)</code> | Only these powers are allowed to hit this entity.</p>
19701950
1951 <p><strong>categories</strong> | <code>list(string)</code> | Categories that this entity belongs to.</p>
1952
1953 <p><strong>melee_range</strong> | <code>float</code> | Determines the distance from the caster that some powers will be placed. For AI entities, it also means the minimum distance from target required to use melee powers.</p>
1954
19711955 <hr />
19721956
19731957 <h4>StatBlock: Sound effects</h4>
19861970
19871971 <p><strong>sfx_levelup</strong> | <code>filename</code> | Filename of sound effect for leveling up.</p>
19881972
1973 <p><strong>sfx_lowhp</strong> | <code>filename, bool : Sound file, loop</code> | Filename of sound effect for low health warning. Optionally, it can be looped.</p>
1974
19891975 <hr />
19901976
19911977 <h4>StatBlock: Enemies</h4>
20322018
20332019 <p><strong>passive_powers</strong> | <code>list(power_id)</code> | A list of passive powers this creature has.</p>
20342020
2035 <p><strong>melee_range</strong> | <code>float</code> | Minimum distance from target required to use melee powers.</p>
2036
20372021 <p><strong>threat_range</strong> | <code>float, float : Engage distance, Stop distance</code> | The first value is the radius of the area this creature will be able to start chasing the hero. The second, optional, value is the radius at which this creature will stop pursuing their target and defaults to double the first value.</p>
20382022
20392023 <p><strong>flee_range</strong> | <code>float</code> | The radius at which this creature will start moving to a safe distance. Defaults to half of the threat_range.</p>
20442028
20452029 <p><strong>suppress_hp</strong> | <code>bool</code> | Hides the enemy HP bar for this creature.</p>
20462030
2047 <p><strong>categories</strong> | <code>list(string)</code> | Categories that this enemy belongs to.</p>
2048
20492031 <p><strong>flee_duration</strong> | <code>duration</code> | The minimum amount of time that this creature will flee. They may flee longer than the specified time.</p>
20502032
20512033 <p><strong>flee_cooldown</strong> | <code>duration</code> | The amount of time this creature must wait before they can start fleeing again.</p>
21632145 <p><strong>shield</strong> | Create a damage absorbing barrier based on Mental damage stat. Duration is ignored.</p>
21642146
21652147 <p><strong>heal</strong> | Restore HP based on Mental damage stat.</p>
2148
2149 <hr />
2150
2151 <h4>ItemManager</h4>
2152
2153 <p>Description of &ldquo;bonus&rdquo; attribute in items/items.txt</p>
2154
2155 <p><strong>speed</strong> | Movement speed. A value of 100 is 100% speed (aka normal speed).</p>
2156
2157 <p><strong>attack_speed</strong> | Attack animation speed. A value of 100 is 100% speed (aka normal speed).</p>
2158
2159 <p><strong>${STATNAME}</strong> | Increases ${STATNAME}, where ${STATNAME} is any of the base stats. Examples: hp, avoidance, xp_gain</p>
2160
2161 <p><strong>${DAMAGE_TYPE}</strong> | Increases a damage min or max, where ${DAMAGE_TYPE} is any &lsquo;min&rsquo; or &lsquo;max&rsquo; value found in engine/damage_types.txt. Example: dmg_melee_min</p>
2162
2163 <p><strong>${ELEMENT}_resist</strong> | Increase Resistance % to ${ELEMENT}, where ${ELEMENT} is any found in engine/elements.txt. Example: fire_resist</p>
2164
2165 <p><strong>${PRIMARYSTAT}</strong> | Increases ${PRIMARYSTAT}, where ${PRIMARYSTAT} is any of the primary stats defined in engine/primary_stats.txt. Example: physical</p>
21662166
21672167 <hr />
21682168
3636
3737 `predefined_string`, same as a string, but uses a value defined elsewhere
3838
39 `alignment`, defined as: `["topleft", "top", "topright", "left", "center", "right", "bottomleft", "bottom", "bottomright"]`
39 `alignment`, defined as: `["topleft", "top", "topright", "left", "center", "right", "bottomleft", "bottom", "bottomright", "frame_topleft", "frame_top", "frame_topright", "frame_left", "frame_center", "frame_right", "frame_bottomleft", "frame_bottom", "frame_bottomright"]`
4040
4141 `direction`, defined as: `["N", "NE", "E", "SE", "S", "SW", "W", "NW", int]`. If defined as an integer, the value must be between 0-7 inclusive.
4242
4444
4545 `label`, defined as: `"hidden"` **or** `int, int, ["left", "right", "center"], ["top", "center", "bottom"], string : X, Y, Justify, Vertical Align, Font style`. The font style can be any style defined in engine/font\_settings.txt.
4646
47 `loot`, defined as: `filename` **or** `["currency", item_id], ["fixed", int], int, int : Item, Drop chance, Min quantity, Max quantity`. There is a limitation when defining as part of a list(...): filenames can only be used in the first list element.
47 `loot`, defined as: `filename` **or** `["currency", item_id], ["fixed", float], int, int : Item, Drop chance, Min quantity, Max quantity`. There is a limitation when defining as part of a list(...): filenames can only be used in the first list element.
4848
4949 `version`, defined as: a string of three numbers, separated by dots (e.g. "1.2.03")
5050
0 #!/bin/bash
1 IFS=$'\n'
2 HAVE_CLASS=0
3 echo "<?xml version=\"1.0\"?>"
4 echo "<classes>"
5 for line in `grep '@CLASS\|@ATTR\|@TYPE' src/*.cpp | sed s/^.*@//g | sed 's/CLASS /CLASS|/g' | sed 's/ATTR /ATTR|/g' | sed 's/TYPE /TYPE|/g' | sed 's/"/\&quot;/g'`
6 do
7 IFS='|'
8 fields=($line)
9 # Handle CLASS
10 if [ "${fields[0]}" == "CLASS" ]; then
11 if [ $HAVE_CLASS -eq 1 ]; then
12 echo ' </attributes>'
13 echo ' </class>'
14 fi
15 echo ' <class name="'${fields[1]}'">'
16 HAVE_CLASS=1
17 echo ' <description>'${fields[2]}'</description>'
18 echo ' <attributes>'
19 fi
20 # Handle ATTR
21 if [ "${fields[0]}" == "ATTR" ]; then
22 IFS=':'
23 TYPE_VAL=(${fields[2]})
24 echo ' <attribute name="'${fields[1]}'" type="'$(echo "${TYPE_VAL[0]}" | xargs)'" vars="'$(echo "${TYPE_VAL[1]}" | xargs)'">'${fields[3]}'</attribute>'
25 fi
26 # Handle TYPE
27 if [ "${fields[0]}" == "TYPE" ]; then
28 echo ' <type name="'${fields[1]}'">'${fields[2]}'</type>'
29 fi
30 done
31
32 # close last class if available
33 if [ $HAVE_CLASS -eq 1 ]; then
34 echo ' </attributes>'
35 echo ' </class>'
36 fi
37 echo "</classes>"
22 apply plugin: 'com.android.application'
33
44 android {
5 compileSdkVersion 22
5 compileSdkVersion 26
66 // Each version of the Android Gradle Plugin now has a default version of the build tools
7 //buildToolsVersion '25.0.0'
7 //buildToolsVersion '29.0.2'
88
99 // don't use Android.mk generated by Android Studio / Gradle
1010 sourceSets.main.jni.srcDirs = []
1313 defaultConfig {
1414 applicationId "org.flare.app"
1515 minSdkVersion 14
16 targetSdkVersion 22
16 targetSdkVersion 26
1717 }
1818
1919 buildTypes {
2222 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
2323 }
2424 }
25 buildToolsVersion '27.0.3'
2625 }
2726
2827 // call regular ndk-build script from app directory
2424 </activity>
2525 </application>
2626
27 <!-- Android 3.2 -->
28 <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14" />
29
3027 <!-- OpenGL ES 2.0 -->
3128 <uses-feature android:glEsVersion="0x00020000" />
3229
00 package org.flare.app;
11
2 import org.libsdl.app.SDLActivity;
3 import android.os.*;
2 import org.libsdl.app.SDLActivity;
3 import android.os.*;
44
55 /*
66 * A sample wrapper class that just calls SDLActivity
0 package org.libsdl.app;
1
2 import android.hardware.usb.UsbDevice;
3
4 interface HIDDevice
5 {
6 public int getId();
7 public int getVendorId();
8 public int getProductId();
9 public String getSerialNumber();
10 public int getVersion();
11 public String getManufacturerName();
12 public String getProductName();
13 public UsbDevice getDevice();
14 public boolean open();
15 public int sendFeatureReport(byte[] report);
16 public int sendOutputReport(byte[] report);
17 public boolean getFeatureReport(byte[] report);
18 public void setFrozen(boolean frozen);
19 public void close();
20 public void shutdown();
21 }
0 package org.libsdl.app;
1
2 import android.content.Context;
3 import android.bluetooth.BluetoothDevice;
4 import android.bluetooth.BluetoothGatt;
5 import android.bluetooth.BluetoothGattCallback;
6 import android.bluetooth.BluetoothGattCharacteristic;
7 import android.bluetooth.BluetoothGattDescriptor;
8 import android.bluetooth.BluetoothManager;
9 import android.bluetooth.BluetoothProfile;
10 import android.bluetooth.BluetoothGattService;
11 import android.hardware.usb.UsbDevice;
12 import android.os.Handler;
13 import android.os.Looper;
14 import android.util.Log;
15 import android.os.*;
16
17 //import com.android.internal.util.HexDump;
18
19 import java.lang.Runnable;
20 import java.util.Arrays;
21 import java.util.LinkedList;
22 import java.util.UUID;
23
24 class HIDDeviceBLESteamController extends BluetoothGattCallback implements HIDDevice {
25
26 private static final String TAG = "hidapi";
27 private HIDDeviceManager mManager;
28 private BluetoothDevice mDevice;
29 private int mDeviceId;
30 private BluetoothGatt mGatt;
31 private boolean mIsRegistered = false;
32 private boolean mIsConnected = false;
33 private boolean mIsChromebook = false;
34 private boolean mIsReconnecting = false;
35 private boolean mFrozen = false;
36 private LinkedList<GattOperation> mOperations;
37 GattOperation mCurrentOperation = null;
38 private Handler mHandler;
39
40 private static final int TRANSPORT_AUTO = 0;
41 private static final int TRANSPORT_BREDR = 1;
42 private static final int TRANSPORT_LE = 2;
43
44 private static final int CHROMEBOOK_CONNECTION_CHECK_INTERVAL = 10000;
45
46 static public final UUID steamControllerService = UUID.fromString("100F6C32-1735-4313-B402-38567131E5F3");
47 static public final UUID inputCharacteristic = UUID.fromString("100F6C33-1735-4313-B402-38567131E5F3");
48 static public final UUID reportCharacteristic = UUID.fromString("100F6C34-1735-4313-B402-38567131E5F3");
49 static private final byte[] enterValveMode = new byte[] { (byte)0xC0, (byte)0x87, 0x03, 0x08, 0x07, 0x00 };
50
51 static class GattOperation {
52 private enum Operation {
53 CHR_READ,
54 CHR_WRITE,
55 ENABLE_NOTIFICATION
56 }
57
58 Operation mOp;
59 UUID mUuid;
60 byte[] mValue;
61 BluetoothGatt mGatt;
62 boolean mResult = true;
63
64 private GattOperation(BluetoothGatt gatt, GattOperation.Operation operation, UUID uuid) {
65 mGatt = gatt;
66 mOp = operation;
67 mUuid = uuid;
68 }
69
70 private GattOperation(BluetoothGatt gatt, GattOperation.Operation operation, UUID uuid, byte[] value) {
71 mGatt = gatt;
72 mOp = operation;
73 mUuid = uuid;
74 mValue = value;
75 }
76
77 public void run() {
78 // This is executed in main thread
79 BluetoothGattCharacteristic chr;
80
81 switch (mOp) {
82 case CHR_READ:
83 chr = getCharacteristic(mUuid);
84 //Log.v(TAG, "Reading characteristic " + chr.getUuid());
85 if (!mGatt.readCharacteristic(chr)) {
86 Log.e(TAG, "Unable to read characteristic " + mUuid.toString());
87 mResult = false;
88 break;
89 }
90 mResult = true;
91 break;
92 case CHR_WRITE:
93 chr = getCharacteristic(mUuid);
94 //Log.v(TAG, "Writing characteristic " + chr.getUuid() + " value=" + HexDump.toHexString(value));
95 chr.setValue(mValue);
96 if (!mGatt.writeCharacteristic(chr)) {
97 Log.e(TAG, "Unable to write characteristic " + mUuid.toString());
98 mResult = false;
99 break;
100 }
101 mResult = true;
102 break;
103 case ENABLE_NOTIFICATION:
104 chr = getCharacteristic(mUuid);
105 //Log.v(TAG, "Writing descriptor of " + chr.getUuid());
106 if (chr != null) {
107 BluetoothGattDescriptor cccd = chr.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"));
108 if (cccd != null) {
109 int properties = chr.getProperties();
110 byte[] value;
111 if ((properties & BluetoothGattCharacteristic.PROPERTY_NOTIFY) == BluetoothGattCharacteristic.PROPERTY_NOTIFY) {
112 value = BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE;
113 } else if ((properties & BluetoothGattCharacteristic.PROPERTY_INDICATE) == BluetoothGattCharacteristic.PROPERTY_INDICATE) {
114 value = BluetoothGattDescriptor.ENABLE_INDICATION_VALUE;
115 } else {
116 Log.e(TAG, "Unable to start notifications on input characteristic");
117 mResult = false;
118 return;
119 }
120
121 mGatt.setCharacteristicNotification(chr, true);
122 cccd.setValue(value);
123 if (!mGatt.writeDescriptor(cccd)) {
124 Log.e(TAG, "Unable to write descriptor " + mUuid.toString());
125 mResult = false;
126 return;
127 }
128 mResult = true;
129 }
130 }
131 }
132 }
133
134 public boolean finish() {
135 return mResult;
136 }
137
138 private BluetoothGattCharacteristic getCharacteristic(UUID uuid) {
139 BluetoothGattService valveService = mGatt.getService(steamControllerService);
140 if (valveService == null)
141 return null;
142 return valveService.getCharacteristic(uuid);
143 }
144
145 static public GattOperation readCharacteristic(BluetoothGatt gatt, UUID uuid) {
146 return new GattOperation(gatt, Operation.CHR_READ, uuid);
147 }
148
149 static public GattOperation writeCharacteristic(BluetoothGatt gatt, UUID uuid, byte[] value) {
150 return new GattOperation(gatt, Operation.CHR_WRITE, uuid, value);
151 }
152
153 static public GattOperation enableNotification(BluetoothGatt gatt, UUID uuid) {
154 return new GattOperation(gatt, Operation.ENABLE_NOTIFICATION, uuid);
155 }
156 }
157
158 public HIDDeviceBLESteamController(HIDDeviceManager manager, BluetoothDevice device) {
159 mManager = manager;
160 mDevice = device;
161 mDeviceId = mManager.getDeviceIDForIdentifier(getIdentifier());
162 mIsRegistered = false;
163 mIsChromebook = mManager.getContext().getPackageManager().hasSystemFeature("org.chromium.arc.device_management");
164 mOperations = new LinkedList<GattOperation>();
165 mHandler = new Handler(Looper.getMainLooper());
166
167 mGatt = connectGatt();
168 // final HIDDeviceBLESteamController finalThis = this;
169 // mHandler.postDelayed(new Runnable() {
170 // @Override
171 // public void run() {
172 // finalThis.checkConnectionForChromebookIssue();
173 // }
174 // }, CHROMEBOOK_CONNECTION_CHECK_INTERVAL);
175 }
176
177 public String getIdentifier() {
178 return String.format("SteamController.%s", mDevice.getAddress());
179 }
180
181 public BluetoothGatt getGatt() {
182 return mGatt;
183 }
184
185 // Because on Chromebooks we show up as a dual-mode device, it will attempt to connect TRANSPORT_AUTO, which will use TRANSPORT_BREDR instead
186 // of TRANSPORT_LE. Let's force ourselves to connect low energy.
187 private BluetoothGatt connectGatt(boolean managed) {
188 if (Build.VERSION.SDK_INT >= 23) {
189 try {
190 return mDevice.connectGatt(mManager.getContext(), managed, this, TRANSPORT_LE);
191 } catch (Exception e) {
192 return mDevice.connectGatt(mManager.getContext(), managed, this);
193 }
194 } else {
195 return mDevice.connectGatt(mManager.getContext(), managed, this);
196 }
197 }
198
199 private BluetoothGatt connectGatt() {
200 return connectGatt(false);
201 }
202
203 protected int getConnectionState() {
204
205 Context context = mManager.getContext();
206 if (context == null) {
207 // We are lacking any context to get our Bluetooth information. We'll just assume disconnected.
208 return BluetoothProfile.STATE_DISCONNECTED;
209 }
210
211 BluetoothManager btManager = (BluetoothManager)context.getSystemService(Context.BLUETOOTH_SERVICE);
212 if (btManager == null) {
213 // This device doesn't support Bluetooth. We should never be here, because how did
214 // we instantiate a device to start with?
215 return BluetoothProfile.STATE_DISCONNECTED;
216 }
217
218 return btManager.getConnectionState(mDevice, BluetoothProfile.GATT);
219 }
220
221 public void reconnect() {
222
223 if (getConnectionState() != BluetoothProfile.STATE_CONNECTED) {
224 mGatt.disconnect();
225 mGatt = connectGatt();
226 }
227
228 }
229
230 protected void checkConnectionForChromebookIssue() {
231 if (!mIsChromebook) {
232 // We only do this on Chromebooks, because otherwise it's really annoying to just attempt
233 // over and over.
234 return;
235 }
236
237 int connectionState = getConnectionState();
238
239 switch (connectionState) {
240 case BluetoothProfile.STATE_CONNECTED:
241 if (!mIsConnected) {
242 // We are in the Bad Chromebook Place. We can force a disconnect
243 // to try to recover.
244 Log.v(TAG, "Chromebook: We are in a very bad state; the controller shows as connected in the underlying Bluetooth layer, but we never received a callback. Forcing a reconnect.");
245 mIsReconnecting = true;
246 mGatt.disconnect();
247 mGatt = connectGatt(false);
248 break;
249 }
250 else if (!isRegistered()) {
251 if (mGatt.getServices().size() > 0) {
252 Log.v(TAG, "Chromebook: We are connected to a controller, but never got our registration. Trying to recover.");
253 probeService(this);
254 }
255 else {
256 Log.v(TAG, "Chromebook: We are connected to a controller, but never discovered services. Trying to recover.");
257 mIsReconnecting = true;
258 mGatt.disconnect();
259 mGatt = connectGatt(false);
260 break;
261 }
262 }
263 else {
264 Log.v(TAG, "Chromebook: We are connected, and registered. Everything's good!");
265 return;
266 }
267 break;
268
269 case BluetoothProfile.STATE_DISCONNECTED:
270 Log.v(TAG, "Chromebook: We have either been disconnected, or the Chromebook BtGatt.ContextMap bug has bitten us. Attempting a disconnect/reconnect, but we may not be able to recover.");
271
272 mIsReconnecting = true;
273 mGatt.disconnect();
274 mGatt = connectGatt(false);
275 break;
276
277 case BluetoothProfile.STATE_CONNECTING:
278 Log.v(TAG, "Chromebook: We're still trying to connect. Waiting a bit longer.");
279 break;
280 }
281
282 final HIDDeviceBLESteamController finalThis = this;
283 mHandler.postDelayed(new Runnable() {
284 @Override
285 public void run() {
286 finalThis.checkConnectionForChromebookIssue();
287 }
288 }, CHROMEBOOK_CONNECTION_CHECK_INTERVAL);
289 }
290
291 private boolean isRegistered() {
292 return mIsRegistered;
293 }
294
295 private void setRegistered() {
296 mIsRegistered = true;
297 }
298
299 private boolean probeService(HIDDeviceBLESteamController controller) {
300
301 if (isRegistered()) {
302 return true;
303 }
304
305 if (!mIsConnected) {
306 return false;
307 }
308
309 Log.v(TAG, "probeService controller=" + controller);
310
311 for (BluetoothGattService service : mGatt.getServices()) {
312 if (service.getUuid().equals(steamControllerService)) {
313 Log.v(TAG, "Found Valve steam controller service " + service.getUuid());
314
315 for (BluetoothGattCharacteristic chr : service.getCharacteristics()) {
316 if (chr.getUuid().equals(inputCharacteristic)) {
317 Log.v(TAG, "Found input characteristic");
318 // Start notifications
319 BluetoothGattDescriptor cccd = chr.getDescriptor(UUID.fromString("00002902-0000-1000-8000-00805f9b34fb"));
320 if (cccd != null) {
321 enableNotification(chr.getUuid());
322 }
323 }
324 }
325 return true;
326 }
327 }
328
329 if ((mGatt.getServices().size() == 0) && mIsChromebook && !mIsReconnecting) {
330 Log.e(TAG, "Chromebook: Discovered services were empty; this almost certainly means the BtGatt.ContextMap bug has bitten us.");
331 mIsConnected = false;
332 mIsReconnecting = true;
333 mGatt.disconnect();
334 mGatt = connectGatt(false);
335 }
336
337 return false;
338 }
339
340 //////////////////////////////////////////////////////////////////////////////////////////////////////
341 //////////////////////////////////////////////////////////////////////////////////////////////////////
342 //////////////////////////////////////////////////////////////////////////////////////////////////////
343
344 private void finishCurrentGattOperation() {
345 GattOperation op = null;
346 synchronized (mOperations) {
347 if (mCurrentOperation != null) {
348 op = mCurrentOperation;
349 mCurrentOperation = null;
350 }
351 }
352 if (op != null) {
353 boolean result = op.finish(); // TODO: Maybe in main thread as well?
354
355 // Our operation failed, let's add it back to the beginning of our queue.
356 if (!result) {
357 mOperations.addFirst(op);
358 }
359 }
360 executeNextGattOperation();
361 }
362
363 private void executeNextGattOperation() {
364 synchronized (mOperations) {
365 if (mCurrentOperation != null)
366 return;
367
368 if (mOperations.isEmpty())
369 return;
370
371 mCurrentOperation = mOperations.removeFirst();
372 }
373
374 // Run in main thread
375 mHandler.post(new Runnable() {
376 @Override
377 public void run() {
378 synchronized (mOperations) {
379 if (mCurrentOperation == null) {
380 Log.e(TAG, "Current operation null in executor?");
381 return;
382 }
383
384 mCurrentOperation.run();
385 // now wait for the GATT callback and when it comes, finish this operation
386 }
387 }
388 });
389 }
390
391 private void queueGattOperation(GattOperation op) {
392 synchronized (mOperations) {
393 mOperations.add(op);
394 }
395 executeNextGattOperation();
396 }
397
398 private void enableNotification(UUID chrUuid) {
399 GattOperation op = HIDDeviceBLESteamController.GattOperation.enableNotification(mGatt, chrUuid);
400 queueGattOperation(op);
401 }
402
403 public void writeCharacteristic(UUID uuid, byte[] value) {
404 GattOperation op = HIDDeviceBLESteamController.GattOperation.writeCharacteristic(mGatt, uuid, value);
405 queueGattOperation(op);
406 }
407
408 public void readCharacteristic(UUID uuid) {
409 GattOperation op = HIDDeviceBLESteamController.GattOperation.readCharacteristic(mGatt, uuid);
410 queueGattOperation(op);
411 }
412
413 //////////////////////////////////////////////////////////////////////////////////////////////////////
414 ////////////// BluetoothGattCallback overridden methods
415 //////////////////////////////////////////////////////////////////////////////////////////////////////
416
417 public void onConnectionStateChange(BluetoothGatt g, int status, int newState) {
418 //Log.v(TAG, "onConnectionStateChange status=" + status + " newState=" + newState);
419 mIsReconnecting = false;
420 if (newState == 2) {
421 mIsConnected = true;
422 // Run directly, without GattOperation
423 if (!isRegistered()) {
424 mHandler.post(new Runnable() {
425 @Override
426 public void run() {
427 mGatt.discoverServices();
428 }
429 });
430 }
431 }
432 else if (newState == 0) {
433 mIsConnected = false;
434 }
435
436 // Disconnection is handled in SteamLink using the ACTION_ACL_DISCONNECTED Intent.
437 }
438
439 public void onServicesDiscovered(BluetoothGatt gatt, int status) {
440 //Log.v(TAG, "onServicesDiscovered status=" + status);
441 if (status == 0) {
442 if (gatt.getServices().size() == 0) {
443 Log.v(TAG, "onServicesDiscovered returned zero services; something has gone horribly wrong down in Android's Bluetooth stack.");
444 mIsReconnecting = true;
445 mIsConnected = false;
446 gatt.disconnect();
447 mGatt = connectGatt(false);
448 }
449 else {
450 probeService(this);
451 }
452 }
453 }
454
455 public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
456 //Log.v(TAG, "onCharacteristicRead status=" + status + " uuid=" + characteristic.getUuid());
457
458 if (characteristic.getUuid().equals(reportCharacteristic) && !mFrozen) {
459 mManager.HIDDeviceFeatureReport(getId(), characteristic.getValue());
460 }
461
462 finishCurrentGattOperation();
463 }
464
465 public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
466 //Log.v(TAG, "onCharacteristicWrite status=" + status + " uuid=" + characteristic.getUuid());
467
468 if (characteristic.getUuid().equals(reportCharacteristic)) {
469 // Only register controller with the native side once it has been fully configured
470 if (!isRegistered()) {
471 Log.v(TAG, "Registering Steam Controller with ID: " + getId());
472 mManager.HIDDeviceConnected(getId(), getIdentifier(), getVendorId(), getProductId(), getSerialNumber(), getVersion(), getManufacturerName(), getProductName(), 0, 0, 0, 0);
473 setRegistered();
474 }
475 }
476
477 finishCurrentGattOperation();
478 }
479
480 public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
481 // Enable this for verbose logging of controller input reports
482 //Log.v(TAG, "onCharacteristicChanged uuid=" + characteristic.getUuid() + " data=" + HexDump.dumpHexString(characteristic.getValue()));
483
484 if (characteristic.getUuid().equals(inputCharacteristic) && !mFrozen) {
485 mManager.HIDDeviceInputReport(getId(), characteristic.getValue());
486 }
487 }
488
489 public void onDescriptorRead(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {
490 //Log.v(TAG, "onDescriptorRead status=" + status);
491 }
492
493 public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {
494 BluetoothGattCharacteristic chr = descriptor.getCharacteristic();
495 //Log.v(TAG, "onDescriptorWrite status=" + status + " uuid=" + chr.getUuid() + " descriptor=" + descriptor.getUuid());
496
497 if (chr.getUuid().equals(inputCharacteristic)) {
498 boolean hasWrittenInputDescriptor = true;
499 BluetoothGattCharacteristic reportChr = chr.getService().getCharacteristic(reportCharacteristic);
500 if (reportChr != null) {
501 Log.v(TAG, "Writing report characteristic to enter valve mode");
502 reportChr.setValue(enterValveMode);
503 gatt.writeCharacteristic(reportChr);
504 }
505 }
506
507 finishCurrentGattOperation();
508 }
509
510 public void onReliableWriteCompleted(BluetoothGatt gatt, int status) {
511 //Log.v(TAG, "onReliableWriteCompleted status=" + status);
512 }
513
514 public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status) {
515 //Log.v(TAG, "onReadRemoteRssi status=" + status);
516 }
517
518 public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) {
519 //Log.v(TAG, "onMtuChanged status=" + status);
520 }
521
522 //////////////////////////////////////////////////////////////////////////////////////////////////////
523 //////// Public API
524 //////////////////////////////////////////////////////////////////////////////////////////////////////
525
526 @Override
527 public int getId() {
528 return mDeviceId;
529 }
530
531 @Override
532 public int getVendorId() {
533 // Valve Corporation
534 final int VALVE_USB_VID = 0x28DE;
535 return VALVE_USB_VID;
536 }
537
538 @Override
539 public int getProductId() {
540 // We don't have an easy way to query from the Bluetooth device, but we know what it is
541 final int D0G_BLE2_PID = 0x1106;
542 return D0G_BLE2_PID;
543 }
544
545 @Override
546 public String getSerialNumber() {
547 // This will be read later via feature report by Steam
548 return "12345";
549 }
550
551 @Override
552 public int getVersion() {
553 return 0;
554 }
555
556 @Override
557 public String getManufacturerName() {
558 return "Valve Corporation";
559 }
560
561 @Override
562 public String getProductName() {
563 return "Steam Controller";
564 }
565
566 @Override
567 public UsbDevice getDevice() {
568 return null;
569 }
570
571 @Override
572 public boolean open() {
573 return true;
574 }
575
576 @Override
577 public int sendFeatureReport(byte[] report) {
578 if (!isRegistered()) {
579 Log.e(TAG, "Attempted sendFeatureReport before Steam Controller is registered!");
580 if (mIsConnected) {
581 probeService(this);
582 }
583 return -1;
584 }
585
586 // We need to skip the first byte, as that doesn't go over the air
587 byte[] actual_report = Arrays.copyOfRange(report, 1, report.length - 1);
588 //Log.v(TAG, "sendFeatureReport " + HexDump.dumpHexString(actual_report));
589 writeCharacteristic(reportCharacteristic, actual_report);
590 return report.length;
591 }
592
593 @Override
594 public int sendOutputReport(byte[] report) {
595 if (!isRegistered()) {
596 Log.e(TAG, "Attempted sendOutputReport before Steam Controller is registered!");
597 if (mIsConnected) {
598 probeService(this);
599 }
600 return -1;
601 }
602
603 //Log.v(TAG, "sendFeatureReport " + HexDump.dumpHexString(report));
604 writeCharacteristic(reportCharacteristic, report);
605 return report.length;
606 }
607
608 @Override
609 public boolean getFeatureReport(byte[] report) {
610 if (!isRegistered()) {
611 Log.e(TAG, "Attempted getFeatureReport before Steam Controller is registered!");
612 if (mIsConnected) {
613 probeService(this);
614 }
615 return false;
616 }
617
618 //Log.v(TAG, "getFeatureReport");
619 readCharacteristic(reportCharacteristic);
620 return true;
621 }
622
623 @Override
624 public void close() {
625 }
626
627 @Override
628 public void setFrozen(boolean frozen) {
629 mFrozen = frozen;
630 }
631
632 @Override
633 public void shutdown() {
634 close();
635
636 BluetoothGatt g = mGatt;
637 if (g != null) {
638 g.disconnect();
639 g.close();
640 mGatt = null;
641 }
642 mManager = null;
643 mIsRegistered = false;
644 mIsConnected = false;
645 mOperations.clear();
646 }
647
648 }
649
0 package org.libsdl.app;
1
2 import android.app.Activity;
3 import android.app.AlertDialog;
4 import android.app.PendingIntent;
5 import android.bluetooth.BluetoothAdapter;
6 import android.bluetooth.BluetoothDevice;
7 import android.bluetooth.BluetoothManager;
8 import android.bluetooth.BluetoothProfile;
9 import android.util.Log;
10 import android.content.BroadcastReceiver;
11 import android.content.Context;
12 import android.content.DialogInterface;
13 import android.content.Intent;
14 import android.content.IntentFilter;
15 import android.content.SharedPreferences;
16 import android.content.pm.PackageManager;
17 import android.hardware.usb.*;
18 import android.os.Handler;
19 import android.os.Looper;
20
21 import java.util.ArrayList;
22 import java.util.HashMap;
23 import java.util.Iterator;
24 import java.util.List;
25
26 public class HIDDeviceManager {
27 private static final String TAG = "hidapi";
28 private static final String ACTION_USB_PERMISSION = "org.libsdl.app.USB_PERMISSION";
29
30 private static HIDDeviceManager sManager;
31 private static int sManagerRefCount = 0;
32
33 public static HIDDeviceManager acquire(Context context) {
34 if (sManagerRefCount == 0) {
35 sManager = new HIDDeviceManager(context);
36 }
37 ++sManagerRefCount;
38 return sManager;
39 }
40
41 public static void release(HIDDeviceManager manager) {
42 if (manager == sManager) {
43 --sManagerRefCount;
44 if (sManagerRefCount == 0) {
45 sManager.close();
46 sManager = null;
47 }
48 }
49 }
50
51 private Context mContext;
52 private HashMap<Integer, HIDDevice> mDevicesById = new HashMap<Integer, HIDDevice>();
53 private HashMap<BluetoothDevice, HIDDeviceBLESteamController> mBluetoothDevices = new HashMap<BluetoothDevice, HIDDeviceBLESteamController>();
54 private int mNextDeviceId = 0;
55 private SharedPreferences mSharedPreferences = null;
56 private boolean mIsChromebook = false;
57 private UsbManager mUsbManager;
58 private Handler mHandler;
59 private BluetoothManager mBluetoothManager;
60 private List<BluetoothDevice> mLastBluetoothDevices;
61
62 private final BroadcastReceiver mUsbBroadcast = new BroadcastReceiver() {
63 @Override
64 public void onReceive(Context context, Intent intent) {
65 String action = intent.getAction();
66 if (action.equals(UsbManager.ACTION_USB_DEVICE_ATTACHED)) {
67 UsbDevice usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
68 handleUsbDeviceAttached(usbDevice);
69 } else if (action.equals(UsbManager.ACTION_USB_DEVICE_DETACHED)) {
70 UsbDevice usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
71 handleUsbDeviceDetached(usbDevice);
72 } else if (action.equals(HIDDeviceManager.ACTION_USB_PERMISSION)) {
73 UsbDevice usbDevice = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
74 handleUsbDevicePermission(usbDevice, intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false));
75 }
76 }
77 };
78
79 private final BroadcastReceiver mBluetoothBroadcast = new BroadcastReceiver() {
80 @Override
81 public void onReceive(Context context, Intent intent) {
82 String action = intent.getAction();
83 // Bluetooth device was connected. If it was a Steam Controller, handle it
84 if (action.equals(BluetoothDevice.ACTION_ACL_CONNECTED)) {
85 BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
86 Log.d(TAG, "Bluetooth device connected: " + device);
87
88 if (isSteamController(device)) {
89 connectBluetoothDevice(device);
90 }
91 }
92
93 // Bluetooth device was disconnected, remove from controller manager (if any)
94 if (action.equals(BluetoothDevice.ACTION_ACL_DISCONNECTED)) {
95 BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
96 Log.d(TAG, "Bluetooth device disconnected: " + device);
97
98 disconnectBluetoothDevice(device);
99 }
100 }
101 };
102
103 private HIDDeviceManager(final Context context) {
104 mContext = context;
105
106 // Make sure we have the HIDAPI library loaded with the native functions
107 try {
108 SDL.loadLibrary("hidapi");
109 } catch (Throwable e) {
110 Log.w(TAG, "Couldn't load hidapi: " + e.toString());
111
112 AlertDialog.Builder builder = new AlertDialog.Builder(context);
113 builder.setCancelable(false);
114 builder.setTitle("SDL HIDAPI Error");
115 builder.setMessage("Please report the following error to the SDL maintainers: " + e.getMessage());
116 builder.setNegativeButton("Quit", new DialogInterface.OnClickListener() {
117 @Override
118 public void onClick(DialogInterface dialog, int which) {
119 try {
120 // If our context is an activity, exit rather than crashing when we can't
121 // call our native functions.
122 Activity activity = (Activity)context;
123
124 activity.finish();
125 }
126 catch (ClassCastException cce) {
127 // Context wasn't an activity, there's nothing we can do. Give up and return.
128 }
129 }
130 });
131 builder.show();
132
133 return;
134 }
135
136 HIDDeviceRegisterCallback();
137
138 mSharedPreferences = mContext.getSharedPreferences("hidapi", Context.MODE_PRIVATE);
139 mIsChromebook = mContext.getPackageManager().hasSystemFeature("org.chromium.arc.device_management");
140
141 // if (shouldClear) {
142 // SharedPreferences.Editor spedit = mSharedPreferences.edit();
143 // spedit.clear();
144 // spedit.commit();
145 // }
146 // else
147 {
148 mNextDeviceId = mSharedPreferences.getInt("next_device_id", 0);
149 }
150
151 initializeUSB();
152 initializeBluetooth();
153 }
154
155 public Context getContext() {
156 return mContext;
157 }
158
159 public int getDeviceIDForIdentifier(String identifier) {
160 SharedPreferences.Editor spedit = mSharedPreferences.edit();
161
162 int result = mSharedPreferences.getInt(identifier, 0);
163 if (result == 0) {
164 result = mNextDeviceId++;
165 spedit.putInt("next_device_id", mNextDeviceId);
166 }
167
168 spedit.putInt(identifier, result);
169 spedit.commit();
170 return result;
171 }
172
173 private void initializeUSB() {
174 mUsbManager = (UsbManager)mContext.getSystemService(Context.USB_SERVICE);
175
176 /*
177 // Logging
178 for (UsbDevice device : mUsbManager.getDeviceList().values()) {
179 Log.i(TAG,"Path: " + device.getDeviceName());
180 Log.i(TAG,"Manufacturer: " + device.getManufacturerName());
181 Log.i(TAG,"Product: " + device.getProductName());
182 Log.i(TAG,"ID: " + device.getDeviceId());
183 Log.i(TAG,"Class: " + device.getDeviceClass());
184 Log.i(TAG,"Protocol: " + device.getDeviceProtocol());
185 Log.i(TAG,"Vendor ID " + device.getVendorId());
186 Log.i(TAG,"Product ID: " + device.getProductId());
187 Log.i(TAG,"Interface count: " + device.getInterfaceCount());
188 Log.i(TAG,"---------------------------------------");
189
190 // Get interface details
191 for (int index = 0; index < device.getInterfaceCount(); index++) {
192 UsbInterface mUsbInterface = device.getInterface(index);
193 Log.i(TAG," ***** *****");
194 Log.i(TAG," Interface index: " + index);
195 Log.i(TAG," Interface ID: " + mUsbInterface.getId());
196 Log.i(TAG," Interface class: " + mUsbInterface.getInterfaceClass());
197 Log.i(TAG," Interface subclass: " + mUsbInterface.getInterfaceSubclass());
198 Log.i(TAG," Interface protocol: " + mUsbInterface.getInterfaceProtocol());
199 Log.i(TAG," Endpoint count: " + mUsbInterface.getEndpointCount());
200
201 // Get endpoint details
202 for (int epi = 0; epi < mUsbInterface.getEndpointCount(); epi++)
203 {
204 UsbEndpoint mEndpoint = mUsbInterface.getEndpoint(epi);
205 Log.i(TAG," ++++ ++++ ++++");
206 Log.i(TAG," Endpoint index: " + epi);
207 Log.i(TAG," Attributes: " + mEndpoint.getAttributes());
208 Log.i(TAG," Direction: " + mEndpoint.getDirection());
209 Log.i(TAG," Number: " + mEndpoint.getEndpointNumber());
210 Log.i(TAG," Interval: " + mEndpoint.getInterval());
211 Log.i(TAG," Packet size: " + mEndpoint.getMaxPacketSize());
212 Log.i(TAG," Type: " + mEndpoint.getType());
213 }
214 }
215 }
216 Log.i(TAG," No more devices connected.");
217 */
218
219 // Register for USB broadcasts and permission completions
220 IntentFilter filter = new IntentFilter();
221 filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
222 filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
223 filter.addAction(HIDDeviceManager.ACTION_USB_PERMISSION);
224 mContext.registerReceiver(mUsbBroadcast, filter);
225
226 for (UsbDevice usbDevice : mUsbManager.getDeviceList().values()) {
227 handleUsbDeviceAttached(usbDevice);
228 }
229 }
230
231 UsbManager getUSBManager() {
232 return mUsbManager;
233 }
234
235 private void shutdownUSB() {
236 try {
237 mContext.unregisterReceiver(mUsbBroadcast);
238 } catch (Exception e) {
239 // We may not have registered, that's okay
240 }
241 }
242
243 private boolean isHIDDeviceInterface(UsbDevice usbDevice, UsbInterface usbInterface) {
244 if (usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_HID) {
245 return true;
246 }
247 if (isXbox360Controller(usbDevice, usbInterface) || isXboxOneController(usbDevice, usbInterface)) {
248 return true;
249 }
250 return false;
251 }
252
253 private boolean isXbox360Controller(UsbDevice usbDevice, UsbInterface usbInterface) {
254 final int XB360_IFACE_SUBCLASS = 93;
255 final int XB360_IFACE_PROTOCOL = 1; // Wired
256 final int XB360W_IFACE_PROTOCOL = 129; // Wireless
257 final int[] SUPPORTED_VENDORS = {
258 0x0079, // GPD Win 2
259 0x044f, // Thrustmaster
260 0x045e, // Microsoft
261 0x046d, // Logitech
262 0x056e, // Elecom
263 0x06a3, // Saitek
264 0x0738, // Mad Catz
265 0x07ff, // Mad Catz
266 0x0e6f, // PDP
267 0x0f0d, // Hori
268 0x1038, // SteelSeries
269 0x11c9, // Nacon
270 0x12ab, // Unknown
271 0x1430, // RedOctane
272 0x146b, // BigBen
273 0x1532, // Razer Sabertooth
274 0x15e4, // Numark
275 0x162e, // Joytech
276 0x1689, // Razer Onza
277 0x1bad, // Harmonix
278 0x24c6, // PowerA
279 };
280
281 if (usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_VENDOR_SPEC &&
282 usbInterface.getInterfaceSubclass() == XB360_IFACE_SUBCLASS &&
283 (usbInterface.getInterfaceProtocol() == XB360_IFACE_PROTOCOL ||
284 usbInterface.getInterfaceProtocol() == XB360W_IFACE_PROTOCOL)) {
285 int vendor_id = usbDevice.getVendorId();
286 for (int supportedVid : SUPPORTED_VENDORS) {
287 if (vendor_id == supportedVid) {
288 return true;
289 }
290 }
291 }
292 return false;
293 }
294
295 private boolean isXboxOneController(UsbDevice usbDevice, UsbInterface usbInterface) {
296 final int XB1_IFACE_SUBCLASS = 71;
297 final int XB1_IFACE_PROTOCOL = 208;
298 final int[] SUPPORTED_VENDORS = {
299 0x045e, // Microsoft
300 0x0738, // Mad Catz
301 0x0e6f, // PDP
302 0x0f0d, // Hori
303 0x1532, // Razer Wildcat
304 0x24c6, // PowerA
305 0x2e24, // Hyperkin
306 };
307
308 if (usbInterface.getId() == 0 &&
309 usbInterface.getInterfaceClass() == UsbConstants.USB_CLASS_VENDOR_SPEC &&
310 usbInterface.getInterfaceSubclass() == XB1_IFACE_SUBCLASS &&
311 usbInterface.getInterfaceProtocol() == XB1_IFACE_PROTOCOL) {
312 int vendor_id = usbDevice.getVendorId();
313 for (int supportedVid : SUPPORTED_VENDORS) {
314 if (vendor_id == supportedVid) {
315 return true;
316 }
317 }
318 }
319 return false;
320 }
321
322 private void handleUsbDeviceAttached(UsbDevice usbDevice) {
323 connectHIDDeviceUSB(usbDevice);
324 }
325
326 private void handleUsbDeviceDetached(UsbDevice usbDevice) {
327 List<Integer> devices = new ArrayList<Integer>();
328 for (HIDDevice device : mDevicesById.values()) {
329 if (usbDevice.equals(device.getDevice())) {
330 devices.add(device.getId());
331 }
332 }
333 for (int id : devices) {
334 HIDDevice device = mDevicesById.get(id);
335 mDevicesById.remove(id);
336 device.shutdown();
337 HIDDeviceDisconnected(id);
338 }
339 }
340
341 private void handleUsbDevicePermission(UsbDevice usbDevice, boolean permission_granted) {
342 for (HIDDevice device : mDevicesById.values()) {
343 if (usbDevice.equals(device.getDevice())) {
344 boolean opened = false;
345 if (permission_granted) {
346 opened = device.open();
347 }
348 HIDDeviceOpenResult(device.getId(), opened);
349 }
350 }
351 }
352
353 private void connectHIDDeviceUSB(UsbDevice usbDevice) {
354 synchronized (this) {
355 for (int interface_index = 0; interface_index < usbDevice.getInterfaceCount(); interface_index++) {
356 UsbInterface usbInterface = usbDevice.getInterface(interface_index);
357 if (isHIDDeviceInterface(usbDevice, usbInterface)) {
358 HIDDeviceUSB device = new HIDDeviceUSB(this, usbDevice, interface_index);
359 int id = device.getId();
360 mDevicesById.put(id, device);
361 HIDDeviceConnected(id, device.getIdentifier(), device.getVendorId(), device.getProductId(), device.getSerialNumber(), device.getVersion(), device.getManufacturerName(), device.getProductName(), usbInterface.getId(), usbInterface.getInterfaceClass(), usbInterface.getInterfaceSubclass(), usbInterface.getInterfaceProtocol());
362 }
363 }
364 }
365 }
366
367 private void initializeBluetooth() {
368 Log.d(TAG, "Initializing Bluetooth");
369
370 if (mContext.getPackageManager().checkPermission(android.Manifest.permission.BLUETOOTH, mContext.getPackageName()) != PackageManager.PERMISSION_GRANTED) {
371 Log.d(TAG, "Couldn't initialize Bluetooth, missing android.permission.BLUETOOTH");
372 return;
373 }
374
375 // Find bonded bluetooth controllers and create SteamControllers for them
376 mBluetoothManager = (BluetoothManager)mContext.getSystemService(Context.BLUETOOTH_SERVICE);
377 if (mBluetoothManager == null) {
378 // This device doesn't support Bluetooth.
379 return;
380 }
381
382 BluetoothAdapter btAdapter = mBluetoothManager.getAdapter();
383 if (btAdapter == null) {
384 // This device has Bluetooth support in the codebase, but has no available adapters.
385 return;
386 }
387
388 // Get our bonded devices.
389 for (BluetoothDevice device : btAdapter.getBondedDevices()) {
390
391 Log.d(TAG, "Bluetooth device available: " + device);
392 if (isSteamController(device)) {
393 connectBluetoothDevice(device);
394 }
395
396 }
397
398 // NOTE: These don't work on Chromebooks, to my undying dismay.
399 IntentFilter filter = new IntentFilter();
400 filter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED);
401 filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);
402 mContext.registerReceiver(mBluetoothBroadcast, filter);
403
404 if (mIsChromebook) {
405 mHandler = new Handler(Looper.getMainLooper());
406 mLastBluetoothDevices = new ArrayList<BluetoothDevice>();
407
408 // final HIDDeviceManager finalThis = this;
409 // mHandler.postDelayed(new Runnable() {
410 // @Override
411 // public void run() {
412 // finalThis.chromebookConnectionHandler();
413 // }
414 // }, 5000);
415 }
416 }
417
418 private void shutdownBluetooth() {
419 try {
420 mContext.unregisterReceiver(mBluetoothBroadcast);
421 } catch (Exception e) {
422 // We may not have registered, that's okay
423 }
424 }
425
426 // Chromebooks do not pass along ACTION_ACL_CONNECTED / ACTION_ACL_DISCONNECTED properly.
427 // This function provides a sort of dummy version of that, watching for changes in the
428 // connected devices and attempting to add controllers as things change.
429 public void chromebookConnectionHandler() {
430 if (!mIsChromebook) {
431 return;
432 }
433
434 ArrayList<BluetoothDevice> disconnected = new ArrayList<BluetoothDevice>();
435 ArrayList<BluetoothDevice> connected = new ArrayList<BluetoothDevice>();
436
437 List<BluetoothDevice> currentConnected = mBluetoothManager.getConnectedDevices(BluetoothProfile.GATT);
438
439 for (BluetoothDevice bluetoothDevice : currentConnected) {
440 if (!mLastBluetoothDevices.contains(bluetoothDevice)) {
441 connected.add(bluetoothDevice);
442 }
443 }
444 for (BluetoothDevice bluetoothDevice : mLastBluetoothDevices) {
445 if (!currentConnected.contains(bluetoothDevice)) {
446 disconnected.add(bluetoothDevice);
447 }
448 }
449
450 mLastBluetoothDevices = currentConnected;
451
452 for (BluetoothDevice bluetoothDevice : disconnected) {
453 disconnectBluetoothDevice(bluetoothDevice);
454 }
455 for (BluetoothDevice bluetoothDevice : connected) {
456 connectBluetoothDevice(bluetoothDevice);
457 }
458
459 final HIDDeviceManager finalThis = this;
460 mHandler.postDelayed(new Runnable() {
461 @Override
462 public void run() {
463 finalThis.chromebookConnectionHandler();
464 }
465 }, 10000);
466 }
467
468 public boolean connectBluetoothDevice(BluetoothDevice bluetoothDevice) {
469 Log.v(TAG, "connectBluetoothDevice device=" + bluetoothDevice);
470 synchronized (this) {
471 if (mBluetoothDevices.containsKey(bluetoothDevice)) {
472 Log.v(TAG, "Steam controller with address " + bluetoothDevice + " already exists, attempting reconnect");
473
474 HIDDeviceBLESteamController device = mBluetoothDevices.get(bluetoothDevice);
475 device.reconnect();
476
477 return false;
478 }
479 HIDDeviceBLESteamController device = new HIDDeviceBLESteamController(this, bluetoothDevice);
480 int id = device.getId();
481 mBluetoothDevices.put(bluetoothDevice, device);
482 mDevicesById.put(id, device);
483
484 // The Steam Controller will mark itself connected once initialization is complete
485 }
486 return true;
487 }
488
489 public void disconnectBluetoothDevice(BluetoothDevice bluetoothDevice) {
490 synchronized (this) {
491 HIDDeviceBLESteamController device = mBluetoothDevices.get(bluetoothDevice);
492 if (device == null)
493 return;
494
495 int id = device.getId();
496 mBluetoothDevices.remove(bluetoothDevice);
497 mDevicesById.remove(id);
498 device.shutdown();
499 HIDDeviceDisconnected(id);
500 }
501 }
502
503 public boolean isSteamController(BluetoothDevice bluetoothDevice) {
504 // Sanity check. If you pass in a null device, by definition it is never a Steam Controller.
505 if (bluetoothDevice == null) {
506 return false;
507 }
508
509 // If the device has no local name, we really don't want to try an equality check against it.
510 if (bluetoothDevice.getName() == null) {
511 return false;
512 }
513
514 return bluetoothDevice.getName().equals("SteamController") && ((bluetoothDevice.getType() & BluetoothDevice.DEVICE_TYPE_LE) != 0);
515 }
516
517 private void close() {
518 shutdownUSB();
519 shutdownBluetooth();
520 synchronized (this) {
521 for (HIDDevice device : mDevicesById.values()) {
522 device.shutdown();
523 }
524 mDevicesById.clear();
525 mBluetoothDevices.clear();
526 HIDDeviceReleaseCallback();
527 }
528 }
529
530 public void setFrozen(boolean frozen) {
531 synchronized (this) {
532 for (HIDDevice device : mDevicesById.values()) {
533 device.setFrozen(frozen);
534 }
535 }
536 }
537
538 //////////////////////////////////////////////////////////////////////////////////////////////////////
539 //////////////////////////////////////////////////////////////////////////////////////////////////////
540 //////////////////////////////////////////////////////////////////////////////////////////////////////
541
542 private HIDDevice getDevice(int id) {
543 synchronized (this) {
544 HIDDevice result = mDevicesById.get(id);
545 if (result == null) {
546 Log.v(TAG, "No device for id: " + id);
547 Log.v(TAG, "Available devices: " + mDevicesById.keySet());
548 }
549 return result;
550 }
551 }
552
553 //////////////////////////////////////////////////////////////////////////////////////////////////////
554 ////////// JNI interface functions
555 //////////////////////////////////////////////////////////////////////////////////////////////////////
556
557 public boolean openDevice(int deviceID) {
558 Log.v(TAG, "openDevice deviceID=" + deviceID);
559 HIDDevice device = getDevice(deviceID);
560 if (device == null) {
561 HIDDeviceDisconnected(deviceID);
562 return false;
563 }
564
565 // Look to see if this is a USB device and we have permission to access it
566 UsbDevice usbDevice = device.getDevice();
567 if (usbDevice != null && !mUsbManager.hasPermission(usbDevice)) {
568 HIDDeviceOpenPending(deviceID);
569 try {
570 mUsbManager.requestPermission(usbDevice, PendingIntent.getBroadcast(mContext, 0, new Intent(HIDDeviceManager.ACTION_USB_PERMISSION), 0));
571 } catch (Exception e) {
572 Log.v(TAG, "Couldn't request permission for USB device " + usbDevice);
573 HIDDeviceOpenResult(deviceID, false);
574 }
575 return false;
576 }
577
578 try {
579 return device.open();
580 } catch (Exception e) {
581 Log.e(TAG, "Got exception: " + Log.getStackTraceString(e));
582 }
583 return false;
584 }
585
586 public int sendOutputReport(int deviceID, byte[] report) {
587 try {
588 //Log.v(TAG, "sendOutputReport deviceID=" + deviceID + " length=" + report.length);
589 HIDDevice device;
590 device = getDevice(deviceID);
591 if (device == null) {
592 HIDDeviceDisconnected(deviceID);
593 return -1;
594 }
595
596 return device.sendOutputReport(report);
597 } catch (Exception e) {
598 Log.e(TAG, "Got exception: " + Log.getStackTraceString(e));
599 }
600 return -1;
601 }
602
603 public int sendFeatureReport(int deviceID, byte[] report) {
604 try {
605 //Log.v(TAG, "sendFeatureReport deviceID=" + deviceID + " length=" + report.length);
606 HIDDevice device;
607 device = getDevice(deviceID);
608 if (device == null) {
609 HIDDeviceDisconnected(deviceID);
610 return -1;
611 }
612
613 return device.sendFeatureReport(report);
614 } catch (Exception e) {
615 Log.e(TAG, "Got exception: " + Log.getStackTraceString(e));
616 }
617 return -1;
618 }
619
620 public boolean getFeatureReport(int deviceID, byte[] report) {
621 try {
622 //Log.v(TAG, "getFeatureReport deviceID=" + deviceID);
623 HIDDevice device;
624 device = getDevice(deviceID);
625 if (device == null) {
626 HIDDeviceDisconnected(deviceID);
627 return false;
628 }
629
630 return device.getFeatureReport(report);
631 } catch (Exception e) {
632 Log.e(TAG, "Got exception: " + Log.getStackTraceString(e));
633 }
634 return false;
635 }
636
637 public void closeDevice(int deviceID) {
638 try {
639 Log.v(TAG, "closeDevice deviceID=" + deviceID);
640 HIDDevice device;
641 device = getDevice(deviceID);
642 if (device == null) {
643 HIDDeviceDisconnected(deviceID);
644 return;
645 }
646
647 device.close();
648 } catch (Exception e) {
649 Log.e(TAG, "Got exception: " + Log.getStackTraceString(e));
650 }
651 }
652
653
654 //////////////////////////////////////////////////////////////////////////////////////////////////////
655 /////////////// Native methods
656 //////////////////////////////////////////////////////////////////////////////////////////////////////
657
658 private native void HIDDeviceRegisterCallback();
659 private native void HIDDeviceReleaseCallback();
660
661 native void HIDDeviceConnected(int deviceID, String identifier, int vendorId, int productId, String serial_number, int release_number, String manufacturer_string, String product_string, int interface_number, int interface_class, int interface_subclass, int interface_protocol);
662 native void HIDDeviceOpenPending(int deviceID);
663 native void HIDDeviceOpenResult(int deviceID, boolean opened);
664 native void HIDDeviceDisconnected(int deviceID);
665
666 native void HIDDeviceInputReport(int deviceID, byte[] report);
667 native void HIDDeviceFeatureReport(int deviceID, byte[] report);
668 }
0 package org.libsdl.app;
1
2 import android.hardware.usb.*;
3 import android.os.Build;
4 import android.util.Log;
5 import java.util.Arrays;
6
7 class HIDDeviceUSB implements HIDDevice {
8
9 private static final String TAG = "hidapi";
10
11 protected HIDDeviceManager mManager;
12 protected UsbDevice mDevice;
13 protected int mInterfaceIndex;
14 protected int mInterface;
15 protected int mDeviceId;
16 protected UsbDeviceConnection mConnection;
17 protected UsbEndpoint mInputEndpoint;
18 protected UsbEndpoint mOutputEndpoint;
19 protected InputThread mInputThread;
20 protected boolean mRunning;
21 protected boolean mFrozen;
22
23 public HIDDeviceUSB(HIDDeviceManager manager, UsbDevice usbDevice, int interface_index) {
24 mManager = manager;
25 mDevice = usbDevice;
26 mInterfaceIndex = interface_index;
27 mInterface = mDevice.getInterface(mInterfaceIndex).getId();
28 mDeviceId = manager.getDeviceIDForIdentifier(getIdentifier());
29 mRunning = false;
30 }
31
32 public String getIdentifier() {
33 return String.format("%s/%x/%x/%d", mDevice.getDeviceName(), mDevice.getVendorId(), mDevice.getProductId(), mInterfaceIndex);
34 }
35
36 @Override
37 public int getId() {
38 return mDeviceId;
39 }
40
41 @Override
42 public int getVendorId() {
43 return mDevice.getVendorId();
44 }
45
46 @Override
47 public int getProductId() {
48 return mDevice.getProductId();
49 }
50
51 @Override
52 public String getSerialNumber() {
53 String result = null;
54 if (Build.VERSION.SDK_INT >= 21) {
55 try {
56 result = mDevice.getSerialNumber();
57 }
58 catch (SecurityException exception) {
59 //Log.w(TAG, "App permissions mean we cannot get serial number for device " + getDeviceName() + " message: " + exception.getMessage());
60 }
61 }
62 if (result == null) {
63 result = "";
64 }
65 return result;
66 }
67
68 @Override
69 public int getVersion() {
70 return 0;
71 }
72
73 @Override
74 public String getManufacturerName() {
75 String result = null;
76 if (Build.VERSION.SDK_INT >= 21) {
77 result = mDevice.getManufacturerName();
78 }
79 if (result == null) {
80 result = String.format("%x", getVendorId());
81 }
82 return result;
83 }
84
85 @Override
86 public String getProductName() {
87 String result = null;
88 if (Build.VERSION.SDK_INT >= 21) {
89 result = mDevice.getProductName();
90 }
91 if (result == null) {
92 result = String.format("%x", getProductId());
93 }
94 return result;
95 }
96
97 @Override
98 public UsbDevice getDevice() {
99 return mDevice;
100 }
101
102 public String getDeviceName() {
103 return getManufacturerName() + " " + getProductName() + "(0x" + String.format("%x", getVendorId()) + "/0x" + String.format("%x", getProductId()) + ")";
104 }
105
106 @Override
107 public boolean open() {
108 mConnection = mManager.getUSBManager().openDevice(mDevice);
109 if (mConnection == null) {
110 Log.w(TAG, "Unable to open USB device " + getDeviceName());
111 return false;
112 }
113
114 // Force claim our interface
115 UsbInterface iface = mDevice.getInterface(mInterfaceIndex);
116 if (!mConnection.claimInterface(iface, true)) {
117 Log.w(TAG, "Failed to claim interfaces on USB device " + getDeviceName());
118 close();
119 return false;
120 }
121
122 // Find the endpoints
123 for (int j = 0; j < iface.getEndpointCount(); j++) {
124 UsbEndpoint endpt = iface.getEndpoint(j);
125 switch (endpt.getDirection()) {
126 case UsbConstants.USB_DIR_IN:
127 if (mInputEndpoint == null) {
128 mInputEndpoint = endpt;
129 }
130 break;
131 case UsbConstants.USB_DIR_OUT:
132 if (mOutputEndpoint == null) {
133 mOutputEndpoint = endpt;
134 }
135 break;
136 }
137 }
138
139 // Make sure the required endpoints were present
140 if (mInputEndpoint == null || mOutputEndpoint == null) {
141 Log.w(TAG, "Missing required endpoint on USB device " + getDeviceName());
142 close();
143 return false;
144 }
145
146 // Start listening for input
147 mRunning = true;
148 mInputThread = new InputThread();
149 mInputThread.start();
150
151 return true;
152 }
153
154 @Override
155 public int sendFeatureReport(byte[] report) {
156 int res = -1;
157 int offset = 0;
158 int length = report.length;
159 boolean skipped_report_id = false;
160 byte report_number = report[0];
161
162 if (report_number == 0x0) {
163 ++offset;
164 --length;
165 skipped_report_id = true;
166 }
167
168 res = mConnection.controlTransfer(
169 UsbConstants.USB_TYPE_CLASS | 0x01 /*RECIPIENT_INTERFACE*/ | UsbConstants.USB_DIR_OUT,
170 0x09/*HID set_report*/,
171 (3/*HID feature*/ << 8) | report_number,
172 mInterface,
173 report, offset, length,
174 1000/*timeout millis*/);
175
176 if (res < 0) {
177 Log.w(TAG, "sendFeatureReport() returned " + res + " on device " + getDeviceName());
178 return -1;
179 }
180
181 if (skipped_report_id) {
182 ++length;
183 }
184 return length;
185 }
186
187 @Override
188 public int sendOutputReport(byte[] report) {
189 int r = mConnection.bulkTransfer(mOutputEndpoint, report, report.length, 1000);
190 if (r != report.length) {
191 Log.w(TAG, "sendOutputReport() returned " + r + " on device " + getDeviceName());
192 }
193 return r;
194 }
195
196 @Override
197 public boolean getFeatureReport(byte[] report) {
198 int res = -1;
199 int offset = 0;
200 int length = report.length;
201 boolean skipped_report_id = false;
202 byte report_number = report[0];
203
204 if (report_number == 0x0) {
205 /* Offset the return buffer by 1, so that the report ID
206 will remain in byte 0. */
207 ++offset;
208 --length;
209 skipped_report_id = true;
210 }
211
212 res = mConnection.controlTransfer(
213 UsbConstants.USB_TYPE_CLASS | 0x01 /*RECIPIENT_INTERFACE*/ | UsbConstants.USB_DIR_IN,
214 0x01/*HID get_report*/,
215 (3/*HID feature*/ << 8) | report_number,
216 mInterface,
217 report, offset, length,
218 1000/*timeout millis*/);
219
220 if (res < 0) {
221 Log.w(TAG, "getFeatureReport() returned " + res + " on device " + getDeviceName());
222 return false;
223 }
224
225 if (skipped_report_id) {
226 ++res;
227 ++length;
228 }
229
230 byte[] data;
231 if (res == length) {
232 data = report;
233 } else {
234 data = Arrays.copyOfRange(report, 0, res);
235 }
236 mManager.HIDDeviceFeatureReport(mDeviceId, data);
237
238 return true;
239 }
240
241 @Override
242 public void close() {
243 mRunning = false;
244 if (mInputThread != null) {
245 while (mInputThread.isAlive()) {
246 mInputThread.interrupt();
247 try {
248 mInputThread.join();
249 } catch (InterruptedException e) {
250 // Keep trying until we're done
251 }
252 }
253 mInputThread = null;
254 }
255 if (mConnection != null) {
256 UsbInterface iface = mDevice.getInterface(mInterfaceIndex);
257 mConnection.releaseInterface(iface);
258 mConnection.close();
259 mConnection = null;
260 }
261 }
262
263 @Override
264 public void shutdown() {
265 close();
266 mManager = null;
267 }
268
269 @Override
270 public void setFrozen(boolean frozen) {
271 mFrozen = frozen;
272 }
273
274 protected class InputThread extends Thread {
275 @Override
276 public void run() {
277 int packetSize = mInputEndpoint.getMaxPacketSize();
278 byte[] packet = new byte[packetSize];
279 while (mRunning) {
280 int r;
281 try
282 {
283 r = mConnection.bulkTransfer(mInputEndpoint, packet, packetSize, 1000);
284 }
285 catch (Exception e)
286 {
287 Log.v(TAG, "Exception in UsbDeviceConnection bulktransfer: " + e);
288 break;
289 }
290 if (r < 0) {
291 // Could be a timeout or an I/O error
292 }
293 if (r > 0) {
294 byte[] data;
295 if (r == packetSize) {
296 data = packet;
297 } else {
298 data = Arrays.copyOfRange(packet, 0, r);
299 }
300
301 if (!mFrozen) {
302 mManager.HIDDeviceInputReport(mDeviceId, data);
303 }
304 }
305 }
306 }
307 }
308 }
00 package org.libsdl.app;
11
22 import android.content.Context;
3
4 import java.lang.reflect.*;
35
46 /**
57 SDL library initialization
3234 return mContext;
3335 }
3436
37 public static void loadLibrary(String libraryName) throws UnsatisfiedLinkError, SecurityException, NullPointerException {
38
39 if (libraryName == null) {
40 throw new NullPointerException("No library name provided.");
41 }
42
43 try {
44 // Let's see if we have ReLinker available in the project. This is necessary for
45 // some projects that have huge numbers of local libraries bundled, and thus may
46 // trip a bug in Android's native library loader which ReLinker works around. (If
47 // loadLibrary works properly, ReLinker will simply use the normal Android method
48 // internally.)
49 //
50 // To use ReLinker, just add it as a dependency. For more information, see
51 // https://github.com/KeepSafe/ReLinker for ReLinker's repository.
52 //
53 Class relinkClass = mContext.getClassLoader().loadClass("com.getkeepsafe.relinker.ReLinker");
54 Class relinkListenerClass = mContext.getClassLoader().loadClass("com.getkeepsafe.relinker.ReLinker$LoadListener");
55 Class contextClass = mContext.getClassLoader().loadClass("android.content.Context");
56 Class stringClass = mContext.getClassLoader().loadClass("java.lang.String");
57
58 // Get a 'force' instance of the ReLinker, so we can ensure libraries are reinstalled if
59 // they've changed during updates.
60 Method forceMethod = relinkClass.getDeclaredMethod("force");
61 Object relinkInstance = forceMethod.invoke(null);
62 Class relinkInstanceClass = relinkInstance.getClass();
63
64 // Actually load the library!
65 Method loadMethod = relinkInstanceClass.getDeclaredMethod("loadLibrary", contextClass, stringClass, stringClass, relinkListenerClass);
66 loadMethod.invoke(relinkInstance, mContext, libraryName, null, null);
67 }
68 catch (final Throwable e) {
69 // Fall back
70 try {
71 System.loadLibrary(libraryName);
72 }
73 catch (final UnsatisfiedLinkError ule) {
74 throw ule;
75 }
76 catch (final SecurityException se) {
77 throw se;
78 }
79 }
80 }
81
3582 protected static Context mContext;
3683 }
33 import java.io.InputStream;
44 import java.util.Arrays;
55 import java.util.Hashtable;
6 import java.util.Locale;
67 import java.lang.reflect.Method;
8 import java.lang.Math;
79
810 import android.app.*;
911 import android.content.*;
3234 /**
3335 SDL Activity
3436 */
35 public class SDLActivity extends Activity {
37 public class SDLActivity extends Activity implements View.OnSystemUiVisibilityChangeListener {
3638 private static final String TAG = "SDL";
3739
38 public static boolean mIsResumedCalled, mIsSurfaceReady, mHasFocus;
40 public static boolean mIsResumedCalled, mHasFocus;
41 public static final boolean mHasMultiWindow = (Build.VERSION.SDK_INT >= 24);
3942
4043 // Cursor types
4144 private static final int SDL_SYSTEM_CURSOR_NONE = -1;
5255 private static final int SDL_SYSTEM_CURSOR_NO = 10;
5356 private static final int SDL_SYSTEM_CURSOR_HAND = 11;
5457
58 protected static final int SDL_ORIENTATION_UNKNOWN = 0;
59 protected static final int SDL_ORIENTATION_LANDSCAPE = 1;
60 protected static final int SDL_ORIENTATION_LANDSCAPE_FLIPPED = 2;
61 protected static final int SDL_ORIENTATION_PORTRAIT = 3;
62 protected static final int SDL_ORIENTATION_PORTRAIT_FLIPPED = 4;
63
64 protected static int mCurrentOrientation;
65 protected static Locale mCurrentLocale;
66
5567 // Handle the state of the native layer
5668 public enum NativeState {
5769 INIT, RESUMED, PAUSED
6072 public static NativeState mNextNativeState;
6173 public static NativeState mCurrentNativeState;
6274
63 public static boolean mExitCalledFromJava;
64
6575 /** If shared libraries (e.g. SDL or the native application) could not be loaded. */
6676 public static boolean mBrokenLibraries;
67
68 // If we want to separate mouse and touch events.
69 // This is only toggled in native code when a hint is set!
70 public static boolean mSeparateMouseAndTouch;
7177
7278 // Main components
7379 protected static SDLActivity mSingleton;
7682 protected static boolean mScreenKeyboardShown;
7783 protected static ViewGroup mLayout;
7884 protected static SDLClipboardHandler mClipboardHandler;
79 protected static Hashtable<Integer, Object> mCursors;
85 protected static Hashtable<Integer, PointerIcon> mCursors;
8086 protected static int mLastCursorID;
81
87 protected static SDLGenericMotionListener_API12 mMotionListener;
88 protected static HIDDeviceManager mHIDDeviceManager;
8289
8390 // This is what SDL runs in. It invokes SDL_main(), eventually
8491 protected static Thread mSDLThread;
92
93 protected static SDLGenericMotionListener_API12 getMotionListener() {
94 if (mMotionListener == null) {
95 if (Build.VERSION.SDK_INT >= 26) {
96 mMotionListener = new SDLGenericMotionListener_API26();
97 } else
98 if (Build.VERSION.SDK_INT >= 24) {
99 mMotionListener = new SDLGenericMotionListener_API24();
100 } else {
101 mMotionListener = new SDLGenericMotionListener_API12();
102 }
103 }
104
105 return mMotionListener;
106 }
85107
86108 /**
87109 * This method returns the name of the shared object with the application entry point
95117 } else {
96118 library = "libmain.so";
97119 }
98 return library;
120 return getContext().getApplicationInfo().nativeLibraryDir + "/" + library;
99121 }
100122
101123 /**
116138 */
117139 protected String[] getLibraries() {
118140 return new String[] {
141 "hidapi",
119142 "SDL2",
120 // "SDL2_image",
121 // "SDL2_mixer",
143 "SDL2_image",
144 "mpg123", // needed by SDL2_mixer
145 "SDL2_mixer",
122146 // "SDL2_net",
123 // "SDL2_ttf",
147 "SDL2_ttf",
124148 "main"
125149 };
126150 }
128152 // Load the .so
129153 public void loadLibraries() {
130154 for (String lib : getLibraries()) {
131 System.loadLibrary(lib);
155 SDL.loadLibrary(lib);
132156 }
133157 }
134158
150174 mTextEdit = null;
151175 mLayout = null;
152176 mClipboardHandler = null;
153 mCursors = new Hashtable<Integer, Object>();
177 mCursors = new Hashtable<Integer, PointerIcon>();
154178 mLastCursorID = 0;
155179 mSDLThread = null;
156 mExitCalledFromJava = false;
157180 mBrokenLibraries = false;
158181 mIsResumedCalled = false;
159 mIsSurfaceReady = false;
160182 mHasFocus = true;
161183 mNextNativeState = NativeState.INIT;
162184 mCurrentNativeState = NativeState.INIT;
165187 // Setup
166188 @Override
167189 protected void onCreate(Bundle savedInstanceState) {
168 Log.v(TAG, "Device: " + android.os.Build.DEVICE);
169 Log.v(TAG, "Model: " + android.os.Build.MODEL);
190 Log.v(TAG, "Device: " + Build.DEVICE);
191 Log.v(TAG, "Model: " + Build.MODEL);
170192 Log.v(TAG, "onCreate()");
171193 super.onCreate(savedInstanceState);
194
195 try {
196 Thread.currentThread().setName("SDLActivity");
197 } catch (Exception e) {
198 Log.v(TAG, "modify thread properties failed " + e.toString());
199 }
172200
173201 // Load shared libraries
174202 String errorMsgBrokenLib = "";
217245 mSingleton = this;
218246 SDL.setContext(this);
219247
220 if (Build.VERSION.SDK_INT >= 11) {
221 mClipboardHandler = new SDLClipboardHandler_API11();
222 } else {
223 /* Before API 11, no clipboard notification (eg no SDL_CLIPBOARDUPDATE) */
224 mClipboardHandler = new SDLClipboardHandler_Old();
225 }
248 mClipboardHandler = new SDLClipboardHandler_API11();
249
250 mHIDDeviceManager = HIDDeviceManager.acquire(this);
226251
227252 // Set up the surface
228253 mSurface = new SDLSurface(getApplication());
230255 mLayout = new RelativeLayout(this);
231256 mLayout.addView(mSurface);
232257
258 // Get our current screen orientation and pass it down.
259 mCurrentOrientation = SDLActivity.getCurrentOrientation();
260 // Only record current orientation
261 SDLActivity.onNativeOrientationChanged(mCurrentOrientation);
262
263 try {
264 if (Build.VERSION.SDK_INT < 24) {
265 mCurrentLocale = getContext().getResources().getConfiguration().locale;
266 } else {
267 mCurrentLocale = getContext().getResources().getConfiguration().getLocales().get(0);
268 }
269 } catch(Exception ignored) {
270 }
271
233272 setContentView(mLayout);
234273
235274 setWindowStyle(false);
275
276 getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(this);
236277
237278 // Get filename from "Open with" of another application
238279 Intent intent = getIntent();
245286 }
246287 }
247288
289 protected void pauseNativeThread() {
290 mNextNativeState = NativeState.PAUSED;
291 mIsResumedCalled = false;
292
293 if (SDLActivity.mBrokenLibraries) {
294 return;
295 }
296
297 SDLActivity.handleNativeState();
298 }
299
300 protected void resumeNativeThread() {
301 mNextNativeState = NativeState.RESUMED;
302 mIsResumedCalled = true;
303
304 if (SDLActivity.mBrokenLibraries) {
305 return;
306 }
307
308 SDLActivity.handleNativeState();
309 }
310
248311 // Events
249312 @Override
250313 protected void onPause() {
251314 Log.v(TAG, "onPause()");
252315 super.onPause();
253 mNextNativeState = NativeState.PAUSED;
254 mIsResumedCalled = false;
255
256 if (SDLActivity.mBrokenLibraries) {
257 return;
258 }
259
260 SDLActivity.handleNativeState();
316
317 if (mHIDDeviceManager != null) {
318 mHIDDeviceManager.setFrozen(true);
319 }
320 if (!mHasMultiWindow) {
321 pauseNativeThread();
322 }
261323 }
262324
263325 @Override
264326 protected void onResume() {
265327 Log.v(TAG, "onResume()");
266328 super.onResume();
267 mNextNativeState = NativeState.RESUMED;
268 mIsResumedCalled = true;
269
270 if (SDLActivity.mBrokenLibraries) {
271 return;
272 }
273
274 SDLActivity.handleNativeState();
275 }
276
329
330 if (mHIDDeviceManager != null) {
331 mHIDDeviceManager.setFrozen(false);
332 }
333 if (!mHasMultiWindow) {
334 resumeNativeThread();
335 }
336 }
337
338 @Override
339 protected void onStop() {
340 Log.v(TAG, "onStop()");
341 super.onStop();
342 if (mHasMultiWindow) {
343 pauseNativeThread();
344 }
345 }
346
347 @Override
348 protected void onStart() {
349 Log.v(TAG, "onStart()");
350 super.onStart();
351 if (mHasMultiWindow) {
352 resumeNativeThread();
353 }
354 }
355
356 public static int getCurrentOrientation() {
357 final Context context = SDLActivity.getContext();
358 final Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
359
360 int result = SDL_ORIENTATION_UNKNOWN;
361
362 switch (display.getRotation()) {
363 case Surface.ROTATION_0:
364 result = SDL_ORIENTATION_PORTRAIT;
365 break;
366
367 case Surface.ROTATION_90:
368 result = SDL_ORIENTATION_LANDSCAPE;
369 break;
370
371 case Surface.ROTATION_180:
372 result = SDL_ORIENTATION_PORTRAIT_FLIPPED;
373 break;
374
375 case Surface.ROTATION_270:
376 result = SDL_ORIENTATION_LANDSCAPE_FLIPPED;
377 break;
378 }
379
380 return result;
381 }
277382
278383 @Override
279384 public void onWindowFocusChanged(boolean hasFocus) {
284389 return;
285390 }
286391
287 SDLActivity.mHasFocus = hasFocus;
392 mHasFocus = hasFocus;
288393 if (hasFocus) {
289394 mNextNativeState = NativeState.RESUMED;
395 SDLActivity.getMotionListener().reclaimRelativeMouseModeIfNeeded();
396
397 SDLActivity.handleNativeState();
398 nativeFocusChanged(true);
399
290400 } else {
291 mNextNativeState = NativeState.PAUSED;
292 }
293
294 SDLActivity.handleNativeState();
401 nativeFocusChanged(false);
402 if (!mHasMultiWindow) {
403 mNextNativeState = NativeState.PAUSED;
404 SDLActivity.handleNativeState();
405 }
406 }
295407 }
296408
297409 @Override
307419 }
308420
309421 @Override
422 public void onConfigurationChanged(Configuration newConfig) {
423 Log.v(TAG, "onConfigurationChanged()");
424 super.onConfigurationChanged(newConfig);
425
426 if (mCurrentLocale == null || !mCurrentLocale.equals(newConfig.locale)) {
427 mCurrentLocale = newConfig.locale;
428 SDLActivity.onNativeLocaleChanged();
429 }
430 }
431
432 @Override
310433 protected void onDestroy() {
311434 Log.v(TAG, "onDestroy()");
312435
436 if (mHIDDeviceManager != null) {
437 HIDDeviceManager.release(mHIDDeviceManager);
438 mHIDDeviceManager = null;
439 }
440
313441 if (SDLActivity.mBrokenLibraries) {
314442 super.onDestroy();
315 // Reset everything in case the user re opens the app
316 SDLActivity.initialize();
317443 return;
318444 }
319445
320 mNextNativeState = NativeState.PAUSED;
321 SDLActivity.handleNativeState();
322
323 // Send a quit message to the application
324 SDLActivity.mExitCalledFromJava = true;
325 SDLActivity.nativeQuit();
326
327 // Now wait for the SDL thread to quit
328446 if (SDLActivity.mSDLThread != null) {
447
448 // Send Quit event to "SDLThread" thread
449 SDLActivity.nativeSendQuit();
450
451 // Wait for "SDLThread" thread to end
329452 try {
330453 SDLActivity.mSDLThread.join();
331454 } catch(Exception e) {
332 Log.v(TAG, "Problem stopping thread: " + e);
333 }
334 SDLActivity.mSDLThread = null;
335
336 //Log.v(TAG, "Finished waiting for SDL thread");
337 }
455 Log.v(TAG, "Problem stopping SDLThread: " + e);
456 }
457 }
458
459 SDLActivity.nativeQuit();
338460
339461 super.onDestroy();
340
341 // Reset everything in case the user re opens the app
342 SDLActivity.initialize();
462 }
463
464 @Override
465 public void onBackPressed() {
466 // Check if we want to block the back button in case of mouse right click.
467 //
468 // If we do, the normal hardware back button will no longer work and people have to use home,
469 // but the mouse right click will work.
470 //
471 String trapBack = SDLActivity.nativeGetHint("SDL_ANDROID_TRAP_BACK_BUTTON");
472 if ((trapBack != null) && trapBack.equals("1")) {
473 // Exit and let the mouse handler handle this button (if appropriate)
474 return;
475 }
476
477 // Default system back button behavior.
478 if (!isFinishing()) {
479 super.onBackPressed();
480 }
481 }
482
483 // Called by JNI from SDL.
484 public static void manualBackButton() {
485 mSingleton.pressBackButton();
486 }
487
488 // Used to get us onto the activity's main thread
489 public void pressBackButton() {
490 runOnUiThread(new Runnable() {
491 @Override
492 public void run() {
493 if (!SDLActivity.this.isFinishing()) {
494 SDLActivity.this.superOnBackPressed();
495 }
496 }
497 });
498 }
499
500 // Used to access the system back behavior.
501 public void superOnBackPressed() {
502 super.onBackPressed();
343503 }
344504
345505 @Override
379539
380540 // Try a transition to paused state
381541 if (mNextNativeState == NativeState.PAUSED) {
382 nativePause();
383 if (mSurface != null)
542 if (mSDLThread != null) {
543 nativePause();
544 }
545 if (mSurface != null) {
384546 mSurface.handlePause();
547 }
385548 mCurrentNativeState = mNextNativeState;
386549 return;
387550 }
388551
389552 // Try a transition to resumed state
390553 if (mNextNativeState == NativeState.RESUMED) {
391 if (mIsSurfaceReady && mHasFocus && mIsResumedCalled) {
554 if (mSurface.mIsSurfaceReady && mHasFocus && mIsResumedCalled) {
392555 if (mSDLThread == null) {
393556 // This is the entry point to the C app.
394557 // Start up the C app thread and enable sensor input for the first time
397560 mSDLThread = new Thread(new SDLMain(), "SDLThread");
398561 mSurface.enableSensor(Sensor.TYPE_ACCELEROMETER, true);
399562 mSDLThread.start();
400 }
401
402 nativeResume();
403 mSurface.handleResume();
563
564 // No nativeResume(), don't signal Android_ResumeSem
565 mSurface.handleResume();
566 } else {
567 nativeResume();
568 mSurface.handleResume();
569 }
570
404571 mCurrentNativeState = mNextNativeState;
405572 }
406573 }
407574 }
408
409 /* The native thread has finished */
410 public static void handleNativeExit() {
411 SDLActivity.mSDLThread = null;
412 mSingleton.finish();
413 }
414
415575
416576 // Messages from the SDLMain thread
417577 static final int COMMAND_CHANGE_TITLE = 1;
418578 static final int COMMAND_CHANGE_WINDOW_STYLE = 2;
419579 static final int COMMAND_TEXTEDIT_HIDE = 3;
580 static final int COMMAND_CHANGE_SURFACEVIEW_FORMAT = 4;
420581 static final int COMMAND_SET_KEEP_SCREEN_ON = 5;
421582
422583 protected static final int COMMAND_USER = 0x8000;
584
585 protected static boolean mFullscreenModeActive;
423586
424587 /**
425588 * This method is called by SDL if SDL did not handle a message itself.
459622 // This version of Android doesn't support the immersive fullscreen mode
460623 break;
461624 }
462 /* This needs more testing, per bug 4096 - Enabling fullscreen on Android causes the app to toggle fullscreen mode continuously in a loop
463 ***
464625 if (context instanceof Activity) {
465626 Window window = ((Activity) context).getWindow();
466627 if (window != null) {
467628 if ((msg.obj instanceof Integer) && (((Integer) msg.obj).intValue() != 0)) {
468 int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
629 int flags = View.SYSTEM_UI_FLAG_FULLSCREEN |
630 View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
631 View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
632 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
469633 View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
470 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
471 View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
472 View.SYSTEM_UI_FLAG_FULLSCREEN |
473 View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
474 window.getDecorView().setSystemUiVisibility(flags);
634 View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.INVISIBLE;
635 window.getDecorView().setSystemUiVisibility(flags);
475636 window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
637 window.clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
638 SDLActivity.mFullscreenModeActive = true;
476639 } else {
477 int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
478 window.getDecorView().setSystemUiVisibility(flags);
640 int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_VISIBLE;
641 window.getDecorView().setSystemUiVisibility(flags);
642 window.addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
479643 window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
644 SDLActivity.mFullscreenModeActive = false;
480645 }
481646 }
482647 } else {
483648 Log.e(TAG, "error handling message, getContext() returned no Activity");
484649 }
485 ***/
486650 break;
487651 case COMMAND_TEXTEDIT_HIDE:
488652 if (mTextEdit != null) {
493657
494658 InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
495659 imm.hideSoftInputFromWindow(mTextEdit.getWindowToken(), 0);
496
660
497661 mScreenKeyboardShown = false;
662
663 mSurface.requestFocus();
498664 }
499665 break;
500666 case COMMAND_SET_KEEP_SCREEN_ON:
511677 }
512678 break;
513679 }
680 case COMMAND_CHANGE_SURFACEVIEW_FORMAT:
681 {
682 int format = (Integer) msg.obj;
683 int pf;
684
685 if (SDLActivity.mSurface == null) {
686 return;
687 }
688
689 SurfaceHolder holder = SDLActivity.mSurface.getHolder();
690 if (holder == null) {
691 return;
692 }
693
694 if (format == 1) {
695 pf = PixelFormat.RGBA_8888;
696 } else if (format == 2) {
697 pf = PixelFormat.RGBX_8888;
698 } else {
699 pf = PixelFormat.RGB_565;
700 }
701
702 holder.setFormat(pf);
703
704 break;
705 }
514706 default:
515707 if ((context instanceof SDLActivity) && !((SDLActivity) context).onUnhandledMessage(msg.arg1, msg.obj)) {
516708 Log.e(TAG, "error handling message, command is " + msg.arg1);
527719 Message msg = commandHandler.obtainMessage();
528720 msg.arg1 = command;
529721 msg.obj = data;
530 return commandHandler.sendMessage(msg);
722 boolean result = commandHandler.sendMessage(msg);
723
724 if ((Build.VERSION.SDK_INT >= 19) && (command == COMMAND_CHANGE_WINDOW_STYLE)) {
725 // Ensure we don't return until the resize has actually happened,
726 // or 500ms have passed.
727
728 boolean bShouldWait = false;
729
730 if (data instanceof Integer) {
731 // Let's figure out if we're already laid out fullscreen or not.
732 Display display = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
733 android.util.DisplayMetrics realMetrics = new android.util.DisplayMetrics();
734 display.getRealMetrics( realMetrics );
735
736 boolean bFullscreenLayout = ((realMetrics.widthPixels == mSurface.getWidth()) &&
737 (realMetrics.heightPixels == mSurface.getHeight()));
738
739 if (((Integer)data).intValue() == 1) {
740 // If we aren't laid out fullscreen or actively in fullscreen mode already, we're going
741 // to change size and should wait for surfaceChanged() before we return, so the size
742 // is right back in native code. If we're already laid out fullscreen, though, we're
743 // not going to change size even if we change decor modes, so we shouldn't wait for
744 // surfaceChanged() -- which may not even happen -- and should return immediately.
745 bShouldWait = !bFullscreenLayout;
746 }
747 else {
748 // If we're laid out fullscreen (even if the status bar and nav bar are present),
749 // or are actively in fullscreen, we're going to change size and should wait for
750 // surfaceChanged before we return, so the size is right back in native code.
751 bShouldWait = bFullscreenLayout;
752 }
753 }
754
755 if (bShouldWait && (SDLActivity.getContext() != null)) {
756 // We'll wait for the surfaceChanged() method, which will notify us
757 // when called. That way, we know our current size is really the
758 // size we need, instead of grabbing a size that's still got
759 // the navigation and/or status bars before they're hidden.
760 //
761 // We'll wait for up to half a second, because some devices
762 // take a surprisingly long time for the surface resize, but
763 // then we'll just give up and return.
764 //
765 synchronized(SDLActivity.getContext()) {
766 try {
767 SDLActivity.getContext().wait(500);
768 }
769 catch (InterruptedException ie) {
770 ie.printStackTrace();
771 }
772 }
773 }
774 }
775
776 return result;
531777 }
532778
533779 // C functions we call
534780 public static native int nativeSetupJNI();
535781 public static native int nativeRunMain(String library, String function, Object arguments);
536782 public static native void nativeLowMemory();
783 public static native void nativeSendQuit();
537784 public static native void nativeQuit();
538785 public static native void nativePause();
539786 public static native void nativeResume();
787 public static native void nativeFocusChanged(boolean hasFocus);
540788 public static native void onNativeDropFile(String filename);
541 public static native void onNativeResize(int x, int y, int format, float rate);
789 public static native void nativeSetScreenResolution(int surfaceWidth, int surfaceHeight, int deviceWidth, int deviceHeight, int format, float rate);
790 public static native void onNativeResize();
542791 public static native void onNativeKeyDown(int keycode);
543792 public static native void onNativeKeyUp(int keycode);
793 public static native boolean onNativeSoftReturnKey();
544794 public static native void onNativeKeyboardFocusLost();
545 public static native void onNativeMouse(int button, int action, float x, float y);
795 public static native void onNativeMouse(int button, int action, float x, float y, boolean relative);
546796 public static native void onNativeTouch(int touchDevId, int pointerFingerId,
547797 int action, float x,
548798 float y, float p);
549799 public static native void onNativeAccel(float x, float y, float z);
550800 public static native void onNativeClipboardChanged();
801 public static native void onNativeSurfaceCreated();
551802 public static native void onNativeSurfaceChanged();
552803 public static native void onNativeSurfaceDestroyed();
553804 public static native String nativeGetHint(String name);
554805 public static native void nativeSetenv(String name, String value);
806 public static native void onNativeOrientationChanged(int orientation);
807 public static native void nativeAddTouch(int touchId, String name);
808 public static native void nativePermissionResult(int requestCode, boolean result);
809 public static native void onNativeLocaleChanged();
555810
556811 /**
557812 * This method is called by SDL using JNI.
572827 /**
573828 * This method is called by SDL using JNI.
574829 * This is a static method for JNI convenience, it calls a non-static method
575 * so that is can be overridden
830 * so that is can be overridden
576831 */
577832 public static void setOrientation(int w, int h, boolean resizable, String hint)
578833 {
580835 mSingleton.setOrientationBis(w, h, resizable, hint);
581836 }
582837 }
583
838
584839 /**
585840 * This can be overridden
586841 */
587 public void setOrientationBis(int w, int h, boolean resizable, String hint)
842 public void setOrientationBis(int w, int h, boolean resizable, String hint)
588843 {
589 int orientation = -1;
590
844 int orientation_landscape = -1;
845 int orientation_portrait = -1;
846
847 /* If set, hint "explicitly controls which UI orientations are allowed". */
591848 if (hint.contains("LandscapeRight") && hint.contains("LandscapeLeft")) {
592 orientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE;
849 orientation_landscape = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE;
593850 } else if (hint.contains("LandscapeRight")) {
594 orientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
851 orientation_landscape = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
595852 } else if (hint.contains("LandscapeLeft")) {
596 orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
597 } else if (hint.contains("Portrait") && hint.contains("PortraitUpsideDown")) {
598 orientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT;
853 orientation_landscape = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
854 }
855
856 if (hint.contains("Portrait") && hint.contains("PortraitUpsideDown")) {
857 orientation_portrait = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT;
599858 } else if (hint.contains("Portrait")) {
600 orientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
859 orientation_portrait = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
601860 } else if (hint.contains("PortraitUpsideDown")) {
602 orientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
603 }
604
605 /* no valid hint */
606 if (orientation == -1) {
861 orientation_portrait = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;
862 }
863
864 boolean is_landscape_allowed = (orientation_landscape == -1 ? false : true);
865 boolean is_portrait_allowed = (orientation_portrait == -1 ? false : true);
866 int req = -1; /* Requested orientation */
867
868 /* No valid hint, nothing is explicitly allowed */
869 if (!is_portrait_allowed && !is_landscape_allowed) {
607870 if (resizable) {
608 /* no fixed orientation */
871 /* All orientations are allowed */
872 req = ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR;
609873 } else {
610 if (w > h) {
611 orientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE;
874 /* Fixed window and nothing specified. Get orientation from w/h of created window */
875 req = (w > h ? ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE : ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
876 }
877 } else {
878 /* At least one orientation is allowed */
879 if (resizable) {
880 if (is_portrait_allowed && is_landscape_allowed) {
881 /* hint allows both landscape and portrait, promote to full sensor */
882 req = ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR;
612883 } else {
613 orientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT;
614 }
615 }
616 }
617
618 Log.v("SDL", "setOrientation() orientation=" + orientation + " width=" + w +" height="+ h +" resizable=" + resizable + " hint=" + hint);
619 if (orientation != -1) {
620 mSingleton.setRequestedOrientation(orientation);
621 }
622 }
623
624
625 /**
626 * This method is called by SDL using JNI.
627 */
628 public static boolean isScreenKeyboardShown()
884 /* Use the only one allowed "orientation" */
885 req = (is_landscape_allowed ? orientation_landscape : orientation_portrait);
886 }
887 } else {
888 /* Fixed window and both orientations are allowed. Choose one. */
889 if (is_portrait_allowed && is_landscape_allowed) {
890 req = (w > h ? orientation_landscape : orientation_portrait);
891 } else {
892 /* Use the only one allowed "orientation" */
893 req = (is_landscape_allowed ? orientation_landscape : orientation_portrait);
894 }
895 }
896 }
897
898 Log.v(TAG, "setOrientation() requestedOrientation=" + req + " width=" + w +" height="+ h +" resizable=" + resizable + " hint=" + hint);
899 mSingleton.setRequestedOrientation(req);
900 }
901
902 /**
903 * This method is called by SDL using JNI.
904 */
905 public static void minimizeWindow() {
906
907 if (mSingleton == null) {
908 return;
909 }
910
911 Intent startMain = new Intent(Intent.ACTION_MAIN);
912 startMain.addCategory(Intent.CATEGORY_HOME);
913 startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
914 mSingleton.startActivity(startMain);
915 }
916
917 /**
918 * This method is called by SDL using JNI.
919 */
920 public static boolean shouldMinimizeOnFocusLoss() {
921 /*
922 if (Build.VERSION.SDK_INT >= 24) {
923 if (mSingleton == null) {
924 return true;
925 }
926
927 if (mSingleton.isInMultiWindowMode()) {
928 return false;
929 }
930
931 if (mSingleton.isInPictureInPictureMode()) {
932 return false;
933 }
934 }
935
936 return true;
937 */
938 return false;
939 }
940
941 /**
942 * This method is called by SDL using JNI.
943 */
944 public static boolean isScreenKeyboardShown()
629945 {
630946 if (mTextEdit == null) {
631947 return false;
643959 /**
644960 * This method is called by SDL using JNI.
645961 */
962 public static boolean supportsRelativeMouse()
963 {
964 // ChromeOS doesn't provide relative mouse motion via the Android 7 APIs
965 if (isChromebook()) {
966 return false;
967 }
968
969 // DeX mode in Samsung Experience 9.0 and earlier doesn't support relative mice properly under
970 // Android 7 APIs, and simply returns no data under Android 8 APIs.
971 //
972 // This is fixed in Samsung Experience 9.5, which corresponds to Android 8.1.0, and
973 // thus SDK version 27. If we are in DeX mode and not API 27 or higher, as a result,
974 // we should stick to relative mode.
975 //
976 if ((Build.VERSION.SDK_INT < 27) && isDeXMode()) {
977 return false;
978 }
979
980 return SDLActivity.getMotionListener().supportsRelativeMouse();
981 }
982
983 /**
984 * This method is called by SDL using JNI.
985 */
986 public static boolean setRelativeMouseEnabled(boolean enabled)
987 {
988 if (enabled && !supportsRelativeMouse()) {
989 return false;
990 }
991
992 return SDLActivity.getMotionListener().setRelativeMouseEnabled(enabled);
993 }
994
995 /**
996 * This method is called by SDL using JNI.
997 */
646998 public static boolean sendMessage(int command, int param) {
647999 if (mSingleton == null) {
6481000 return false;
6621014 */
6631015 public static boolean isAndroidTV() {
6641016 UiModeManager uiModeManager = (UiModeManager) getContext().getSystemService(UI_MODE_SERVICE);
665 return (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION);
1017 if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION) {
1018 return true;
1019 }
1020 if (Build.MANUFACTURER.equals("MINIX") && Build.MODEL.equals("NEO-U1")) {
1021 return true;
1022 }
1023 if (Build.MANUFACTURER.equals("Amlogic") && Build.MODEL.equals("X96-W")) {
1024 return true;
1025 }
1026 if (Build.MANUFACTURER.equals("Amlogic") && Build.MODEL.startsWith("TV")) {
1027 return true;
1028 }
1029 return false;
1030 }
1031
1032 /**
1033 * This method is called by SDL using JNI.
1034 */
1035 public static boolean isTablet() {
1036 DisplayMetrics metrics = new DisplayMetrics();
1037 Activity activity = (Activity)getContext();
1038 if (activity == null) {
1039 return false;
1040 }
1041 activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
1042
1043 double dWidthInches = metrics.widthPixels / (double)metrics.xdpi;
1044 double dHeightInches = metrics.heightPixels / (double)metrics.ydpi;
1045
1046 double dDiagonal = Math.sqrt((dWidthInches * dWidthInches) + (dHeightInches * dHeightInches));
1047
1048 // If our diagonal size is seven inches or greater, we consider ourselves a tablet.
1049 return (dDiagonal >= 7.0);
1050 }
1051
1052 /**
1053 * This method is called by SDL using JNI.
1054 */
1055 public static boolean isChromebook() {
1056 if (getContext() == null) {
1057 return false;
1058 }
1059 return getContext().getPackageManager().hasSystemFeature("org.chromium.arc.device_management");
1060 }
1061
1062 /**
1063 * This method is called by SDL using JNI.
1064 */
1065 public static boolean isDeXMode() {
1066 if (Build.VERSION.SDK_INT < 24) {
1067 return false;
1068 }
1069 try {
1070 final Configuration config = getContext().getResources().getConfiguration();
1071 final Class configClass = config.getClass();
1072 return configClass.getField("SEM_DESKTOP_MODE_ENABLED").getInt(configClass)
1073 == configClass.getField("semDesktopModeEnabled").getInt(config);
1074 } catch(Exception ignored) {
1075 return false;
1076 }
6661077 }
6671078
6681079 /**
6771088 */
6781089 public static boolean getManifestEnvironmentVariables() {
6791090 try {
1091 if (getContext() == null) {
1092 return false;
1093 }
1094
6801095 ApplicationInfo applicationInfo = getContext().getPackageManager().getApplicationInfo(getContext().getPackageName(), PackageManager.GET_META_DATA);
6811096 Bundle bundle = applicationInfo.metaData;
6821097 if (bundle == null) {
6921107 }
6931108 }
6941109 /* environment variables set! */
695 return true;
1110 return true;
6961111 } catch (Exception e) {
697 Log.v("SDL", "exception " + e.toString());
1112 Log.v(TAG, "exception " + e.toString());
6981113 }
6991114 return false;
1115 }
1116
1117 // This method is called by SDLControllerManager's API 26 Generic Motion Handler.
1118 public static View getContentView()
1119 {
1120 return mSingleton.mLayout;
7001121 }
7011122
7021123 static class ShowTextInputTask implements Runnable {
7141135 this.y = y;
7151136 this.w = w;
7161137 this.h = h;
1138
1139 /* Minimum size of 1 pixel, so it takes focus. */
1140 if (this.w <= 0) {
1141 this.w = 1;
1142 }
1143 if (this.h + HEIGHT_PADDING <= 0) {
1144 this.h = 1 - HEIGHT_PADDING;
1145 }
7171146 }
7181147
7191148 @Override
7491178 }
7501179
7511180 public static boolean isTextInputEvent(KeyEvent event) {
752
1181
7531182 // Key pressed with Ctrl should be sent as SDL_KEYDOWN/SDL_KEYUP and not SDL_TEXTINPUT
754 if (Build.VERSION.SDK_INT >= 11) {
755 if (event.isCtrlPressed()) {
756 return false;
757 }
1183 if (event.isCtrlPressed()) {
1184 return false;
7581185 }
7591186
7601187 return event.isPrintingKey() || event.getKeyCode() == KeyEvent.KEYCODE_SPACE;
7701197 return SDLActivity.mSurface.getNativeSurface();
7711198 }
7721199
1200 /**
1201 * This method is called by SDL using JNI.
1202 */
1203 public static void setSurfaceViewFormat(int format) {
1204 mSingleton.sendCommand(COMMAND_CHANGE_SURFACEVIEW_FORMAT, format);
1205 return;
1206 }
1207
7731208 // Input
7741209
7751210 /**
7761211 * This method is called by SDL using JNI.
777 * @return an array which may be empty but is never null.
778 */
779 public static int[] inputGetInputDeviceIds(int sources) {
1212 */
1213 public static void initTouch() {
7801214 int[] ids = InputDevice.getDeviceIds();
781 int[] filtered = new int[ids.length];
782 int used = 0;
1215
7831216 for (int i = 0; i < ids.length; ++i) {
7841217 InputDevice device = InputDevice.getDevice(ids[i]);
785 if ((device != null) && ((device.getSources() & sources) != 0)) {
786 filtered[used++] = device.getId();
787 }
788 }
789 return Arrays.copyOf(filtered, used);
1218 if (device != null && (device.getSources() & InputDevice.SOURCE_TOUCHSCREEN) != 0) {
1219 nativeAddTouch(device.getId(), device.getName());
1220 }
1221 }
7901222 }
7911223
7921224 // APK expansion files support
10641496 return dialog;
10651497 }
10661498
1499 private final Runnable rehideSystemUi = new Runnable() {
1500 @Override
1501 public void run() {
1502 int flags = View.SYSTEM_UI_FLAG_FULLSCREEN |
1503 View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
1504 View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
1505 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
1506 View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
1507 View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.INVISIBLE;
1508
1509 SDLActivity.this.getWindow().getDecorView().setSystemUiVisibility(flags);
1510 }
1511 };
1512
1513 public void onSystemUiVisibilityChange(int visibility) {
1514 if (SDLActivity.mFullscreenModeActive && ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0 || (visibility & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0)) {
1515
1516 Handler handler = getWindow().getDecorView().getHandler();
1517 if (handler != null) {
1518 handler.removeCallbacks(rehideSystemUi); // Prevent a hide loop.
1519 handler.postDelayed(rehideSystemUi, 2000);
1520 }
1521
1522 }
1523 }
1524
10671525 /**
10681526 * This method is called by SDL using JNI.
10691527 */
10911549 public static int createCustomCursor(int[] colors, int width, int height, int hotSpotX, int hotSpotY) {
10921550 Bitmap bitmap = Bitmap.createBitmap(colors, width, height, Bitmap.Config.ARGB_8888);
10931551 ++mLastCursorID;
1094 // This requires API 24, so use reflection to implement this
1095 try {
1096 Class PointerIconClass = Class.forName("android.view.PointerIcon");
1097 Class[] arg_types = new Class[] { Bitmap.class, float.class, float.class };
1098 Method create = PointerIconClass.getMethod("create", arg_types);
1099 mCursors.put(mLastCursorID, create.invoke(null, bitmap, hotSpotX, hotSpotY));
1100 } catch (Exception e) {
1552
1553 if (Build.VERSION.SDK_INT >= 24) {
1554 try {
1555 mCursors.put(mLastCursorID, PointerIcon.create(bitmap, hotSpotX, hotSpotY));
1556 } catch (Exception e) {
1557 return 0;
1558 }
1559 } else {
11011560 return 0;
11021561 }
11031562 return mLastCursorID;
11071566 * This method is called by SDL using JNI.
11081567 */
11091568 public static boolean setCustomCursor(int cursorID) {
1110 // This requires API 24, so use reflection to implement this
1111 try {
1112 Class PointerIconClass = Class.forName("android.view.PointerIcon");
1113 Method setPointerIcon = SDLSurface.class.getMethod("setPointerIcon", PointerIconClass);
1114 setPointerIcon.invoke(mSurface, mCursors.get(cursorID));
1115 } catch (Exception e) {
1569
1570 if (Build.VERSION.SDK_INT >= 24) {
1571 try {
1572 mSurface.setPointerIcon(mCursors.get(cursorID));
1573 } catch (Exception e) {
1574 return false;
1575 }
1576 } else {
11161577 return false;
11171578 }
11181579 return true;
11611622 cursor_type = 1002; //PointerIcon.TYPE_HAND;
11621623 break;
11631624 }
1164 // This requires API 24, so use reflection to implement this
1165 try {
1166 Class PointerIconClass = Class.forName("android.view.PointerIcon");
1167 Class[] arg_types = new Class[] { Context.class, int.class };
1168 Method getSystemIcon = PointerIconClass.getMethod("getSystemIcon", arg_types);
1169 Method setPointerIcon = SDLSurface.class.getMethod("setPointerIcon", PointerIconClass);
1170 setPointerIcon.invoke(mSurface, getSystemIcon.invoke(null, SDL.getContext(), cursor_type));
1171 } catch (Exception e) {
1172 return false;
1625 if (Build.VERSION.SDK_INT >= 24) {
1626 try {
1627 mSurface.setPointerIcon(PointerIcon.getSystemIcon(SDL.getContext(), cursor_type));
1628 } catch (Exception e) {
1629 return false;
1630 }
11731631 }
11741632 return true;
1633 }
1634
1635 /**
1636 * This method is called by SDL using JNI.
1637 */
1638 public static void requestPermission(String permission, int requestCode) {
1639 if (Build.VERSION.SDK_INT < 23) {
1640 nativePermissionResult(requestCode, true);
1641 return;
1642 }
1643
1644 Activity activity = (Activity)getContext();
1645 if (activity.checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
1646 activity.requestPermissions(new String[]{permission}, requestCode);
1647 } else {
1648 nativePermissionResult(requestCode, true);
1649 }
1650 }
1651
1652 @Override
1653 public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
1654 if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
1655 nativePermissionResult(requestCode, true);
1656 } else {
1657 nativePermissionResult(requestCode, false);
1658 }
11751659 }
11761660 }
11771661
11861670 String function = SDLActivity.mSingleton.getMainFunction();
11871671 String[] arguments = SDLActivity.mSingleton.getArguments();
11881672
1673 try {
1674 android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_DISPLAY);
1675 } catch (Exception e) {
1676 Log.v("SDL", "modify thread properties failed " + e.toString());
1677 }
1678
11891679 Log.v("SDL", "Running main function " + function + " from library " + library);
1680
11901681 SDLActivity.nativeRunMain(library, function, arguments);
11911682
11921683 Log.v("SDL", "Finished main function");
11931684
1194 // Native thread has finished, let's finish the Activity
1195 if (!SDLActivity.mExitCalledFromJava) {
1196 SDLActivity.handleNativeExit();
1685 if (SDLActivity.mSingleton == null || SDLActivity.mSingleton.isFinishing()) {
1686 // Activity is already being destroyed
1687 } else {
1688 // Let's finish the Activity
1689 SDLActivity.mSDLThread = null;
1690 SDLActivity.mSingleton.finish();
11971691 }
11981692 }
11991693 }
12091703 View.OnKeyListener, View.OnTouchListener, SensorEventListener {
12101704
12111705 // Sensors
1212 protected static SensorManager mSensorManager;
1213 protected static Display mDisplay;
1706 protected SensorManager mSensorManager;
1707 protected Display mDisplay;
12141708
12151709 // Keep track of the surface size to normalize touch events
1216 protected static float mWidth, mHeight;
1710 protected float mWidth, mHeight;
1711
1712 // Is SurfaceView ready for rendering
1713 public boolean mIsSurfaceReady;
12171714
12181715 // Startup
12191716 public SDLSurface(Context context) {
12291726 mDisplay = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
12301727 mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE);
12311728
1232 if (Build.VERSION.SDK_INT >= 12) {
1233 setOnGenericMotionListener(new SDLGenericMotionListener_API12());
1234 }
1729 setOnGenericMotionListener(SDLActivity.getMotionListener());
12351730
12361731 // Some arbitrary defaults to avoid a potential division by zero
12371732 mWidth = 1.0f;
12381733 mHeight = 1.0f;
1734
1735 mIsSurfaceReady = false;
12391736 }
12401737
12411738 public void handlePause() {
12591756 @Override
12601757 public void surfaceCreated(SurfaceHolder holder) {
12611758 Log.v("SDL", "surfaceCreated()");
1262 holder.setType(SurfaceHolder.SURFACE_TYPE_GPU);
1759 SDLActivity.onNativeSurfaceCreated();
12631760 }
12641761
12651762 // Called when we lose the surface
12711768 SDLActivity.mNextNativeState = SDLActivity.NativeState.PAUSED;
12721769 SDLActivity.handleNativeState();
12731770
1274 SDLActivity.mIsSurfaceReady = false;
1771 mIsSurfaceReady = false;
12751772 SDLActivity.onNativeSurfaceDestroyed();
12761773 }
12771774
12811778 int format, int width, int height) {
12821779 Log.v("SDL", "surfaceChanged()");
12831780
1781 if (SDLActivity.mSingleton == null) {
1782 return;
1783 }
1784
12841785 int sdlFormat = 0x15151002; // SDL_PIXELFORMAT_RGB565 by default
12851786 switch (format) {
1286 case PixelFormat.A_8:
1287 Log.v("SDL", "pixel format A_8");
1288 break;
1289 case PixelFormat.LA_88:
1290 Log.v("SDL", "pixel format LA_88");
1291 break;
1292 case PixelFormat.L_8:
1293 Log.v("SDL", "pixel format L_8");
1294 break;
1295 case PixelFormat.RGBA_4444:
1296 Log.v("SDL", "pixel format RGBA_4444");
1297 sdlFormat = 0x15421002; // SDL_PIXELFORMAT_RGBA4444
1298 break;
1299 case PixelFormat.RGBA_5551:
1300 Log.v("SDL", "pixel format RGBA_5551");
1301 sdlFormat = 0x15441002; // SDL_PIXELFORMAT_RGBA5551
1302 break;
13031787 case PixelFormat.RGBA_8888:
13041788 Log.v("SDL", "pixel format RGBA_8888");
13051789 sdlFormat = 0x16462004; // SDL_PIXELFORMAT_RGBA8888
13071791 case PixelFormat.RGBX_8888:
13081792 Log.v("SDL", "pixel format RGBX_8888");
13091793 sdlFormat = 0x16261804; // SDL_PIXELFORMAT_RGBX8888
1310 break;
1311 case PixelFormat.RGB_332:
1312 Log.v("SDL", "pixel format RGB_332");
1313 sdlFormat = 0x14110801; // SDL_PIXELFORMAT_RGB332
13141794 break;
13151795 case PixelFormat.RGB_565:
13161796 Log.v("SDL", "pixel format RGB_565");
13281808
13291809 mWidth = width;
13301810 mHeight = height;
1331 SDLActivity.onNativeResize(width, height, sdlFormat, mDisplay.getRefreshRate());
1811 int nDeviceWidth = width;
1812 int nDeviceHeight = height;
1813 try
1814 {
1815 if (Build.VERSION.SDK_INT >= 17) {
1816 android.util.DisplayMetrics realMetrics = new android.util.DisplayMetrics();
1817 mDisplay.getRealMetrics( realMetrics );
1818 nDeviceWidth = realMetrics.widthPixels;
1819 nDeviceHeight = realMetrics.heightPixels;
1820 }
1821 }
1822 catch ( java.lang.Throwable throwable ) {}
1823
1824 synchronized(SDLActivity.getContext()) {
1825 // In case we're waiting on a size change after going fullscreen, send a notification.
1826 SDLActivity.getContext().notifyAll();
1827 }
1828
13321829 Log.v("SDL", "Window size: " + width + "x" + height);
1333
1334
1830 Log.v("SDL", "Device size: " + nDeviceWidth + "x" + nDeviceHeight);
1831 SDLActivity.nativeSetScreenResolution(width, height, nDeviceWidth, nDeviceHeight, sdlFormat, mDisplay.getRefreshRate());
1832 SDLActivity.onNativeResize();
1833
1834 // Prevent a screen distortion glitch,
1835 // for instance when the device is in Landscape and a Portrait App is resumed.
13351836 boolean skip = false;
13361837 int requestedOrientation = SDLActivity.mSingleton.getRequestedOrientation();
13371838
13611862 }
13621863 }
13631864
1865 // Don't skip in MultiWindow.
1866 if (skip) {
1867 if (Build.VERSION.SDK_INT >= 24) {
1868 if (SDLActivity.mSingleton.isInMultiWindowMode()) {
1869 Log.v("SDL", "Don't skip in Multi-Window");
1870 skip = false;
1871 }
1872 }
1873 }
1874
13641875 if (skip) {
13651876 Log.v("SDL", "Skip .. Surface is not ready.");
1366 SDLActivity.mIsSurfaceReady = false;
1877 mIsSurfaceReady = false;
13671878 return;
13681879 }
1369
1370 /* Surface is ready */
1371 SDLActivity.mIsSurfaceReady = true;
13721880
13731881 /* If the surface has been previously destroyed by onNativeSurfaceDestroyed, recreate it here */
13741882 SDLActivity.onNativeSurfaceChanged();
13751883
1884 /* Surface is ready */
1885 mIsSurfaceReady = true;
1886
1887 SDLActivity.mNextNativeState = SDLActivity.NativeState.RESUMED;
13761888 SDLActivity.handleNativeState();
13771889 }
13781890
13791891 // Key events
13801892 @Override
13811893 public boolean onKey(View v, int keyCode, KeyEvent event) {
1894
1895 int deviceId = event.getDeviceId();
1896 int source = event.getSource();
1897
1898 if (source == InputDevice.SOURCE_UNKNOWN) {
1899 InputDevice device = InputDevice.getDevice(deviceId);
1900 if (device != null) {
1901 source = device.getSources();
1902 }
1903 }
1904
1905 // if (event.getAction() == KeyEvent.ACTION_DOWN) {
1906 // Log.v("SDL", "key down: " + keyCode + ", deviceId = " + deviceId + ", source = " + source);
1907 // } else if (event.getAction() == KeyEvent.ACTION_UP) {
1908 // Log.v("SDL", "key up: " + keyCode + ", deviceId = " + deviceId + ", source = " + source);
1909 // }
1910
13821911 // Dispatch the different events depending on where they come from
13831912 // Some SOURCE_JOYSTICK, SOURCE_DPAD or SOURCE_GAMEPAD are also SOURCE_KEYBOARD
13841913 // So, we try to process them as JOYSTICK/DPAD/GAMEPAD events first, if that fails we try them as KEYBOARD
13861915 // Furthermore, it's possible a game controller has SOURCE_KEYBOARD and
13871916 // SOURCE_JOYSTICK, while its key events arrive from the keyboard source
13881917 // So, retrieve the device itself and check all of its sources
1389 if (SDLControllerManager.isDeviceSDLJoystick(event.getDeviceId())) {
1918 if (SDLControllerManager.isDeviceSDLJoystick(deviceId)) {
13901919 // Note that we process events with specific key codes here
13911920 if (event.getAction() == KeyEvent.ACTION_DOWN) {
1392 if (SDLControllerManager.onNativePadDown(event.getDeviceId(), keyCode) == 0) {
1921 if (SDLControllerManager.onNativePadDown(deviceId, keyCode) == 0) {
13931922 return true;
13941923 }
13951924 } else if (event.getAction() == KeyEvent.ACTION_UP) {
1396 if (SDLControllerManager.onNativePadUp(event.getDeviceId(), keyCode) == 0) {
1925 if (SDLControllerManager.onNativePadUp(deviceId, keyCode) == 0) {
13971926 return true;
13981927 }
13991928 }
14001929 }
14011930
1402 if ((event.getSource() & InputDevice.SOURCE_KEYBOARD) != 0) {
1931 if ((source & InputDevice.SOURCE_KEYBOARD) != 0) {
14031932 if (event.getAction() == KeyEvent.ACTION_DOWN) {
1404 //Log.v("SDL", "key down: " + keyCode);
14051933 if (SDLActivity.isTextInputEvent(event)) {
14061934 SDLInputConnection.nativeCommitText(String.valueOf((char) event.getUnicodeChar()), 1);
14071935 }
14081936 SDLActivity.onNativeKeyDown(keyCode);
14091937 return true;
1410 }
1411 else if (event.getAction() == KeyEvent.ACTION_UP) {
1412 //Log.v("SDL", "key up: " + keyCode);
1938 } else if (event.getAction() == KeyEvent.ACTION_UP) {
14131939 SDLActivity.onNativeKeyUp(keyCode);
14141940 return true;
14151941 }
14161942 }
14171943
1418 if ((event.getSource() & InputDevice.SOURCE_MOUSE) != 0) {
1944 if ((source & InputDevice.SOURCE_MOUSE) != 0) {
14191945 // on some devices key events are sent for mouse BUTTON_BACK/FORWARD presses
14201946 // they are ignored here because sending them as mouse input to SDL is messy
14211947 if ((keyCode == KeyEvent.KEYCODE_BACK) || (keyCode == KeyEvent.KEYCODE_FORWARD)) {
14441970 int i = -1;
14451971 float x,y,p;
14461972
1447 // !!! FIXME: dump this SDK check after 2.0.4 ships and require API14.
1448 if (event.getSource() == InputDevice.SOURCE_MOUSE && SDLActivity.mSeparateMouseAndTouch) {
1449 if (Build.VERSION.SDK_INT < 14) {
1450 mouseButton = 1; // all mouse buttons are the left button
1451 } else {
1452 try {
1453 mouseButton = (Integer) event.getClass().getMethod("getButtonState").invoke(event);
1454 } catch(Exception e) {
1455 mouseButton = 1; // oh well.
1456 }
1457 }
1458 SDLActivity.onNativeMouse(mouseButton, action, event.getX(0), event.getY(0));
1973 // 12290 = Samsung DeX mode desktop mouse
1974 // 12290 = 0x3002 = 0x2002 | 0x1002 = SOURCE_MOUSE | SOURCE_TOUCHSCREEN
1975 // 0x2 = SOURCE_CLASS_POINTER
1976 if (event.getSource() == InputDevice.SOURCE_MOUSE || event.getSource() == (InputDevice.SOURCE_MOUSE | InputDevice.SOURCE_TOUCHSCREEN)) {
1977 try {
1978 mouseButton = (Integer) event.getClass().getMethod("getButtonState").invoke(event);
1979 } catch(Exception e) {
1980 mouseButton = 1; // oh well.
1981 }
1982
1983 // We need to check if we're in relative mouse mode and get the axis offset rather than the x/y values
1984 // if we are. We'll leverage our existing mouse motion listener
1985 SDLGenericMotionListener_API12 motionListener = SDLActivity.getMotionListener();
1986 x = motionListener.getEventX(event);
1987 y = motionListener.getEventY(event);
1988
1989 SDLActivity.onNativeMouse(mouseButton, action, x, y, motionListener.inRelativeMode());
14591990 } else {
14601991 switch(action) {
14611992 case MotionEvent.ACTION_MOVE:
15402071 @Override
15412072 public void onSensorChanged(SensorEvent event) {
15422073 if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
2074
2075 // Since we may have an orientation set, we won't receive onConfigurationChanged events.
2076 // We thus should check here.
2077 int newOrientation = SDLActivity.SDL_ORIENTATION_UNKNOWN;
2078
15432079 float x, y;
15442080 switch (mDisplay.getRotation()) {
15452081 case Surface.ROTATION_90:
15462082 x = -event.values[1];
15472083 y = event.values[0];
2084 newOrientation = SDLActivity.SDL_ORIENTATION_LANDSCAPE;
15482085 break;
15492086 case Surface.ROTATION_270:
15502087 x = event.values[1];
15512088 y = -event.values[0];
2089 newOrientation = SDLActivity.SDL_ORIENTATION_LANDSCAPE_FLIPPED;
15522090 break;
15532091 case Surface.ROTATION_180:
1554 x = -event.values[1];
1555 y = -event.values[0];
2092 x = -event.values[0];
2093 y = -event.values[1];
2094 newOrientation = SDLActivity.SDL_ORIENTATION_PORTRAIT_FLIPPED;
15562095 break;
15572096 default:
15582097 x = event.values[0];
15592098 y = event.values[1];
2099 newOrientation = SDLActivity.SDL_ORIENTATION_PORTRAIT;
15602100 break;
15612101 }
2102
2103 if (newOrientation != SDLActivity.mCurrentOrientation) {
2104 SDLActivity.mCurrentOrientation = newOrientation;
2105 SDLActivity.onNativeOrientationChanged(newOrientation);
2106 }
2107
15622108 SDLActivity.onNativeAccel(-x / SensorManager.GRAVITY_EARTH,
15632109 y / SensorManager.GRAVITY_EARTH,
15642110 event.values[2] / SensorManager.GRAVITY_EARTH);
1565 }
1566 }
2111
2112
2113 }
2114 }
2115
2116 // Captured pointer events for API 26.
2117 public boolean onCapturedPointerEvent(MotionEvent event)
2118 {
2119 int action = event.getActionMasked();
2120
2121 float x, y;
2122 switch (action) {
2123 case MotionEvent.ACTION_SCROLL:
2124 x = event.getAxisValue(MotionEvent.AXIS_HSCROLL, 0);
2125 y = event.getAxisValue(MotionEvent.AXIS_VSCROLL, 0);
2126 SDLActivity.onNativeMouse(0, action, x, y, false);
2127 return true;
2128
2129 case MotionEvent.ACTION_HOVER_MOVE:
2130 case MotionEvent.ACTION_MOVE:
2131 x = event.getX(0);
2132 y = event.getY(0);
2133 SDLActivity.onNativeMouse(0, action, x, y, true);
2134 return true;
2135
2136 case MotionEvent.ACTION_BUTTON_PRESS:
2137 case MotionEvent.ACTION_BUTTON_RELEASE:
2138
2139 // Change our action value to what SDL's code expects.
2140 if (action == MotionEvent.ACTION_BUTTON_PRESS) {
2141 action = MotionEvent.ACTION_DOWN;
2142 }
2143 else if (action == MotionEvent.ACTION_BUTTON_RELEASE) {
2144 action = MotionEvent.ACTION_UP;
2145 }
2146
2147 x = event.getX(0);
2148 y = event.getY(0);
2149 int button = event.getButtonState();
2150
2151 SDLActivity.onNativeMouse(button, action, x, y, true);
2152 return true;
2153 }
2154
2155 return false;
2156 }
2157
15672158 }
15682159
15692160 /* This is a fake invisible editor view that receives the input and defines the
15862177
15872178 @Override
15882179 public boolean onKey(View v, int keyCode, KeyEvent event) {
1589 /*
2180 /*
15902181 * This handles the hardware keyboard input
15912182 */
15922183 if (event.getAction() == KeyEvent.ACTION_DOWN) {
16542245 */
16552246
16562247 if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
1657 String imeHide = SDLActivity.nativeGetHint("SDL_RETURN_KEY_HIDES_IME");
1658 if ((imeHide != null) && imeHide.equals("1")) {
1659 Context c = SDL.getContext();
1660 if (c instanceof SDLActivity) {
1661 SDLActivity activity = (SDLActivity)c;
1662 activity.sendCommand(SDLActivity.COMMAND_TEXTEDIT_HIDE, null);
1663 return true;
1664 }
2248 if (SDLActivity.onNativeSoftReturnKey()) {
2249 return true;
16652250 }
16662251 }
16672252
16742259
16752260 for (int i = 0; i < text.length(); i++) {
16762261 char c = text.charAt(i);
2262 if (c == '\n') {
2263 if (SDLActivity.onNativeSoftReturnKey()) {
2264 return true;
2265 }
2266 }
16772267 nativeGenerateScancodeForUnichar(c);
16782268 }
16792269
17062296 while (beforeLength-- > 0) {
17072297 boolean ret_key = sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL))
17082298 && sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DEL));
1709 ret = ret && ret_key;
2299 ret = ret && ret_key;
17102300 }
17112301 return ret;
17122302 }
17252315
17262316
17272317 class SDLClipboardHandler_API11 implements
1728 SDLClipboardHandler,
2318 SDLClipboardHandler,
17292319 android.content.ClipboardManager.OnPrimaryClipChangedListener {
17302320
17312321 protected android.content.ClipboardManager mClipMgr;
17562346 mClipMgr.setText(string);
17572347 mClipMgr.addPrimaryClipChangedListener(this);
17582348 }
1759
2349
17602350 @Override
17612351 public void onPrimaryClipChanged() {
17622352 SDLActivity.onNativeClipboardChanged();
17642354
17652355 }
17662356
1767 class SDLClipboardHandler_Old implements
1768 SDLClipboardHandler {
1769
1770 protected android.text.ClipboardManager mClipMgrOld;
1771
1772 SDLClipboardHandler_Old() {
1773 mClipMgrOld = (android.text.ClipboardManager) SDL.getContext().getSystemService(Context.CLIPBOARD_SERVICE);
1774 }
1775
1776 @Override
1777 public boolean clipboardHasText() {
1778 return mClipMgrOld.hasText();
1779 }
1780
1781 @Override
1782 public String clipboardGetText() {
1783 CharSequence text;
1784 text = mClipMgrOld.getText();
1785 if (text != null) {
1786 return text.toString();
1787 }
1788 return null;
1789 }
1790
1791 @Override
1792 public void clipboardSetText(String string) {
1793 mClipMgrOld.setText(string);
1794 }
1795 }
1796
00 package org.libsdl.app;
11
22 import android.media.*;
3 import android.os.Build;
34 import android.util.Log;
45
56 public class SDLAudioManager
1617
1718 // Audio
1819
19 /**
20 * This method is called by SDL using JNI.
21 */
22 public static int audioOpen(int sampleRate, boolean is16Bit, boolean isStereo, int desiredFrames) {
23 int channelConfig = isStereo ? AudioFormat.CHANNEL_CONFIGURATION_STEREO : AudioFormat.CHANNEL_CONFIGURATION_MONO;
24 int audioFormat = is16Bit ? AudioFormat.ENCODING_PCM_16BIT : AudioFormat.ENCODING_PCM_8BIT;
25 int frameSize = (isStereo ? 2 : 1) * (is16Bit ? 2 : 1);
26
27 Log.v(TAG, "SDL audio: wanted " + (isStereo ? "stereo" : "mono") + " " + (is16Bit ? "16-bit" : "8-bit") + " " + (sampleRate / 1000f) + "kHz, " + desiredFrames + " frames buffer");
20 protected static String getAudioFormatString(int audioFormat) {
21 switch (audioFormat) {
22 case AudioFormat.ENCODING_PCM_8BIT:
23 return "8-bit";
24 case AudioFormat.ENCODING_PCM_16BIT:
25 return "16-bit";
26 case AudioFormat.ENCODING_PCM_FLOAT:
27 return "float";
28 default:
29 return Integer.toString(audioFormat);
30 }
31 }
32
33 protected static int[] open(boolean isCapture, int sampleRate, int audioFormat, int desiredChannels, int desiredFrames) {
34 int channelConfig;
35 int sampleSize;
36 int frameSize;
37
38 Log.v(TAG, "Opening " + (isCapture ? "capture" : "playback") + ", requested " + desiredFrames + " frames of " + desiredChannels + " channel " + getAudioFormatString(audioFormat) + " audio at " + sampleRate + " Hz");
39
40 /* On older devices let's use known good settings */
41 if (Build.VERSION.SDK_INT < 21) {
42 if (desiredChannels > 2) {
43 desiredChannels = 2;
44 }
45 if (sampleRate < 8000) {
46 sampleRate = 8000;
47 } else if (sampleRate > 48000) {
48 sampleRate = 48000;
49 }
50 }
51
52 if (audioFormat == AudioFormat.ENCODING_PCM_FLOAT) {
53 int minSDKVersion = (isCapture ? 23 : 21);
54 if (Build.VERSION.SDK_INT < minSDKVersion) {
55 audioFormat = AudioFormat.ENCODING_PCM_16BIT;
56 }
57 }
58 switch (audioFormat)
59 {
60 case AudioFormat.ENCODING_PCM_8BIT:
61 sampleSize = 1;
62 break;
63 case AudioFormat.ENCODING_PCM_16BIT:
64 sampleSize = 2;
65 break;
66 case AudioFormat.ENCODING_PCM_FLOAT:
67 sampleSize = 4;
68 break;
69 default:
70 Log.v(TAG, "Requested format " + audioFormat + ", getting ENCODING_PCM_16BIT");
71 audioFormat = AudioFormat.ENCODING_PCM_16BIT;
72 sampleSize = 2;
73 break;
74 }
75
76 if (isCapture) {
77 switch (desiredChannels) {
78 case 1:
79 channelConfig = AudioFormat.CHANNEL_IN_MONO;
80 break;
81 case 2:
82 channelConfig = AudioFormat.CHANNEL_IN_STEREO;
83 break;
84 default:
85 Log.v(TAG, "Requested " + desiredChannels + " channels, getting stereo");
86 desiredChannels = 2;
87 channelConfig = AudioFormat.CHANNEL_IN_STEREO;
88 break;
89 }
90 } else {
91 switch (desiredChannels) {
92 case 1:
93 channelConfig = AudioFormat.CHANNEL_OUT_MONO;
94 break;
95 case 2:
96 channelConfig = AudioFormat.CHANNEL_OUT_STEREO;
97 break;
98 case 3:
99 channelConfig = AudioFormat.CHANNEL_OUT_STEREO | AudioFormat.CHANNEL_OUT_FRONT_CENTER;
100 break;
101 case 4:
102 channelConfig = AudioFormat.CHANNEL_OUT_QUAD;
103 break;
104 case 5:
105 channelConfig = AudioFormat.CHANNEL_OUT_QUAD | AudioFormat.CHANNEL_OUT_FRONT_CENTER;
106 break;
107 case 6:
108 channelConfig = AudioFormat.CHANNEL_OUT_5POINT1;
109 break;
110 case 7:
111 channelConfig = AudioFormat.CHANNEL_OUT_5POINT1 | AudioFormat.CHANNEL_OUT_BACK_CENTER;
112 break;
113 case 8:
114 if (Build.VERSION.SDK_INT >= 23) {
115 channelConfig = AudioFormat.CHANNEL_OUT_7POINT1_SURROUND;
116 } else {
117 Log.v(TAG, "Requested " + desiredChannels + " channels, getting 5.1 surround");
118 desiredChannels = 6;
119 channelConfig = AudioFormat.CHANNEL_OUT_5POINT1;
120 }
121 break;
122 default:
123 Log.v(TAG, "Requested " + desiredChannels + " channels, getting stereo");
124 desiredChannels = 2;
125 channelConfig = AudioFormat.CHANNEL_OUT_STEREO;
126 break;
127 }
128
129 /*
130 Log.v(TAG, "Speaker configuration (and order of channels):");
131
132 if ((channelConfig & 0x00000004) != 0) {
133 Log.v(TAG, " CHANNEL_OUT_FRONT_LEFT");
134 }
135 if ((channelConfig & 0x00000008) != 0) {
136 Log.v(TAG, " CHANNEL_OUT_FRONT_RIGHT");
137 }
138 if ((channelConfig & 0x00000010) != 0) {
139 Log.v(TAG, " CHANNEL_OUT_FRONT_CENTER");
140 }
141 if ((channelConfig & 0x00000020) != 0) {
142 Log.v(TAG, " CHANNEL_OUT_LOW_FREQUENCY");
143 }
144 if ((channelConfig & 0x00000040) != 0) {
145 Log.v(TAG, " CHANNEL_OUT_BACK_LEFT");
146 }
147 if ((channelConfig & 0x00000080) != 0) {
148 Log.v(TAG, " CHANNEL_OUT_BACK_RIGHT");
149 }
150 if ((channelConfig & 0x00000100) != 0) {
151 Log.v(TAG, " CHANNEL_OUT_FRONT_LEFT_OF_CENTER");
152 }
153 if ((channelConfig & 0x00000200) != 0) {
154 Log.v(TAG, " CHANNEL_OUT_FRONT_RIGHT_OF_CENTER");
155 }
156 if ((channelConfig & 0x00000400) != 0) {
157 Log.v(TAG, " CHANNEL_OUT_BACK_CENTER");
158 }
159 if ((channelConfig & 0x00000800) != 0) {
160 Log.v(TAG, " CHANNEL_OUT_SIDE_LEFT");
161 }
162 if ((channelConfig & 0x00001000) != 0) {
163 Log.v(TAG, " CHANNEL_OUT_SIDE_RIGHT");
164 }
165 */
166 }
167 frameSize = (sampleSize * desiredChannels);
28168
29169 // Let the user pick a larger buffer if they really want -- but ye
30170 // gods they probably shouldn't, the minimums are horrifyingly high
31171 // latency already
32 desiredFrames = Math.max(desiredFrames, (AudioTrack.getMinBufferSize(sampleRate, channelConfig, audioFormat) + frameSize - 1) / frameSize);
33
172 int minBufferSize;
173 if (isCapture) {
174 minBufferSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat);
175 } else {
176 minBufferSize = AudioTrack.getMinBufferSize(sampleRate, channelConfig, audioFormat);
177 }
178 desiredFrames = Math.max(desiredFrames, (minBufferSize + frameSize - 1) / frameSize);
179
180 int[] results = new int[4];
181
182 if (isCapture) {
183 if (mAudioRecord == null) {
184 mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, sampleRate,
185 channelConfig, audioFormat, desiredFrames * frameSize);
186
187 // see notes about AudioTrack state in audioOpen(), above. Probably also applies here.
188 if (mAudioRecord.getState() != AudioRecord.STATE_INITIALIZED) {
189 Log.e(TAG, "Failed during initialization of AudioRecord");
190 mAudioRecord.release();
191 mAudioRecord = null;
192 return null;
193 }
194
195 mAudioRecord.startRecording();
196 }
197
198 results[0] = mAudioRecord.getSampleRate();
199 results[1] = mAudioRecord.getAudioFormat();
200 results[2] = mAudioRecord.getChannelCount();
201 results[3] = desiredFrames;
202
203 } else {
204 if (mAudioTrack == null) {
205 mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, channelConfig, audioFormat, desiredFrames * frameSize, AudioTrack.MODE_STREAM);
206
207 // Instantiating AudioTrack can "succeed" without an exception and the track may still be invalid
208 // Ref: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/media/java/android/media/AudioTrack.java
209 // Ref: http://developer.android.com/reference/android/media/AudioTrack.html#getState()
210 if (mAudioTrack.getState() != AudioTrack.STATE_INITIALIZED) {
211 /* Try again, with safer values */
212
213 Log.e(TAG, "Failed during initialization of Audio Track");
214 mAudioTrack.release();
215 mAudioTrack = null;
216 return null;
217 }
218
219 mAudioTrack.play();
220 }
221
222 results[0] = mAudioTrack.getSampleRate();
223 results[1] = mAudioTrack.getAudioFormat();
224 results[2] = mAudioTrack.getChannelCount();
225 results[3] = desiredFrames;
226 }
227
228 Log.v(TAG, "Opening " + (isCapture ? "capture" : "playback") + ", got " + results[3] + " frames of " + results[2] + " channel " + getAudioFormatString(results[1]) + " audio at " + results[0] + " Hz");
229
230 return results;
231 }
232
233 /**
234 * This method is called by SDL using JNI.
235 */
236 public static int[] audioOpen(int sampleRate, int audioFormat, int desiredChannels, int desiredFrames) {
237 return open(false, sampleRate, audioFormat, desiredChannels, desiredFrames);
238 }
239
240 /**
241 * This method is called by SDL using JNI.
242 */
243 public static void audioWriteFloatBuffer(float[] buffer) {
34244 if (mAudioTrack == null) {
35 mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate,
36 channelConfig, audioFormat, desiredFrames * frameSize, AudioTrack.MODE_STREAM);
37
38 // Instantiating AudioTrack can "succeed" without an exception and the track may still be invalid
39 // Ref: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/media/java/android/media/AudioTrack.java
40 // Ref: http://developer.android.com/reference/android/media/AudioTrack.html#getState()
41
42 if (mAudioTrack.getState() != AudioTrack.STATE_INITIALIZED) {
43 Log.e(TAG, "Failed during initialization of Audio Track");
44 mAudioTrack = null;
45 return -1;
46 }
47
48 mAudioTrack.play();
49 }
50
51 Log.v(TAG, "SDL audio: got " + ((mAudioTrack.getChannelCount() >= 2) ? "stereo" : "mono") + " " + ((mAudioTrack.getAudioFormat() == AudioFormat.ENCODING_PCM_16BIT) ? "16-bit" : "8-bit") + " " + (mAudioTrack.getSampleRate() / 1000f) + "kHz, " + desiredFrames + " frames buffer");
52
53 return 0;
245 Log.e(TAG, "Attempted to make audio call with uninitialized audio!");
246 return;
247 }
248
249 for (int i = 0; i < buffer.length;) {
250 int result = mAudioTrack.write(buffer, i, buffer.length - i, AudioTrack.WRITE_BLOCKING);
251 if (result > 0) {
252 i += result;
253 } else if (result == 0) {
254 try {
255 Thread.sleep(1);
256 } catch(InterruptedException e) {
257 // Nom nom
258 }
259 } else {
260 Log.w(TAG, "SDL audio: error return from write(float)");
261 return;
262 }
263 }
54264 }
55265
56266 /**
57267 * This method is called by SDL using JNI.
58268 */
59269 public static void audioWriteShortBuffer(short[] buffer) {
270 if (mAudioTrack == null) {
271 Log.e(TAG, "Attempted to make audio call with uninitialized audio!");
272 return;
273 }
274
275 for (int i = 0; i < buffer.length;) {
276 int result = mAudioTrack.write(buffer, i, buffer.length - i);
277 if (result > 0) {
278 i += result;
279 } else if (result == 0) {
280 try {
281 Thread.sleep(1);
282 } catch(InterruptedException e) {
283 // Nom nom
284 }
285 } else {
286 Log.w(TAG, "SDL audio: error return from write(short)");
287 return;
288 }
289 }
290 }
291
292 /**
293 * This method is called by SDL using JNI.
294 */
295 public static void audioWriteByteBuffer(byte[] buffer) {
60296 if (mAudioTrack == null) {
61297 Log.e(TAG, "Attempted to make audio call with uninitialized audio!");
62298 return;
73309 // Nom nom
74310 }
75311 } else {
76 Log.w(TAG, "SDL audio: error return from write(short)");
77 return;
78 }
79 }
80 }
81
82 /**
83 * This method is called by SDL using JNI.
84 */
85 public static void audioWriteByteBuffer(byte[] buffer) {
86 if (mAudioTrack == null) {
87 Log.e(TAG, "Attempted to make audio call with uninitialized audio!");
88 return;
89 }
90
91 for (int i = 0; i < buffer.length; ) {
92 int result = mAudioTrack.write(buffer, i, buffer.length - i);
93 if (result > 0) {
94 i += result;
95 } else if (result == 0) {
96 try {
97 Thread.sleep(1);
98 } catch(InterruptedException e) {
99 // Nom nom
100 }
101 } else {
102312 Log.w(TAG, "SDL audio: error return from write(byte)");
103313 return;
104314 }
108318 /**
109319 * This method is called by SDL using JNI.
110320 */
111 public static int captureOpen(int sampleRate, boolean is16Bit, boolean isStereo, int desiredFrames) {
112 int channelConfig = isStereo ? AudioFormat.CHANNEL_CONFIGURATION_STEREO : AudioFormat.CHANNEL_CONFIGURATION_MONO;
113 int audioFormat = is16Bit ? AudioFormat.ENCODING_PCM_16BIT : AudioFormat.ENCODING_PCM_8BIT;
114 int frameSize = (isStereo ? 2 : 1) * (is16Bit ? 2 : 1);
115
116 Log.v(TAG, "SDL capture: wanted " + (isStereo ? "stereo" : "mono") + " " + (is16Bit ? "16-bit" : "8-bit") + " " + (sampleRate / 1000f) + "kHz, " + desiredFrames + " frames buffer");
117
118 // Let the user pick a larger buffer if they really want -- but ye
119 // gods they probably shouldn't, the minimums are horrifyingly high
120 // latency already
121 desiredFrames = Math.max(desiredFrames, (AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat) + frameSize - 1) / frameSize);
122
123 if (mAudioRecord == null) {
124 mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.DEFAULT, sampleRate,
125 channelConfig, audioFormat, desiredFrames * frameSize);
126
127 // see notes about AudioTrack state in audioOpen(), above. Probably also applies here.
128 if (mAudioRecord.getState() != AudioRecord.STATE_INITIALIZED) {
129 Log.e(TAG, "Failed during initialization of AudioRecord");
130 mAudioRecord.release();
131 mAudioRecord = null;
132 return -1;
133 }
134
135 mAudioRecord.startRecording();
136 }
137
138 Log.v(TAG, "SDL capture: got " + ((mAudioRecord.getChannelCount() >= 2) ? "stereo" : "mono") + " " + ((mAudioRecord.getAudioFormat() == AudioFormat.ENCODING_PCM_16BIT) ? "16-bit" : "8-bit") + " " + (mAudioRecord.getSampleRate() / 1000f) + "kHz, " + desiredFrames + " frames buffer");
139
140 return 0;
321 public static int[] captureOpen(int sampleRate, int audioFormat, int desiredChannels, int desiredFrames) {
322 return open(true, sampleRate, audioFormat, desiredChannels, desiredFrames);
323 }
324
325 /** This method is called by SDL using JNI. */
326 public static int captureReadFloatBuffer(float[] buffer, boolean blocking) {
327 return mAudioRecord.read(buffer, 0, buffer.length, blocking ? AudioRecord.READ_BLOCKING : AudioRecord.READ_NON_BLOCKING);
141328 }
142329
143330 /** This method is called by SDL using JNI. */
144331 public static int captureReadShortBuffer(short[] buffer, boolean blocking) {
145 // !!! FIXME: this is available in API Level 23. Until then, we always block. :(
146 //return mAudioRecord.read(buffer, 0, buffer.length, blocking ? AudioRecord.READ_BLOCKING : AudioRecord.READ_NON_BLOCKING);
147 return mAudioRecord.read(buffer, 0, buffer.length);
332 if (Build.VERSION.SDK_INT < 23) {
333 return mAudioRecord.read(buffer, 0, buffer.length);
334 } else {
335 return mAudioRecord.read(buffer, 0, buffer.length, blocking ? AudioRecord.READ_BLOCKING : AudioRecord.READ_NON_BLOCKING);
336 }
148337 }
149338
150339 /** This method is called by SDL using JNI. */
151340 public static int captureReadByteBuffer(byte[] buffer, boolean blocking) {
152 // !!! FIXME: this is available in API Level 23. Until then, we always block. :(
153 //return mAudioRecord.read(buffer, 0, buffer.length, blocking ? AudioRecord.READ_BLOCKING : AudioRecord.READ_NON_BLOCKING);
154 return mAudioRecord.read(buffer, 0, buffer.length);
155 }
156
341 if (Build.VERSION.SDK_INT < 23) {
342 return mAudioRecord.read(buffer, 0, buffer.length);
343 } else {
344 return mAudioRecord.read(buffer, 0, buffer.length, blocking ? AudioRecord.READ_BLOCKING : AudioRecord.READ_NON_BLOCKING);
345 }
346 }
157347
158348 /** This method is called by SDL using JNI. */
159349 public static void audioClose() {
173363 }
174364 }
175365
366 /** This method is called by SDL using JNI. */
367 public static void audioSetThreadPriority(boolean iscapture, int device_id) {
368 try {
369
370 /* Set thread name */
371 if (iscapture) {
372 Thread.currentThread().setName("SDLAudioC" + device_id);
373 } else {
374 Thread.currentThread().setName("SDLAudioP" + device_id);
375 }
376
377 /* Set thread priority */
378 android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_AUDIO);
379
380 } catch (Exception e) {
381 Log.v(TAG, "modify thread properties failed " + e.toString());
382 }
383 }
384
176385 public static native int nativeSetupJNI();
177386 }
1010 import android.util.Log;
1111
1212
13 public class SDLControllerManager
13 public class SDLControllerManager
1414 {
1515
1616 public static native int nativeSetupJNI();
3535 private static final String TAG = "SDLControllerManager";
3636
3737 public static void initialize() {
38 mJoystickHandler = null;
39 mHapticHandler = null;
40
41 SDLControllerManager.setup();
42 }
43
44 public static void setup() {
45 if (Build.VERSION.SDK_INT >= 19) {
46 mJoystickHandler = new SDLJoystickHandler_API19();
47 } else if (Build.VERSION.SDK_INT >= 16) {
48 mJoystickHandler = new SDLJoystickHandler_API16();
49 } else if (Build.VERSION.SDK_INT >= 12) {
50 mJoystickHandler = new SDLJoystickHandler_API12();
51 } else {
52 mJoystickHandler = new SDLJoystickHandler();
53 }
54 mHapticHandler = new SDLHapticHandler();
38 if (mJoystickHandler == null) {
39 if (Build.VERSION.SDK_INT >= 19) {
40 mJoystickHandler = new SDLJoystickHandler_API19();
41 } else {
42 mJoystickHandler = new SDLJoystickHandler_API16();
43 }
44 }
45
46 if (mHapticHandler == null) {
47 if (Build.VERSION.SDK_INT >= 26) {
48 mHapticHandler = new SDLHapticHandler_API26();
49 } else {
50 mHapticHandler = new SDLHapticHandler();
51 }
52 }
5553 }
5654
5755 // Joystick glue code, just a series of stubs that redirect to the SDLJoystickHandler instance
7674 /**
7775 * This method is called by SDL using JNI.
7876 */
79 public static void hapticRun(int device_id, int length) {
80 mHapticHandler.run(device_id, length);
77 public static void hapticRun(int device_id, float intensity, int length) {
78 mHapticHandler.run(device_id, intensity, length);
79 }
80
81 /**
82 * This method is called by SDL using JNI.
83 */
84 public static void hapticStop(int device_id)
85 {
86 mHapticHandler.stop(device_id);
8187 }
8288
8389 // Check if a given device is considered a possible SDL joystick
9298
9399 /* This is called for every button press, so let's not spam the logs */
94100 /**
95 if ((sources & InputDevice.SOURCE_CLASS_JOYSTICK) == InputDevice.SOURCE_CLASS_JOYSTICK) {
96 Log.v(TAG, "Input device " + device.getName() + " is a joystick.");
101 if ((sources & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) {
102 Log.v(TAG, "Input device " + device.getName() + " has class joystick.");
97103 }
98104 if ((sources & InputDevice.SOURCE_DPAD) == InputDevice.SOURCE_DPAD) {
99105 Log.v(TAG, "Input device " + device.getName() + " is a dpad.");
103109 }
104110 **/
105111
106 return (((sources & InputDevice.SOURCE_CLASS_JOYSTICK) == InputDevice.SOURCE_CLASS_JOYSTICK) ||
112 return ((sources & InputDevice.SOURCE_CLASS_JOYSTICK) != 0 ||
107113 ((sources & InputDevice.SOURCE_DPAD) == InputDevice.SOURCE_DPAD) ||
108114 ((sources & InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD)
109115 );
111117
112118 }
113119
114 /* A null joystick handler for API level < 12 devices (the accelerometer is handled separately) */
115120 class SDLJoystickHandler {
116121
117122 /**
131136 }
132137
133138 /* Actual joystick functionality available for API >= 12 devices */
134 class SDLJoystickHandler_API12 extends SDLJoystickHandler {
139 class SDLJoystickHandler_API16 extends SDLJoystickHandler {
135140
136141 static class SDLJoystick {
137142 public int device_id;
143148 static class RangeComparator implements Comparator<InputDevice.MotionRange> {
144149 @Override
145150 public int compare(InputDevice.MotionRange arg0, InputDevice.MotionRange arg1) {
146 return arg0.getAxis() - arg1.getAxis();
151 // Some controllers, like the Moga Pro 2, return AXIS_GAS (22) for right trigger and AXIS_BRAKE (23) for left trigger - swap them so they're sorted in the right order for SDL
152 int arg0Axis = arg0.getAxis();
153 int arg1Axis = arg1.getAxis();
154 if (arg0Axis == MotionEvent.AXIS_GAS) {
155 arg0Axis = MotionEvent.AXIS_BRAKE;
156 } else if (arg0Axis == MotionEvent.AXIS_BRAKE) {
157 arg0Axis = MotionEvent.AXIS_GAS;
158 }
159 if (arg1Axis == MotionEvent.AXIS_GAS) {
160 arg1Axis = MotionEvent.AXIS_BRAKE;
161 } else if (arg1Axis == MotionEvent.AXIS_BRAKE) {
162 arg1Axis = MotionEvent.AXIS_GAS;
163 }
164
165 return arg0Axis - arg1Axis;
147166 }
148167 }
149168
150169 private ArrayList<SDLJoystick> mJoysticks;
151170
152 public SDLJoystickHandler_API12() {
171 public SDLJoystickHandler_API16() {
153172
154173 mJoysticks = new ArrayList<SDLJoystick>();
155174 }
253272 }
254273
255274 public String getJoystickDescriptor(InputDevice joystickDevice) {
275 String desc = joystickDevice.getDescriptor();
276
277 if (desc != null && !desc.isEmpty()) {
278 return desc;
279 }
280
256281 return joystickDevice.getName();
257282 }
258283 public int getProductId(InputDevice joystickDevice) {
263288 }
264289 public int getButtonMask(InputDevice joystickDevice) {
265290 return -1;
266 }
267 }
268
269 class SDLJoystickHandler_API16 extends SDLJoystickHandler_API12 {
270
271 @Override
272 public String getJoystickDescriptor(InputDevice joystickDevice) {
273 String desc = joystickDevice.getDescriptor();
274
275 if (desc != null && !desc.isEmpty()) {
276 return desc;
277 }
278
279 return super.getJoystickDescriptor(joystickDevice);
280291 }
281292 }
282293
386397 }
387398 }
388399
400 class SDLHapticHandler_API26 extends SDLHapticHandler {
401 @Override
402 public void run(int device_id, float intensity, int length) {
403 SDLHaptic haptic = getHaptic(device_id);
404 if (haptic != null) {
405 Log.d("SDL", "Rtest: Vibe with intensity " + intensity + " for " + length);
406 if (intensity == 0.0f) {
407 stop(device_id);
408 return;
409 }
410
411 int vibeValue = Math.round(intensity * 255);
412
413 if (vibeValue > 255) {
414 vibeValue = 255;
415 }
416 if (vibeValue < 1) {
417 stop(device_id);
418 return;
419 }
420 try {
421 haptic.vib.vibrate(VibrationEffect.createOneShot(length, vibeValue));
422 }
423 catch (Exception e) {
424 // Fall back to the generic method, which uses DEFAULT_AMPLITUDE, but works even if
425 // something went horribly wrong with the Android 8.0 APIs.
426 haptic.vib.vibrate(length);
427 }
428 }
429 }
430 }
431
389432 class SDLHapticHandler {
390433
391434 class SDLHaptic {
395438 }
396439
397440 private ArrayList<SDLHaptic> mHaptics;
398
441
399442 public SDLHapticHandler() {
400443 mHaptics = new ArrayList<SDLHaptic>();
401444 }
402445
403 public void run(int device_id, int length) {
446 public void run(int device_id, float intensity, int length) {
404447 SDLHaptic haptic = getHaptic(device_id);
405448 if (haptic != null) {
406 haptic.vib.vibrate (length);
449 haptic.vib.vibrate(length);
450 }
451 }
452
453 public void stop(int device_id) {
454 SDLHaptic haptic = getHaptic(device_id);
455 if (haptic != null) {
456 haptic.vib.cancel();
407457 }
408458 }
409459
410460 public void pollHapticDevices() {
411
461
412462 final int deviceId_VIBRATOR_SERVICE = 999999;
413463 boolean hasVibratorService = false;
414464
418468 // so the first controller seen by SDL matches what the receiver
419469 // considers to be the first controller
420470
421 if (Build.VERSION.SDK_INT >= 16)
422 {
423 for (int i = deviceIds.length - 1; i > -1; i--) {
424 SDLHaptic haptic = getHaptic(deviceIds[i]);
425 if (haptic == null) {
426 InputDevice device = InputDevice.getDevice(deviceIds[i]);
427 Vibrator vib = device.getVibrator();
428 if (vib.hasVibrator()) {
429 haptic = new SDLHaptic();
430 haptic.device_id = deviceIds[i];
431 haptic.name = device.getName();
432 haptic.vib = vib;
433 mHaptics.add(haptic);
434 SDLControllerManager.nativeAddHaptic(haptic.device_id, haptic.name);
435 }
471 for (int i = deviceIds.length - 1; i > -1; i--) {
472 SDLHaptic haptic = getHaptic(deviceIds[i]);
473 if (haptic == null) {
474 InputDevice device = InputDevice.getDevice(deviceIds[i]);
475 Vibrator vib = device.getVibrator();
476 if (vib.hasVibrator()) {
477 haptic = new SDLHaptic();
478 haptic.device_id = deviceIds[i];
479 haptic.name = device.getName();
480 haptic.vib = vib;
481 mHaptics.add(haptic);
482 SDLControllerManager.nativeAddHaptic(haptic.device_id, haptic.name);
436483 }
437484 }
438485 }
440487 /* Check VIBRATOR_SERVICE */
441488 Vibrator vib = (Vibrator) SDL.getContext().getSystemService(Context.VIBRATOR_SERVICE);
442489 if (vib != null) {
443 if (Build.VERSION.SDK_INT >= 11) {
444 hasVibratorService = vib.hasVibrator();
445 } else {
446 hasVibratorService = true;
447 }
490 hasVibratorService = vib.hasVibrator();
448491
449492 if (hasVibratorService) {
450493 SDLHaptic haptic = getHaptic(deviceId_VIBRATOR_SERVICE);
452495 haptic = new SDLHaptic();
453496 haptic.device_id = deviceId_VIBRATOR_SERVICE;
454497 haptic.name = "VIBRATOR_SERVICE";
455 haptic.vib = vib;
498 haptic.vib = vib;
456499 mHaptics.add(haptic);
457500 SDLControllerManager.nativeAddHaptic(haptic.device_id, haptic.name);
458501 }
494537 }
495538 }
496539 return null;
497 }
540 }
498541 }
499542
500543 class SDLGenericMotionListener_API12 implements View.OnGenericMotionListener {
511554 return SDLControllerManager.handleJoystickMotionEvent(event);
512555
513556 case InputDevice.SOURCE_MOUSE:
514 if (!SDLActivity.mSeparateMouseAndTouch) {
515 break;
516 }
517557 action = event.getActionMasked();
518558 switch (action) {
519559 case MotionEvent.ACTION_SCROLL:
520560 x = event.getAxisValue(MotionEvent.AXIS_HSCROLL, 0);
521561 y = event.getAxisValue(MotionEvent.AXIS_VSCROLL, 0);
522 SDLActivity.onNativeMouse(0, action, x, y);
562 SDLActivity.onNativeMouse(0, action, x, y, false);
523563 return true;
524564
525565 case MotionEvent.ACTION_HOVER_MOVE:
526566 x = event.getX(0);
527567 y = event.getY(0);
528568
529 SDLActivity.onNativeMouse(0, action, x, y);
569 SDLActivity.onNativeMouse(0, action, x, y, false);
530570 return true;
531571
532572 default:
541581 // Event was not managed
542582 return false;
543583 }
544 }
545
584
585 public boolean supportsRelativeMouse() {
586 return false;
587 }
588
589 public boolean inRelativeMode() {
590 return false;
591 }
592
593 public boolean setRelativeMouseEnabled(boolean enabled) {
594 return false;
595 }
596
597 public void reclaimRelativeMouseModeIfNeeded()
598 {
599
600 }
601
602 public float getEventX(MotionEvent event) {
603 return event.getX(0);
604 }
605
606 public float getEventY(MotionEvent event) {
607 return event.getY(0);
608 }
609
610 }
611
612 class SDLGenericMotionListener_API24 extends SDLGenericMotionListener_API12 {
613 // Generic Motion (mouse hover, joystick...) events go here
614
615 private boolean mRelativeModeEnabled;
616
617 @Override
618 public boolean onGenericMotion(View v, MotionEvent event) {
619
620 // Handle relative mouse mode
621 if (mRelativeModeEnabled) {
622 if (event.getSource() == InputDevice.SOURCE_MOUSE) {
623 int action = event.getActionMasked();
624 if (action == MotionEvent.ACTION_HOVER_MOVE) {
625 float x = event.getAxisValue(MotionEvent.AXIS_RELATIVE_X);
626 float y = event.getAxisValue(MotionEvent.AXIS_RELATIVE_Y);
627 SDLActivity.onNativeMouse(0, action, x, y, true);
628 return true;
629 }
630 }
631 }
632
633 // Event was not managed, call SDLGenericMotionListener_API12 method
634 return super.onGenericMotion(v, event);
635 }
636
637 @Override
638 public boolean supportsRelativeMouse() {
639 return true;
640 }
641
642 @Override
643 public boolean inRelativeMode() {
644 return mRelativeModeEnabled;
645 }
646
647 @Override
648 public boolean setRelativeMouseEnabled(boolean enabled) {
649 mRelativeModeEnabled = enabled;
650 return true;
651 }
652
653 @Override
654 public float getEventX(MotionEvent event) {
655 if (mRelativeModeEnabled) {
656 return event.getAxisValue(MotionEvent.AXIS_RELATIVE_X);
657 }
658 else {
659 return event.getX(0);
660 }
661 }
662
663 @Override
664 public float getEventY(MotionEvent event) {
665 if (mRelativeModeEnabled) {
666 return event.getAxisValue(MotionEvent.AXIS_RELATIVE_Y);
667 }
668 else {
669 return event.getY(0);
670 }
671 }
672 }
673
674
675 class SDLGenericMotionListener_API26 extends SDLGenericMotionListener_API24 {
676 // Generic Motion (mouse hover, joystick...) events go here
677 private boolean mRelativeModeEnabled;
678
679 @Override
680 public boolean onGenericMotion(View v, MotionEvent event) {
681 float x, y;
682 int action;
683
684 switch ( event.getSource() ) {
685 case InputDevice.SOURCE_JOYSTICK:
686 case InputDevice.SOURCE_GAMEPAD:
687 case InputDevice.SOURCE_DPAD:
688 return SDLControllerManager.handleJoystickMotionEvent(event);
689
690 case InputDevice.SOURCE_MOUSE:
691 // DeX desktop mouse cursor is a separate non-standard input type.
692 case InputDevice.SOURCE_MOUSE | InputDevice.SOURCE_TOUCHSCREEN:
693 action = event.getActionMasked();
694 switch (action) {
695 case MotionEvent.ACTION_SCROLL:
696 x = event.getAxisValue(MotionEvent.AXIS_HSCROLL, 0);
697 y = event.getAxisValue(MotionEvent.AXIS_VSCROLL, 0);
698 SDLActivity.onNativeMouse(0, action, x, y, false);
699 return true;
700
701 case MotionEvent.ACTION_HOVER_MOVE:
702 x = event.getX(0);
703 y = event.getY(0);
704 SDLActivity.onNativeMouse(0, action, x, y, false);
705 return true;
706
707 default:
708 break;
709 }
710 break;
711
712 case InputDevice.SOURCE_MOUSE_RELATIVE:
713 action = event.getActionMasked();
714 switch (action) {
715 case MotionEvent.ACTION_SCROLL:
716 x = event.getAxisValue(MotionEvent.AXIS_HSCROLL, 0);
717 y = event.getAxisValue(MotionEvent.AXIS_VSCROLL, 0);
718 SDLActivity.onNativeMouse(0, action, x, y, false);
719 return true;
720
721 case MotionEvent.ACTION_HOVER_MOVE:
722 x = event.getX(0);
723 y = event.getY(0);
724 SDLActivity.onNativeMouse(0, action, x, y, true);
725 return true;
726
727 default:
728 break;
729 }
730 break;
731
732 default:
733 break;
734 }
735
736 // Event was not managed
737 return false;
738 }
739
740 @Override
741 public boolean supportsRelativeMouse() {
742 return (!SDLActivity.isDeXMode() || (Build.VERSION.SDK_INT >= 27));
743 }
744
745 @Override
746 public boolean inRelativeMode() {
747 return mRelativeModeEnabled;
748 }
749
750 @Override
751 public boolean setRelativeMouseEnabled(boolean enabled) {
752 if (!SDLActivity.isDeXMode() || (Build.VERSION.SDK_INT >= 27)) {
753 if (enabled) {
754 SDLActivity.getContentView().requestPointerCapture();
755 }
756 else {
757 SDLActivity.getContentView().releasePointerCapture();
758 }
759 mRelativeModeEnabled = enabled;
760 return true;
761 }
762 else
763 {
764 return false;
765 }
766 }
767
768 @Override
769 public void reclaimRelativeMouseModeIfNeeded()
770 {
771 if (mRelativeModeEnabled && !SDLActivity.isDeXMode()) {
772 SDLActivity.getContentView().requestPointerCapture();
773 }
774 }
775
776 @Override
777 public float getEventX(MotionEvent event) {
778 // Relative mouse in capture mode will only have relative for X/Y
779 return event.getX(0);
780 }
781
782 @Override
783 public float getEventY(MotionEvent event) {
784 // Relative mouse in capture mode will only have relative for X/Y
785 return event.getY(0);
786 }
787 }
1313 # Add your application source files here...
1414 LOCAL_SRC_FILES := $(SDL_PATH)/src/main/android/SDL_android_main.c \
1515 ../../../../../../src/main.cpp \
16 ../../../../../../src/BehaviorAlly.cpp \
17 ../../../../../../src/Entity.cpp \
1816 ../../../../../../src/Animation.cpp \
1917 ../../../../../../src/AnimationManager.cpp \
18 ../../../../../../src/AnimationMedia.cpp \
2019 ../../../../../../src/AnimationSet.cpp \
2120 ../../../../../../src/AStarContainer.cpp \
2221 ../../../../../../src/AStarNode.cpp \
2322 ../../../../../../src/Avatar.cpp \
24 ../../../../../../src/BehaviorStandard.cpp \
23 ../../../../../../src/Camera.cpp \
2524 ../../../../../../src/CampaignManager.cpp \
2625 ../../../../../../src/CombatText.cpp \
2726 ../../../../../../src/CursorManager.cpp \
2827 ../../../../../../src/DeviceList.cpp \
2928 ../../../../../../src/EffectManager.cpp \
30 ../../../../../../src/Enemy.cpp \
31 ../../../../../../src/EnemyBehavior.cpp \
3229 ../../../../../../src/EnemyGroupManager.cpp \
33 ../../../../../../src/EnemyManager.cpp \
30 ../../../../../../src/Entity.cpp \
31 ../../../../../../src/EntityBehavior.cpp \
32 ../../../../../../src/EntityManager.cpp \
3433 ../../../../../../src/EngineSettings.cpp \
3534 ../../../../../../src/EventManager.cpp \
3635 ../../../../../../src/FileParser.cpp \
3736 ../../../../../../src/FontEngine.cpp \
3837 ../../../../../../src/GameSlotPreview.cpp \
3938 ../../../../../../src/GameState.cpp \
40 ../../../../../../src/GameStateConfigBase.cpp \
41 ../../../../../../src/GameStateConfigDesktop.cpp \
39 ../../../../../../src/GameStateConfig.cpp \
4240 ../../../../../../src/GameStateCutscene.cpp \
4341 ../../../../../../src/GameStateTitle.cpp \
4442 ../../../../../../src/GameStateLoad.cpp \
6361 ../../../../../../src/MenuActiveEffects.cpp \
6462 ../../../../../../src/MenuBook.cpp \
6563 ../../../../../../src/MenuCharacter.cpp \
64 ../../../../../../src/MenuConfig.cpp \
6665 ../../../../../../src/MenuConfirm.cpp \
6766 ../../../../../../src/MenuDevConsole.cpp \
6867 ../../../../../../src/MenuEnemy.cpp \
6968 ../../../../../../src/MenuExit.cpp \
69 ../../../../../../src/MenuGameOver.cpp \
7070 ../../../../../../src/MenuHUDLog.cpp \
7171 ../../../../../../src/MenuInventory.cpp \
7272 ../../../../../../src/MenuItemStorage.cpp \
7373 ../../../../../../src/MenuLog.cpp \
7474 ../../../../../../src/MenuManager.cpp \
7575 ../../../../../../src/MenuMiniMap.cpp \
76 ../../../../../../src/MenuMovementType.cpp \
7677 ../../../../../../src/MenuNumPicker.cpp \
7778 ../../../../../../src/MenuPowers.cpp \
7879 ../../../../../../src/MenuStash.cpp \
111112 ../../../../../../src/Widget.cpp \
112113 ../../../../../../src/WidgetCheckBox.cpp \
113114 ../../../../../../src/WidgetButton.cpp \
115 ../../../../../../src/WidgetHorizontalList.cpp \
114116 ../../../../../../src/WidgetInput.cpp \
115117 ../../../../../../src/WidgetLabel.cpp \
116118 ../../../../../../src/WidgetListBox.cpp \
44 google()
55 }
66 dependencies {
7 classpath 'com.android.tools.build:gradle:3.1.0'
7 classpath 'com.android.tools.build:gradle:4.0.1'
88 }
99 }
1010
00 <?xml version="1.0" encoding="UTF-8"?>
1 <module external.linked.project.id="flare-android-project" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
1 <module external.linked.project.id="flare-android-project" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
22 <component name="FacetManager">
33 <facet type="java-gradle" name="Java-Gradle">
44 <configuration>
1212 <content url="file://$MODULE_DIR$">
1313 <excludeFolder url="file://$MODULE_DIR$/.gradle" />
1414 </content>
15 <orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
15 <orderEntry type="inheritedJdk" />
1616 <orderEntry type="sourceFolder" forTests="false" />
1717 </component>
1818 </module>
0 #Thu Apr 05 15:20:13 EDT 2018
0 #Mon Jun 08 12:29:11 EDT 2020
11 distributionBase=GRADLE_USER_HOME
22 distributionPath=wrapper/dists
33 zipStoreBase=GRADLE_USER_HOME
44 zipStorePath=wrapper/dists
5 distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
5 distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
88 cmake .
99
1010 emcc \
11 -Isrc/ \
12 src/*.cpp \
13 -O3 \
14 -s ASSERTIONS=1 \
15 -s ALLOW_MEMORY_GROWTH=1 \
16 -s USE_SDL=2 \
17 -s USE_SDL_IMAGE=2 \
18 -s SDL2_IMAGE_FORMATS='["png"]' \
11 -v \
12 -Isrc/ \
13 src/*.cpp \
14 -O3 \
15 -s ASSERTIONS=1 \
16 -s ALLOW_MEMORY_GROWTH=1 \
17 -s USE_SDL=2 \
18 -s USE_SDL_IMAGE=2 \
19 -s SDL2_IMAGE_FORMATS='["png"]' \
1920 -s USE_SDL_TTF=2 \
20 --preload-file mods \
21 -o emscripten/index.html
21 -s USE_SDL_MIXER=2 \
22 -s "EXTRA_EXPORTED_RUNTIME_METHODS=['print']" \
23 -lidbfs.js \
24 --preload-file mods \
25 --use-preload-cache \
26 -o emscripten/index.html
2227
2328 rm -rf mods/fantasycore
2429 rm -rf mods/empyrean_campaign
2222 text=Anton Golov
2323 text=Artur Rojek
2424 text=blazindragon
25 text=bloodhero
2526 text=Bonbadil
2627 text=Chris Oelmueller
2728 text=David Bariod
3132 text=Juan PabloTamayo
3233 text=Kitano
3334 text=Kyle Belanger
35 text=Leszek Cimała
3436 text=LongerDev
3537 text=Manuel A. Fernandez Montecelo
3638 text=Matthew Krohn
39 text=m7600
3740 text=Nojan
41 text=nwtour
3842 text=Pavel Kirpichyov
43 text=r-a-cristian-93
3944 text=runtime-x86
4045 text=Ryan Dansie
4146 separator=32
5156 text=Adrian Chaves Fernandez
5257 text=Andrea Ranaldi
5358 text=Andreas Berheim Brudin
59 text=Andrey Kapitonov
5460 text=Bas Doodeman
61 text=Błażej Pęksyk
5562 text=Bonbadil
63 text=bzt
5664 text=Carlos Sanchez
5765 text=Chris Oelmueller
5866 text=Christoph J. Thompson
67 text=Christophe Nemo
5968 text=Denis Lysenko
6069 text=Diego J. Romero López
6170 text=dumaosen
71 text=Elias Nykrem
6272 text=Emil
6373 text=Eric R
6474 text=Evgen Pavlov
7181 text=Igor Paliychuk
7282 text=Janet Hunt
7383 text=Juan Pablo Tamayo
84 text=Kor_OfenTHource
85 text=(bnk159hair, kangdonghun1230, HunSeongPark, paparad0x)
7486 text=losine
7587 text=Marc Tormo i Bochaca
88 text=Maria Cano
89 text=McSinyx
7690 text=Michael Papageorgiou
7791 text=Mikhail Karalevich
7892 text=Miro Jánošík
93 text=MiroslavR
7994 text=Mykola Franchuk
8095 text=MOB2
8196 text=Morgan Strauss
8297 text=Nea Retrogamer
83 text=Nguyễn Gia Phong
8498 text=Nikita Vanku
8599 text=Paul Wortmann
86100 text=Pawel Puszczynski
91105 text=Stefan Beller
92106 text=Stefano Peris
93107 text=sujiniku
108 text=syl_
94109 text=Thomas Glamsch
95110 text=Timo Sievänen
96111 text=Vicente Monteiro
0 # duration, in frames
10 duration=1s
2
3 # speed, in pixels per frame
1 fade_duration=400ms
42 speed=1
44 id=font_regular
55 style=default,LiberationSans-Regular.ttf,14,1
66 style=ja,unifont-10.0.06.ttf,14,1
7 style=ko,unifont-10.0.06.ttf,14,1
78 style=zh,unifont-10.0.06.ttf,14,1
89
910 [font]
1011 id=font_captions
1112 style=default,LiberationSans-Regular.ttf,18,1
1213 style=ja,unifont-10.0.06.ttf,18,1
14 style=ko,unifont-10.0.06.ttf,18,1
1315 style=zh,unifont-10.0.06.ttf,18,1
1416
1517 [font]
1618 id=font_subtitles
1719 style=default,LiberationSans-Regular.ttf,16,1
1820 style=ja,unifont-10.0.06.ttf,16,1
21 style=ko,unifont-10.0.06.ttf,16,1
1922 style=zh,unifont-10.0.06.ttf,16,1
2023
1313 el=Ελληνικά
1414 en=English
1515 es=Español
16 eu=Basque
1617 fi=Suomi
1718 fr=Français
1819 gd=Gàidhlig
1920 gl=Galego
21 hu=Magyar
2022 # he=עברית
2123 it=Italiano
2224 ja=Japanese
25 ko=Korean
2326 nb=Norsk Bokmål
2427 nl=Nederlands
2528 pl=Polski
22 #
33 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
44 # Translators:
5 # Zmicer Turok <zmicerturok@gmail.com>, 2018
5 # Zmicer Turok <nashtlumach@gmail.com>, 2018
66 #
77 msgid ""
88 msgstr ""
99 "Project-Id-Version: PACKAGE VERSION\n"
1010 "Report-Msgid-Bugs-To: \n"
11 "POT-Creation-Date: 2018-11-13 17:21+\n"
11 "POT-Creation-Date: 2019-07-29 09:34+\n"
1212 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
13 "Last-Translator: Zmicer Turok <zmicerturok@gmail.com>, 2018\n"
13 "Last-Translator: Zmicer Turok <nashtlumach@gmail.com>, 2018\n"
1414 "Language-Team: Belarusian (https://www.transifex.com/flareorg/teams/84925/be/)\n"
1515 "MIME-Version: 1.0\n"
1616 "Content-Type: text/plain; charset=UTF-8\n"
9090 msgid "Lead Programmers"
9191 msgstr "Вядучыя праграмісты"
9292
93 #: ../cutscenes/credits.txt:12
94 msgid "Clint Bellanger"
95 msgstr "Clint Bellanger"
96
97 #: ../cutscenes/credits.txt:13
98 msgid "Henrik Andersson"
99 msgstr "Henrik Andersson"
100
101 #: ../cutscenes/credits.txt:14
102 msgid "Igor Paliychuk"
103 msgstr "Igor Paliychuk"
104
105 #: ../cutscenes/credits.txt:15
106 msgid "Justin Jacobs"
107 msgstr "Justin Jacobs"
108
109 #: ../cutscenes/credits.txt:16
110 msgid "Stefan Beller"
111 msgstr "Stefan Beller"
112
113 #: ../cutscenes/credits.txt:17
114 msgid "Thane Brimhall"
115 msgstr "Thane Brimhall"
116
11793 #: ../cutscenes/credits.txt:20
11894 msgid "Programmers"
11995 msgstr "Праграмісты"
120
121 #: ../cutscenes/credits.txt:22
122 msgid "Andrew Engelbrecht"
123 msgstr "Andrew Engelbrecht"
124
125 #: ../cutscenes/credits.txt:23
126 msgid "Anton Golov"
127 msgstr "Anton Golov"
128
129 #: ../cutscenes/credits.txt:24
130 msgid "Artur Rojek"
131 msgstr "Artur Rojek"
132
133 #: ../cutscenes/credits.txt:25
134 msgid "blazindragon"
135 msgstr "blazindragon"
136
137 #: ../cutscenes/credits.txt:26
138 msgid "Bonbadil"
139 msgstr "Bonbadil"
140
141 #: ../cutscenes/credits.txt:27
142 msgid "Chris Oelmueller"
143 msgstr "Chris Oelmueller"
144
145 #: ../cutscenes/credits.txt:28
146 msgid "David Bariod"
147 msgstr "David Bariod"
148
149 #: ../cutscenes/credits.txt:29
150 msgid "Daniel Santos"
151 msgstr "Daniel Santos"
152
153 #: ../cutscenes/credits.txt:30
154 msgid "Gallaecio"
155 msgstr "Gallaecio"
156
157 #: ../cutscenes/credits.txt:31
158 msgid "Joseph Bleu"
159 msgstr "Joseph Bleu"
160
161 #: ../cutscenes/credits.txt:32
162 msgid "Juan PabloTamayo"
163 msgstr "Juan PabloTamayo"
164
165 #: ../cutscenes/credits.txt:33
166 msgid "Kitano"
167 msgstr "Kitano"
168
169 #: ../cutscenes/credits.txt:34
170 msgid "Kyle Belanger"
171 msgstr "Kyle Belanger"
172
173 #: ../cutscenes/credits.txt:35
174 msgid "LongerDev"
175 msgstr "LongerDev"
176
177 #: ../cutscenes/credits.txt:36
178 msgid "Manuel A. Fernandez Montecelo"
179 msgstr "Manuel A. Fernandez Montecelo"
180
181 #: ../cutscenes/credits.txt:37
182 msgid "Matthew Krohn"
183 msgstr "Matthew Krohn"
184
185 #: ../cutscenes/credits.txt:38
186 msgid "Nojan"
187 msgstr "Nojan"
188
189 #: ../cutscenes/credits.txt:39
190 msgid "Pavel Kirpichyov"
191 msgstr "Pavel Kirpichyov"
192
193 #: ../cutscenes/credits.txt:40
194 msgid "runtime-x86"
195 msgstr "runtime-x86"
196
197 #: ../cutscenes/credits.txt:41
198 msgid "Ryan Dansie"
199 msgstr "Ryan Dansie"
20096
20197 #: ../cutscenes/credits.txt:44
20298 msgid "Default Art"
206102 msgid "Translators"
207103 msgstr "Перакладчыкі"
208104
209 #: ../cutscenes/credits.txt:51
210 msgid "Ademaro"
211 msgstr "Ademaro"
212
213 #: ../cutscenes/credits.txt:52
214 msgid "Adrian Chaves Fernandez"
215 msgstr "Adrian Chaves Fernandez"
216
217 #: ../cutscenes/credits.txt:53
218 msgid "Andrea Ranaldi"
219 msgstr "Andrea Ranaldi"
220
221 #: ../cutscenes/credits.txt:54
222 msgid "Andreas Berheim Brudin"
223 msgstr "Andreas Berheim Brudin"
224
225 #: ../cutscenes/credits.txt:55
226 msgid "Bas Doodeman"
227 msgstr "Bas Doodeman"
228
229 #: ../cutscenes/credits.txt:57
230 msgid "Carlos Sanchez"
231 msgstr "Carlos Sanchez"
232
233 #: ../cutscenes/credits.txt:59
234 msgid "Christoph J. Thompson"
235 msgstr "Christoph J. Thompson"
236
237 #: ../cutscenes/credits.txt:60
238 msgid "Denis Lysenko"
239 msgstr "Denis Lysenko"
240
241 #: ../cutscenes/credits.txt:61
242 msgid "Diego J. Romero López"
243 msgstr "Diego J. Romero Lopez"
244
245 #: ../cutscenes/credits.txt:62
246 msgid "dumaosen"
247 msgstr "dumaosen"
248
249 #: ../cutscenes/credits.txt:63
250 msgid "Emil"
251 msgstr "Эміль"
252
253 #: ../cutscenes/credits.txt:64
254 msgid "Eric R"
255 msgstr "Eric R"
256
257 #: ../cutscenes/credits.txt:65
258 msgid "Evgen Pavlov"
259 msgstr "Evgen Pavlov"
260
261 #: ../cutscenes/credits.txt:66
262 msgid "Fabio Loli"
263 msgstr ""
264
265 #: ../cutscenes/credits.txt:67
266 msgid "Gianfranco Del Borrello"
267 msgstr "Gianfranco Del Borrello"
268
269 #: ../cutscenes/credits.txt:68
270 msgid "Giovanni Dalla Torre"
271 msgstr "Giovanni Dalla Torre"
272
273 #: ../cutscenes/credits.txt:69
274 msgid "GunChleoc"
275 msgstr "GunChleoc"
276
277 #: ../cutscenes/credits.txt:70
278 msgid "Hans Joachim Desserud"
279 msgstr "Hans Joachim Desserud"
280
281 #: ../cutscenes/credits.txt:71
282 msgid "hark34"
283 msgstr "hark34"
284
285 #: ../cutscenes/credits.txt:73
286 msgid "Janet Hunt"
287 msgstr "Janet Hunt"
288
289 #: ../cutscenes/credits.txt:74
290 msgid "Juan Pablo Tamayo"
291 msgstr "Juan Pablo Tamayo"
292
293 #: ../cutscenes/credits.txt:75
294 msgid "losine"
295 msgstr "losine"
296
297 #: ../cutscenes/credits.txt:76
298 msgid "Marc Tormo i Bochaca"
299 msgstr ""
300
301 #: ../cutscenes/credits.txt:77
302 msgid "Michael Papageorgiou"
303 msgstr "Michael Papageorgiou"
304
305 #: ../cutscenes/credits.txt:78
306 msgid "Mikhail Karalevich"
307 msgstr "Mikhail Karalevich"
308
309 #: ../cutscenes/credits.txt:79
310 msgid "Miro Jánošík"
311 msgstr "Miro Jánošík"
312
313 #: ../cutscenes/credits.txt:80
314 msgid "Mykola Franchuk"
315 msgstr ""
316
317 #: ../cutscenes/credits.txt:81
318 msgid "MOB2"
319 msgstr "MOB2"
320
321 #: ../cutscenes/credits.txt:82
322 msgid "Morgan Strauss"
323 msgstr "Morgan Strauss"
324
325 #: ../cutscenes/credits.txt:83
326 msgid "Nea Retrogamer"
327 msgstr "Nea Retrogamer"
328
329 #: ../cutscenes/credits.txt:84
330 msgid "Nguyễn Gia Phong"
331 msgstr "Nguyen Gia Phong"
332
333 #: ../cutscenes/credits.txt:85
334 msgid "Nikita Vanku"
335 msgstr "Nikita Vanku"
336
337 #: ../cutscenes/credits.txt:86
338 msgid "Paul Wortmann"
339 msgstr "Paul Wortmann"
340
341 #: ../cutscenes/credits.txt:87
342 msgid "Pawel Puszczynski"
343 msgstr "Pawel Puszczynski"
344
345 #: ../cutscenes/credits.txt:88
346 msgid "Quentin Stievenart"
347 msgstr "Quentin Stievenart"
348
349 #: ../cutscenes/credits.txt:89
350 msgid "Rui"
351 msgstr "Rui"
352
353 #: ../cutscenes/credits.txt:90
354 msgid "Sergey Basalaev"
355 msgstr "Sergey Basalaev"
356
357 #: ../cutscenes/credits.txt:91
358 msgid "Sergiy Borodych"
359 msgstr "Sergiy Borodych"
360
361 #: ../cutscenes/credits.txt:93
362 msgid "Stefano Peris"
363 msgstr "Stefano Peris"
364
365 #: ../cutscenes/credits.txt:94
366 msgid "sujiniku"
367 msgstr "sujiniku"
368
369 #: ../cutscenes/credits.txt:95
370 msgid "Thomas Glamsch"
371 msgstr "Thomas Glamsch"
372
373 #: ../cutscenes/credits.txt:96
374 msgid "Timo Sievänen"
375 msgstr "Timo Sievänen"
376
377 #: ../cutscenes/credits.txt:97
378 msgid "Vicente Monteiro"
379 msgstr "Vicente Monteiro"
380
381 #: ../cutscenes/credits.txt:98
382 msgid "Wuzzy2"
383 msgstr "Wuzzy2"
384
385 #: ../cutscenes/credits.txt:99
386 msgid "Yannis Anthymidis"
387 msgstr "Yannis Anthymidis"
388
389 #: ../cutscenes/credits.txt:100
390 msgid "Zmicer Turok"
391 msgstr "Zmicer Turok"
392
393 #: ../cutscenes/credits.txt:103
105 #: ../cutscenes/credits.txt:108
394106 msgid "Distributors"
395107 msgstr "Распаўсюджвальнікі"
396108
397 #: ../cutscenes/credits.txt:105
398 msgid "Ablu"
399 msgstr "Ablu"
400
401 #: ../cutscenes/credits.txt:106
402 msgid "Feillyne"
403 msgstr "Feillyne"
404
405 #: ../cutscenes/credits.txt:107
406 msgid "Jan-Hendrik Peters"
407 msgstr "Jan-Hendrik Peters"
408
409 #: ../cutscenes/credits.txt:109
410 msgid "miffe"
411 msgstr "miffe"
412
413 #: ../cutscenes/credits.txt:112
109 #: ../cutscenes/credits.txt:117
414110 msgid "Special Thanks"
415111 msgstr "Шчырыя падзякі"
416112
417 #: ../cutscenes/credits.txt:116
113 #: ../cutscenes/credits.txt:121
418114 msgid "For giving constant feedback and testing:"
419115 msgstr "За шматлікія водгукі і тэставанне:"
420116
421 #: ../cutscenes/credits.txt:117
422 msgid "Bart Kelsey"
423 msgstr "Bart Kelsey"
424
425 #: ../cutscenes/credits.txt:118
117 #: ../cutscenes/credits.txt:123
426118 msgid "The community at OpenGameArt"
427119 msgstr "Суполка OpenGameArt"
428120
429 #: ../cutscenes/credits.txt:122
121 #: ../cutscenes/credits.txt:127
430122 msgid "For Tiled and the Flare map exporter:"
431123 msgstr "За Tiled і экспарт мапаў Flare:"
432
433 #: ../cutscenes/credits.txt:123
434 msgid "Thorbjørn Lindeijer"
435 msgstr "Thorbjørn Lindeijer"
436
437 #: ../cutscenes/credits.txt:125
438 msgid "Ranie Jade Ramiso"
439 msgstr "Ranie Jade Ramiso"
88 msgstr ""
99 "Project-Id-Version: PACKAGE VERSION\n"
1010 "Report-Msgid-Bugs-To: \n"
11 "POT-Creation-Date: 2018-11-13 17:21+\n"
11 "POT-Creation-Date: 2019-07-29 09:34+\n"
1212 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1313 "Last-Translator: 48719d321e4b4a9c2ca8c6a1f8b9cba8, 2018\n"
1414 "Language-Team: Bulgarian (https://www.transifex.com/flareorg/teams/84925/bg/)\n"
9090 msgid "Lead Programmers"
9191 msgstr "Водещи програмисти"
9292
93 #: ../cutscenes/credits.txt:12
94 msgid "Clint Bellanger"
95 msgstr "Clint Bellanger"
96
97 #: ../cutscenes/credits.txt:13
98 msgid "Henrik Andersson"
99 msgstr "Henrik Andersson"
100
101 #: ../cutscenes/credits.txt:14
102 msgid "Igor Paliychuk"
103 msgstr "Igor Paliychuk"
104
105 #: ../cutscenes/credits.txt:15
106 msgid "Justin Jacobs"
107 msgstr "Justin Jacobs"
108
109 #: ../cutscenes/credits.txt:16
110 msgid "Stefan Beller"
111 msgstr "Stefan Beller"
112
113 #: ../cutscenes/credits.txt:17
114 msgid "Thane Brimhall"
115 msgstr "Thane Brimhall"
116
11793 #: ../cutscenes/credits.txt:20
11894 msgid "Programmers"
11995 msgstr "Програмисти"
120
121 #: ../cutscenes/credits.txt:22
122 msgid "Andrew Engelbrecht"
123 msgstr "Andrew Engelbrecht"
124
125 #: ../cutscenes/credits.txt:23
126 msgid "Anton Golov"
127 msgstr "Anton Golov"
128
129 #: ../cutscenes/credits.txt:24
130 msgid "Artur Rojek"
131 msgstr "Artur Rojek"
132
133 #: ../cutscenes/credits.txt:25
134 msgid "blazindragon"
135 msgstr "blazindragon"
136
137 #: ../cutscenes/credits.txt:26
138 msgid "Bonbadil"
139 msgstr "Bonbadil"
140
141 #: ../cutscenes/credits.txt:27
142 msgid "Chris Oelmueller"
143 msgstr "Chris Oelmueller"
144
145 #: ../cutscenes/credits.txt:28
146 msgid "David Bariod"
147 msgstr "David Bariod"
148
149 #: ../cutscenes/credits.txt:29
150 msgid "Daniel Santos"
151 msgstr "Daniel Santos"
152
153 #: ../cutscenes/credits.txt:30
154 msgid "Gallaecio"
155 msgstr "Gallaecio"
156
157 #: ../cutscenes/credits.txt:31
158 msgid "Joseph Bleu"
159 msgstr "Joseph Bleu"
160
161 #: ../cutscenes/credits.txt:32
162 msgid "Juan PabloTamayo"
163 msgstr "Juan PabloTamayo"
164
165 #: ../cutscenes/credits.txt:33
166 msgid "Kitano"
167 msgstr "Kitano"
168
169 #: ../cutscenes/credits.txt:34
170 msgid "Kyle Belanger"
171 msgstr "Kyle Belanger"
172
173 #: ../cutscenes/credits.txt:35
174 msgid "LongerDev"
175 msgstr "LongerDev"
176
177 #: ../cutscenes/credits.txt:36
178 msgid "Manuel A. Fernandez Montecelo"
179 msgstr "Manuel A. Fernandez Montecelo"
180
181 #: ../cutscenes/credits.txt:37
182 msgid "Matthew Krohn"
183 msgstr "Matthew Krohn"
184
185 #: ../cutscenes/credits.txt:38
186 msgid "Nojan"
187 msgstr "Nojan"
188
189 #: ../cutscenes/credits.txt:39
190 msgid "Pavel Kirpichyov"
191 msgstr "Pavel Kirpichyov"
192
193 #: ../cutscenes/credits.txt:40
194 msgid "runtime-x86"
195 msgstr "runtime-x86"
196
197 #: ../cutscenes/credits.txt:41
198 msgid "Ryan Dansie"
199 msgstr "Ryan Dansie"
20096
20197 #: ../cutscenes/credits.txt:44
20298 msgid "Default Art"
206102 msgid "Translators"
207103 msgstr "Преводачи"
208104
209 #: ../cutscenes/credits.txt:51
210 msgid "Ademaro"
211 msgstr "Ademaro"
212
213 #: ../cutscenes/credits.txt:52
214 msgid "Adrian Chaves Fernandez"
215 msgstr "Adrian Chaves Fernandez"
216
217 #: ../cutscenes/credits.txt:53
218 msgid "Andrea Ranaldi"
219 msgstr "Andrea Ranaldi"
220
221 #: ../cutscenes/credits.txt:54
222 msgid "Andreas Berheim Brudin"
223 msgstr "Andreas Berheim Brudin"
224
225 #: ../cutscenes/credits.txt:55
226 msgid "Bas Doodeman"
227 msgstr "Bas Doodeman"
228
229 #: ../cutscenes/credits.txt:57
230 msgid "Carlos Sanchez"
231 msgstr "Carlos Sanchez"
232
233 #: ../cutscenes/credits.txt:59
234 msgid "Christoph J. Thompson"
235 msgstr "Christoph J. Thompson"
236
237 #: ../cutscenes/credits.txt:60
238 msgid "Denis Lysenko"
239 msgstr "Denis Lysenko"
240
241 #: ../cutscenes/credits.txt:61
242 msgid "Diego J. Romero López"
243 msgstr "Diego J. Romero López"
244
245 #: ../cutscenes/credits.txt:62
246 msgid "dumaosen"
247 msgstr "dumaosen"
248
249 #: ../cutscenes/credits.txt:63
250 msgid "Emil"
251 msgstr "Emil"
252
253 #: ../cutscenes/credits.txt:64
254 msgid "Eric R"
255 msgstr "Eric R"
256
257 #: ../cutscenes/credits.txt:65
258 msgid "Evgen Pavlov"
259 msgstr "Evgen Pavlov"
260
261 #: ../cutscenes/credits.txt:66
262 msgid "Fabio Loli"
263 msgstr ""
264
265 #: ../cutscenes/credits.txt:67
266 msgid "Gianfranco Del Borrello"
267 msgstr "Gianfranco Del Borrello"
268
269 #: ../cutscenes/credits.txt:68
270 msgid "Giovanni Dalla Torre"
271 msgstr "Giovanni Dalla Torre"
272
273 #: ../cutscenes/credits.txt:69
274 msgid "GunChleoc"
275 msgstr "GunChleoc"
276
277 #: ../cutscenes/credits.txt:70
278 msgid "Hans Joachim Desserud"
279 msgstr "Hans Joachim Desserud"
280
281 #: ../cutscenes/credits.txt:71
282 msgid "hark34"
283 msgstr "hark34"
284
285 #: ../cutscenes/credits.txt:73
286 msgid "Janet Hunt"
287 msgstr "Janet Hunt"
288
289 #: ../cutscenes/credits.txt:74
290 msgid "Juan Pablo Tamayo"
291 msgstr "Juan Pablo Tamayo"
292
293 #: ../cutscenes/credits.txt:75
294 msgid "losine"
295 msgstr "losine"
296
297 #: ../cutscenes/credits.txt:76
298 msgid "Marc Tormo i Bochaca"
299 msgstr ""
300
301 #: ../cutscenes/credits.txt:77
302 msgid "Michael Papageorgiou"
303 msgstr "Michael Papageorgiou"
304
305 #: ../cutscenes/credits.txt:78
306 msgid "Mikhail Karalevich"
307 msgstr "Mikhail Karalevich"
308
309 #: ../cutscenes/credits.txt:79
310 msgid "Miro Jánošík"
311 msgstr "Miro Jánošík"
312
313 #: ../cutscenes/credits.txt:80
314 msgid "Mykola Franchuk"
315 msgstr ""
316
317 #: ../cutscenes/credits.txt:81
318 msgid "MOB2"
319 msgstr "MOB2"
320
321 #: ../cutscenes/credits.txt:82
322 msgid "Morgan Strauss"
323 msgstr "Morgan Strauss"
324
325 #: ../cutscenes/credits.txt:83
326 msgid "Nea Retrogamer"
327 msgstr "Nea Retrogamer"
328
329 #: ../cutscenes/credits.txt:84
330 msgid "Nguyễn Gia Phong"
331 msgstr "Nguyễn Gia Phong"
332
333 #: ../cutscenes/credits.txt:85
334 msgid "Nikita Vanku"
335 msgstr "Nikita Vanku"
336
337 #: ../cutscenes/credits.txt:86
338 msgid "Paul Wortmann"
339 msgstr "Paul Wortmann"
340
341 #: ../cutscenes/credits.txt:87
342 msgid "Pawel Puszczynski"
343 msgstr "Pawel Puszczynski"
344
345 #: ../cutscenes/credits.txt:88
346 msgid "Quentin Stievenart"
347 msgstr "Quentin Stievenart"
348
349 #: ../cutscenes/credits.txt:89
350 msgid "Rui"
351 msgstr "Rui"
352
353 #: ../cutscenes/credits.txt:90
354 msgid "Sergey Basalaev"
355 msgstr "Sergey Basalaev"
356
357 #: ../cutscenes/credits.txt:91
358 msgid "Sergiy Borodych"
359 msgstr "Sergiy Borodych"
360
361 #: ../cutscenes/credits.txt:93
362 msgid "Stefano Peris"
363 msgstr "Stefano Peris"
364
365 #: ../cutscenes/credits.txt:94
366 msgid "sujiniku"
367 msgstr "sujiniku"
368
369 #: ../cutscenes/credits.txt:95
370 msgid "Thomas Glamsch"
371 msgstr "Thomas Glamsch"
372
373 #: ../cutscenes/credits.txt:96
374 msgid "Timo Sievänen"
375 msgstr "Timo Sievänen"
376
377 #: ../cutscenes/credits.txt:97
378 msgid "Vicente Monteiro"
379 msgstr "Vicente Monteiro"
380
381 #: ../cutscenes/credits.txt:98
382 msgid "Wuzzy2"
383 msgstr "Wuzzy2"
384
385 #: ../cutscenes/credits.txt:99
386 msgid "Yannis Anthymidis"
387 msgstr "Yannis Anthymidis"
388
389 #: ../cutscenes/credits.txt:100
390 msgid "Zmicer Turok"
391 msgstr "Zmicer Turok"
392
393 #: ../cutscenes/credits.txt:103
105 #: ../cutscenes/credits.txt:108
394106 msgid "Distributors"
395107 msgstr "Дистрибутори"
396108
397 #: ../cutscenes/credits.txt:105
398 msgid "Ablu"
399 msgstr "Ablu"
400
401 #: ../cutscenes/credits.txt:106
402 msgid "Feillyne"
403 msgstr "Feillyne"
404
405 #: ../cutscenes/credits.txt:107
406 msgid "Jan-Hendrik Peters"
407 msgstr "Jan-Hendrik Peters"
408
409 #: ../cutscenes/credits.txt:109
410 msgid "miffe"
411 msgstr "miffe"
412
413 #: ../cutscenes/credits.txt:112
109 #: ../cutscenes/credits.txt:117
414110 msgid "Special Thanks"
415111 msgstr "Специални благодарности"
416112
417 #: ../cutscenes/credits.txt:116
113 #: ../cutscenes/credits.txt:121
418114 msgid "For giving constant feedback and testing:"
419115 msgstr "За даване на постоянна обратна връзка и тестване:"
420116
421 #: ../cutscenes/credits.txt:117
422 msgid "Bart Kelsey"
423 msgstr "Bart Kelsey"
424
425 #: ../cutscenes/credits.txt:118
117 #: ../cutscenes/credits.txt:123
426118 msgid "The community at OpenGameArt"
427119 msgstr "Общността в OpenGameArt"
428120
429 #: ../cutscenes/credits.txt:122
121 #: ../cutscenes/credits.txt:127
430122 msgid "For Tiled and the Flare map exporter:"
431123 msgstr "За Tiled и експортърът на карти за Flare:"
432
433 #: ../cutscenes/credits.txt:123
434 msgid "Thorbjørn Lindeijer"
435 msgstr "Thorbjørn Lindeijer"
436
437 #: ../cutscenes/credits.txt:125
438 msgid "Ranie Jade Ramiso"
439 msgstr "Ranie Jade Ramiso"
88 msgstr ""
99 "Project-Id-Version: PACKAGE VERSION\n"
1010 "Report-Msgid-Bugs-To: \n"
11 "POT-Creation-Date: 2018-11-13 17:21+\n"
11 "POT-Creation-Date: 2019-07-29 09:34+\n"
1212 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1313 "Last-Translator: Marc Tormo i Bochaca <mtbochaca@gmail.com>, 2018\n"
1414 "Language-Team: Catalan (https://www.transifex.com/flareorg/teams/84925/ca/)\n"
9090 msgid "Lead Programmers"
9191 msgstr "Principals programadors"
9292
93 #: ../cutscenes/credits.txt:12
94 msgid "Clint Bellanger"
95 msgstr "Clint Bellanger"
96
97 #: ../cutscenes/credits.txt:13
98 msgid "Henrik Andersson"
99 msgstr "Henrik Andersson"
100
101 #: ../cutscenes/credits.txt:14
102 msgid "Igor Paliychuk"
103 msgstr "Igor Paliychuk"
104
105 #: ../cutscenes/credits.txt:15
106 msgid "Justin Jacobs"
107 msgstr "Justin Jacobs"
108
109 #: ../cutscenes/credits.txt:16
110 msgid "Stefan Beller"
111 msgstr "Stefan Beller"
112
113 #: ../cutscenes/credits.txt:17
114 msgid "Thane Brimhall"
115 msgstr "Thane Brimhall"
116
11793 #: ../cutscenes/credits.txt:20
11894 msgid "Programmers"
11995 msgstr "Programadors"
120
121 #: ../cutscenes/credits.txt:22
122 msgid "Andrew Engelbrecht"
123 msgstr "Andrew Engelbrecht"
124
125 #: ../cutscenes/credits.txt:23
126 msgid "Anton Golov"
127 msgstr "Anton Golov"
128
129 #: ../cutscenes/credits.txt:24
130 msgid "Artur Rojek"
131 msgstr "Artur Rojek"
132
133 #: ../cutscenes/credits.txt:25
134 msgid "blazindragon"
135 msgstr "blazindragon"
136
137 #: ../cutscenes/credits.txt:26
138 msgid "Bonbadil"
139 msgstr "Bonbadil"
140
141 #: ../cutscenes/credits.txt:27
142 msgid "Chris Oelmueller"
143 msgstr "Chris Oelmueller"
144
145 #: ../cutscenes/credits.txt:28
146 msgid "David Bariod"
147 msgstr "David Bariod"
148
149 #: ../cutscenes/credits.txt:29
150 msgid "Daniel Santos"
151 msgstr "Daniel Santos"
152
153 #: ../cutscenes/credits.txt:30
154 msgid "Gallaecio"
155 msgstr "Gallaecio"
156
157 #: ../cutscenes/credits.txt:31
158 msgid "Joseph Bleu"
159 msgstr "Joseph Bleu"
160
161 #: ../cutscenes/credits.txt:32
162 msgid "Juan PabloTamayo"
163 msgstr "Juan PabloTamayo"
164
165 #: ../cutscenes/credits.txt:33
166 msgid "Kitano"
167 msgstr "Kitano"
168
169 #: ../cutscenes/credits.txt:34
170 msgid "Kyle Belanger"
171 msgstr "Kyle Belanger"
172
173 #: ../cutscenes/credits.txt:35
174 msgid "LongerDev"
175 msgstr "LongerDev"
176
177 #: ../cutscenes/credits.txt:36
178 msgid "Manuel A. Fernandez Montecelo"
179 msgstr "Manuel A. Fernandez Montecelo"
180
181 #: ../cutscenes/credits.txt:37
182 msgid "Matthew Krohn"
183 msgstr "Matthew Krohn"
184
185 #: ../cutscenes/credits.txt:38
186 msgid "Nojan"
187 msgstr "Nojan"
188
189 #: ../cutscenes/credits.txt:39
190 msgid "Pavel Kirpichyov"
191 msgstr "Pavel Kirpichyov"
192
193 #: ../cutscenes/credits.txt:40
194 msgid "runtime-x86"
195 msgstr "runtime-x86"
196
197 #: ../cutscenes/credits.txt:41
198 msgid "Ryan Dansie"
199 msgstr "Ryan Dansie"
20096
20197 #: ../cutscenes/credits.txt:44
20298 msgid "Default Art"
206102 msgid "Translators"
207103 msgstr "Traductors"
208104
209 #: ../cutscenes/credits.txt:51
210 msgid "Ademaro"
211 msgstr "Ademaro"
212
213 #: ../cutscenes/credits.txt:52
214 msgid "Adrian Chaves Fernandez"
215 msgstr "Adrian Chaves Fernandez"
216
217 #: ../cutscenes/credits.txt:53
218 msgid "Andrea Ranaldi"
219 msgstr "Andrea Ranaldi"
220
221 #: ../cutscenes/credits.txt:54
222 msgid "Andreas Berheim Brudin"
223 msgstr "Andreas Berheim Brudin"
224
225 #: ../cutscenes/credits.txt:55
226 msgid "Bas Doodeman"
227 msgstr "Bas Doodeman"
228
229 #: ../cutscenes/credits.txt:57
230 msgid "Carlos Sanchez"
231 msgstr "Carlos Sanchez"
232
233 #: ../cutscenes/credits.txt:59
234 msgid "Christoph J. Thompson"
235 msgstr "Christoph J. Thompson"
236
237 #: ../cutscenes/credits.txt:60
238 msgid "Denis Lysenko"
239 msgstr "Denis Lysenko"
240
241 #: ../cutscenes/credits.txt:61
242 msgid "Diego J. Romero López"
243 msgstr "Diego J. Romero López"
244
245 #: ../cutscenes/credits.txt:62
246 msgid "dumaosen"
247 msgstr "dumaosen"
248
249 #: ../cutscenes/credits.txt:63
250 msgid "Emil"
251 msgstr "Emil"
252
253 #: ../cutscenes/credits.txt:64
254 msgid "Eric R"
255 msgstr "Eric R"
256
257 #: ../cutscenes/credits.txt:65
258 msgid "Evgen Pavlov"
259 msgstr "Evgen Pavlov"
260
261 #: ../cutscenes/credits.txt:66
262 msgid "Fabio Loli"
263 msgstr "Fabio Loli"
264
265 #: ../cutscenes/credits.txt:67
266 msgid "Gianfranco Del Borrello"
267 msgstr "Gianfranco Del Borrello"
268
269 #: ../cutscenes/credits.txt:68
270 msgid "Giovanni Dalla Torre"
271 msgstr "Giovanni Dalla Torre"
272
273 #: ../cutscenes/credits.txt:69
274 msgid "GunChleoc"
275 msgstr "GunChleoc"
276
277 #: ../cutscenes/credits.txt:70
278 msgid "Hans Joachim Desserud"
279 msgstr "Hans Joachim Desserud"
280
281 #: ../cutscenes/credits.txt:71
282 msgid "hark34"
283 msgstr "hark34"
284
285 #: ../cutscenes/credits.txt:73
286 msgid "Janet Hunt"
287 msgstr "Janet Hunt"
288
289 #: ../cutscenes/credits.txt:74
290 msgid "Juan Pablo Tamayo"
291 msgstr "Juan Pablo Tamayo"
292
293 #: ../cutscenes/credits.txt:75
294 msgid "losine"
295 msgstr "losine"
296
297 #: ../cutscenes/credits.txt:76
298 msgid "Marc Tormo i Bochaca"
299 msgstr ""
300
301 #: ../cutscenes/credits.txt:77
302 msgid "Michael Papageorgiou"
303 msgstr "Michael Papageorgiou"
304
305 #: ../cutscenes/credits.txt:78
306 msgid "Mikhail Karalevich"
307 msgstr "Mikhail Karalevich"
308
309 #: ../cutscenes/credits.txt:79
310 msgid "Miro Jánošík"
311 msgstr "Miro Jánošík"
312
313 #: ../cutscenes/credits.txt:80
314 msgid "Mykola Franchuk"
315 msgstr "Mykola Franchuk"
316
317 #: ../cutscenes/credits.txt:81
318 msgid "MOB2"
319 msgstr "MOB2"
320
321 #: ../cutscenes/credits.txt:82
322 msgid "Morgan Strauss"
323 msgstr "Morgan Strauss"
324
325 #: ../cutscenes/credits.txt:83
326 msgid "Nea Retrogamer"
327 msgstr "Nea Retrogamer"
328
329 #: ../cutscenes/credits.txt:84
330 msgid "Nguyễn Gia Phong"
331 msgstr "Nguyễn Gia Phong"
332
333 #: ../cutscenes/credits.txt:85
334 msgid "Nikita Vanku"
335 msgstr "Nikita Vanku"
336
337 #: ../cutscenes/credits.txt:86
338 msgid "Paul Wortmann"
339 msgstr "Paul Wortmann"
340
341 #: ../cutscenes/credits.txt:87
342 msgid "Pawel Puszczynski"
343 msgstr "Pawel Puszczynski"
344
345 #: ../cutscenes/credits.txt:88
346 msgid "Quentin Stievenart"
347 msgstr "Quentin Stievenart"
348
349 #: ../cutscenes/credits.txt:89
350 msgid "Rui"
351 msgstr "Rui"
352
353 #: ../cutscenes/credits.txt:90
354 msgid "Sergey Basalaev"
355 msgstr "Sergey Basalaev"
356
357 #: ../cutscenes/credits.txt:91
358 msgid "Sergiy Borodych"
359 msgstr "Sergiy Borodych"
360
361 #: ../cutscenes/credits.txt:93
362 msgid "Stefano Peris"
363 msgstr "Stefano Peris"
364
365 #: ../cutscenes/credits.txt:94
366 msgid "sujiniku"
367 msgstr "sujiniku"
368
369 #: ../cutscenes/credits.txt:95
370 msgid "Thomas Glamsch"
371 msgstr "Thomas Glamsch"
372
373 #: ../cutscenes/credits.txt:96
374 msgid "Timo Sievänen"
375 msgstr "Timo Sievänen"
376
377 #: ../cutscenes/credits.txt:97
378 msgid "Vicente Monteiro"
379 msgstr "Vicente Monteiro"
380
381 #: ../cutscenes/credits.txt:98
382 msgid "Wuzzy2"
383 msgstr "Wuzzy2"
384
385 #: ../cutscenes/credits.txt:99
386 msgid "Yannis Anthymidis"
387 msgstr "Yannis Anthymidis"
388
389 #: ../cutscenes/credits.txt:100
390 msgid "Zmicer Turok"
391 msgstr "Zmicer Turok"
392
393 #: ../cutscenes/credits.txt:103
105 #: ../cutscenes/credits.txt:108
394106 msgid "Distributors"
395107 msgstr "Distribuïdors"
396108
397 #: ../cutscenes/credits.txt:105
398 msgid "Ablu"
399 msgstr "Ablu"
400
401 #: ../cutscenes/credits.txt:106
402 msgid "Feillyne"
403 msgstr "Feillyne"
404
405 #: ../cutscenes/credits.txt:107
406 msgid "Jan-Hendrik Peters"
407 msgstr "Jan-Hendrik Peters"
408
409 #: ../cutscenes/credits.txt:109
410 msgid "miffe"
411 msgstr "miffe"
412
413 #: ../cutscenes/credits.txt:112
109 #: ../cutscenes/credits.txt:117
414110 msgid "Special Thanks"
415111 msgstr "Agraïments especials"
416112
417 #: ../cutscenes/credits.txt:116
113 #: ../cutscenes/credits.txt:121
418114 msgid "For giving constant feedback and testing:"
419115 msgstr "Per realitzar comentaris i proves constantment:"
420116
421 #: ../cutscenes/credits.txt:117
422 msgid "Bart Kelsey"
423 msgstr "Bart Kelsey"
424
425 #: ../cutscenes/credits.txt:118
117 #: ../cutscenes/credits.txt:123
426118 msgid "The community at OpenGameArt"
427119 msgstr "La comunitat de OpenGameArt"
428120
429 #: ../cutscenes/credits.txt:122
121 #: ../cutscenes/credits.txt:127
430122 msgid "For Tiled and the Flare map exporter:"
431123 msgstr "Per els mosaics i els exportadors de mapes de Flare:"
432
433 #: ../cutscenes/credits.txt:123
434 msgid "Thorbjørn Lindeijer"
435 msgstr "Thorbjørn Lindeijer"
436
437 #: ../cutscenes/credits.txt:125
438 msgid "Ranie Jade Ramiso"
439 msgstr "Ranie Jade Ramiso"
88 msgstr ""
99 "Project-Id-Version: PACKAGE VERSION\n"
1010 "Report-Msgid-Bugs-To: \n"
11 "POT-Creation-Date: 2018-11-13 17:21+\n"
11 "POT-Creation-Date: 2019-07-29 09:34+\n"
1212 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1313 "Last-Translator: a hark <vit.hrachovy@sandbox.cz>, 2018\n"
1414 "Language-Team: Czech (https://www.transifex.com/flareorg/teams/84925/cs/)\n"
9090 msgid "Lead Programmers"
9191 msgstr "vedoucí programátoři"
9292
93 #: ../cutscenes/credits.txt:12
94 msgid "Clint Bellanger"
95 msgstr "Clint Bellanger"
96
97 #: ../cutscenes/credits.txt:13
98 msgid "Henrik Andersson"
99 msgstr "Henrik Andersson"
100
101 #: ../cutscenes/credits.txt:14
102 msgid "Igor Paliychuk"
103 msgstr "Igor Paliychuk"
104
105 #: ../cutscenes/credits.txt:15
106 msgid "Justin Jacobs"
107 msgstr "Justin Jacobs"
108
109 #: ../cutscenes/credits.txt:16
110 msgid "Stefan Beller"
111 msgstr "Stefan Beller"
112
113 #: ../cutscenes/credits.txt:17
114 msgid "Thane Brimhall"
115 msgstr "Thane Brimhall"
116
11793 #: ../cutscenes/credits.txt:20
11894 msgid "Programmers"
11995 msgstr "programátoři"
120
121 #: ../cutscenes/credits.txt:22
122 msgid "Andrew Engelbrecht"
123 msgstr "Andrew Engelbrecht"
124
125 #: ../cutscenes/credits.txt:23
126 msgid "Anton Golov"
127 msgstr "Anton Golov"
128
129 #: ../cutscenes/credits.txt:24
130 msgid "Artur Rojek"
131 msgstr "Artur Rojek"
132
133 #: ../cutscenes/credits.txt:25
134 msgid "blazindragon"
135 msgstr "blazindragon"
136
137 #: ../cutscenes/credits.txt:26
138 msgid "Bonbadil"
139 msgstr "Bonbadil"
140
141 #: ../cutscenes/credits.txt:27
142 msgid "Chris Oelmueller"
143 msgstr "Chris Oelmueller"
144
145 #: ../cutscenes/credits.txt:28
146 msgid "David Bariod"
147 msgstr "David Bariod"
148
149 #: ../cutscenes/credits.txt:29
150 msgid "Daniel Santos"
151 msgstr "Daniel Santos"
152
153 #: ../cutscenes/credits.txt:30
154 msgid "Gallaecio"
155 msgstr "Gallaecio"
156
157 #: ../cutscenes/credits.txt:31
158 msgid "Joseph Bleu"
159 msgstr "Joseph Bleu"
160
161 #: ../cutscenes/credits.txt:32
162 msgid "Juan PabloTamayo"
163 msgstr "Juan PabloTamayo"
164
165 #: ../cutscenes/credits.txt:33
166 msgid "Kitano"
167 msgstr "Kitano"
168
169 #: ../cutscenes/credits.txt:34
170 msgid "Kyle Belanger"
171 msgstr "Kyle Belanger"
172
173 #: ../cutscenes/credits.txt:35
174 msgid "LongerDev"
175 msgstr "LongerDev"
176
177 #: ../cutscenes/credits.txt:36
178 msgid "Manuel A. Fernandez Montecelo"
179 msgstr "Manuel A. Fernandez Montecelo"
180
181 #: ../cutscenes/credits.txt:37
182 msgid "Matthew Krohn"
183 msgstr "Matthew Krohn"
184
185 #: ../cutscenes/credits.txt:38
186 msgid "Nojan"
187 msgstr "Nojan"
188
189 #: ../cutscenes/credits.txt:39
190 msgid "Pavel Kirpichyov"
191 msgstr "Pavel Kirpichyov"
192
193 #: ../cutscenes/credits.txt:40
194 msgid "runtime-x86"
195 msgstr "runtime-x86"
196
197 #: ../cutscenes/credits.txt:41
198 msgid "Ryan Dansie"
199 msgstr "Ryan Dansie"
20096
20197 #: ../cutscenes/credits.txt:44
20298 msgid "Default Art"
206102 msgid "Translators"
207103 msgstr "překladatelé"
208104
209 #: ../cutscenes/credits.txt:51
210 msgid "Ademaro"
211 msgstr "Ademaro"
212
213 #: ../cutscenes/credits.txt:52
214 msgid "Adrian Chaves Fernandez"
215 msgstr "Adrian Chaves Fernandez"
216
217 #: ../cutscenes/credits.txt:53
218 msgid "Andrea Ranaldi"
219 msgstr "Andrea Ranaldi"
220
221 #: ../cutscenes/credits.txt:54
222 msgid "Andreas Berheim Brudin"
223 msgstr "Andreas Berheim Brudin"
224
225 #: ../cutscenes/credits.txt:55
226 msgid "Bas Doodeman"
227 msgstr "Bas Doodeman"
228
229 #: ../cutscenes/credits.txt:57
230 msgid "Carlos Sanchez"
231 msgstr "Carlos Sanchez"
232
233 #: ../cutscenes/credits.txt:59
234 msgid "Christoph J. Thompson"
235 msgstr "Christoph J. Thompson"
236
237 #: ../cutscenes/credits.txt:60
238 msgid "Denis Lysenko"
239 msgstr "Denis Lysenko"
240
241 #: ../cutscenes/credits.txt:61
242 msgid "Diego J. Romero López"
243 msgstr "Diego J. Romero López"
244
245 #: ../cutscenes/credits.txt:62
246 msgid "dumaosen"
247 msgstr ""
248
249 #: ../cutscenes/credits.txt:63
250 msgid "Emil"
251 msgstr ""
252
253 #: ../cutscenes/credits.txt:64
254 msgid "Eric R"
255 msgstr "Eric R"
256
257 #: ../cutscenes/credits.txt:65
258 msgid "Evgen Pavlov"
259 msgstr "Evgen Pavlov"
260
261 #: ../cutscenes/credits.txt:66
262 msgid "Fabio Loli"
263 msgstr ""
264
265 #: ../cutscenes/credits.txt:67
266 msgid "Gianfranco Del Borrello"
267 msgstr "Gianfranco Del Borrello"
268
269 #: ../cutscenes/credits.txt:68
270 msgid "Giovanni Dalla Torre"
271 msgstr "Giovanni Dalla Torre"
272
273 #: ../cutscenes/credits.txt:69
274 msgid "GunChleoc"
275 msgstr "GunChleoc"
276
277 #: ../cutscenes/credits.txt:70
278 msgid "Hans Joachim Desserud"
279 msgstr "Hans Joachim Desserud"
280
281 #: ../cutscenes/credits.txt:71
282 msgid "hark34"
283 msgstr ""
284
285 #: ../cutscenes/credits.txt:73
286 msgid "Janet Hunt"
287 msgstr "Janet Hunt"
288
289 #: ../cutscenes/credits.txt:74
290 msgid "Juan Pablo Tamayo"
291 msgstr "Juan Pablo Tamayo"
292
293 #: ../cutscenes/credits.txt:75
294 msgid "losine"
295 msgstr "losine"
296
297 #: ../cutscenes/credits.txt:76
298 msgid "Marc Tormo i Bochaca"
299 msgstr ""
300
301 #: ../cutscenes/credits.txt:77
302 msgid "Michael Papageorgiou"
303 msgstr "Michael Papageorgiou"
304
305 #: ../cutscenes/credits.txt:78
306 msgid "Mikhail Karalevich"
307 msgstr "Mikhail Karalevich"
308
309 #: ../cutscenes/credits.txt:79
310 msgid "Miro Jánošík"
311 msgstr "Miro Jánošík"
312
313 #: ../cutscenes/credits.txt:80
314 msgid "Mykola Franchuk"
315 msgstr ""
316
317 #: ../cutscenes/credits.txt:81
318 msgid "MOB2"
319 msgstr "MOB2"
320
321 #: ../cutscenes/credits.txt:82
322 msgid "Morgan Strauss"
323 msgstr "Morgan Strauss"
324
325 #: ../cutscenes/credits.txt:83
326 msgid "Nea Retrogamer"
327 msgstr "Nea Retrogamer"
328
329 #: ../cutscenes/credits.txt:84
330 msgid "Nguyễn Gia Phong"
331 msgstr ""
332
333 #: ../cutscenes/credits.txt:85
334 msgid "Nikita Vanku"
335 msgstr "Nikita Vanku"
336
337 #: ../cutscenes/credits.txt:86
338 msgid "Paul Wortmann"
339 msgstr "Paul Wortmann"
340
341 #: ../cutscenes/credits.txt:87
342 msgid "Pawel Puszczynski"
343 msgstr "Pawel Puszczynski"
344
345 #: ../cutscenes/credits.txt:88
346 msgid "Quentin Stievenart"
347 msgstr "Quentin Stievenart"
348
349 #: ../cutscenes/credits.txt:89
350 msgid "Rui"
351 msgstr "Rui"
352
353 #: ../cutscenes/credits.txt:90
354 msgid "Sergey Basalaev"
355 msgstr "Sergey Basalaev"
356
357 #: ../cutscenes/credits.txt:91
358 msgid "Sergiy Borodych"
359 msgstr "Sergiy Borodych"
360
361 #: ../cutscenes/credits.txt:93
362 msgid "Stefano Peris"
363 msgstr "Stefano Peris"
364
365 #: ../cutscenes/credits.txt:94
366 msgid "sujiniku"
367 msgstr "sujiniku"
368
369 #: ../cutscenes/credits.txt:95
370 msgid "Thomas Glamsch"
371 msgstr "Thomas Glamsch"
372
373 #: ../cutscenes/credits.txt:96
374 msgid "Timo Sievänen"
375 msgstr "Timo Sievänen"
376
377 #: ../cutscenes/credits.txt:97
378 msgid "Vicente Monteiro"
379 msgstr ""
380
381 #: ../cutscenes/credits.txt:98
382 msgid "Wuzzy2"
383 msgstr "Wuzzy2"
384
385 #: ../cutscenes/credits.txt:99
386 msgid "Yannis Anthymidis"
387 msgstr "Yannis Anthymidis"
388
389 #: ../cutscenes/credits.txt:100
390 msgid "Zmicer Turok"
391 msgstr ""
392
393 #: ../cutscenes/credits.txt:103
105 #: ../cutscenes/credits.txt:108
394106 msgid "Distributors"
395107 msgstr "distributoři"
396108
397 #: ../cutscenes/credits.txt:105
398 msgid "Ablu"
399 msgstr "Ablu"
400
401 #: ../cutscenes/credits.txt:106
402 msgid "Feillyne"
403 msgstr "Feillyne"
404
405 #: ../cutscenes/credits.txt:107
406 msgid "Jan-Hendrik Peters"
407 msgstr "Jan-Hendrik Peters"
408
409 #: ../cutscenes/credits.txt:109
410 msgid "miffe"
411 msgstr "miffe"
412
413 #: ../cutscenes/credits.txt:112
109 #: ../cutscenes/credits.txt:117
414110 msgid "Special Thanks"
415111 msgstr "zvláštní poděkování"
416112
417 #: ../cutscenes/credits.txt:116
113 #: ../cutscenes/credits.txt:121
418114 msgid "For giving constant feedback and testing:"
419115 msgstr "za dlouhodobou zpětnou vazbu a testování"
420116
421 #: ../cutscenes/credits.txt:117
422 msgid "Bart Kelsey"
423 msgstr "Bart Kelsey"
424
425 #: ../cutscenes/credits.txt:118
117 #: ../cutscenes/credits.txt:123
426118 msgid "The community at OpenGameArt"
427119 msgstr "komunita na OpenGameArt"
428120
429 #: ../cutscenes/credits.txt:122
121 #: ../cutscenes/credits.txt:127
430122 msgid "For Tiled and the Flare map exporter:"
431123 msgstr "za Tiled a exportér map Flare "
432
433 #: ../cutscenes/credits.txt:123
434 msgid "Thorbjørn Lindeijer"
435 msgstr "Thorbjørn Lindeijer"
436
437 #: ../cutscenes/credits.txt:125
438 msgid "Ranie Jade Ramiso"
439 msgstr "Ranie Jade Ramiso"
1010 msgstr ""
1111 "Project-Id-Version: PACKAGE VERSION\n"
1212 "Report-Msgid-Bugs-To: \n"
13 "POT-Creation-Date: 2018-11-14 00:57+\n"
13 "POT-Creation-Date: 2019-07-29 09:34+\n"
1414 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1515 "Last-Translator: Fyrenic <fyrenic@protonmail.com>, 2018\n"
1616 "Language-Team: German (https://www.transifex.com/flareorg/teams/84925/de/)\n"
9797 msgid "Lead Programmers"
9898 msgstr "Hauptprogrammierer"
9999
100 #: ../cutscenes/credits.txt:12
101 msgid "Clint Bellanger"
102 msgstr "Clint Bellanger"
103
104 #: ../cutscenes/credits.txt:13
105 msgid "Henrik Andersson"
106 msgstr "Henrik Andersson"
107
108 #: ../cutscenes/credits.txt:14
109 msgid "Igor Paliychuk"
110 msgstr "Igor Paliychuk"
111
112 #: ../cutscenes/credits.txt:15
113 msgid "Justin Jacobs"
114 msgstr "Justin Jacobs"
115
116 #: ../cutscenes/credits.txt:16
117 msgid "Stefan Beller"
118 msgstr "Stefan Beller"
119
120 #: ../cutscenes/credits.txt:17
121 msgid "Thane Brimhall"
122 msgstr "Thane Brimhall"
123
124100 #: ../cutscenes/credits.txt:20
125101 msgid "Programmers"
126102 msgstr "Programmierer"
127
128 #: ../cutscenes/credits.txt:22
129 msgid "Andrew Engelbrecht"
130 msgstr "Andrew Engelbrecht"
131
132 #: ../cutscenes/credits.txt:23
133 msgid "Anton Golov"
134 msgstr "Anton Golov"
135
136 #: ../cutscenes/credits.txt:24
137 msgid "Artur Rojek"
138 msgstr "Artur Rojek"
139
140 #: ../cutscenes/credits.txt:25
141 msgid "blazindragon"
142 msgstr "blazindragon"
143
144 #: ../cutscenes/credits.txt:26
145 msgid "Bonbadil"
146 msgstr "Bonbadil"
147
148 #: ../cutscenes/credits.txt:27
149 msgid "Chris Oelmueller"
150 msgstr "Chris Oelmueller"
151
152 #: ../cutscenes/credits.txt:28
153 msgid "David Bariod"
154 msgstr "David Bariod"
155
156 #: ../cutscenes/credits.txt:29
157 msgid "Daniel Santos"
158 msgstr "Daniel Santos"
159
160 #: ../cutscenes/credits.txt:30
161 msgid "Gallaecio"
162 msgstr "Gallaecio"
163
164 #: ../cutscenes/credits.txt:31
165 msgid "Joseph Bleu"
166 msgstr "Joseph Bleu"
167
168 #: ../cutscenes/credits.txt:32
169 msgid "Juan PabloTamayo"
170 msgstr "Juan PabloTamayo"
171
172 #: ../cutscenes/credits.txt:33
173 msgid "Kitano"
174 msgstr "Kitano"
175
176 #: ../cutscenes/credits.txt:34
177 msgid "Kyle Belanger"
178 msgstr "Kyle Belanger"
179
180 #: ../cutscenes/credits.txt:35
181 msgid "LongerDev"
182 msgstr "LongerDev"
183
184 #: ../cutscenes/credits.txt:36
185 msgid "Manuel A. Fernandez Montecelo"
186 msgstr "Manuel A. Fernandez Montecelo"
187
188 #: ../cutscenes/credits.txt:37
189 msgid "Matthew Krohn"
190 msgstr "Matthew Krohn"
191
192 #: ../cutscenes/credits.txt:38
193 msgid "Nojan"
194 msgstr "Nojan"
195
196 #: ../cutscenes/credits.txt:39
197 msgid "Pavel Kirpichyov"
198 msgstr "Pavel Kirpichyov"
199
200 #: ../cutscenes/credits.txt:40
201 msgid "runtime-x86"
202 msgstr "runtime-x86"
203
204 #: ../cutscenes/credits.txt:41
205 msgid "Ryan Dansie"
206 msgstr "Ryan Dansie"
207103
208104 #: ../cutscenes/credits.txt:44
209105 msgid "Default Art"
213109 msgid "Translators"
214110 msgstr "Übersetzer"
215111
216 #: ../cutscenes/credits.txt:51
217 msgid "Ademaro"
218 msgstr "Ademaro"
219
220 #: ../cutscenes/credits.txt:52
221 msgid "Adrian Chaves Fernandez"
222 msgstr "Adrian Chaves Fernandez"
223
224 #: ../cutscenes/credits.txt:53
225 msgid "Andrea Ranaldi"
226 msgstr "Andrea Ranaldi"
227
228 #: ../cutscenes/credits.txt:54
229 msgid "Andreas Berheim Brudin"
230 msgstr "Andreas Berheim Brudin"
231
232 #: ../cutscenes/credits.txt:55
233 msgid "Bas Doodeman"
234 msgstr "Bas Doodeman"
235
236 #: ../cutscenes/credits.txt:57
237 msgid "Carlos Sanchez"
238 msgstr "Carlos Sanchez"
239
240 #: ../cutscenes/credits.txt:59
241 msgid "Christoph J. Thompson"
242 msgstr "Christoph J. Thompson"
243
244 #: ../cutscenes/credits.txt:60
245 msgid "Denis Lysenko"
246 msgstr "Denis Lysenko"
247
248 #: ../cutscenes/credits.txt:61
249 msgid "Diego J. Romero López"
250 msgstr "Diego J. Romero López"
251
252 #: ../cutscenes/credits.txt:62
253 msgid "dumaosen"
254 msgstr "dumaosen"
255
256 #: ../cutscenes/credits.txt:63
257 msgid "Emil"
258 msgstr "Emil"
259
260 #: ../cutscenes/credits.txt:64
261 msgid "Eric R"
262 msgstr "Eric R"
263
264 #: ../cutscenes/credits.txt:65
265 msgid "Evgen Pavlov"
266 msgstr "Evgen Pavlov"
267
268 #: ../cutscenes/credits.txt:66
269 msgid "Fabio Loli"
270 msgstr "Fabio Loli"
271
272 #: ../cutscenes/credits.txt:67
273 msgid "Gianfranco Del Borrello"
274 msgstr "Gianfranco Del Borrello"
275
276 #: ../cutscenes/credits.txt:68
277 msgid "Giovanni Dalla Torre"
278 msgstr "Giovanni Dalla Torre"
279
280 #: ../cutscenes/credits.txt:69
281 msgid "GunChleoc"
282 msgstr "GunChleoc"
283
284 #: ../cutscenes/credits.txt:70
285 msgid "Hans Joachim Desserud"
286 msgstr "Hans Joachim Desserud"
287
288 #: ../cutscenes/credits.txt:71
289 msgid "hark34"
290 msgstr "hark34"
291
292 #: ../cutscenes/credits.txt:73
293 msgid "Janet Hunt"
294 msgstr "Janet Hunt"
295
296 #: ../cutscenes/credits.txt:74
297 msgid "Juan Pablo Tamayo"
298 msgstr "Juan Pablo Tamayo"
299
300 #: ../cutscenes/credits.txt:75
301 msgid "losine"
302 msgstr "losine"
303
304 #: ../cutscenes/credits.txt:76
305 msgid "Marc Tormo i Bochaca"
306 msgstr "Marc Tormo i Bochaca"
307
308 #: ../cutscenes/credits.txt:77
309 msgid "Michael Papageorgiou"
310 msgstr "Michael Papageorgiou"
311
312 #: ../cutscenes/credits.txt:78
313 msgid "Mikhail Karalevich"
314 msgstr "Mikhail Karalevich"
315
316 #: ../cutscenes/credits.txt:79
317 msgid "Miro Jánošík"
318 msgstr "Miro Jánošík"
319
320 #: ../cutscenes/credits.txt:80
321 msgid "Mykola Franchuk"
322 msgstr "Mykola Franchuk"
323
324 #: ../cutscenes/credits.txt:81
325 msgid "MOB2"
326 msgstr "MOB2"
327
328 #: ../cutscenes/credits.txt:82
329 msgid "Morgan Strauss"
330 msgstr "Morgan Strauss"
331
332 #: ../cutscenes/credits.txt:83
333 msgid "Nea Retrogamer"
334 msgstr "Nea Retrogamer"
335
336 #: ../cutscenes/credits.txt:84
337 msgid "Nguyễn Gia Phong"
338 msgstr "Nguyễn Gia Phong"
339
340 #: ../cutscenes/credits.txt:85
341 msgid "Nikita Vanku"
342 msgstr "Nikita Vanku"
343
344 #: ../cutscenes/credits.txt:86
345 msgid "Paul Wortmann"
346 msgstr "Paul Wortmann"
347
348 #: ../cutscenes/credits.txt:87
349 msgid "Pawel Puszczynski"
350 msgstr "Pawel Puszczynski"
351
352 #: ../cutscenes/credits.txt:88
353 msgid "Quentin Stievenart"
354 msgstr "Quentin Stievenart"
355
356 #: ../cutscenes/credits.txt:89
357 msgid "Rui"
358 msgstr "Rui"
359
360 #: ../cutscenes/credits.txt:90
361 msgid "Sergey Basalaev"
362 msgstr "Sergey Basalaev"
363
364 #: ../cutscenes/credits.txt:91
365 msgid "Sergiy Borodych"
366 msgstr "Sergiy Borodych"
367
368 #: ../cutscenes/credits.txt:93
369 msgid "Stefano Peris"
370 msgstr "Stefano Peris"
371
372 #: ../cutscenes/credits.txt:94
373 msgid "sujiniku"
374 msgstr "sujiniku"
375
376 #: ../cutscenes/credits.txt:95
377 msgid "Thomas Glamsch"
378 msgstr "Thomas Glamsch"
379
380 #: ../cutscenes/credits.txt:96
381 msgid "Timo Sievänen"
382 msgstr "Timo Sievänen"
383
384 #: ../cutscenes/credits.txt:97
385 msgid "Vicente Monteiro"
386 msgstr "Vicente Monteiro"
387
388 #: ../cutscenes/credits.txt:98
389 msgid "Wuzzy2"
390 msgstr "Wuzzy2"
391
392 #: ../cutscenes/credits.txt:99
393 msgid "Yannis Anthymidis"
394 msgstr "Yannis Anthymidis"
395
396 #: ../cutscenes/credits.txt:100
397 msgid "Zmicer Turok"
398 msgstr "Zmicer Turok"
399
400 #: ../cutscenes/credits.txt:103
112 #: ../cutscenes/credits.txt:108
401113 msgid "Distributors"
402114 msgstr "Distributoren"
403115
404 #: ../cutscenes/credits.txt:105
405 msgid "Ablu"
406 msgstr "Ablu"
407
408 #: ../cutscenes/credits.txt:106
409 msgid "Feillyne"
410 msgstr "Feillyne"
411
412 #: ../cutscenes/credits.txt:107
413 msgid "Jan-Hendrik Peters"
414 msgstr "Jan-Hendrik Peters"
415
416 #: ../cutscenes/credits.txt:109
417 msgid "miffe"
418 msgstr "miffe"
419
420 #: ../cutscenes/credits.txt:112
116 #: ../cutscenes/credits.txt:117
421117 msgid "Special Thanks"
422118 msgstr "Besonderer Dank geht an"
423119
424 #: ../cutscenes/credits.txt:116
120 #: ../cutscenes/credits.txt:121
425121 msgid "For giving constant feedback and testing:"
426122 msgstr "Für Feedback und Testen:"
427123
428 #: ../cutscenes/credits.txt:117
429 msgid "Bart Kelsey"
430 msgstr "Bart Kelsey"
431
432 #: ../cutscenes/credits.txt:118
124 #: ../cutscenes/credits.txt:123
433125 msgid "The community at OpenGameArt"
434126 msgstr "Die Gemeinschaft von OpenGameArt"
435127
436 #: ../cutscenes/credits.txt:122
128 #: ../cutscenes/credits.txt:127
437129 msgid "For Tiled and the Flare map exporter:"
438130 msgstr "Für Tiled und den Flare-Kartenexportierer:"
439
440 #: ../cutscenes/credits.txt:123
441 msgid "Thorbjørn Lindeijer"
442 msgstr "Thorbjørn Lindeijer"
443
444 #: ../cutscenes/credits.txt:125
445 msgid "Ranie Jade Ramiso"
446 msgstr "Ranie Jade Ramiso"
88 msgstr ""
99 "Project-Id-Version: PACKAGE VERSION\n"
1010 "Report-Msgid-Bugs-To: \n"
11 "POT-Creation-Date: 2018-11-13 17:21+\n"
11 "POT-Creation-Date: 2019-07-29 09:34+\n"
1212 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1313 "Last-Translator: Nea Retrogamer (nearetrogamer), 2018\n"
1414 "Language-Team: Greek (https://www.transifex.com/flareorg/teams/84925/el/)\n"
9090 msgid "Lead Programmers"
9191 msgstr ""
9292
93 #: ../cutscenes/credits.txt:12
94 msgid "Clint Bellanger"
95 msgstr "Clint Bellanger"
96
97 #: ../cutscenes/credits.txt:13
98 msgid "Henrik Andersson"
99 msgstr "Henrik Andersson"
100
101 #: ../cutscenes/credits.txt:14
102 msgid "Igor Paliychuk"
103 msgstr "Igor Paliychuk"
104
105 #: ../cutscenes/credits.txt:15
106 msgid "Justin Jacobs"
107 msgstr "Justin Jacobs"
108
109 #: ../cutscenes/credits.txt:16
110 msgid "Stefan Beller"
111 msgstr "Stefan Beller"
112
113 #: ../cutscenes/credits.txt:17
114 msgid "Thane Brimhall"
115 msgstr "Thane Brimhall"
116
11793 #: ../cutscenes/credits.txt:20
11894 msgid "Programmers"
11995 msgstr "Προγραμματιστές"
120
121 #: ../cutscenes/credits.txt:22
122 msgid "Andrew Engelbrecht"
123 msgstr "Andrew Engelbrecht"
124
125 #: ../cutscenes/credits.txt:23
126 msgid "Anton Golov"
127 msgstr "Anton Golov"
128
129 #: ../cutscenes/credits.txt:24
130 msgid "Artur Rojek"
131 msgstr "Artur Rojek"
132
133 #: ../cutscenes/credits.txt:25
134 msgid "blazindragon"
135 msgstr "blazindragon"
136
137 #: ../cutscenes/credits.txt:26
138 msgid "Bonbadil"
139 msgstr "Bonbadil"
140
141 #: ../cutscenes/credits.txt:27
142 msgid "Chris Oelmueller"
143 msgstr "Chris Oelmueller"
144
145 #: ../cutscenes/credits.txt:28
146 msgid "David Bariod"
147 msgstr "David Bariod"
148
149 #: ../cutscenes/credits.txt:29
150 msgid "Daniel Santos"
151 msgstr "Daniel Santos"
152
153 #: ../cutscenes/credits.txt:30
154 msgid "Gallaecio"
155 msgstr "Gallaecio"
156
157 #: ../cutscenes/credits.txt:31
158 msgid "Joseph Bleu"
159 msgstr "Joseph Bleu"
160
161 #: ../cutscenes/credits.txt:32
162 msgid "Juan PabloTamayo"
163 msgstr "Juan PabloTamayo"
164
165 #: ../cutscenes/credits.txt:33
166 msgid "Kitano"
167 msgstr "Kitano"
168
169 #: ../cutscenes/credits.txt:34
170 msgid "Kyle Belanger"
171 msgstr "Kyle Belanger"
172
173 #: ../cutscenes/credits.txt:35
174 msgid "LongerDev"
175 msgstr "LongerDev"
176
177 #: ../cutscenes/credits.txt:36
178 msgid "Manuel A. Fernandez Montecelo"
179 msgstr "Manuel A. Fernandez Montecelo"
180
181 #: ../cutscenes/credits.txt:37
182 msgid "Matthew Krohn"
183 msgstr "Matthew Krohn"
184
185 #: ../cutscenes/credits.txt:38
186 msgid "Nojan"
187 msgstr "Nojan"
188
189 #: ../cutscenes/credits.txt:39
190 msgid "Pavel Kirpichyov"
191 msgstr "Pavel Kirpichyov"
192
193 #: ../cutscenes/credits.txt:40
194 msgid "runtime-x86"
195 msgstr ""
196
197 #: ../cutscenes/credits.txt:41
198 msgid "Ryan Dansie"
199 msgstr "Ryan Dansie"
20096
20197 #: ../cutscenes/credits.txt:44
20298 msgid "Default Art"
206102 msgid "Translators"
207103 msgstr "Μεταφραστές"
208104
209 #: ../cutscenes/credits.txt:51
210 msgid "Ademaro"
211 msgstr ""
212
213 #: ../cutscenes/credits.txt:52
214 msgid "Adrian Chaves Fernandez"
215 msgstr "Adrian Chaves Fernandez"
216
217 #: ../cutscenes/credits.txt:53
218 msgid "Andrea Ranaldi"
219 msgstr "Andrea Ranaldi"
220
221 #: ../cutscenes/credits.txt:54
222 msgid "Andreas Berheim Brudin"
223 msgstr "Andreas Berheim Brudin"
224
225 #: ../cutscenes/credits.txt:55
226 msgid "Bas Doodeman"
227 msgstr "Bas Doodeman"
228
229 #: ../cutscenes/credits.txt:57
230 msgid "Carlos Sanchez"
231 msgstr "Carlos Sanchez"
232
233 #: ../cutscenes/credits.txt:59
234 msgid "Christoph J. Thompson"
235 msgstr "Christoph J. Thompson"
236
237 #: ../cutscenes/credits.txt:60
238 msgid "Denis Lysenko"
239 msgstr ""
240
241 #: ../cutscenes/credits.txt:61
242 msgid "Diego J. Romero López"
243 msgstr ""
244
245 #: ../cutscenes/credits.txt:62
246 msgid "dumaosen"
247 msgstr ""
248
249 #: ../cutscenes/credits.txt:63
250 msgid "Emil"
251 msgstr ""
252
253 #: ../cutscenes/credits.txt:64
254 msgid "Eric R"
255 msgstr ""
256
257 #: ../cutscenes/credits.txt:65
258 msgid "Evgen Pavlov"
259 msgstr "Evgen Pavlov"
260
261 #: ../cutscenes/credits.txt:66
262 msgid "Fabio Loli"
263 msgstr ""
264
265 #: ../cutscenes/credits.txt:67
266 msgid "Gianfranco Del Borrello"
267 msgstr "Gianfranco Del Borrello"
268
269 #: ../cutscenes/credits.txt:68
270 msgid "Giovanni Dalla Torre"
271 msgstr "Giovanni Dalla Torre"
272
273 #: ../cutscenes/credits.txt:69
274 msgid "GunChleoc"
275 msgstr "GunChleoc"
276
277 #: ../cutscenes/credits.txt:70
278 msgid "Hans Joachim Desserud"
279 msgstr "Hans Joachim Desserud"
280
281 #: ../cutscenes/credits.txt:71
282 msgid "hark34"
283 msgstr ""
284
285 #: ../cutscenes/credits.txt:73
286 msgid "Janet Hunt"
287 msgstr "Janet Hunt"
288
289 #: ../cutscenes/credits.txt:74
290 msgid "Juan Pablo Tamayo"
291 msgstr "Juan Pablo Tamayo"
292
293 #: ../cutscenes/credits.txt:75
294 msgid "losine"
295 msgstr "Iosine"
296
297 #: ../cutscenes/credits.txt:76
298 msgid "Marc Tormo i Bochaca"
299 msgstr ""
300
301 #: ../cutscenes/credits.txt:77
302 msgid "Michael Papageorgiou"
303 msgstr "Michael Papageorgiou"
304
305 #: ../cutscenes/credits.txt:78
306 msgid "Mikhail Karalevich"
307 msgstr "Mikhail Karalevich"
308
309 #: ../cutscenes/credits.txt:79
310 msgid "Miro Jánošík"
311 msgstr "Miro Jánošík"
312
313 #: ../cutscenes/credits.txt:80
314 msgid "Mykola Franchuk"
315 msgstr ""
316
317 #: ../cutscenes/credits.txt:81
318 msgid "MOB2"
319 msgstr ""
320
321 #: ../cutscenes/credits.txt:82
322 msgid "Morgan Strauss"
323 msgstr "Morgan Strauss"
324
325 #: ../cutscenes/credits.txt:83
326 msgid "Nea Retrogamer"
327 msgstr ""
328
329 #: ../cutscenes/credits.txt:84
330 msgid "Nguyễn Gia Phong"
331 msgstr ""
332
333 #: ../cutscenes/credits.txt:85
334 msgid "Nikita Vanku"
335 msgstr "Nikita Vanku"
336
337 #: ../cutscenes/credits.txt:86
338 msgid "Paul Wortmann"
339 msgstr "Paul Wortmann"
340
341 #: ../cutscenes/credits.txt:87
342 msgid "Pawel Puszczynski"
343 msgstr "Pawel Puszczynski"
344
345 #: ../cutscenes/credits.txt:88
346 msgid "Quentin Stievenart"
347 msgstr "Quentin Stievenart"
348
349 #: ../cutscenes/credits.txt:89
350 msgid "Rui"
351 msgstr ""
352
353 #: ../cutscenes/credits.txt:90
354 msgid "Sergey Basalaev"
355 msgstr "Sergey Basalaev"
356
357 #: ../cutscenes/credits.txt:91
358 msgid "Sergiy Borodych"
359 msgstr ""
360
361 #: ../cutscenes/credits.txt:93
362 msgid "Stefano Peris"
363 msgstr "Stefano Peris"
364
365 #: ../cutscenes/credits.txt:94
366 msgid "sujiniku"
367 msgstr "sujiniku"
368
369 #: ../cutscenes/credits.txt:95
370 msgid "Thomas Glamsch"
371 msgstr "Thomas Glamsch"
372
373 #: ../cutscenes/credits.txt:96
374 msgid "Timo Sievänen"
375 msgstr "Timo Sievänen"
376
377 #: ../cutscenes/credits.txt:97
378 msgid "Vicente Monteiro"
379 msgstr ""
380
381 #: ../cutscenes/credits.txt:98
382 msgid "Wuzzy2"
383 msgstr "Wuzzy2"
384
385 #: ../cutscenes/credits.txt:99
386 msgid "Yannis Anthymidis"
387 msgstr "Yannis Anthymidis"
388
389 #: ../cutscenes/credits.txt:100
390 msgid "Zmicer Turok"
391 msgstr ""
392
393 #: ../cutscenes/credits.txt:103
105 #: ../cutscenes/credits.txt:108
394106 msgid "Distributors"
395107 msgstr "Διανομείς"
396108
397 #: ../cutscenes/credits.txt:105
398 msgid "Ablu"
399 msgstr "Ablu"
400
401 #: ../cutscenes/credits.txt:106
402 msgid "Feillyne"
403 msgstr "Feillyne"
404
405 #: ../cutscenes/credits.txt:107
406 msgid "Jan-Hendrik Peters"
407 msgstr "Jan-Hendrik Peters"
408
409 #: ../cutscenes/credits.txt:109
410 msgid "miffe"
411 msgstr "miffe"
412
413 #: ../cutscenes/credits.txt:112
109 #: ../cutscenes/credits.txt:117
414110 msgid "Special Thanks"
415111 msgstr ""
416112
417 #: ../cutscenes/credits.txt:116
113 #: ../cutscenes/credits.txt:121
418114 msgid "For giving constant feedback and testing:"
419115 msgstr ""
420116
421 #: ../cutscenes/credits.txt:117
422 msgid "Bart Kelsey"
423 msgstr "Bart Kelsey"
424
425 #: ../cutscenes/credits.txt:118
117 #: ../cutscenes/credits.txt:123
426118 msgid "The community at OpenGameArt"
427119 msgstr ""
428120
429 #: ../cutscenes/credits.txt:122
121 #: ../cutscenes/credits.txt:127
430122 msgid "For Tiled and the Flare map exporter:"
431123 msgstr ""
432
433 #: ../cutscenes/credits.txt:123
434 msgid "Thorbjørn Lindeijer"
435 msgstr "Thorbjørn Lindeijer"
436
437 #: ../cutscenes/credits.txt:125
438 msgid "Ranie Jade Ramiso"
439 msgstr "Ranie Jade Ramiso"
22 #
33 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
44 # Translators:
5 # Eric R, 2018
65 # Diego J. Romero López <diegojromerolopez@gmail.com>, 2018
76 #
87 msgid ""
98 msgstr ""
109 "Project-Id-Version: PACKAGE VERSION\n"
1110 "Report-Msgid-Bugs-To: \n"
12 "POT-Creation-Date: 2018-11-17 21:50+\n"
11 "POT-Creation-Date: 2019-07-29 09:34+\n"
1312 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1413 "Last-Translator: Diego J. Romero López <diegojromerolopez@gmail.com>, 2018\n"
1514 "Language-Team: Spanish (https://www.transifex.com/flareorg/teams/84925/es/)\n"
9190 msgid "Lead Programmers"
9291 msgstr "Programadores principales"
9392
94 #: ../cutscenes/credits.txt:12
95 msgid "Clint Bellanger"
96 msgstr "Clint Bellanger"
97
98 #: ../cutscenes/credits.txt:13
99 msgid "Henrik Andersson"
100 msgstr "Henrik Andersson"
101
102 #: ../cutscenes/credits.txt:14
103 msgid "Igor Paliychuk"
104 msgstr "Igor Paliychuk"
105
106 #: ../cutscenes/credits.txt:15
107 msgid "Justin Jacobs"
108 msgstr "Justin Jacobs"
109
110 #: ../cutscenes/credits.txt:16
111 msgid "Stefan Beller"
112 msgstr "Stefan Beller"
113
114 #: ../cutscenes/credits.txt:17
115 msgid "Thane Brimhall"
116 msgstr "Thane Brimhall"
117
11893 #: ../cutscenes/credits.txt:20
11994 msgid "Programmers"
12095 msgstr "Programadores"
121
122 #: ../cutscenes/credits.txt:22
123 msgid "Andrew Engelbrecht"
124 msgstr "Andrew Engelbrecht"
125
126 #: ../cutscenes/credits.txt:23
127 msgid "Anton Golov"
128 msgstr "Anton Golov"
129
130 #: ../cutscenes/credits.txt:24
131 msgid "Artur Rojek"
132 msgstr "Artur Rojek"
133
134 #: ../cutscenes/credits.txt:25
135 msgid "blazindragon"
136 msgstr "blazindragon"
137
138 #: ../cutscenes/credits.txt:26
139 msgid "Bonbadil"
140 msgstr "Bonbadil"
141
142 #: ../cutscenes/credits.txt:27
143 msgid "Chris Oelmueller"
144 msgstr "Chris Oelmueller"
145
146 #: ../cutscenes/credits.txt:28
147 msgid "David Bariod"
148 msgstr "David Bariod"
149
150 #: ../cutscenes/credits.txt:29
151 msgid "Daniel Santos"
152 msgstr "Daniel Santos"
153
154 #: ../cutscenes/credits.txt:30
155 msgid "Gallaecio"
156 msgstr "Gallaecio"
157
158 #: ../cutscenes/credits.txt:31
159 msgid "Joseph Bleu"
160 msgstr "Joseph Bleu"
161
162 #: ../cutscenes/credits.txt:32
163 msgid "Juan PabloTamayo"
164 msgstr "Juan PabloTamayo"
165
166 #: ../cutscenes/credits.txt:33
167 msgid "Kitano"
168 msgstr "Kitano"
169
170 #: ../cutscenes/credits.txt:34
171 msgid "Kyle Belanger"
172 msgstr "Kyle Belanger"
173
174 #: ../cutscenes/credits.txt:35
175 msgid "LongerDev"
176 msgstr "LongerDev"
177
178 #: ../cutscenes/credits.txt:36
179 msgid "Manuel A. Fernandez Montecelo"
180 msgstr "Manuel A. Fernandez Montecelo"
181
182 #: ../cutscenes/credits.txt:37
183 msgid "Matthew Krohn"
184 msgstr "Matthew Krohn"
185
186 #: ../cutscenes/credits.txt:38
187 msgid "Nojan"
188 msgstr "Nojan"
189
190 #: ../cutscenes/credits.txt:39
191 msgid "Pavel Kirpichyov"
192 msgstr "Pavel Kirpichyov"
193
194 #: ../cutscenes/credits.txt:40
195 msgid "runtime-x86"
196 msgstr "runtime-x86"
197
198 #: ../cutscenes/credits.txt:41
199 msgid "Ryan Dansie"
200 msgstr "Ryan Dansie"
20196
20297 #: ../cutscenes/credits.txt:44
20398 msgid "Default Art"
207102 msgid "Translators"
208103 msgstr "Traductores"
209104
210 #: ../cutscenes/credits.txt:51
211 msgid "Ademaro"
212 msgstr "Ademaro"
213
214 #: ../cutscenes/credits.txt:52
215 msgid "Adrian Chaves Fernandez"
216 msgstr "Adrian Chaves Fernandez"
217
218 #: ../cutscenes/credits.txt:53
219 msgid "Andrea Ranaldi"
220 msgstr "Andrea Ranaldi"
221
222 #: ../cutscenes/credits.txt:54
223 msgid "Andreas Berheim Brudin"
224 msgstr "Andreas Berheim Brudin"
225
226 #: ../cutscenes/credits.txt:55
227 msgid "Bas Doodeman"
228 msgstr "Bas Doodeman"
229
230 #: ../cutscenes/credits.txt:57
231 msgid "Carlos Sanchez"
232 msgstr "Carlos Sanchez"
233
234 #: ../cutscenes/credits.txt:59
235 msgid "Christoph J. Thompson"
236 msgstr "Christoph J. Thompson"
237
238 #: ../cutscenes/credits.txt:60
239 msgid "Denis Lysenko"
240 msgstr "Denis Lysenko"
241
242 #: ../cutscenes/credits.txt:61
243 msgid "Diego J. Romero López"
244 msgstr "Diego J. Romero López"
245
246 #: ../cutscenes/credits.txt:62
247 msgid "dumaosen"
248 msgstr "dumaosen"
249
250 #: ../cutscenes/credits.txt:63
251 msgid "Emil"
252 msgstr "Emil"
253
254 #: ../cutscenes/credits.txt:64
255 msgid "Eric R"
256 msgstr "Eric R"
257
258 #: ../cutscenes/credits.txt:65
259 msgid "Evgen Pavlov"
260 msgstr "Evgen Pavlov"
261
262 #: ../cutscenes/credits.txt:66
263 msgid "Fabio Loli"
264 msgstr "Fabio Loli"
265
266 #: ../cutscenes/credits.txt:67
267 msgid "Gianfranco Del Borrello"
268 msgstr "Gianfranco Del Borrello"
269
270 #: ../cutscenes/credits.txt:68
271 msgid "Giovanni Dalla Torre"
272 msgstr "Giovanni Dalla Torre"
273
274 #: ../cutscenes/credits.txt:69
275 msgid "GunChleoc"
276 msgstr "GunChleoc"
277
278 #: ../cutscenes/credits.txt:70
279 msgid "Hans Joachim Desserud"
280 msgstr "Hans Joachim Desserud"
281
282 #: ../cutscenes/credits.txt:71
283 msgid "hark34"
284 msgstr "hark34"
285
286 #: ../cutscenes/credits.txt:73
287 msgid "Janet Hunt"
288 msgstr "Janet Hunt"
289
290 #: ../cutscenes/credits.txt:74
291 msgid "Juan Pablo Tamayo"
292 msgstr "Juan Pablo Tamayo"
293
294 #: ../cutscenes/credits.txt:75
295 msgid "losine"
296 msgstr "losine"
297
298 #: ../cutscenes/credits.txt:76
299 msgid "Marc Tormo i Bochaca"
300 msgstr "Marc Tormo i Bochaca"
301
302 #: ../cutscenes/credits.txt:77
303 msgid "Michael Papageorgiou"
304 msgstr "Michael Papageorgiou"
305
306 #: ../cutscenes/credits.txt:78
307 msgid "Mikhail Karalevich"
308 msgstr "Mikhail Karalevich"
309
310 #: ../cutscenes/credits.txt:79
311 msgid "Miro Jánošík"
312 msgstr "Miro Jánošík"
313
314 #: ../cutscenes/credits.txt:80
315 msgid "Mykola Franchuk"
316 msgstr "Mykola Franchuk"
317
318 #: ../cutscenes/credits.txt:81
319 msgid "MOB2"
320 msgstr "MOB2"
321
322 #: ../cutscenes/credits.txt:82
323 msgid "Morgan Strauss"
324 msgstr "Morgan Strauss"
325
326 #: ../cutscenes/credits.txt:83
327 msgid "Nea Retrogamer"
328 msgstr "Nea Retrogamer"
329
330 #: ../cutscenes/credits.txt:84
331 msgid "Nguyễn Gia Phong"
332 msgstr "Nguyễn Gia Phong"
333
334 #: ../cutscenes/credits.txt:85
335 msgid "Nikita Vanku"
336 msgstr "Nikita Vanku"
337
338 #: ../cutscenes/credits.txt:86
339 msgid "Paul Wortmann"
340 msgstr "Paul Wortmann"
341
342 #: ../cutscenes/credits.txt:87
343 msgid "Pawel Puszczynski"
344 msgstr "Pawel Puszczynski"
345
346 #: ../cutscenes/credits.txt:88
347 msgid "Quentin Stievenart"
348 msgstr "Quentin Stievenart"
349
350 #: ../cutscenes/credits.txt:89
351 msgid "Rui"
352 msgstr "Rui"
353
354 #: ../cutscenes/credits.txt:90
355 msgid "Sergey Basalaev"
356 msgstr "Sergey Basalaev"
357
358 #: ../cutscenes/credits.txt:91
359 msgid "Sergiy Borodych"
360 msgstr "Sergiy Borodych"
361
362 #: ../cutscenes/credits.txt:93
363 msgid "Stefano Peris"
364 msgstr "Stefano Peris"
365
366 #: ../cutscenes/credits.txt:94
367 msgid "sujiniku"
368 msgstr "sujiniku"
369
370 #: ../cutscenes/credits.txt:95
371 msgid "Thomas Glamsch"
372 msgstr "Thomas Glamsch"
373
374 #: ../cutscenes/credits.txt:96
375 msgid "Timo Sievänen"
376 msgstr "Timo Sievänen"
377
378 #: ../cutscenes/credits.txt:97
379 msgid "Vicente Monteiro"
380 msgstr "Vicente Monteiro"
381
382 #: ../cutscenes/credits.txt:98
383 msgid "Wuzzy2"
384 msgstr "Wuzzy2"
385
386 #: ../cutscenes/credits.txt:99
387 msgid "Yannis Anthymidis"
388 msgstr "Yannis Anthymidis"
389
390 #: ../cutscenes/credits.txt:100
391 msgid "Zmicer Turok"
392 msgstr "Zmicer Turok"
393
394 #: ../cutscenes/credits.txt:103
105 #: ../cutscenes/credits.txt:108
395106 msgid "Distributors"
396107 msgstr "Distribuidores"
397108
398 #: ../cutscenes/credits.txt:105
399 msgid "Ablu"
400 msgstr "Ablu"
401
402 #: ../cutscenes/credits.txt:106
403 msgid "Feillyne"
404 msgstr "Feillyne"
405
406 #: ../cutscenes/credits.txt:107
407 msgid "Jan-Hendrik Peters"
408 msgstr "Jan-Hendrik Peters"
409
410 #: ../cutscenes/credits.txt:109
411 msgid "miffe"
412 msgstr "miffe"
413
414 #: ../cutscenes/credits.txt:112
109 #: ../cutscenes/credits.txt:117
415110 msgid "Special Thanks"
416111 msgstr "Agradecimientos especiales"
417112
418 #: ../cutscenes/credits.txt:116
113 #: ../cutscenes/credits.txt:121
419114 msgid "For giving constant feedback and testing:"
420115 msgstr "Por su retroalimentación y pruebas constantes"
421116
422 #: ../cutscenes/credits.txt:117
423 msgid "Bart Kelsey"
424 msgstr "Bart Kelsey"
425
426 #: ../cutscenes/credits.txt:118
117 #: ../cutscenes/credits.txt:123
427118 msgid "The community at OpenGameArt"
428119 msgstr "La comunidad de OpenGameArt"
429120
430 #: ../cutscenes/credits.txt:122
121 #: ../cutscenes/credits.txt:127
431122 msgid "For Tiled and the Flare map exporter:"
432123 msgstr "Por Tiled y el exportador de mapas de Flare:"
433
434 #: ../cutscenes/credits.txt:123
435 msgid "Thorbjørn Lindeijer"
436 msgstr "Thorbjørn Lindeijer"
437
438 #: ../cutscenes/credits.txt:125
439 msgid "Ranie Jade Ramiso"
440 msgstr "Ranie Jade Ramiso"
0 # Copyright (C) 2011 Clint Bellanger
1 # This file is distributed under the same license as the FLARE package.
2 #
3 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4 msgid ""
5 msgstr ""
6 "Project-Id-Version: PACKAGE VERSION\n"
7 "Report-Msgid-Bugs-To: \n"
8 "POT-Creation-Date: 2019-07-29 09:34+\n"
9 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
10 "Language-Team: Basque (https://www.transifex.com/flareorg/teams/84925/eu/)\n"
11 "MIME-Version: 1.0\n"
12 "Content-Type: text/plain; charset=UTF-8\n"
13 "Content-Transfer-Encoding: 8bit\n"
14 "Language: eu\n"
15 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
16
17 #: ../engine/primary_stats.txt:3
18 msgid "Physical"
19 msgstr ""
20
21 #: ../engine/primary_stats.txt:7
22 msgid "Mental"
23 msgstr ""
24
25 #: ../engine/primary_stats.txt:11
26 msgid "Offense"
27 msgstr ""
28
29 #: ../engine/primary_stats.txt:15
30 msgid "Defense"
31 msgstr ""
32
33 #: ../engine/damage_types.txt:3
34 msgid "Melee Damage"
35 msgstr ""
36
37 #: ../engine/damage_types.txt:4
38 msgid "Increases the damage done with swords and other melee weapons."
39 msgstr ""
40
41 #: ../engine/damage_types.txt:5
42 msgid "Melee Damage Min"
43 msgstr ""
44
45 #: ../engine/damage_types.txt:6
46 msgid "Melee Damage Max"
47 msgstr ""
48
49 #: ../engine/damage_types.txt:12
50 msgid "Ranged Damage"
51 msgstr ""
52
53 #: ../engine/damage_types.txt:13
54 msgid "Increases the damage done with bows and other ranged weapons."
55 msgstr ""
56
57 #: ../engine/damage_types.txt:14
58 msgid "Ranged Damage Min"
59 msgstr ""
60
61 #: ../engine/damage_types.txt:15
62 msgid "Ranged Damage Max"
63 msgstr ""
64
65 #: ../engine/damage_types.txt:21
66 msgid "Mental Damage"
67 msgstr ""
68
69 #: ../engine/damage_types.txt:22
70 msgid "Increases the damage done with staves and other mental weapons."
71 msgstr ""
72
73 #: ../engine/damage_types.txt:23
74 msgid "Mental Damage Min"
75 msgstr ""
76
77 #: ../engine/damage_types.txt:24
78 msgid "Mental Damage Max"
79 msgstr ""
80
81 #: ../cutscenes/credits.txt:7
82 msgid "Flare Engine Credits"
83 msgstr ""
84
85 #: ../cutscenes/credits.txt:10
86 msgid "Lead Programmers"
87 msgstr ""
88
89 #: ../cutscenes/credits.txt:20
90 msgid "Programmers"
91 msgstr ""
92
93 #: ../cutscenes/credits.txt:44
94 msgid "Default Art"
95 msgstr ""
96
97 #: ../cutscenes/credits.txt:49
98 msgid "Translators"
99 msgstr ""
100
101 #: ../cutscenes/credits.txt:108
102 msgid "Distributors"
103 msgstr ""
104
105 #: ../cutscenes/credits.txt:117
106 msgid "Special Thanks"
107 msgstr ""
108
109 #: ../cutscenes/credits.txt:121
110 msgid "For giving constant feedback and testing:"
111 msgstr ""
112
113 #: ../cutscenes/credits.txt:123
114 msgid "The community at OpenGameArt"
115 msgstr ""
116
117 #: ../cutscenes/credits.txt:127
118 msgid "For Tiled and the Flare map exporter:"
119 msgstr ""
55 msgstr ""
66 "Project-Id-Version: PACKAGE VERSION\n"
77 "Report-Msgid-Bugs-To: \n"
8 "POT-Creation-Date: 2018-11-13 17:21+\n"
8 "POT-Creation-Date: 2019-07-29 09:34+\n"
99 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1010 "Language-Team: Finnish (https://www.transifex.com/flareorg/teams/84925/fi/)\n"
1111 "MIME-Version: 1.0\n"
8686 msgid "Lead Programmers"
8787 msgstr ""
8888
89 #: ../cutscenes/credits.txt:12
90 msgid "Clint Bellanger"
91 msgstr ""
92
93 #: ../cutscenes/credits.txt:13
94 msgid "Henrik Andersson"
95 msgstr ""
96
97 #: ../cutscenes/credits.txt:14
98 msgid "Igor Paliychuk"
99 msgstr ""
100
101 #: ../cutscenes/credits.txt:15
102 msgid "Justin Jacobs"
103 msgstr ""
104
105 #: ../cutscenes/credits.txt:16
106 msgid "Stefan Beller"
107 msgstr ""
108
109 #: ../cutscenes/credits.txt:17
110 msgid "Thane Brimhall"
111 msgstr ""
112
11389 #: ../cutscenes/credits.txt:20
11490 msgid "Programmers"
115 msgstr ""
116
117 #: ../cutscenes/credits.txt:22
118 msgid "Andrew Engelbrecht"
119 msgstr ""
120
121 #: ../cutscenes/credits.txt:23
122 msgid "Anton Golov"
123 msgstr ""
124
125 #: ../cutscenes/credits.txt:24
126 msgid "Artur Rojek"
127 msgstr ""
128
129 #: ../cutscenes/credits.txt:25
130 msgid "blazindragon"
131 msgstr ""
132
133 #: ../cutscenes/credits.txt:26
134 msgid "Bonbadil"
135 msgstr ""
136
137 #: ../cutscenes/credits.txt:27
138 msgid "Chris Oelmueller"
139 msgstr ""
140
141 #: ../cutscenes/credits.txt:28
142 msgid "David Bariod"
143 msgstr ""
144
145 #: ../cutscenes/credits.txt:29
146 msgid "Daniel Santos"
147 msgstr ""
148
149 #: ../cutscenes/credits.txt:30
150 msgid "Gallaecio"
151 msgstr ""
152
153 #: ../cutscenes/credits.txt:31
154 msgid "Joseph Bleu"
155 msgstr ""
156
157 #: ../cutscenes/credits.txt:32
158 msgid "Juan PabloTamayo"
159 msgstr ""
160
161 #: ../cutscenes/credits.txt:33
162 msgid "Kitano"
163 msgstr ""
164
165 #: ../cutscenes/credits.txt:34
166 msgid "Kyle Belanger"
167 msgstr ""
168
169 #: ../cutscenes/credits.txt:35
170 msgid "LongerDev"
171 msgstr ""
172
173 #: ../cutscenes/credits.txt:36
174 msgid "Manuel A. Fernandez Montecelo"
175 msgstr ""
176
177 #: ../cutscenes/credits.txt:37
178 msgid "Matthew Krohn"
179 msgstr ""
180
181 #: ../cutscenes/credits.txt:38
182 msgid "Nojan"
183 msgstr ""
184
185 #: ../cutscenes/credits.txt:39
186 msgid "Pavel Kirpichyov"
187 msgstr ""
188
189 #: ../cutscenes/credits.txt:40
190 msgid "runtime-x86"
191 msgstr ""
192
193 #: ../cutscenes/credits.txt:41
194 msgid "Ryan Dansie"
19591 msgstr ""
19692
19793 #: ../cutscenes/credits.txt:44
20298 msgid "Translators"
20399 msgstr ""
204100
205 #: ../cutscenes/credits.txt:51
206 msgid "Ademaro"
207 msgstr ""
208
209 #: ../cutscenes/credits.txt:52
210 msgid "Adrian Chaves Fernandez"
211 msgstr ""
212
213 #: ../cutscenes/credits.txt:53
214 msgid "Andrea Ranaldi"
215 msgstr ""
216
217 #: ../cutscenes/credits.txt:54
218 msgid "Andreas Berheim Brudin"
219 msgstr ""
220
221 #: ../cutscenes/credits.txt:55
222 msgid "Bas Doodeman"
223 msgstr ""
224
225 #: ../cutscenes/credits.txt:57
226 msgid "Carlos Sanchez"
227 msgstr ""
228
229 #: ../cutscenes/credits.txt:59
230 msgid "Christoph J. Thompson"
231 msgstr ""
232
233 #: ../cutscenes/credits.txt:60
234 msgid "Denis Lysenko"
235 msgstr ""
236
237 #: ../cutscenes/credits.txt:61
238 msgid "Diego J. Romero López"
239 msgstr ""
240
241 #: ../cutscenes/credits.txt:62
242 msgid "dumaosen"
243 msgstr ""
244
245 #: ../cutscenes/credits.txt:63
246 msgid "Emil"
247 msgstr ""
248
249 #: ../cutscenes/credits.txt:64
250 msgid "Eric R"
251 msgstr ""
252
253 #: ../cutscenes/credits.txt:65
254 msgid "Evgen Pavlov"
255 msgstr ""
256
257 #: ../cutscenes/credits.txt:66
258 msgid "Fabio Loli"
259 msgstr ""
260
261 #: ../cutscenes/credits.txt:67
262 msgid "Gianfranco Del Borrello"
263 msgstr ""
264
265 #: ../cutscenes/credits.txt:68
266 msgid "Giovanni Dalla Torre"
267 msgstr ""
268
269 #: ../cutscenes/credits.txt:69
270 msgid "GunChleoc"
271 msgstr ""
272
273 #: ../cutscenes/credits.txt:70
274 msgid "Hans Joachim Desserud"
275 msgstr ""
276
277 #: ../cutscenes/credits.txt:71
278 msgid "hark34"
279 msgstr ""
280
281 #: ../cutscenes/credits.txt:73
282 msgid "Janet Hunt"
283 msgstr ""
284
285 #: ../cutscenes/credits.txt:74
286 msgid "Juan Pablo Tamayo"
287 msgstr ""
288
289 #: ../cutscenes/credits.txt:75
290 msgid "losine"
291 msgstr ""
292
293 #: ../cutscenes/credits.txt:76
294 msgid "Marc Tormo i Bochaca"
295 msgstr ""
296
297 #: ../cutscenes/credits.txt:77
298 msgid "Michael Papageorgiou"
299 msgstr ""
300
301 #: ../cutscenes/credits.txt:78
302 msgid "Mikhail Karalevich"
303 msgstr ""
304
305 #: ../cutscenes/credits.txt:79
306 msgid "Miro Jánošík"
307 msgstr ""
308
309 #: ../cutscenes/credits.txt:80
310 msgid "Mykola Franchuk"
311 msgstr ""
312
313 #: ../cutscenes/credits.txt:81
314 msgid "MOB2"
315 msgstr ""
316
317 #: ../cutscenes/credits.txt:82
318 msgid "Morgan Strauss"
319 msgstr ""
320
321 #: ../cutscenes/credits.txt:83
322 msgid "Nea Retrogamer"
323 msgstr ""
324
325 #: ../cutscenes/credits.txt:84
326 msgid "Nguyễn Gia Phong"
327 msgstr ""
328
329 #: ../cutscenes/credits.txt:85
330 msgid "Nikita Vanku"
331 msgstr ""
332
333 #: ../cutscenes/credits.txt:86
334 msgid "Paul Wortmann"
335 msgstr ""
336
337 #: ../cutscenes/credits.txt:87
338 msgid "Pawel Puszczynski"
339 msgstr ""
340
341 #: ../cutscenes/credits.txt:88
342 msgid "Quentin Stievenart"
343 msgstr ""
344
345 #: ../cutscenes/credits.txt:89
346 msgid "Rui"
347 msgstr ""
348
349 #: ../cutscenes/credits.txt:90
350 msgid "Sergey Basalaev"
351 msgstr ""
352
353 #: ../cutscenes/credits.txt:91
354 msgid "Sergiy Borodych"
355 msgstr ""
356
357 #: ../cutscenes/credits.txt:93
358 msgid "Stefano Peris"
359 msgstr ""
360
361 #: ../cutscenes/credits.txt:94
362 msgid "sujiniku"
363 msgstr ""
364
365 #: ../cutscenes/credits.txt:95
366 msgid "Thomas Glamsch"
367 msgstr ""
368
369 #: ../cutscenes/credits.txt:96
370 msgid "Timo Sievänen"
371 msgstr ""
372
373 #: ../cutscenes/credits.txt:97
374 msgid "Vicente Monteiro"
375 msgstr ""
376
377 #: ../cutscenes/credits.txt:98
378 msgid "Wuzzy2"
379 msgstr ""
380
381 #: ../cutscenes/credits.txt:99
382 msgid "Yannis Anthymidis"
383 msgstr ""
384
385 #: ../cutscenes/credits.txt:100
386 msgid "Zmicer Turok"
387 msgstr ""
388
389 #: ../cutscenes/credits.txt:103
101 #: ../cutscenes/credits.txt:108
390102 msgid "Distributors"
391103 msgstr ""
392104
393 #: ../cutscenes/credits.txt:105
394 msgid "Ablu"
395 msgstr ""
396
397 #: ../cutscenes/credits.txt:106
398 msgid "Feillyne"
399 msgstr ""
400
401 #: ../cutscenes/credits.txt:107
402 msgid "Jan-Hendrik Peters"
403 msgstr ""
404
405 #: ../cutscenes/credits.txt:109
406 msgid "miffe"
407 msgstr ""
408
409 #: ../cutscenes/credits.txt:112
105 #: ../cutscenes/credits.txt:117
410106 msgid "Special Thanks"
411107 msgstr ""
412108
413 #: ../cutscenes/credits.txt:116
109 #: ../cutscenes/credits.txt:121
414110 msgid "For giving constant feedback and testing:"
415111 msgstr ""
416112
417 #: ../cutscenes/credits.txt:117
418 msgid "Bart Kelsey"
419 msgstr ""
420
421 #: ../cutscenes/credits.txt:118
113 #: ../cutscenes/credits.txt:123
422114 msgid "The community at OpenGameArt"
423115 msgstr ""
424116
425 #: ../cutscenes/credits.txt:122
117 #: ../cutscenes/credits.txt:127
426118 msgid "For Tiled and the Flare map exporter:"
427119 msgstr ""
428
429 #: ../cutscenes/credits.txt:123
430 msgid "Thorbjørn Lindeijer"
431 msgstr ""
432
433 #: ../cutscenes/credits.txt:125
434 msgid "Ranie Jade Ramiso"
435 msgstr ""
33 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
44 # Translators:
55 # Justin Jacobs <jajdorkster@gmail.com>, 2018
6 # syl_, 2019
7 # leø <leoboudet@orne-libre.fr>, 2020
68 #
79 msgid ""
810 msgstr ""
911 "Project-Id-Version: PACKAGE VERSION\n"
1012 "Report-Msgid-Bugs-To: \n"
11 "POT-Creation-Date: 2018-11-13 17:21+\n"
13 "POT-Creation-Date: 2020-05-20 16:39+\n"
1214 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
13 "Last-Translator: Justin Jacobs <jajdorkster@gmail.com>, 2018\n"
15 "Last-Translator: leø <leoboudet@orne-libre.fr>, 2020\n"
1416 "Language-Team: French (https://www.transifex.com/flareorg/teams/84925/fr/)\n"
1517 "MIME-Version: 1.0\n"
1618 "Content-Type: text/plain; charset=UTF-8\n"
2830
2931 #: ../engine/primary_stats.txt:11
3032 msgid "Offense"
31 msgstr "Offense"
33 msgstr "Attaque"
3234
3335 #: ../engine/primary_stats.txt:15
3436 msgid "Defense"
3638
3739 #: ../engine/damage_types.txt:3
3840 msgid "Melee Damage"
39 msgstr "Dégats de mélée"
41 msgstr "Dégâts de mêlée"
4042
4143 #: ../engine/damage_types.txt:4
4244 msgid "Increases the damage done with swords and other melee weapons."
43 msgstr "Augmente les dégats infligés avec des épées et autres armes de mélée"
45 msgstr "Augmente les dégâts infligés avec des épées et autres armes de mêlée"
4446
4547 #: ../engine/damage_types.txt:5
4648 msgid "Melee Damage Min"
47 msgstr "Dégats de mélée Min"
49 msgstr "Dégâts de mêlée min"
4850
4951 #: ../engine/damage_types.txt:6
5052 msgid "Melee Damage Max"
51 msgstr "Dégats de mélée max"
53 msgstr "Dégâts de mêlée max"
5254
5355 #: ../engine/damage_types.txt:12
5456 msgid "Ranged Damage"
55 msgstr "Dégats a distance"
57 msgstr "Dégâts à distance"
5658
5759 #: ../engine/damage_types.txt:13
5860 msgid "Increases the damage done with bows and other ranged weapons."
59 msgstr "Augmente les dégats infligés avec des arcs et autres armes a distance"
61 msgstr ""
62 "Augmente les dégâts infligés avec des arcs et autres armes à distance."
6063
6164 #: ../engine/damage_types.txt:14
6265 msgid "Ranged Damage Min"
63 msgstr "Dégats a distance min"
66 msgstr "Dégâts à distance min"
6467
6568 #: ../engine/damage_types.txt:15
6669 msgid "Ranged Damage Max"
67 msgstr "Dégats a distance max"
70 msgstr "Dégâts à distance max"
6871
6972 #: ../engine/damage_types.txt:21
7073 msgid "Mental Damage"
71 msgstr "Dégats mentaux"
74 msgstr "Dégâts mentaux"
7275
7376 #: ../engine/damage_types.txt:22
7477 msgid "Increases the damage done with staves and other mental weapons."
75 msgstr "Augmente les dégats infligés avec des batons et autres armes mentales"
78 msgstr "Augmente les dégâts infligés avec des bâtons et autres armes mentales"
7679
7780 #: ../engine/damage_types.txt:23
7881 msgid "Mental Damage Min"
79 msgstr "Dégats mentaux min"
82 msgstr "Dégâts mentaux min"
8083
8184 #: ../engine/damage_types.txt:24
8285 msgid "Mental Damage Max"
83 msgstr "Dégats mentaux max"
86 msgstr "Dégâts mentaux max"
8487
8588 #: ../cutscenes/credits.txt:7
8689 msgid "Flare Engine Credits"
87 msgstr "Credits du Moteur de Flare"
90 msgstr "Crédits du moteur de Flare"
8891
8992 #: ../cutscenes/credits.txt:10
9093 msgid "Lead Programmers"
91 msgstr "Programmeurs Principaux"
92
93 #: ../cutscenes/credits.txt:12
94 msgid "Clint Bellanger"
95 msgstr ""
96
97 #: ../cutscenes/credits.txt:13
98 msgid "Henrik Andersson"
99 msgstr ""
100
101 #: ../cutscenes/credits.txt:14
102 msgid "Igor Paliychuk"
103 msgstr ""
104
105 #: ../cutscenes/credits.txt:15
106 msgid "Justin Jacobs"
107 msgstr ""
108
109 #: ../cutscenes/credits.txt:16
110 msgid "Stefan Beller"
111 msgstr ""
112
113 #: ../cutscenes/credits.txt:17
114 msgid "Thane Brimhall"
115 msgstr ""
94 msgstr "Programmeurs principaux"
11695
11796 #: ../cutscenes/credits.txt:20
11897 msgid "Programmers"
11998 msgstr "Programmeurs"
12099
121 #: ../cutscenes/credits.txt:22
122 msgid "Andrew Engelbrecht"
123 msgstr ""
100 #: ../cutscenes/credits.txt:48
101 msgid "Default Art"
102 msgstr "Illustrateurs"
124103
125 #: ../cutscenes/credits.txt:23
126 msgid "Anton Golov"
127 msgstr ""
128
129 #: ../cutscenes/credits.txt:24
130 msgid "Artur Rojek"
131 msgstr ""
132
133 #: ../cutscenes/credits.txt:25
134 msgid "blazindragon"
135 msgstr ""
136
137 #: ../cutscenes/credits.txt:26
138 msgid "Bonbadil"
139 msgstr ""
140
141 #: ../cutscenes/credits.txt:27
142 msgid "Chris Oelmueller"
143 msgstr ""
144
145 #: ../cutscenes/credits.txt:28
146 msgid "David Bariod"
147 msgstr ""
148
149 #: ../cutscenes/credits.txt:29
150 msgid "Daniel Santos"
151 msgstr ""
152
153 #: ../cutscenes/credits.txt:30
154 msgid "Gallaecio"
155 msgstr ""
156
157 #: ../cutscenes/credits.txt:31
158 msgid "Joseph Bleu"
159 msgstr ""
160
161 #: ../cutscenes/credits.txt:32
162 msgid "Juan PabloTamayo"
163 msgstr ""
164
165 #: ../cutscenes/credits.txt:33
166 msgid "Kitano"
167 msgstr ""
168
169 #: ../cutscenes/credits.txt:34
170 msgid "Kyle Belanger"
171 msgstr ""
172
173 #: ../cutscenes/credits.txt:35
174 msgid "LongerDev"
175 msgstr ""
176
177 #: ../cutscenes/credits.txt:36
178 msgid "Manuel A. Fernandez Montecelo"
179 msgstr ""
180
181 #: ../cutscenes/credits.txt:37
182 msgid "Matthew Krohn"
183 msgstr ""
184
185 #: ../cutscenes/credits.txt:38
186 msgid "Nojan"
187 msgstr ""
188
189 #: ../cutscenes/credits.txt:39
190 msgid "Pavel Kirpichyov"
191 msgstr ""
192
193 #: ../cutscenes/credits.txt:40
194 msgid "runtime-x86"
195 msgstr ""
196
197 #: ../cutscenes/credits.txt:41
198 msgid "Ryan Dansie"
199 msgstr ""
200
201 #: ../cutscenes/credits.txt:44
202 msgid "Default Art"
203 msgstr ""
204
205 #: ../cutscenes/credits.txt:49
104 #: ../cutscenes/credits.txt:53
206105 msgid "Translators"
207106 msgstr "Traducteurs"
208107
209 #: ../cutscenes/credits.txt:51
210 msgid "Ademaro"
211 msgstr ""
212
213 #: ../cutscenes/credits.txt:52
214 msgid "Adrian Chaves Fernandez"
215 msgstr ""
216
217 #: ../cutscenes/credits.txt:53
218 msgid "Andrea Ranaldi"
219 msgstr ""
220
221 #: ../cutscenes/credits.txt:54
222 msgid "Andreas Berheim Brudin"
223 msgstr ""
224
225 #: ../cutscenes/credits.txt:55
226 msgid "Bas Doodeman"
227 msgstr ""
228
229 #: ../cutscenes/credits.txt:57
230 msgid "Carlos Sanchez"
231 msgstr ""
232
233 #: ../cutscenes/credits.txt:59
234 msgid "Christoph J. Thompson"
235 msgstr ""
236
237 #: ../cutscenes/credits.txt:60
238 msgid "Denis Lysenko"
239 msgstr ""
240
241 #: ../cutscenes/credits.txt:61
242 msgid "Diego J. Romero López"
243 msgstr ""
244
245 #: ../cutscenes/credits.txt:62
246 msgid "dumaosen"
247 msgstr ""
248
249 #: ../cutscenes/credits.txt:63
250 msgid "Emil"
251 msgstr ""
252
253 #: ../cutscenes/credits.txt:64
254 msgid "Eric R"
255 msgstr ""
256
257 #: ../cutscenes/credits.txt:65
258 msgid "Evgen Pavlov"
259 msgstr ""
260
261 #: ../cutscenes/credits.txt:66
262 msgid "Fabio Loli"
263 msgstr ""
264
265 #: ../cutscenes/credits.txt:67
266 msgid "Gianfranco Del Borrello"
267 msgstr ""
268
269 #: ../cutscenes/credits.txt:68
270 msgid "Giovanni Dalla Torre"
271 msgstr ""
272
273 #: ../cutscenes/credits.txt:69
274 msgid "GunChleoc"
275 msgstr ""
276
277 #: ../cutscenes/credits.txt:70
278 msgid "Hans Joachim Desserud"
279 msgstr ""
280
281 #: ../cutscenes/credits.txt:71
282 msgid "hark34"
283 msgstr ""
284
285 #: ../cutscenes/credits.txt:73
286 msgid "Janet Hunt"
287 msgstr ""
288
289 #: ../cutscenes/credits.txt:74
290 msgid "Juan Pablo Tamayo"
291 msgstr ""
292
293 #: ../cutscenes/credits.txt:75
294 msgid "losine"
295 msgstr ""
296
297 #: ../cutscenes/credits.txt:76
298 msgid "Marc Tormo i Bochaca"
299 msgstr ""
300
301 #: ../cutscenes/credits.txt:77
302 msgid "Michael Papageorgiou"
303 msgstr ""
304
305 #: ../cutscenes/credits.txt:78
306 msgid "Mikhail Karalevich"
307 msgstr ""
308
309 #: ../cutscenes/credits.txt:79
310 msgid "Miro Jánošík"
311 msgstr ""
312
313 #: ../cutscenes/credits.txt:80
314 msgid "Mykola Franchuk"
315 msgstr ""
316
317 #: ../cutscenes/credits.txt:81
318 msgid "MOB2"
319 msgstr ""
320
321 #: ../cutscenes/credits.txt:82
322 msgid "Morgan Strauss"
323 msgstr ""
324
325 #: ../cutscenes/credits.txt:83
326 msgid "Nea Retrogamer"
327 msgstr ""
328
329 #: ../cutscenes/credits.txt:84
330 msgid "Nguyễn Gia Phong"
331 msgstr ""
332
333 #: ../cutscenes/credits.txt:85
334 msgid "Nikita Vanku"
335 msgstr ""
336
337 #: ../cutscenes/credits.txt:86
338 msgid "Paul Wortmann"
339 msgstr ""
340
341 #: ../cutscenes/credits.txt:87
342 msgid "Pawel Puszczynski"
343 msgstr ""
344
345 #: ../cutscenes/credits.txt:88
346 msgid "Quentin Stievenart"
347 msgstr ""
348
349 #: ../cutscenes/credits.txt:89
350 msgid "Rui"
351 msgstr ""
352
353 #: ../cutscenes/credits.txt:90
354 msgid "Sergey Basalaev"
355 msgstr ""
356
357 #: ../cutscenes/credits.txt:91
358 msgid "Sergiy Borodych"
359 msgstr ""
360
361 #: ../cutscenes/credits.txt:93
362 msgid "Stefano Peris"
363 msgstr ""
364
365 #: ../cutscenes/credits.txt:94
366 msgid "sujiniku"
367 msgstr ""
368
369 #: ../cutscenes/credits.txt:95
370 msgid "Thomas Glamsch"
371 msgstr ""
372
373 #: ../cutscenes/credits.txt:96
374 msgid "Timo Sievänen"
375 msgstr ""
376
377 #: ../cutscenes/credits.txt:97
378 msgid "Vicente Monteiro"
379 msgstr ""
380
381 #: ../cutscenes/credits.txt:98
382 msgid "Wuzzy2"
383 msgstr ""
384
385 #: ../cutscenes/credits.txt:99
386 msgid "Yannis Anthymidis"
387 msgstr ""
388
389 #: ../cutscenes/credits.txt:100
390 msgid "Zmicer Turok"
391 msgstr ""
392
393 #: ../cutscenes/credits.txt:103
108 #: ../cutscenes/credits.txt:112
394109 msgid "Distributors"
395110 msgstr "Distributeurs"
396111
397 #: ../cutscenes/credits.txt:105
398 msgid "Ablu"
399 msgstr ""
112 #: ../cutscenes/credits.txt:121
113 msgid "Special Thanks"
114 msgstr "Remerciements spéciaux"
400115
401 #: ../cutscenes/credits.txt:106
402 msgid "Feillyne"
403 msgstr ""
404
405 #: ../cutscenes/credits.txt:107
406 msgid "Jan-Hendrik Peters"
407 msgstr ""
408
409 #: ../cutscenes/credits.txt:109
410 msgid "miffe"
411 msgstr ""
412
413 #: ../cutscenes/credits.txt:112
414 msgid "Special Thanks"
415 msgstr "Remerciements spécials"
416
417 #: ../cutscenes/credits.txt:116
116 #: ../cutscenes/credits.txt:125
418117 msgid "For giving constant feedback and testing:"
419118 msgstr "Pour constamment donner leur avis et tester :"
420119
421 #: ../cutscenes/credits.txt:117
422 msgid "Bart Kelsey"
423 msgstr ""
424
425 #: ../cutscenes/credits.txt:118
120 #: ../cutscenes/credits.txt:127
426121 msgid "The community at OpenGameArt"
427122 msgstr "La communauté OpenGameArt"
428123
429 #: ../cutscenes/credits.txt:122
124 #: ../cutscenes/credits.txt:131
430125 msgid "For Tiled and the Flare map exporter:"
431 msgstr "Pour Tiled et l'exporteur de map de Flare"
432
433 #: ../cutscenes/credits.txt:123
434 msgid "Thorbjørn Lindeijer"
435 msgstr ""
436
437 #: ../cutscenes/credits.txt:125
438 msgid "Ranie Jade Ramiso"
439 msgstr ""
126 msgstr "Pour Tiled et l'exportateur de carte de Flare :"
99 msgstr ""
1010 "Project-Id-Version: PACKAGE VERSION\n"
1111 "Report-Msgid-Bugs-To: \n"
12 "POT-Creation-Date: 2018-11-14 00:57+\n"
12 "POT-Creation-Date: 2019-07-29 09:34+\n"
1313 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1414 "Last-Translator: GunChleoc, 2018\n"
1515 "Language-Team: Gaelic, Scottish (https://www.transifex.com/flareorg/teams/84925/gd/)\n"
9191 msgid "Lead Programmers"
9292 msgstr "Prìomh luchd-prògramachaidh"
9393
94 #: ../cutscenes/credits.txt:12
95 msgid "Clint Bellanger"
96 msgstr "Clint Bellanger"
97
98 #: ../cutscenes/credits.txt:13
99 msgid "Henrik Andersson"
100 msgstr "Henrik Andersson"
101
102 #: ../cutscenes/credits.txt:14
103 msgid "Igor Paliychuk"
104 msgstr "Igor Paliychuk"
105
106 #: ../cutscenes/credits.txt:15
107 msgid "Justin Jacobs"
108 msgstr "Justin Jacobs"
109
110 #: ../cutscenes/credits.txt:16
111 msgid "Stefan Beller"
112 msgstr "Stefan Beller"
113
114 #: ../cutscenes/credits.txt:17
115 msgid "Thane Brimhall"
116 msgstr "Thane Brimhall"
117
11894 #: ../cutscenes/credits.txt:20
11995 msgid "Programmers"
12096 msgstr "Luchd-prògramachaidh"
121
122 #: ../cutscenes/credits.txt:22
123 msgid "Andrew Engelbrecht"
124 msgstr "Andrew Engelbrecht"
125
126 #: ../cutscenes/credits.txt:23
127 msgid "Anton Golov"
128 msgstr "Anton Golov"
129
130 #: ../cutscenes/credits.txt:24
131 msgid "Artur Rojek"
132 msgstr "Artur Rojek"
133
134 #: ../cutscenes/credits.txt:25
135 msgid "blazindragon"
136 msgstr "blazindragon"
137
138 #: ../cutscenes/credits.txt:26
139 msgid "Bonbadil"
140 msgstr "Bonbadil"
141
142 #: ../cutscenes/credits.txt:27
143 msgid "Chris Oelmueller"
144 msgstr "Chris Oelmueller"
145
146 #: ../cutscenes/credits.txt:28
147 msgid "David Bariod"
148 msgstr "David Bariod"
149
150 #: ../cutscenes/credits.txt:29
151 msgid "Daniel Santos"
152 msgstr "Daniel Santos"
153
154 #: ../cutscenes/credits.txt:30
155 msgid "Gallaecio"
156 msgstr "Gallaecio"
157
158 #: ../cutscenes/credits.txt:31
159 msgid "Joseph Bleu"
160 msgstr "Joseph Bleu"
161
162 #: ../cutscenes/credits.txt:32
163 msgid "Juan PabloTamayo"
164 msgstr "Juan PabloTamayo"
165
166 #: ../cutscenes/credits.txt:33
167 msgid "Kitano"
168 msgstr "Kitano"
169
170 #: ../cutscenes/credits.txt:34
171 msgid "Kyle Belanger"
172 msgstr "Kyle Belanger"
173
174 #: ../cutscenes/credits.txt:35
175 msgid "LongerDev"
176 msgstr "LongerDev"
177
178 #: ../cutscenes/credits.txt:36
179 msgid "Manuel A. Fernandez Montecelo"
180 msgstr "Manuel A. Fernandez Montecelo"
181
182 #: ../cutscenes/credits.txt:37
183 msgid "Matthew Krohn"
184 msgstr "Matthew Krohn"
185
186 #: ../cutscenes/credits.txt:38
187 msgid "Nojan"
188 msgstr "Nojan"
189
190 #: ../cutscenes/credits.txt:39
191 msgid "Pavel Kirpichyov"
192 msgstr "Pavel Kirpichyov"
193
194 #: ../cutscenes/credits.txt:40
195 msgid "runtime-x86"
196 msgstr "runtime-x86"
197
198 #: ../cutscenes/credits.txt:41
199 msgid "Ryan Dansie"
200 msgstr "Ryan Dansie"
20197
20298 #: ../cutscenes/credits.txt:44
20399 msgid "Default Art"
207103 msgid "Translators"
208104 msgstr "Eadar-theangadairean"
209105
210 #: ../cutscenes/credits.txt:51
211 msgid "Ademaro"
212 msgstr "Ademaro"
213
214 #: ../cutscenes/credits.txt:52
215 msgid "Adrian Chaves Fernandez"
216 msgstr "Adrian Chaves Fernandez"
217
218 #: ../cutscenes/credits.txt:53
219 msgid "Andrea Ranaldi"
220 msgstr "Andrea Ranaldi"
221
222 #: ../cutscenes/credits.txt:54
223 msgid "Andreas Berheim Brudin"
224 msgstr "Andreas Berheim Brudin"
225
226 #: ../cutscenes/credits.txt:55
227 msgid "Bas Doodeman"
228 msgstr "Bas Doodeman"
229
230 #: ../cutscenes/credits.txt:57
231 msgid "Carlos Sanchez"
232 msgstr "Carlos Sanchez"
233
234 #: ../cutscenes/credits.txt:59
235 msgid "Christoph J. Thompson"
236 msgstr "Christoph J. Thompson"
237
238 #: ../cutscenes/credits.txt:60
239 msgid "Denis Lysenko"
240 msgstr "Denis Lysenko"
241
242 #: ../cutscenes/credits.txt:61
243 msgid "Diego J. Romero López"
244 msgstr "Diego J. Romero López"
245
246 #: ../cutscenes/credits.txt:62
247 msgid "dumaosen"
248 msgstr "dumaosen"
249
250 #: ../cutscenes/credits.txt:63
251 msgid "Emil"
252 msgstr "Emil"
253
254 #: ../cutscenes/credits.txt:64
255 msgid "Eric R"
256 msgstr "Eric R"
257
258 #: ../cutscenes/credits.txt:65
259 msgid "Evgen Pavlov"
260 msgstr "Evgen Pavlov"
261
262 #: ../cutscenes/credits.txt:66
263 msgid "Fabio Loli"
264 msgstr "Fabio Loli"
265
266 #: ../cutscenes/credits.txt:67
267 msgid "Gianfranco Del Borrello"
268 msgstr "Gianfranco Del Borrello"
269
270 #: ../cutscenes/credits.txt:68
271 msgid "Giovanni Dalla Torre"
272 msgstr "Giovanni Dalla Torre"
273
274 #: ../cutscenes/credits.txt:69
275 msgid "GunChleoc"
276 msgstr "GunChleoc"
277
278 #: ../cutscenes/credits.txt:70
279 msgid "Hans Joachim Desserud"
280 msgstr "Hans Joachim Desserud"
281
282 #: ../cutscenes/credits.txt:71
283 msgid "hark34"
284 msgstr "hark34"
285
286 #: ../cutscenes/credits.txt:73
287 msgid "Janet Hunt"
288 msgstr "Janet Hunt"
289
290 #: ../cutscenes/credits.txt:74
291 msgid "Juan Pablo Tamayo"
292 msgstr "Juan Pablo Tamayo"
293
294 #: ../cutscenes/credits.txt:75
295 msgid "losine"
296 msgstr "losine"
297
298 #: ../cutscenes/credits.txt:76
299 msgid "Marc Tormo i Bochaca"
300 msgstr "Marc Tormo i Bochaca"
301
302 #: ../cutscenes/credits.txt:77
303 msgid "Michael Papageorgiou"
304 msgstr "Michael Papageorgiou"
305
306 #: ../cutscenes/credits.txt:78
307 msgid "Mikhail Karalevich"
308 msgstr "Mikhail Karalevich"
309
310 #: ../cutscenes/credits.txt:79
311 msgid "Miro Jánošík"
312 msgstr "Miro Jánošík"
313
314 #: ../cutscenes/credits.txt:80
315 msgid "Mykola Franchuk"
316 msgstr "Mykola Franchuk"
317
318 #: ../cutscenes/credits.txt:81
319 msgid "MOB2"
320 msgstr "MOB2"
321
322 #: ../cutscenes/credits.txt:82
323 msgid "Morgan Strauss"
324 msgstr "Morgan Strauss"
325
326 #: ../cutscenes/credits.txt:83
327 msgid "Nea Retrogamer"
328 msgstr "Nea Retrogamer"
329
330 #: ../cutscenes/credits.txt:84
331 msgid "Nguyễn Gia Phong"
332 msgstr "Nguyễn Gia Phong"
333
334 #: ../cutscenes/credits.txt:85
335 msgid "Nikita Vanku"
336 msgstr "Nikita Vanku"
337
338 #: ../cutscenes/credits.txt:86
339 msgid "Paul Wortmann"
340 msgstr "Paul Wortmann"
341
342 #: ../cutscenes/credits.txt:87
343 msgid "Pawel Puszczynski"
344 msgstr "Pawel Puszczynski"
345
346 #: ../cutscenes/credits.txt:88
347 msgid "Quentin Stievenart"
348 msgstr "Quentin Stievenart"
349
350 #: ../cutscenes/credits.txt:89
351 msgid "Rui"
352 msgstr "Rui"
353
354 #: ../cutscenes/credits.txt:90
355 msgid "Sergey Basalaev"
356 msgstr "Sergey Basalaev"
357
358 #: ../cutscenes/credits.txt:91
359 msgid "Sergiy Borodych"
360 msgstr "Sergiy Borodych"
361
362 #: ../cutscenes/credits.txt:93
363 msgid "Stefano Peris"
364 msgstr "Stefano Peris"
365
366 #: ../cutscenes/credits.txt:94
367 msgid "sujiniku"
368 msgstr "sujiniku"
369
370 #: ../cutscenes/credits.txt:95
371 msgid "Thomas Glamsch"
372 msgstr "Thomas Glamsch"
373
374 #: ../cutscenes/credits.txt:96
375 msgid "Timo Sievänen"
376 msgstr "Timo Sievänen"
377
378 #: ../cutscenes/credits.txt:97
379 msgid "Vicente Monteiro"
380 msgstr "Vicente Monteiro"
381
382 #: ../cutscenes/credits.txt:98
383 msgid "Wuzzy2"
384 msgstr "Wuzzy2"
385
386 #: ../cutscenes/credits.txt:99
387 msgid "Yannis Anthymidis"
388 msgstr "Yannis Anthymidis"
389
390 #: ../cutscenes/credits.txt:100
391 msgid "Zmicer Turok"
392 msgstr "Zmicer Turok"
393
394 #: ../cutscenes/credits.txt:103
106 #: ../cutscenes/credits.txt:108
395107 msgid "Distributors"
396108 msgstr "Luchd-sgaoilidh"
397109
398 #: ../cutscenes/credits.txt:105
399 msgid "Ablu"
400 msgstr "Ablu"
401
402 #: ../cutscenes/credits.txt:106
403 msgid "Feillyne"
404 msgstr "Feillyne"
405
406 #: ../cutscenes/credits.txt:107
407 msgid "Jan-Hendrik Peters"
408 msgstr "Jan-Hendrik Peters"
409
410 #: ../cutscenes/credits.txt:109
411 msgid "miffe"
412 msgstr "miffe"
413
414 #: ../cutscenes/credits.txt:112
110 #: ../cutscenes/credits.txt:117
415111 msgid "Special Thanks"
416112 msgstr "Taing shònraichte"
417113
418 #: ../cutscenes/credits.txt:116
114 #: ../cutscenes/credits.txt:121
419115 msgid "For giving constant feedback and testing:"
420116 msgstr "Airson torr bheachdan is deuchainneachaidh:"
421117
422 #: ../cutscenes/credits.txt:117
423 msgid "Bart Kelsey"
424 msgstr "Bart Kelsey"
425
426 #: ../cutscenes/credits.txt:118
118 #: ../cutscenes/credits.txt:123
427119 msgid "The community at OpenGameArt"
428120 msgstr "Coimhearsnachd OpenGameArt"
429121
430 #: ../cutscenes/credits.txt:122
122 #: ../cutscenes/credits.txt:127
431123 msgid "For Tiled and the Flare map exporter:"
432124 msgstr "Airson Tiled agus inneal às-phortaidh mhapaichean Flare:"
433
434 #: ../cutscenes/credits.txt:123
435 msgid "Thorbjørn Lindeijer"
436 msgstr "Thorbjørn Lindeijer"
437
438 #: ../cutscenes/credits.txt:125
439 msgid "Ranie Jade Ramiso"
440 msgstr "Ranie Jade Ramiso"
88 msgstr ""
99 "Project-Id-Version: PACKAGE VERSION\n"
1010 "Report-Msgid-Bugs-To: \n"
11 "POT-Creation-Date: 2018-11-13 17:21+\n"
11 "POT-Creation-Date: 2019-07-29 09:34+\n"
1212 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1313 "Last-Translator: Justin Jacobs <jajdorkster@gmail.com>, 2018\n"
1414 "Language-Team: Galician (https://www.transifex.com/flareorg/teams/84925/gl/)\n"
9090 msgid "Lead Programmers"
9191 msgstr ""
9292
93 #: ../cutscenes/credits.txt:12
94 msgid "Clint Bellanger"
95 msgstr ""
96
97 #: ../cutscenes/credits.txt:13
98 msgid "Henrik Andersson"
99 msgstr ""
100
101 #: ../cutscenes/credits.txt:14
102 msgid "Igor Paliychuk"
103 msgstr ""
104
105 #: ../cutscenes/credits.txt:15
106 msgid "Justin Jacobs"
107 msgstr ""
108
109 #: ../cutscenes/credits.txt:16
110 msgid "Stefan Beller"
111 msgstr ""
112
113 #: ../cutscenes/credits.txt:17
114 msgid "Thane Brimhall"
115 msgstr ""
116
11793 #: ../cutscenes/credits.txt:20
11894 msgid "Programmers"
119 msgstr ""
120
121 #: ../cutscenes/credits.txt:22
122 msgid "Andrew Engelbrecht"
123 msgstr ""
124
125 #: ../cutscenes/credits.txt:23
126 msgid "Anton Golov"
127 msgstr ""
128
129 #: ../cutscenes/credits.txt:24
130 msgid "Artur Rojek"
131 msgstr ""
132
133 #: ../cutscenes/credits.txt:25
134 msgid "blazindragon"
135 msgstr ""
136
137 #: ../cutscenes/credits.txt:26
138 msgid "Bonbadil"
139 msgstr ""
140
141 #: ../cutscenes/credits.txt:27
142 msgid "Chris Oelmueller"
143 msgstr ""
144
145 #: ../cutscenes/credits.txt:28
146 msgid "David Bariod"
147 msgstr ""
148
149 #: ../cutscenes/credits.txt:29
150 msgid "Daniel Santos"
151 msgstr ""
152
153 #: ../cutscenes/credits.txt:30
154 msgid "Gallaecio"
155 msgstr ""
156
157 #: ../cutscenes/credits.txt:31
158 msgid "Joseph Bleu"
159 msgstr ""
160
161 #: ../cutscenes/credits.txt:32
162 msgid "Juan PabloTamayo"
163 msgstr ""
164
165 #: ../cutscenes/credits.txt:33
166 msgid "Kitano"
167 msgstr ""
168
169 #: ../cutscenes/credits.txt:34
170 msgid "Kyle Belanger"
171 msgstr ""
172
173 #: ../cutscenes/credits.txt:35
174 msgid "LongerDev"
175 msgstr ""
176
177 #: ../cutscenes/credits.txt:36
178 msgid "Manuel A. Fernandez Montecelo"
179 msgstr ""
180
181 #: ../cutscenes/credits.txt:37
182 msgid "Matthew Krohn"
183 msgstr ""
184
185 #: ../cutscenes/credits.txt:38
186 msgid "Nojan"
187 msgstr ""
188
189 #: ../cutscenes/credits.txt:39
190 msgid "Pavel Kirpichyov"
191 msgstr ""
192
193 #: ../cutscenes/credits.txt:40
194 msgid "runtime-x86"
195 msgstr ""
196
197 #: ../cutscenes/credits.txt:41
198 msgid "Ryan Dansie"
19995 msgstr ""
20096
20197 #: ../cutscenes/credits.txt:44
206102 msgid "Translators"
207103 msgstr ""
208104
209 #: ../cutscenes/credits.txt:51
210 msgid "Ademaro"
211 msgstr ""
212
213 #: ../cutscenes/credits.txt:52
214 msgid "Adrian Chaves Fernandez"
215 msgstr ""
216
217 #: ../cutscenes/credits.txt:53
218 msgid "Andrea Ranaldi"
219 msgstr ""
220
221 #: ../cutscenes/credits.txt:54
222 msgid "Andreas Berheim Brudin"
223 msgstr ""
224
225 #: ../cutscenes/credits.txt:55
226 msgid "Bas Doodeman"
227 msgstr ""
228
229 #: ../cutscenes/credits.txt:57
230 msgid "Carlos Sanchez"
231 msgstr ""
232
233 #: ../cutscenes/credits.txt:59
234 msgid "Christoph J. Thompson"
235 msgstr ""
236
237 #: ../cutscenes/credits.txt:60
238 msgid "Denis Lysenko"
239 msgstr ""
240
241 #: ../cutscenes/credits.txt:61
242 msgid "Diego J. Romero López"
243 msgstr ""
244
245 #: ../cutscenes/credits.txt:62
246 msgid "dumaosen"
247 msgstr ""
248
249 #: ../cutscenes/credits.txt:63
250 msgid "Emil"
251 msgstr ""
252
253 #: ../cutscenes/credits.txt:64
254 msgid "Eric R"
255 msgstr ""
256
257 #: ../cutscenes/credits.txt:65
258 msgid "Evgen Pavlov"
259 msgstr ""
260
261 #: ../cutscenes/credits.txt:66
262 msgid "Fabio Loli"
263 msgstr ""
264
265 #: ../cutscenes/credits.txt:67
266 msgid "Gianfranco Del Borrello"
267 msgstr ""
268
269 #: ../cutscenes/credits.txt:68
270 msgid "Giovanni Dalla Torre"
271 msgstr ""
272
273 #: ../cutscenes/credits.txt:69
274 msgid "GunChleoc"
275 msgstr ""
276
277 #: ../cutscenes/credits.txt:70
278 msgid "Hans Joachim Desserud"
279 msgstr ""
280
281 #: ../cutscenes/credits.txt:71
282 msgid "hark34"
283 msgstr ""
284
285 #: ../cutscenes/credits.txt:73
286 msgid "Janet Hunt"
287 msgstr ""
288
289 #: ../cutscenes/credits.txt:74
290 msgid "Juan Pablo Tamayo"
291 msgstr ""
292
293 #: ../cutscenes/credits.txt:75
294 msgid "losine"
295 msgstr ""
296
297 #: ../cutscenes/credits.txt:76
298 msgid "Marc Tormo i Bochaca"
299 msgstr ""
300
301 #: ../cutscenes/credits.txt:77
302 msgid "Michael Papageorgiou"
303 msgstr ""
304
305 #: ../cutscenes/credits.txt:78
306 msgid "Mikhail Karalevich"
307 msgstr ""
308
309 #: ../cutscenes/credits.txt:79
310 msgid "Miro Jánošík"
311 msgstr ""
312
313 #: ../cutscenes/credits.txt:80
314 msgid "Mykola Franchuk"
315 msgstr ""
316
317 #: ../cutscenes/credits.txt:81
318 msgid "MOB2"
319 msgstr ""
320
321 #: ../cutscenes/credits.txt:82
322 msgid "Morgan Strauss"
323 msgstr ""
324
325 #: ../cutscenes/credits.txt:83
326 msgid "Nea Retrogamer"
327 msgstr ""
328
329 #: ../cutscenes/credits.txt:84
330 msgid "Nguyễn Gia Phong"
331 msgstr ""
332
333 #: ../cutscenes/credits.txt:85
334 msgid "Nikita Vanku"
335 msgstr ""
336
337 #: ../cutscenes/credits.txt:86
338 msgid "Paul Wortmann"
339 msgstr ""
340
341 #: ../cutscenes/credits.txt:87
342 msgid "Pawel Puszczynski"
343 msgstr ""
344
345 #: ../cutscenes/credits.txt:88
346 msgid "Quentin Stievenart"
347 msgstr ""
348
349 #: ../cutscenes/credits.txt:89
350 msgid "Rui"
351 msgstr ""
352
353 #: ../cutscenes/credits.txt:90
354 msgid "Sergey Basalaev"
355 msgstr ""
356
357 #: ../cutscenes/credits.txt:91
358 msgid "Sergiy Borodych"
359 msgstr ""
360
361 #: ../cutscenes/credits.txt:93
362 msgid "Stefano Peris"
363 msgstr ""
364
365 #: ../cutscenes/credits.txt:94
366 msgid "sujiniku"
367 msgstr ""
368
369 #: ../cutscenes/credits.txt:95
370 msgid "Thomas Glamsch"
371 msgstr ""
372
373 #: ../cutscenes/credits.txt:96
374 msgid "Timo Sievänen"
375 msgstr ""
376
377 #: ../cutscenes/credits.txt:97
378 msgid "Vicente Monteiro"
379 msgstr ""
380
381 #: ../cutscenes/credits.txt:98
382 msgid "Wuzzy2"
383 msgstr ""
384
385 #: ../cutscenes/credits.txt:99
386 msgid "Yannis Anthymidis"
387 msgstr ""
388
389 #: ../cutscenes/credits.txt:100
390 msgid "Zmicer Turok"
391 msgstr ""
392
393 #: ../cutscenes/credits.txt:103
105 #: ../cutscenes/credits.txt:108
394106 msgid "Distributors"
395107 msgstr ""
396108
397 #: ../cutscenes/credits.txt:105
398 msgid "Ablu"
399 msgstr ""
400
401 #: ../cutscenes/credits.txt:106
402 msgid "Feillyne"
403 msgstr ""
404
405 #: ../cutscenes/credits.txt:107
406 msgid "Jan-Hendrik Peters"
407 msgstr ""
408
409 #: ../cutscenes/credits.txt:109
410 msgid "miffe"
411 msgstr ""
412
413 #: ../cutscenes/credits.txt:112
109 #: ../cutscenes/credits.txt:117
414110 msgid "Special Thanks"
415111 msgstr ""
416112
417 #: ../cutscenes/credits.txt:116
113 #: ../cutscenes/credits.txt:121
418114 msgid "For giving constant feedback and testing:"
419115 msgstr ""
420116
421 #: ../cutscenes/credits.txt:117
422 msgid "Bart Kelsey"
423 msgstr ""
424
425 #: ../cutscenes/credits.txt:118
117 #: ../cutscenes/credits.txt:123
426118 msgid "The community at OpenGameArt"
427119 msgstr ""
428120
429 #: ../cutscenes/credits.txt:122
121 #: ../cutscenes/credits.txt:127
430122 msgid "For Tiled and the Flare map exporter:"
431123 msgstr ""
432
433 #: ../cutscenes/credits.txt:123
434 msgid "Thorbjørn Lindeijer"
435 msgstr ""
436
437 #: ../cutscenes/credits.txt:125
438 msgid "Ranie Jade Ramiso"
439 msgstr ""
55 msgstr ""
66 "Project-Id-Version: PACKAGE VERSION\n"
77 "Report-Msgid-Bugs-To: \n"
8 "POT-Creation-Date: 2018-11-13 17:21+\n"
8 "POT-Creation-Date: 2019-07-29 09:34+\n"
99 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1010 "Language-Team: Hebrew (https://www.transifex.com/flareorg/teams/84925/he/)\n"
1111 "MIME-Version: 1.0\n"
8686 msgid "Lead Programmers"
8787 msgstr ""
8888
89 #: ../cutscenes/credits.txt:12
90 msgid "Clint Bellanger"
91 msgstr ""
92
93 #: ../cutscenes/credits.txt:13
94 msgid "Henrik Andersson"
95 msgstr ""
96
97 #: ../cutscenes/credits.txt:14
98 msgid "Igor Paliychuk"
99 msgstr ""
100
101 #: ../cutscenes/credits.txt:15
102 msgid "Justin Jacobs"
103 msgstr ""
104
105 #: ../cutscenes/credits.txt:16
106 msgid "Stefan Beller"
107 msgstr ""
108
109 #: ../cutscenes/credits.txt:17
110 msgid "Thane Brimhall"
111 msgstr ""
112
11389 #: ../cutscenes/credits.txt:20
11490 msgid "Programmers"
115 msgstr ""
116
117 #: ../cutscenes/credits.txt:22
118 msgid "Andrew Engelbrecht"
119 msgstr ""
120
121 #: ../cutscenes/credits.txt:23
122 msgid "Anton Golov"
123 msgstr ""
124
125 #: ../cutscenes/credits.txt:24
126 msgid "Artur Rojek"
127 msgstr ""
128
129 #: ../cutscenes/credits.txt:25
130 msgid "blazindragon"
131 msgstr ""
132
133 #: ../cutscenes/credits.txt:26
134 msgid "Bonbadil"
135 msgstr ""
136
137 #: ../cutscenes/credits.txt:27
138 msgid "Chris Oelmueller"
139 msgstr ""
140
141 #: ../cutscenes/credits.txt:28
142 msgid "David Bariod"
143 msgstr ""
144
145 #: ../cutscenes/credits.txt:29
146 msgid "Daniel Santos"
147 msgstr ""
148
149 #: ../cutscenes/credits.txt:30
150 msgid "Gallaecio"
151 msgstr ""
152
153 #: ../cutscenes/credits.txt:31
154 msgid "Joseph Bleu"
155 msgstr ""
156
157 #: ../cutscenes/credits.txt:32
158 msgid "Juan PabloTamayo"
159 msgstr ""
160
161 #: ../cutscenes/credits.txt:33
162 msgid "Kitano"
163 msgstr ""
164
165 #: ../cutscenes/credits.txt:34
166 msgid "Kyle Belanger"
167 msgstr ""
168
169 #: ../cutscenes/credits.txt:35
170 msgid "LongerDev"
171 msgstr ""
172
173 #: ../cutscenes/credits.txt:36
174 msgid "Manuel A. Fernandez Montecelo"
175 msgstr ""
176
177 #: ../cutscenes/credits.txt:37
178 msgid "Matthew Krohn"
179 msgstr ""
180
181 #: ../cutscenes/credits.txt:38
182 msgid "Nojan"
183 msgstr ""
184
185 #: ../cutscenes/credits.txt:39
186 msgid "Pavel Kirpichyov"
187 msgstr ""
188
189 #: ../cutscenes/credits.txt:40
190 msgid "runtime-x86"
191 msgstr ""
192
193 #: ../cutscenes/credits.txt:41
194 msgid "Ryan Dansie"
19591 msgstr ""
19692
19793 #: ../cutscenes/credits.txt:44
20298 msgid "Translators"
20399 msgstr ""
204100
205 #: ../cutscenes/credits.txt:51
206 msgid "Ademaro"
207 msgstr ""
208
209 #: ../cutscenes/credits.txt:52
210 msgid "Adrian Chaves Fernandez"
211 msgstr ""
212
213 #: ../cutscenes/credits.txt:53
214 msgid "Andrea Ranaldi"
215 msgstr ""
216
217 #: ../cutscenes/credits.txt:54
218 msgid "Andreas Berheim Brudin"
219 msgstr ""
220
221 #: ../cutscenes/credits.txt:55
222 msgid "Bas Doodeman"
223 msgstr ""
224
225 #: ../cutscenes/credits.txt:57
226 msgid "Carlos Sanchez"
227 msgstr ""
228
229 #: ../cutscenes/credits.txt:59
230 msgid "Christoph J. Thompson"
231 msgstr ""
232
233 #: ../cutscenes/credits.txt:60
234 msgid "Denis Lysenko"
235 msgstr ""
236
237 #: ../cutscenes/credits.txt:61
238 msgid "Diego J. Romero López"
239 msgstr ""
240
241 #: ../cutscenes/credits.txt:62
242 msgid "dumaosen"
243 msgstr ""
244
245 #: ../cutscenes/credits.txt:63
246 msgid "Emil"
247 msgstr ""
248
249 #: ../cutscenes/credits.txt:64
250 msgid "Eric R"
251 msgstr ""
252
253 #: ../cutscenes/credits.txt:65
254 msgid "Evgen Pavlov"
255 msgstr ""
256
257 #: ../cutscenes/credits.txt:66
258 msgid "Fabio Loli"
259 msgstr ""
260
261 #: ../cutscenes/credits.txt:67
262 msgid "Gianfranco Del Borrello"
263 msgstr ""
264
265 #: ../cutscenes/credits.txt:68
266 msgid "Giovanni Dalla Torre"
267 msgstr ""
268
269 #: ../cutscenes/credits.txt:69
270 msgid "GunChleoc"
271 msgstr ""
272
273 #: ../cutscenes/credits.txt:70
274 msgid "Hans Joachim Desserud"
275 msgstr ""
276
277 #: ../cutscenes/credits.txt:71
278 msgid "hark34"
279 msgstr ""
280
281 #: ../cutscenes/credits.txt:73
282 msgid "Janet Hunt"
283 msgstr ""
284
285 #: ../cutscenes/credits.txt:74
286 msgid "Juan Pablo Tamayo"
287 msgstr ""
288
289 #: ../cutscenes/credits.txt:75
290 msgid "losine"
291 msgstr ""
292
293 #: ../cutscenes/credits.txt:76
294 msgid "Marc Tormo i Bochaca"
295 msgstr ""
296
297 #: ../cutscenes/credits.txt:77
298 msgid "Michael Papageorgiou"
299 msgstr ""
300
301 #: ../cutscenes/credits.txt:78
302 msgid "Mikhail Karalevich"
303 msgstr ""
304
305 #: ../cutscenes/credits.txt:79
306 msgid "Miro Jánošík"
307 msgstr ""
308
309 #: ../cutscenes/credits.txt:80
310 msgid "Mykola Franchuk"
311 msgstr ""
312
313 #: ../cutscenes/credits.txt:81
314 msgid "MOB2"
315 msgstr ""
316
317 #: ../cutscenes/credits.txt:82
318 msgid "Morgan Strauss"
319 msgstr ""
320
321 #: ../cutscenes/credits.txt:83
322 msgid "Nea Retrogamer"
323 msgstr ""
324
325 #: ../cutscenes/credits.txt:84
326 msgid "Nguyễn Gia Phong"
327 msgstr ""
328
329 #: ../cutscenes/credits.txt:85
330 msgid "Nikita Vanku"
331 msgstr ""
332
333 #: ../cutscenes/credits.txt:86
334 msgid "Paul Wortmann"
335 msgstr ""
336
337 #: ../cutscenes/credits.txt:87
338 msgid "Pawel Puszczynski"
339 msgstr ""
340
341 #: ../cutscenes/credits.txt:88
342 msgid "Quentin Stievenart"
343 msgstr ""
344
345 #: ../cutscenes/credits.txt:89
346 msgid "Rui"
347 msgstr ""
348
349 #: ../cutscenes/credits.txt:90
350 msgid "Sergey Basalaev"
351 msgstr ""
352
353 #: ../cutscenes/credits.txt:91
354 msgid "Sergiy Borodych"
355 msgstr ""
356
357 #: ../cutscenes/credits.txt:93
358 msgid "Stefano Peris"
359 msgstr ""
360
361 #: ../cutscenes/credits.txt:94
362 msgid "sujiniku"
363 msgstr ""
364
365 #: ../cutscenes/credits.txt:95
366 msgid "Thomas Glamsch"
367 msgstr ""
368
369 #: ../cutscenes/credits.txt:96
370 msgid "Timo Sievänen"
371 msgstr ""
372
373 #: ../cutscenes/credits.txt:97
374 msgid "Vicente Monteiro"
375 msgstr ""
376
377 #: ../cutscenes/credits.txt:98
378 msgid "Wuzzy2"
379 msgstr ""
380
381 #: ../cutscenes/credits.txt:99
382 msgid "Yannis Anthymidis"
383 msgstr ""
384
385 #: ../cutscenes/credits.txt:100
386 msgid "Zmicer Turok"
387 msgstr ""
388
389 #: ../cutscenes/credits.txt:103
101 #: ../cutscenes/credits.txt:108
390102 msgid "Distributors"
391103 msgstr ""
392104
393 #: ../cutscenes/credits.txt:105
394 msgid "Ablu"
395 msgstr ""
396
397 #: ../cutscenes/credits.txt:106
398 msgid "Feillyne"
399 msgstr ""
400
401 #: ../cutscenes/credits.txt:107
402 msgid "Jan-Hendrik Peters"
403 msgstr ""
404
405 #: ../cutscenes/credits.txt:109
406 msgid "miffe"
407 msgstr ""
408
409 #: ../cutscenes/credits.txt:112
105 #: ../cutscenes/credits.txt:117
410106 msgid "Special Thanks"
411107 msgstr ""
412108
413 #: ../cutscenes/credits.txt:116
109 #: ../cutscenes/credits.txt:121
414110 msgid "For giving constant feedback and testing:"
415111 msgstr ""
416112
417 #: ../cutscenes/credits.txt:117
418 msgid "Bart Kelsey"
419 msgstr ""
420
421 #: ../cutscenes/credits.txt:118
113 #: ../cutscenes/credits.txt:123
422114 msgid "The community at OpenGameArt"
423115 msgstr ""
424116
425 #: ../cutscenes/credits.txt:122
117 #: ../cutscenes/credits.txt:127
426118 msgid "For Tiled and the Flare map exporter:"
427119 msgstr ""
428
429 #: ../cutscenes/credits.txt:123
430 msgid "Thorbjørn Lindeijer"
431 msgstr ""
432
433 #: ../cutscenes/credits.txt:125
434 msgid "Ranie Jade Ramiso"
435 msgstr ""
0 # Copyright (C) 2011 Clint Bellanger
1 # This file is distributed under the same license as the FLARE package.
2 #
3 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4 # Translators:
5 # Justin Jacobs <jajdorkster@gmail.com>, 2019
6 #
7 msgid ""
8 msgstr ""
9 "Project-Id-Version: PACKAGE VERSION\n"
10 "Report-Msgid-Bugs-To: \n"
11 "POT-Creation-Date: 2019-07-29 09:34+\n"
12 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
13 "Last-Translator: Justin Jacobs <jajdorkster@gmail.com>, 2019\n"
14 "Language-Team: Hungarian (https://www.transifex.com/flareorg/teams/84925/hu/)\n"
15 "MIME-Version: 1.0\n"
16 "Content-Type: text/plain; charset=UTF-8\n"
17 "Content-Transfer-Encoding: 8bit\n"
18 "Language: hu\n"
19 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
20
21 #: ../engine/primary_stats.txt:3
22 msgid "Physical"
23 msgstr "Fizikai"
24
25 #: ../engine/primary_stats.txt:7
26 msgid "Mental"
27 msgstr "Mentális"
28
29 #: ../engine/primary_stats.txt:11
30 msgid "Offense"
31 msgstr "Támadó"
32
33 #: ../engine/primary_stats.txt:15
34 msgid "Defense"
35 msgstr "Védő"
36
37 #: ../engine/damage_types.txt:3
38 msgid "Melee Damage"
39 msgstr "Közeharc Sebzés"
40
41 #: ../engine/damage_types.txt:4
42 msgid "Increases the damage done with swords and other melee weapons."
43 msgstr ""
44
45 #: ../engine/damage_types.txt:5
46 msgid "Melee Damage Min"
47 msgstr "Közelharc Sebzés Min"
48
49 #: ../engine/damage_types.txt:6
50 msgid "Melee Damage Max"
51 msgstr "Közelharc Sebzés Max"
52
53 #: ../engine/damage_types.txt:12
54 msgid "Ranged Damage"
55 msgstr "Lővegyver Sebzés"
56
57 #: ../engine/damage_types.txt:13
58 msgid "Increases the damage done with bows and other ranged weapons."
59 msgstr ""
60
61 #: ../engine/damage_types.txt:14
62 msgid "Ranged Damage Min"
63 msgstr "Lőfegyver Sebzés Min"
64
65 #: ../engine/damage_types.txt:15
66 msgid "Ranged Damage Max"
67 msgstr "Lőfegyver Sebzés Max"
68
69 #: ../engine/damage_types.txt:21
70 msgid "Mental Damage"
71 msgstr "Mentális Sebzés"
72
73 #: ../engine/damage_types.txt:22
74 msgid "Increases the damage done with staves and other mental weapons."
75 msgstr ""
76
77 #: ../engine/damage_types.txt:23
78 msgid "Mental Damage Min"
79 msgstr "Mentális Sebzés Min"
80
81 #: ../engine/damage_types.txt:24
82 msgid "Mental Damage Max"
83 msgstr "Mentális Sebzés Max"
84
85 #: ../cutscenes/credits.txt:7
86 msgid "Flare Engine Credits"
87 msgstr "Flare Motor Készítők"
88
89 #: ../cutscenes/credits.txt:10
90 msgid "Lead Programmers"
91 msgstr "Vezető fejlesztők"
92
93 #: ../cutscenes/credits.txt:20
94 msgid "Programmers"
95 msgstr "Programozók"
96
97 #: ../cutscenes/credits.txt:44
98 msgid "Default Art"
99 msgstr ""
100
101 #: ../cutscenes/credits.txt:49
102 msgid "Translators"
103 msgstr ""
104
105 #: ../cutscenes/credits.txt:108
106 msgid "Distributors"
107 msgstr "Terjesztők"
108
109 #: ../cutscenes/credits.txt:117
110 msgid "Special Thanks"
111 msgstr "Külön köszönet"
112
113 #: ../cutscenes/credits.txt:121
114 msgid "For giving constant feedback and testing:"
115 msgstr "a folyamatos visszajelzésért és tesztelésért:"
116
117 #: ../cutscenes/credits.txt:123
118 msgid "The community at OpenGameArt"
119 msgstr "Az OpenGameArt közösség"
120
121 #: ../cutscenes/credits.txt:127
122 msgid "For Tiled and the Flare map exporter:"
123 msgstr "A Tiled és Flare térkép exporerért:"
88 msgstr ""
99 "Project-Id-Version: PACKAGE VERSION\n"
1010 "Report-Msgid-Bugs-To: \n"
11 "POT-Creation-Date: 2018-11-13 17:21+\n"
11 "POT-Creation-Date: 2019-07-29 09:34+\n"
1212 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1313 "Last-Translator: MOB2 <thewattyk@gmail.com>, 2018\n"
1414 "Language-Team: Italian (https://www.transifex.com/flareorg/teams/84925/it/)\n"
9090 msgid "Lead Programmers"
9191 msgstr "Capi Programmatori"
9292
93 #: ../cutscenes/credits.txt:12
94 msgid "Clint Bellanger"
95 msgstr "Clint Bellanger"
96
97 #: ../cutscenes/credits.txt:13
98 msgid "Henrik Andersson"
99 msgstr "Henrik Andersson"
100
101 #: ../cutscenes/credits.txt:14
102 msgid "Igor Paliychuk"
103 msgstr "Igor Paliychuk"
104
105 #: ../cutscenes/credits.txt:15
106 msgid "Justin Jacobs"
107 msgstr "Justin Jacobs"
108
109 #: ../cutscenes/credits.txt:16
110 msgid "Stefan Beller"
111 msgstr "Stefan Beller"
112
113 #: ../cutscenes/credits.txt:17
114 msgid "Thane Brimhall"
115 msgstr "Thane Brimhall"
116
11793 #: ../cutscenes/credits.txt:20
11894 msgid "Programmers"
11995 msgstr "Programmatori"
120
121 #: ../cutscenes/credits.txt:22
122 msgid "Andrew Engelbrecht"
123 msgstr "Andrew Engelbrecht"
124
125 #: ../cutscenes/credits.txt:23
126 msgid "Anton Golov"
127 msgstr "Anton Golov"
128
129 #: ../cutscenes/credits.txt:24
130 msgid "Artur Rojek"
131 msgstr "Artur Rojek"
132
133 #: ../cutscenes/credits.txt:25
134 msgid "blazindragon"
135 msgstr "blazindragon"
136
137 #: ../cutscenes/credits.txt:26
138 msgid "Bonbadil"
139 msgstr "Bonbadil"
140
141 #: ../cutscenes/credits.txt:27
142 msgid "Chris Oelmueller"
143 msgstr "Chris Oelmueller"
144
145 #: ../cutscenes/credits.txt:28
146 msgid "David Bariod"
147 msgstr "David Bariod"
148
149 #: ../cutscenes/credits.txt:29
150 msgid "Daniel Santos"
151 msgstr "Daniel Santos"
152
153 #: ../cutscenes/credits.txt:30
154 msgid "Gallaecio"
155 msgstr "Gallaecio"
156
157 #: ../cutscenes/credits.txt:31
158 msgid "Joseph Bleu"
159 msgstr "Joseph Bleu"
160
161 #: ../cutscenes/credits.txt:32
162 msgid "Juan PabloTamayo"
163 msgstr "Juan PabloTamayo"
164
165 #: ../cutscenes/credits.txt:33
166 msgid "Kitano"
167 msgstr "Kitano"
168
169 #: ../cutscenes/credits.txt:34
170 msgid "Kyle Belanger"
171 msgstr "Kyle Belanger"
172
173 #: ../cutscenes/credits.txt:35
174 msgid "LongerDev"
175 msgstr "LongerDev"
176
177 #: ../cutscenes/credits.txt:36
178 msgid "Manuel A. Fernandez Montecelo"
179 msgstr "Manuel A. Fernandez Montecelo"
180
181 #: ../cutscenes/credits.txt:37
182 msgid "Matthew Krohn"
183 msgstr "Matthew Krohn"
184
185 #: ../cutscenes/credits.txt:38
186 msgid "Nojan"
187 msgstr "Nojan"
188
189 #: ../cutscenes/credits.txt:39
190 msgid "Pavel Kirpichyov"
191 msgstr "Pavel Kirpichyov"
192
193 #: ../cutscenes/credits.txt:40
194 msgid "runtime-x86"
195 msgstr "runtime-x86"
196
197 #: ../cutscenes/credits.txt:41
198 msgid "Ryan Dansie"
199 msgstr "Ryan Dansie"
20096
20197 #: ../cutscenes/credits.txt:44
20298 msgid "Default Art"
206102 msgid "Translators"
207103 msgstr "Traduttori"
208104
209 #: ../cutscenes/credits.txt:51
210 msgid "Ademaro"
211 msgstr "Ademaro"
212
213 #: ../cutscenes/credits.txt:52
214 msgid "Adrian Chaves Fernandez"
215 msgstr "Adrian Chaves Fernandez"
216
217 #: ../cutscenes/credits.txt:53
218 msgid "Andrea Ranaldi"
219 msgstr "Andrea Ranaldi"
220
221 #: ../cutscenes/credits.txt:54
222 msgid "Andreas Berheim Brudin"
223 msgstr "Andreas Berheim Brudin"
224
225 #: ../cutscenes/credits.txt:55
226 msgid "Bas Doodeman"
227 msgstr "Bas Doodeman"
228
229 #: ../cutscenes/credits.txt:57
230 msgid "Carlos Sanchez"
231 msgstr "Carlos Sanchez"
232
233 #: ../cutscenes/credits.txt:59
234 msgid "Christoph J. Thompson"
235 msgstr "Christoph J. Thompson"
236
237 #: ../cutscenes/credits.txt:60
238 msgid "Denis Lysenko"
239 msgstr "Denis Lysenko"
240
241 #: ../cutscenes/credits.txt:61
242 msgid "Diego J. Romero López"
243 msgstr "Diego J. Romero López"
244
245 #: ../cutscenes/credits.txt:62
246 msgid "dumaosen"
247 msgstr "dumaosen"
248
249 #: ../cutscenes/credits.txt:63
250 msgid "Emil"
251 msgstr ""
252
253 #: ../cutscenes/credits.txt:64
254 msgid "Eric R"
255 msgstr "Eric R"
256
257 #: ../cutscenes/credits.txt:65
258 msgid "Evgen Pavlov"
259 msgstr "Evgen Pavlov"
260
261 #: ../cutscenes/credits.txt:66
262 msgid "Fabio Loli"
263 msgstr ""
264
265 #: ../cutscenes/credits.txt:67
266 msgid "Gianfranco Del Borrello"
267 msgstr "Gianfranco Del Borrello"
268
269 #: ../cutscenes/credits.txt:68
270 msgid "Giovanni Dalla Torre"
271 msgstr "Giovanni Dalla Torre"
272
273 #: ../cutscenes/credits.txt:69
274 msgid "GunChleoc"
275 msgstr "GunChleoc"
276
277 #: ../cutscenes/credits.txt:70
278 msgid "Hans Joachim Desserud"
279 msgstr "Hans Joachim Desserud"
280
281 #: ../cutscenes/credits.txt:71
282 msgid "hark34"
283 msgstr "hark34"
284
285 #: ../cutscenes/credits.txt:73
286 msgid "Janet Hunt"
287 msgstr "Janet Hunt"
288
289 #: ../cutscenes/credits.txt:74
290 msgid "Juan Pablo Tamayo"
291 msgstr "Juan Pablo Tamayo"
292
293 #: ../cutscenes/credits.txt:75
294 msgid "losine"
295 msgstr "losine"
296
297 #: ../cutscenes/credits.txt:76
298 msgid "Marc Tormo i Bochaca"
299 msgstr ""
300
301 #: ../cutscenes/credits.txt:77
302 msgid "Michael Papageorgiou"
303 msgstr "Michael Papageorgiou"
304
305 #: ../cutscenes/credits.txt:78
306 msgid "Mikhail Karalevich"
307 msgstr "Mikhail Karalevich"
308
309 #: ../cutscenes/credits.txt:79
310 msgid "Miro Jánošík"
311 msgstr "Miro Jánošík"
312
313 #: ../cutscenes/credits.txt:80
314 msgid "Mykola Franchuk"
315 msgstr ""
316
317 #: ../cutscenes/credits.txt:81
318 msgid "MOB2"
319 msgstr "MOB2"
320
321 #: ../cutscenes/credits.txt:82
322 msgid "Morgan Strauss"
323 msgstr "Morgan Strauss"
324
325 #: ../cutscenes/credits.txt:83
326 msgid "Nea Retrogamer"
327 msgstr "Nea Retrogamer"
328
329 #: ../cutscenes/credits.txt:84
330 msgid "Nguyễn Gia Phong"
331 msgstr "Nguyễn Gia Phong"
332
333 #: ../cutscenes/credits.txt:85
334 msgid "Nikita Vanku"
335 msgstr "Nikita Vanku"
336
337 #: ../cutscenes/credits.txt:86
338 msgid "Paul Wortmann"
339 msgstr "Paul Wortmann"
340
341 #: ../cutscenes/credits.txt:87
342 msgid "Pawel Puszczynski"
343 msgstr "Pawel Puszczynski"
344
345 #: ../cutscenes/credits.txt:88
346 msgid "Quentin Stievenart"
347 msgstr "Quentin Stievenart"
348
349 #: ../cutscenes/credits.txt:89
350 msgid "Rui"
351 msgstr "Rui"
352
353 #: ../cutscenes/credits.txt:90
354 msgid "Sergey Basalaev"
355 msgstr "Sergey Basalaev"
356
357 #: ../cutscenes/credits.txt:91
358 msgid "Sergiy Borodych"
359 msgstr "Sergiy Borodych"
360
361 #: ../cutscenes/credits.txt:93
362 msgid "Stefano Peris"
363 msgstr "Stefano Peris"
364
365 #: ../cutscenes/credits.txt:94
366 msgid "sujiniku"
367 msgstr "sujiniku"
368
369 #: ../cutscenes/credits.txt:95
370 msgid "Thomas Glamsch"
371 msgstr "Thomas Glamsch"
372
373 #: ../cutscenes/credits.txt:96
374 msgid "Timo Sievänen"
375 msgstr "Timo Sievänen"
376
377 #: ../cutscenes/credits.txt:97
378 msgid "Vicente Monteiro"
379 msgstr "Vicente Monteiro"
380
381 #: ../cutscenes/credits.txt:98
382 msgid "Wuzzy2"
383 msgstr "Wuzzy2"
384
385 #: ../cutscenes/credits.txt:99
386 msgid "Yannis Anthymidis"
387 msgstr "Yannis Anthymidis"
388
389 #: ../cutscenes/credits.txt:100
390 msgid "Zmicer Turok"
391 msgstr ""
392
393 #: ../cutscenes/credits.txt:103
105 #: ../cutscenes/credits.txt:108
394106 msgid "Distributors"
395107 msgstr "Distributori"
396108
397 #: ../cutscenes/credits.txt:105
398 msgid "Ablu"
399 msgstr "Ablu"
400
401 #: ../cutscenes/credits.txt:106
402 msgid "Feillyne"
403 msgstr "Feillyne"
404
405 #: ../cutscenes/credits.txt:107
406 msgid "Jan-Hendrik Peters"
407 msgstr "Jan-Hendrik Peters"
408
409 #: ../cutscenes/credits.txt:109
410 msgid "miffe"
411 msgstr "miffe"
412
413 #: ../cutscenes/credits.txt:112
109 #: ../cutscenes/credits.txt:117
414110 msgid "Special Thanks"
415111 msgstr "Speciali Ringraziamenti"
416112
417 #: ../cutscenes/credits.txt:116
113 #: ../cutscenes/credits.txt:121
418114 msgid "For giving constant feedback and testing:"
419115 msgstr "Per il costante feedback e il testing:"
420116
421 #: ../cutscenes/credits.txt:117
422 msgid "Bart Kelsey"
423 msgstr "Bart Kelsey"
424
425 #: ../cutscenes/credits.txt:118
117 #: ../cutscenes/credits.txt:123
426118 msgid "The community at OpenGameArt"
427119 msgstr "La comunità di OpenGameArt"
428120
429 #: ../cutscenes/credits.txt:122
121 #: ../cutscenes/credits.txt:127
430122 msgid "For Tiled and the Flare map exporter:"
431123 msgstr "Per l'editor Tiled e l'esportatore di mappe di Flare:"
432
433 #: ../cutscenes/credits.txt:123
434 msgid "Thorbjørn Lindeijer"
435 msgstr "Thorbjørn Lindeijer"
436
437 #: ../cutscenes/credits.txt:125
438 msgid "Ranie Jade Ramiso"
439 msgstr "Ranie Jade Ramiso"
88 msgstr ""
99 "Project-Id-Version: PACKAGE VERSION\n"
1010 "Report-Msgid-Bugs-To: \n"
11 "POT-Creation-Date: 2018-11-13 17:21+\n"
11 "POT-Creation-Date: 2019-07-29 09:34+\n"
1212 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1313 "Last-Translator: Justin Jacobs <jajdorkster@gmail.com>, 2018\n"
1414 "Language-Team: Japanese (https://www.transifex.com/flareorg/teams/84925/ja/)\n"
9090 msgid "Lead Programmers"
9191 msgstr ""
9292
93 #: ../cutscenes/credits.txt:12
94 msgid "Clint Bellanger"
95 msgstr ""
96
97 #: ../cutscenes/credits.txt:13
98 msgid "Henrik Andersson"
99 msgstr ""
100
101 #: ../cutscenes/credits.txt:14
102 msgid "Igor Paliychuk"
103 msgstr ""
104
105 #: ../cutscenes/credits.txt:15
106 msgid "Justin Jacobs"
107 msgstr ""
108
109 #: ../cutscenes/credits.txt:16
110 msgid "Stefan Beller"
111 msgstr ""
112
113 #: ../cutscenes/credits.txt:17
114 msgid "Thane Brimhall"
115 msgstr ""
116
11793 #: ../cutscenes/credits.txt:20
11894 msgid "Programmers"
119 msgstr ""
120
121 #: ../cutscenes/credits.txt:22
122 msgid "Andrew Engelbrecht"
123 msgstr ""
124
125 #: ../cutscenes/credits.txt:23
126 msgid "Anton Golov"
127 msgstr ""
128
129 #: ../cutscenes/credits.txt:24
130 msgid "Artur Rojek"
131 msgstr ""
132
133 #: ../cutscenes/credits.txt:25
134 msgid "blazindragon"
135 msgstr ""
136
137 #: ../cutscenes/credits.txt:26
138 msgid "Bonbadil"
139 msgstr ""
140
141 #: ../cutscenes/credits.txt:27
142 msgid "Chris Oelmueller"
143 msgstr ""
144
145 #: ../cutscenes/credits.txt:28
146 msgid "David Bariod"
147 msgstr ""
148
149 #: ../cutscenes/credits.txt:29
150 msgid "Daniel Santos"
151 msgstr ""
152
153 #: ../cutscenes/credits.txt:30
154 msgid "Gallaecio"
155 msgstr ""
156
157 #: ../cutscenes/credits.txt:31
158 msgid "Joseph Bleu"
159 msgstr ""
160
161 #: ../cutscenes/credits.txt:32
162 msgid "Juan PabloTamayo"
163 msgstr ""
164
165 #: ../cutscenes/credits.txt:33
166 msgid "Kitano"
167 msgstr ""
168
169 #: ../cutscenes/credits.txt:34
170 msgid "Kyle Belanger"
171 msgstr ""
172
173 #: ../cutscenes/credits.txt:35
174 msgid "LongerDev"
175 msgstr ""
176
177 #: ../cutscenes/credits.txt:36
178 msgid "Manuel A. Fernandez Montecelo"
179 msgstr ""
180
181 #: ../cutscenes/credits.txt:37
182 msgid "Matthew Krohn"
183 msgstr ""
184
185 #: ../cutscenes/credits.txt:38
186 msgid "Nojan"
187 msgstr ""
188
189 #: ../cutscenes/credits.txt:39
190 msgid "Pavel Kirpichyov"
191 msgstr ""
192
193 #: ../cutscenes/credits.txt:40
194 msgid "runtime-x86"
195 msgstr ""
196
197 #: ../cutscenes/credits.txt:41
198 msgid "Ryan Dansie"
19995 msgstr ""
20096
20197 #: ../cutscenes/credits.txt:44
206102 msgid "Translators"
207103 msgstr ""
208104
209 #: ../cutscenes/credits.txt:51
210 msgid "Ademaro"
211 msgstr ""
212
213 #: ../cutscenes/credits.txt:52
214 msgid "Adrian Chaves Fernandez"
215 msgstr ""
216
217 #: ../cutscenes/credits.txt:53
218 msgid "Andrea Ranaldi"
219 msgstr ""
220
221 #: ../cutscenes/credits.txt:54
222 msgid "Andreas Berheim Brudin"
223 msgstr ""
224
225 #: ../cutscenes/credits.txt:55
226 msgid "Bas Doodeman"
227 msgstr ""
228
229 #: ../cutscenes/credits.txt:57
230 msgid "Carlos Sanchez"
231 msgstr ""
232
233 #: ../cutscenes/credits.txt:59
234 msgid "Christoph J. Thompson"
235 msgstr ""
236
237 #: ../cutscenes/credits.txt:60
238 msgid "Denis Lysenko"
239 msgstr ""
240
241 #: ../cutscenes/credits.txt:61
242 msgid "Diego J. Romero López"
243 msgstr ""
244
245 #: ../cutscenes/credits.txt:62
246 msgid "dumaosen"
247 msgstr ""
248
249 #: ../cutscenes/credits.txt:63
250 msgid "Emil"
251 msgstr ""
252
253 #: ../cutscenes/credits.txt:64
254 msgid "Eric R"
255 msgstr ""
256
257 #: ../cutscenes/credits.txt:65
258 msgid "Evgen Pavlov"
259 msgstr ""
260
261 #: ../cutscenes/credits.txt:66
262 msgid "Fabio Loli"
263 msgstr ""
264
265 #: ../cutscenes/credits.txt:67
266 msgid "Gianfranco Del Borrello"
267 msgstr ""
268
269 #: ../cutscenes/credits.txt:68
270 msgid "Giovanni Dalla Torre"
271 msgstr ""
272
273 #: ../cutscenes/credits.txt:69
274 msgid "GunChleoc"
275 msgstr ""
276
277 #: ../cutscenes/credits.txt:70
278 msgid "Hans Joachim Desserud"
279 msgstr ""
280
281 #: ../cutscenes/credits.txt:71
282 msgid "hark34"
283 msgstr ""
284
285 #: ../cutscenes/credits.txt:73
286 msgid "Janet Hunt"
287 msgstr ""
288
289 #: ../cutscenes/credits.txt:74
290 msgid "Juan Pablo Tamayo"
291 msgstr ""
292
293 #: ../cutscenes/credits.txt:75
294 msgid "losine"
295 msgstr ""
296
297 #: ../cutscenes/credits.txt:76
298 msgid "Marc Tormo i Bochaca"
299 msgstr ""
300
301 #: ../cutscenes/credits.txt:77
302 msgid "Michael Papageorgiou"
303 msgstr ""
304
305 #: ../cutscenes/credits.txt:78
306 msgid "Mikhail Karalevich"
307 msgstr ""
308
309 #: ../cutscenes/credits.txt:79
310 msgid "Miro Jánošík"
311 msgstr ""
312
313 #: ../cutscenes/credits.txt:80
314 msgid "Mykola Franchuk"
315 msgstr ""
316
317 #: ../cutscenes/credits.txt:81
318 msgid "MOB2"
319 msgstr ""
320
321 #: ../cutscenes/credits.txt:82
322 msgid "Morgan Strauss"
323 msgstr ""
324
325 #: ../cutscenes/credits.txt:83
326 msgid "Nea Retrogamer"
327 msgstr ""
328
329 #: ../cutscenes/credits.txt:84
330 msgid "Nguyễn Gia Phong"
331 msgstr ""
332
333 #: ../cutscenes/credits.txt:85
334 msgid "Nikita Vanku"
335 msgstr ""
336
337 #: ../cutscenes/credits.txt:86
338 msgid "Paul Wortmann"
339 msgstr ""
340
341 #: ../cutscenes/credits.txt:87
342 msgid "Pawel Puszczynski"
343 msgstr ""
344
345 #: ../cutscenes/credits.txt:88
346 msgid "Quentin Stievenart"
347 msgstr ""
348
349 #: ../cutscenes/credits.txt:89
350 msgid "Rui"
351 msgstr ""
352
353 #: ../cutscenes/credits.txt:90
354 msgid "Sergey Basalaev"
355 msgstr ""
356
357 #: ../cutscenes/credits.txt:91
358 msgid "Sergiy Borodych"
359 msgstr ""
360
361 #: ../cutscenes/credits.txt:93
362 msgid "Stefano Peris"
363 msgstr ""
364
365 #: ../cutscenes/credits.txt:94
366 msgid "sujiniku"
367 msgstr ""
368
369 #: ../cutscenes/credits.txt:95
370 msgid "Thomas Glamsch"
371 msgstr ""
372
373 #: ../cutscenes/credits.txt:96
374 msgid "Timo Sievänen"
375 msgstr ""
376
377 #: ../cutscenes/credits.txt:97
378 msgid "Vicente Monteiro"
379 msgstr ""
380
381 #: ../cutscenes/credits.txt:98
382 msgid "Wuzzy2"
383 msgstr ""
384
385 #: ../cutscenes/credits.txt:99
386 msgid "Yannis Anthymidis"
387 msgstr ""
388
389 #: ../cutscenes/credits.txt:100
390 msgid "Zmicer Turok"
391 msgstr ""
392
393 #: ../cutscenes/credits.txt:103
105 #: ../cutscenes/credits.txt:108
394106 msgid "Distributors"
395107 msgstr ""
396108
397 #: ../cutscenes/credits.txt:105
398 msgid "Ablu"
399 msgstr ""
400
401 #: ../cutscenes/credits.txt:106
402 msgid "Feillyne"
403 msgstr ""
404
405 #: ../cutscenes/credits.txt:107
406 msgid "Jan-Hendrik Peters"
407 msgstr ""
408
409 #: ../cutscenes/credits.txt:109
410 msgid "miffe"
411 msgstr ""
412
413 #: ../cutscenes/credits.txt:112
109 #: ../cutscenes/credits.txt:117
414110 msgid "Special Thanks"
415111 msgstr ""
416112
417 #: ../cutscenes/credits.txt:116
113 #: ../cutscenes/credits.txt:121
418114 msgid "For giving constant feedback and testing:"
419115 msgstr ""
420116
421 #: ../cutscenes/credits.txt:117
422 msgid "Bart Kelsey"
423 msgstr ""
424
425 #: ../cutscenes/credits.txt:118
117 #: ../cutscenes/credits.txt:123
426118 msgid "The community at OpenGameArt"
427119 msgstr ""
428120
429 #: ../cutscenes/credits.txt:122
121 #: ../cutscenes/credits.txt:127
430122 msgid "For Tiled and the Flare map exporter:"
431123 msgstr ""
432
433 #: ../cutscenes/credits.txt:123
434 msgid "Thorbjørn Lindeijer"
435 msgstr ""
436
437 #: ../cutscenes/credits.txt:125
438 msgid "Ranie Jade Ramiso"
439 msgstr ""
0 # Copyright (C) 2011 Clint Bellanger
1 # This file is distributed under the same license as the FLARE package.
2 #
3 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4 msgid ""
5 msgstr ""
6 "Project-Id-Version: PACKAGE VERSION\n"
7 "Report-Msgid-Bugs-To: \n"
8 "POT-Creation-Date: 2020-05-20 16:39+\n"
9 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
10 "Language-Team: Korean (https://www.transifex.com/flareorg/teams/84925/ko/)\n"
11 "MIME-Version: 1.0\n"
12 "Content-Type: text/plain; charset=UTF-8\n"
13 "Content-Transfer-Encoding: 8bit\n"
14 "Language: ko\n"
15 "Plural-Forms: nplurals=1; plural=0;\n"
16
17 #: ../engine/primary_stats.txt:3
18 msgid "Physical"
19 msgstr ""
20
21 #: ../engine/primary_stats.txt:7
22 msgid "Mental"
23 msgstr ""
24
25 #: ../engine/primary_stats.txt:11
26 msgid "Offense"
27 msgstr ""
28
29 #: ../engine/primary_stats.txt:15
30 msgid "Defense"
31 msgstr ""
32
33 #: ../engine/damage_types.txt:3
34 msgid "Melee Damage"
35 msgstr ""
36
37 #: ../engine/damage_types.txt:4
38 msgid "Increases the damage done with swords and other melee weapons."
39 msgstr ""
40
41 #: ../engine/damage_types.txt:5
42 msgid "Melee Damage Min"
43 msgstr ""
44
45 #: ../engine/damage_types.txt:6
46 msgid "Melee Damage Max"
47 msgstr ""
48
49 #: ../engine/damage_types.txt:12
50 msgid "Ranged Damage"
51 msgstr ""
52
53 #: ../engine/damage_types.txt:13
54 msgid "Increases the damage done with bows and other ranged weapons."
55 msgstr ""
56
57 #: ../engine/damage_types.txt:14
58 msgid "Ranged Damage Min"
59 msgstr ""
60
61 #: ../engine/damage_types.txt:15
62 msgid "Ranged Damage Max"
63 msgstr ""
64
65 #: ../engine/damage_types.txt:21
66 msgid "Mental Damage"
67 msgstr ""
68
69 #: ../engine/damage_types.txt:22
70 msgid "Increases the damage done with staves and other mental weapons."
71 msgstr ""
72
73 #: ../engine/damage_types.txt:23
74 msgid "Mental Damage Min"
75 msgstr ""
76
77 #: ../engine/damage_types.txt:24
78 msgid "Mental Damage Max"
79 msgstr ""
80
81 #: ../cutscenes/credits.txt:7
82 msgid "Flare Engine Credits"
83 msgstr ""
84
85 #: ../cutscenes/credits.txt:10
86 msgid "Lead Programmers"
87 msgstr ""
88
89 #: ../cutscenes/credits.txt:20
90 msgid "Programmers"
91 msgstr ""
92
93 #: ../cutscenes/credits.txt:48
94 msgid "Default Art"
95 msgstr ""
96
97 #: ../cutscenes/credits.txt:53
98 msgid "Translators"
99 msgstr ""
100
101 #: ../cutscenes/credits.txt:112
102 msgid "Distributors"
103 msgstr ""
104
105 #: ../cutscenes/credits.txt:121
106 msgid "Special Thanks"
107 msgstr ""
108
109 #: ../cutscenes/credits.txt:125
110 msgid "For giving constant feedback and testing:"
111 msgstr ""
112
113 #: ../cutscenes/credits.txt:127
114 msgid "The community at OpenGameArt"
115 msgstr ""
116
117 #: ../cutscenes/credits.txt:131
118 msgid "For Tiled and the Flare map exporter:"
119 msgstr ""
11 # This file is distributed under the same license as the FLARE package.
22 #
33 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4 # Translators:
5 # Elias Nykrem <bloodaxeNOR@protonmail.com>, 2019
6 #
47 msgid ""
58 msgstr ""
69 "Project-Id-Version: PACKAGE VERSION\n"
710 "Report-Msgid-Bugs-To: \n"
8 "POT-Creation-Date: 2018-11-13 17:21+\n"
11 "POT-Creation-Date: 2019-07-29 09:34+\n"
912 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
13 "Last-Translator: Elias Nykrem <bloodaxeNOR@protonmail.com>, 2019\n"
1014 "Language-Team: Norwegian Bokmål (https://www.transifex.com/flareorg/teams/84925/nb/)\n"
1115 "MIME-Version: 1.0\n"
1216 "Content-Type: text/plain; charset=UTF-8\n"
1620
1721 #: ../engine/primary_stats.txt:3
1822 msgid "Physical"
19 msgstr ""
23 msgstr "Fysisk"
2024
2125 #: ../engine/primary_stats.txt:7
2226 msgid "Mental"
23 msgstr ""
27 msgstr "Mentalitet"
2428
2529 #: ../engine/primary_stats.txt:11
2630 msgid "Offense"
27 msgstr ""
31 msgstr "Offensiv"
2832
2933 #: ../engine/primary_stats.txt:15
3034 msgid "Defense"
31 msgstr ""
35 msgstr "Defensiv"
3236
3337 #: ../engine/damage_types.txt:3
3438 msgid "Melee Damage"
35 msgstr ""
39 msgstr "Nærkamp Skade"
3640
3741 #: ../engine/damage_types.txt:4
3842 msgid "Increases the damage done with swords and other melee weapons."
39 msgstr ""
43 msgstr "Øker skade gjort med sverd og andre nærkampsvåpen."
4044
4145 #: ../engine/damage_types.txt:5
4246 msgid "Melee Damage Min"
43 msgstr ""
47 msgstr "Nærkamp Skade Min"
4448
4549 #: ../engine/damage_types.txt:6
4650 msgid "Melee Damage Max"
47 msgstr ""
51 msgstr "Nærkamp Skade Maks"
4852
4953 #: ../engine/damage_types.txt:12
5054 msgid "Ranged Damage"
51 msgstr ""
55 msgstr "Distanse Skade"
5256
5357 #: ../engine/damage_types.txt:13
5458 msgid "Increases the damage done with bows and other ranged weapons."
55 msgstr ""
59 msgstr "Øker skade gjort med buer og andre distansevåpen."
5660
5761 #: ../engine/damage_types.txt:14
5862 msgid "Ranged Damage Min"
59 msgstr ""
63 msgstr "Distanse Skade Min"
6064
6165 #: ../engine/damage_types.txt:15
6266 msgid "Ranged Damage Max"
63 msgstr ""
67 msgstr "Distanse Skade Maks"
6468
6569 #: ../engine/damage_types.txt:21
6670 msgid "Mental Damage"
67 msgstr ""
71 msgstr "Mental Skade"
6872
6973 #: ../engine/damage_types.txt:22
7074 msgid "Increases the damage done with staves and other mental weapons."
71 msgstr ""
75 msgstr "Øker skade gjort med staver og andre mentalitetsvåpen."
7276
7377 #: ../engine/damage_types.txt:23
7478 msgid "Mental Damage Min"
75 msgstr ""
79 msgstr "Mental Skade Min"
7680
7781 #: ../engine/damage_types.txt:24
7882 msgid "Mental Damage Max"
79 msgstr ""
83 msgstr "Mental Skade Maks"
8084
8185 #: ../cutscenes/credits.txt:7
8286 msgid "Flare Engine Credits"
83 msgstr ""
87 msgstr "Flare Engine Rulletekst"
8488
8589 #: ../cutscenes/credits.txt:10
8690 msgid "Lead Programmers"
87 msgstr ""
88
89 #: ../cutscenes/credits.txt:12
90 msgid "Clint Bellanger"
91 msgstr ""
92
93 #: ../cutscenes/credits.txt:13
94 msgid "Henrik Andersson"
95 msgstr ""
96
97 #: ../cutscenes/credits.txt:14
98 msgid "Igor Paliychuk"
99 msgstr ""
100
101 #: ../cutscenes/credits.txt:15
102 msgid "Justin Jacobs"
103 msgstr ""
104
105 #: ../cutscenes/credits.txt:16
106 msgid "Stefan Beller"
107 msgstr ""
108
109 #: ../cutscenes/credits.txt:17
110 msgid "Thane Brimhall"
111 msgstr ""
91 msgstr "Ledende Programmerere"
11292
11393 #: ../cutscenes/credits.txt:20
11494 msgid "Programmers"
115 msgstr ""
116
117 #: ../cutscenes/credits.txt:22
118 msgid "Andrew Engelbrecht"
119 msgstr ""
120
121 #: ../cutscenes/credits.txt:23
122 msgid "Anton Golov"
123 msgstr ""
124
125 #: ../cutscenes/credits.txt:24
126 msgid "Artur Rojek"
127 msgstr ""
128
129 #: ../cutscenes/credits.txt:25
130 msgid "blazindragon"
131 msgstr ""
132
133 #: ../cutscenes/credits.txt:26
134 msgid "Bonbadil"
135 msgstr ""
136
137 #: ../cutscenes/credits.txt:27
138 msgid "Chris Oelmueller"
139 msgstr ""
140
141 #: ../cutscenes/credits.txt:28
142 msgid "David Bariod"
143 msgstr ""
144
145 #: ../cutscenes/credits.txt:29
146 msgid "Daniel Santos"
147 msgstr ""
148
149 #: ../cutscenes/credits.txt:30
150 msgid "Gallaecio"
151 msgstr ""
152
153 #: ../cutscenes/credits.txt:31
154 msgid "Joseph Bleu"
155 msgstr ""
156
157 #: ../cutscenes/credits.txt:32
158 msgid "Juan PabloTamayo"
159 msgstr ""
160
161 #: ../cutscenes/credits.txt:33
162 msgid "Kitano"
163 msgstr ""
164
165 #: ../cutscenes/credits.txt:34
166 msgid "Kyle Belanger"
167 msgstr ""
168
169 #: ../cutscenes/credits.txt:35
170 msgid "LongerDev"
171 msgstr ""
172
173 #: ../cutscenes/credits.txt:36
174 msgid "Manuel A. Fernandez Montecelo"
175 msgstr ""
176
177 #: ../cutscenes/credits.txt:37
178 msgid "Matthew Krohn"
179 msgstr ""
180
181 #: ../cutscenes/credits.txt:38
182 msgid "Nojan"
183 msgstr ""
184
185 #: ../cutscenes/credits.txt:39
186 msgid "Pavel Kirpichyov"
187 msgstr ""
188
189 #: ../cutscenes/credits.txt:40
190 msgid "runtime-x86"
191 msgstr ""
192
193 #: ../cutscenes/credits.txt:41
194 msgid "Ryan Dansie"
195 msgstr ""
95 msgstr "Programmerere"
19696
19797 #: ../cutscenes/credits.txt:44
19898 msgid "Default Art"
199 msgstr ""
99 msgstr "Standard Kunst"
200100
201101 #: ../cutscenes/credits.txt:49
202102 msgid "Translators"
203 msgstr ""
103 msgstr "Oversettere"
204104
205 #: ../cutscenes/credits.txt:51
206 msgid "Ademaro"
207 msgstr ""
208
209 #: ../cutscenes/credits.txt:52
210 msgid "Adrian Chaves Fernandez"
211 msgstr ""
212
213 #: ../cutscenes/credits.txt:53
214 msgid "Andrea Ranaldi"
215 msgstr ""
216
217 #: ../cutscenes/credits.txt:54
218 msgid "Andreas Berheim Brudin"
219 msgstr ""
220
221 #: ../cutscenes/credits.txt:55
222 msgid "Bas Doodeman"
223 msgstr ""
224
225 #: ../cutscenes/credits.txt:57
226 msgid "Carlos Sanchez"
227 msgstr ""
228
229 #: ../cutscenes/credits.txt:59
230 msgid "Christoph J. Thompson"
231 msgstr ""
232
233 #: ../cutscenes/credits.txt:60
234 msgid "Denis Lysenko"
235 msgstr ""
236
237 #: ../cutscenes/credits.txt:61
238 msgid "Diego J. Romero López"
239 msgstr ""
240
241 #: ../cutscenes/credits.txt:62
242 msgid "dumaosen"
243 msgstr ""
244
245 #: ../cutscenes/credits.txt:63
246 msgid "Emil"
247 msgstr ""
248
249 #: ../cutscenes/credits.txt:64
250 msgid "Eric R"
251 msgstr ""
252
253 #: ../cutscenes/credits.txt:65
254 msgid "Evgen Pavlov"
255 msgstr ""
256
257 #: ../cutscenes/credits.txt:66
258 msgid "Fabio Loli"
259 msgstr ""
260
261 #: ../cutscenes/credits.txt:67
262 msgid "Gianfranco Del Borrello"
263 msgstr ""
264
265 #: ../cutscenes/credits.txt:68
266 msgid "Giovanni Dalla Torre"
267 msgstr ""
268
269 #: ../cutscenes/credits.txt:69
270 msgid "GunChleoc"
271 msgstr ""
272
273 #: ../cutscenes/credits.txt:70
274 msgid "Hans Joachim Desserud"
275 msgstr ""
276
277 #: ../cutscenes/credits.txt:71
278 msgid "hark34"
279 msgstr ""
280
281 #: ../cutscenes/credits.txt:73
282 msgid "Janet Hunt"
283 msgstr ""
284
285 #: ../cutscenes/credits.txt:74
286 msgid "Juan Pablo Tamayo"
287 msgstr ""
288
289 #: ../cutscenes/credits.txt:75
290 msgid "losine"
291 msgstr ""
292
293 #: ../cutscenes/credits.txt:76
294 msgid "Marc Tormo i Bochaca"
295 msgstr ""
296
297 #: ../cutscenes/credits.txt:77
298 msgid "Michael Papageorgiou"
299 msgstr ""
300
301 #: ../cutscenes/credits.txt:78
302 msgid "Mikhail Karalevich"
303 msgstr ""
304
305 #: ../cutscenes/credits.txt:79
306 msgid "Miro Jánošík"
307 msgstr ""
308
309 #: ../cutscenes/credits.txt:80
310 msgid "Mykola Franchuk"
311 msgstr ""
312
313 #: ../cutscenes/credits.txt:81
314 msgid "MOB2"
315 msgstr ""
316
317 #: ../cutscenes/credits.txt:82
318 msgid "Morgan Strauss"
319 msgstr ""
320
321 #: ../cutscenes/credits.txt:83
322 msgid "Nea Retrogamer"
323 msgstr ""
324
325 #: ../cutscenes/credits.txt:84
326 msgid "Nguyễn Gia Phong"
327 msgstr ""
328
329 #: ../cutscenes/credits.txt:85
330 msgid "Nikita Vanku"
331 msgstr ""
332
333 #: ../cutscenes/credits.txt:86
334 msgid "Paul Wortmann"
335 msgstr ""
336
337 #: ../cutscenes/credits.txt:87
338 msgid "Pawel Puszczynski"
339 msgstr ""
340
341 #: ../cutscenes/credits.txt:88
342 msgid "Quentin Stievenart"
343 msgstr ""
344
345 #: ../cutscenes/credits.txt:89
346 msgid "Rui"
347 msgstr ""
348
349 #: ../cutscenes/credits.txt:90
350 msgid "Sergey Basalaev"
351 msgstr ""
352
353 #: ../cutscenes/credits.txt:91
354 msgid "Sergiy Borodych"
355 msgstr ""
356
357 #: ../cutscenes/credits.txt:93
358 msgid "Stefano Peris"
359 msgstr ""
360
361 #: ../cutscenes/credits.txt:94
362 msgid "sujiniku"
363 msgstr ""
364
365 #: ../cutscenes/credits.txt:95
366 msgid "Thomas Glamsch"
367 msgstr ""
368
369 #: ../cutscenes/credits.txt:96
370 msgid "Timo Sievänen"
371 msgstr ""
372
373 #: ../cutscenes/credits.txt:97
374 msgid "Vicente Monteiro"
375 msgstr ""
376
377 #: ../cutscenes/credits.txt:98
378 msgid "Wuzzy2"
379 msgstr ""
380
381 #: ../cutscenes/credits.txt:99
382 msgid "Yannis Anthymidis"
383 msgstr ""
384
385 #: ../cutscenes/credits.txt:100
386 msgid "Zmicer Turok"
387 msgstr ""
388
389 #: ../cutscenes/credits.txt:103
105 #: ../cutscenes/credits.txt:108
390106 msgid "Distributors"
391 msgstr ""
392
393 #: ../cutscenes/credits.txt:105
394 msgid "Ablu"
395 msgstr ""
396
397 #: ../cutscenes/credits.txt:106
398 msgid "Feillyne"
399 msgstr ""
400
401 #: ../cutscenes/credits.txt:107
402 msgid "Jan-Hendrik Peters"
403 msgstr ""
404
405 #: ../cutscenes/credits.txt:109
406 msgid "miffe"
407 msgstr ""
408
409 #: ../cutscenes/credits.txt:112
410 msgid "Special Thanks"
411 msgstr ""
412
413 #: ../cutscenes/credits.txt:116
414 msgid "For giving constant feedback and testing:"
415 msgstr ""
107 msgstr "Distributører"
416108
417109 #: ../cutscenes/credits.txt:117
418 msgid "Bart Kelsey"
419 msgstr ""
110 msgid "Special Thanks"
111 msgstr "Spesielt takk til"
420112
421 #: ../cutscenes/credits.txt:118
422 msgid "The community at OpenGameArt"
423 msgstr ""
424
425 #: ../cutscenes/credits.txt:122
426 msgid "For Tiled and the Flare map exporter:"
427 msgstr ""
113 #: ../cutscenes/credits.txt:121
114 msgid "For giving constant feedback and testing:"
115 msgstr "For konstant testing og tilbakemelding:"
428116
429117 #: ../cutscenes/credits.txt:123
430 msgid "Thorbjørn Lindeijer"
431 msgstr ""
118 msgid "The community at OpenGameArt"
119 msgstr "Fellesskapet ved OpenGameArt"
432120
433 #: ../cutscenes/credits.txt:125
434 msgid "Ranie Jade Ramiso"
435 msgstr ""
121 #: ../cutscenes/credits.txt:127
122 msgid "For Tiled and the Flare map exporter:"
123 msgstr "Til Tiled og Flare kart eksportør:"
55 msgstr ""
66 "Project-Id-Version: PACKAGE VERSION\n"
77 "Report-Msgid-Bugs-To: \n"
8 "POT-Creation-Date: 2018-11-13 17:21+\n"
8 "POT-Creation-Date: 2019-07-29 09:34+\n"
99 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1010 "Language-Team: Dutch (https://www.transifex.com/flareorg/teams/84925/nl/)\n"
1111 "MIME-Version: 1.0\n"
8686 msgid "Lead Programmers"
8787 msgstr ""
8888
89 #: ../cutscenes/credits.txt:12
90 msgid "Clint Bellanger"
91 msgstr ""
92
93 #: ../cutscenes/credits.txt:13
94 msgid "Henrik Andersson"
95 msgstr ""
96
97 #: ../cutscenes/credits.txt:14
98 msgid "Igor Paliychuk"
99 msgstr ""
100
101 #: ../cutscenes/credits.txt:15
102 msgid "Justin Jacobs"
103 msgstr ""
104
105 #: ../cutscenes/credits.txt:16
106 msgid "Stefan Beller"
107 msgstr ""
108
109 #: ../cutscenes/credits.txt:17
110 msgid "Thane Brimhall"
111 msgstr ""
112
11389 #: ../cutscenes/credits.txt:20
11490 msgid "Programmers"
115 msgstr ""
116
117 #: ../cutscenes/credits.txt:22
118 msgid "Andrew Engelbrecht"
119 msgstr ""
120
121 #: ../cutscenes/credits.txt:23
122 msgid "Anton Golov"
123 msgstr ""
124
125 #: ../cutscenes/credits.txt:24
126 msgid "Artur Rojek"
127 msgstr ""
128
129 #: ../cutscenes/credits.txt:25
130 msgid "blazindragon"
131 msgstr ""
132
133 #: ../cutscenes/credits.txt:26
134 msgid "Bonbadil"
135 msgstr ""
136
137 #: ../cutscenes/credits.txt:27
138 msgid "Chris Oelmueller"
139 msgstr ""
140
141 #: ../cutscenes/credits.txt:28
142 msgid "David Bariod"
143 msgstr ""
144
145 #: ../cutscenes/credits.txt:29
146 msgid "Daniel Santos"
147 msgstr ""
148
149 #: ../cutscenes/credits.txt:30
150 msgid "Gallaecio"
151 msgstr ""
152
153 #: ../cutscenes/credits.txt:31
154 msgid "Joseph Bleu"
155 msgstr ""
156
157 #: ../cutscenes/credits.txt:32
158 msgid "Juan PabloTamayo"
159 msgstr ""
160
161 #: ../cutscenes/credits.txt:33
162 msgid "Kitano"
163 msgstr ""
164
165 #: ../cutscenes/credits.txt:34
166 msgid "Kyle Belanger"
167 msgstr ""
168
169 #: ../cutscenes/credits.txt:35
170 msgid "LongerDev"
171 msgstr ""
172
173 #: ../cutscenes/credits.txt:36
174 msgid "Manuel A. Fernandez Montecelo"
175 msgstr ""
176
177 #: ../cutscenes/credits.txt:37
178 msgid "Matthew Krohn"
179 msgstr ""
180
181 #: ../cutscenes/credits.txt:38
182 msgid "Nojan"
183 msgstr ""
184
185 #: ../cutscenes/credits.txt:39
186 msgid "Pavel Kirpichyov"
187 msgstr ""
188
189 #: ../cutscenes/credits.txt:40
190 msgid "runtime-x86"
191 msgstr ""
192
193 #: ../cutscenes/credits.txt:41
194 msgid "Ryan Dansie"
19591 msgstr ""
19692
19793 #: ../cutscenes/credits.txt:44
20298 msgid "Translators"
20399 msgstr ""
204100
205 #: ../cutscenes/credits.txt:51
206 msgid "Ademaro"
207 msgstr ""
208
209 #: ../cutscenes/credits.txt:52
210 msgid "Adrian Chaves Fernandez"
211 msgstr ""
212
213 #: ../cutscenes/credits.txt:53
214 msgid "Andrea Ranaldi"
215 msgstr ""
216
217 #: ../cutscenes/credits.txt:54
218 msgid "Andreas Berheim Brudin"
219 msgstr ""
220
221 #: ../cutscenes/credits.txt:55
222 msgid "Bas Doodeman"
223 msgstr ""
224
225 #: ../cutscenes/credits.txt:57
226 msgid "Carlos Sanchez"
227 msgstr ""
228
229 #: ../cutscenes/credits.txt:59
230 msgid "Christoph J. Thompson"
231 msgstr ""
232
233 #: ../cutscenes/credits.txt:60
234 msgid "Denis Lysenko"
235 msgstr ""
236
237 #: ../cutscenes/credits.txt:61
238 msgid "Diego J. Romero López"
239 msgstr ""
240
241 #: ../cutscenes/credits.txt:62
242 msgid "dumaosen"
243 msgstr ""
244
245 #: ../cutscenes/credits.txt:63
246 msgid "Emil"
247 msgstr ""
248
249 #: ../cutscenes/credits.txt:64
250 msgid "Eric R"
251 msgstr ""
252
253 #: ../cutscenes/credits.txt:65
254 msgid "Evgen Pavlov"
255 msgstr ""
256
257 #: ../cutscenes/credits.txt:66
258 msgid "Fabio Loli"
259 msgstr ""
260
261 #: ../cutscenes/credits.txt:67
262 msgid "Gianfranco Del Borrello"
263 msgstr ""
264
265 #: ../cutscenes/credits.txt:68
266 msgid "Giovanni Dalla Torre"
267 msgstr ""
268
269 #: ../cutscenes/credits.txt:69
270 msgid "GunChleoc"
271 msgstr ""
272
273 #: ../cutscenes/credits.txt:70
274 msgid "Hans Joachim Desserud"
275 msgstr ""
276
277 #: ../cutscenes/credits.txt:71
278 msgid "hark34"
279 msgstr ""
280
281 #: ../cutscenes/credits.txt:73
282 msgid "Janet Hunt"
283 msgstr ""
284
285 #: ../cutscenes/credits.txt:74
286 msgid "Juan Pablo Tamayo"
287 msgstr ""
288
289 #: ../cutscenes/credits.txt:75
290 msgid "losine"
291 msgstr ""
292
293 #: ../cutscenes/credits.txt:76
294 msgid "Marc Tormo i Bochaca"
295 msgstr ""
296
297 #: ../cutscenes/credits.txt:77
298 msgid "Michael Papageorgiou"
299 msgstr ""
300
301 #: ../cutscenes/credits.txt:78
302 msgid "Mikhail Karalevich"
303 msgstr ""
304
305 #: ../cutscenes/credits.txt:79
306 msgid "Miro Jánošík"
307 msgstr ""
308
309 #: ../cutscenes/credits.txt:80
310 msgid "Mykola Franchuk"
311 msgstr ""
312
313 #: ../cutscenes/credits.txt:81
314 msgid "MOB2"
315 msgstr ""
316
317 #: ../cutscenes/credits.txt:82
318 msgid "Morgan Strauss"
319 msgstr ""
320
321 #: ../cutscenes/credits.txt:83
322 msgid "Nea Retrogamer"
323 msgstr ""
324
325 #: ../cutscenes/credits.txt:84
326 msgid "Nguyễn Gia Phong"
327 msgstr ""
328
329 #: ../cutscenes/credits.txt:85
330 msgid "Nikita Vanku"
331 msgstr ""
332
333 #: ../cutscenes/credits.txt:86
334 msgid "Paul Wortmann"
335 msgstr ""
336
337 #: ../cutscenes/credits.txt:87
338 msgid "Pawel Puszczynski"
339 msgstr ""
340
341 #: ../cutscenes/credits.txt:88
342 msgid "Quentin Stievenart"
343 msgstr ""
344
345 #: ../cutscenes/credits.txt:89
346 msgid "Rui"
347 msgstr ""
348
349 #: ../cutscenes/credits.txt:90
350 msgid "Sergey Basalaev"
351 msgstr ""
352
353 #: ../cutscenes/credits.txt:91
354 msgid "Sergiy Borodych"
355 msgstr ""
356
357 #: ../cutscenes/credits.txt:93
358 msgid "Stefano Peris"
359 msgstr ""
360
361 #: ../cutscenes/credits.txt:94
362 msgid "sujiniku"
363 msgstr ""
364
365 #: ../cutscenes/credits.txt:95
366 msgid "Thomas Glamsch"
367 msgstr ""
368
369 #: ../cutscenes/credits.txt:96
370 msgid "Timo Sievänen"
371 msgstr ""
372
373 #: ../cutscenes/credits.txt:97
374 msgid "Vicente Monteiro"
375 msgstr ""
376
377 #: ../cutscenes/credits.txt:98
378 msgid "Wuzzy2"
379 msgstr ""
380
381 #: ../cutscenes/credits.txt:99
382 msgid "Yannis Anthymidis"
383 msgstr ""
384
385 #: ../cutscenes/credits.txt:100
386 msgid "Zmicer Turok"
387 msgstr ""
388
389 #: ../cutscenes/credits.txt:103
101 #: ../cutscenes/credits.txt:108
390102 msgid "Distributors"
391103 msgstr ""
392104
393 #: ../cutscenes/credits.txt:105
394 msgid "Ablu"
395 msgstr ""
396
397 #: ../cutscenes/credits.txt:106
398 msgid "Feillyne"
399 msgstr ""
400
401 #: ../cutscenes/credits.txt:107
402 msgid "Jan-Hendrik Peters"
403 msgstr ""
404
405 #: ../cutscenes/credits.txt:109
406 msgid "miffe"
407 msgstr ""
408
409 #: ../cutscenes/credits.txt:112
105 #: ../cutscenes/credits.txt:117
410106 msgid "Special Thanks"
411107 msgstr ""
412108
413 #: ../cutscenes/credits.txt:116
109 #: ../cutscenes/credits.txt:121
414110 msgid "For giving constant feedback and testing:"
415111 msgstr ""
416112
417 #: ../cutscenes/credits.txt:117
418 msgid "Bart Kelsey"
419 msgstr ""
420
421 #: ../cutscenes/credits.txt:118
113 #: ../cutscenes/credits.txt:123
422114 msgid "The community at OpenGameArt"
423115 msgstr ""
424116
425 #: ../cutscenes/credits.txt:122
117 #: ../cutscenes/credits.txt:127
426118 msgid "For Tiled and the Flare map exporter:"
427119 msgstr ""
428
429 #: ../cutscenes/credits.txt:123
430 msgid "Thorbjørn Lindeijer"
431 msgstr ""
432
433 #: ../cutscenes/credits.txt:125
434 msgid "Ranie Jade Ramiso"
435 msgstr ""
22 #
33 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
44 # Translators:
5 # Justin Jacobs <jajdorkster@gmail.com>, 2018
5 # Justin Jacobs <jajdorkster@gmail.com>, 2019
66 #
77 msgid ""
88 msgstr ""
99 "Project-Id-Version: PACKAGE VERSION\n"
1010 "Report-Msgid-Bugs-To: \n"
11 "POT-Creation-Date: 2018-11-13 17:21+\n"
11 "POT-Creation-Date: 2019-07-29 09:34+\n"
1212 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
13 "Last-Translator: Justin Jacobs <jajdorkster@gmail.com>, 2018\n"
13 "Last-Translator: Justin Jacobs <jajdorkster@gmail.com>, 2019\n"
1414 "Language-Team: Polish (https://www.transifex.com/flareorg/teams/84925/pl/)\n"
1515 "MIME-Version: 1.0\n"
1616 "Content-Type: text/plain; charset=UTF-8\n"
4141 #: ../engine/damage_types.txt:4
4242 msgid "Increases the damage done with swords and other melee weapons."
4343 msgstr ""
44 "Zwiększa obrażenia zadawane przez miecze i inne bronie służące do walki w "
45 "zwarciu."
4446
4547 #: ../engine/damage_types.txt:5
4648 msgid "Melee Damage Min"
5759 #: ../engine/damage_types.txt:13
5860 msgid "Increases the damage done with bows and other ranged weapons."
5961 msgstr ""
62 "Zwiększa obrażenia zadawane przez łuki i inne bronie do walki dystansowej."
6063
6164 #: ../engine/damage_types.txt:14
6265 msgid "Ranged Damage Min"
7376 #: ../engine/damage_types.txt:22
7477 msgid "Increases the damage done with staves and other mental weapons."
7578 msgstr ""
79 "Zwiększa obrażenia zadawane przez kostury i inne bronie korzystające z mocy "
80 "umysłu."
7681
7782 #: ../engine/damage_types.txt:23
7883 msgid "Mental Damage Min"
9095 msgid "Lead Programmers"
9196 msgstr "Główni programiści"
9297
93 #: ../cutscenes/credits.txt:12
94 msgid "Clint Bellanger"
95 msgstr "Clint Bellanger"
96
97 #: ../cutscenes/credits.txt:13
98 msgid "Henrik Andersson"
99 msgstr "Henrik Andersson"
100
101 #: ../cutscenes/credits.txt:14
102 msgid "Igor Paliychuk"
103 msgstr "Igor Paliychuk"
104
105 #: ../cutscenes/credits.txt:15
106 msgid "Justin Jacobs"
107 msgstr "Justin Jacobs"
108
109 #: ../cutscenes/credits.txt:16
110 msgid "Stefan Beller"
111 msgstr "Stefan Beller"
112
113 #: ../cutscenes/credits.txt:17
114 msgid "Thane Brimhall"
115 msgstr "Thane Brimhall"
116
11798 #: ../cutscenes/credits.txt:20
11899 msgid "Programmers"
119100 msgstr "Programiści"
120
121 #: ../cutscenes/credits.txt:22
122 msgid "Andrew Engelbrecht"
123 msgstr "Andrew Engelbrecht"
124
125 #: ../cutscenes/credits.txt:23
126 msgid "Anton Golov"
127 msgstr "Anton Golov"
128
129 #: ../cutscenes/credits.txt:24
130 msgid "Artur Rojek"
131 msgstr "Artur Rojek"
132
133 #: ../cutscenes/credits.txt:25
134 msgid "blazindragon"
135 msgstr "blazindragon"
136
137 #: ../cutscenes/credits.txt:26
138 msgid "Bonbadil"
139 msgstr "Bonbadil"
140
141 #: ../cutscenes/credits.txt:27
142 msgid "Chris Oelmueller"
143 msgstr "Chris Oelmueller"
144
145 #: ../cutscenes/credits.txt:28
146 msgid "David Bariod"
147 msgstr "David Bariod"
148
149 #: ../cutscenes/credits.txt:29
150 msgid "Daniel Santos"
151 msgstr "Daniel Santos"
152
153 #: ../cutscenes/credits.txt:30
154 msgid "Gallaecio"
155 msgstr "Gallaecio"
156
157 #: ../cutscenes/credits.txt:31
158 msgid "Joseph Bleu"
159 msgstr "Joseph Bleu"
160
161 #: ../cutscenes/credits.txt:32
162 msgid "Juan PabloTamayo"
163 msgstr "Juan PabloTamayo"
164
165 #: ../cutscenes/credits.txt:33
166 msgid "Kitano"
167 msgstr "Kitano"
168
169 #: ../cutscenes/credits.txt:34
170 msgid "Kyle Belanger"
171 msgstr "Kyle Belanger"
172
173 #: ../cutscenes/credits.txt:35
174 msgid "LongerDev"
175 msgstr "LongerDev"
176
177 #: ../cutscenes/credits.txt:36
178 msgid "Manuel A. Fernandez Montecelo"
179 msgstr "Manuel A. Fernandez Montecelo"
180
181 #: ../cutscenes/credits.txt:37
182 msgid "Matthew Krohn"
183 msgstr "Matthew Krohn"
184
185 #: ../cutscenes/credits.txt:38
186 msgid "Nojan"
187 msgstr "Nojan"
188
189 #: ../cutscenes/credits.txt:39
190 msgid "Pavel Kirpichyov"
191 msgstr "Pavel Kirpichyov"
192
193 #: ../cutscenes/credits.txt:40
194 msgid "runtime-x86"
195 msgstr "runtime-x86"
196
197 #: ../cutscenes/credits.txt:41
198 msgid "Ryan Dansie"
199 msgstr "Ryan Dansie"
200101
201102 #: ../cutscenes/credits.txt:44
202103 msgid "Default Art"
206107 msgid "Translators"
207108 msgstr "Tłumacze"
208109
209 #: ../cutscenes/credits.txt:51
210 msgid "Ademaro"
211 msgstr ""
212
213 #: ../cutscenes/credits.txt:52
214 msgid "Adrian Chaves Fernandez"
215 msgstr "Adrian Chaves Fernandez"
216
217 #: ../cutscenes/credits.txt:53
218 msgid "Andrea Ranaldi"
219 msgstr "Andrea Ranaldi"
220
221 #: ../cutscenes/credits.txt:54
222 msgid "Andreas Berheim Brudin"
223 msgstr "Andreas Berheim Brudin"
224
225 #: ../cutscenes/credits.txt:55
226 msgid "Bas Doodeman"
227 msgstr "Bas Doodeman"
228
229 #: ../cutscenes/credits.txt:57
230 msgid "Carlos Sanchez"
231 msgstr "Carlos Sanchez"
232
233 #: ../cutscenes/credits.txt:59
234 msgid "Christoph J. Thompson"
235 msgstr "Christoph J. Thompson"
236
237 #: ../cutscenes/credits.txt:60
238 msgid "Denis Lysenko"
239 msgstr "Denis Lysenko"
240
241 #: ../cutscenes/credits.txt:61
242 msgid "Diego J. Romero López"
243 msgstr "Diego J. Romero López"
244
245 #: ../cutscenes/credits.txt:62
246 msgid "dumaosen"
247 msgstr ""
248
249 #: ../cutscenes/credits.txt:63
250 msgid "Emil"
251 msgstr ""
252
253 #: ../cutscenes/credits.txt:64
254 msgid "Eric R"
255 msgstr ""
256
257 #: ../cutscenes/credits.txt:65
258 msgid "Evgen Pavlov"
259 msgstr "Evgen Pavlov"
260
261 #: ../cutscenes/credits.txt:66
262 msgid "Fabio Loli"
263 msgstr ""
264
265 #: ../cutscenes/credits.txt:67
266 msgid "Gianfranco Del Borrello"
267 msgstr "Gianfranco Del Borrello"
268
269 #: ../cutscenes/credits.txt:68
270 msgid "Giovanni Dalla Torre"
271 msgstr "Giovanni Dalla Torre"
272
273 #: ../cutscenes/credits.txt:69
274 msgid "GunChleoc"
275 msgstr "GunChleoc"
276
277 #: ../cutscenes/credits.txt:70
278 msgid "Hans Joachim Desserud"
279 msgstr "Hans Joachim Desserud"
280
281 #: ../cutscenes/credits.txt:71
282 msgid "hark34"
283 msgstr ""
284
285 #: ../cutscenes/credits.txt:73
286 msgid "Janet Hunt"
287 msgstr "Janet Hunt"
288
289 #: ../cutscenes/credits.txt:74
290 msgid "Juan Pablo Tamayo"
291 msgstr "Juan Pablo Tamayo"
292
293 #: ../cutscenes/credits.txt:75
294 msgid "losine"
295 msgstr "losine"
296
297 #: ../cutscenes/credits.txt:76
298 msgid "Marc Tormo i Bochaca"
299 msgstr ""
300
301 #: ../cutscenes/credits.txt:77
302 msgid "Michael Papageorgiou"
303 msgstr "Michael Papageorgiou"
304
305 #: ../cutscenes/credits.txt:78
306 msgid "Mikhail Karalevich"
307 msgstr "Mikhail Karalevich"
308
309 #: ../cutscenes/credits.txt:79
310 msgid "Miro Jánošík"
311 msgstr "Miro Jánošík"
312
313 #: ../cutscenes/credits.txt:80
314 msgid "Mykola Franchuk"
315 msgstr ""
316
317 #: ../cutscenes/credits.txt:81
318 msgid "MOB2"
319 msgstr "MOB2"
320
321 #: ../cutscenes/credits.txt:82
322 msgid "Morgan Strauss"
323 msgstr "Morgan Strauss"
324
325 #: ../cutscenes/credits.txt:83
326 msgid "Nea Retrogamer"
327 msgstr "Nea Retrogamer"
328
329 #: ../cutscenes/credits.txt:84
330 msgid "Nguyễn Gia Phong"
331 msgstr ""
332
333 #: ../cutscenes/credits.txt:85
334 msgid "Nikita Vanku"
335 msgstr "Nikita Vanku"
336
337 #: ../cutscenes/credits.txt:86
338 msgid "Paul Wortmann"
339 msgstr "Paul Wortmann"
340
341 #: ../cutscenes/credits.txt:87
342 msgid "Pawel Puszczynski"
343 msgstr "Paweł Puszczyński"
344
345 #: ../cutscenes/credits.txt:88
346 msgid "Quentin Stievenart"
347 msgstr "Quentin Stievenart"
348
349 #: ../cutscenes/credits.txt:89
350 msgid "Rui"
351 msgstr "Rui"
352
353 #: ../cutscenes/credits.txt:90
354 msgid "Sergey Basalaev"
355 msgstr "Sergey Basalaev"
356
357 #: ../cutscenes/credits.txt:91
358 msgid "Sergiy Borodych"
359 msgstr "Sergiy Borodych"
360
361 #: ../cutscenes/credits.txt:93
362 msgid "Stefano Peris"
363 msgstr "Stefano Peris"
364
365 #: ../cutscenes/credits.txt:94
366 msgid "sujiniku"
367 msgstr "sujiniku"
368
369 #: ../cutscenes/credits.txt:95
370 msgid "Thomas Glamsch"
371 msgstr "Thomas Glamsch"
372
373 #: ../cutscenes/credits.txt:96
374 msgid "Timo Sievänen"
375 msgstr "Timo Sievänen"
376
377 #: ../cutscenes/credits.txt:97
378 msgid "Vicente Monteiro"
379 msgstr ""
380
381 #: ../cutscenes/credits.txt:98
382 msgid "Wuzzy2"
383 msgstr "Wuzzy2"
384
385 #: ../cutscenes/credits.txt:99
386 msgid "Yannis Anthymidis"
387 msgstr "Yannis Anthymidis"
388
389 #: ../cutscenes/credits.txt:100
390 msgid "Zmicer Turok"
391 msgstr ""
392
393 #: ../cutscenes/credits.txt:103
110 #: ../cutscenes/credits.txt:108
394111 msgid "Distributors"
395112 msgstr "Dystrybutorzy"
396113
397 #: ../cutscenes/credits.txt:105
398 msgid "Ablu"
399 msgstr "Ablu"
400
401 #: ../cutscenes/credits.txt:106
402 msgid "Feillyne"
403 msgstr "Feillyne"
404
405 #: ../cutscenes/credits.txt:107
406 msgid "Jan-Hendrik Peters"
407 msgstr "Jan-Hendrik Peters"
408
409 #: ../cutscenes/credits.txt:109
410 msgid "miffe"
411 msgstr "miffe"
412
413 #: ../cutscenes/credits.txt:112
114 #: ../cutscenes/credits.txt:117
414115 msgid "Special Thanks"
415116 msgstr "Specjalne podziękowania"
416117
417 #: ../cutscenes/credits.txt:116
118 #: ../cutscenes/credits.txt:121
418119 msgid "For giving constant feedback and testing:"
419120 msgstr "Za nieustające wsparcie i testowanie:"
420121
421 #: ../cutscenes/credits.txt:117
422 msgid "Bart Kelsey"
423 msgstr "Bart Kelsey"
424
425 #: ../cutscenes/credits.txt:118
122 #: ../cutscenes/credits.txt:123
426123 msgid "The community at OpenGameArt"
427124 msgstr "Społeczność OpenGameArt"
428125
429 #: ../cutscenes/credits.txt:122
126 #: ../cutscenes/credits.txt:127
430127 msgid "For Tiled and the Flare map exporter:"
431128 msgstr "Za Tiled i eksporter map Flare:"
432
433 #: ../cutscenes/credits.txt:123
434 msgid "Thorbjørn Lindeijer"
435 msgstr "Thorbjørn Lindeijer"
436
437 #: ../cutscenes/credits.txt:125
438 msgid "Ranie Jade Ramiso"
439 msgstr "Ranie Jade Ramiso"
55 msgstr ""
66 "Project-Id-Version: PACKAGE VERSION\n"
77 "Report-Msgid-Bugs-To: \n"
8 "POT-Creation-Date: 2018-11-17 21:50+\n"
8 "POT-Creation-Date: 2020-05-20 16:39+\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1111 "Language-Team: LANGUAGE <LL@li.org>\n"
8686 msgid "Lead Programmers"
8787 msgstr ""
8888
89 #: ../cutscenes/credits.txt:12
90 msgid "Clint Bellanger"
91 msgstr ""
92
93 #: ../cutscenes/credits.txt:13
94 msgid "Henrik Andersson"
95 msgstr ""
96
97 #: ../cutscenes/credits.txt:14
98 msgid "Igor Paliychuk"
99 msgstr ""
100
101 #: ../cutscenes/credits.txt:15
102 msgid "Justin Jacobs"
103 msgstr ""
104
105 #: ../cutscenes/credits.txt:16
106 msgid "Stefan Beller"
107 msgstr ""
108
109 #: ../cutscenes/credits.txt:17
110 msgid "Thane Brimhall"
111 msgstr ""
112
11389 #: ../cutscenes/credits.txt:20
11490 msgid "Programmers"
11591 msgstr ""
11692
117 #: ../cutscenes/credits.txt:22
118 msgid "Andrew Engelbrecht"
119 msgstr ""
120
121 #: ../cutscenes/credits.txt:23
122 msgid "Anton Golov"
123 msgstr ""
124
125 #: ../cutscenes/credits.txt:24
126 msgid "Artur Rojek"
127 msgstr ""
128
129 #: ../cutscenes/credits.txt:25
130 msgid "blazindragon"
131 msgstr ""
132
133 #: ../cutscenes/credits.txt:26
134 msgid "Bonbadil"
135 msgstr ""
136
137 #: ../cutscenes/credits.txt:27
138 msgid "Chris Oelmueller"
139 msgstr ""
140
141 #: ../cutscenes/credits.txt:28
142 msgid "David Bariod"
143 msgstr ""
144
145 #: ../cutscenes/credits.txt:29
146 msgid "Daniel Santos"
147 msgstr ""
148
149 #: ../cutscenes/credits.txt:30
150 msgid "Gallaecio"
151 msgstr ""
152
153 #: ../cutscenes/credits.txt:31
154 msgid "Joseph Bleu"
155 msgstr ""
156
157 #: ../cutscenes/credits.txt:32
158 msgid "Juan PabloTamayo"
159 msgstr ""
160
161 #: ../cutscenes/credits.txt:33
162 msgid "Kitano"
163 msgstr ""
164
165 #: ../cutscenes/credits.txt:34
166 msgid "Kyle Belanger"
167 msgstr ""
168
169 #: ../cutscenes/credits.txt:35
170 msgid "LongerDev"
171 msgstr ""
172
173 #: ../cutscenes/credits.txt:36
174 msgid "Manuel A. Fernandez Montecelo"
175 msgstr ""
176
177 #: ../cutscenes/credits.txt:37
178 msgid "Matthew Krohn"
179 msgstr ""
180
181 #: ../cutscenes/credits.txt:38
182 msgid "Nojan"
183 msgstr ""
184
185 #: ../cutscenes/credits.txt:39
186 msgid "Pavel Kirpichyov"
187 msgstr ""
188
189 #: ../cutscenes/credits.txt:40
190 msgid "runtime-x86"
191 msgstr ""
192
193 #: ../cutscenes/credits.txt:41
194 msgid "Ryan Dansie"
195 msgstr ""
196
197 #: ../cutscenes/credits.txt:44
93 #: ../cutscenes/credits.txt:48
19894 msgid "Default Art"
19995 msgstr ""
20096
201 #: ../cutscenes/credits.txt:49
97 #: ../cutscenes/credits.txt:53
20298 msgid "Translators"
20399 msgstr ""
204100
205 #: ../cutscenes/credits.txt:51
206 msgid "Ademaro"
207 msgstr ""
208
209 #: ../cutscenes/credits.txt:52
210 msgid "Adrian Chaves Fernandez"
211 msgstr ""
212
213 #: ../cutscenes/credits.txt:53
214 msgid "Andrea Ranaldi"
215 msgstr ""
216
217 #: ../cutscenes/credits.txt:54
218 msgid "Andreas Berheim Brudin"
219 msgstr ""
220
221 #: ../cutscenes/credits.txt:55
222 msgid "Bas Doodeman"
223 msgstr ""
224
225 #: ../cutscenes/credits.txt:57
226 msgid "Carlos Sanchez"
227 msgstr ""
228
229 #: ../cutscenes/credits.txt:59
230 msgid "Christoph J. Thompson"
231 msgstr ""
232
233 #: ../cutscenes/credits.txt:60
234 msgid "Denis Lysenko"
235 msgstr ""
236
237 #: ../cutscenes/credits.txt:61
238 msgid "Diego J. Romero López"
239 msgstr ""
240
241 #: ../cutscenes/credits.txt:62
242 msgid "dumaosen"
243 msgstr ""
244
245 #: ../cutscenes/credits.txt:63
246 msgid "Emil"
247 msgstr ""
248
249 #: ../cutscenes/credits.txt:64
250 msgid "Eric R"
251 msgstr ""
252
253 #: ../cutscenes/credits.txt:65
254 msgid "Evgen Pavlov"
255 msgstr ""
256
257 #: ../cutscenes/credits.txt:66
258 msgid "Fabio Loli"
259 msgstr ""
260
261 #: ../cutscenes/credits.txt:67
262 msgid "Gianfranco Del Borrello"
263 msgstr ""
264
265 #: ../cutscenes/credits.txt:68
266 msgid "Giovanni Dalla Torre"
267 msgstr ""
268
269 #: ../cutscenes/credits.txt:69
270 msgid "GunChleoc"
271 msgstr ""
272
273 #: ../cutscenes/credits.txt:70
274 msgid "Hans Joachim Desserud"
275 msgstr ""
276
277 #: ../cutscenes/credits.txt:71
278 msgid "hark34"
279 msgstr ""
280
281 #: ../cutscenes/credits.txt:73
282 msgid "Janet Hunt"
283 msgstr ""
284
285 #: ../cutscenes/credits.txt:74
286 msgid "Juan Pablo Tamayo"
287 msgstr ""
288
289 #: ../cutscenes/credits.txt:75
290 msgid "losine"
291 msgstr ""
292
293 #: ../cutscenes/credits.txt:76
294 msgid "Marc Tormo i Bochaca"
295 msgstr ""
296
297 #: ../cutscenes/credits.txt:77
298 msgid "Michael Papageorgiou"
299 msgstr ""
300
301 #: ../cutscenes/credits.txt:78
302 msgid "Mikhail Karalevich"
303 msgstr ""
304
305 #: ../cutscenes/credits.txt:79
306 msgid "Miro Jánošík"
307 msgstr ""
308
309 #: ../cutscenes/credits.txt:80
310 msgid "Mykola Franchuk"
311 msgstr ""
312
313 #: ../cutscenes/credits.txt:81
314 msgid "MOB2"
315 msgstr ""
316
317 #: ../cutscenes/credits.txt:82
318 msgid "Morgan Strauss"
319 msgstr ""
320
321 #: ../cutscenes/credits.txt:83
322 msgid "Nea Retrogamer"
323 msgstr ""
324
325 #: ../cutscenes/credits.txt:84
326 msgid "Nguyễn Gia Phong"
327 msgstr ""
328
329 #: ../cutscenes/credits.txt:85
330 msgid "Nikita Vanku"
331 msgstr ""
332
333 #: ../cutscenes/credits.txt:86
334 msgid "Paul Wortmann"
335 msgstr ""
336
337 #: ../cutscenes/credits.txt:87
338 msgid "Pawel Puszczynski"
339 msgstr ""
340
341 #: ../cutscenes/credits.txt:88
342 msgid "Quentin Stievenart"
343 msgstr ""
344
345 #: ../cutscenes/credits.txt:89
346 msgid "Rui"
347 msgstr ""
348
349 #: ../cutscenes/credits.txt:90
350 msgid "Sergey Basalaev"
351 msgstr ""
352
353 #: ../cutscenes/credits.txt:91
354 msgid "Sergiy Borodych"
355 msgstr ""
356
357 #: ../cutscenes/credits.txt:93
358 msgid "Stefano Peris"
359 msgstr ""
360
361 #: ../cutscenes/credits.txt:94
362 msgid "sujiniku"
363 msgstr ""
364
365 #: ../cutscenes/credits.txt:95
366 msgid "Thomas Glamsch"
367 msgstr ""
368
369 #: ../cutscenes/credits.txt:96
370 msgid "Timo Sievänen"
371 msgstr ""
372
373 #: ../cutscenes/credits.txt:97
374 msgid "Vicente Monteiro"
375 msgstr ""
376
377 #: ../cutscenes/credits.txt:98
378 msgid "Wuzzy2"
379 msgstr ""
380
381 #: ../cutscenes/credits.txt:99
382 msgid "Yannis Anthymidis"
383 msgstr ""
384
385 #: ../cutscenes/credits.txt:100
386 msgid "Zmicer Turok"
387 msgstr ""
388
389 #: ../cutscenes/credits.txt:103
101 #: ../cutscenes/credits.txt:112
390102 msgid "Distributors"
391103 msgstr ""
392104
393 #: ../cutscenes/credits.txt:105
394 msgid "Ablu"
395 msgstr ""
396
397 #: ../cutscenes/credits.txt:106
398 msgid "Feillyne"
399 msgstr ""
400
401 #: ../cutscenes/credits.txt:107
402 msgid "Jan-Hendrik Peters"
403 msgstr ""
404
405 #: ../cutscenes/credits.txt:109
406 msgid "miffe"
407 msgstr ""
408
409 #: ../cutscenes/credits.txt:112
105 #: ../cutscenes/credits.txt:121
410106 msgid "Special Thanks"
411107 msgstr ""
412108
413 #: ../cutscenes/credits.txt:116
109 #: ../cutscenes/credits.txt:125
414110 msgid "For giving constant feedback and testing:"
415111 msgstr ""
416112
417 #: ../cutscenes/credits.txt:117
418 msgid "Bart Kelsey"
419 msgstr ""
420
421 #: ../cutscenes/credits.txt:118
113 #: ../cutscenes/credits.txt:127
422114 msgid "The community at OpenGameArt"
423115 msgstr ""
424116
425 #: ../cutscenes/credits.txt:122
117 #: ../cutscenes/credits.txt:131
426118 msgid "For Tiled and the Flare map exporter:"
427119 msgstr ""
428120
429 #: ../cutscenes/credits.txt:123
430 msgid "Thorbjørn Lindeijer"
431 msgstr ""
432
433 #: ../cutscenes/credits.txt:125
434 msgid "Ranie Jade Ramiso"
435 msgstr ""
436
88 msgstr ""
99 "Project-Id-Version: PACKAGE VERSION\n"
1010 "Report-Msgid-Bugs-To: \n"
11 "POT-Creation-Date: 2018-11-14 00:57+\n"
11 "POT-Creation-Date: 2019-07-29 09:34+\n"
1212 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1313 "Last-Translator: Rui <xymarior@yandex.com>, 2018\n"
1414 "Language-Team: Portuguese (https://www.transifex.com/flareorg/teams/84925/pt/)\n"
9191 msgid "Lead Programmers"
9292 msgstr "Programadores Principais"
9393
94 #: ../cutscenes/credits.txt:12
95 msgid "Clint Bellanger"
96 msgstr "Clint Bellanger"
97
98 #: ../cutscenes/credits.txt:13
99 msgid "Henrik Andersson"
100 msgstr "Henrik Andersson"
101
102 #: ../cutscenes/credits.txt:14
103 msgid "Igor Paliychuk"
104 msgstr "Igor Paliychuk"
105
106 #: ../cutscenes/credits.txt:15
107 msgid "Justin Jacobs"
108 msgstr "Justin Jacobs"
109
110 #: ../cutscenes/credits.txt:16
111 msgid "Stefan Beller"
112 msgstr "Stefan Beller"
113
114 #: ../cutscenes/credits.txt:17
115 msgid "Thane Brimhall"
116 msgstr "Thane Brimhall"
117
11894 #: ../cutscenes/credits.txt:20
11995 msgid "Programmers"
12096 msgstr "Programadores"
121
122 #: ../cutscenes/credits.txt:22
123 msgid "Andrew Engelbrecht"
124 msgstr "Andrew Engelbrecht"
125
126 #: ../cutscenes/credits.txt:23
127 msgid "Anton Golov"
128 msgstr "Anton Golov"
129
130 #: ../cutscenes/credits.txt:24
131 msgid "Artur Rojek"
132 msgstr "Artur Rojek"
133
134 #: ../cutscenes/credits.txt:25
135 msgid "blazindragon"
136 msgstr "blazindragon"
137
138 #: ../cutscenes/credits.txt:26
139 msgid "Bonbadil"
140 msgstr "Bonbadil"
141
142 #: ../cutscenes/credits.txt:27
143 msgid "Chris Oelmueller"
144 msgstr "Chris Oelmueller"
145
146 #: ../cutscenes/credits.txt:28
147 msgid "David Bariod"
148 msgstr "David Bariod"
149
150 #: ../cutscenes/credits.txt:29
151 msgid "Daniel Santos"
152 msgstr "Daniel Santos"
153
154 #: ../cutscenes/credits.txt:30
155 msgid "Gallaecio"
156 msgstr "Gallaecio"
157
158 #: ../cutscenes/credits.txt:31
159 msgid "Joseph Bleu"
160 msgstr "Joseph Bleu"
161
162 #: ../cutscenes/credits.txt:32
163 msgid "Juan PabloTamayo"
164 msgstr "Juan PabloTamayo"
165
166 #: ../cutscenes/credits.txt:33
167 msgid "Kitano"
168 msgstr "Kitano"
169
170 #: ../cutscenes/credits.txt:34
171 msgid "Kyle Belanger"
172 msgstr "Kyle Belanger"
173
174 #: ../cutscenes/credits.txt:35
175 msgid "LongerDev"
176 msgstr "LongerDev"
177
178 #: ../cutscenes/credits.txt:36
179 msgid "Manuel A. Fernandez Montecelo"
180 msgstr "Manuel A. Fernandez Montecelo"
181
182 #: ../cutscenes/credits.txt:37
183 msgid "Matthew Krohn"
184 msgstr "Matthew Krohn"
185
186 #: ../cutscenes/credits.txt:38
187 msgid "Nojan"
188 msgstr "Nojan"
189
190 #: ../cutscenes/credits.txt:39
191 msgid "Pavel Kirpichyov"
192 msgstr "Pavel Kirpichyov"
193
194 #: ../cutscenes/credits.txt:40
195 msgid "runtime-x86"
196 msgstr "runtime-x86"
197
198 #: ../cutscenes/credits.txt:41
199 msgid "Ryan Dansie"
200 msgstr "Ryan Dansie"
20197
20298 #: ../cutscenes/credits.txt:44
20399 msgid "Default Art"
207103 msgid "Translators"
208104 msgstr "Tradutores"
209105
210 #: ../cutscenes/credits.txt:51
211 msgid "Ademaro"
212 msgstr "Ademaro"
213
214 #: ../cutscenes/credits.txt:52
215 msgid "Adrian Chaves Fernandez"
216 msgstr "Adrian Chaves Fernandez"
217
218 #: ../cutscenes/credits.txt:53
219 msgid "Andrea Ranaldi"
220 msgstr "Andrea Ranaldi"
221
222 #: ../cutscenes/credits.txt:54
223 msgid "Andreas Berheim Brudin"
224 msgstr "Andreas Berheim Brudin"
225
226 #: ../cutscenes/credits.txt:55
227 msgid "Bas Doodeman"
228 msgstr "Bas Doodeman"
229
230 #: ../cutscenes/credits.txt:57
231 msgid "Carlos Sanchez"
232 msgstr "Carlos Sanchez"
233
234 #: ../cutscenes/credits.txt:59
235 msgid "Christoph J. Thompson"
236 msgstr "Christoph J. Thompson"
237
238 #: ../cutscenes/credits.txt:60
239 msgid "Denis Lysenko"
240 msgstr "Denis Lysenko"
241
242 #: ../cutscenes/credits.txt:61
243 msgid "Diego J. Romero López"
244 msgstr "Diego J. Romero López"
245
246 #: ../cutscenes/credits.txt:62
247 msgid "dumaosen"
248 msgstr "dumaosen"
249
250 #: ../cutscenes/credits.txt:63
251 msgid "Emil"
252 msgstr "Emil"
253
254 #: ../cutscenes/credits.txt:64
255 msgid "Eric R"
256 msgstr "Eric R"
257
258 #: ../cutscenes/credits.txt:65
259 msgid "Evgen Pavlov"
260 msgstr "Evgen Pavlov"
261
262 #: ../cutscenes/credits.txt:66
263 msgid "Fabio Loli"
264 msgstr "Fabio Loli"
265
266 #: ../cutscenes/credits.txt:67
267 msgid "Gianfranco Del Borrello"
268 msgstr "Gianfranco Del Borrello"
269
270 #: ../cutscenes/credits.txt:68
271 msgid "Giovanni Dalla Torre"
272 msgstr "Giovanni Dalla Torre"
273
274 #: ../cutscenes/credits.txt:69
275 msgid "GunChleoc"
276 msgstr "GunChleoc"
277
278 #: ../cutscenes/credits.txt:70
279 msgid "Hans Joachim Desserud"
280 msgstr "Hans Joachim Desserud"
281
282 #: ../cutscenes/credits.txt:71
283 msgid "hark34"
284 msgstr "hark34"
285
286 #: ../cutscenes/credits.txt:73
287 msgid "Janet Hunt"
288 msgstr "Janet Hunt"
289
290 #: ../cutscenes/credits.txt:74
291 msgid "Juan Pablo Tamayo"
292 msgstr "Juan Pablo Tamayo"
293
294 #: ../cutscenes/credits.txt:75
295 msgid "losine"
296 msgstr "losine"
297
298 #: ../cutscenes/credits.txt:76
299 msgid "Marc Tormo i Bochaca"
300 msgstr "Marc Tormo i Bochaca"
301
302 #: ../cutscenes/credits.txt:77
303 msgid "Michael Papageorgiou"
304 msgstr "Michael Papageorgiou"
305
306 #: ../cutscenes/credits.txt:78
307 msgid "Mikhail Karalevich"
308 msgstr "Mikhail Karalevich"
309
310 #: ../cutscenes/credits.txt:79
311 msgid "Miro Jánošík"
312 msgstr "Miro Jánošík"
313
314 #: ../cutscenes/credits.txt:80
315 msgid "Mykola Franchuk"
316 msgstr "Mykola Franchuk"
317
318 #: ../cutscenes/credits.txt:81
319 msgid "MOB2"
320 msgstr "MOB2"
321
322 #: ../cutscenes/credits.txt:82
323 msgid "Morgan Strauss"
324 msgstr "Morgan Strauss"
325
326 #: ../cutscenes/credits.txt:83
327 msgid "Nea Retrogamer"
328 msgstr "Nea Retrogamer"
329
330 #: ../cutscenes/credits.txt:84
331 msgid "Nguyễn Gia Phong"
332 msgstr "Nguyễn Gia Phong"
333
334 #: ../cutscenes/credits.txt:85
335 msgid "Nikita Vanku"
336 msgstr "Nikita Vanku"
337
338 #: ../cutscenes/credits.txt:86
339 msgid "Paul Wortmann"
340 msgstr "Paul Wortmann"
341
342 #: ../cutscenes/credits.txt:87
343 msgid "Pawel Puszczynski"
344 msgstr "Pawel Puszczynski"
345
346 #: ../cutscenes/credits.txt:88
347 msgid "Quentin Stievenart"
348 msgstr "Quentin Stievenart"
349
350 #: ../cutscenes/credits.txt:89
351 msgid "Rui"
352 msgstr "Rui (xendez)"
353
354 #: ../cutscenes/credits.txt:90
355 msgid "Sergey Basalaev"
356 msgstr "Sergey Basalaev"
357
358 #: ../cutscenes/credits.txt:91
359 msgid "Sergiy Borodych"
360 msgstr "Sergiy Borodych"
361
362 #: ../cutscenes/credits.txt:93
363 msgid "Stefano Peris"
364 msgstr "Stefano Peris"
365
366 #: ../cutscenes/credits.txt:94
367 msgid "sujiniku"
368 msgstr "sujiniku"
369
370 #: ../cutscenes/credits.txt:95
371 msgid "Thomas Glamsch"
372 msgstr "Thomas Glamsch"
373
374 #: ../cutscenes/credits.txt:96
375 msgid "Timo Sievänen"
376 msgstr "Timo Sievänen"
377
378 #: ../cutscenes/credits.txt:97
379 msgid "Vicente Monteiro"
380 msgstr "Vicente Monteiro"
381
382 #: ../cutscenes/credits.txt:98
383 msgid "Wuzzy2"
384 msgstr "Wuzzy2"
385
386 #: ../cutscenes/credits.txt:99
387 msgid "Yannis Anthymidis"
388 msgstr "Yannis Anthymidis"
389
390 #: ../cutscenes/credits.txt:100
391 msgid "Zmicer Turok"
392 msgstr "Zmicer Turok"
393
394 #: ../cutscenes/credits.txt:103
106 #: ../cutscenes/credits.txt:108
395107 msgid "Distributors"
396108 msgstr "Distribuidores"
397109
398 #: ../cutscenes/credits.txt:105
399 msgid "Ablu"
400 msgstr "Ablu"
401
402 #: ../cutscenes/credits.txt:106
403 msgid "Feillyne"
404 msgstr "Feillyne"
405
406 #: ../cutscenes/credits.txt:107
407 msgid "Jan-Hendrik Peters"
408 msgstr "Jan-Hendrik Peters"
409
410 #: ../cutscenes/credits.txt:109
411 msgid "miffe"
412 msgstr "miffe"
413
414 #: ../cutscenes/credits.txt:112
110 #: ../cutscenes/credits.txt:117
415111 msgid "Special Thanks"
416112 msgstr "Agradecimento Especial"
417113
418 #: ../cutscenes/credits.txt:116
114 #: ../cutscenes/credits.txt:121
419115 msgid "For giving constant feedback and testing:"
420116 msgstr "Por fornecer opiniões constantes e testes:"
421117
422 #: ../cutscenes/credits.txt:117
423 msgid "Bart Kelsey"
424 msgstr "Bart Kelsey"
425
426 #: ../cutscenes/credits.txt:118
118 #: ../cutscenes/credits.txt:123
427119 msgid "The community at OpenGameArt"
428120 msgstr "A comunidade do OpenGameArt"
429121
430 #: ../cutscenes/credits.txt:122
122 #: ../cutscenes/credits.txt:127
431123 msgid "For Tiled and the Flare map exporter:"
432124 msgstr "Pelo Tiled e o exportador de mapas do Flare:"
433
434 #: ../cutscenes/credits.txt:123
435 msgid "Thorbjørn Lindeijer"
436 msgstr "Thorbjørn Lindeijer"
437
438 #: ../cutscenes/credits.txt:125
439 msgid "Ranie Jade Ramiso"
440 msgstr "Ranie Jade Ramiso"
33 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
44 # Translators:
55 # Vicente Monteiro, 2018
6 # Rui <xymarior@yandex.com>, 2018
76 #
87 msgid ""
98 msgstr ""
109 "Project-Id-Version: PACKAGE VERSION\n"
1110 "Report-Msgid-Bugs-To: \n"
12 "POT-Creation-Date: 2018-11-13 17:21+\n"
11 "POT-Creation-Date: 2019-07-29 09:34+\n"
1312 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
14 "Last-Translator: Rui <xymarior@yandex.com>, 2018\n"
13 "Last-Translator: Vicente Monteiro, 2018\n"
1514 "Language-Team: Portuguese (Brazil) (https://www.transifex.com/flareorg/teams/84925/pt_BR/)\n"
1615 "MIME-Version: 1.0\n"
1716 "Content-Type: text/plain; charset=UTF-8\n"
9190 msgid "Lead Programmers"
9291 msgstr "Programadores Principais"
9392
94 #: ../cutscenes/credits.txt:12
95 msgid "Clint Bellanger"
96 msgstr "Clint Bellanger"
97
98 #: ../cutscenes/credits.txt:13
99 msgid "Henrik Andersson"
100 msgstr "Henrik Andersson"
101
102 #: ../cutscenes/credits.txt:14
103 msgid "Igor Paliychuk"
104 msgstr "Igor Paliychuk"
105
106 #: ../cutscenes/credits.txt:15
107 msgid "Justin Jacobs"
108 msgstr "Justin Jacobs"
109
110 #: ../cutscenes/credits.txt:16
111 msgid "Stefan Beller"
112 msgstr "Stefan Beller"
113
114 #: ../cutscenes/credits.txt:17
115 msgid "Thane Brimhall"
116 msgstr "Thane Brimhall"
117
11893 #: ../cutscenes/credits.txt:20
11994 msgid "Programmers"
12095 msgstr "Programadores"
121
122 #: ../cutscenes/credits.txt:22
123 msgid "Andrew Engelbrecht"
124 msgstr "Andrew Engelbrecht"
125
126 #: ../cutscenes/credits.txt:23
127 msgid "Anton Golov"
128 msgstr "Anton Golov"
129
130 #: ../cutscenes/credits.txt:24
131 msgid "Artur Rojek"
132 msgstr "Artur Rojek"
133
134 #: ../cutscenes/credits.txt:25
135 msgid "blazindragon"
136 msgstr "blazindragon"
137
138 #: ../cutscenes/credits.txt:26
139 msgid "Bonbadil"
140 msgstr "Bonbadil"
141
142 #: ../cutscenes/credits.txt:27
143 msgid "Chris Oelmueller"
144 msgstr "Chris Oelmueller"
145
146 #: ../cutscenes/credits.txt:28
147 msgid "David Bariod"
148 msgstr "David Bariod"
149
150 #: ../cutscenes/credits.txt:29
151 msgid "Daniel Santos"
152 msgstr "Daniel Santos"
153
154 #: ../cutscenes/credits.txt:30
155 msgid "Gallaecio"
156 msgstr "Gallaecio"
157
158 #: ../cutscenes/credits.txt:31
159 msgid "Joseph Bleu"
160 msgstr "Joseph Bleu"
161
162 #: ../cutscenes/credits.txt:32
163 msgid "Juan PabloTamayo"
164 msgstr "Juan PabloTamayo"
165
166 #: ../cutscenes/credits.txt:33
167 msgid "Kitano"
168 msgstr "Kitano"
169
170 #: ../cutscenes/credits.txt:34
171 msgid "Kyle Belanger"
172 msgstr "Kyle Belanger"
173
174 #: ../cutscenes/credits.txt:35
175 msgid "LongerDev"
176 msgstr "LongerDev"
177
178 #: ../cutscenes/credits.txt:36
179 msgid "Manuel A. Fernandez Montecelo"
180 msgstr "Manuel A. Fernandez Montecelo"
181
182 #: ../cutscenes/credits.txt:37
183 msgid "Matthew Krohn"
184 msgstr "Matthew Krohn"
185
186 #: ../cutscenes/credits.txt:38
187 msgid "Nojan"
188 msgstr "Nojan"
189
190 #: ../cutscenes/credits.txt:39
191 msgid "Pavel Kirpichyov"
192 msgstr "Pavel Kirpichyov"
193
194 #: ../cutscenes/credits.txt:40
195 msgid "runtime-x86"
196 msgstr "runtime-x86"
197
198 #: ../cutscenes/credits.txt:41
199 msgid "Ryan Dansie"
200 msgstr "Ryan Dansie"
20196
20297 #: ../cutscenes/credits.txt:44
20398 msgid "Default Art"
207102 msgid "Translators"
208103 msgstr "Tradutores"
209104
210 #: ../cutscenes/credits.txt:51
211 msgid "Ademaro"
212 msgstr "Ademaro"
213
214 #: ../cutscenes/credits.txt:52
215 msgid "Adrian Chaves Fernandez"
216 msgstr "Adrian Chaves Fernandez"
217
218 #: ../cutscenes/credits.txt:53
219 msgid "Andrea Ranaldi"
220 msgstr "Andrea Ranaldi"
221
222 #: ../cutscenes/credits.txt:54
223 msgid "Andreas Berheim Brudin"
224 msgstr "Andreas Berheim Brudin"
225
226 #: ../cutscenes/credits.txt:55
227 msgid "Bas Doodeman"
228 msgstr "Bas Doodeman"
229
230 #: ../cutscenes/credits.txt:57
231 msgid "Carlos Sanchez"
232 msgstr "Carlos Sanchez"
233
234 #: ../cutscenes/credits.txt:59
235 msgid "Christoph J. Thompson"
236 msgstr "Christoph J. Thompson"
237
238 #: ../cutscenes/credits.txt:60
239 msgid "Denis Lysenko"
240 msgstr "Denis Lysenko"
241
242 #: ../cutscenes/credits.txt:61
243 msgid "Diego J. Romero López"
244 msgstr "Diego J. Romero López"
245
246 #: ../cutscenes/credits.txt:62
247 msgid "dumaosen"
248 msgstr "dumaosen"
249
250 #: ../cutscenes/credits.txt:63
251 msgid "Emil"
252 msgstr "Emil"
253
254 #: ../cutscenes/credits.txt:64
255 msgid "Eric R"
256 msgstr "Eric R"
257
258 #: ../cutscenes/credits.txt:65
259 msgid "Evgen Pavlov"
260 msgstr "Evgen Pavlov"
261
262 #: ../cutscenes/credits.txt:66
263 msgid "Fabio Loli"
264 msgstr "Fabio Loli"
265
266 #: ../cutscenes/credits.txt:67
267 msgid "Gianfranco Del Borrello"
268 msgstr "Gianfranco Del Borrello"
269
270 #: ../cutscenes/credits.txt:68
271 msgid "Giovanni Dalla Torre"
272 msgstr "Giovanni Dalla Torre"
273
274 #: ../cutscenes/credits.txt:69
275 msgid "GunChleoc"
276 msgstr "GunChleoc"
277
278 #: ../cutscenes/credits.txt:70
279 msgid "Hans Joachim Desserud"
280 msgstr "Hans Joachim Desserud"
281
282 #: ../cutscenes/credits.txt:71
283 msgid "hark34"
284 msgstr "hark34"
285
286 #: ../cutscenes/credits.txt:73
287 msgid "Janet Hunt"
288 msgstr "Janet Hunt"
289
290 #: ../cutscenes/credits.txt:74
291 msgid "Juan Pablo Tamayo"
292 msgstr "Juan Pablo Tamayo"
293
294 #: ../cutscenes/credits.txt:75
295 msgid "losine"
296 msgstr "losine"
297
298 #: ../cutscenes/credits.txt:76
299 msgid "Marc Tormo i Bochaca"
300 msgstr ""
301
302 #: ../cutscenes/credits.txt:77
303 msgid "Michael Papageorgiou"
304 msgstr "Michael Papageorgiou"
305
306 #: ../cutscenes/credits.txt:78
307 msgid "Mikhail Karalevich"
308 msgstr "Mikhail Karalevich"
309
310 #: ../cutscenes/credits.txt:79
311 msgid "Miro Jánošík"
312 msgstr "Miro Jánošík"
313
314 #: ../cutscenes/credits.txt:80
315 msgid "Mykola Franchuk"
316 msgstr ""
317
318 #: ../cutscenes/credits.txt:81
319 msgid "MOB2"
320 msgstr "MOB2"
321
322 #: ../cutscenes/credits.txt:82
323 msgid "Morgan Strauss"
324 msgstr "Morgan Strauss"
325
326 #: ../cutscenes/credits.txt:83
327 msgid "Nea Retrogamer"
328 msgstr "Nea Retrogamer"
329
330 #: ../cutscenes/credits.txt:84
331 msgid "Nguyễn Gia Phong"
332 msgstr "Nguyễn Gia Phong"
333
334 #: ../cutscenes/credits.txt:85
335 msgid "Nikita Vanku"
336 msgstr "Nikita Vanku"
337
338 #: ../cutscenes/credits.txt:86
339 msgid "Paul Wortmann"
340 msgstr "Paul Wortmann"
341
342 #: ../cutscenes/credits.txt:87
343 msgid "Pawel Puszczynski"
344 msgstr "Pawel Puszczynski"
345
346 #: ../cutscenes/credits.txt:88
347 msgid "Quentin Stievenart"
348 msgstr "Quentin Stievenart"
349
350 #: ../cutscenes/credits.txt:89
351 msgid "Rui"
352 msgstr "Rui"
353
354 #: ../cutscenes/credits.txt:90
355 msgid "Sergey Basalaev"
356 msgstr "Sergey Basalaev"
357
358 #: ../cutscenes/credits.txt:91
359 msgid "Sergiy Borodych"
360 msgstr "Sergiy Borodych"
361
362 #: ../cutscenes/credits.txt:93
363 msgid "Stefano Peris"
364 msgstr "Stefano Peris"
365
366 #: ../cutscenes/credits.txt:94
367 msgid "sujiniku"
368 msgstr "sujiniku"
369
370 #: ../cutscenes/credits.txt:95
371 msgid "Thomas Glamsch"
372 msgstr "Thomas Glamsch"
373
374 #: ../cutscenes/credits.txt:96
375 msgid "Timo Sievänen"
376 msgstr "Timo Sievänen"
377
378 #: ../cutscenes/credits.txt:97
379 msgid "Vicente Monteiro"
380 msgstr "Vicente Monteiro"
381
382 #: ../cutscenes/credits.txt:98
383 msgid "Wuzzy2"
384 msgstr "Wuzzy2"
385
386 #: ../cutscenes/credits.txt:99
387 msgid "Yannis Anthymidis"
388 msgstr "Yannis Anthymidis"
389
390 #: ../cutscenes/credits.txt:100
391 msgid "Zmicer Turok"
392 msgstr "Zmicer Turok"
393
394 #: ../cutscenes/credits.txt:103
105 #: ../cutscenes/credits.txt:108
395106 msgid "Distributors"
396107 msgstr "Distribuidores"
397108
398 #: ../cutscenes/credits.txt:105
399 msgid "Ablu"
400 msgstr "Ablu"
401
402 #: ../cutscenes/credits.txt:106
403 msgid "Feillyne"
404 msgstr "Feillyne"
405
406 #: ../cutscenes/credits.txt:107
407 msgid "Jan-Hendrik Peters"
408 msgstr "Jan-Hendrik Peters"
409
410 #: ../cutscenes/credits.txt:109
411 msgid "miffe"
412 msgstr "miffe"
413
414 #: ../cutscenes/credits.txt:112
109 #: ../cutscenes/credits.txt:117
415110 msgid "Special Thanks"
416111 msgstr "Agradecimento Especial"
417112
418 #: ../cutscenes/credits.txt:116
113 #: ../cutscenes/credits.txt:121
419114 msgid "For giving constant feedback and testing:"
420115 msgstr "Por constantes sugestões e testes:"
421116
422 #: ../cutscenes/credits.txt:117
423 msgid "Bart Kelsey"
424 msgstr "Bart Kelsey"
425
426 #: ../cutscenes/credits.txt:118
117 #: ../cutscenes/credits.txt:123
427118 msgid "The community at OpenGameArt"
428119 msgstr "A comunidade do OpenGameArt:"
429120
430 #: ../cutscenes/credits.txt:122
121 #: ../cutscenes/credits.txt:127
431122 msgid "For Tiled and the Flare map exporter:"
432123 msgstr "Pelo Tiled editor e exportador de mapas do Flare:"
433
434 #: ../cutscenes/credits.txt:123
435 msgid "Thorbjørn Lindeijer"
436 msgstr "Thorbjørn Lindeijer"
437
438 #: ../cutscenes/credits.txt:125
439 msgid "Ranie Jade Ramiso"
440 msgstr "Ranie Jade Ramiso"
22 #
33 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
44 # Translators:
5 # Justin Jacobs <jajdorkster@gmail.com>, 2018
5 # Justin Jacobs <jajdorkster@gmail.com>, 2019
66 #
77 msgid ""
88 msgstr ""
99 "Project-Id-Version: PACKAGE VERSION\n"
1010 "Report-Msgid-Bugs-To: \n"
11 "POT-Creation-Date: 2018-11-13 17:21+\n"
11 "POT-Creation-Date: 2019-07-29 09:34+\n"
1212 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
13 "Last-Translator: Justin Jacobs <jajdorkster@gmail.com>, 2018\n"
13 "Last-Translator: Justin Jacobs <jajdorkster@gmail.com>, 2019\n"
1414 "Language-Team: Russian (https://www.transifex.com/flareorg/teams/84925/ru/)\n"
1515 "MIME-Version: 1.0\n"
1616 "Content-Type: text/plain; charset=UTF-8\n"
4040
4141 #: ../engine/damage_types.txt:4
4242 msgid "Increases the damage done with swords and other melee weapons."
43 msgstr ""
43 msgstr "Увеличивает урон мечом и другим оружием ближнего боя."
4444
4545 #: ../engine/damage_types.txt:5
4646 msgid "Melee Damage Min"
47 msgstr "Мин. Урон"
47 msgstr "Мин. Урон ближнего боя"
4848
4949 #: ../engine/damage_types.txt:6
5050 msgid "Melee Damage Max"
51 msgstr "Макс. Урон"
51 msgstr "Макс. Урон ближнего боя"
5252
5353 #: ../engine/damage_types.txt:12
5454 msgid "Ranged Damage"
5656
5757 #: ../engine/damage_types.txt:13
5858 msgid "Increases the damage done with bows and other ranged weapons."
59 msgstr ""
59 msgstr "Увеличивает урон из лука и другим оружием дальнего боя."
6060
6161 #: ../engine/damage_types.txt:14
6262 msgid "Ranged Damage Min"
63 msgstr "Мин. Урон"
63 msgstr "Мин. Урон дальнего боя"
6464
6565 #: ../engine/damage_types.txt:15
6666 msgid "Ranged Damage Max"
67 msgstr "Макс. Урон"
67 msgstr "Макс. Урон дальнего боя"
6868
6969 #: ../engine/damage_types.txt:21
7070 msgid "Mental Damage"
7272
7373 #: ../engine/damage_types.txt:22
7474 msgid "Increases the damage done with staves and other mental weapons."
75 msgstr ""
75 msgstr "Увеличивает урон посохом и другим оружием ментального урона."
7676
7777 #: ../engine/damage_types.txt:23
7878 msgid "Mental Damage Min"
79 msgstr "Мин. Урон"
79 msgstr "Мин. Ментальный урон"
8080
8181 #: ../engine/damage_types.txt:24
8282 msgid "Mental Damage Max"
83 msgstr "Макс. Урон"
83 msgstr "Макс. Ментальный урон"
8484
8585 #: ../cutscenes/credits.txt:7
8686 msgid "Flare Engine Credits"
9090 msgid "Lead Programmers"
9191 msgstr "Ведущие Программисты"
9292
93 #: ../cutscenes/credits.txt:12
94 msgid "Clint Bellanger"
95 msgstr "Clint Bellanger"
96
97 #: ../cutscenes/credits.txt:13
98 msgid "Henrik Andersson"
99 msgstr "Henrik Andersson"
100
101 #: ../cutscenes/credits.txt:14
102 msgid "Igor Paliychuk"
103 msgstr "Igor Paliychuk"
104
105 #: ../cutscenes/credits.txt:15
106 msgid "Justin Jacobs"
107 msgstr "Justin Jacobs"
108
109 #: ../cutscenes/credits.txt:16
110 msgid "Stefan Beller"
111 msgstr "Stefan Beller"
112
113 #: ../cutscenes/credits.txt:17
114 msgid "Thane Brimhall"
115 msgstr "Thane Brimhall"
116
11793 #: ../cutscenes/credits.txt:20
11894 msgid "Programmers"
11995 msgstr "Программисты"
120
121 #: ../cutscenes/credits.txt:22
122 msgid "Andrew Engelbrecht"
123 msgstr ""
124
125 #: ../cutscenes/credits.txt:23
126 msgid "Anton Golov"
127 msgstr "Anton Golov"
128
129 #: ../cutscenes/credits.txt:24
130 msgid "Artur Rojek"
131 msgstr "Artur Rojek"
132
133 #: ../cutscenes/credits.txt:25
134 msgid "blazindragon"
135 msgstr "blazindragon"
136
137 #: ../cutscenes/credits.txt:26
138 msgid "Bonbadil"
139 msgstr "Bonbadil"
140
141 #: ../cutscenes/credits.txt:27
142 msgid "Chris Oelmueller"
143 msgstr "Chris Oelmueller"
144
145 #: ../cutscenes/credits.txt:28
146 msgid "David Bariod"
147 msgstr "David Bariod"
148
149 #: ../cutscenes/credits.txt:29
150 msgid "Daniel Santos"
151 msgstr "Daniel Santos"
152
153 #: ../cutscenes/credits.txt:30
154 msgid "Gallaecio"
155 msgstr "Gallaecio"
156
157 #: ../cutscenes/credits.txt:31
158 msgid "Joseph Bleu"
159 msgstr "Joseph Bleu"
160
161 #: ../cutscenes/credits.txt:32
162 msgid "Juan PabloTamayo"
163 msgstr "Juan PabloTamayo"
164
165 #: ../cutscenes/credits.txt:33
166 msgid "Kitano"
167 msgstr "Kitano"
168
169 #: ../cutscenes/credits.txt:34
170 msgid "Kyle Belanger"
171 msgstr "Kyle Belanger"
172
173 #: ../cutscenes/credits.txt:35
174 msgid "LongerDev"
175 msgstr "LongerDev"
176
177 #: ../cutscenes/credits.txt:36
178 msgid "Manuel A. Fernandez Montecelo"
179 msgstr "Manuel A. Fernandez Montecelo"
180
181 #: ../cutscenes/credits.txt:37
182 msgid "Matthew Krohn"
183 msgstr "Matthew Krohn"
184
185 #: ../cutscenes/credits.txt:38
186 msgid "Nojan"
187 msgstr "Nojan"
188
189 #: ../cutscenes/credits.txt:39
190 msgid "Pavel Kirpichyov"
191 msgstr "Pavel Kirpichyov"
192
193 #: ../cutscenes/credits.txt:40
194 msgid "runtime-x86"
195 msgstr "runtime-x86"
196
197 #: ../cutscenes/credits.txt:41
198 msgid "Ryan Dansie"
199 msgstr "Ryan Dansie"
20096
20197 #: ../cutscenes/credits.txt:44
20298 msgid "Default Art"
206102 msgid "Translators"
207103 msgstr "Переводчики"
208104
209 #: ../cutscenes/credits.txt:51
210 msgid "Ademaro"
211 msgstr ""
212
213 #: ../cutscenes/credits.txt:52
214 msgid "Adrian Chaves Fernandez"
215 msgstr "Adrian Chaves Fernandez"
216
217 #: ../cutscenes/credits.txt:53
218 msgid "Andrea Ranaldi"
219 msgstr "Andrea Ranaldi"
220
221 #: ../cutscenes/credits.txt:54
222 msgid "Andreas Berheim Brudin"
223 msgstr "Andreas Berheim Brudin"
224
225 #: ../cutscenes/credits.txt:55
226 msgid "Bas Doodeman"
227 msgstr "Bas Doodeman"
228
229 #: ../cutscenes/credits.txt:57
230 msgid "Carlos Sanchez"
231 msgstr "Carlos Sanchez"
232
233 #: ../cutscenes/credits.txt:59
234 msgid "Christoph J. Thompson"
235 msgstr "Christoph J. Thompson"
236
237 #: ../cutscenes/credits.txt:60
238 msgid "Denis Lysenko"
239 msgstr ""
240
241 #: ../cutscenes/credits.txt:61
242 msgid "Diego J. Romero López"
243 msgstr ""
244
245 #: ../cutscenes/credits.txt:62
246 msgid "dumaosen"
247 msgstr ""
248
249 #: ../cutscenes/credits.txt:63
250 msgid "Emil"
251 msgstr ""
252
253 #: ../cutscenes/credits.txt:64
254 msgid "Eric R"
255 msgstr ""
256
257 #: ../cutscenes/credits.txt:65
258 msgid "Evgen Pavlov"
259 msgstr "Evgen Pavlov"
260
261 #: ../cutscenes/credits.txt:66
262 msgid "Fabio Loli"
263 msgstr ""
264
265 #: ../cutscenes/credits.txt:67
266 msgid "Gianfranco Del Borrello"
267 msgstr ""
268
269 #: ../cutscenes/credits.txt:68
270 msgid "Giovanni Dalla Torre"
271 msgstr "Giovanni Dalla Torre"
272
273 #: ../cutscenes/credits.txt:69
274 msgid "GunChleoc"
275 msgstr ""
276
277 #: ../cutscenes/credits.txt:70
278 msgid "Hans Joachim Desserud"
279 msgstr "Hans Joachim Desserud"
280
281 #: ../cutscenes/credits.txt:71
282 msgid "hark34"
283 msgstr ""
284
285 #: ../cutscenes/credits.txt:73
286 msgid "Janet Hunt"
287 msgstr ""
288
289 #: ../cutscenes/credits.txt:74
290 msgid "Juan Pablo Tamayo"
291 msgstr "Juan Pablo Tamayo"
292
293 #: ../cutscenes/credits.txt:75
294 msgid "losine"
295 msgstr "losine"
296
297 #: ../cutscenes/credits.txt:76
298 msgid "Marc Tormo i Bochaca"
299 msgstr ""
300
301 #: ../cutscenes/credits.txt:77
302 msgid "Michael Papageorgiou"
303 msgstr "Michael Papageorgiou"
304
305 #: ../cutscenes/credits.txt:78
306 msgid "Mikhail Karalevich"
307 msgstr "Mikhail Karalevich"
308
309 #: ../cutscenes/credits.txt:79
310 msgid "Miro Jánošík"
311 msgstr "Miro Jánošík"
312
313 #: ../cutscenes/credits.txt:80
314 msgid "Mykola Franchuk"
315 msgstr ""
316
317 #: ../cutscenes/credits.txt:81
318 msgid "MOB2"
319 msgstr ""
320
321 #: ../cutscenes/credits.txt:82
322 msgid "Morgan Strauss"
323 msgstr "Morgan Strauss"
324
325 #: ../cutscenes/credits.txt:83
326 msgid "Nea Retrogamer"
327 msgstr ""
328
329 #: ../cutscenes/credits.txt:84
330 msgid "Nguyễn Gia Phong"
331 msgstr ""
332
333 #: ../cutscenes/credits.txt:85
334 msgid "Nikita Vanku"
335 msgstr "Nikita Vanku"
336
337 #: ../cutscenes/credits.txt:86
338 msgid "Paul Wortmann"
339 msgstr "Paul Wortmann"
340
341 #: ../cutscenes/credits.txt:87
342 msgid "Pawel Puszczynski"
343 msgstr "Pawel Puszczynski"
344
345 #: ../cutscenes/credits.txt:88
346 msgid "Quentin Stievenart"
347 msgstr "Quentin Stievenart"
348
349 #: ../cutscenes/credits.txt:89
350 msgid "Rui"
351 msgstr ""
352
353 #: ../cutscenes/credits.txt:90
354 msgid "Sergey Basalaev"
355 msgstr "Sergey Basalaev"
356
357 #: ../cutscenes/credits.txt:91
358 msgid "Sergiy Borodych"
359 msgstr ""
360
361 #: ../cutscenes/credits.txt:93
362 msgid "Stefano Peris"
363 msgstr ""
364
365 #: ../cutscenes/credits.txt:94
366 msgid "sujiniku"
367 msgstr "sujiniku"
368
369 #: ../cutscenes/credits.txt:95
370 msgid "Thomas Glamsch"
371 msgstr "Thomas Glamsch"
372
373 #: ../cutscenes/credits.txt:96
374 msgid "Timo Sievänen"
375 msgstr "Timo Sievänen"
376
377 #: ../cutscenes/credits.txt:97
378 msgid "Vicente Monteiro"
379 msgstr ""
380
381 #: ../cutscenes/credits.txt:98
382 msgid "Wuzzy2"
383 msgstr "Wuzzy2"
384
385 #: ../cutscenes/credits.txt:99
386 msgid "Yannis Anthymidis"
387 msgstr "Yannis Anthymidis"
388
389 #: ../cutscenes/credits.txt:100
390 msgid "Zmicer Turok"
391 msgstr ""
392
393 #: ../cutscenes/credits.txt:103
105 #: ../cutscenes/credits.txt:108
394106 msgid "Distributors"
395107 msgstr "Распространители"
396108
397 #: ../cutscenes/credits.txt:105
398 msgid "Ablu"
399 msgstr "Ablu"
400
401 #: ../cutscenes/credits.txt:106
402 msgid "Feillyne"
403 msgstr "Feillyne"
404
405 #: ../cutscenes/credits.txt:107
406 msgid "Jan-Hendrik Peters"
407 msgstr "Jan-Hendrik Peters"
408
409 #: ../cutscenes/credits.txt:109
410 msgid "miffe"
411 msgstr "miffe"
412
413 #: ../cutscenes/credits.txt:112
109 #: ../cutscenes/credits.txt:117
414110 msgid "Special Thanks"
415111 msgstr "Особая благодарность"
416112
417 #: ../cutscenes/credits.txt:116
113 #: ../cutscenes/credits.txt:121
418114 msgid "For giving constant feedback and testing:"
419115 msgstr "За постоянные отзывы и тестирование:"
420116
421 #: ../cutscenes/credits.txt:117
422 msgid "Bart Kelsey"
423 msgstr "Bart Kelsey"
424
425 #: ../cutscenes/credits.txt:118
117 #: ../cutscenes/credits.txt:123
426118 msgid "The community at OpenGameArt"
427119 msgstr "Сообщество OpenGameArt"
428120
429 #: ../cutscenes/credits.txt:122
121 #: ../cutscenes/credits.txt:127
430122 msgid "For Tiled and the Flare map exporter:"
431123 msgstr "За Tiled и экспорт карт Flare:"
432
433 #: ../cutscenes/credits.txt:123
434 msgid "Thorbjørn Lindeijer"
435 msgstr "Thorbjørn Lindeijer"
436
437 #: ../cutscenes/credits.txt:125
438 msgid "Ranie Jade Ramiso"
439 msgstr "Ranie Jade Ramiso"
11 # This file is distributed under the same license as the FLARE package.
22 #
33 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4 # Translators:
5 # MiroslavR <miroslavr256@gmail.com>, 2019
6 #
47 msgid ""
58 msgstr ""
69 "Project-Id-Version: PACKAGE VERSION\n"
710 "Report-Msgid-Bugs-To: \n"
8 "POT-Creation-Date: 2018-11-13 17:21+\n"
11 "POT-Creation-Date: 2019-07-29 09:34+\n"
912 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
13 "Last-Translator: MiroslavR <miroslavr256@gmail.com>, 2019\n"
1014 "Language-Team: Slovak (https://www.transifex.com/flareorg/teams/84925/sk/)\n"
1115 "MIME-Version: 1.0\n"
1216 "Content-Type: text/plain; charset=UTF-8\n"
1620
1721 #: ../engine/primary_stats.txt:3
1822 msgid "Physical"
19 msgstr ""
23 msgstr "Fyzické"
2024
2125 #: ../engine/primary_stats.txt:7
2226 msgid "Mental"
23 msgstr ""
27 msgstr "Mentálne"
2428
2529 #: ../engine/primary_stats.txt:11
2630 msgid "Offense"
27 msgstr ""
31 msgstr "Útok"
2832
2933 #: ../engine/primary_stats.txt:15
3034 msgid "Defense"
31 msgstr ""
35 msgstr "Obrana"
3236
3337 #: ../engine/damage_types.txt:3
3438 msgid "Melee Damage"
35 msgstr ""
39 msgstr "Zranenie nablízko"
3640
3741 #: ../engine/damage_types.txt:4
3842 msgid "Increases the damage done with swords and other melee weapons."
39 msgstr ""
43 msgstr "Zvyšuje zranenie spôsobené mečmi a inými zbraňami nablízko."
4044
4145 #: ../engine/damage_types.txt:5
4246 msgid "Melee Damage Min"
43 msgstr ""
47 msgstr "Min. zranenie nablízko"
4448
4549 #: ../engine/damage_types.txt:6
4650 msgid "Melee Damage Max"
47 msgstr ""
51 msgstr "Max. zranenie nablízko"
4852
4953 #: ../engine/damage_types.txt:12
5054 msgid "Ranged Damage"
51 msgstr ""
55 msgstr "Zranenie na diaľku"
5256
5357 #: ../engine/damage_types.txt:13
5458 msgid "Increases the damage done with bows and other ranged weapons."
55 msgstr ""
59 msgstr "Zvyšuje zranenie spôsobené lukmi a inými zbraňami na diaľku."
5660
5761 #: ../engine/damage_types.txt:14
5862 msgid "Ranged Damage Min"
59 msgstr ""
63 msgstr "Min. zranenie na diaľku"
6064
6165 #: ../engine/damage_types.txt:15
6266 msgid "Ranged Damage Max"
63 msgstr ""
67 msgstr "Max. zranenie na diaľku"
6468
6569 #: ../engine/damage_types.txt:21
6670 msgid "Mental Damage"
67 msgstr ""
71 msgstr "Mentálne zranenie"
6872
6973 #: ../engine/damage_types.txt:22
7074 msgid "Increases the damage done with staves and other mental weapons."
71 msgstr ""
75 msgstr "Zvyšuje zranenie spôsobené palicami a inými mentálnymi zbraňami."
7276
7377 #: ../engine/damage_types.txt:23
7478 msgid "Mental Damage Min"
75 msgstr ""
79 msgstr "Min. mentálne zranenie"
7680
7781 #: ../engine/damage_types.txt:24
7882 msgid "Mental Damage Max"
79 msgstr ""
83 msgstr "Max. mentálne zranenie"
8084
8185 #: ../cutscenes/credits.txt:7
8286 msgid "Flare Engine Credits"
83 msgstr ""
87 msgstr "Autori Flare Engine"
8488
8589 #: ../cutscenes/credits.txt:10
8690 msgid "Lead Programmers"
87 msgstr ""
88
89 #: ../cutscenes/credits.txt:12
90 msgid "Clint Bellanger"
91 msgstr ""
92
93 #: ../cutscenes/credits.txt:13
94 msgid "Henrik Andersson"
95 msgstr ""
96
97 #: ../cutscenes/credits.txt:14
98 msgid "Igor Paliychuk"
99 msgstr ""
100
101 #: ../cutscenes/credits.txt:15
102 msgid "Justin Jacobs"
103 msgstr ""
104
105 #: ../cutscenes/credits.txt:16
106 msgid "Stefan Beller"
107 msgstr ""
108
109 #: ../cutscenes/credits.txt:17
110 msgid "Thane Brimhall"
111 msgstr ""
91 msgstr "Hlavní programátori"
11292
11393 #: ../cutscenes/credits.txt:20
11494 msgid "Programmers"
115 msgstr ""
116
117 #: ../cutscenes/credits.txt:22
118 msgid "Andrew Engelbrecht"
119 msgstr ""
120
121 #: ../cutscenes/credits.txt:23
122 msgid "Anton Golov"
123 msgstr ""
124
125 #: ../cutscenes/credits.txt:24
126 msgid "Artur Rojek"
127 msgstr ""
128
129 #: ../cutscenes/credits.txt:25
130 msgid "blazindragon"
131 msgstr ""
132
133 #: ../cutscenes/credits.txt:26
134 msgid "Bonbadil"
135 msgstr ""
136
137 #: ../cutscenes/credits.txt:27
138 msgid "Chris Oelmueller"
139 msgstr ""
140
141 #: ../cutscenes/credits.txt:28
142 msgid "David Bariod"
143 msgstr ""
144
145 #: ../cutscenes/credits.txt:29
146 msgid "Daniel Santos"
147 msgstr ""
148
149 #: ../cutscenes/credits.txt:30
150 msgid "Gallaecio"
151 msgstr ""
152
153 #: ../cutscenes/credits.txt:31
154 msgid "Joseph Bleu"
155 msgstr ""
156
157 #: ../cutscenes/credits.txt:32
158 msgid "Juan PabloTamayo"
159 msgstr ""
160
161 #: ../cutscenes/credits.txt:33
162 msgid "Kitano"
163 msgstr ""
164
165 #: ../cutscenes/credits.txt:34
166 msgid "Kyle Belanger"
167 msgstr ""
168
169 #: ../cutscenes/credits.txt:35
170 msgid "LongerDev"
171 msgstr ""
172
173 #: ../cutscenes/credits.txt:36
174 msgid "Manuel A. Fernandez Montecelo"
175 msgstr ""
176
177 #: ../cutscenes/credits.txt:37
178 msgid "Matthew Krohn"
179 msgstr ""
180
181 #: ../cutscenes/credits.txt:38
182 msgid "Nojan"
183 msgstr ""
184
185 #: ../cutscenes/credits.txt:39
186 msgid "Pavel Kirpichyov"
187 msgstr ""
188
189 #: ../cutscenes/credits.txt:40
190 msgid "runtime-x86"
191 msgstr ""
192
193 #: ../cutscenes/credits.txt:41
194 msgid "Ryan Dansie"
195 msgstr ""
95 msgstr "Programátori"
19696
19797 #: ../cutscenes/credits.txt:44
19898 msgid "Default Art"
199 msgstr ""
99 msgstr "Predvolená grafika"
200100
201101 #: ../cutscenes/credits.txt:49
202102 msgid "Translators"
203 msgstr ""
103 msgstr "Prekladatelia"
204104
205 #: ../cutscenes/credits.txt:51
206 msgid "Ademaro"
207 msgstr ""
208
209 #: ../cutscenes/credits.txt:52
210 msgid "Adrian Chaves Fernandez"
211 msgstr ""
212
213 #: ../cutscenes/credits.txt:53
214 msgid "Andrea Ranaldi"
215 msgstr ""
216
217 #: ../cutscenes/credits.txt:54
218 msgid "Andreas Berheim Brudin"
219 msgstr ""
220
221 #: ../cutscenes/credits.txt:55
222 msgid "Bas Doodeman"
223 msgstr ""
224
225 #: ../cutscenes/credits.txt:57
226 msgid "Carlos Sanchez"
227 msgstr ""
228
229 #: ../cutscenes/credits.txt:59
230 msgid "Christoph J. Thompson"
231 msgstr ""
232
233 #: ../cutscenes/credits.txt:60
234 msgid "Denis Lysenko"
235 msgstr ""
236
237 #: ../cutscenes/credits.txt:61
238 msgid "Diego J. Romero López"
239 msgstr ""
240
241 #: ../cutscenes/credits.txt:62
242 msgid "dumaosen"
243 msgstr ""
244
245 #: ../cutscenes/credits.txt:63
246 msgid "Emil"
247 msgstr ""
248
249 #: ../cutscenes/credits.txt:64
250 msgid "Eric R"
251 msgstr ""
252
253 #: ../cutscenes/credits.txt:65
254 msgid "Evgen Pavlov"
255 msgstr ""
256
257 #: ../cutscenes/credits.txt:66
258 msgid "Fabio Loli"
259 msgstr ""
260
261 #: ../cutscenes/credits.txt:67
262 msgid "Gianfranco Del Borrello"
263 msgstr ""
264
265 #: ../cutscenes/credits.txt:68
266 msgid "Giovanni Dalla Torre"
267 msgstr ""
268
269 #: ../cutscenes/credits.txt:69
270 msgid "GunChleoc"
271 msgstr ""
272
273 #: ../cutscenes/credits.txt:70
274 msgid "Hans Joachim Desserud"
275 msgstr ""
276
277 #: ../cutscenes/credits.txt:71
278 msgid "hark34"
279 msgstr ""
280
281 #: ../cutscenes/credits.txt:73
282 msgid "Janet Hunt"
283 msgstr ""
284
285 #: ../cutscenes/credits.txt:74
286 msgid "Juan Pablo Tamayo"
287 msgstr ""
288
289 #: ../cutscenes/credits.txt:75
290 msgid "losine"
291 msgstr ""
292
293 #: ../cutscenes/credits.txt:76
294 msgid "Marc Tormo i Bochaca"
295 msgstr ""
296
297 #: ../cutscenes/credits.txt:77
298 msgid "Michael Papageorgiou"
299 msgstr ""
300
301 #: ../cutscenes/credits.txt:78
302 msgid "Mikhail Karalevich"
303 msgstr ""
304
305 #: ../cutscenes/credits.txt:79
306 msgid "Miro Jánošík"
307 msgstr ""
308
309 #: ../cutscenes/credits.txt:80
310 msgid "Mykola Franchuk"
311 msgstr ""
312
313 #: ../cutscenes/credits.txt:81
314 msgid "MOB2"
315 msgstr ""
316
317 #: ../cutscenes/credits.txt:82
318 msgid "Morgan Strauss"
319 msgstr ""
320
321 #: ../cutscenes/credits.txt:83
322 msgid "Nea Retrogamer"
323 msgstr ""
324
325 #: ../cutscenes/credits.txt:84
326 msgid "Nguyễn Gia Phong"
327 msgstr ""
328
329 #: ../cutscenes/credits.txt:85
330 msgid "Nikita Vanku"
331 msgstr ""
332
333 #: ../cutscenes/credits.txt:86
334 msgid "Paul Wortmann"
335 msgstr ""
336
337 #: ../cutscenes/credits.txt:87
338 msgid "Pawel Puszczynski"
339 msgstr ""
340
341 #: ../cutscenes/credits.txt:88
342 msgid "Quentin Stievenart"
343 msgstr ""
344
345 #: ../cutscenes/credits.txt:89
346 msgid "Rui"
347 msgstr ""
348
349 #: ../cutscenes/credits.txt:90
350 msgid "Sergey Basalaev"
351 msgstr ""
352
353 #: ../cutscenes/credits.txt:91
354 msgid "Sergiy Borodych"
355 msgstr ""
356
357 #: ../cutscenes/credits.txt:93
358 msgid "Stefano Peris"
359 msgstr ""
360
361 #: ../cutscenes/credits.txt:94
362 msgid "sujiniku"
363 msgstr ""
364
365 #: ../cutscenes/credits.txt:95
366 msgid "Thomas Glamsch"
367 msgstr ""
368
369 #: ../cutscenes/credits.txt:96
370 msgid "Timo Sievänen"
371 msgstr ""
372
373 #: ../cutscenes/credits.txt:97
374 msgid "Vicente Monteiro"
375 msgstr ""
376
377 #: ../cutscenes/credits.txt:98
378 msgid "Wuzzy2"
379 msgstr ""
380
381 #: ../cutscenes/credits.txt:99
382 msgid "Yannis Anthymidis"
383 msgstr ""
384
385 #: ../cutscenes/credits.txt:100
386 msgid "Zmicer Turok"
387 msgstr ""
388
389 #: ../cutscenes/credits.txt:103
105 #: ../cutscenes/credits.txt:108
390106 msgid "Distributors"
391 msgstr ""
392
393 #: ../cutscenes/credits.txt:105
394 msgid "Ablu"
395 msgstr ""
396
397 #: ../cutscenes/credits.txt:106
398 msgid "Feillyne"
399 msgstr ""
400
401 #: ../cutscenes/credits.txt:107
402 msgid "Jan-Hendrik Peters"
403 msgstr ""
404
405 #: ../cutscenes/credits.txt:109
406 msgid "miffe"
407 msgstr ""
408
409 #: ../cutscenes/credits.txt:112
410 msgid "Special Thanks"
411 msgstr ""
412
413 #: ../cutscenes/credits.txt:116
414 msgid "For giving constant feedback and testing:"
415 msgstr ""
107 msgstr "Distribútori"
416108
417109 #: ../cutscenes/credits.txt:117
418 msgid "Bart Kelsey"
419 msgstr ""
110 msgid "Special Thanks"
111 msgstr "Špeciálne poďakovanie"
420112
421 #: ../cutscenes/credits.txt:118
422 msgid "The community at OpenGameArt"
423 msgstr ""
424
425 #: ../cutscenes/credits.txt:122
426 msgid "For Tiled and the Flare map exporter:"
427 msgstr ""
113 #: ../cutscenes/credits.txt:121
114 msgid "For giving constant feedback and testing:"
115 msgstr "Za pravidelné poskytovanie spätnej väzby a testovanie:"
428116
429117 #: ../cutscenes/credits.txt:123
430 msgid "Thorbjørn Lindeijer"
431 msgstr ""
118 msgid "The community at OpenGameArt"
119 msgstr "Komunita OpenGameArt"
432120
433 #: ../cutscenes/credits.txt:125
434 msgid "Ranie Jade Ramiso"
435 msgstr ""
121 #: ../cutscenes/credits.txt:127
122 msgid "For Tiled and the Flare map exporter:"
123 msgstr "Za nástroj Tiled a exportér máp Flare:"
55 msgstr ""
66 "Project-Id-Version: PACKAGE VERSION\n"
77 "Report-Msgid-Bugs-To: \n"
8 "POT-Creation-Date: 2018-11-13 17:21+\n"
8 "POT-Creation-Date: 2019-07-29 09:34+\n"
99 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1010 "Language-Team: Swedish (https://www.transifex.com/flareorg/teams/84925/sv/)\n"
1111 "MIME-Version: 1.0\n"
8686 msgid "Lead Programmers"
8787 msgstr ""
8888
89 #: ../cutscenes/credits.txt:12
90 msgid "Clint Bellanger"
91 msgstr ""
92
93 #: ../cutscenes/credits.txt:13
94 msgid "Henrik Andersson"
95 msgstr ""
96
97 #: ../cutscenes/credits.txt:14
98 msgid "Igor Paliychuk"
99 msgstr ""
100
101 #: ../cutscenes/credits.txt:15
102 msgid "Justin Jacobs"
103 msgstr ""
104
105 #: ../cutscenes/credits.txt:16
106 msgid "Stefan Beller"
107 msgstr ""
108
109 #: ../cutscenes/credits.txt:17
110 msgid "Thane Brimhall"
111 msgstr ""
112
11389 #: ../cutscenes/credits.txt:20
11490 msgid "Programmers"
115 msgstr ""
116
117 #: ../cutscenes/credits.txt:22
118 msgid "Andrew Engelbrecht"
119 msgstr ""
120
121 #: ../cutscenes/credits.txt:23
122 msgid "Anton Golov"
123 msgstr ""
124
125 #: ../cutscenes/credits.txt:24
126 msgid "Artur Rojek"
127 msgstr ""
128
129 #: ../cutscenes/credits.txt:25
130 msgid "blazindragon"
131 msgstr ""
132
133 #: ../cutscenes/credits.txt:26
134 msgid "Bonbadil"
135 msgstr ""
136
137 #: ../cutscenes/credits.txt:27
138 msgid "Chris Oelmueller"
139 msgstr ""
140
141 #: ../cutscenes/credits.txt:28
142 msgid "David Bariod"
143 msgstr ""
144
145 #: ../cutscenes/credits.txt:29
146 msgid "Daniel Santos"
147 msgstr ""
148
149 #: ../cutscenes/credits.txt:30
150 msgid "Gallaecio"
151 msgstr ""
152
153 #: ../cutscenes/credits.txt:31
154 msgid "Joseph Bleu"
155 msgstr ""
156
157 #: ../cutscenes/credits.txt:32
158 msgid "Juan PabloTamayo"
159 msgstr ""
160
161 #: ../cutscenes/credits.txt:33
162 msgid "Kitano"
163 msgstr ""
164
165 #: ../cutscenes/credits.txt:34
166 msgid "Kyle Belanger"
167 msgstr ""
168
169 #: ../cutscenes/credits.txt:35
170 msgid "LongerDev"
171 msgstr ""
172
173 #: ../cutscenes/credits.txt:36
174 msgid "Manuel A. Fernandez Montecelo"
175 msgstr ""
176
177 #: ../cutscenes/credits.txt:37
178 msgid "Matthew Krohn"
179 msgstr ""
180
181 #: ../cutscenes/credits.txt:38
182 msgid "Nojan"
183 msgstr ""
184
185 #: ../cutscenes/credits.txt:39
186 msgid "Pavel Kirpichyov"
187 msgstr ""
188
189 #: ../cutscenes/credits.txt:40
190 msgid "runtime-x86"
191 msgstr ""
192
193 #: ../cutscenes/credits.txt:41
194 msgid "Ryan Dansie"
19591 msgstr ""
19692
19793 #: ../cutscenes/credits.txt:44
20298 msgid "Translators"
20399 msgstr ""
204100
205 #: ../cutscenes/credits.txt:51
206 msgid "Ademaro"
207 msgstr ""
208
209 #: ../cutscenes/credits.txt:52
210 msgid "Adrian Chaves Fernandez"
211 msgstr ""
212
213 #: ../cutscenes/credits.txt:53
214 msgid "Andrea Ranaldi"
215 msgstr ""
216
217 #: ../cutscenes/credits.txt:54
218 msgid "Andreas Berheim Brudin"
219 msgstr ""
220
221 #: ../cutscenes/credits.txt:55
222 msgid "Bas Doodeman"
223 msgstr ""
224
225 #: ../cutscenes/credits.txt:57
226 msgid "Carlos Sanchez"
227 msgstr ""
228
229 #: ../cutscenes/credits.txt:59
230 msgid "Christoph J. Thompson"
231 msgstr ""
232
233 #: ../cutscenes/credits.txt:60
234 msgid "Denis Lysenko"
235 msgstr ""
236
237 #: ../cutscenes/credits.txt:61
238 msgid "Diego J. Romero López"
239 msgstr ""
240
241 #: ../cutscenes/credits.txt:62
242 msgid "dumaosen"
243 msgstr ""
244
245 #: ../cutscenes/credits.txt:63
246 msgid "Emil"
247 msgstr ""
248
249 #: ../cutscenes/credits.txt:64
250 msgid "Eric R"
251 msgstr ""
252
253 #: ../cutscenes/credits.txt:65
254 msgid "Evgen Pavlov"
255 msgstr ""
256
257 #: ../cutscenes/credits.txt:66
258 msgid "Fabio Loli"
259 msgstr ""
260
261 #: ../cutscenes/credits.txt:67
262 msgid "Gianfranco Del Borrello"
263 msgstr ""
264
265 #: ../cutscenes/credits.txt:68
266 msgid "Giovanni Dalla Torre"
267 msgstr ""
268
269 #: ../cutscenes/credits.txt:69
270 msgid "GunChleoc"
271 msgstr ""
272
273 #: ../cutscenes/credits.txt:70
274 msgid "Hans Joachim Desserud"
275 msgstr ""
276
277 #: ../cutscenes/credits.txt:71
278 msgid "hark34"
279 msgstr ""
280
281 #: ../cutscenes/credits.txt:73
282 msgid "Janet Hunt"
283 msgstr ""
284
285 #: ../cutscenes/credits.txt:74
286 msgid "Juan Pablo Tamayo"
287 msgstr ""
288
289 #: ../cutscenes/credits.txt:75
290 msgid "losine"
291 msgstr ""
292
293 #: ../cutscenes/credits.txt:76
294 msgid "Marc Tormo i Bochaca"
295 msgstr ""
296
297 #: ../cutscenes/credits.txt:77
298 msgid "Michael Papageorgiou"
299 msgstr ""
300
301 #: ../cutscenes/credits.txt:78
302 msgid "Mikhail Karalevich"
303 msgstr ""
304
305 #: ../cutscenes/credits.txt:79
306 msgid "Miro Jánošík"
307 msgstr ""
308
309 #: ../cutscenes/credits.txt:80
310 msgid "Mykola Franchuk"
311 msgstr ""
312
313 #: ../cutscenes/credits.txt:81
314 msgid "MOB2"
315 msgstr ""
316
317 #: ../cutscenes/credits.txt:82
318 msgid "Morgan Strauss"
319 msgstr ""
320
321 #: ../cutscenes/credits.txt:83
322 msgid "Nea Retrogamer"
323 msgstr ""
324
325 #: ../cutscenes/credits.txt:84
326 msgid "Nguyễn Gia Phong"
327 msgstr ""
328
329 #: ../cutscenes/credits.txt:85
330 msgid "Nikita Vanku"
331 msgstr ""
332
333 #: ../cutscenes/credits.txt:86
334 msgid "Paul Wortmann"
335 msgstr ""
336
337 #: ../cutscenes/credits.txt:87
338 msgid "Pawel Puszczynski"
339 msgstr ""
340
341 #: ../cutscenes/credits.txt:88
342 msgid "Quentin Stievenart"
343 msgstr ""
344
345 #: ../cutscenes/credits.txt:89
346 msgid "Rui"
347 msgstr ""
348
349 #: ../cutscenes/credits.txt:90
350 msgid "Sergey Basalaev"
351 msgstr ""
352
353 #: ../cutscenes/credits.txt:91
354 msgid "Sergiy Borodych"
355 msgstr ""
356
357 #: ../cutscenes/credits.txt:93
358 msgid "Stefano Peris"
359 msgstr ""
360
361 #: ../cutscenes/credits.txt:94
362 msgid "sujiniku"
363 msgstr ""
364
365 #: ../cutscenes/credits.txt:95
366 msgid "Thomas Glamsch"
367 msgstr ""
368
369 #: ../cutscenes/credits.txt:96
370 msgid "Timo Sievänen"
371 msgstr ""
372
373 #: ../cutscenes/credits.txt:97
374 msgid "Vicente Monteiro"
375 msgstr ""
376
377 #: ../cutscenes/credits.txt:98
378 msgid "Wuzzy2"
379 msgstr ""
380
381 #: ../cutscenes/credits.txt:99
382 msgid "Yannis Anthymidis"
383 msgstr ""
384
385 #: ../cutscenes/credits.txt:100
386 msgid "Zmicer Turok"
387 msgstr ""
388
389 #: ../cutscenes/credits.txt:103
101 #: ../cutscenes/credits.txt:108
390102 msgid "Distributors"
391103 msgstr ""
392104
393 #: ../cutscenes/credits.txt:105
394 msgid "Ablu"
395 msgstr ""
396
397 #: ../cutscenes/credits.txt:106
398 msgid "Feillyne"
399 msgstr ""
400
401 #: ../cutscenes/credits.txt:107
402 msgid "Jan-Hendrik Peters"
403 msgstr ""
404
405 #: ../cutscenes/credits.txt:109
406 msgid "miffe"
407 msgstr ""
408
409 #: ../cutscenes/credits.txt:112
105 #: ../cutscenes/credits.txt:117
410106 msgid "Special Thanks"
411107 msgstr ""
412108
413 #: ../cutscenes/credits.txt:116
109 #: ../cutscenes/credits.txt:121
414110 msgid "For giving constant feedback and testing:"
415111 msgstr ""
416112
417 #: ../cutscenes/credits.txt:117
418 msgid "Bart Kelsey"
419 msgstr ""
420
421 #: ../cutscenes/credits.txt:118
113 #: ../cutscenes/credits.txt:123
422114 msgid "The community at OpenGameArt"
423115 msgstr ""
424116
425 #: ../cutscenes/credits.txt:122
117 #: ../cutscenes/credits.txt:127
426118 msgid "For Tiled and the Flare map exporter:"
427119 msgstr ""
428
429 #: ../cutscenes/credits.txt:123
430 msgid "Thorbjørn Lindeijer"
431 msgstr ""
432
433 #: ../cutscenes/credits.txt:125
434 msgid "Ranie Jade Ramiso"
435 msgstr ""
1010 msgstr ""
1111 "Project-Id-Version: PACKAGE VERSION\n"
1212 "Report-Msgid-Bugs-To: \n"
13 "POT-Creation-Date: 2018-11-14 00:57+\n"
13 "POT-Creation-Date: 2019-07-29 09:34+\n"
1414 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1515 "Last-Translator: igorko <mansonigor@gmail.com>, 2018\n"
1616 "Language-Team: Ukrainian (https://www.transifex.com/flareorg/teams/84925/uk/)\n"
9292 msgid "Lead Programmers"
9393 msgstr "Провідні програмісти"
9494
95 #: ../cutscenes/credits.txt:12
96 msgid "Clint Bellanger"
97 msgstr "Клінт Беланжер"
98
99 #: ../cutscenes/credits.txt:13
100 msgid "Henrik Andersson"
101 msgstr "Генрік Андерсон"
102
103 #: ../cutscenes/credits.txt:14
104 msgid "Igor Paliychuk"
105 msgstr "Ігор Палійчук"
106
107 #: ../cutscenes/credits.txt:15
108 msgid "Justin Jacobs"
109 msgstr "Justin Jacobs"
110
111 #: ../cutscenes/credits.txt:16
112 msgid "Stefan Beller"
113 msgstr "Стефан Беллер"
114
115 #: ../cutscenes/credits.txt:17
116 msgid "Thane Brimhall"
117 msgstr "Thane Brimhall"
118
11995 #: ../cutscenes/credits.txt:20
12096 msgid "Programmers"
12197 msgstr "Програмісти"
122
123 #: ../cutscenes/credits.txt:22
124 msgid "Andrew Engelbrecht"
125 msgstr "Ендрю Енгельбрехт"
126
127 #: ../cutscenes/credits.txt:23
128 msgid "Anton Golov"
129 msgstr "Антон Голов"
130
131 #: ../cutscenes/credits.txt:24
132 msgid "Artur Rojek"
133 msgstr "Artur Rojek"
134
135 #: ../cutscenes/credits.txt:25
136 msgid "blazindragon"
137 msgstr "blazindragon"
138
139 #: ../cutscenes/credits.txt:26
140 msgid "Bonbadil"
141 msgstr "Bonbadil"
142
143 #: ../cutscenes/credits.txt:27
144 msgid "Chris Oelmueller"
145 msgstr "Chris Oelmueller"
146
147 #: ../cutscenes/credits.txt:28
148 msgid "David Bariod"
149 msgstr "Девід Баріод"
150
151 #: ../cutscenes/credits.txt:29
152 msgid "Daniel Santos"
153 msgstr "Даніель Сантос"
154
155 #: ../cutscenes/credits.txt:30
156 msgid "Gallaecio"
157 msgstr "Gallaecio"
158
159 #: ../cutscenes/credits.txt:31
160 msgid "Joseph Bleu"
161 msgstr "Жозеф Блю"
162
163 #: ../cutscenes/credits.txt:32
164 msgid "Juan PabloTamayo"
165 msgstr "Juan PabloTamayo"
166
167 #: ../cutscenes/credits.txt:33
168 msgid "Kitano"
169 msgstr "Kitano"
170
171 #: ../cutscenes/credits.txt:34
172 msgid "Kyle Belanger"
173 msgstr "Кайл Беланжер"
174
175 #: ../cutscenes/credits.txt:35
176 msgid "LongerDev"
177 msgstr "LongerDev"
178
179 #: ../cutscenes/credits.txt:36
180 msgid "Manuel A. Fernandez Montecelo"
181 msgstr "Manuel A. Fernandez Montecelo"
182
183 #: ../cutscenes/credits.txt:37
184 msgid "Matthew Krohn"
185 msgstr "Метью Крон"
186
187 #: ../cutscenes/credits.txt:38
188 msgid "Nojan"
189 msgstr "Nojan"
190
191 #: ../cutscenes/credits.txt:39
192 msgid "Pavel Kirpichyov"
193 msgstr "Павел Кірпічов"
194
195 #: ../cutscenes/credits.txt:40
196 msgid "runtime-x86"
197 msgstr "runtime-x86"
198
199 #: ../cutscenes/credits.txt:41
200 msgid "Ryan Dansie"
201 msgstr "Ryan Dansie"
20298
20399 #: ../cutscenes/credits.txt:44
204100 msgid "Default Art"
208104 msgid "Translators"
209105 msgstr "Перекладачі"
210106
211 #: ../cutscenes/credits.txt:51
212 msgid "Ademaro"
213 msgstr "Ademaro"
214
215 #: ../cutscenes/credits.txt:52
216 msgid "Adrian Chaves Fernandez"
217 msgstr "Adrian Chaves Fernandez"
218
219 #: ../cutscenes/credits.txt:53
220 msgid "Andrea Ranaldi"
221 msgstr "Андреа Ранальді"
222
223 #: ../cutscenes/credits.txt:54
224 msgid "Andreas Berheim Brudin"
225 msgstr "Andreas Berheim Brudin"
226
227 #: ../cutscenes/credits.txt:55
228 msgid "Bas Doodeman"
229 msgstr "Bas Doodeman"
230
231 #: ../cutscenes/credits.txt:57
232 msgid "Carlos Sanchez"
233 msgstr "Карлос Санчез"
234
235 #: ../cutscenes/credits.txt:59
236 msgid "Christoph J. Thompson"
237 msgstr "Christoph J. Thompson"
238
239 #: ../cutscenes/credits.txt:60
240 msgid "Denis Lysenko"
241 msgstr "Денис Лисенко"
242
243 #: ../cutscenes/credits.txt:61
244 msgid "Diego J. Romero López"
245 msgstr "Diego J. Romero López"
246
247 #: ../cutscenes/credits.txt:62
248 msgid "dumaosen"
249 msgstr "dumaosen"
250
251 #: ../cutscenes/credits.txt:63
252 msgid "Emil"
253 msgstr "Emil"
254
255 #: ../cutscenes/credits.txt:64
256 msgid "Eric R"
257 msgstr "Eric R"
258
259 #: ../cutscenes/credits.txt:65
260 msgid "Evgen Pavlov"
261 msgstr "Євген Павлов"
262
263 #: ../cutscenes/credits.txt:66
264 msgid "Fabio Loli"
265 msgstr "Фабіо Лолі"
266
267 #: ../cutscenes/credits.txt:67
268 msgid "Gianfranco Del Borrello"
269 msgstr "Gianfranco Del Borrello"
270
271 #: ../cutscenes/credits.txt:68
272 msgid "Giovanni Dalla Torre"
273 msgstr "Джованні Делла Торре"
274
275 #: ../cutscenes/credits.txt:69
276 msgid "GunChleoc"
277 msgstr "GunChleoc"
278
279 #: ../cutscenes/credits.txt:70
280 msgid "Hans Joachim Desserud"
281 msgstr "Hans Joachim Desserud"
282
283 #: ../cutscenes/credits.txt:71
284 msgid "hark34"
285 msgstr "hark34"
286
287 #: ../cutscenes/credits.txt:73
288 msgid "Janet Hunt"
289 msgstr "Джанет Хант"
290
291 #: ../cutscenes/credits.txt:74
292 msgid "Juan Pablo Tamayo"
293 msgstr "Juan Pablo Tamayo"
294
295 #: ../cutscenes/credits.txt:75
296 msgid "losine"
297 msgstr "losine"
298
299 #: ../cutscenes/credits.txt:76
300 msgid "Marc Tormo i Bochaca"
301 msgstr "Marc Tormo i Bochaca"
302
303 #: ../cutscenes/credits.txt:77
304 msgid "Michael Papageorgiou"
305 msgstr "Michael Papageorgiou"
306
307 #: ../cutscenes/credits.txt:78
308 msgid "Mikhail Karalevich"
309 msgstr "Михаїл Каралєвіч"
310
311 #: ../cutscenes/credits.txt:79
312 msgid "Miro Jánošík"
313 msgstr "Міро Яношик"
314
315 #: ../cutscenes/credits.txt:80
316 msgid "Mykola Franchuk"
317 msgstr "Микола Франчук"
318
319 #: ../cutscenes/credits.txt:81
320 msgid "MOB2"
321 msgstr "MOB2"
322
323 #: ../cutscenes/credits.txt:82
324 msgid "Morgan Strauss"
325 msgstr "Морган Штраус"
326
327 #: ../cutscenes/credits.txt:83
328 msgid "Nea Retrogamer"
329 msgstr "Nea Retrogamer"
330
331 #: ../cutscenes/credits.txt:84
332 msgid "Nguyễn Gia Phong"
333 msgstr "Nguyễn Gia Phong"
334
335 #: ../cutscenes/credits.txt:85
336 msgid "Nikita Vanku"
337 msgstr "Нікіта Ванку"
338
339 #: ../cutscenes/credits.txt:86
340 msgid "Paul Wortmann"
341 msgstr "Паул Вортман"
342
343 #: ../cutscenes/credits.txt:87
344 msgid "Pawel Puszczynski"
345 msgstr "Павел Пущинський"
346
347 #: ../cutscenes/credits.txt:88
348 msgid "Quentin Stievenart"
349 msgstr "Квентін Стівенарт"
350
351 #: ../cutscenes/credits.txt:89
352 msgid "Rui"
353 msgstr "Rui"
354
355 #: ../cutscenes/credits.txt:90
356 msgid "Sergey Basalaev"
357 msgstr "Сергей Басалаєв"
358
359 #: ../cutscenes/credits.txt:91
360 msgid "Sergiy Borodych"
361 msgstr "Сергій Бородич"
362
363 #: ../cutscenes/credits.txt:93
364 msgid "Stefano Peris"
365 msgstr "Стефано Періс"
366
367 #: ../cutscenes/credits.txt:94
368 msgid "sujiniku"
369 msgstr "sujiniku"
370
371 #: ../cutscenes/credits.txt:95
372 msgid "Thomas Glamsch"
373 msgstr "Thomas Glamsch"
374
375 #: ../cutscenes/credits.txt:96
376 msgid "Timo Sievänen"
377 msgstr "Timo Sievänen"
378
379 #: ../cutscenes/credits.txt:97
380 msgid "Vicente Monteiro"
381 msgstr "Вісенте Монтеіро"
382
383 #: ../cutscenes/credits.txt:98
384 msgid "Wuzzy2"
385 msgstr "Wuzzy2"
386
387 #: ../cutscenes/credits.txt:99
388 msgid "Yannis Anthymidis"
389 msgstr "Яніс Антімідіс"
390
391 #: ../cutscenes/credits.txt:100
392 msgid "Zmicer Turok"
393 msgstr "Zmicer Turok"
394
395 #: ../cutscenes/credits.txt:103
107 #: ../cutscenes/credits.txt:108
396108 msgid "Distributors"
397109 msgstr "Розповсюджувачі"
398110
399 #: ../cutscenes/credits.txt:105
400 msgid "Ablu"
401 msgstr "Ablu"
402
403 #: ../cutscenes/credits.txt:106
404 msgid "Feillyne"
405 msgstr "Feillyne"
406
407 #: ../cutscenes/credits.txt:107
408 msgid "Jan-Hendrik Peters"
409 msgstr "Jan-Hendrik Peters"
410
411 #: ../cutscenes/credits.txt:109
412 msgid "miffe"
413 msgstr "miffe"
414
415 #: ../cutscenes/credits.txt:112
111 #: ../cutscenes/credits.txt:117
416112 msgid "Special Thanks"
417113 msgstr "Особлива подяка"
418114
419 #: ../cutscenes/credits.txt:116
115 #: ../cutscenes/credits.txt:121
420116 msgid "For giving constant feedback and testing:"
421117 msgstr "За постійні відгуки і тестування:"
422118
423 #: ../cutscenes/credits.txt:117
424 msgid "Bart Kelsey"
425 msgstr "Барт Келсі"
426
427 #: ../cutscenes/credits.txt:118
119 #: ../cutscenes/credits.txt:123
428120 msgid "The community at OpenGameArt"
429121 msgstr "Спільноті OpenGameArt"
430122
431 #: ../cutscenes/credits.txt:122
123 #: ../cutscenes/credits.txt:127
432124 msgid "For Tiled and the Flare map exporter:"
433125 msgstr "За Tiled і експортер карт Flare:"
434
435 #: ../cutscenes/credits.txt:123
436 msgid "Thorbjørn Lindeijer"
437 msgstr "Thorbjørn Lindeijer"
438
439 #: ../cutscenes/credits.txt:125
440 msgid "Ranie Jade Ramiso"
441 msgstr "Ranie Jade Ramiso"
88 msgstr ""
99 "Project-Id-Version: PACKAGE VERSION\n"
1010 "Report-Msgid-Bugs-To: \n"
11 "POT-Creation-Date: 2018-11-13 17:21+\n"
11 "POT-Creation-Date: 2019-07-29 09:34+\n"
1212 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1313 "Last-Translator: Justin Jacobs <jajdorkster@gmail.com>, 2018\n"
1414 "Language-Team: Vietnamese (https://www.transifex.com/flareorg/teams/84925/vi/)\n"
4848
4949 #: ../engine/damage_types.txt:6
5050 msgid "Melee Damage Max"
51 msgstr "Sát thương tàm gần tối đa"
51 msgstr "Sát thương tầm gần tối đa"
5252
5353 #: ../engine/damage_types.txt:12
5454 msgid "Ranged Damage"
9090 msgid "Lead Programmers"
9191 msgstr "Các lập trình viên đứng đầu"
9292
93 #: ../cutscenes/credits.txt:12
94 msgid "Clint Bellanger"
95 msgstr ""
96
97 #: ../cutscenes/credits.txt:13
98 msgid "Henrik Andersson"
99 msgstr ""
100
101 #: ../cutscenes/credits.txt:14
102 msgid "Igor Paliychuk"
103 msgstr ""
104
105 #: ../cutscenes/credits.txt:15
106 msgid "Justin Jacobs"
107 msgstr ""
108
109 #: ../cutscenes/credits.txt:16
110 msgid "Stefan Beller"
111 msgstr ""
112
113 #: ../cutscenes/credits.txt:17
114 msgid "Thane Brimhall"
115 msgstr ""
116
11793 #: ../cutscenes/credits.txt:20
11894 msgid "Programmers"
11995 msgstr "Các lập trình viên"
120
121 #: ../cutscenes/credits.txt:22
122 msgid "Andrew Engelbrecht"
123 msgstr ""
124
125 #: ../cutscenes/credits.txt:23
126 msgid "Anton Golov"
127 msgstr ""
128
129 #: ../cutscenes/credits.txt:24
130 msgid "Artur Rojek"
131 msgstr ""
132
133 #: ../cutscenes/credits.txt:25
134 msgid "blazindragon"
135 msgstr ""
136
137 #: ../cutscenes/credits.txt:26
138 msgid "Bonbadil"
139 msgstr ""
140
141 #: ../cutscenes/credits.txt:27
142 msgid "Chris Oelmueller"
143 msgstr ""
144
145 #: ../cutscenes/credits.txt:28
146 msgid "David Bariod"
147 msgstr ""
148
149 #: ../cutscenes/credits.txt:29
150 msgid "Daniel Santos"
151 msgstr ""
152
153 #: ../cutscenes/credits.txt:30
154 msgid "Gallaecio"
155 msgstr ""
156
157 #: ../cutscenes/credits.txt:31
158 msgid "Joseph Bleu"
159 msgstr ""
160
161 #: ../cutscenes/credits.txt:32
162 msgid "Juan PabloTamayo"
163 msgstr ""
164
165 #: ../cutscenes/credits.txt:33
166 msgid "Kitano"
167 msgstr ""
168
169 #: ../cutscenes/credits.txt:34
170 msgid "Kyle Belanger"
171 msgstr ""
172
173 #: ../cutscenes/credits.txt:35
174 msgid "LongerDev"
175 msgstr ""
176
177 #: ../cutscenes/credits.txt:36
178 msgid "Manuel A. Fernandez Montecelo"
179 msgstr ""
180
181 #: ../cutscenes/credits.txt:37
182 msgid "Matthew Krohn"
183 msgstr ""
184
185 #: ../cutscenes/credits.txt:38
186 msgid "Nojan"
187 msgstr ""
188
189 #: ../cutscenes/credits.txt:39
190 msgid "Pavel Kirpichyov"
191 msgstr ""
192
193 #: ../cutscenes/credits.txt:40
194 msgid "runtime-x86"
195 msgstr ""
196
197 #: ../cutscenes/credits.txt:41
198 msgid "Ryan Dansie"
199 msgstr ""
20096
20197 #: ../cutscenes/credits.txt:44
20298 msgid "Default Art"
206102 msgid "Translators"
207103 msgstr "Các dịch giả"
208104
209 #: ../cutscenes/credits.txt:51
210 msgid "Ademaro"
211 msgstr ""
212
213 #: ../cutscenes/credits.txt:52
214 msgid "Adrian Chaves Fernandez"
215 msgstr ""
216
217 #: ../cutscenes/credits.txt:53
218 msgid "Andrea Ranaldi"
219 msgstr ""
220
221 #: ../cutscenes/credits.txt:54
222 msgid "Andreas Berheim Brudin"
223 msgstr ""
224
225 #: ../cutscenes/credits.txt:55
226 msgid "Bas Doodeman"
227 msgstr ""
228
229 #: ../cutscenes/credits.txt:57
230 msgid "Carlos Sanchez"
231 msgstr ""
232
233 #: ../cutscenes/credits.txt:59
234 msgid "Christoph J. Thompson"
235 msgstr ""
236
237 #: ../cutscenes/credits.txt:60
238 msgid "Denis Lysenko"
239 msgstr ""
240
241 #: ../cutscenes/credits.txt:61
242 msgid "Diego J. Romero López"
243 msgstr ""
244
245 #: ../cutscenes/credits.txt:62
246 msgid "dumaosen"
247 msgstr ""
248
249 #: ../cutscenes/credits.txt:63
250 msgid "Emil"
251 msgstr ""
252
253 #: ../cutscenes/credits.txt:64
254 msgid "Eric R"
255 msgstr ""
256
257 #: ../cutscenes/credits.txt:65
258 msgid "Evgen Pavlov"
259 msgstr ""
260
261 #: ../cutscenes/credits.txt:66
262 msgid "Fabio Loli"
263 msgstr ""
264
265 #: ../cutscenes/credits.txt:67
266 msgid "Gianfranco Del Borrello"
267 msgstr ""
268
269 #: ../cutscenes/credits.txt:68
270 msgid "Giovanni Dalla Torre"
271 msgstr ""
272
273 #: ../cutscenes/credits.txt:69
274 msgid "GunChleoc"
275 msgstr ""
276
277 #: ../cutscenes/credits.txt:70
278 msgid "Hans Joachim Desserud"
279 msgstr ""
280
281 #: ../cutscenes/credits.txt:71
282 msgid "hark34"
283 msgstr ""
284
285 #: ../cutscenes/credits.txt:73
286 msgid "Janet Hunt"
287 msgstr ""
288
289 #: ../cutscenes/credits.txt:74
290 msgid "Juan Pablo Tamayo"
291 msgstr ""
292
293 #: ../cutscenes/credits.txt:75
294 msgid "losine"
295 msgstr ""
296
297 #: ../cutscenes/credits.txt:76
298 msgid "Marc Tormo i Bochaca"
299 msgstr ""
300
301 #: ../cutscenes/credits.txt:77
302 msgid "Michael Papageorgiou"
303 msgstr ""
304
305 #: ../cutscenes/credits.txt:78
306 msgid "Mikhail Karalevich"
307 msgstr ""
308
309 #: ../cutscenes/credits.txt:79
310 msgid "Miro Jánošík"
311 msgstr ""
312
313 #: ../cutscenes/credits.txt:80
314 msgid "Mykola Franchuk"
315 msgstr ""
316
317 #: ../cutscenes/credits.txt:81
318 msgid "MOB2"
319 msgstr ""
320
321 #: ../cutscenes/credits.txt:82
322 msgid "Morgan Strauss"
323 msgstr ""
324
325 #: ../cutscenes/credits.txt:83
326 msgid "Nea Retrogamer"
327 msgstr ""
328
329 #: ../cutscenes/credits.txt:84
330 msgid "Nguyễn Gia Phong"
331 msgstr ""
332
333 #: ../cutscenes/credits.txt:85
334 msgid "Nikita Vanku"
335 msgstr ""
336
337 #: ../cutscenes/credits.txt:86
338 msgid "Paul Wortmann"
339 msgstr ""
340
341 #: ../cutscenes/credits.txt:87
342 msgid "Pawel Puszczynski"
343 msgstr ""
344
345 #: ../cutscenes/credits.txt:88
346 msgid "Quentin Stievenart"
347 msgstr ""
348
349 #: ../cutscenes/credits.txt:89
350 msgid "Rui"
351 msgstr ""
352
353 #: ../cutscenes/credits.txt:90
354 msgid "Sergey Basalaev"
355 msgstr ""
356
357 #: ../cutscenes/credits.txt:91
358 msgid "Sergiy Borodych"
359 msgstr ""
360
361 #: ../cutscenes/credits.txt:93
362 msgid "Stefano Peris"
363 msgstr ""
364
365 #: ../cutscenes/credits.txt:94
366 msgid "sujiniku"
367 msgstr ""
368
369 #: ../cutscenes/credits.txt:95
370 msgid "Thomas Glamsch"
371 msgstr ""
372
373 #: ../cutscenes/credits.txt:96
374 msgid "Timo Sievänen"
375 msgstr ""
376
377 #: ../cutscenes/credits.txt:97
378 msgid "Vicente Monteiro"
379 msgstr ""
380
381 #: ../cutscenes/credits.txt:98
382 msgid "Wuzzy2"
383 msgstr ""
384
385 #: ../cutscenes/credits.txt:99
386 msgid "Yannis Anthymidis"
387 msgstr ""
388
389 #: ../cutscenes/credits.txt:100
390 msgid "Zmicer Turok"
391 msgstr ""
392
393 #: ../cutscenes/credits.txt:103
105 #: ../cutscenes/credits.txt:108
394106 msgid "Distributors"
395107 msgstr "Các nhà phân phối"
396108
397 #: ../cutscenes/credits.txt:105
398 msgid "Ablu"
399 msgstr ""
400
401 #: ../cutscenes/credits.txt:106
402 msgid "Feillyne"
403 msgstr ""
404
405 #: ../cutscenes/credits.txt:107
406 msgid "Jan-Hendrik Peters"
407 msgstr ""
408
409 #: ../cutscenes/credits.txt:109
410 msgid "miffe"
411 msgstr ""
412
413 #: ../cutscenes/credits.txt:112
109 #: ../cutscenes/credits.txt:117
414110 msgid "Special Thanks"
415111 msgstr "Đặc biệt cảm ơn"
416112
417 #: ../cutscenes/credits.txt:116
113 #: ../cutscenes/credits.txt:121
418114 msgid "For giving constant feedback and testing:"
419 msgstr "Về việc thử nghiệm và phản hồi thường xuyên:"
115 msgstr "Trong việc thử nghiệm và phản hồi thường xuyên:"
420116
421 #: ../cutscenes/credits.txt:117
422 msgid "Bart Kelsey"
423 msgstr ""
424
425 #: ../cutscenes/credits.txt:118
117 #: ../cutscenes/credits.txt:123
426118 msgid "The community at OpenGameArt"
427119 msgstr "Cộng đồng ở OpenGameArt"
428120
429 #: ../cutscenes/credits.txt:122
121 #: ../cutscenes/credits.txt:127
430122 msgid "For Tiled and the Flare map exporter:"
431 msgstr "Về Tiled và công cụ kết xuất bản đồ cho Flare:"
432
433 #: ../cutscenes/credits.txt:123
434 msgid "Thorbjørn Lindeijer"
435 msgstr ""
436
437 #: ../cutscenes/credits.txt:125
438 msgid "Ranie Jade Ramiso"
439 msgstr ""
123 msgstr "Cho Tiled và công cụ kết xuất bản đồ cho Flare:"
11 # This file is distributed under the same license as the FLARE package.
22 #
33 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4 # Translators:
5 # Justin Jacobs <jajdorkster@gmail.com>, 2019
6 # 杜茂森 <dumaosen_main01@outlook.com>, 2019
7 #
48 msgid ""
59 msgstr ""
610 "Project-Id-Version: PACKAGE VERSION\n"
711 "Report-Msgid-Bugs-To: \n"
8 "POT-Creation-Date: 2018-11-13 17:21+\n"
12 "POT-Creation-Date: 2019-07-29 09:34+\n"
913 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
14 "Last-Translator: 杜茂森 <dumaosen_main01@outlook.com>, 2019\n"
1015 "Language-Team: Chinese (https://www.transifex.com/flareorg/teams/84925/zh/)\n"
1116 "MIME-Version: 1.0\n"
1217 "Content-Type: text/plain; charset=UTF-8\n"
1621
1722 #: ../engine/primary_stats.txt:3
1823 msgid "Physical"
19 msgstr ""
24 msgstr "物理"
2025
2126 #: ../engine/primary_stats.txt:7
2227 msgid "Mental"
23 msgstr ""
28 msgstr "魔法"
2429
2530 #: ../engine/primary_stats.txt:11
2631 msgid "Offense"
27 msgstr ""
32 msgstr "攻击"
2833
2934 #: ../engine/primary_stats.txt:15
3035 msgid "Defense"
31 msgstr ""
36 msgstr "防御"
3237
3338 #: ../engine/damage_types.txt:3
3439 msgid "Melee Damage"
35 msgstr ""
40 msgstr "近身伤害"
3641
3742 #: ../engine/damage_types.txt:4
3843 msgid "Increases the damage done with swords and other melee weapons."
39 msgstr ""
44 msgstr "增加剑和其他近身类武器的伤害。"
4045
4146 #: ../engine/damage_types.txt:5
4247 msgid "Melee Damage Min"
43 msgstr ""
48 msgstr "近身伤害最小值"
4449
4550 #: ../engine/damage_types.txt:6
4651 msgid "Melee Damage Max"
47 msgstr ""
52 msgstr "近身伤害最大值"
4853
4954 #: ../engine/damage_types.txt:12
5055 msgid "Ranged Damage"
51 msgstr ""
56 msgstr "范围伤害"
5257
5358 #: ../engine/damage_types.txt:13
5459 msgid "Increases the damage done with bows and other ranged weapons."
55 msgstr ""
60 msgstr "增加弓和其他范围类武器的伤害。"
5661
5762 #: ../engine/damage_types.txt:14
5863 msgid "Ranged Damage Min"
59 msgstr ""
64 msgstr "范围伤害最小值"
6065
6166 #: ../engine/damage_types.txt:15
6267 msgid "Ranged Damage Max"
63 msgstr ""
68 msgstr "范围伤害最大值"
6469
6570 #: ../engine/damage_types.txt:21
6671 msgid "Mental Damage"
67 msgstr ""
72 msgstr "魔法伤害"
6873
6974 #: ../engine/damage_types.txt:22
7075 msgid "Increases the damage done with staves and other mental weapons."
71 msgstr ""
76 msgstr "增加杖和其他魔法类武器的伤害。"
7277
7378 #: ../engine/damage_types.txt:23
7479 msgid "Mental Damage Min"
75 msgstr ""
80 msgstr "魔法伤害最小值"
7681
7782 #: ../engine/damage_types.txt:24
7883 msgid "Mental Damage Max"
79 msgstr ""
84 msgstr "精神伤害最大值"
8085
8186 #: ../cutscenes/credits.txt:7
8287 msgid "Flare Engine Credits"
83 msgstr ""
88 msgstr "Flare Engine 致谢"
8489
8590 #: ../cutscenes/credits.txt:10
8691 msgid "Lead Programmers"
87 msgstr ""
88
89 #: ../cutscenes/credits.txt:12
90 msgid "Clint Bellanger"
91 msgstr ""
92
93 #: ../cutscenes/credits.txt:13
94 msgid "Henrik Andersson"
95 msgstr ""
96
97 #: ../cutscenes/credits.txt:14
98 msgid "Igor Paliychuk"
99 msgstr ""
100
101 #: ../cutscenes/credits.txt:15
102 msgid "Justin Jacobs"
103 msgstr ""
104
105 #: ../cutscenes/credits.txt:16
106 msgid "Stefan Beller"
107 msgstr ""
108
109 #: ../cutscenes/credits.txt:17
110 msgid "Thane Brimhall"
111 msgstr ""
92 msgstr "首席程序员"
11293
11394 #: ../cutscenes/credits.txt:20
11495 msgid "Programmers"
115 msgstr ""
116
117 #: ../cutscenes/credits.txt:22
118 msgid "Andrew Engelbrecht"
119 msgstr ""
120
121 #: ../cutscenes/credits.txt:23
122 msgid "Anton Golov"
123 msgstr ""
124
125 #: ../cutscenes/credits.txt:24
126 msgid "Artur Rojek"
127 msgstr ""
128
129 #: ../cutscenes/credits.txt:25
130 msgid "blazindragon"
131 msgstr ""
132
133 #: ../cutscenes/credits.txt:26
134 msgid "Bonbadil"
135 msgstr ""
136
137 #: ../cutscenes/credits.txt:27
138 msgid "Chris Oelmueller"
139 msgstr ""
140
141 #: ../cutscenes/credits.txt:28
142 msgid "David Bariod"
143 msgstr ""
144
145 #: ../cutscenes/credits.txt:29
146 msgid "Daniel Santos"
147 msgstr ""
148
149 #: ../cutscenes/credits.txt:30
150 msgid "Gallaecio"
151 msgstr ""
152
153 #: ../cutscenes/credits.txt:31
154 msgid "Joseph Bleu"
155 msgstr ""
156
157 #: ../cutscenes/credits.txt:32
158 msgid "Juan PabloTamayo"
159 msgstr ""
160
161 #: ../cutscenes/credits.txt:33
162 msgid "Kitano"
163 msgstr ""
164
165 #: ../cutscenes/credits.txt:34
166 msgid "Kyle Belanger"
167 msgstr ""
168
169 #: ../cutscenes/credits.txt:35
170 msgid "LongerDev"
171 msgstr ""
172
173 #: ../cutscenes/credits.txt:36
174 msgid "Manuel A. Fernandez Montecelo"
175 msgstr ""
176
177 #: ../cutscenes/credits.txt:37
178 msgid "Matthew Krohn"
179 msgstr ""
180
181 #: ../cutscenes/credits.txt:38
182 msgid "Nojan"
183 msgstr ""
184
185 #: ../cutscenes/credits.txt:39
186 msgid "Pavel Kirpichyov"
187 msgstr ""
188
189 #: ../cutscenes/credits.txt:40
190 msgid "runtime-x86"
191 msgstr ""
192
193 #: ../cutscenes/credits.txt:41
194 msgid "Ryan Dansie"
195 msgstr ""
96 msgstr "程序员"
19697
19798 #: ../cutscenes/credits.txt:44
19899 msgid "Default Art"
199 msgstr ""
100 msgstr "默认素材"
200101
201102 #: ../cutscenes/credits.txt:49
202103 msgid "Translators"
203 msgstr ""
104 msgstr "翻译者"
204105
205 #: ../cutscenes/credits.txt:51
206 msgid "Ademaro"
207 msgstr ""
208
209 #: ../cutscenes/credits.txt:52
210 msgid "Adrian Chaves Fernandez"
211 msgstr ""
212
213 #: ../cutscenes/credits.txt:53
214 msgid "Andrea Ranaldi"
215 msgstr ""
216
217 #: ../cutscenes/credits.txt:54
218 msgid "Andreas Berheim Brudin"
219 msgstr ""
220
221 #: ../cutscenes/credits.txt:55
222 msgid "Bas Doodeman"
223 msgstr ""
224
225 #: ../cutscenes/credits.txt:57
226 msgid "Carlos Sanchez"
227 msgstr ""
228
229 #: ../cutscenes/credits.txt:59
230 msgid "Christoph J. Thompson"
231 msgstr ""
232
233 #: ../cutscenes/credits.txt:60
234 msgid "Denis Lysenko"
235 msgstr ""
236
237 #: ../cutscenes/credits.txt:61
238 msgid "Diego J. Romero López"
239 msgstr ""
240
241 #: ../cutscenes/credits.txt:62
242 msgid "dumaosen"
243 msgstr ""
244
245 #: ../cutscenes/credits.txt:63
246 msgid "Emil"
247 msgstr ""
248
249 #: ../cutscenes/credits.txt:64
250 msgid "Eric R"
251 msgstr ""
252
253 #: ../cutscenes/credits.txt:65
254 msgid "Evgen Pavlov"
255 msgstr ""
256
257 #: ../cutscenes/credits.txt:66
258 msgid "Fabio Loli"
259 msgstr ""
260
261 #: ../cutscenes/credits.txt:67
262 msgid "Gianfranco Del Borrello"
263 msgstr ""
264
265 #: ../cutscenes/credits.txt:68
266 msgid "Giovanni Dalla Torre"
267 msgstr ""
268
269 #: ../cutscenes/credits.txt:69
270 msgid "GunChleoc"
271 msgstr ""
272
273 #: ../cutscenes/credits.txt:70
274 msgid "Hans Joachim Desserud"
275 msgstr ""
276
277 #: ../cutscenes/credits.txt:71
278 msgid "hark34"
279 msgstr ""
280
281 #: ../cutscenes/credits.txt:73
282 msgid "Janet Hunt"
283 msgstr ""
284
285 #: ../cutscenes/credits.txt:74
286 msgid "Juan Pablo Tamayo"
287 msgstr ""
288
289 #: ../cutscenes/credits.txt:75
290 msgid "losine"
291 msgstr ""
292
293 #: ../cutscenes/credits.txt:76
294 msgid "Marc Tormo i Bochaca"
295 msgstr ""
296
297 #: ../cutscenes/credits.txt:77
298 msgid "Michael Papageorgiou"
299 msgstr ""
300
301 #: ../cutscenes/credits.txt:78
302 msgid "Mikhail Karalevich"
303 msgstr ""
304
305 #: ../cutscenes/credits.txt:79
306 msgid "Miro Jánošík"
307 msgstr ""
308
309 #: ../cutscenes/credits.txt:80
310 msgid "Mykola Franchuk"
311 msgstr ""
312
313 #: ../cutscenes/credits.txt:81
314 msgid "MOB2"
315 msgstr ""
316
317 #: ../cutscenes/credits.txt:82
318 msgid "Morgan Strauss"
319 msgstr ""
320
321 #: ../cutscenes/credits.txt:83
322 msgid "Nea Retrogamer"
323 msgstr ""
324
325 #: ../cutscenes/credits.txt:84
326 msgid "Nguyễn Gia Phong"
327 msgstr ""
328
329 #: ../cutscenes/credits.txt:85
330 msgid "Nikita Vanku"
331 msgstr ""
332
333 #: ../cutscenes/credits.txt:86
334 msgid "Paul Wortmann"
335 msgstr ""
336
337 #: ../cutscenes/credits.txt:87
338 msgid "Pawel Puszczynski"
339 msgstr ""
340
341 #: ../cutscenes/credits.txt:88
342 msgid "Quentin Stievenart"
343 msgstr ""
344
345 #: ../cutscenes/credits.txt:89
346 msgid "Rui"
347 msgstr ""
348
349 #: ../cutscenes/credits.txt:90
350 msgid "Sergey Basalaev"
351 msgstr ""
352
353 #: ../cutscenes/credits.txt:91
354 msgid "Sergiy Borodych"
355 msgstr ""
356
357 #: ../cutscenes/credits.txt:93
358 msgid "Stefano Peris"
359 msgstr ""
360
361 #: ../cutscenes/credits.txt:94
362 msgid "sujiniku"
363 msgstr ""
364
365 #: ../cutscenes/credits.txt:95
366 msgid "Thomas Glamsch"
367 msgstr ""
368
369 #: ../cutscenes/credits.txt:96
370 msgid "Timo Sievänen"
371 msgstr ""
372
373 #: ../cutscenes/credits.txt:97
374 msgid "Vicente Monteiro"
375 msgstr ""
376
377 #: ../cutscenes/credits.txt:98
378 msgid "Wuzzy2"
379 msgstr ""
380
381 #: ../cutscenes/credits.txt:99
382 msgid "Yannis Anthymidis"
383 msgstr ""
384
385 #: ../cutscenes/credits.txt:100
386 msgid "Zmicer Turok"
387 msgstr ""
388
389 #: ../cutscenes/credits.txt:103
106 #: ../cutscenes/credits.txt:108
390107 msgid "Distributors"
391 msgstr ""
392
393 #: ../cutscenes/credits.txt:105
394 msgid "Ablu"
395 msgstr ""
396
397 #: ../cutscenes/credits.txt:106
398 msgid "Feillyne"
399 msgstr ""
400
401 #: ../cutscenes/credits.txt:107
402 msgid "Jan-Hendrik Peters"
403 msgstr ""
404
405 #: ../cutscenes/credits.txt:109
406 msgid "miffe"
407 msgstr ""
408
409 #: ../cutscenes/credits.txt:112
410 msgid "Special Thanks"
411 msgstr ""
412
413 #: ../cutscenes/credits.txt:116
414 msgid "For giving constant feedback and testing:"
415 msgstr ""
108 msgstr "发行者"
416109
417110 #: ../cutscenes/credits.txt:117
418 msgid "Bart Kelsey"
419 msgstr ""
111 msgid "Special Thanks"
112 msgstr "特别感谢"
420113
421 #: ../cutscenes/credits.txt:118
422 msgid "The community at OpenGameArt"
423 msgstr ""
424
425 #: ../cutscenes/credits.txt:122
426 msgid "For Tiled and the Flare map exporter:"
427 msgstr ""
114 #: ../cutscenes/credits.txt:121
115 msgid "For giving constant feedback and testing:"
116 msgstr "给予不断反馈和测试的:"
428117
429118 #: ../cutscenes/credits.txt:123
430 msgid "Thorbjørn Lindeijer"
431 msgstr ""
119 msgid "The community at OpenGameArt"
120 msgstr "OpenGameArt 社区"
432121
433 #: ../cutscenes/credits.txt:125
434 msgid "Ranie Jade Ramiso"
435 msgstr ""
122 #: ../cutscenes/credits.txt:127
123 msgid "For Tiled and the Flare map exporter:"
124 msgstr "关于 Tiled 和 Flare地图导出器:"
44 #
55 # Translators:
66 # Justin Jacobs <jajdorkster@gmail.com>, 2018
7 # Zmicer Turok <zmicerturok@gmail.com>, 2018
7 # Zmicer Turok <nashtlumach@gmail.com>, 2020
88 #
99 #, fuzzy
1010 msgid ""
1111 msgstr ""
1212 "Project-Id-Version: PACKAGE VERSION\n"
1313 "Report-Msgid-Bugs-To: \n"
14 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
14 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1515 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
16 "Last-Translator: Zmicer Turok <zmicerturok@gmail.com>, 2018\n"
16 "Last-Translator: Zmicer Turok <nashtlumach@gmail.com>, 2020\n"
1717 "Language-Team: Belarusian (https://www.transifex.com/flareorg/teams/84925/be/)\n"
1818 "MIME-Version: 1.0\n"
1919 "Content-Type: text/plain; charset=UTF-8\n"
2121 "Language: be\n"
2222 "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
2323
24 #: ../../../src/Avatar.cpp:367
24 #: ../../../src/Avatar.cpp:387
25 msgid "Your health is low!"
26 msgstr "Ваша жыццё сыходзіць!"
27
28 #: ../../../src/Avatar.cpp:419
2529 #, c-format
2630 msgid "Congratulations, you have reached level %d!"
2731 msgstr "Віншуем, вы дасягнулі %d ўзроўня!"
2832
29 #: ../../../src/Avatar.cpp:369
30 msgid "You may increase one attribute through the Character Menu."
31 msgstr "Вы можаце палепшыць адзін атрыбут у меню персанажа."
32
33 #: ../../../src/Avatar.cpp:583
33 #: ../../../src/Avatar.cpp:421
34 msgid "You may increase one or more attributes through the Character Menu."
35 msgstr "Вы можаце палепшыць адзін альбо некалькі атрыбутаў у меню персанажа."
36
37 #: ../../../src/Avatar.cpp:425
38 msgid "You may unlock one or more abilities through the Powers Menu."
39 msgstr "Вы можаце разблакаваць адзін альбо некалькі талентаў у меню талентаў."
40
41 #: ../../../src/Avatar.cpp:692
3442 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3543 msgstr ""
36 "Вы зазналі паразу. Гульня завершана. Націсніце ${INPUT_CONTINUE}, каб выйсці"
37 " ў меню."
38
39 #: ../../../src/Avatar.cpp:589
44 "Вы зазналі паразу. Гульня завершаная. Націсніце ${INPUT_CONTINUE}, каб "
45 "выйсці ў меню."
46
47 #: ../../../src/Avatar.cpp:698
4048 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
4149 msgstr "Вы зазналі паразу. Націсніце ${INPUT_CONTINUE}, каб працягнуць."
4250
43 #: ../../../src/Avatar.cpp:839
51 #: ../../../src/Avatar.cpp:949
4452 msgid "Transformation expired. You have been moved back to a safe place."
45 msgstr "Трансфармацыя завершана. Вы вярнуліся ў бяспечнае месца."
53 msgstr "Трансфармацыя завершаная. Вы вярнуліся ў бяспечнае месца."
4654
4755 #: ../../../src/CampaignManager.cpp:153
4856 #, c-format
4957 msgid "%d %s removed."
5058 msgstr "%d %s прыбрана."
5159
52 #: ../../../src/CampaignManager.cpp:162
60 #: ../../../src/CampaignManager.cpp:165
61 #, c-format
62 msgid "%s x%d removed."
63 msgstr ""
64
65 #: ../../../src/CampaignManager.cpp:167
5366 #, c-format
5467 msgid "%s removed."
5568 msgstr "%s прыбрана."
5669
57 #: ../../../src/CampaignManager.cpp:175
70 #: ../../../src/CampaignManager.cpp:180
5871 #, c-format
5972 msgid "You receive %s."
6073 msgstr "Вы атрымліваеце %s."
6174
62 #: ../../../src/CampaignManager.cpp:177
75 #: ../../../src/CampaignManager.cpp:182
6376 #, c-format
6477 msgid "You receive %s x%d."
6578 msgstr "Вы атрымліваеце %s x%d."
6679
67 #: ../../../src/CampaignManager.cpp:186
80 #: ../../../src/CampaignManager.cpp:191
6881 #, c-format
6982 msgid "You receive %d %s."
7083 msgstr "Вы атрымліваеце %d %s."
7184
72 #: ../../../src/CampaignManager.cpp:195
85 #: ../../../src/CampaignManager.cpp:200
7386 #, c-format
7487 msgid "You receive %d XP."
7588 msgstr "Вы атрымліваеце %d досведу."
7689
77 #: ../../../src/CampaignManager.cpp:201
90 #: ../../../src/CampaignManager.cpp:206
7891 msgid "HP restored."
7992 msgstr "Жыццё адноўлена."
8093
81 #: ../../../src/CampaignManager.cpp:205
94 #: ../../../src/CampaignManager.cpp:210
8295 msgid "MP restored."
83 msgstr "Мана адноўлена."
84
85 #: ../../../src/CampaignManager.cpp:210
96 msgstr "Мана адноўленая."
97
98 #: ../../../src/CampaignManager.cpp:215
8699 msgid "HP and MP restored."
87 msgstr "Жыццё і мана адноўлены."
88
89 #: ../../../src/CampaignManager.cpp:214
100 msgstr "Жыццё і мана адноўленыя."
101
102 #: ../../../src/CampaignManager.cpp:219
90103 msgid "Negative effects removed."
91 msgstr "Негатыўныя эфекты прыбраны."
92
93 #: ../../../src/CampaignManager.cpp:220
104 msgstr "Негатыўныя эфекты прыбраныя."
105
106 #: ../../../src/CampaignManager.cpp:225
94107 msgid "HP and MP restored, negative effects removed"
95 msgstr "Жыццё і мана адноўлены, негатыўныя эфекты зніклі"
108 msgstr "Жыццё і мана адноўленыя, негатыўныя эфекты зніклі"
96109
97110 #: ../../../src/DeviceList.cpp:56
98111 msgid ""
112125 "Апаратны адмалёўшчык SDL. Прадвызначаны адмалёўшчык, які найчасцей працуе "
113126 "хутчэй за праграмны адмалёўшчык SDL."
114127
115 #: ../../../src/EngineSettings.cpp:561
128 #: ../../../src/EngineSettings.cpp:572
116129 msgid "Adventurer"
117130 msgstr "Вандроўнік"
118131
119 #: ../../../src/Entity.cpp:511
132 #: ../../../src/Entity.cpp:522
120133 msgid "miss"
121134 msgstr "промах"
122135
123 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
124 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
136 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
137 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
125138 #, c-format
126139 msgid "+%d HP"
127140 msgstr "+%d жыцця"
128141
129 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
130 #: ../../../src/StatBlock.cpp:822
142 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
143 #: ../../../src/StatBlock.cpp:830
131144 #, c-format
132145 msgid "+%d MP"
133146 msgstr "+%d маны"
134147
135 #: ../../../src/EventManager.cpp:738
148 #: ../../../src/EventManager.cpp:782
136149 msgid "Unknown destination"
137150 msgstr "Невядомы накірунак"
138151
139 #: ../../../src/GameStateConfigBase.cpp:89
140 #: ../../../src/GameStateConfigBase.cpp:110
152 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
153 msgid "Loading..."
154 msgstr "Загрузка..."
155
156 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
157 msgid "Delete Save"
158 msgstr "Выдаліць гульню"
159
160 #: ../../../src/GameStateLoad.cpp:90
161 msgid "Delete this save?"
162 msgstr "Выдаліць захаваную гульню?"
163
164 #: ../../../src/GameStateLoad.cpp:92
165 msgid "Exit to Title"
166 msgstr "Выйсці ў меню"
167
168 #: ../../../src/GameStateLoad.cpp:95
169 msgid "New Game"
170 msgstr "Новая гульня"
171
172 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
173 msgid "Choose a Slot"
174 msgstr "Абярыце слот"
175
176 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
177 msgid "Enable a story mod to continue"
178 msgstr "Уключыце сюжэтны мод, каб працягнуць"
179
180 #: ../../../src/GameStateLoad.cpp:597
181 msgid "Load Game"
182 msgstr "Загрузіць гульню"
183
184 #: ../../../src/GameStateLoad.cpp:706
185 msgid "Entering game world..."
186 msgstr "Уваход у гульнявы свет..."
187
188 #: ../../../src/GameStateLoad.cpp:709
189 msgid "Loading saved game..."
190 msgstr "Загрузка захаванай гульні..."
191
192 #: ../../../src/GameStateLoad.cpp:742
193 msgid "Invalid save"
194 msgstr "Хібная гульня"
195
196 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
197 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
198 #: ../../../src/MenuPowers.cpp:1543
199 #, c-format
200 msgid "Level %d"
201 msgstr "Узровень %d"
202
203 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
204 #: ../../../src/MenuConfig.cpp:244
205 msgid "Cancel"
206 msgstr "Скасаваць"
207
208 #: ../../../src/GameStateNew.cpp:68
209 msgid "Create"
210 msgstr "Стварыць"
211
212 #: ../../../src/GameStateNew.cpp:76
213 msgid "Randomize"
214 msgstr "Перамяшаць"
215
216 #: ../../../src/GameStateNew.cpp:92
217 msgid "Choose a Portrait"
218 msgstr "Абярыце партрэт"
219
220 #: ../../../src/GameStateNew.cpp:96
221 msgid "Choose a Name"
222 msgstr "Абярыце імя"
223
224 #: ../../../src/GameStateNew.cpp:100
225 msgid "Permadeath?"
226 msgstr "Памерці можна толькі раз?"
227
228 #: ../../../src/GameStateNew.cpp:104
229 msgid "Choose a Class"
230 msgstr "Абярыце клас"
231
232 #: ../../../src/GameStateTitle.cpp:107
233 msgid "Play Game"
234 msgstr "Гуляць"
235
236 #: ../../../src/GameStateTitle.cpp:110
237 msgid "Enable a core mod to continue"
238 msgstr "Уключыце асноўны мод, каб працягнуць"
239
240 #: ../../../src/GameStateTitle.cpp:114
241 msgid "Configuration"
242 msgstr "Канфігурацыя"
243
244 #: ../../../src/GameStateTitle.cpp:117
245 msgid "Credits"
246 msgstr "Стваральнікі"
247
248 #: ../../../src/GameStateTitle.cpp:120
249 msgid "Exit Game"
250 msgstr "Выйсці"
251
252 #: ../../../src/InputState.cpp:407
253 msgid "Accept"
254 msgstr "Пагадзіцца"
255
256 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
257 #: ../../../src/SDLInputState.cpp:698
258 msgid "Up"
259 msgstr "Уверх"
260
261 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
262 #: ../../../src/SDLInputState.cpp:676
263 msgid "Down"
264 msgstr "Уніз"
265
266 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
267 #: ../../../src/SDLInputState.cpp:683
268 msgid "Left"
269 msgstr "Налева"
270
271 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
272 #: ../../../src/SDLInputState.cpp:693
273 msgid "Right"
274 msgstr "Направа"
275
276 #: ../../../src/InputState.cpp:412
277 msgid "Bar1"
278 msgstr "Панэль1"
279
280 #: ../../../src/InputState.cpp:413
281 msgid "Bar2"
282 msgstr "Панэль2"
283
284 #: ../../../src/InputState.cpp:414
285 msgid "Bar3"
286 msgstr "Панэль3"
287
288 #: ../../../src/InputState.cpp:415
289 msgid "Bar4"
290 msgstr "Панэль4"
291
292 #: ../../../src/InputState.cpp:416
293 msgid "Bar5"
294 msgstr "Панэль5"
295
296 #: ../../../src/InputState.cpp:417
297 msgid "Bar6"
298 msgstr "Панэль6"
299
300 #: ../../../src/InputState.cpp:418
301 msgid "Bar7"
302 msgstr "Панэль7"
303
304 #: ../../../src/InputState.cpp:419
305 msgid "Bar8"
306 msgstr "Панэль8"
307
308 #: ../../../src/InputState.cpp:420
309 msgid "Bar9"
310 msgstr "Панэль9"
311
312 #: ../../../src/InputState.cpp:421
313 msgid "Bar0"
314 msgstr "Панэль0"
315
316 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
317 #: ../../../src/MenuCharacter.cpp:54
318 msgid "Character"
319 msgstr "Персанаж"
320
321 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
322 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
323 msgid "Inventory"
324 msgstr "Інвентар"
325
326 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
327 #: ../../../src/MenuPowers.cpp:167
328 msgid "Powers"
329 msgstr "Таленты"
330
331 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
332 #: ../../../src/MenuLog.cpp:72
333 msgid "Log"
334 msgstr "Нататнік"
335
336 #: ../../../src/InputState.cpp:426
337 msgid "Main1"
338 msgstr "Галоўнае1"
339
340 #: ../../../src/InputState.cpp:427
341 msgid "Main2"
342 msgstr "Галоўнае2"
343
344 #: ../../../src/InputState.cpp:428
345 msgid "Ctrl"
346 msgstr "Ctrl"
347
348 #: ../../../src/InputState.cpp:429
349 msgid "Shift"
350 msgstr "Shift"
351
352 #: ../../../src/InputState.cpp:430
353 msgid "Alt"
354 msgstr "Alt"
355
356 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
357 msgid "Delete"
358 msgstr "Delete"
359
360 #: ../../../src/InputState.cpp:432
361 msgid "ActionBar Accept"
362 msgstr "Панэль дзеянняў: пагадзіцца"
363
364 #: ../../../src/InputState.cpp:433
365 msgid "ActionBar Left"
366 msgstr "Панэль дзеянняў: улева"
367
368 #: ../../../src/InputState.cpp:434
369 msgid "ActionBar Right"
370 msgstr "Панэль дзеянняў: управа"
371
372 #: ../../../src/InputState.cpp:435
373 msgid "ActionBar Use"
374 msgstr "Панэль дзеянняў: выкарыстаць"
375
376 #: ../../../src/InputState.cpp:436
377 msgid "Developer Menu"
378 msgstr "Меню распрацоўшчыка"
379
380 #: ../../../src/InputState.cpp:438
381 msgid "Left Mouse"
382 msgstr "Левая кнопка мышы"
383
384 #: ../../../src/InputState.cpp:439
385 msgid "Middle Mouse"
386 msgstr "Сярэдняя кнопка мышы"
387
388 #: ../../../src/InputState.cpp:440
389 msgid "Right Mouse"
390 msgstr "Правая кнопка мышы"
391
392 #: ../../../src/InputState.cpp:441
393 msgid "Wheel Up"
394 msgstr "Пракрутка ўверх"
395
396 #: ../../../src/InputState.cpp:442
397 msgid "Wheel Down"
398 msgstr "Пракрутка ўніз"
399
400 #: ../../../src/InputState.cpp:443
401 msgid "Mouse X1"
402 msgstr "Мыш х2"
403
404 #: ../../../src/InputState.cpp:444
405 msgid "Mouse X2"
406 msgstr "Мыш х1"
407
408 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
409 msgid "Unknown Item"
410 msgstr "Невядомы прадмет"
411
412 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
413 #, c-format
414 msgid "%d%% Speed"
415 msgstr "Хуткасць %d%%"
416
417 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
418 #, c-format
419 msgid "%d%% Attack Speed"
420 msgstr "Хуткасць атакі %d%%"
421
422 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
423 #: ../../../src/MenuPowers.cpp:832
424 #, c-format
425 msgid "Resistance (%s)"
426 msgstr "Супраціўленне (%s)"
427
428 #: ../../../src/ItemManager.cpp:714
429 #, c-format
430 msgid "Requires %s"
431 msgstr "Патрабуецца %s"
432
433 #: ../../../src/ItemManager.cpp:763
434 msgid "Quest Item"
435 msgstr "Прадмет задання"
436
437 #: ../../../src/ItemManager.cpp:790
438 #, c-format
439 msgid "Quality: %s"
440 msgstr "Якасць: %s"
441
442 #: ../../../src/ItemManager.cpp:815
443 #, c-format
444 msgid "Absorb: %d-%d"
445 msgstr "Паглынае: %d-%d"
446
447 #: ../../../src/ItemManager.cpp:817
448 #, c-format
449 msgid "Absorb: %d"
450 msgstr "Паглынае: %d"
451
452 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
453 #: ../../../src/MenuPowers.cpp:1133
454 #, c-format
455 msgid "Requires Level %d"
456 msgstr "Патрабуецца %d узровень"
457
458 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
459 #: ../../../src/MenuPowers.cpp:1124
460 #, c-format
461 msgid "Requires %s %d"
462 msgstr "Патрабуецца %s %d"
463
464 #: ../../../src/ItemManager.cpp:879
465 #, c-format
466 msgid "Requires Class: %s"
467 msgstr "Патрабуецца клас: %s"
468
469 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
470 #, c-format
471 msgid "Buy Price: %d %s"
472 msgstr "Кошт пакупкі: %d %s"
473
474 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
475 #, c-format
476 msgid "Buy Price: %d %s each"
477 msgstr "Кошт пакупкі: %d %s за кожны"
478
479 #: ../../../src/ItemManager.cpp:916
480 #, c-format
481 msgid "Sell Price: %d %s"
482 msgstr "Кошт продажу: %d %s"
483
484 #: ../../../src/ItemManager.cpp:918
485 #, c-format
486 msgid "Sell Price: %d %s each"
487 msgstr "Кошт продажу: %d %s за кожны"
488
489 #: ../../../src/ItemManager.cpp:927
490 msgid "Set:"
491 msgstr "Набор:"
492
493 #: ../../../src/ItemManager.cpp:934
494 #, c-format
495 msgid "%d items:"
496 msgstr "%d прадметаў:"
497
498 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
499 #, c-format
500 msgid "Press [%s] to use"
501 msgstr "Націсніце [%s], каб выкарыстаць"
502
503 #: ../../../src/ItemManager.cpp:951
504 #, c-format
505 msgid "Press [%s] to read"
506 msgstr "Націсніце [%s], каб прачытаць"
507
508 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
509 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
510 #, c-format
511 msgid "Hotkey: %s"
512 msgstr "Гарачая клавіша: %s"
513
514 #: ../../../src/MenuActionBar.cpp:599
515 msgid "Not enough MP."
516 msgstr "Не стае маны."
517
518 #: ../../../src/MenuActiveEffects.cpp:124
519 #, c-format
520 msgid "x%d"
521 msgstr "x%d"
522
523 #: ../../../src/MenuActiveEffects.cpp:219
524 msgid "Remaining:"
525 msgstr "Засталося:"
526
527 #: ../../../src/MenuActiveEffects.cpp:225
528 #, c-format
529 msgid "x%d stacks"
530 msgstr "x%d кампанентаў"
531
532 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
533 msgid "Name"
534 msgstr "Імя"
535
536 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
537 msgid "Level"
538 msgstr "Узровень"
539
540 #: ../../../src/MenuCharacter.cpp:310
541 #, c-format
542 msgid "%d unspent stat point"
543 msgstr "%d невыкарыстаны пункт уменняў"
544
545 #: ../../../src/MenuCharacter.cpp:313
546 #, c-format
547 msgid "%d unspent stat points"
548 msgstr "%d невыкарыстаных пунктаў уменняў"
549
550 #: ../../../src/MenuCharacter.cpp:355
551 #, c-format
552 msgid "Reduces the damage taken from \"%s\" elemental attacks."
553 msgstr "Памяншае ўрон ад \"%s\" стыхійных атак."
554
555 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
556 #, c-format
557 msgid "XP: %d"
558 msgstr "Досвед: %d"
559
560 #: ../../../src/MenuCharacter.cpp:367
561 #, c-format
562 msgid "Next: %d"
563 msgstr "Наступны: %d"
564
565 #: ../../../src/MenuCharacter.cpp:373
566 #, c-format
567 msgid "base (%d), bonus (%d)"
568 msgstr "базавае (%d), бонус (%d)"
569
570 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
571 msgid "Related stats:"
572 msgstr "Звязаныя ўменні:"
573
574 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
575 #, c-format
576 msgid "Each level grants %d."
577 msgstr "З кожным узроўнем даецца %d."
578
579 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
580 #, c-format
581 msgid "Each point of %s grants %d."
582 msgstr "З кожным пунктам %s даецца %d"
583
584 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
585 msgid "Clear"
586 msgstr "Ачысціць"
587
588 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
589 msgid "Assign:"
590 msgstr "Прызначыць:"
591
592 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
141593 msgid "Defaults"
142594 msgstr "Прадвызначана"
143595
144 #: ../../../src/GameStateConfigBase.cpp:89
596 #: ../../../src/MenuConfig.cpp:123
145597 msgid "Reset ALL settings?"
146598 msgstr "Скінуць УСЕ налады?"
147599
148 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
600 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
149601 msgid "OK"
150602 msgstr "Добра"
151603
152 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
153 #: ../../../src/InputState.cpp:401
154 msgid "Cancel"
155 msgstr "Скасаваць"
156
157 #: ../../../src/GameStateConfigBase.cpp:160
158 #: ../../../src/GameStateConfigDesktop.cpp:130
604 #: ../../../src/MenuConfig.cpp:246
605 msgid "Continue"
606 msgstr "Працягнуць"
607
608 #: ../../../src/MenuConfig.cpp:248
609 msgid "Save Game"
610 msgstr ""
611
612 #: ../../../src/MenuConfig.cpp:291
613 msgid "Default"
614 msgstr "Прадвызначана"
615
616 #: ../../../src/MenuConfig.cpp:291
617 msgid ""
618 "Show all loot tooltips, except for those that would be obscured by the "
619 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
620 msgstr ""
621 "Паказваць усе выплыўныя падказкі аб здабычы, за выключэннем схаваных гульцом"
622 " альбо ворагам. Часова паказваць усе выплыўныя падказкі клавішай \"Alt\"."
623
624 #: ../../../src/MenuConfig.cpp:292
625 msgid "Show all"
626 msgstr "Паказваць усе"
627
628 #: ../../../src/MenuConfig.cpp:292
629 msgid ""
630 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
631 msgstr ""
632 "Заўсёды паказваць выплыўныя падказкі аб здабычы. Часова хаваць падказкі "
633 "клавішай \"Alt\"."
634
635 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
636 msgid "Hidden"
637 msgstr "Хаваць"
638
639 #: ../../../src/MenuConfig.cpp:293
640 msgid ""
641 "Always hide loot tooltips, except for when a piece of loot is hovered with "
642 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
643 msgstr ""
644 "Заўсёды хаваць выплыўныя падказкі пра здабычу, за выключэннем калі частка "
645 "здабычы знаходзіцца пад курсорам мышы. Часова паказваць усе выплыўныя "
646 "падказкі «Alt»."
647
648 #: ../../../src/MenuConfig.cpp:296
649 msgid "Visible"
650 msgstr "Паказваць"
651
652 #: ../../../src/MenuConfig.cpp:297
653 msgid "Visible (2x zoom)"
654 msgstr "Паказваць (2х)"
655
656 #: ../../../src/MenuConfig.cpp:301
657 msgid ""
658 "Controls the type of warning to be activated when the player is below the "
659 "low health threshold."
660 msgstr ""
661 "Кіруе тыпам папярэджання, якое мусіць актывавацца калі ўзровень жыцця "
662 "апускаецца ніжэй за парог."
663
664 #: ../../../src/MenuConfig.cpp:302
665 msgid "- Display a message"
666 msgstr "- Вывесці паведамленне"
667
668 #: ../../../src/MenuConfig.cpp:303
669 msgid "- Play a sound"
670 msgstr "- Прайграць гук"
671
672 #: ../../../src/MenuConfig.cpp:304
673 msgid "- Change the cursor"
674 msgstr "- Змяніць курсор"
675
676 #: ../../../src/MenuConfig.cpp:306
677 msgid "Disabled"
678 msgstr "Выключана"
679
680 #: ../../../src/MenuConfig.cpp:307
681 msgid "All"
682 msgstr "Усё"
683
684 #: ../../../src/MenuConfig.cpp:308
685 msgid "Message & Cursor"
686 msgstr "Паведамленне і курсор"
687
688 #: ../../../src/MenuConfig.cpp:309
689 msgid "Message & Sound"
690 msgstr "Паведамленне і гук"
691
692 #: ../../../src/MenuConfig.cpp:310
693 msgid "Sound & Cursor"
694 msgstr "Гук і курсор"
695
696 #: ../../../src/MenuConfig.cpp:311
697 msgid "Message"
698 msgstr "Паведамленне"
699
700 #: ../../../src/MenuConfig.cpp:312
701 msgid "Cursor"
702 msgstr "Курсор"
703
704 #: ../../../src/MenuConfig.cpp:313
705 msgid "Sound"
706 msgstr "Гук"
707
708 #: ../../../src/MenuConfig.cpp:319
709 msgid ""
710 "When the player's health drops below the given threshold, the low health "
711 "notifications are triggered if one or more of them is enabled."
712 msgstr ""
713 "Калі жыццё гульца зніжаецца за прызначаны парог, паведамленні выведуцца, "
714 "калі адно альбо некалькі з іх уключаныя."
715
716 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
717 msgid "Exit"
718 msgstr "Выйсці"
719
720 #: ../../../src/MenuConfig.cpp:333
721 msgid "Video"
722 msgstr "Відэа"
723
724 #: ../../../src/MenuConfig.cpp:334
159725 msgid "Audio"
160726 msgstr "Аўдыё"
161727
162 #: ../../../src/GameStateConfigBase.cpp:161
163 #: ../../../src/GameStateConfigDesktop.cpp:131
728 #: ../../../src/MenuConfig.cpp:335
164729 msgid "Interface"
165730 msgstr "Інтэрфейс"
166731
167 #: ../../../src/GameStateConfigBase.cpp:162
168 #: ../../../src/GameStateConfigDesktop.cpp:134
732 #: ../../../src/MenuConfig.cpp:336
733 msgid "Input"
734 msgstr "Увод"
735
736 #: ../../../src/MenuConfig.cpp:337
737 msgid "Keybindings"
738 msgstr "Клавішы"
739
740 #: ../../../src/MenuConfig.cpp:338
169741 msgid "Mods"
170742 msgstr "Моды"
171743
172 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
744 #: ../../../src/MenuConfig.cpp:350
745 msgid "Paused"
746 msgstr "Прыпыніць"
747
748 #: ../../../src/MenuConfig.cpp:353
749 msgid "Time Played"
750 msgstr "Час гульні"
751
752 #: ../../../src/MenuConfig.cpp:359
753 msgid "Renderer"
754 msgstr "Адмалёўшчык"
755
756 #: ../../../src/MenuConfig.cpp:360
757 msgid "Full Screen Mode"
758 msgstr "Поўнаэкранны рэжым"
759
760 #: ../../../src/MenuConfig.cpp:361
761 msgid "Hardware surfaces"
762 msgstr "Апаратныя паверхні"
763
764 #: ../../../src/MenuConfig.cpp:362
765 msgid "V-Sync"
766 msgstr "Вертыкальная сінхранізацыя"
767
768 #: ../../../src/MenuConfig.cpp:363
769 msgid "Texture Filtering"
770 msgstr "Фільтрацыя тэкстур"
771
772 #: ../../../src/MenuConfig.cpp:364
773 msgid "DPI scaling"
774 msgstr "Маштабаванне DPI"
775
776 #: ../../../src/MenuConfig.cpp:365
777 msgid "Parallax Layers"
778 msgstr "Пласты Parallax"
779
780 #: ../../../src/MenuConfig.cpp:366
781 msgid "Allow changing gamma"
782 msgstr "Дазволіць змяняць гаму"
783
784 #: ../../../src/MenuConfig.cpp:367
785 msgid "Gamma"
786 msgstr "Гама"
787
788 #: ../../../src/MenuConfig.cpp:369
789 msgid "Sound Volume"
790 msgstr "Гучнасць наваколля"
791
792 #: ../../../src/MenuConfig.cpp:370
173793 msgid "Music Volume"
174794 msgstr "Гучнасць музыкі"
175795
176 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
177 msgid "Sound Volume"
178 msgstr "Гучнасць наваколля"
179
180 #: ../../../src/GameStateConfigBase.cpp:257
796 #: ../../../src/MenuConfig.cpp:372
181797 msgid "Language"
182798 msgstr "Мова"
183799
184 #: ../../../src/GameStateConfigBase.cpp:266
800 #: ../../../src/MenuConfig.cpp:373
185801 msgid "Show FPS"
186802 msgstr "Паказваць FPS"
187803
188 #: ../../../src/GameStateConfigBase.cpp:270
804 #: ../../../src/MenuConfig.cpp:374
805 msgid "Hardware mouse cursor"
806 msgstr "Апаратны курсор мышы"
807
808 #: ../../../src/MenuConfig.cpp:375
189809 msgid "Colorblind Mode"
190810 msgstr "Рэжым дальтанізму"
191811
192 #: ../../../src/GameStateConfigBase.cpp:274
193 msgid "Hardware mouse cursor"
194 msgstr "Апаратны курсор мышы"
195
196 #: ../../../src/GameStateConfigBase.cpp:278
812 #: ../../../src/MenuConfig.cpp:376
197813 msgid "Developer Mode"
198814 msgstr "Рэжым распрацоўшчыка"
199815
200 #: ../../../src/GameStateConfigBase.cpp:282
816 #: ../../../src/MenuConfig.cpp:377
201817 msgid "Subtitles"
202 msgstr "Субтытры"
203
204 #: ../../../src/GameStateConfigBase.cpp:286
205 msgid "Active Mods"
206 msgstr "Актыўныя моды"
207
208 #: ../../../src/GameStateConfigBase.cpp:295
209 msgid "Available Mods"
210 msgstr "Наяўныя моды"
211
212 #: ../../../src/GameStateConfigBase.cpp:314
213 msgid "<< Disable"
214 msgstr "<< Выключыць"
215
216 #: ../../../src/GameStateConfigBase.cpp:320
217 msgid "Enable >>"
218 msgstr "Уключыць >>"
219
220 #: ../../../src/GameStateConfigBase.cpp:873
221 msgid "Version:"
222 msgstr "Версія:"
223
224 #: ../../../src/GameStateConfigBase.cpp:878
225 msgid "Game:"
226 msgstr "Гульня:"
227
228 #: ../../../src/GameStateConfigBase.cpp:883
229 msgid "Engine version:"
230 msgstr "Версія рухавіка:"
231
232 #: ../../../src/GameStateConfigBase.cpp:891
233 msgid "Requires mods:"
234 msgstr "Патрабуюцца моды:"
235
236 #: ../../../src/GameStateConfigDesktop.cpp:83
237 #: ../../../src/GameStateConfigDesktop.cpp:751
238 msgid "Clear"
239 msgstr "Ачысціць"
240
241 #: ../../../src/GameStateConfigDesktop.cpp:83
242 #: ../../../src/GameStateConfigDesktop.cpp:749
243 msgid "Assign:"
244 msgstr "Прызначыць:"
245
246 #: ../../../src/GameStateConfigDesktop.cpp:128
247 msgid "Video"
248 msgstr "Відэа"
249
250 #: ../../../src/GameStateConfigDesktop.cpp:132
251 msgid "Input"
252 msgstr "Увод"
253
254 #: ../../../src/GameStateConfigDesktop.cpp:133
255 msgid "Keybindings"
256 msgstr "Клавішы"
257
258 #: ../../../src/GameStateConfigDesktop.cpp:188
818 msgstr "Субцітры"
819
820 #: ../../../src/MenuConfig.cpp:378
821 msgid "Loot tooltip visibility"
822 msgstr "Паказваць падказкі пра здабычу"
823
824 #: ../../../src/MenuConfig.cpp:379
825 msgid "Mini-map mode"
826 msgstr "Рэжым мінімапы"
827
828 #: ../../../src/MenuConfig.cpp:380
829 msgid "Always show stat bar labels"
830 msgstr "Заўсёды паказваць адмеціны ў радку стану"
831
832 #: ../../../src/MenuConfig.cpp:381
833 msgid "Allow stat bar auto-hiding"
834 msgstr "Уключыць аўтаматычнае хаванне радку стану"
835
836 #: ../../../src/MenuConfig.cpp:382
837 msgid "Show combat text"
838 msgstr "Паказваць тэкст бою"
839
840 #: ../../../src/MenuConfig.cpp:383
841 msgid "Automatically equip items"
842 msgstr "Аўтаматычна апранаць прадметы"
843
844 #: ../../../src/MenuConfig.cpp:384
845 msgid "Show hidden entity markers"
846 msgstr "Паказваць схаваныя пазнакі"
847
848 #: ../../../src/MenuConfig.cpp:385
849 msgid "Low health notification"
850 msgstr "Апавяшчэнне пра нізкае жыццё"
851
852 #: ../../../src/MenuConfig.cpp:386
853 msgid "Low health threshold"
854 msgstr "Мінімальны парог жыцця"
855
856 #: ../../../src/MenuConfig.cpp:389
857 msgid "Joystick"
858 msgstr "Джойсцік"
859
860 #: ../../../src/MenuConfig.cpp:390
861 msgid "Move hero using mouse"
862 msgstr "Перамяшчаць героя мышшу"
863
864 #: ../../../src/MenuConfig.cpp:391
865 msgid "Mouse aim"
866 msgstr "Нацэльвацца мышшу"
867
868 #: ../../../src/MenuConfig.cpp:392
869 msgid "Do not use mouse"
870 msgstr "Не выкарыстоўваць мыш"
871
872 #: ../../../src/MenuConfig.cpp:393
873 msgid "Swap mouse movement button"
874 msgstr "Пераключыць кнопку руху мышы"
875
876 #: ../../../src/MenuConfig.cpp:394
877 msgid "Attack with mouse movement"
878 msgstr "Атакаваць рухамі мышшу"
879
880 #: ../../../src/MenuConfig.cpp:395
881 msgid "Joystick Deadzone"
882 msgstr "Мёртвая зона джойсціка"
883
884 #: ../../../src/MenuConfig.cpp:405
885 #, c-format
886 msgid "Primary binding: %s"
887 msgstr "Першасныя значэнні: %s"
888
889 #: ../../../src/MenuConfig.cpp:406
890 #, c-format
891 msgid "Alternate binding: %s"
892 msgstr "Альтэрнатыўныя значэнні: %s"
893
894 #: ../../../src/MenuConfig.cpp:407
895 #, c-format
896 msgid "Joystick binding: %s"
897 msgstr "Значэнні джойсціка: %s"
898
899 #: ../../../src/MenuConfig.cpp:508
259900 msgid ""
260901 "Will try to store surfaces in video memory versus system memory. The effect "
261902 "this has on performance depends on the renderer."
262903 msgstr ""
263 "Паспрабуйце апрацоўваць паверхні ў відэапамяці, а не ў сістэмнай памяці. "
904 "Спрабаваць апрацоўваць паверхні ў відэапамяці, а не ў сістэмнай памяці. "
264905 "Эфект залежыць ад адмалёўшчыка."
265906
266 #: ../../../src/GameStateConfigDesktop.cpp:189
907 #: ../../../src/MenuConfig.cpp:509
267908 msgid ""
268909 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
269910 "windowed mode or input lag."
271912 "Прадухіляе разрывы экрану. Выключыце, калі ўзнікаюць праблемы з ўводам альбо"
272913 " ў аконным рэжыме."
273914
274 #: ../../../src/GameStateConfigDesktop.cpp:190
915 #: ../../../src/MenuConfig.cpp:510
275916 msgid ""
276917 "When enabled, this uses the screen DPI in addition to the window dimensions "
277918 "to scale the rendering resolution. Otherwise, only the window dimensions are"
280921 "Калі ўключана, дадаткова да маштабавання па памерах акна для адмалёўкі па "
281922 "раздзяляльнай здольнасці выкарыстоўваецца экран DPI."
282923
283 #: ../../../src/GameStateConfigDesktop.cpp:191
924 #: ../../../src/MenuConfig.cpp:511
284925 msgid ""
285926 "This enables parallax (non-tile) layers. Disabling this setting can improve "
286927 "performance in some cases."
287928 msgstr ""
288
289 #: ../../../src/GameStateConfigDesktop.cpp:192
290 msgid "Experimental"
291 msgstr "Эксперыментальна"
292
293 #: ../../../src/GameStateConfigDesktop.cpp:193
294 msgid "For handheld devices"
295 msgstr "Для мабільных прылад"
296
297 #: ../../../src/GameStateConfigDesktop.cpp:211
298 msgid "Renderer"
299 msgstr "Адмалёўшчык"
300
301 #: ../../../src/GameStateConfigDesktop.cpp:227
302 msgid "Full Screen Mode"
303 msgstr "Поўнаэкранны рэжым"
304
305 #: ../../../src/GameStateConfigDesktop.cpp:231
306 msgid "Move hero using mouse"
307 msgstr "Перамяшчаць героя мышшу"
308
309 #: ../../../src/GameStateConfigDesktop.cpp:235
310 msgid "Hardware surfaces"
311 msgstr "Апаратныя паверхні"
312
313 #: ../../../src/GameStateConfigDesktop.cpp:239
314 msgid "V-Sync"
315 msgstr "Вертыкальная сінхранізацыя"
316
317 #: ../../../src/GameStateConfigDesktop.cpp:243
318 msgid "Texture Filtering"
319 msgstr "Фільтрацыя тэкстур"
320
321 #: ../../../src/GameStateConfigDesktop.cpp:247
322 msgid "DPI scaling"
323 msgstr "Маштабаванне DPI"
324
325 #: ../../../src/GameStateConfigDesktop.cpp:251
326 msgid "Parallax Layers"
327 msgstr ""
328
329 #: ../../../src/GameStateConfigDesktop.cpp:255
330 msgid "Allow changing gamma"
331 msgstr "Дазволіць змяняць гаму"
332
333 #: ../../../src/GameStateConfigDesktop.cpp:259
334 msgid "Gamma"
335 msgstr "Гама"
336
337 #: ../../../src/GameStateConfigDesktop.cpp:263
338 msgid "Use joystick"
339 msgstr "Вкарыстоўваць джойсцік"
340
341 #: ../../../src/GameStateConfigDesktop.cpp:267
342 msgid "Joystick"
343 msgstr "Джойсцік"
344
345 #: ../../../src/GameStateConfigDesktop.cpp:283
346 msgid "Mouse aim"
347 msgstr "Нацэльвацца мышшу"
348
349 #: ../../../src/GameStateConfigDesktop.cpp:287
350 msgid "Do not use mouse"
351 msgstr "Не выкарыстоўваць мыш"
352
353 #: ../../../src/GameStateConfigDesktop.cpp:291
354 msgid "Joystick Deadzone"
355 msgstr "Мёртвая зона джойсціка"
356
357 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
358 msgid "Loading..."
359 msgstr "Загрузка..."
360
361 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
362 msgid "Delete Save"
363 msgstr "Выдаліць гульню"
364
365 #: ../../../src/GameStateLoad.cpp:88
366 msgid "Delete this save?"
367 msgstr "Выдаліць захаваную гульню?"
368
369 #: ../../../src/GameStateLoad.cpp:90
370 msgid "Exit to Title"
371 msgstr "Выйсці ў меню"
372
373 #: ../../../src/GameStateLoad.cpp:93
374 msgid "New Game"
375 msgstr "Новая гульня"
376
377 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
378 msgid "Choose a Slot"
379 msgstr "Абярыце слот"
380
381 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
382 msgid "Enable a story mod to continue"
383 msgstr "Уключыце сюжэтны мод, каб працягнуць"
384
385 #: ../../../src/GameStateLoad.cpp:589
386 msgid "Load Game"
387 msgstr "Загрузіць гульню"
388
389 #: ../../../src/GameStateLoad.cpp:695
390 msgid "Entering game world..."
391 msgstr "Уваход у гульнявы свет..."
392
393 #: ../../../src/GameStateLoad.cpp:698
394 msgid "Loading saved game..."
395 msgstr "Загрузка захаванай гульні..."
396
397 #: ../../../src/GameStateLoad.cpp:731
398 msgid "Invalid save"
399 msgstr "Хібная гульня"
400
401 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
402 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
403 #: ../../../src/MenuPowers.cpp:1542
404 #, c-format
405 msgid "Level %d"
406 msgstr "Узровень %d"
407
408 #: ../../../src/GameStateNew.cpp:68
409 msgid "Create"
410 msgstr "Стварыць"
411
412 #: ../../../src/GameStateNew.cpp:76
413 msgid "Randomize"
414 msgstr "Перамяшайце"
415
416 #: ../../../src/GameStateNew.cpp:92
417 msgid "Choose a Portrait"
418 msgstr "Абярыце партрэт"
419
420 #: ../../../src/GameStateNew.cpp:96
421 msgid "Choose a Name"
422 msgstr "Абярыце імя"
423
424 #: ../../../src/GameStateNew.cpp:100
425 msgid "Permadeath?"
426 msgstr "Памерці можна толькі раз?"
427
428 #: ../../../src/GameStateNew.cpp:104
429 msgid "Choose a Class"
430 msgstr "Абярыце клас"
431
432 #: ../../../src/GameStateTitle.cpp:108
433 msgid "Play Game"
434 msgstr "Гуляць"
435
436 #: ../../../src/GameStateTitle.cpp:111
437 msgid "Enable a core mod to continue"
438 msgstr "Уключыце асноўны мод, каб працягнуць"
439
440 #: ../../../src/GameStateTitle.cpp:115
441 msgid "Configuration"
442 msgstr "Канфігурацыя"
443
444 #: ../../../src/GameStateTitle.cpp:118
445 msgid "Credits"
446 msgstr "Стваральнікі"
447
448 #: ../../../src/GameStateTitle.cpp:121
449 msgid "Exit Game"
450 msgstr "Выйсці"
451
452 #: ../../../src/InputState.cpp:402
453 msgid "Accept"
454 msgstr "Пагадзіцца"
455
456 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
457 msgid "Up"
458 msgstr "Уверх"
459
460 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
461 msgid "Down"
462 msgstr "Уніз"
463
464 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
465 msgid "Left"
466 msgstr "Налева"
467
468 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
469 msgid "Right"
470 msgstr "Направа"
471
472 #: ../../../src/InputState.cpp:407
473 msgid "Bar1"
474 msgstr "Панэль1"
475
476 #: ../../../src/InputState.cpp:408
477 msgid "Bar2"
478 msgstr "Панэль2"
479
480 #: ../../../src/InputState.cpp:409
481 msgid "Bar3"
482 msgstr "Панэль3"
483
484 #: ../../../src/InputState.cpp:410
485 msgid "Bar4"
486 msgstr "Панэль4"
487
488 #: ../../../src/InputState.cpp:411
489 msgid "Bar5"
490 msgstr "Панэль5"
491
492 #: ../../../src/InputState.cpp:412
493 msgid "Bar6"
494 msgstr "Панэль6"
495
496 #: ../../../src/InputState.cpp:413
497 msgid "Bar7"
498 msgstr "Панэль7"
499
500 #: ../../../src/InputState.cpp:414
501 msgid "Bar8"
502 msgstr "Панэль8"
503
504 #: ../../../src/InputState.cpp:415
505 msgid "Bar9"
506 msgstr "Панэль9"
507
508 #: ../../../src/InputState.cpp:416
509 msgid "Bar0"
510 msgstr "Панэль0"
511
512 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
513 #: ../../../src/MenuCharacter.cpp:54
514 msgid "Character"
515 msgstr "Персанаж"
516
517 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
518 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
519 msgid "Inventory"
520 msgstr "Інвентар"
521
522 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
523 #: ../../../src/MenuPowers.cpp:168
524 msgid "Powers"
525 msgstr "Таленты"
526
527 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
528 #: ../../../src/MenuLog.cpp:72
529 msgid "Log"
530 msgstr "Нататнік"
531
532 #: ../../../src/InputState.cpp:421
533 msgid "Main1"
534 msgstr "Галоўнае1"
535
536 #: ../../../src/InputState.cpp:422
537 msgid "Main2"
538 msgstr "Галоўнае2"
539
540 #: ../../../src/InputState.cpp:423
541 msgid "Ctrl"
542 msgstr "Ctrl"
543
544 #: ../../../src/InputState.cpp:424
545 msgid "Shift"
546 msgstr "Shift"
547
548 #: ../../../src/InputState.cpp:425
549 msgid "Alt"
550 msgstr "Alt"
551
552 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
553 msgid "Delete"
554 msgstr "Delete"
555
556 #: ../../../src/InputState.cpp:427
557 msgid "ActionBar Accept"
558 msgstr "Панэль дзеянняў: пагадзіцца"
559
560 #: ../../../src/InputState.cpp:428
561 msgid "ActionBar Left"
562 msgstr "Панэль дзеянняў: улева"
563
564 #: ../../../src/InputState.cpp:429
565 msgid "ActionBar Right"
566 msgstr "Панэль дзеянняў: управа"
567
568 #: ../../../src/InputState.cpp:430
569 msgid "ActionBar Use"
570 msgstr "Панэль дзеянняў: выкарыстаць"
571
572 #: ../../../src/InputState.cpp:431
573 msgid "Developer Menu"
574 msgstr "Меню распрацоўшчыка"
575
576 #: ../../../src/InputState.cpp:433
577 msgid "Left Mouse"
578 msgstr "Левая кнопка мышы"
579
580 #: ../../../src/InputState.cpp:434
581 msgid "Middle Mouse"
582 msgstr "Сярэдняя кнопка мышы"
583
584 #: ../../../src/InputState.cpp:435
585 msgid "Right Mouse"
586 msgstr "Правая кнопка мышы"
587
588 #: ../../../src/InputState.cpp:436
589 msgid "Wheel Up"
590 msgstr "Пракрутка ўверх"
591
592 #: ../../../src/InputState.cpp:437
593 msgid "Wheel Down"
594 msgstr "Пракрутка ўніз"
595
596 #: ../../../src/InputState.cpp:438
597 msgid "Mouse X1"
598 msgstr "Мыш х2"
599
600 #: ../../../src/InputState.cpp:439
601 msgid "Mouse X2"
602 msgstr "Мыш х1"
603
604 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
605 msgid "Unknown Item"
606 msgstr "Невядомы прадмет"
607
608 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
609 #, c-format
610 msgid "%d%% Speed"
611 msgstr "Хуткасць %d%%"
612
613 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
614 #, c-format
615 msgid "%d%% Attack Speed"
616 msgstr "Хуткасць атакі %d%%"
617
618 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
619 #: ../../../src/MenuPowers.cpp:833
620 #, c-format
621 msgid "Resistance (%s)"
622 msgstr ""
623
624 #: ../../../src/ItemManager.cpp:684
625 #, c-format
626 msgid "Requires %s"
627 msgstr "Патрабуецца %s"
628
629 #: ../../../src/ItemManager.cpp:733
630 msgid "Quest Item"
631 msgstr "Прадмет задання"
632
633 #: ../../../src/ItemManager.cpp:760
634 #, c-format
635 msgid "Quality: %s"
636 msgstr "Якасць: %s"
637
638 #: ../../../src/ItemManager.cpp:785
639 #, c-format
640 msgid "Absorb: %d-%d"
641 msgstr "Паглынае: %d-%d"
642
643 #: ../../../src/ItemManager.cpp:787
644 #, c-format
645 msgid "Absorb: %d"
646 msgstr "Паглынае: %d"
647
648 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
649 #: ../../../src/MenuPowers.cpp:1134
650 #, c-format
651 msgid "Requires Level %d"
652 msgstr "Патрабуецца %d узровень"
653
654 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
655 #: ../../../src/MenuPowers.cpp:1125
656 #, c-format
657 msgid "Requires %s %d"
658 msgstr "Патрабуецца %s %d"
659
660 #: ../../../src/ItemManager.cpp:849
661 #, c-format
662 msgid "Requires Class: %s"
663 msgstr "Патрабуецца клас: %s"
664
665 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
666 #, c-format
667 msgid "Buy Price: %d %s"
668 msgstr "Кошт пакупкі: %d %s"
669
670 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
671 #, c-format
672 msgid "Buy Price: %d %s each"
673 msgstr "Кошт пакупкі: %d %s за кожны"
674
675 #: ../../../src/ItemManager.cpp:886
676 #, c-format
677 msgid "Sell Price: %d %s"
678 msgstr "Кошт продажу: %d %s"
679
680 #: ../../../src/ItemManager.cpp:888
681 #, c-format
682 msgid "Sell Price: %d %s each"
683 msgstr "Кошт продажу: %d %s за кожны"
684
685 #: ../../../src/ItemManager.cpp:897
686 msgid "Set:"
687 msgstr "Набор:"
688
689 #: ../../../src/ItemManager.cpp:904
690 #, c-format
691 msgid "%d items:"
692 msgstr "%d прадметаў:"
693
694 #: ../../../src/ItemManager.cpp:917
695 #, c-format
696 msgid "Press [%s] to use"
697 msgstr "Націсніце [%s], каб выкарыстаць"
698
699 #: ../../../src/ItemManager.cpp:920
700 #, c-format
701 msgid "Press [%s] to read"
702 msgstr "Націсніце [%s], каб прачытаць"
703
704 #: ../../../src/MenuActionBar.cpp:87
705 msgid "Loot tooltip visibility"
706 msgstr ""
707
708 #: ../../../src/MenuActionBar.cpp:88
709 msgid "Mini-map mode"
710 msgstr ""
711
712 #: ../../../src/MenuActionBar.cpp:89
713 msgid "Always show stat bar labels"
714 msgstr "Заўсёды паказваць адмеціны ў радку стану"
715
716 #: ../../../src/MenuActionBar.cpp:90
717 msgid "Show combat text"
718 msgstr "Паказваць тэкст бою"
719
720 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
721 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
722 #, c-format
723 msgid "Hotkey: %s"
724 msgstr "Гарачая клавіша: %s"
725
726 #: ../../../src/MenuActionBar.cpp:474
727 #, c-format
728 msgid "Default. Temporarily show all loot tooltips with '%s'."
729 msgstr ""
730
731 #: ../../../src/MenuActionBar.cpp:476
732 #, c-format
733 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
734 msgstr ""
735
736 #: ../../../src/MenuActionBar.cpp:478
737 #, c-format
738 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
739 msgstr ""
740
741 #: ../../../src/MenuActionBar.cpp:482
742 msgid "Visible"
743 msgstr ""
744
745 #: ../../../src/MenuActionBar.cpp:484
746 msgid "Visible (2x zoom)"
747 msgstr ""
748
749 #: ../../../src/MenuActionBar.cpp:486
750 msgid "Hidden"
751 msgstr ""
752
753 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
754 msgid "Enabled"
755 msgstr ""
756
757 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
758 msgid "Disabled"
759 msgstr ""
760
761 #: ../../../src/MenuActionBar.cpp:657
762 msgid "Not enough MP."
763 msgstr "Не стае маны."
764
765 #: ../../../src/MenuActiveEffects.cpp:124
766 #, c-format
767 msgid "x%d"
768 msgstr "x%d"
769
770 #: ../../../src/MenuActiveEffects.cpp:219
771 msgid "Remaining:"
772 msgstr "Засталося:"
773
774 #: ../../../src/MenuActiveEffects.cpp:225
775 #, c-format
776 msgid "x%d stacks"
777 msgstr "x%d кампанентаў"
778
779 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
780 msgid "Name"
781 msgstr "Імя"
782
783 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
784 msgid "Level"
785 msgstr "Узровень"
786
787 #: ../../../src/MenuCharacter.cpp:310
788 #, c-format
789 msgid "%d unspent stat point"
790 msgstr "%d невыкарыстаны пункт уменняў"
791
792 #: ../../../src/MenuCharacter.cpp:313
793 #, c-format
794 msgid "%d unspent stat points"
795 msgstr "%d невыкарыстаных пунктаў уменняў"
796
797 #: ../../../src/MenuCharacter.cpp:355
798 #, c-format
799 msgid "Reduces the damage taken from \"%s\" elemental attacks."
800 msgstr "Памяншае ўрон ад \"%s\" стыхійных атак."
801
802 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
803 #, c-format
804 msgid "XP: %d"
805 msgstr "Досвед: %d"
806
807 #: ../../../src/MenuCharacter.cpp:367
808 #, c-format
809 msgid "Next: %d"
810 msgstr "Наступны: %d"
811
812 #: ../../../src/MenuCharacter.cpp:373
813 #, c-format
814 msgid "base (%d), bonus (%d)"
815 msgstr "базавае (%d), бонус (%d)"
816
817 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
818 msgid "Related stats:"
819 msgstr "Звязаныя ўменні:"
820
821 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
822 #, c-format
823 msgid "Each level grants %d."
824 msgstr "З кожным узроўнем даецца %d."
825
826 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
827 #, c-format
828 msgid "Each point of %s grants %d."
829 msgstr "З кожным пунктам %s даецца %d"
929 "Выключае пласты parallax. Выключэнне гэтага параметра ў некаторых выпадках "
930 "можа палепшыць прадукцыйнасць."
931
932 #: ../../../src/MenuConfig.cpp:512
933 msgid ""
934 "Enables the below setting that controls the screen gamma level. The behavior"
935 " of the gamma setting can vary between platforms."
936 msgstr ""
937 "Уключае параметр, што кіруе ўзроўнем гамы экрана. Паводзіны параметра могуць"
938 " змяняцца ў залежнасці ад платформы."
939
940 #: ../../../src/MenuConfig.cpp:513
941 msgid ""
942 "Provides additional text for information that is primarily conveyed through "
943 "color."
944 msgstr ""
945 "Падае дадатковы тэкст для інфармацыі, што пераважна падаецца праз колер."
946
947 #: ../../../src/MenuConfig.cpp:514
948 msgid ""
949 "Some mods will automatically hide the stat bars when they are inactive. "
950 "Disabling this option will keep them displayed at all times."
951 msgstr ""
952 "Некаторыя мадыфікацыі аўтаматычна хаваюць радкі стану, калі яны неактыўныя. "
953 "Калі выключыць гэты параметр, то яны будуць адлюстроўвацца заўсёды."
954
955 #: ../../../src/MenuConfig.cpp:515
956 msgid ""
957 "When enabled, empty equipment slots will be filled with applicable items "
958 "when they are obtained."
959 msgstr ""
960 "Калі параметр уключаны, пустыя слоты будуць запаўняцца адпаведнымі "
961 "прадметамі пры іх атрыманні."
962
963 #: ../../../src/MenuConfig.cpp:516
964 msgid ""
965 "Shows a marker above enemies, allies, and the player when they are obscured "
966 "by tall objects."
967 msgstr ""
968 "Паказвае адзнаку над ворагамі, сябрамі і гульцамі, калі яны схаваныя "
969 "высокімі аб'ектамі."
970
971 #: ../../../src/MenuConfig.cpp:517
972 msgid ""
973 "This allows the game to be controlled entirely with the keyboard (or "
974 "joystick)."
975 msgstr ""
976 "Дазваляе поўнасцю кіраваць гульнёй пры дапамозе клавіятуры альбо джойсціка."
977
978 #: ../../../src/MenuConfig.cpp:518
979 msgid ""
980 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
981 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
982 "instead of 'Main1'."
983 msgstr ""
984 "Калі параметр \"Перамяшчаць героя пры дапамозе мышы\" уключаны, то параметр "
985 "вызначае ці выкарыстоўваецца \"Галоўнае1\" ці \"Галоўнае2\" для перамяшчэння"
986 " героя. Калі ўключана \"Галоўнае2\" перамясціць героя замест \"Галоўнае1\"."
987
988 #: ../../../src/MenuConfig.cpp:519
989 msgid ""
990 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
991 "assigned to the movement button can be used by targeting an enemy. If this "
992 "setting is disabled, it is required to use 'Shift' to access the Power "
993 "assigned to the movement button."
994 msgstr ""
995 "Калі параметр \"Перамяшчаць героя пры дапамозе мышы\" уключаны, то параметр "
996 "вызначае ці можна выкарыстоўваць талент, прызначаны кнопцы руху для "
997 "вызначэння ворага. Калі параметр выключаны, для гэтага неабходна "
998 "выкарыстоўваць \"Shift\"."
999
1000 #: ../../../src/MenuConfig.cpp:520
1001 msgid ""
1002 "The player's attacks will be aimed in the direction of the mouse cursor when"
1003 " this is enabled."
1004 msgstr ""
1005 "Калі ўключана, атакі гульца будуць накіроўваца адпаведна накірунка курсора "
1006 "мышы."
1007
1008 #: ../../../src/MenuConfig.cpp:571
1009 msgid "Active Mods"
1010 msgstr "Актыўныя моды"
1011
1012 #: ../../../src/MenuConfig.cpp:580
1013 msgid "Available Mods"
1014 msgstr "Наяўныя моды"
1015
1016 #: ../../../src/MenuConfig.cpp:599
1017 msgid "<< Disable"
1018 msgstr "<< Выключыць"
1019
1020 #: ../../../src/MenuConfig.cpp:605
1021 msgid "Enable >>"
1022 msgstr "Уключыць >>"
1023
1024 #: ../../../src/MenuConfig.cpp:1436
1025 msgid "Version:"
1026 msgstr "Версія:"
1027
1028 #: ../../../src/MenuConfig.cpp:1441
1029 msgid "Game:"
1030 msgstr "Гульня:"
1031
1032 #: ../../../src/MenuConfig.cpp:1446
1033 msgid "Engine version:"
1034 msgstr "Версія рухавіка:"
1035
1036 #: ../../../src/MenuConfig.cpp:1454
1037 msgid "Requires mods:"
1038 msgstr "Патрабуюцца моды:"
1039
1040 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
1041 msgid "(none)"
1042 msgstr "(няма)"
1043
1044 #: ../../../src/MenuConfig.cpp:1579
1045 msgid "Save & Exit"
1046 msgstr "Захаваць і выйсці"
8301047
8311048 #: ../../../src/MenuDevConsole.cpp:63
8321049 msgid "Execute"
8791096
8801097 #: ../../../src/MenuDevConsole.cpp:267
8811098 msgid "entity, ally"
882 msgstr "аб'ект/памочнік"
1099 msgstr "аб'ект/памагаты"
8831100
8841101 #: ../../../src/MenuDevConsole.cpp:274
8851102 msgid "Tile"
8911108
8921109 #: ../../../src/MenuDevConsole.cpp:361
8931110 msgid "turns on/off the display of the FPS counter"
894 msgstr ""
1111 msgstr "уключыць/выключыць адлюставанне лічыльніка FPS"
8951112
8961113 #: ../../../src/MenuDevConsole.cpp:362
8971114 msgid "turns on/off all of the HUD elements"
9511168
9521169 #: ../../../src/MenuDevConsole.cpp:385
9531170 msgid "Toggled the FPS counter"
954 msgstr ""
1171 msgstr "Пераключыць лічыльнік FPS"
9551172
9561173 #: ../../../src/MenuDevConsole.cpp:534
9571174 msgid "ERROR: Incorrect number of arguments"
9861203 msgid "HINT: Type help"
9871204 msgstr "ПАДКАЗКА: ўвядзіце help"
9881205
989 #: ../../../src/MenuEnemy.cpp:138
1206 #: ../../../src/MenuEnemy.cpp:162
9901207 #, c-format
9911208 msgid "%s level %d"
9921209 msgstr "%s узровень %d"
9931210
994 #: ../../../src/MenuEnemy.cpp:162
1211 #: ../../../src/MenuEnemy.cpp:186
9951212 msgid "Dead"
9961213 msgstr "Забіты"
9971214
998 #: ../../../src/MenuEnemy.cpp:164
1215 #: ../../../src/MenuEnemy.cpp:188
9991216 msgid "Destroyed"
10001217 msgstr "Знішчана"
10011218
1002 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
1003 msgid "Paused"
1004 msgstr "Прыпыніць"
1005
1006 #: ../../../src/MenuExit.cpp:91
1007 msgid "Save & Exit"
1008 msgstr "Захаваць і выйсці"
1009
1010 #: ../../../src/MenuExit.cpp:92
1011 msgid "Exit"
1012 msgstr "Выйсці"
1013
1014 #: ../../../src/MenuExit.cpp:96
1015 msgid "Continue"
1016 msgstr "Працягнуць"
1017
1018 #: ../../../src/MenuInventory.cpp:73
1019 msgid "Automatically equip items"
1020 msgstr "Аўтаматычна апранаць прадметы"
1021
1022 #: ../../../src/MenuInventory.cpp:188
1219 #: ../../../src/MenuInventory.cpp:177
10231220 #, c-format
10241221 msgid "Lost %d%% of %s."
10251222 msgstr "Страчана %d%% %s."
10261223
1027 #: ../../../src/MenuInventory.cpp:195
1224 #: ../../../src/MenuInventory.cpp:184
10281225 #, c-format
10291226 msgid "Lost %d%% of total XP."
10301227 msgstr "Страчана %d%% агульнага досведу."
10311228
1032 #: ../../../src/MenuInventory.cpp:200
1229 #: ../../../src/MenuInventory.cpp:189
10331230 #, c-format
10341231 msgid "Lost %d%% of current level XP."
10351232 msgstr "Страчана %d%% бягучага ўзроўня досведу."
10361233
1037 #: ../../../src/MenuInventory.cpp:226
1234 #: ../../../src/MenuInventory.cpp:215
10381235 #, c-format
10391236 msgid "Lost %s."
10401237 msgstr "Страчана %s."
10411238
1042 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1239 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10431240 #, c-format
10441241 msgid "%d %s"
10451242 msgstr "%d %s"
10461243
1047 #: ../../../src/MenuInventory.cpp:317
1244 #: ../../../src/MenuInventory.cpp:300
10481245 msgid "Pick up item(s):"
10491246 msgstr "Паднята прадметаў:"
10501247
1051 #: ../../../src/MenuInventory.cpp:318
1248 #: ../../../src/MenuInventory.cpp:301
10521249 msgid "Use or equip item:"
10531250 msgstr "Выкарыстаць альбо апрануць прадмет:"
10541251
1055 #: ../../../src/MenuInventory.cpp:319
1252 #: ../../../src/MenuInventory.cpp:302
10561253 #, c-format
10571254 msgid "%s modifiers"
10581255 msgstr "%s мадыфікатараў"
10591256
1060 #: ../../../src/MenuInventory.cpp:320
1257 #: ../../../src/MenuInventory.cpp:303
10611258 msgid "Select a quantity of item:"
10621259 msgstr "Абраць колькасць прадметаў:"
10631260
1064 #: ../../../src/MenuInventory.cpp:323
1261 #: ../../../src/MenuInventory.cpp:306
10651262 msgid "Stash item stack:"
10661263 msgstr "Перамясціць набор прадметаў у схованку:"
10671264
1068 #: ../../../src/MenuInventory.cpp:325
1265 #: ../../../src/MenuInventory.cpp:308
10691266 msgid "Sell item stack:"
10701267 msgstr "Прадаць набор прадметаў:"
10711268
1072 #: ../../../src/MenuInventory.cpp:592
1269 #: ../../../src/MenuInventory.cpp:574
10731270 msgid "You don't have enough of the required item."
10741271 msgstr "Не стае патрэбных прадметаў."
10751272
1076 #: ../../../src/MenuInventory.cpp:599
1273 #: ../../../src/MenuInventory.cpp:586
10771274 msgid "You can't use this item right now."
10781275 msgstr "Зараз вы не можаце выкарыстаць гэты прадмет."
10791276
1080 #: ../../../src/MenuInventory.cpp:611
1277 #: ../../../src/MenuInventory.cpp:598
10811278 msgid "This item can only be used from the action bar."
10821279 msgstr "Гэты прадмет можна выкарыстаць толькі з панэлі дзеянняў."
10831280
1084 #: ../../../src/MenuInventory.cpp:729
1281 #: ../../../src/MenuInventory.cpp:716
10851282 msgid "Inventory is full."
10861283 msgstr "Інвентар поўны."
10871284
1088 #: ../../../src/MenuInventory.cpp:849
1285 #: ../../../src/MenuInventory.cpp:841
10891286 #, c-format
10901287 msgid "Not enough %s."
10911288 msgstr "Не стае %s."
10921289
1093 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1290 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
10941291 msgid "This item can not be sold."
10951292 msgstr "Гэты прадмет немагчыма прадаць."
10961293
11021299 msgid "Quests"
11031300 msgstr "Заданні"
11041301
1105 #: ../../../src/MenuManager.cpp:286
1302 #: ../../../src/MenuManager.cpp:296
11061303 #, c-format
11071304 msgid "XP: %d/%d"
11081305 msgstr "Досвед: %d/%d"
11091306
1110 #: ../../../src/MenuManager.cpp:827
1307 #: ../../../src/MenuManager.cpp:854
11111308 msgid "This item can not be dropped."
11121309 msgstr "Гэты прадмет немагчыма выкінуць."
11131310
11151312 msgid "Enter amount:"
11161313 msgstr "Увядзіце колькасць:"
11171314
1118 #: ../../../src/MenuPowers.cpp:787
1315 #: ../../../src/MenuPowers.cpp:786
11191316 msgid "Passive"
11201317 msgstr "Пасіўныя"
11211318
1122 #: ../../../src/MenuPowers.cpp:792
1319 #: ../../../src/MenuPowers.cpp:791
11231320 #, c-format
11241321 msgid "Costs %d MP"
11251322 msgstr "Каштуе %d маны"
11261323
1127 #: ../../../src/MenuPowers.cpp:796
1324 #: ../../../src/MenuPowers.cpp:795
11281325 #, c-format
11291326 msgid "Costs %d HP"
11301327 msgstr "Каштуе %d жыцця"
11311328
1132 #: ../../../src/MenuPowers.cpp:801
1329 #: ../../../src/MenuPowers.cpp:800
11331330 msgid "Cooldown:"
11341331 msgstr "Аднаўленне:"
11351332
1136 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1333 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11371334 msgid "Damage per second"
11381335 msgstr "Урон за секунду"
11391336
1140 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1337 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11411338 msgid "HP per second"
11421339 msgstr "Жыцця за секунду"
11431340
1144 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1341 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11451342 msgid "MP per second"
11461343 msgstr "Маны за секунду"
11471344
1148 #: ../../../src/MenuPowers.cpp:885
1345 #: ../../../src/MenuPowers.cpp:884
11491346 msgid "Immobilize"
11501347 msgstr "Зафіксаваць"
11511348
1152 #: ../../../src/MenuPowers.cpp:893
1349 #: ../../../src/MenuPowers.cpp:892
11531350 msgid "Immunity"
11541351 msgstr "Устойлівасць"
11551352
1156 #: ../../../src/MenuPowers.cpp:896
1353 #: ../../../src/MenuPowers.cpp:895
11571354 msgid "Immunity to damage over time"
11581355 msgstr "Устойлівасць да перыядычнага ўрону"
11591356
1160 #: ../../../src/MenuPowers.cpp:899
1357 #: ../../../src/MenuPowers.cpp:898
11611358 msgid "Immunity to slow"
11621359 msgstr "Устойлівасць да запавольвання"
11631360
1164 #: ../../../src/MenuPowers.cpp:902
1361 #: ../../../src/MenuPowers.cpp:901
11651362 msgid "Immunity to stun"
11661363 msgstr "Устойлівасць да аглушэння"
11671364
1168 #: ../../../src/MenuPowers.cpp:905
1365 #: ../../../src/MenuPowers.cpp:904
11691366 msgid "Immunity to HP steal"
11701367 msgstr "Устойлівасць да выцягвання жыцця"
11711368
1172 #: ../../../src/MenuPowers.cpp:908
1369 #: ../../../src/MenuPowers.cpp:907
11731370 msgid "Immunity to MP steal"
11741371 msgstr "Устойлівасць да выцягвання маны"
11751372
1176 #: ../../../src/MenuPowers.cpp:911
1373 #: ../../../src/MenuPowers.cpp:910
11771374 msgid "Immunity to knockback"
11781375 msgstr "Устойлівасць да скульвання"
11791376
1180 #: ../../../src/MenuPowers.cpp:914
1377 #: ../../../src/MenuPowers.cpp:913
11811378 msgid "Immunity to damage reflection"
11821379 msgstr "Устойлівасць да адбіцця ўрону"
11831380
1184 #: ../../../src/MenuPowers.cpp:917
1381 #: ../../../src/MenuPowers.cpp:916
11851382 msgid "Stun"
11861383 msgstr "Аглушэнне"
11871384
1188 #: ../../../src/MenuPowers.cpp:920
1385 #: ../../../src/MenuPowers.cpp:919
11891386 msgid "Automatic revive on death"
11901387 msgstr "Аўтаматычна адраджацца пасля смерці"
11911388
1192 #: ../../../src/MenuPowers.cpp:923
1389 #: ../../../src/MenuPowers.cpp:922
11931390 msgid "Convert"
11941391 msgstr "Пераўтварыць"
11951392
1196 #: ../../../src/MenuPowers.cpp:926
1393 #: ../../../src/MenuPowers.cpp:925
11971394 msgid "Fear"
11981395 msgstr "Страх"
11991396
1200 #: ../../../src/MenuPowers.cpp:929
1397 #: ../../../src/MenuPowers.cpp:928
12011398 msgid "Lifespan"
12021399 msgstr "Працягласць жыцця"
12031400
1204 #: ../../../src/MenuPowers.cpp:953
1401 #: ../../../src/MenuPowers.cpp:952
12051402 msgid "Magical Shield"
12061403 msgstr "Магічны шчыт"
12071404
1208 #: ../../../src/MenuPowers.cpp:982
1405 #: ../../../src/MenuPowers.cpp:981
12091406 msgid "Healing"
12101407 msgstr "Лекаванне"
12111408
1212 #: ../../../src/MenuPowers.cpp:985
1409 #: ../../../src/MenuPowers.cpp:984
12131410 msgid "Knockback"
12141411 msgstr "Скульванне"
12151412
1216 #: ../../../src/MenuPowers.cpp:1010
1413 #: ../../../src/MenuPowers.cpp:1009
12171414 #, c-format
12181415 msgid "%d%% chance"
12191416 msgstr "%d%% шанец"
12201417
1221 #: ../../../src/MenuPowers.cpp:1062
1418 #: ../../../src/MenuPowers.cpp:1061
12221419 msgid "Base Accuracy"
12231420 msgstr "Базавая трапнасць"
12241421
1225 #: ../../../src/MenuPowers.cpp:1082
1422 #: ../../../src/MenuPowers.cpp:1081
12261423 msgid "Base Critical Chance"
12271424 msgstr "Базавы шанец крытычнага ўрону"
12281425
1229 #: ../../../src/MenuPowers.cpp:1090
1426 #: ../../../src/MenuPowers.cpp:1089
12301427 msgid "Ignores Absorbtion"
12311428 msgstr "Не зважае на паглынанне"
12321429
1233 #: ../../../src/MenuPowers.cpp:1095
1430 #: ../../../src/MenuPowers.cpp:1094
12341431 msgid "Ignores Avoidance"
12351432 msgstr "Не зважае на ўхіленне"
12361433
1237 #: ../../../src/MenuPowers.cpp:1100
1434 #: ../../../src/MenuPowers.cpp:1099
12381435 #, c-format
12391436 msgid "%d%% Chance to crit slowed targets"
12401437 msgstr "%d%% шанец нанесці крытычны ўрон запаволеным супраціўнікам"
12411438
1242 #: ../../../src/MenuPowers.cpp:1105
1439 #: ../../../src/MenuPowers.cpp:1104
12431440 #, c-format
12441441 msgid "Elemental Damage (%s)"
1245 msgstr ""
1246
1247 #: ../../../src/MenuPowers.cpp:1114
1442 msgstr "Стыхійны ўрон (%s)"
1443
1444 #: ../../../src/MenuPowers.cpp:1113
12481445 #, c-format
12491446 msgid "Requires a %s"
12501447 msgstr "Патрабуецца %s"
12511448
1252 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1449 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12531450 #, c-format
12541451 msgid "Requires Power: %s"
12551452 msgstr "Патрабуецца талент: %s"
12561453
1257 #: ../../../src/MenuPowers.cpp:1163
1454 #: ../../../src/MenuPowers.cpp:1162
12581455 msgid "Click to Unlock (uses 1 Skill Point)"
12591456 msgstr "Пстрыкніце, каб разблакаваць (за 1 пункт уменняў)"
12601457
1261 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1458 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12621459 msgid "Requires 1 Skill Point"
12631460 msgstr "Патрабуецца 1 пункт уменняў"
12641461
1265 #: ../../../src/MenuPowers.cpp:1355
1462 #: ../../../src/MenuPowers.cpp:1354
12661463 #, c-format
12671464 msgid "%d unspent skill point"
12681465 msgstr "%d невыкарыстаны пункт уменняў"
12691466
1270 #: ../../../src/MenuPowers.cpp:1358
1467 #: ../../../src/MenuPowers.cpp:1357
12711468 #, c-format
12721469 msgid "%d unspent skill points"
12731470 msgstr "%d невыкарыстаных пунктаў уменняў"
12741471
1275 #: ../../../src/MenuPowers.cpp:1388
1472 #: ../../../src/MenuPowers.cpp:1387
12761473 msgid "Next Level:"
12771474 msgstr "Наступны ўзровень:"
12781475
1279 #: ../../../src/MenuStash.cpp:96
1280 msgid "Shared Stash"
1281 msgstr "Агульныя запасы"
1282
1283 #: ../../../src/MenuStash.cpp:209
1476 #: ../../../src/MenuStash.cpp:53
1477 msgid "Private"
1478 msgstr "Асабістае"
1479
1480 #: ../../../src/MenuStash.cpp:55
1481 msgid "Shared"
1482 msgstr "Абагульнена"
1483
1484 #: ../../../src/MenuStash.cpp:103
1485 msgid "Stash"
1486 msgstr "Схованка"
1487
1488 #: ../../../src/MenuStash.cpp:258
12841489 msgid "Can not store quest items in the stash."
12851490 msgstr "Прадметы заданняў нельга захоўваць у схованцы."
12861491
1287 #: ../../../src/MenuStash.cpp:219
1492 #: ../../../src/MenuStash.cpp:263
1493 msgid "This item can not be stored in the stash."
1494 msgstr "Гэты аб'ект немагчыма захоўваць у схованцы."
1495
1496 #: ../../../src/MenuStash.cpp:268
1497 msgid "This item can not be stored in the private stash."
1498 msgstr "Гэты аб'ект немагчыма захоўваць у асабістай схованцы."
1499
1500 #: ../../../src/MenuStash.cpp:273
1501 msgid "This item can not be stored in the shared stash."
1502 msgstr "Гэты аб'ект немагчыма захоўваць у агульнай схованцы."
1503
1504 #: ../../../src/MenuStash.cpp:283
12881505 msgid "Stash is full."
12891506 msgstr "Схованка поўная."
12901507
1291 #: ../../../src/MenuTalker.cpp:454
1508 #: ../../../src/MenuStash.cpp:340
1509 #, c-format
1510 msgid "Can not store item in stash: %s"
1511 msgstr "Немагчыма захоўваць у схованцы: %s"
1512
1513 #: ../../../src/MenuTalker.cpp:447
1514 #, c-format
1515 msgid "<dialog node %d>"
1516 msgstr "<dialog node %d>"
1517
1518 #: ../../../src/MenuTalker.cpp:455
12921519 msgid "Trade"
12931520 msgstr "Гандляваць"
12941521
12961523 msgid "Buyback"
12971524 msgstr "Выкуп"
12981525
1299 #: ../../../src/MenuVendor.cpp:279
1526 #: ../../../src/MenuVendor.cpp:281
13001527 msgid "Vendor"
13011528 msgstr "Гандляр"
13021529
1303 #: ../../../src/PowerManager.cpp:1136
1530 #: ../../../src/PowerManager.cpp:1170
13041531 #, c-format
13051532 msgid "+%d Shield"
13061533 msgstr "+%d Шчыт"
13071534
1308 #: ../../../src/PowerManager.cpp:1392
1535 #: ../../../src/PowerManager.cpp:1426
13091536 msgid "You are already transformed, untransform first."
1310 msgstr "Вы ўжо трансфарміраваны, спачатку растрансфарміруўцеся."
1311
1312 #: ../../../src/PowerManager.cpp:1404
1537 msgstr "Вы ўжо трансфарманыя, спачатку растрансфармуўцеся."
1538
1539 #: ../../../src/PowerManager.cpp:1438
13131540 msgid "Could not untransform at this position."
1314 msgstr "Тут немагчыма растрансфарміравацца"
1541 msgstr "Тут немагчыма растрансфармавацца"
13151542
13161543 #: ../../../src/QuestLog.cpp:234
13171544 msgid "Completed Quests"
13181545 msgstr "Завершаныя заданні"
13191546
1320 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1547 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13211548 msgid "Game saved."
1322 msgstr "Гульня захавана."
1323
1324 #: ../../../src/SDLInputState.cpp:582
1549 msgstr "Гульня захаваная."
1550
1551 #: ../../../src/SDLInputState.cpp:643
1552 msgid "BkSp"
1553 msgstr ""
1554
1555 #: ../../../src/SDLInputState.cpp:644
1556 msgid "Caps"
1557 msgstr ""
1558
1559 #: ../../../src/SDLInputState.cpp:645
1560 msgid "Del"
1561 msgstr ""
1562
1563 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1564 msgid "End"
1565 msgstr "End"
1566
1567 #: ../../../src/SDLInputState.cpp:648
1568 msgid "Esc"
1569 msgstr ""
1570
1571 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1572 msgid "Home"
1573 msgstr "Home"
1574
1575 #: ../../../src/SDLInputState.cpp:650
1576 msgid "Ins"
1577 msgstr ""
1578
1579 #: ../../../src/SDLInputState.cpp:651
1580 msgid "LAlt"
1581 msgstr ""
1582
1583 #: ../../../src/SDLInputState.cpp:652
1584 msgid "LCtrl"
1585 msgstr ""
1586
1587 #: ../../../src/SDLInputState.cpp:654
1588 msgid "LShft"
1589 msgstr ""
1590
1591 #: ../../../src/SDLInputState.cpp:655
1592 msgid "Num"
1593 msgstr ""
1594
1595 #: ../../../src/SDLInputState.cpp:656
1596 msgid "PgDn"
1597 msgstr ""
1598
1599 #: ../../../src/SDLInputState.cpp:657
1600 msgid "PgUp"
1601 msgstr ""
1602
1603 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1604 msgid "Pause"
1605 msgstr "Pause"
1606
1607 #: ../../../src/SDLInputState.cpp:659
1608 msgid "Print"
1609 msgstr ""
1610
1611 #: ../../../src/SDLInputState.cpp:660
1612 msgid "RAlt"
1613 msgstr ""
1614
1615 #: ../../../src/SDLInputState.cpp:661
1616 msgid "RCtrl"
1617 msgstr ""
1618
1619 #: ../../../src/SDLInputState.cpp:662
1620 msgid "Ret"
1621 msgstr ""
1622
1623 #: ../../../src/SDLInputState.cpp:664
1624 msgid "RShft"
1625 msgstr ""
1626
1627 #: ../../../src/SDLInputState.cpp:665
1628 msgid "SLock"
1629 msgstr ""
1630
1631 #: ../../../src/SDLInputState.cpp:666
1632 msgid "Spc"
1633 msgstr ""
1634
1635 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1636 msgid "Tab"
1637 msgstr "Tab"
1638
1639 #: ../../../src/SDLInputState.cpp:673
13251640 msgid "Backspace"
13261641 msgstr "Backspace"
13271642
1328 #: ../../../src/SDLInputState.cpp:583
1643 #: ../../../src/SDLInputState.cpp:674
13291644 msgid "CapsLock"
13301645 msgstr "CapsLock"
13311646
1332 #: ../../../src/SDLInputState.cpp:586
1333 msgid "End"
1334 msgstr "End"
1335
1336 #: ../../../src/SDLInputState.cpp:587
1647 #: ../../../src/SDLInputState.cpp:678
13371648 msgid "Escape"
13381649 msgstr "Escape"
13391650
1340 #: ../../../src/SDLInputState.cpp:588
1341 msgid "Home"
1342 msgstr "Home"
1343
1344 #: ../../../src/SDLInputState.cpp:589
1651 #: ../../../src/SDLInputState.cpp:680
13451652 msgid "Insert"
13461653 msgstr "Insert"
13471654
1348 #: ../../../src/SDLInputState.cpp:590
1655 #: ../../../src/SDLInputState.cpp:681
13491656 msgid "Left Alt"
13501657 msgstr "Левы Alt"
13511658
1352 #: ../../../src/SDLInputState.cpp:591
1659 #: ../../../src/SDLInputState.cpp:682
13531660 msgid "Left Ctrl"
13541661 msgstr "Левы Ctrl"
13551662
1356 #: ../../../src/SDLInputState.cpp:593
1663 #: ../../../src/SDLInputState.cpp:684
13571664 msgid "Left Shift"
13581665 msgstr "Левы Shift"
13591666
1360 #: ../../../src/SDLInputState.cpp:594
1667 #: ../../../src/SDLInputState.cpp:685
13611668 msgid "NumLock"
13621669 msgstr "NumLock"
13631670
1364 #: ../../../src/SDLInputState.cpp:595
1671 #: ../../../src/SDLInputState.cpp:686
13651672 msgid "PageDown"
13661673 msgstr "PageDown"
13671674
1368 #: ../../../src/SDLInputState.cpp:596
1675 #: ../../../src/SDLInputState.cpp:687
13691676 msgid "PageUp"
13701677 msgstr "PageUp"
13711678
1372 #: ../../../src/SDLInputState.cpp:597
1373 msgid "Pause"
1374 msgstr "Pause"
1375
1376 #: ../../../src/SDLInputState.cpp:598
1679 #: ../../../src/SDLInputState.cpp:689
13771680 msgid "PrintScreen"
13781681 msgstr "PrintScreen"
13791682
1380 #: ../../../src/SDLInputState.cpp:599
1683 #: ../../../src/SDLInputState.cpp:690
13811684 msgid "Right Alt"
13821685 msgstr "Правы Alt"
13831686
1384 #: ../../../src/SDLInputState.cpp:600
1687 #: ../../../src/SDLInputState.cpp:691
13851688 msgid "Right Ctrl"
13861689 msgstr "Правы Ctrl"
13871690
1388 #: ../../../src/SDLInputState.cpp:601
1691 #: ../../../src/SDLInputState.cpp:692
13891692 msgid "Return"
13901693 msgstr "Enter"
13911694
1392 #: ../../../src/SDLInputState.cpp:603
1695 #: ../../../src/SDLInputState.cpp:694
13931696 msgid "Right Shift"
13941697 msgstr "Правы Shift"
13951698
1396 #: ../../../src/SDLInputState.cpp:604
1699 #: ../../../src/SDLInputState.cpp:695
13971700 msgid "ScrollLock"
13981701 msgstr "ScrollLock"
13991702
1400 #: ../../../src/SDLInputState.cpp:605
1703 #: ../../../src/SDLInputState.cpp:696
14011704 msgid "Space"
14021705 msgstr "Прагал"
14031706
1404 #: ../../../src/SDLInputState.cpp:606
1405 msgid "Tab"
1406 msgstr "Tab"
1407
1408 #: ../../../src/SDLInputState.cpp:620
1707 #: ../../../src/SDLInputState.cpp:710
1708 #, c-format
1709 msgid "M%d"
1710 msgstr ""
1711
1712 #: ../../../src/SDLInputState.cpp:716
14091713 #, c-format
14101714 msgid "Mouse %d"
14111715 msgstr "Мыш %d"
14121716
1413 #: ../../../src/SDLInputState.cpp:628
1717 #: ../../../src/SDLInputState.cpp:726
1718 #, c-format
1719 msgid "JX%d-"
1720 msgstr ""
1721
1722 #: ../../../src/SDLInputState.cpp:728
14141723 #, c-format
14151724 msgid "Axis %d -"
14161725 msgstr "Вось %d -"
14171726
1418 #: ../../../src/SDLInputState.cpp:630
1727 #: ../../../src/SDLInputState.cpp:732
1728 #, c-format
1729 msgid "JX%d+"
1730 msgstr ""
1731
1732 #: ../../../src/SDLInputState.cpp:734
14191733 #, c-format
14201734 msgid "Axis %d +"
14211735 msgstr "Вось %d +"
14221736
1423 #: ../../../src/SDLInputState.cpp:633
1737 #: ../../../src/SDLInputState.cpp:739
1738 #, c-format
1739 msgid "JB%d"
1740 msgstr ""
1741
1742 #: ../../../src/SDLInputState.cpp:741
14241743 #, c-format
14251744 msgid "Button %d"
14261745 msgstr "Кнопка %d"
14271746
1428 #: ../../../src/SDLInputState.cpp:637
1429 msgid "(none)"
1430 msgstr "(няма)"
1431
1432 #: ../../../src/SDLInputState.cpp:677
1747 #: ../../../src/SDLInputState.cpp:788
14331748 msgid "Touch control D-Pad"
1434 msgstr ""
1435
1436 #: ../../../src/SDLInputState.cpp:701
1749 msgstr "Сэнсарнае кіраванне D-Pad"
1750
1751 #: ../../../src/SDLInputState.cpp:812
14371752 msgid "Touch control buttons"
1438 msgstr ""
1439
1440 #: ../../../src/SDLInputState.cpp:716
1753 msgstr "Сэнсарныя кнопкі кіравання"
1754
1755 #: ../../../src/SDLInputState.cpp:827
14411756 msgid "Tap"
14421757 msgstr "Дакраніцеся"
14431758
1444 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1445 #: ../../../src/SDLInputState.cpp:768
1759 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1760 #, c-format
1761 msgid "Can not bind: %s"
1762 msgstr "Немагчыма прызначыць: %s"
1763
1764 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1765 #: ../../../src/SDLInputState.cpp:901
14461766 #, c-format
14471767 msgid "'%s' is no longer bound to:"
14481768 msgstr "\"%s\" больш не звязана з:"
16091929 msgid "k"
16101930 msgstr "k"
16111931
1612 #: ../../../src/Utils.cpp:580
1932 #: ../../../src/Utils.cpp:616
16131933 #, c-format
16141934 msgid "%s second"
16151935 msgstr "%s секунда"
16161936
1617 #: ../../../src/Utils.cpp:583
1937 #: ../../../src/Utils.cpp:619
16181938 #, c-format
16191939 msgid "%s seconds"
16201940 msgstr "%s секунд"
1010 msgstr ""
1111 "Project-Id-Version: PACKAGE VERSION\n"
1212 "Report-Msgid-Bugs-To: \n"
13 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
13 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1414 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1515 "Last-Translator: 48719d321e4b4a9c2ca8c6a1f8b9cba8, 2018\n"
1616 "Language-Team: Bulgarian (https://www.transifex.com/flareorg/teams/84925/bg/)\n"
2020 "Language: bg\n"
2121 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
2222
23 #: ../../../src/Avatar.cpp:367
23 #: ../../../src/Avatar.cpp:387
24 msgid "Your health is low!"
25 msgstr ""
26
27 #: ../../../src/Avatar.cpp:419
2428 #, c-format
2529 msgid "Congratulations, you have reached level %d!"
2630 msgstr "Поздравления, достигнахте ниво %d!"
2731
28 #: ../../../src/Avatar.cpp:369
29 msgid "You may increase one attribute through the Character Menu."
30 msgstr "Можете да увеличите един атрибут през менюто за характер."
31
32 #: ../../../src/Avatar.cpp:583
32 #: ../../../src/Avatar.cpp:421
33 msgid "You may increase one or more attributes through the Character Menu."
34 msgstr ""
35
36 #: ../../../src/Avatar.cpp:425
37 msgid "You may unlock one or more abilities through the Powers Menu."
38 msgstr ""
39
40 #: ../../../src/Avatar.cpp:692
3341 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3442 msgstr ""
3543 "Вие сте победени. Играта приключи! ${INPUT_CONTINUE}, за да се върнете към "
3644 "менюто."
3745
38 #: ../../../src/Avatar.cpp:589
46 #: ../../../src/Avatar.cpp:698
3947 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
4048 msgstr "Вие сте победени. ${INPUT_CONTINUE}, за да продължите."
4149
42 #: ../../../src/Avatar.cpp:839
50 #: ../../../src/Avatar.cpp:949
4351 msgid "Transformation expired. You have been moved back to a safe place."
4452 msgstr "Преобразяването изтече. Върнахте се на сигурно място."
4553
4856 msgid "%d %s removed."
4957 msgstr "%d %s е премахнато."
5058
51 #: ../../../src/CampaignManager.cpp:162
59 #: ../../../src/CampaignManager.cpp:165
60 #, c-format
61 msgid "%s x%d removed."
62 msgstr ""
63
64 #: ../../../src/CampaignManager.cpp:167
5265 #, c-format
5366 msgid "%s removed."
5467 msgstr "%s е премахнат."
5568
56 #: ../../../src/CampaignManager.cpp:175
69 #: ../../../src/CampaignManager.cpp:180
5770 #, c-format
5871 msgid "You receive %s."
5972 msgstr "Получихте %s."
6073
61 #: ../../../src/CampaignManager.cpp:177
74 #: ../../../src/CampaignManager.cpp:182
6275 #, c-format
6376 msgid "You receive %s x%d."
6477 msgstr "Получихте %s x%d."
6578
66 #: ../../../src/CampaignManager.cpp:186
79 #: ../../../src/CampaignManager.cpp:191
6780 #, c-format
6881 msgid "You receive %d %s."
6982 msgstr "Получихте %d %s."
7083
71 #: ../../../src/CampaignManager.cpp:195
84 #: ../../../src/CampaignManager.cpp:200
7285 #, c-format
7386 msgid "You receive %d XP."
7487 msgstr "Получихте %d опит."
7588
76 #: ../../../src/CampaignManager.cpp:201
89 #: ../../../src/CampaignManager.cpp:206
7790 msgid "HP restored."
7891 msgstr "Здравето е възстановено."
7992
80 #: ../../../src/CampaignManager.cpp:205
93 #: ../../../src/CampaignManager.cpp:210
8194 msgid "MP restored."
8295 msgstr "Маната е възстановена."
8396
84 #: ../../../src/CampaignManager.cpp:210
97 #: ../../../src/CampaignManager.cpp:215
8598 msgid "HP and MP restored."
8699 msgstr "Здравето и маната са възстановени."
87100
88 #: ../../../src/CampaignManager.cpp:214
101 #: ../../../src/CampaignManager.cpp:219
89102 msgid "Negative effects removed."
90103 msgstr "Негативните въздействия са премахнати."
91104
92 #: ../../../src/CampaignManager.cpp:220
105 #: ../../../src/CampaignManager.cpp:225
93106 msgid "HP and MP restored, negative effects removed"
94107 msgstr ""
95108 "Здравето и маната са възстановени, негативните въздействия са премахнати."
114127 "\n"
115128 "Рендерът по подразбиране, който често е по-бърз от софтуерния рендер за SDL."
116129
117 #: ../../../src/EngineSettings.cpp:561
130 #: ../../../src/EngineSettings.cpp:572
118131 msgid "Adventurer"
119132 msgstr "Авантюрист"
120133
121 #: ../../../src/Entity.cpp:511
134 #: ../../../src/Entity.cpp:522
122135 msgid "miss"
123136 msgstr "пропуск"
124137
125 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
126 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
138 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
139 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
127140 #, c-format
128141 msgid "+%d HP"
129142 msgstr "+%d здраве"
130143
131 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
132 #: ../../../src/StatBlock.cpp:822
144 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
145 #: ../../../src/StatBlock.cpp:830
133146 #, c-format
134147 msgid "+%d MP"
135148 msgstr "+%d мана"
136149
137 #: ../../../src/EventManager.cpp:738
150 #: ../../../src/EventManager.cpp:782
138151 msgid "Unknown destination"
139152 msgstr "Непозната дестинация"
140153
141 #: ../../../src/GameStateConfigBase.cpp:89
142 #: ../../../src/GameStateConfigBase.cpp:110
154 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
155 msgid "Loading..."
156 msgstr "Зареждане…"
157
158 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
159 msgid "Delete Save"
160 msgstr "Изтрий героя"
161
162 #: ../../../src/GameStateLoad.cpp:90
163 msgid "Delete this save?"
164 msgstr "Изтриване на героя?"
165
166 #: ../../../src/GameStateLoad.cpp:92
167 msgid "Exit to Title"
168 msgstr "Назад"
169
170 #: ../../../src/GameStateLoad.cpp:95
171 msgid "New Game"
172 msgstr "Нов герой"
173
174 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
175 msgid "Choose a Slot"
176 msgstr "Избери герой"
177
178 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
179 msgid "Enable a story mod to continue"
180 msgstr "Включете модификация на историята, за да продължите"
181
182 #: ../../../src/GameStateLoad.cpp:597
183 msgid "Load Game"
184 msgstr "Зареди героя"
185
186 #: ../../../src/GameStateLoad.cpp:706
187 msgid "Entering game world..."
188 msgstr "Влизане в игралния свят…"
189
190 #: ../../../src/GameStateLoad.cpp:709
191 msgid "Loading saved game..."
192 msgstr "Зареждане на запазената игра…"
193
194 #: ../../../src/GameStateLoad.cpp:742
195 msgid "Invalid save"
196 msgstr "Невалиден герой"
197
198 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
199 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
200 #: ../../../src/MenuPowers.cpp:1543
201 #, c-format
202 msgid "Level %d"
203 msgstr "Ниво %d"
204
205 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
206 #: ../../../src/MenuConfig.cpp:244
207 msgid "Cancel"
208 msgstr "Отказ"
209
210 #: ../../../src/GameStateNew.cpp:68
211 msgid "Create"
212 msgstr "Създай"
213
214 #: ../../../src/GameStateNew.cpp:76
215 msgid "Randomize"
216 msgstr "Разбъркай"
217
218 #: ../../../src/GameStateNew.cpp:92
219 msgid "Choose a Portrait"
220 msgstr "Избери портрет"
221
222 #: ../../../src/GameStateNew.cpp:96
223 msgid "Choose a Name"
224 msgstr "Избери име"
225
226 #: ../../../src/GameStateNew.cpp:100
227 msgid "Permadeath?"
228 msgstr "Без прераждане?"
229
230 #: ../../../src/GameStateNew.cpp:104
231 msgid "Choose a Class"
232 msgstr "Избери клас"
233
234 #: ../../../src/GameStateTitle.cpp:107
235 msgid "Play Game"
236 msgstr "Играй"
237
238 #: ../../../src/GameStateTitle.cpp:110
239 msgid "Enable a core mod to continue"
240 msgstr "Включете основна модификация, за да продължите"
241
242 #: ../../../src/GameStateTitle.cpp:114
243 msgid "Configuration"
244 msgstr "Настройки"
245
246 #: ../../../src/GameStateTitle.cpp:117
247 msgid "Credits"
248 msgstr "Признания"
249
250 #: ../../../src/GameStateTitle.cpp:120
251 msgid "Exit Game"
252 msgstr "Изход"
253
254 #: ../../../src/InputState.cpp:407
255 msgid "Accept"
256 msgstr "Приемане"
257
258 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
259 #: ../../../src/SDLInputState.cpp:698
260 msgid "Up"
261 msgstr "Up"
262
263 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
264 #: ../../../src/SDLInputState.cpp:676
265 msgid "Down"
266 msgstr "Down"
267
268 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
269 #: ../../../src/SDLInputState.cpp:683
270 msgid "Left"
271 msgstr "Left"
272
273 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
274 #: ../../../src/SDLInputState.cpp:693
275 msgid "Right"
276 msgstr "Right"
277
278 #: ../../../src/InputState.cpp:412
279 msgid "Bar1"
280 msgstr "Лента1"
281
282 #: ../../../src/InputState.cpp:413
283 msgid "Bar2"
284 msgstr "Лента2"
285
286 #: ../../../src/InputState.cpp:414
287 msgid "Bar3"
288 msgstr "Лента3"
289
290 #: ../../../src/InputState.cpp:415
291 msgid "Bar4"
292 msgstr "Лента4"
293
294 #: ../../../src/InputState.cpp:416
295 msgid "Bar5"
296 msgstr "Лента5"
297
298 #: ../../../src/InputState.cpp:417
299 msgid "Bar6"
300 msgstr "Лента6"
301
302 #: ../../../src/InputState.cpp:418
303 msgid "Bar7"
304 msgstr "Лента7"
305
306 #: ../../../src/InputState.cpp:419
307 msgid "Bar8"
308 msgstr "Лента8"
309
310 #: ../../../src/InputState.cpp:420
311 msgid "Bar9"
312 msgstr "Лента9"
313
314 #: ../../../src/InputState.cpp:421
315 msgid "Bar0"
316 msgstr "Лента0"
317
318 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
319 #: ../../../src/MenuCharacter.cpp:54
320 msgid "Character"
321 msgstr "Характер"
322
323 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
324 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
325 msgid "Inventory"
326 msgstr "Инвентар"
327
328 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
329 #: ../../../src/MenuPowers.cpp:167
330 msgid "Powers"
331 msgstr "Умения"
332
333 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
334 #: ../../../src/MenuLog.cpp:72
335 msgid "Log"
336 msgstr "Дневник"
337
338 #: ../../../src/InputState.cpp:426
339 msgid "Main1"
340 msgstr "Главен1"
341
342 #: ../../../src/InputState.cpp:427
343 msgid "Main2"
344 msgstr "Главен2"
345
346 #: ../../../src/InputState.cpp:428
347 msgid "Ctrl"
348 msgstr "Ctrl"
349
350 #: ../../../src/InputState.cpp:429
351 msgid "Shift"
352 msgstr "Shift"
353
354 #: ../../../src/InputState.cpp:430
355 msgid "Alt"
356 msgstr "Alt"
357
358 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
359 msgid "Delete"
360 msgstr "Delete"
361
362 #: ../../../src/InputState.cpp:432
363 msgid "ActionBar Accept"
364 msgstr "ActionBar Accept"
365
366 #: ../../../src/InputState.cpp:433
367 msgid "ActionBar Left"
368 msgstr "ActionBar Left"
369
370 #: ../../../src/InputState.cpp:434
371 msgid "ActionBar Right"
372 msgstr "ActionBar Right"
373
374 #: ../../../src/InputState.cpp:435
375 msgid "ActionBar Use"
376 msgstr "ActionBar Use"
377
378 #: ../../../src/InputState.cpp:436
379 msgid "Developer Menu"
380 msgstr "Developer меню"
381
382 #: ../../../src/InputState.cpp:438
383 msgid "Left Mouse"
384 msgstr "Left Mouse"
385
386 #: ../../../src/InputState.cpp:439
387 msgid "Middle Mouse"
388 msgstr "Middle Mouse"
389
390 #: ../../../src/InputState.cpp:440
391 msgid "Right Mouse"
392 msgstr "Right Mouse"
393
394 #: ../../../src/InputState.cpp:441
395 msgid "Wheel Up"
396 msgstr "Wheel Up"
397
398 #: ../../../src/InputState.cpp:442
399 msgid "Wheel Down"
400 msgstr "Wheel Down"
401
402 #: ../../../src/InputState.cpp:443
403 msgid "Mouse X1"
404 msgstr "Mouse X1"
405
406 #: ../../../src/InputState.cpp:444
407 msgid "Mouse X2"
408 msgstr "Mouse X2"
409
410 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
411 msgid "Unknown Item"
412 msgstr "Непознат предмет"
413
414 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
415 #, c-format
416 msgid "%d%% Speed"
417 msgstr "%d%% Бързина"
418
419 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
420 #, c-format
421 msgid "%d%% Attack Speed"
422 msgstr "%d%% Бързина на атака"
423
424 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
425 #: ../../../src/MenuPowers.cpp:832
426 #, c-format
427 msgid "Resistance (%s)"
428 msgstr ""
429
430 #: ../../../src/ItemManager.cpp:714
431 #, c-format
432 msgid "Requires %s"
433 msgstr "Изисква %s"
434
435 #: ../../../src/ItemManager.cpp:763
436 msgid "Quest Item"
437 msgstr "Предмет от куест"
438
439 #: ../../../src/ItemManager.cpp:790
440 #, c-format
441 msgid "Quality: %s"
442 msgstr "Качество: %s"
443
444 #: ../../../src/ItemManager.cpp:815
445 #, c-format
446 msgid "Absorb: %d-%d"
447 msgstr "Абсорбиране: %d – %d"
448
449 #: ../../../src/ItemManager.cpp:817
450 #, c-format
451 msgid "Absorb: %d"
452 msgstr "Абсорбиране: %d"
453
454 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
455 #: ../../../src/MenuPowers.cpp:1133
456 #, c-format
457 msgid "Requires Level %d"
458 msgstr "Изисква ниво %d"
459
460 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
461 #: ../../../src/MenuPowers.cpp:1124
462 #, c-format
463 msgid "Requires %s %d"
464 msgstr "Изисква %s %d"
465
466 #: ../../../src/ItemManager.cpp:879
467 #, c-format
468 msgid "Requires Class: %s"
469 msgstr "Изисква клас: %s"
470
471 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
472 #, c-format
473 msgid "Buy Price: %d %s"
474 msgstr "Цена за закупуване: %d %s"
475
476 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
477 #, c-format
478 msgid "Buy Price: %d %s each"
479 msgstr "Цена за закупуване: %d %s за брой"
480
481 #: ../../../src/ItemManager.cpp:916
482 #, c-format
483 msgid "Sell Price: %d %s"
484 msgstr "Продажна цена: %d %s"
485
486 #: ../../../src/ItemManager.cpp:918
487 #, c-format
488 msgid "Sell Price: %d %s each"
489 msgstr "Продажна цена: %d %s за брой"
490
491 #: ../../../src/ItemManager.cpp:927
492 msgid "Set:"
493 msgstr "Комплект:"
494
495 #: ../../../src/ItemManager.cpp:934
496 #, c-format
497 msgid "%d items:"
498 msgstr "%d предмета:"
499
500 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
501 #, c-format
502 msgid "Press [%s] to use"
503 msgstr "Натиснете [%s], за да използвате"
504
505 #: ../../../src/ItemManager.cpp:951
506 #, c-format
507 msgid "Press [%s] to read"
508 msgstr "Натиснете [%s], за да прочетете"
509
510 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
511 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
512 #, c-format
513 msgid "Hotkey: %s"
514 msgstr "Клавиш: %s"
515
516 #: ../../../src/MenuActionBar.cpp:599
517 msgid "Not enough MP."
518 msgstr "Нямате достатъчно мана."
519
520 #: ../../../src/MenuActiveEffects.cpp:124
521 #, c-format
522 msgid "x%d"
523 msgstr "x%d"
524
525 #: ../../../src/MenuActiveEffects.cpp:219
526 msgid "Remaining:"
527 msgstr "Остават:"
528
529 #: ../../../src/MenuActiveEffects.cpp:225
530 #, c-format
531 msgid "x%d stacks"
532 msgstr "x%d стека"
533
534 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
535 msgid "Name"
536 msgstr "Име"
537
538 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
539 msgid "Level"
540 msgstr "Ниво"
541
542 #: ../../../src/MenuCharacter.cpp:310
543 #, c-format
544 msgid "%d unspent stat point"
545 msgstr "%d неизразходвана точка за атрибути"
546
547 #: ../../../src/MenuCharacter.cpp:313
548 #, c-format
549 msgid "%d unspent stat points"
550 msgstr "%d неизразходвани точки за атрибути"
551
552 #: ../../../src/MenuCharacter.cpp:355
553 #, c-format
554 msgid "Reduces the damage taken from \"%s\" elemental attacks."
555 msgstr "Намалява понесените щети от стихийната атака „%s“."
556
557 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
558 #, c-format
559 msgid "XP: %d"
560 msgstr "Опит: %d"
561
562 #: ../../../src/MenuCharacter.cpp:367
563 #, c-format
564 msgid "Next: %d"
565 msgstr "Следващо: %d"
566
567 #: ../../../src/MenuCharacter.cpp:373
568 #, c-format
569 msgid "base (%d), bonus (%d)"
570 msgstr "основа (%d), бонус (%d)"
571
572 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
573 msgid "Related stats:"
574 msgstr "Свързани характеристики:"
575
576 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
577 #, c-format
578 msgid "Each level grants %d."
579 msgstr "Всяко ниво дава %d."
580
581 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
582 #, c-format
583 msgid "Each point of %s grants %d."
584 msgstr "Всяка точка от %s дава %d."
585
586 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
587 msgid "Clear"
588 msgstr "Изчисти"
589
590 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
591 msgid "Assign:"
592 msgstr "Възложи"
593
594 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
143595 msgid "Defaults"
144596 msgstr "Нулиране"
145597
146 #: ../../../src/GameStateConfigBase.cpp:89
598 #: ../../../src/MenuConfig.cpp:123
147599 msgid "Reset ALL settings?"
148600 msgstr "Нулирай всички настройки?"
149601
150 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
602 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
151603 msgid "OK"
152604 msgstr "Добре"
153605
154 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
155 #: ../../../src/InputState.cpp:401
156 msgid "Cancel"
157 msgstr "Отказ"
158
159 #: ../../../src/GameStateConfigBase.cpp:160
160 #: ../../../src/GameStateConfigDesktop.cpp:130
606 #: ../../../src/MenuConfig.cpp:246
607 msgid "Continue"
608 msgstr ""
609
610 #: ../../../src/MenuConfig.cpp:248
611 msgid "Save Game"
612 msgstr ""
613
614 #: ../../../src/MenuConfig.cpp:291
615 msgid "Default"
616 msgstr ""
617
618 #: ../../../src/MenuConfig.cpp:291
619 msgid ""
620 "Show all loot tooltips, except for those that would be obscured by the "
621 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
622 msgstr ""
623
624 #: ../../../src/MenuConfig.cpp:292
625 msgid "Show all"
626 msgstr ""
627
628 #: ../../../src/MenuConfig.cpp:292
629 msgid ""
630 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
631 msgstr ""
632
633 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
634 msgid "Hidden"
635 msgstr ""
636
637 #: ../../../src/MenuConfig.cpp:293
638 msgid ""
639 "Always hide loot tooltips, except for when a piece of loot is hovered with "
640 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
641 msgstr ""
642
643 #: ../../../src/MenuConfig.cpp:296
644 msgid "Visible"
645 msgstr ""
646
647 #: ../../../src/MenuConfig.cpp:297
648 msgid "Visible (2x zoom)"
649 msgstr ""
650
651 #: ../../../src/MenuConfig.cpp:301
652 msgid ""
653 "Controls the type of warning to be activated when the player is below the "
654 "low health threshold."
655 msgstr ""
656
657 #: ../../../src/MenuConfig.cpp:302
658 msgid "- Display a message"
659 msgstr ""
660
661 #: ../../../src/MenuConfig.cpp:303
662 msgid "- Play a sound"
663 msgstr ""
664
665 #: ../../../src/MenuConfig.cpp:304
666 msgid "- Change the cursor"
667 msgstr ""
668
669 #: ../../../src/MenuConfig.cpp:306
670 msgid "Disabled"
671 msgstr ""
672
673 #: ../../../src/MenuConfig.cpp:307
674 msgid "All"
675 msgstr ""
676
677 #: ../../../src/MenuConfig.cpp:308
678 msgid "Message & Cursor"
679 msgstr ""
680
681 #: ../../../src/MenuConfig.cpp:309
682 msgid "Message & Sound"
683 msgstr ""
684
685 #: ../../../src/MenuConfig.cpp:310
686 msgid "Sound & Cursor"
687 msgstr ""
688
689 #: ../../../src/MenuConfig.cpp:311
690 msgid "Message"
691 msgstr ""
692
693 #: ../../../src/MenuConfig.cpp:312
694 msgid "Cursor"
695 msgstr ""
696
697 #: ../../../src/MenuConfig.cpp:313
698 msgid "Sound"
699 msgstr ""
700
701 #: ../../../src/MenuConfig.cpp:319
702 msgid ""
703 "When the player's health drops below the given threshold, the low health "
704 "notifications are triggered if one or more of them is enabled."
705 msgstr ""
706
707 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
708 msgid "Exit"
709 msgstr "Излез"
710
711 #: ../../../src/MenuConfig.cpp:333
712 msgid "Video"
713 msgstr "Видео"
714
715 #: ../../../src/MenuConfig.cpp:334
161716 msgid "Audio"
162717 msgstr "Звук"
163718
164 #: ../../../src/GameStateConfigBase.cpp:161
165 #: ../../../src/GameStateConfigDesktop.cpp:131
719 #: ../../../src/MenuConfig.cpp:335
166720 msgid "Interface"
167721 msgstr "Интерфейс"
168722
169 #: ../../../src/GameStateConfigBase.cpp:162
170 #: ../../../src/GameStateConfigDesktop.cpp:134
723 #: ../../../src/MenuConfig.cpp:336
724 msgid "Input"
725 msgstr "Вход"
726
727 #: ../../../src/MenuConfig.cpp:337
728 msgid "Keybindings"
729 msgstr "Клавиши"
730
731 #: ../../../src/MenuConfig.cpp:338
171732 msgid "Mods"
172733 msgstr "Модификации"
173734
174 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
735 #: ../../../src/MenuConfig.cpp:350
736 msgid "Paused"
737 msgstr "Пауза"
738
739 #: ../../../src/MenuConfig.cpp:353
740 msgid "Time Played"
741 msgstr ""
742
743 #: ../../../src/MenuConfig.cpp:359
744 msgid "Renderer"
745 msgstr "Рендер"
746
747 #: ../../../src/MenuConfig.cpp:360
748 msgid "Full Screen Mode"
749 msgstr "Режим на цял екран"
750
751 #: ../../../src/MenuConfig.cpp:361
752 msgid "Hardware surfaces"
753 msgstr "Хардуерни повърхности"
754
755 #: ../../../src/MenuConfig.cpp:362
756 msgid "V-Sync"
757 msgstr "Вертикална синхронизация (V-Sync)"
758
759 #: ../../../src/MenuConfig.cpp:363
760 msgid "Texture Filtering"
761 msgstr "Текстурно филтриране"
762
763 #: ../../../src/MenuConfig.cpp:364
764 msgid "DPI scaling"
765 msgstr "DPI мащабиране"
766
767 #: ../../../src/MenuConfig.cpp:365
768 msgid "Parallax Layers"
769 msgstr ""
770
771 #: ../../../src/MenuConfig.cpp:366
772 msgid "Allow changing gamma"
773 msgstr "Разрешаване промяна на гамата"
774
775 #: ../../../src/MenuConfig.cpp:367
776 msgid "Gamma"
777 msgstr "Гама"
778
779 #: ../../../src/MenuConfig.cpp:369
780 msgid "Sound Volume"
781 msgstr "Сила на звука"
782
783 #: ../../../src/MenuConfig.cpp:370
175784 msgid "Music Volume"
176785 msgstr "Сила на музиката"
177786
178 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
179 msgid "Sound Volume"
180 msgstr "Сила на звука"
181
182 #: ../../../src/GameStateConfigBase.cpp:257
787 #: ../../../src/MenuConfig.cpp:372
183788 msgid "Language"
184789 msgstr "Език"
185790
186 #: ../../../src/GameStateConfigBase.cpp:266
791 #: ../../../src/MenuConfig.cpp:373
187792 msgid "Show FPS"
188793 msgstr "Показване на FPS"
189794
190 #: ../../../src/GameStateConfigBase.cpp:270
795 #: ../../../src/MenuConfig.cpp:374
796 msgid "Hardware mouse cursor"
797 msgstr "Хардуер за курсора на мишката"
798
799 #: ../../../src/MenuConfig.cpp:375
191800 msgid "Colorblind Mode"
192801 msgstr "Режим за далтонисти"
193802
194 #: ../../../src/GameStateConfigBase.cpp:274
195 msgid "Hardware mouse cursor"
196 msgstr "Хардуер за курсора на мишката"
197
198 #: ../../../src/GameStateConfigBase.cpp:278
803 #: ../../../src/MenuConfig.cpp:376
199804 msgid "Developer Mode"
200805 msgstr "Режим за програмисти"
201806
202 #: ../../../src/GameStateConfigBase.cpp:282
807 #: ../../../src/MenuConfig.cpp:377
203808 msgid "Subtitles"
204809 msgstr "Субтитри"
205810
206 #: ../../../src/GameStateConfigBase.cpp:286
207 msgid "Active Mods"
208 msgstr "Включени модификации"
209
210 #: ../../../src/GameStateConfigBase.cpp:295
211 msgid "Available Mods"
212 msgstr "Налични модификации"
213
214 #: ../../../src/GameStateConfigBase.cpp:314
215 msgid "<< Disable"
216 msgstr "<< Изключи"
217
218 #: ../../../src/GameStateConfigBase.cpp:320
219 msgid "Enable >>"
220 msgstr "Включи >>"
221
222 #: ../../../src/GameStateConfigBase.cpp:873
223 msgid "Version:"
224 msgstr "Версия:"
225
226 #: ../../../src/GameStateConfigBase.cpp:878
227 msgid "Game:"
228 msgstr "Игра:"
229
230 #: ../../../src/GameStateConfigBase.cpp:883
231 msgid "Engine version:"
232 msgstr "Engine версия:"
233
234 #: ../../../src/GameStateConfigBase.cpp:891
235 msgid "Requires mods:"
236 msgstr "Изисква модификации:"
237
238 #: ../../../src/GameStateConfigDesktop.cpp:83
239 #: ../../../src/GameStateConfigDesktop.cpp:751
240 msgid "Clear"
241 msgstr "Изчисти"
242
243 #: ../../../src/GameStateConfigDesktop.cpp:83
244 #: ../../../src/GameStateConfigDesktop.cpp:749
245 msgid "Assign:"
246 msgstr "Възложи"
247
248 #: ../../../src/GameStateConfigDesktop.cpp:128
249 msgid "Video"
250 msgstr "Видео"
251
252 #: ../../../src/GameStateConfigDesktop.cpp:132
253 msgid "Input"
254 msgstr "Вход"
255
256 #: ../../../src/GameStateConfigDesktop.cpp:133
257 msgid "Keybindings"
258 msgstr "Клавиши"
259
260 #: ../../../src/GameStateConfigDesktop.cpp:188
811 #: ../../../src/MenuConfig.cpp:378
812 msgid "Loot tooltip visibility"
813 msgstr ""
814
815 #: ../../../src/MenuConfig.cpp:379
816 msgid "Mini-map mode"
817 msgstr ""
818
819 #: ../../../src/MenuConfig.cpp:380
820 msgid "Always show stat bar labels"
821 msgstr "Винаги да се показват статистики"
822
823 #: ../../../src/MenuConfig.cpp:381
824 msgid "Allow stat bar auto-hiding"
825 msgstr ""
826
827 #: ../../../src/MenuConfig.cpp:382
828 msgid "Show combat text"
829 msgstr "Показване на боен текст"
830
831 #: ../../../src/MenuConfig.cpp:383
832 msgid "Automatically equip items"
833 msgstr "Автоматично екипиране с предмети"
834
835 #: ../../../src/MenuConfig.cpp:384
836 msgid "Show hidden entity markers"
837 msgstr ""
838
839 #: ../../../src/MenuConfig.cpp:385
840 msgid "Low health notification"
841 msgstr ""
842
843 #: ../../../src/MenuConfig.cpp:386
844 msgid "Low health threshold"
845 msgstr ""
846
847 #: ../../../src/MenuConfig.cpp:389
848 msgid "Joystick"
849 msgstr "Джойстик"
850
851 #: ../../../src/MenuConfig.cpp:390
852 msgid "Move hero using mouse"
853 msgstr "Преместване на героя чрез мишка"
854
855 #: ../../../src/MenuConfig.cpp:391
856 msgid "Mouse aim"
857 msgstr "Прицелване чрез мишка"
858
859 #: ../../../src/MenuConfig.cpp:392
860 msgid "Do not use mouse"
861 msgstr "Да не се използва мишка"
862
863 #: ../../../src/MenuConfig.cpp:393
864 msgid "Swap mouse movement button"
865 msgstr ""
866
867 #: ../../../src/MenuConfig.cpp:394
868 msgid "Attack with mouse movement"
869 msgstr ""
870
871 #: ../../../src/MenuConfig.cpp:395
872 msgid "Joystick Deadzone"
873 msgstr "Мъртва зона на джойстик"
874
875 #: ../../../src/MenuConfig.cpp:405
876 #, c-format
877 msgid "Primary binding: %s"
878 msgstr ""
879
880 #: ../../../src/MenuConfig.cpp:406
881 #, c-format
882 msgid "Alternate binding: %s"
883 msgstr ""
884
885 #: ../../../src/MenuConfig.cpp:407
886 #, c-format
887 msgid "Joystick binding: %s"
888 msgstr ""
889
890 #: ../../../src/MenuConfig.cpp:508
261891 msgid ""
262892 "Will try to store surfaces in video memory versus system memory. The effect "
263893 "this has on performance depends on the renderer."
266896 "памет. Въздействието, което това има върху производителността зависи от "
267897 "рендера."
268898
269 #: ../../../src/GameStateConfigDesktop.cpp:189
899 #: ../../../src/MenuConfig.cpp:509
270900 msgid ""
271901 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
272902 "windowed mode or input lag."
274904 "Предотвратява накъсването (screen tearing). Изключете, ако изпитвате "
275905 "проблеми в прозоречен режим или закъснение при въвеждане."
276906
277 #: ../../../src/GameStateConfigDesktop.cpp:190
907 #: ../../../src/MenuConfig.cpp:510
278908 msgid ""
279909 "When enabled, this uses the screen DPI in addition to the window dimensions "
280910 "to scale the rendering resolution. Otherwise, only the window dimensions are"
284914 " прозореца, за да мащабира разделителната способност на рендериране. В "
285915 "противен случай се използват само размерите на прозореца."
286916
287 #: ../../../src/GameStateConfigDesktop.cpp:191
917 #: ../../../src/MenuConfig.cpp:511
288918 msgid ""
289919 "This enables parallax (non-tile) layers. Disabling this setting can improve "
290920 "performance in some cases."
291921 msgstr ""
292922
293 #: ../../../src/GameStateConfigDesktop.cpp:192
294 msgid "Experimental"
295 msgstr "Експериментално"
296
297 #: ../../../src/GameStateConfigDesktop.cpp:193
298 msgid "For handheld devices"
299 msgstr "За преносими устройства"
300
301 #: ../../../src/GameStateConfigDesktop.cpp:211
302 msgid "Renderer"
303 msgstr "Рендер"
304
305 #: ../../../src/GameStateConfigDesktop.cpp:227
306 msgid "Full Screen Mode"
307 msgstr "Режим на цял екран"
308
309 #: ../../../src/GameStateConfigDesktop.cpp:231
310 msgid "Move hero using mouse"
311 msgstr "Преместване на героя чрез мишка"
312
313 #: ../../../src/GameStateConfigDesktop.cpp:235
314 msgid "Hardware surfaces"
315 msgstr "Хардуерни повърхности"
316
317 #: ../../../src/GameStateConfigDesktop.cpp:239
318 msgid "V-Sync"
319 msgstr "Вертикална синхронизация (V-Sync)"
320
321 #: ../../../src/GameStateConfigDesktop.cpp:243
322 msgid "Texture Filtering"
323 msgstr "Текстурно филтриране"
324
325 #: ../../../src/GameStateConfigDesktop.cpp:247
326 msgid "DPI scaling"
327 msgstr "DPI мащабиране"
328
329 #: ../../../src/GameStateConfigDesktop.cpp:251
330 msgid "Parallax Layers"
331 msgstr ""
332
333 #: ../../../src/GameStateConfigDesktop.cpp:255
334 msgid "Allow changing gamma"
335 msgstr "Разрешаване промяна на гамата"
336
337 #: ../../../src/GameStateConfigDesktop.cpp:259
338 msgid "Gamma"
339 msgstr "Гама"
340
341 #: ../../../src/GameStateConfigDesktop.cpp:263
342 msgid "Use joystick"
343 msgstr "Използване на джойстик"
344
345 #: ../../../src/GameStateConfigDesktop.cpp:267
346 msgid "Joystick"
347 msgstr "Джойстик"
348
349 #: ../../../src/GameStateConfigDesktop.cpp:283
350 msgid "Mouse aim"
351 msgstr "Прицелване чрез мишка"
352
353 #: ../../../src/GameStateConfigDesktop.cpp:287
354 msgid "Do not use mouse"
355 msgstr "Да не се използва мишка"
356
357 #: ../../../src/GameStateConfigDesktop.cpp:291
358 msgid "Joystick Deadzone"
359 msgstr "Мъртва зона на джойстик"
360
361 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
362 msgid "Loading..."
363 msgstr "Зареждане…"
364
365 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
366 msgid "Delete Save"
367 msgstr "Изтрий героя"
368
369 #: ../../../src/GameStateLoad.cpp:88
370 msgid "Delete this save?"
371 msgstr "Изтриване на героя?"
372
373 #: ../../../src/GameStateLoad.cpp:90
374 msgid "Exit to Title"
375 msgstr "Назад"
376
377 #: ../../../src/GameStateLoad.cpp:93
378 msgid "New Game"
379 msgstr "Нов герой"
380
381 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
382 msgid "Choose a Slot"
383 msgstr "Избери герой"
384
385 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
386 msgid "Enable a story mod to continue"
387 msgstr "Включете модификация на историята, за да продължите"
388
389 #: ../../../src/GameStateLoad.cpp:589
390 msgid "Load Game"
391 msgstr "Зареди героя"
392
393 #: ../../../src/GameStateLoad.cpp:695
394 msgid "Entering game world..."
395 msgstr "Влизане в игралния свят…"
396
397 #: ../../../src/GameStateLoad.cpp:698
398 msgid "Loading saved game..."
399 msgstr "Зареждане на запазената игра…"
400
401 #: ../../../src/GameStateLoad.cpp:731
402 msgid "Invalid save"
403 msgstr "Невалиден герой"
404
405 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
406 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
407 #: ../../../src/MenuPowers.cpp:1542
408 #, c-format
409 msgid "Level %d"
410 msgstr "Ниво %d"
411
412 #: ../../../src/GameStateNew.cpp:68
413 msgid "Create"
414 msgstr "Създай"
415
416 #: ../../../src/GameStateNew.cpp:76
417 msgid "Randomize"
418 msgstr "Разбъркай"
419
420 #: ../../../src/GameStateNew.cpp:92
421 msgid "Choose a Portrait"
422 msgstr "Избери портрет"
423
424 #: ../../../src/GameStateNew.cpp:96
425 msgid "Choose a Name"
426 msgstr "Избери име"
427
428 #: ../../../src/GameStateNew.cpp:100
429 msgid "Permadeath?"
430 msgstr "Без прераждане?"
431
432 #: ../../../src/GameStateNew.cpp:104
433 msgid "Choose a Class"
434 msgstr "Избери клас"
435
436 #: ../../../src/GameStateTitle.cpp:108
437 msgid "Play Game"
438 msgstr "Играй"
439
440 #: ../../../src/GameStateTitle.cpp:111
441 msgid "Enable a core mod to continue"
442 msgstr "Включете основна модификация, за да продължите"
443
444 #: ../../../src/GameStateTitle.cpp:115
445 msgid "Configuration"
446 msgstr "Настройки"
447
448 #: ../../../src/GameStateTitle.cpp:118
449 msgid "Credits"
450 msgstr "Признания"
451
452 #: ../../../src/GameStateTitle.cpp:121
453 msgid "Exit Game"
454 msgstr "Изход"
455
456 #: ../../../src/InputState.cpp:402
457 msgid "Accept"
458 msgstr "Приемане"
459
460 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
461 msgid "Up"
462 msgstr "Up"
463
464 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
465 msgid "Down"
466 msgstr "Down"
467
468 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
469 msgid "Left"
470 msgstr "Left"
471
472 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
473 msgid "Right"
474 msgstr "Right"
475
476 #: ../../../src/InputState.cpp:407
477 msgid "Bar1"
478 msgstr "Лента1"
479
480 #: ../../../src/InputState.cpp:408
481 msgid "Bar2"
482 msgstr "Лента2"
483
484 #: ../../../src/InputState.cpp:409
485 msgid "Bar3"
486 msgstr "Лента3"
487
488 #: ../../../src/InputState.cpp:410
489 msgid "Bar4"
490 msgstr "Лента4"
491
492 #: ../../../src/InputState.cpp:411
493 msgid "Bar5"
494 msgstr "Лента5"
495
496 #: ../../../src/InputState.cpp:412
497 msgid "Bar6"
498 msgstr "Лента6"
499
500 #: ../../../src/InputState.cpp:413
501 msgid "Bar7"
502 msgstr "Лента7"
503
504 #: ../../../src/InputState.cpp:414
505 msgid "Bar8"
506 msgstr "Лента8"
507
508 #: ../../../src/InputState.cpp:415
509 msgid "Bar9"
510 msgstr "Лента9"
511
512 #: ../../../src/InputState.cpp:416
513 msgid "Bar0"
514 msgstr "Лента0"
515
516 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
517 #: ../../../src/MenuCharacter.cpp:54
518 msgid "Character"
519 msgstr "Характер"
520
521 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
522 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
523 msgid "Inventory"
524 msgstr "Инвентар"
525
526 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
527 #: ../../../src/MenuPowers.cpp:168
528 msgid "Powers"
529 msgstr "Умения"
530
531 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
532 #: ../../../src/MenuLog.cpp:72
533 msgid "Log"
534 msgstr "Дневник"
535
536 #: ../../../src/InputState.cpp:421
537 msgid "Main1"
538 msgstr "Главен1"
539
540 #: ../../../src/InputState.cpp:422
541 msgid "Main2"
542 msgstr "Главен2"
543
544 #: ../../../src/InputState.cpp:423
545 msgid "Ctrl"
546 msgstr "Ctrl"
547
548 #: ../../../src/InputState.cpp:424
549 msgid "Shift"
550 msgstr "Shift"
551
552 #: ../../../src/InputState.cpp:425
553 msgid "Alt"
554 msgstr "Alt"
555
556 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
557 msgid "Delete"
558 msgstr "Delete"
559
560 #: ../../../src/InputState.cpp:427
561 msgid "ActionBar Accept"
562 msgstr "ActionBar Accept"
563
564 #: ../../../src/InputState.cpp:428
565 msgid "ActionBar Left"
566 msgstr "ActionBar Left"
567
568 #: ../../../src/InputState.cpp:429
569 msgid "ActionBar Right"
570 msgstr "ActionBar Right"
571
572 #: ../../../src/InputState.cpp:430
573 msgid "ActionBar Use"
574 msgstr "ActionBar Use"
575
576 #: ../../../src/InputState.cpp:431
577 msgid "Developer Menu"
578 msgstr "Developer меню"
579
580 #: ../../../src/InputState.cpp:433
581 msgid "Left Mouse"
582 msgstr "Left Mouse"
583
584 #: ../../../src/InputState.cpp:434
585 msgid "Middle Mouse"
586 msgstr "Middle Mouse"
587
588 #: ../../../src/InputState.cpp:435
589 msgid "Right Mouse"
590 msgstr "Right Mouse"
591
592 #: ../../../src/InputState.cpp:436
593 msgid "Wheel Up"
594 msgstr "Wheel Up"
595
596 #: ../../../src/InputState.cpp:437
597 msgid "Wheel Down"
598 msgstr "Wheel Down"
599
600 #: ../../../src/InputState.cpp:438
601 msgid "Mouse X1"
602 msgstr "Mouse X1"
603
604 #: ../../../src/InputState.cpp:439
605 msgid "Mouse X2"
606 msgstr "Mouse X2"
607
608 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
609 msgid "Unknown Item"
610 msgstr "Непознат предмет"
611
612 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
613 #, c-format
614 msgid "%d%% Speed"
615 msgstr "%d%% Бързина"
616
617 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
618 #, c-format
619 msgid "%d%% Attack Speed"
620 msgstr "%d%% Бързина на атака"
621
622 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
623 #: ../../../src/MenuPowers.cpp:833
624 #, c-format
625 msgid "Resistance (%s)"
626 msgstr ""
627
628 #: ../../../src/ItemManager.cpp:684
629 #, c-format
630 msgid "Requires %s"
631 msgstr "Изисква %s"
632
633 #: ../../../src/ItemManager.cpp:733
634 msgid "Quest Item"
635 msgstr "Предмет от куест"
636
637 #: ../../../src/ItemManager.cpp:760
638 #, c-format
639 msgid "Quality: %s"
640 msgstr "Качество: %s"
641
642 #: ../../../src/ItemManager.cpp:785
643 #, c-format
644 msgid "Absorb: %d-%d"
645 msgstr "Абсорбиране: %d – %d"
646
647 #: ../../../src/ItemManager.cpp:787
648 #, c-format
649 msgid "Absorb: %d"
650 msgstr "Абсорбиране: %d"
651
652 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
653 #: ../../../src/MenuPowers.cpp:1134
654 #, c-format
655 msgid "Requires Level %d"
656 msgstr "Изисква ниво %d"
657
658 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
659 #: ../../../src/MenuPowers.cpp:1125
660 #, c-format
661 msgid "Requires %s %d"
662 msgstr "Изисква %s %d"
663
664 #: ../../../src/ItemManager.cpp:849
665 #, c-format
666 msgid "Requires Class: %s"
667 msgstr "Изисква клас: %s"
668
669 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
670 #, c-format
671 msgid "Buy Price: %d %s"
672 msgstr "Цена за закупуване: %d %s"
673
674 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
675 #, c-format
676 msgid "Buy Price: %d %s each"
677 msgstr "Цена за закупуване: %d %s за брой"
678
679 #: ../../../src/ItemManager.cpp:886
680 #, c-format
681 msgid "Sell Price: %d %s"
682 msgstr "Продажна цена: %d %s"
683
684 #: ../../../src/ItemManager.cpp:888
685 #, c-format
686 msgid "Sell Price: %d %s each"
687 msgstr "Продажна цена: %d %s за брой"
688
689 #: ../../../src/ItemManager.cpp:897
690 msgid "Set:"
691 msgstr "Комплект:"
692
693 #: ../../../src/ItemManager.cpp:904
694 #, c-format
695 msgid "%d items:"
696 msgstr "%d предмета:"
697
698 #: ../../../src/ItemManager.cpp:917
699 #, c-format
700 msgid "Press [%s] to use"
701 msgstr "Натиснете [%s], за да използвате"
702
703 #: ../../../src/ItemManager.cpp:920
704 #, c-format
705 msgid "Press [%s] to read"
706 msgstr "Натиснете [%s], за да прочетете"
707
708 #: ../../../src/MenuActionBar.cpp:87
709 msgid "Loot tooltip visibility"
710 msgstr ""
711
712 #: ../../../src/MenuActionBar.cpp:88
713 msgid "Mini-map mode"
714 msgstr ""
715
716 #: ../../../src/MenuActionBar.cpp:89
717 msgid "Always show stat bar labels"
718 msgstr "Винаги да се показват статистики"
719
720 #: ../../../src/MenuActionBar.cpp:90
721 msgid "Show combat text"
722 msgstr "Показване на боен текст"
723
724 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
725 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
726 #, c-format
727 msgid "Hotkey: %s"
728 msgstr "Клавиш: %s"
729
730 #: ../../../src/MenuActionBar.cpp:474
731 #, c-format
732 msgid "Default. Temporarily show all loot tooltips with '%s'."
733 msgstr ""
734
735 #: ../../../src/MenuActionBar.cpp:476
736 #, c-format
737 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
738 msgstr ""
739
740 #: ../../../src/MenuActionBar.cpp:478
741 #, c-format
742 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
743 msgstr ""
744
745 #: ../../../src/MenuActionBar.cpp:482
746 msgid "Visible"
747 msgstr ""
748
749 #: ../../../src/MenuActionBar.cpp:484
750 msgid "Visible (2x zoom)"
751 msgstr ""
752
753 #: ../../../src/MenuActionBar.cpp:486
754 msgid "Hidden"
755 msgstr ""
756
757 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
758 msgid "Enabled"
759 msgstr ""
760
761 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
762 msgid "Disabled"
763 msgstr ""
764
765 #: ../../../src/MenuActionBar.cpp:657
766 msgid "Not enough MP."
767 msgstr "Нямате достатъчно мана."
768
769 #: ../../../src/MenuActiveEffects.cpp:124
770 #, c-format
771 msgid "x%d"
772 msgstr "x%d"
773
774 #: ../../../src/MenuActiveEffects.cpp:219
775 msgid "Remaining:"
776 msgstr "Остават:"
777
778 #: ../../../src/MenuActiveEffects.cpp:225
779 #, c-format
780 msgid "x%d stacks"
781 msgstr "x%d стека"
782
783 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
784 msgid "Name"
785 msgstr "Име"
786
787 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
788 msgid "Level"
789 msgstr "Ниво"
790
791 #: ../../../src/MenuCharacter.cpp:310
792 #, c-format
793 msgid "%d unspent stat point"
794 msgstr "%d неизразходвана точка за атрибути"
795
796 #: ../../../src/MenuCharacter.cpp:313
797 #, c-format
798 msgid "%d unspent stat points"
799 msgstr "%d неизразходвани точки за атрибути"
800
801 #: ../../../src/MenuCharacter.cpp:355
802 #, c-format
803 msgid "Reduces the damage taken from \"%s\" elemental attacks."
804 msgstr "Намалява понесените щети от стихийната атака „%s“."
805
806 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
807 #, c-format
808 msgid "XP: %d"
809 msgstr "Опит: %d"
810
811 #: ../../../src/MenuCharacter.cpp:367
812 #, c-format
813 msgid "Next: %d"
814 msgstr "Следващо: %d"
815
816 #: ../../../src/MenuCharacter.cpp:373
817 #, c-format
818 msgid "base (%d), bonus (%d)"
819 msgstr "основа (%d), бонус (%d)"
820
821 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
822 msgid "Related stats:"
823 msgstr "Свързани характеристики:"
824
825 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
826 #, c-format
827 msgid "Each level grants %d."
828 msgstr "Всяко ниво дава %d."
829
830 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
831 #, c-format
832 msgid "Each point of %s grants %d."
833 msgstr "Всяка точка от %s дава %d."
923 #: ../../../src/MenuConfig.cpp:512
924 msgid ""
925 "Enables the below setting that controls the screen gamma level. The behavior"
926 " of the gamma setting can vary between platforms."
927 msgstr ""
928
929 #: ../../../src/MenuConfig.cpp:513
930 msgid ""
931 "Provides additional text for information that is primarily conveyed through "
932 "color."
933 msgstr ""
934
935 #: ../../../src/MenuConfig.cpp:514
936 msgid ""
937 "Some mods will automatically hide the stat bars when they are inactive. "
938 "Disabling this option will keep them displayed at all times."
939 msgstr ""
940
941 #: ../../../src/MenuConfig.cpp:515
942 msgid ""
943 "When enabled, empty equipment slots will be filled with applicable items "
944 "when they are obtained."
945 msgstr ""
946
947 #: ../../../src/MenuConfig.cpp:516
948 msgid ""
949 "Shows a marker above enemies, allies, and the player when they are obscured "
950 "by tall objects."
951 msgstr ""
952
953 #: ../../../src/MenuConfig.cpp:517
954 msgid ""
955 "This allows the game to be controlled entirely with the keyboard (or "
956 "joystick)."
957 msgstr ""
958
959 #: ../../../src/MenuConfig.cpp:518
960 msgid ""
961 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
962 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
963 "instead of 'Main1'."
964 msgstr ""
965
966 #: ../../../src/MenuConfig.cpp:519
967 msgid ""
968 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
969 "assigned to the movement button can be used by targeting an enemy. If this "
970 "setting is disabled, it is required to use 'Shift' to access the Power "
971 "assigned to the movement button."
972 msgstr ""
973
974 #: ../../../src/MenuConfig.cpp:520
975 msgid ""
976 "The player's attacks will be aimed in the direction of the mouse cursor when"
977 " this is enabled."
978 msgstr ""
979
980 #: ../../../src/MenuConfig.cpp:571
981 msgid "Active Mods"
982 msgstr "Включени модификации"
983
984 #: ../../../src/MenuConfig.cpp:580
985 msgid "Available Mods"
986 msgstr "Налични модификации"
987
988 #: ../../../src/MenuConfig.cpp:599
989 msgid "<< Disable"
990 msgstr "<< Изключи"
991
992 #: ../../../src/MenuConfig.cpp:605
993 msgid "Enable >>"
994 msgstr "Включи >>"
995
996 #: ../../../src/MenuConfig.cpp:1436
997 msgid "Version:"
998 msgstr "Версия:"
999
1000 #: ../../../src/MenuConfig.cpp:1441
1001 msgid "Game:"
1002 msgstr "Игра:"
1003
1004 #: ../../../src/MenuConfig.cpp:1446
1005 msgid "Engine version:"
1006 msgstr "Engine версия:"
1007
1008 #: ../../../src/MenuConfig.cpp:1454
1009 msgid "Requires mods:"
1010 msgstr "Изисква модификации:"
1011
1012 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
1013 msgid "(none)"
1014 msgstr "(няма)"
1015
1016 #: ../../../src/MenuConfig.cpp:1579
1017 msgid "Save & Exit"
1018 msgstr "Запази и излез"
8341019
8351020 #: ../../../src/MenuDevConsole.cpp:63
8361021 msgid "Execute"
9941179 msgid "HINT: Type help"
9951180 msgstr "СЪВЕТ: Напишете help"
9961181
997 #: ../../../src/MenuEnemy.cpp:138
1182 #: ../../../src/MenuEnemy.cpp:162
9981183 #, c-format
9991184 msgid "%s level %d"
10001185 msgstr "%s ниво %d"
10011186
1002 #: ../../../src/MenuEnemy.cpp:162
1187 #: ../../../src/MenuEnemy.cpp:186
10031188 msgid "Dead"
10041189 msgstr "Мъртъв"
10051190
1006 #: ../../../src/MenuEnemy.cpp:164
1191 #: ../../../src/MenuEnemy.cpp:188
10071192 msgid "Destroyed"
10081193 msgstr "Разрушен"
10091194
1010 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
1011 msgid "Paused"
1012 msgstr "Пауза"
1013
1014 #: ../../../src/MenuExit.cpp:91
1015 msgid "Save & Exit"
1016 msgstr "Запази и излез"
1017
1018 #: ../../../src/MenuExit.cpp:92
1019 msgid "Exit"
1020 msgstr "Излез"
1021
1022 #: ../../../src/MenuExit.cpp:96
1023 msgid "Continue"
1024 msgstr "Продължи"
1025
1026 #: ../../../src/MenuInventory.cpp:73
1027 msgid "Automatically equip items"
1028 msgstr "Автоматично екипиране с предмети"
1029
1030 #: ../../../src/MenuInventory.cpp:188
1195 #: ../../../src/MenuInventory.cpp:177
10311196 #, c-format
10321197 msgid "Lost %d%% of %s."
10331198 msgstr "Загубихте %d%% от %s."
10341199
1035 #: ../../../src/MenuInventory.cpp:195
1200 #: ../../../src/MenuInventory.cpp:184
10361201 #, c-format
10371202 msgid "Lost %d%% of total XP."
10381203 msgstr "Загубихте %d%% от общия опит."
10391204
1040 #: ../../../src/MenuInventory.cpp:200
1205 #: ../../../src/MenuInventory.cpp:189
10411206 #, c-format
10421207 msgid "Lost %d%% of current level XP."
10431208 msgstr "Загубихте %d%% опит от текущото ниво."
10441209
1045 #: ../../../src/MenuInventory.cpp:226
1210 #: ../../../src/MenuInventory.cpp:215
10461211 #, c-format
10471212 msgid "Lost %s."
10481213 msgstr "Загубихте %s."
10491214
1050 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1215 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10511216 #, c-format
10521217 msgid "%d %s"
10531218 msgstr "%d %s"
10541219
1055 #: ../../../src/MenuInventory.cpp:317
1220 #: ../../../src/MenuInventory.cpp:300
10561221 msgid "Pick up item(s):"
10571222 msgstr "Вдигане на предмет:"
10581223
1059 #: ../../../src/MenuInventory.cpp:318
1224 #: ../../../src/MenuInventory.cpp:301
10601225 msgid "Use or equip item:"
10611226 msgstr "Използване на предмет:"
10621227
1063 #: ../../../src/MenuInventory.cpp:319
1228 #: ../../../src/MenuInventory.cpp:302
10641229 #, c-format
10651230 msgid "%s modifiers"
10661231 msgstr "Модификатори за %s"
10671232
1068 #: ../../../src/MenuInventory.cpp:320
1233 #: ../../../src/MenuInventory.cpp:303
10691234 msgid "Select a quantity of item:"
10701235 msgstr "Избиране на количество:"
10711236
1072 #: ../../../src/MenuInventory.cpp:323
1237 #: ../../../src/MenuInventory.cpp:306
10731238 msgid "Stash item stack:"
10741239 msgstr "Скриване на предмет:"
10751240
1076 #: ../../../src/MenuInventory.cpp:325
1241 #: ../../../src/MenuInventory.cpp:308
10771242 msgid "Sell item stack:"
10781243 msgstr "Продаване на предмет:"
10791244
1080 #: ../../../src/MenuInventory.cpp:592
1245 #: ../../../src/MenuInventory.cpp:574
10811246 msgid "You don't have enough of the required item."
10821247 msgstr "Нямате достатъчно от необходимия предмет."
10831248
1084 #: ../../../src/MenuInventory.cpp:599
1249 #: ../../../src/MenuInventory.cpp:586
10851250 msgid "You can't use this item right now."
10861251 msgstr "Не можете да използвате този предмет точно сега."
10871252
1088 #: ../../../src/MenuInventory.cpp:611
1253 #: ../../../src/MenuInventory.cpp:598
10891254 msgid "This item can only be used from the action bar."
10901255 msgstr "Този предмет може да бъде използван само от лентата за действия."
10911256
1092 #: ../../../src/MenuInventory.cpp:729
1257 #: ../../../src/MenuInventory.cpp:716
10931258 msgid "Inventory is full."
10941259 msgstr "Инвентарът е пълен."
10951260
1096 #: ../../../src/MenuInventory.cpp:849
1261 #: ../../../src/MenuInventory.cpp:841
10971262 #, c-format
10981263 msgid "Not enough %s."
10991264 msgstr "Нямате достатъчно %s."
11001265
1101 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1266 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
11021267 msgid "This item can not be sold."
11031268 msgstr "Този предмет не може да бъде продаден."
11041269
11101275 msgid "Quests"
11111276 msgstr "Куестове"
11121277
1113 #: ../../../src/MenuManager.cpp:286
1278 #: ../../../src/MenuManager.cpp:296
11141279 #, c-format
11151280 msgid "XP: %d/%d"
11161281 msgstr "Опит: %d/%d"
11171282
1118 #: ../../../src/MenuManager.cpp:827
1283 #: ../../../src/MenuManager.cpp:854
11191284 msgid "This item can not be dropped."
11201285 msgstr "Този предмет не може да бъде пуснат."
11211286
11231288 msgid "Enter amount:"
11241289 msgstr "Въведи количество:"
11251290
1126 #: ../../../src/MenuPowers.cpp:787
1291 #: ../../../src/MenuPowers.cpp:786
11271292 msgid "Passive"
11281293 msgstr "Пасивно"
11291294
1130 #: ../../../src/MenuPowers.cpp:792
1295 #: ../../../src/MenuPowers.cpp:791
11311296 #, c-format
11321297 msgid "Costs %d MP"
11331298 msgstr "Изразходва %d мана"
11341299
1135 #: ../../../src/MenuPowers.cpp:796
1300 #: ../../../src/MenuPowers.cpp:795
11361301 #, c-format
11371302 msgid "Costs %d HP"
11381303 msgstr "Изразходва %d здраве"
11391304
1140 #: ../../../src/MenuPowers.cpp:801
1305 #: ../../../src/MenuPowers.cpp:800
11411306 msgid "Cooldown:"
11421307 msgstr "Време на изчакване:"
11431308
1144 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1309 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11451310 msgid "Damage per second"
11461311 msgstr "Щети в секунда"
11471312
1148 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1313 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11491314 msgid "HP per second"
11501315 msgstr "Здраве в секунда"
11511316
1152 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1317 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11531318 msgid "MP per second"
11541319 msgstr "Мана в секунда"
11551320
1156 #: ../../../src/MenuPowers.cpp:885
1321 #: ../../../src/MenuPowers.cpp:884
11571322 msgid "Immobilize"
11581323 msgstr "Приковаване"
11591324
1160 #: ../../../src/MenuPowers.cpp:893
1325 #: ../../../src/MenuPowers.cpp:892
11611326 msgid "Immunity"
11621327 msgstr "Имунитет"
11631328
1164 #: ../../../src/MenuPowers.cpp:896
1329 #: ../../../src/MenuPowers.cpp:895
11651330 msgid "Immunity to damage over time"
11661331 msgstr "Имунитет към щети за интервал от време"
11671332
1168 #: ../../../src/MenuPowers.cpp:899
1333 #: ../../../src/MenuPowers.cpp:898
11691334 msgid "Immunity to slow"
11701335 msgstr "Имунитет към забавяне"
11711336
1172 #: ../../../src/MenuPowers.cpp:902
1337 #: ../../../src/MenuPowers.cpp:901
11731338 msgid "Immunity to stun"
11741339 msgstr "Имунитет към зашеметяване"
11751340
1176 #: ../../../src/MenuPowers.cpp:905
1341 #: ../../../src/MenuPowers.cpp:904
11771342 msgid "Immunity to HP steal"
11781343 msgstr "Имунитет към крадене на здраве"
11791344
1180 #: ../../../src/MenuPowers.cpp:908
1345 #: ../../../src/MenuPowers.cpp:907
11811346 msgid "Immunity to MP steal"
11821347 msgstr "Имунитет към крадене на мана"
11831348
1184 #: ../../../src/MenuPowers.cpp:911
1349 #: ../../../src/MenuPowers.cpp:910
11851350 msgid "Immunity to knockback"
11861351 msgstr "Имунитет към бутащ удар"
11871352
1188 #: ../../../src/MenuPowers.cpp:914
1353 #: ../../../src/MenuPowers.cpp:913
11891354 msgid "Immunity to damage reflection"
11901355 msgstr "Имунитет към отразяване на щети"
11911356
1192 #: ../../../src/MenuPowers.cpp:917
1357 #: ../../../src/MenuPowers.cpp:916
11931358 msgid "Stun"
11941359 msgstr "Зашеметяване"
11951360
1196 #: ../../../src/MenuPowers.cpp:920
1361 #: ../../../src/MenuPowers.cpp:919
11971362 msgid "Automatic revive on death"
11981363 msgstr "Автоматично прераждане при смърт"
11991364
1200 #: ../../../src/MenuPowers.cpp:923
1365 #: ../../../src/MenuPowers.cpp:922
12011366 msgid "Convert"
12021367 msgstr "Превръщане"
12031368
1204 #: ../../../src/MenuPowers.cpp:926
1369 #: ../../../src/MenuPowers.cpp:925
12051370 msgid "Fear"
12061371 msgstr "Страх"
12071372
1208 #: ../../../src/MenuPowers.cpp:929
1373 #: ../../../src/MenuPowers.cpp:928
12091374 msgid "Lifespan"
12101375 msgstr "Продължителност на живота"
12111376
1212 #: ../../../src/MenuPowers.cpp:953
1377 #: ../../../src/MenuPowers.cpp:952
12131378 msgid "Magical Shield"
12141379 msgstr "Магически щит"
12151380
1216 #: ../../../src/MenuPowers.cpp:982
1381 #: ../../../src/MenuPowers.cpp:981
12171382 msgid "Healing"
12181383 msgstr "Излекуване"
12191384
1220 #: ../../../src/MenuPowers.cpp:985
1385 #: ../../../src/MenuPowers.cpp:984
12211386 msgid "Knockback"
12221387 msgstr "Бутащ удар"
12231388
1224 #: ../../../src/MenuPowers.cpp:1010
1389 #: ../../../src/MenuPowers.cpp:1009
12251390 #, c-format
12261391 msgid "%d%% chance"
12271392 msgstr "%d%% шанс"
12281393
1229 #: ../../../src/MenuPowers.cpp:1062
1394 #: ../../../src/MenuPowers.cpp:1061
12301395 msgid "Base Accuracy"
12311396 msgstr "Основна точност"
12321397
1233 #: ../../../src/MenuPowers.cpp:1082
1398 #: ../../../src/MenuPowers.cpp:1081
12341399 msgid "Base Critical Chance"
12351400 msgstr "Основен критичен шанс"
12361401
1237 #: ../../../src/MenuPowers.cpp:1090
1402 #: ../../../src/MenuPowers.cpp:1089
12381403 msgid "Ignores Absorbtion"
12391404 msgstr "Игнорира абсорбиране"
12401405
1241 #: ../../../src/MenuPowers.cpp:1095
1406 #: ../../../src/MenuPowers.cpp:1094
12421407 msgid "Ignores Avoidance"
12431408 msgstr "Игнорира избягване"
12441409
1245 #: ../../../src/MenuPowers.cpp:1100
1410 #: ../../../src/MenuPowers.cpp:1099
12461411 #, c-format
12471412 msgid "%d%% Chance to crit slowed targets"
12481413 msgstr "%d%% Шанс за критичен удар на забавени мишени"
12491414
1250 #: ../../../src/MenuPowers.cpp:1105
1415 #: ../../../src/MenuPowers.cpp:1104
12511416 #, c-format
12521417 msgid "Elemental Damage (%s)"
12531418 msgstr ""
12541419
1255 #: ../../../src/MenuPowers.cpp:1114
1420 #: ../../../src/MenuPowers.cpp:1113
12561421 #, c-format
12571422 msgid "Requires a %s"
12581423 msgstr "Изисква %s"
12591424
1260 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1425 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12611426 #, c-format
12621427 msgid "Requires Power: %s"
12631428 msgstr "Изисква умение: %s"
12641429
1265 #: ../../../src/MenuPowers.cpp:1163
1430 #: ../../../src/MenuPowers.cpp:1162
12661431 msgid "Click to Unlock (uses 1 Skill Point)"
12671432 msgstr "Натиснете, за да отключите (използва 1 точка за умения)"
12681433
1269 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1434 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12701435 msgid "Requires 1 Skill Point"
12711436 msgstr "Изисква 1 точка за умения"
12721437
1273 #: ../../../src/MenuPowers.cpp:1355
1438 #: ../../../src/MenuPowers.cpp:1354
12741439 #, c-format
12751440 msgid "%d unspent skill point"
12761441 msgstr "%d неизразходвана точка за умения"
12771442
1278 #: ../../../src/MenuPowers.cpp:1358
1443 #: ../../../src/MenuPowers.cpp:1357
12791444 #, c-format
12801445 msgid "%d unspent skill points"
12811446 msgstr "%d неизразходвани точки за умения"
12821447
1283 #: ../../../src/MenuPowers.cpp:1388
1448 #: ../../../src/MenuPowers.cpp:1387
12841449 msgid "Next Level:"
12851450 msgstr "Следващо ниво:"
12861451
1287 #: ../../../src/MenuStash.cpp:96
1288 msgid "Shared Stash"
1289 msgstr "Споделен сандък"
1290
1291 #: ../../../src/MenuStash.cpp:209
1452 #: ../../../src/MenuStash.cpp:53
1453 msgid "Private"
1454 msgstr ""
1455
1456 #: ../../../src/MenuStash.cpp:55
1457 msgid "Shared"
1458 msgstr ""
1459
1460 #: ../../../src/MenuStash.cpp:103
1461 msgid "Stash"
1462 msgstr ""
1463
1464 #: ../../../src/MenuStash.cpp:258
12921465 msgid "Can not store quest items in the stash."
12931466 msgstr "Не могат да се скриват предмети от куестове."
12941467
1295 #: ../../../src/MenuStash.cpp:219
1468 #: ../../../src/MenuStash.cpp:263
1469 msgid "This item can not be stored in the stash."
1470 msgstr ""
1471
1472 #: ../../../src/MenuStash.cpp:268
1473 msgid "This item can not be stored in the private stash."
1474 msgstr ""
1475
1476 #: ../../../src/MenuStash.cpp:273
1477 msgid "This item can not be stored in the shared stash."
1478 msgstr ""
1479
1480 #: ../../../src/MenuStash.cpp:283
12961481 msgid "Stash is full."
12971482 msgstr "Сандъка е пълен."
12981483
1299 #: ../../../src/MenuTalker.cpp:454
1484 #: ../../../src/MenuStash.cpp:340
1485 #, c-format
1486 msgid "Can not store item in stash: %s"
1487 msgstr ""
1488
1489 #: ../../../src/MenuTalker.cpp:447
1490 #, c-format
1491 msgid "<dialog node %d>"
1492 msgstr ""
1493
1494 #: ../../../src/MenuTalker.cpp:455
13001495 msgid "Trade"
13011496 msgstr "Търгувай"
13021497
13041499 msgid "Buyback"
13051500 msgstr "Откупуване"
13061501
1307 #: ../../../src/MenuVendor.cpp:279
1502 #: ../../../src/MenuVendor.cpp:281
13081503 msgid "Vendor"
13091504 msgstr "Продавач"
13101505
1311 #: ../../../src/PowerManager.cpp:1136
1506 #: ../../../src/PowerManager.cpp:1170
13121507 #, c-format
13131508 msgid "+%d Shield"
13141509 msgstr "+%d Щит"
13151510
1316 #: ../../../src/PowerManager.cpp:1392
1511 #: ../../../src/PowerManager.cpp:1426
13171512 msgid "You are already transformed, untransform first."
13181513 msgstr "Вече сте преобразени, първо се преобразете обратно."
13191514
1320 #: ../../../src/PowerManager.cpp:1404
1515 #: ../../../src/PowerManager.cpp:1438
13211516 msgid "Could not untransform at this position."
13221517 msgstr "Не можахте да се преобразите на това място."
13231518
13251520 msgid "Completed Quests"
13261521 msgstr "Завършени куестове"
13271522
1328 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1523 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13291524 msgid "Game saved."
13301525 msgstr "Играта е запазена."
13311526
1332 #: ../../../src/SDLInputState.cpp:582
1527 #: ../../../src/SDLInputState.cpp:643
1528 msgid "BkSp"
1529 msgstr ""
1530
1531 #: ../../../src/SDLInputState.cpp:644
1532 msgid "Caps"
1533 msgstr ""
1534
1535 #: ../../../src/SDLInputState.cpp:645
1536 msgid "Del"
1537 msgstr ""
1538
1539 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1540 msgid "End"
1541 msgstr "End"
1542
1543 #: ../../../src/SDLInputState.cpp:648
1544 msgid "Esc"
1545 msgstr ""
1546
1547 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1548 msgid "Home"
1549 msgstr "Home"
1550
1551 #: ../../../src/SDLInputState.cpp:650
1552 msgid "Ins"
1553 msgstr ""
1554
1555 #: ../../../src/SDLInputState.cpp:651
1556 msgid "LAlt"
1557 msgstr ""
1558
1559 #: ../../../src/SDLInputState.cpp:652
1560 msgid "LCtrl"
1561 msgstr ""
1562
1563 #: ../../../src/SDLInputState.cpp:654
1564 msgid "LShft"
1565 msgstr ""
1566
1567 #: ../../../src/SDLInputState.cpp:655
1568 msgid "Num"
1569 msgstr ""
1570
1571 #: ../../../src/SDLInputState.cpp:656
1572 msgid "PgDn"
1573 msgstr ""
1574
1575 #: ../../../src/SDLInputState.cpp:657
1576 msgid "PgUp"
1577 msgstr ""
1578
1579 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1580 msgid "Pause"
1581 msgstr "Pause"
1582
1583 #: ../../../src/SDLInputState.cpp:659
1584 msgid "Print"
1585 msgstr ""
1586
1587 #: ../../../src/SDLInputState.cpp:660
1588 msgid "RAlt"
1589 msgstr ""
1590
1591 #: ../../../src/SDLInputState.cpp:661
1592 msgid "RCtrl"
1593 msgstr ""
1594
1595 #: ../../../src/SDLInputState.cpp:662
1596 msgid "Ret"
1597 msgstr ""
1598
1599 #: ../../../src/SDLInputState.cpp:664
1600 msgid "RShft"
1601 msgstr ""
1602
1603 #: ../../../src/SDLInputState.cpp:665
1604 msgid "SLock"
1605 msgstr ""
1606
1607 #: ../../../src/SDLInputState.cpp:666
1608 msgid "Spc"
1609 msgstr ""
1610
1611 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1612 msgid "Tab"
1613 msgstr "Tab"
1614
1615 #: ../../../src/SDLInputState.cpp:673
13331616 msgid "Backspace"
13341617 msgstr "Backspace"
13351618
1336 #: ../../../src/SDLInputState.cpp:583
1619 #: ../../../src/SDLInputState.cpp:674
13371620 msgid "CapsLock"
13381621 msgstr "CapsLock"
13391622
1340 #: ../../../src/SDLInputState.cpp:586
1341 msgid "End"
1342 msgstr "End"
1343
1344 #: ../../../src/SDLInputState.cpp:587
1623 #: ../../../src/SDLInputState.cpp:678
13451624 msgid "Escape"
13461625 msgstr "Escape"
13471626
1348 #: ../../../src/SDLInputState.cpp:588
1349 msgid "Home"
1350 msgstr "Home"
1351
1352 #: ../../../src/SDLInputState.cpp:589
1627 #: ../../../src/SDLInputState.cpp:680
13531628 msgid "Insert"
13541629 msgstr "Insert"
13551630
1356 #: ../../../src/SDLInputState.cpp:590
1631 #: ../../../src/SDLInputState.cpp:681
13571632 msgid "Left Alt"
13581633 msgstr "Left Alt"
13591634
1360 #: ../../../src/SDLInputState.cpp:591
1635 #: ../../../src/SDLInputState.cpp:682
13611636 msgid "Left Ctrl"
13621637 msgstr "Left Ctrl"
13631638
1364 #: ../../../src/SDLInputState.cpp:593
1639 #: ../../../src/SDLInputState.cpp:684
13651640 msgid "Left Shift"
13661641 msgstr "Left Shift"
13671642
1368 #: ../../../src/SDLInputState.cpp:594
1643 #: ../../../src/SDLInputState.cpp:685
13691644 msgid "NumLock"
13701645 msgstr "NumLock"
13711646
1372 #: ../../../src/SDLInputState.cpp:595
1647 #: ../../../src/SDLInputState.cpp:686
13731648 msgid "PageDown"
13741649 msgstr "PageDown"
13751650
1376 #: ../../../src/SDLInputState.cpp:596
1651 #: ../../../src/SDLInputState.cpp:687
13771652 msgid "PageUp"
13781653 msgstr "PageUp"
13791654
1380 #: ../../../src/SDLInputState.cpp:597
1381 msgid "Pause"
1382 msgstr "Pause"
1383
1384 #: ../../../src/SDLInputState.cpp:598
1655 #: ../../../src/SDLInputState.cpp:689
13851656 msgid "PrintScreen"
13861657 msgstr "PrintScreen"
13871658
1388 #: ../../../src/SDLInputState.cpp:599
1659 #: ../../../src/SDLInputState.cpp:690
13891660 msgid "Right Alt"
13901661 msgstr "Right Alt"
13911662
1392 #: ../../../src/SDLInputState.cpp:600
1663 #: ../../../src/SDLInputState.cpp:691
13931664 msgid "Right Ctrl"
13941665 msgstr "Right Ctrl"
13951666
1396 #: ../../../src/SDLInputState.cpp:601
1667 #: ../../../src/SDLInputState.cpp:692
13971668 msgid "Return"
13981669 msgstr "Return"
13991670
1400 #: ../../../src/SDLInputState.cpp:603
1671 #: ../../../src/SDLInputState.cpp:694
14011672 msgid "Right Shift"
14021673 msgstr "Right Shift"
14031674
1404 #: ../../../src/SDLInputState.cpp:604
1675 #: ../../../src/SDLInputState.cpp:695
14051676 msgid "ScrollLock"
14061677 msgstr "ScrollLock"
14071678
1408 #: ../../../src/SDLInputState.cpp:605
1679 #: ../../../src/SDLInputState.cpp:696
14091680 msgid "Space"
14101681 msgstr "Space"
14111682
1412 #: ../../../src/SDLInputState.cpp:606
1413 msgid "Tab"
1414 msgstr "Tab"
1415
1416 #: ../../../src/SDLInputState.cpp:620
1683 #: ../../../src/SDLInputState.cpp:710
1684 #, c-format
1685 msgid "M%d"
1686 msgstr ""
1687
1688 #: ../../../src/SDLInputState.cpp:716
14171689 #, c-format
14181690 msgid "Mouse %d"
14191691 msgstr "Mouse %d"
14201692
1421 #: ../../../src/SDLInputState.cpp:628
1693 #: ../../../src/SDLInputState.cpp:726
1694 #, c-format
1695 msgid "JX%d-"
1696 msgstr ""
1697
1698 #: ../../../src/SDLInputState.cpp:728
14221699 #, c-format
14231700 msgid "Axis %d -"
14241701 msgstr "Axis %d -"
14251702
1426 #: ../../../src/SDLInputState.cpp:630
1703 #: ../../../src/SDLInputState.cpp:732
1704 #, c-format
1705 msgid "JX%d+"
1706 msgstr ""
1707
1708 #: ../../../src/SDLInputState.cpp:734
14271709 #, c-format
14281710 msgid "Axis %d +"
14291711 msgstr "Axis %d +"
14301712
1431 #: ../../../src/SDLInputState.cpp:633
1713 #: ../../../src/SDLInputState.cpp:739
1714 #, c-format
1715 msgid "JB%d"
1716 msgstr ""
1717
1718 #: ../../../src/SDLInputState.cpp:741
14321719 #, c-format
14331720 msgid "Button %d"
14341721 msgstr "Бутон %d"
14351722
1436 #: ../../../src/SDLInputState.cpp:637
1437 msgid "(none)"
1438 msgstr "(няма)"
1439
1440 #: ../../../src/SDLInputState.cpp:677
1723 #: ../../../src/SDLInputState.cpp:788
14411724 msgid "Touch control D-Pad"
14421725 msgstr ""
14431726
1444 #: ../../../src/SDLInputState.cpp:701
1727 #: ../../../src/SDLInputState.cpp:812
14451728 msgid "Touch control buttons"
14461729 msgstr ""
14471730
1448 #: ../../../src/SDLInputState.cpp:716
1731 #: ../../../src/SDLInputState.cpp:827
14491732 msgid "Tap"
14501733 msgstr "Натискане"
14511734
1452 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1453 #: ../../../src/SDLInputState.cpp:768
1735 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1736 #, c-format
1737 msgid "Can not bind: %s"
1738 msgstr ""
1739
1740 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1741 #: ../../../src/SDLInputState.cpp:901
14541742 #, c-format
14551743 msgid "'%s' is no longer bound to:"
14561744 msgstr "'%s' вече не е свързан с:"
16171905 msgid "k"
16181906 msgstr "к"
16191907
1620 #: ../../../src/Utils.cpp:580
1908 #: ../../../src/Utils.cpp:616
16211909 #, c-format
16221910 msgid "%s second"
16231911 msgstr "%s секунда"
16241912
1625 #: ../../../src/Utils.cpp:583
1913 #: ../../../src/Utils.cpp:619
16261914 #, c-format
16271915 msgid "%s seconds"
16281916 msgstr "%s секунди"
33 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
44 #
55 # Translators:
6 # Marc Tormo i Bochaca <mtbochaca@gmail.com>, 2018
6 # Marc Tormo i Bochaca <mtbochaca@gmail.com>, 2019
7 # Maria Cano <mariacdavila98@gmail.com>, 2020
78 #
89 #, fuzzy
910 msgid ""
1011 msgstr ""
1112 "Project-Id-Version: PACKAGE VERSION\n"
1213 "Report-Msgid-Bugs-To: \n"
13 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
14 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1415 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
15 "Last-Translator: Marc Tormo i Bochaca <mtbochaca@gmail.com>, 2018\n"
16 "Last-Translator: Maria Cano <mariacdavila98@gmail.com>, 2020\n"
1617 "Language-Team: Catalan (https://www.transifex.com/flareorg/teams/84925/ca/)\n"
1718 "MIME-Version: 1.0\n"
1819 "Content-Type: text/plain; charset=UTF-8\n"
2021 "Language: ca\n"
2122 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
2223
23 #: ../../../src/Avatar.cpp:367
24 #: ../../../src/Avatar.cpp:387
25 msgid "Your health is low!"
26 msgstr "Tens la salut baixa!"
27
28 #: ../../../src/Avatar.cpp:419
2429 #, c-format
2530 msgid "Congratulations, you have reached level %d!"
26 msgstr "Felicitacions, has arribat al nivell %d!"
27
28 #: ../../../src/Avatar.cpp:369
29 msgid "You may increase one attribute through the Character Menu."
30 msgstr "Podeu incrementar un atribut a través del Menú del Personatge."
31
32 #: ../../../src/Avatar.cpp:583
31 msgstr "Felicitats, has pujat a nivell %d!"
32
33 #: ../../../src/Avatar.cpp:421
34 msgid "You may increase one or more attributes through the Character Menu."
35 msgstr "Pots augmentar un atribut o més al Menú del Personatge."
36
37 #: ../../../src/Avatar.cpp:425
38 msgid "You may unlock one or more abilities through the Powers Menu."
39 msgstr "Pots desbloquejar una habilitat o més al Menú de Poders."
40
41 #: ../../../src/Avatar.cpp:692
3342 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3443 msgstr ""
3544 "Has estat vençut. El joc s'ha acabat! Prem ${INPUT_CONTINUE} per sortir al "
3645 "títol."
3746
38 #: ../../../src/Avatar.cpp:589
47 #: ../../../src/Avatar.cpp:698
3948 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
4049 msgstr "Has estat vençut. Prem ${INPUT_CONTINUE} per continuar."
4150
42 #: ../../../src/Avatar.cpp:839
51 #: ../../../src/Avatar.cpp:949
4352 msgid "Transformation expired. You have been moved back to a safe place."
4453 msgstr "La transformació ha caducat. Us heu mogut a un lloc segur."
4554
4857 msgid "%d %s removed."
4958 msgstr "%d %s eliminat."
5059
51 #: ../../../src/CampaignManager.cpp:162
60 #: ../../../src/CampaignManager.cpp:165
61 #, c-format
62 msgid "%s x%d removed."
63 msgstr "%s%d eliminat."
64
65 #: ../../../src/CampaignManager.cpp:167
5266 #, c-format
5367 msgid "%s removed."
5468 msgstr "%s eliminat."
5569
56 #: ../../../src/CampaignManager.cpp:175
70 #: ../../../src/CampaignManager.cpp:180
5771 #, c-format
5872 msgid "You receive %s."
5973 msgstr "Reps %s."
6074
61 #: ../../../src/CampaignManager.cpp:177
75 #: ../../../src/CampaignManager.cpp:182
6276 #, c-format
6377 msgid "You receive %s x%d."
6478 msgstr "Reps %s x%d."
6579
66 #: ../../../src/CampaignManager.cpp:186
80 #: ../../../src/CampaignManager.cpp:191
6781 #, c-format
6882 msgid "You receive %d %s."
6983 msgstr "Reps %d %s."
7084
71 #: ../../../src/CampaignManager.cpp:195
85 #: ../../../src/CampaignManager.cpp:200
7286 #, c-format
7387 msgid "You receive %d XP."
7488 msgstr "Reps %d XP."
7589
76 #: ../../../src/CampaignManager.cpp:201
90 #: ../../../src/CampaignManager.cpp:206
7791 msgid "HP restored."
7892 msgstr "PV restaurats."
7993
80 #: ../../../src/CampaignManager.cpp:205
94 #: ../../../src/CampaignManager.cpp:210
8195 msgid "MP restored."
8296 msgstr "PM restaurats."
8397
84 #: ../../../src/CampaignManager.cpp:210
98 #: ../../../src/CampaignManager.cpp:215
8599 msgid "HP and MP restored."
86100 msgstr "PV i PM restaurats."
87101
88 #: ../../../src/CampaignManager.cpp:214
102 #: ../../../src/CampaignManager.cpp:219
89103 msgid "Negative effects removed."
90104 msgstr "Efectes negatius eliminats."
91105
92 #: ../../../src/CampaignManager.cpp:220
106 #: ../../../src/CampaignManager.cpp:225
93107 msgid "HP and MP restored, negative effects removed"
94108 msgstr "Restaurats PV i PM, efectes negatius eliminats"
95109
113127 "\n"
114128 "El renderitzador per defecte és sovint més ràpid que el renderitzat SDL per programari."
115129
116 #: ../../../src/EngineSettings.cpp:561
130 #: ../../../src/EngineSettings.cpp:572
117131 msgid "Adventurer"
118132 msgstr "Aventurer"
119133
120 #: ../../../src/Entity.cpp:511
134 #: ../../../src/Entity.cpp:522
121135 msgid "miss"
122 msgstr "faltar"
123
124 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
125 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
136 msgstr "fallar"
137
138 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
139 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
126140 #, c-format
127141 msgid "+%d HP"
128142 msgstr "+%d PV"
129143
130 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
131 #: ../../../src/StatBlock.cpp:822
144 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
145 #: ../../../src/StatBlock.cpp:830
132146 #, c-format
133147 msgid "+%d MP"
134148 msgstr "+%d PM"
135149
136 #: ../../../src/EventManager.cpp:738
150 #: ../../../src/EventManager.cpp:782
137151 msgid "Unknown destination"
138152 msgstr "Destinació desconeguda"
139153
140 #: ../../../src/GameStateConfigBase.cpp:89
141 #: ../../../src/GameStateConfigBase.cpp:110
154 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
155 msgid "Loading..."
156 msgstr "Carregant..."
157
158 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
159 msgid "Delete Save"
160 msgstr "Esborrar i Desar"
161
162 #: ../../../src/GameStateLoad.cpp:90
163 msgid "Delete this save?"
164 msgstr "Eliminar aquesta partida desada?"
165
166 #: ../../../src/GameStateLoad.cpp:92
167 msgid "Exit to Title"
168 msgstr "Sortir als títols"
169
170 #: ../../../src/GameStateLoad.cpp:95
171 msgid "New Game"
172 msgstr "Partida nova"
173
174 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
175 msgid "Choose a Slot"
176 msgstr "Triar un espai"
177
178 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
179 msgid "Enable a story mod to continue"
180 msgstr "Habilitar un mod d'història per continuar"
181
182 #: ../../../src/GameStateLoad.cpp:597
183 msgid "Load Game"
184 msgstr "Carregar la partida"
185
186 #: ../../../src/GameStateLoad.cpp:706
187 msgid "Entering game world..."
188 msgstr "Entrant al món del joc..."
189
190 #: ../../../src/GameStateLoad.cpp:709
191 msgid "Loading saved game..."
192 msgstr "Carregant partida desada..."
193
194 #: ../../../src/GameStateLoad.cpp:742
195 msgid "Invalid save"
196 msgstr "Desat erroni"
197
198 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
199 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
200 #: ../../../src/MenuPowers.cpp:1543
201 #, c-format
202 msgid "Level %d"
203 msgstr "Nivell %d"
204
205 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
206 #: ../../../src/MenuConfig.cpp:244
207 msgid "Cancel"
208 msgstr "Cancel·lar"
209
210 #: ../../../src/GameStateNew.cpp:68
211 msgid "Create"
212 msgstr "Crear"
213
214 #: ../../../src/GameStateNew.cpp:76
215 msgid "Randomize"
216 msgstr "Aleatoritzar"
217
218 #: ../../../src/GameStateNew.cpp:92
219 msgid "Choose a Portrait"
220 msgstr "Tria un retrat"
221
222 #: ../../../src/GameStateNew.cpp:96
223 msgid "Choose a Name"
224 msgstr "Tria un nom"
225
226 #: ../../../src/GameStateNew.cpp:100
227 msgid "Permadeath?"
228 msgstr "Mort permanent?"
229
230 #: ../../../src/GameStateNew.cpp:104
231 msgid "Choose a Class"
232 msgstr "Trieu una classe"
233
234 #: ../../../src/GameStateTitle.cpp:107
235 msgid "Play Game"
236 msgstr "Jugar"
237
238 #: ../../../src/GameStateTitle.cpp:110
239 msgid "Enable a core mod to continue"
240 msgstr "Activar un mod del nucli per a continuar"
241
242 #: ../../../src/GameStateTitle.cpp:114
243 msgid "Configuration"
244 msgstr "Configuració"
245
246 #: ../../../src/GameStateTitle.cpp:117
247 msgid "Credits"
248 msgstr "Crèdits"
249
250 #: ../../../src/GameStateTitle.cpp:120
251 msgid "Exit Game"
252 msgstr "Sortir del Joc"
253
254 #: ../../../src/InputState.cpp:407
255 msgid "Accept"
256 msgstr "Acceptar"
257
258 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
259 #: ../../../src/SDLInputState.cpp:698
260 msgid "Up"
261 msgstr "Amunt"
262
263 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
264 #: ../../../src/SDLInputState.cpp:676
265 msgid "Down"
266 msgstr "Avall"
267
268 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
269 #: ../../../src/SDLInputState.cpp:683
270 msgid "Left"
271 msgstr "Esquerra"
272
273 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
274 #: ../../../src/SDLInputState.cpp:693
275 msgid "Right"
276 msgstr "Dreta"
277
278 #: ../../../src/InputState.cpp:412
279 msgid "Bar1"
280 msgstr "Bar1"
281
282 #: ../../../src/InputState.cpp:413
283 msgid "Bar2"
284 msgstr "Bar2"
285
286 #: ../../../src/InputState.cpp:414
287 msgid "Bar3"
288 msgstr "Bar3"
289
290 #: ../../../src/InputState.cpp:415
291 msgid "Bar4"
292 msgstr "Bar4"
293
294 #: ../../../src/InputState.cpp:416
295 msgid "Bar5"
296 msgstr "Bar5"
297
298 #: ../../../src/InputState.cpp:417
299 msgid "Bar6"
300 msgstr "Bar6"
301
302 #: ../../../src/InputState.cpp:418
303 msgid "Bar7"
304 msgstr "Bar7"
305
306 #: ../../../src/InputState.cpp:419
307 msgid "Bar8"
308 msgstr "Bar8"
309
310 #: ../../../src/InputState.cpp:420
311 msgid "Bar9"
312 msgstr "Bar9"
313
314 #: ../../../src/InputState.cpp:421
315 msgid "Bar0"
316 msgstr "Bar0"
317
318 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
319 #: ../../../src/MenuCharacter.cpp:54
320 msgid "Character"
321 msgstr "Personatge"
322
323 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
324 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
325 msgid "Inventory"
326 msgstr "Inventari"
327
328 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
329 #: ../../../src/MenuPowers.cpp:167
330 msgid "Powers"
331 msgstr "Poders"
332
333 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
334 #: ../../../src/MenuLog.cpp:72
335 msgid "Log"
336 msgstr "Registre"
337
338 #: ../../../src/InputState.cpp:426
339 msgid "Main1"
340 msgstr "Principal1"
341
342 #: ../../../src/InputState.cpp:427
343 msgid "Main2"
344 msgstr "Principal2"
345
346 #: ../../../src/InputState.cpp:428
347 msgid "Ctrl"
348 msgstr "Ctrl"
349
350 #: ../../../src/InputState.cpp:429
351 msgid "Shift"
352 msgstr "Shift"
353
354 #: ../../../src/InputState.cpp:430
355 msgid "Alt"
356 msgstr "Alt"
357
358 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
359 msgid "Delete"
360 msgstr "Esborrar"
361
362 #: ../../../src/InputState.cpp:432
363 msgid "ActionBar Accept"
364 msgstr "Acceptar barra d'acció"
365
366 #: ../../../src/InputState.cpp:433
367 msgid "ActionBar Left"
368 msgstr "Barra d'acció esquerra"
369
370 #: ../../../src/InputState.cpp:434
371 msgid "ActionBar Right"
372 msgstr "Barra d'acció dreta"
373
374 #: ../../../src/InputState.cpp:435
375 msgid "ActionBar Use"
376 msgstr "Utilitzar la barra d'acció"
377
378 #: ../../../src/InputState.cpp:436
379 msgid "Developer Menu"
380 msgstr "Menú de desenvolupadors"
381
382 #: ../../../src/InputState.cpp:438
383 msgid "Left Mouse"
384 msgstr "Botó esquerre del ratolí"
385
386 #: ../../../src/InputState.cpp:439
387 msgid "Middle Mouse"
388 msgstr "Botó central del ratolí"
389
390 #: ../../../src/InputState.cpp:440
391 msgid "Right Mouse"
392 msgstr "Botó dret del ratolí"
393
394 #: ../../../src/InputState.cpp:441
395 msgid "Wheel Up"
396 msgstr "Roda amunt"
397
398 #: ../../../src/InputState.cpp:442
399 msgid "Wheel Down"
400 msgstr "Roda avall"
401
402 #: ../../../src/InputState.cpp:443
403 msgid "Mouse X1"
404 msgstr "Ratolí X1"
405
406 #: ../../../src/InputState.cpp:444
407 msgid "Mouse X2"
408 msgstr "Ratolí X2"
409
410 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
411 msgid "Unknown Item"
412 msgstr "Objecte desconegut"
413
414 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
415 #, c-format
416 msgid "%d%% Speed"
417 msgstr "%d%% Velocitat"
418
419 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
420 #, c-format
421 msgid "%d%% Attack Speed"
422 msgstr "%d%% Velocitat d'atac"
423
424 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
425 #: ../../../src/MenuPowers.cpp:832
426 #, c-format
427 msgid "Resistance (%s)"
428 msgstr "Resistència (%s)"
429
430 #: ../../../src/ItemManager.cpp:714
431 #, c-format
432 msgid "Requires %s"
433 msgstr "Demana %s"
434
435 #: ../../../src/ItemManager.cpp:763
436 msgid "Quest Item"
437 msgstr "Objecte de missió"
438
439 #: ../../../src/ItemManager.cpp:790
440 #, c-format
441 msgid "Quality: %s"
442 msgstr "Qualitat: %s"
443
444 #: ../../../src/ItemManager.cpp:815
445 #, c-format
446 msgid "Absorb: %d-%d"
447 msgstr "Amortidor: %d-%d"
448
449 #: ../../../src/ItemManager.cpp:817
450 #, c-format
451 msgid "Absorb: %d"
452 msgstr "Absorbir: %d"
453
454 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
455 #: ../../../src/MenuPowers.cpp:1133
456 #, c-format
457 msgid "Requires Level %d"
458 msgstr "Fa falta el nivell %d"
459
460 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
461 #: ../../../src/MenuPowers.cpp:1124
462 #, c-format
463 msgid "Requires %s %d"
464 msgstr "Requereix%s %d"
465
466 #: ../../../src/ItemManager.cpp:879
467 #, c-format
468 msgid "Requires Class: %s"
469 msgstr "Requereix la classe: %s"
470
471 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
472 #, c-format
473 msgid "Buy Price: %d %s"
474 msgstr "Preu de compra: %d %s"
475
476 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
477 #, c-format
478 msgid "Buy Price: %d %s each"
479 msgstr "Preu de compra: %d %s cadascun"
480
481 #: ../../../src/ItemManager.cpp:916
482 #, c-format
483 msgid "Sell Price: %d %s"
484 msgstr "Preu de venda: %d %s"
485
486 #: ../../../src/ItemManager.cpp:918
487 #, c-format
488 msgid "Sell Price: %d %s each"
489 msgstr "Preu de venda: %d %s cadascun"
490
491 #: ../../../src/ItemManager.cpp:927
492 msgid "Set:"
493 msgstr "Conjunt:"
494
495 #: ../../../src/ItemManager.cpp:934
496 #, c-format
497 msgid "%d items:"
498 msgstr "%d objectes:"
499
500 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
501 #, c-format
502 msgid "Press [%s] to use"
503 msgstr "Prem [%s] per utilitzar"
504
505 #: ../../../src/ItemManager.cpp:951
506 #, c-format
507 msgid "Press [%s] to read"
508 msgstr "Prem [%s] per llegir"
509
510 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
511 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
512 #, c-format
513 msgid "Hotkey: %s"
514 msgstr "Drecera: %s"
515
516 #: ../../../src/MenuActionBar.cpp:599
517 msgid "Not enough MP."
518 msgstr "PM insuficients."
519
520 #: ../../../src/MenuActiveEffects.cpp:124
521 #, c-format
522 msgid "x%d"
523 msgstr "x%d"
524
525 #: ../../../src/MenuActiveEffects.cpp:219
526 msgid "Remaining:"
527 msgstr "Restants:"
528
529 #: ../../../src/MenuActiveEffects.cpp:225
530 #, c-format
531 msgid "x%d stacks"
532 msgstr "x%d piles"
533
534 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
535 msgid "Name"
536 msgstr "Nom"
537
538 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
539 msgid "Level"
540 msgstr "Nivell"
541
542 #: ../../../src/MenuCharacter.cpp:310
543 #, c-format
544 msgid "%d unspent stat point"
545 msgstr "%d punt d'estat no gastat"
546
547 #: ../../../src/MenuCharacter.cpp:313
548 #, c-format
549 msgid "%d unspent stat points"
550 msgstr "%d punts d'estat no gastats"
551
552 #: ../../../src/MenuCharacter.cpp:355
553 #, c-format
554 msgid "Reduces the damage taken from \"%s\" elemental attacks."
555 msgstr "Redueix el dany rebut de \"%s\" als atacs elementals."
556
557 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
558 #, c-format
559 msgid "XP: %d"
560 msgstr "Experiència: %d"
561
562 #: ../../../src/MenuCharacter.cpp:367
563 #, c-format
564 msgid "Next: %d"
565 msgstr "Següent: %d"
566
567 #: ../../../src/MenuCharacter.cpp:373
568 #, c-format
569 msgid "base (%d), bonus (%d)"
570 msgstr "base (%d), bonificació (%d)"
571
572 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
573 msgid "Related stats:"
574 msgstr "Atributs relacionats:"
575
576 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
577 #, c-format
578 msgid "Each level grants %d."
579 msgstr "Cada nivell concedeix %d."
580
581 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
582 #, c-format
583 msgid "Each point of %s grants %d."
584 msgstr "Cada punt de %s concedeix %d."
585
586 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
587 msgid "Clear"
588 msgstr "Netejar"
589
590 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
591 msgid "Assign:"
592 msgstr "Assignar:"
593
594 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
142595 msgid "Defaults"
143596 msgstr "Per defecte"
144597
145 #: ../../../src/GameStateConfigBase.cpp:89
598 #: ../../../src/MenuConfig.cpp:123
146599 msgid "Reset ALL settings?"
147600 msgstr "Restablir TOTS els ajustaments?"
148601
149 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
602 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
150603 msgid "OK"
151604 msgstr "Acceptar"
152605
153 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
154 #: ../../../src/InputState.cpp:401
155 msgid "Cancel"
156 msgstr "Cancel·lar"
157
158 #: ../../../src/GameStateConfigBase.cpp:160
159 #: ../../../src/GameStateConfigDesktop.cpp:130
606 #: ../../../src/MenuConfig.cpp:246
607 msgid "Continue"
608 msgstr "Continuar"
609
610 #: ../../../src/MenuConfig.cpp:248
611 msgid "Save Game"
612 msgstr "Guardar la partida"
613
614 #: ../../../src/MenuConfig.cpp:291
615 msgid "Default"
616 msgstr "Per defecte"
617
618 #: ../../../src/MenuConfig.cpp:291
619 msgid ""
620 "Show all loot tooltips, except for those that would be obscured by the "
621 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
622 msgstr ""
623 "Mostra tots els consells d'eines de saqueig, excepte aquells que serien "
624 "ocultats pel jugador o l'enemic. Mostra temporalment tots les consells "
625 "d'eines de saqueig prement la tecla 'Alt'."
626
627 #: ../../../src/MenuConfig.cpp:292
628 msgid "Show all"
629 msgstr "Mostrar tot"
630
631 #: ../../../src/MenuConfig.cpp:292
632 msgid ""
633 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
634 msgstr ""
635 "Sempre mostra consells d'eines de saqueig. Amaga temporalment tots els "
636 "consells d'eines de saqueig prement la tecla 'Alt'."
637
638 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
639 msgid "Hidden"
640 msgstr "Ocult"
641
642 #: ../../../src/MenuConfig.cpp:293
643 msgid ""
644 "Always hide loot tooltips, except for when a piece of loot is hovered with "
645 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
646 msgstr ""
647 "Amaga sempre els consells d'eines de saqueig excepte quan passis el cursor "
648 "per sobre d'una peça de saqueig. Mostra temporalment tots els consells "
649 "d'eines de saquieg prement la tecla 'Alt'."
650
651 #: ../../../src/MenuConfig.cpp:296
652 msgid "Visible"
653 msgstr "Visible"
654
655 #: ../../../src/MenuConfig.cpp:297
656 msgid "Visible (2x zoom)"
657 msgstr "Visible (2x d'augment)"
658
659 #: ../../../src/MenuConfig.cpp:301
660 msgid ""
661 "Controls the type of warning to be activated when the player is below the "
662 "low health threshold."
663 msgstr ""
664 "Controla el tipus d'avís que s'ha d'activar quan la salut del jugador està "
665 "per sota del llindar."
666
667 #: ../../../src/MenuConfig.cpp:302
668 msgid "- Display a message"
669 msgstr "- Mostra un missatge"
670
671 #: ../../../src/MenuConfig.cpp:303
672 msgid "- Play a sound"
673 msgstr "- Fes sonar un soroll"
674
675 #: ../../../src/MenuConfig.cpp:304
676 msgid "- Change the cursor"
677 msgstr "- Canvia el cursor"
678
679 #: ../../../src/MenuConfig.cpp:306
680 msgid "Disabled"
681 msgstr "Desactivat"
682
683 #: ../../../src/MenuConfig.cpp:307
684 msgid "All"
685 msgstr "Tots"
686
687 #: ../../../src/MenuConfig.cpp:308
688 msgid "Message & Cursor"
689 msgstr "Missatge i Cursor"
690
691 #: ../../../src/MenuConfig.cpp:309
692 msgid "Message & Sound"
693 msgstr "Missatge i So"
694
695 #: ../../../src/MenuConfig.cpp:310
696 msgid "Sound & Cursor"
697 msgstr "So i Cursor"
698
699 #: ../../../src/MenuConfig.cpp:311
700 msgid "Message"
701 msgstr "Missatge"
702
703 #: ../../../src/MenuConfig.cpp:312
704 msgid "Cursor"
705 msgstr "Cursor"
706
707 #: ../../../src/MenuConfig.cpp:313
708 msgid "Sound"
709 msgstr "So"
710
711 #: ../../../src/MenuConfig.cpp:319
712 msgid ""
713 "When the player's health drops below the given threshold, the low health "
714 "notifications are triggered if one or more of them is enabled."
715 msgstr ""
716 "Quan la salut del jugador cau sota el llindar, es disparen les notificacions"
717 " si una o més d'elles estan activades."
718
719 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
720 msgid "Exit"
721 msgstr "Sortir"
722
723 #: ../../../src/MenuConfig.cpp:333
724 msgid "Video"
725 msgstr "Video"
726
727 #: ../../../src/MenuConfig.cpp:334
160728 msgid "Audio"
161729 msgstr "Audio"
162730
163 #: ../../../src/GameStateConfigBase.cpp:161
164 #: ../../../src/GameStateConfigDesktop.cpp:131
731 #: ../../../src/MenuConfig.cpp:335
165732 msgid "Interface"
166733 msgstr "Interfície"
167734
168 #: ../../../src/GameStateConfigBase.cpp:162
169 #: ../../../src/GameStateConfigDesktop.cpp:134
735 #: ../../../src/MenuConfig.cpp:336
736 msgid "Input"
737 msgstr "Entrada"
738
739 #: ../../../src/MenuConfig.cpp:337
740 msgid "Keybindings"
741 msgstr "Enllaços de teclat"
742
743 #: ../../../src/MenuConfig.cpp:338
170744 msgid "Mods"
171745 msgstr "Mods"
172746
173 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
747 #: ../../../src/MenuConfig.cpp:350
748 msgid "Paused"
749 msgstr "Pausat"
750
751 #: ../../../src/MenuConfig.cpp:353
752 msgid "Time Played"
753 msgstr "Temps de joc"
754
755 #: ../../../src/MenuConfig.cpp:359
756 msgid "Renderer"
757 msgstr "Renderitzador"
758
759 #: ../../../src/MenuConfig.cpp:360
760 msgid "Full Screen Mode"
761 msgstr "Mode Pantalla Complerta"
762
763 #: ../../../src/MenuConfig.cpp:361
764 msgid "Hardware surfaces"
765 msgstr "Superfícies de maquinari"
766
767 #: ../../../src/MenuConfig.cpp:362
768 msgid "V-Sync"
769 msgstr "V-Sync"
770
771 #: ../../../src/MenuConfig.cpp:363
772 msgid "Texture Filtering"
773 msgstr "Filtre de Textura"
774
775 #: ../../../src/MenuConfig.cpp:364
776 msgid "DPI scaling"
777 msgstr "Escalat per PPP"
778
779 #: ../../../src/MenuConfig.cpp:365
780 msgid "Parallax Layers"
781 msgstr "Capes Parallax"
782
783 #: ../../../src/MenuConfig.cpp:366
784 msgid "Allow changing gamma"
785 msgstr "Permetre canviar gamma"
786
787 #: ../../../src/MenuConfig.cpp:367
788 msgid "Gamma"
789 msgstr "Gamma"
790
791 #: ../../../src/MenuConfig.cpp:369
792 msgid "Sound Volume"
793 msgstr "Volum del so"
794
795 #: ../../../src/MenuConfig.cpp:370
174796 msgid "Music Volume"
175797 msgstr "Volum de la música"
176798
177 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
178 msgid "Sound Volume"
179 msgstr "Volum del so"
180
181 #: ../../../src/GameStateConfigBase.cpp:257
799 #: ../../../src/MenuConfig.cpp:372
182800 msgid "Language"
183801 msgstr "Idioma"
184802
185 #: ../../../src/GameStateConfigBase.cpp:266
803 #: ../../../src/MenuConfig.cpp:373
186804 msgid "Show FPS"
187805 msgstr "Mostrar FPS"
188806
189 #: ../../../src/GameStateConfigBase.cpp:270
807 #: ../../../src/MenuConfig.cpp:374
808 msgid "Hardware mouse cursor"
809 msgstr "Cursos del ratolí per maquinari"
810
811 #: ../../../src/MenuConfig.cpp:375
190812 msgid "Colorblind Mode"
191813 msgstr "Mode per daltònics"
192814
193 #: ../../../src/GameStateConfigBase.cpp:274
194 msgid "Hardware mouse cursor"
195 msgstr "Cursos del ratolí per maquinari"
196
197 #: ../../../src/GameStateConfigBase.cpp:278
815 #: ../../../src/MenuConfig.cpp:376
198816 msgid "Developer Mode"
199817 msgstr "Mode de desenvolupadors"
200818
201 #: ../../../src/GameStateConfigBase.cpp:282
819 #: ../../../src/MenuConfig.cpp:377
202820 msgid "Subtitles"
203821 msgstr "Subtítols"
204822
205 #: ../../../src/GameStateConfigBase.cpp:286
206 msgid "Active Mods"
207 msgstr "Mods Actius"
208
209 #: ../../../src/GameStateConfigBase.cpp:295
210 msgid "Available Mods"
211 msgstr "Mods disponibles"
212
213 #: ../../../src/GameStateConfigBase.cpp:314
214 msgid "<< Disable"
215 msgstr "<< Inhabilitar"
216
217 #: ../../../src/GameStateConfigBase.cpp:320
218 msgid "Enable >>"
219 msgstr "Habilitar >>"
220
221 #: ../../../src/GameStateConfigBase.cpp:873
222 msgid "Version:"
223 msgstr "Versió:"
224
225 #: ../../../src/GameStateConfigBase.cpp:878
226 msgid "Game:"
227 msgstr "Joc:"
228
229 #: ../../../src/GameStateConfigBase.cpp:883
230 msgid "Engine version:"
231 msgstr "Versió del motor de joc:"
232
233 #: ../../../src/GameStateConfigBase.cpp:891
234 msgid "Requires mods:"
235 msgstr "Mods demanats:"
236
237 #: ../../../src/GameStateConfigDesktop.cpp:83
238 #: ../../../src/GameStateConfigDesktop.cpp:751
239 msgid "Clear"
240 msgstr "Netejar"
241
242 #: ../../../src/GameStateConfigDesktop.cpp:83
243 #: ../../../src/GameStateConfigDesktop.cpp:749
244 msgid "Assign:"
245 msgstr "Assignar:"
246
247 #: ../../../src/GameStateConfigDesktop.cpp:128
248 msgid "Video"
249 msgstr "Video"
250
251 #: ../../../src/GameStateConfigDesktop.cpp:132
252 msgid "Input"
253 msgstr "Entrada"
254
255 #: ../../../src/GameStateConfigDesktop.cpp:133
256 msgid "Keybindings"
257 msgstr "Enllaços de teclat"
258
259 #: ../../../src/GameStateConfigDesktop.cpp:188
823 #: ../../../src/MenuConfig.cpp:378
824 msgid "Loot tooltip visibility"
825 msgstr "Visibilitat de consells d'eines de saqueig"
826
827 #: ../../../src/MenuConfig.cpp:379
828 msgid "Mini-map mode"
829 msgstr "Mode mini-mapa"
830
831 #: ../../../src/MenuConfig.cpp:380
832 msgid "Always show stat bar labels"
833 msgstr "Mostrar sempre les etiquetes de la barra d'atributs"
834
835 #: ../../../src/MenuConfig.cpp:381
836 msgid "Allow stat bar auto-hiding"
837 msgstr "Permet auto-amagar la barra d'estats"
838
839 #: ../../../src/MenuConfig.cpp:382
840 msgid "Show combat text"
841 msgstr "Mostrar text de combat"
842
843 #: ../../../src/MenuConfig.cpp:383
844 msgid "Automatically equip items"
845 msgstr "Equipar objectes automàticament"
846
847 #: ../../../src/MenuConfig.cpp:384
848 msgid "Show hidden entity markers"
849 msgstr "Mostra els marcadors d'entitat ocults"
850
851 #: ../../../src/MenuConfig.cpp:385
852 msgid "Low health notification"
853 msgstr "Notificació de salut baixa"
854
855 #: ../../../src/MenuConfig.cpp:386
856 msgid "Low health threshold"
857 msgstr "Llindar de salut baixa"
858
859 #: ../../../src/MenuConfig.cpp:389
860 msgid "Joystick"
861 msgstr "Joystick"
862
863 #: ../../../src/MenuConfig.cpp:390
864 msgid "Move hero using mouse"
865 msgstr "Mou l'heroi utilitzant el ratolí"
866
867 #: ../../../src/MenuConfig.cpp:391
868 msgid "Mouse aim"
869 msgstr "Objectiu amb ratolí"
870
871 #: ../../../src/MenuConfig.cpp:392
872 msgid "Do not use mouse"
873 msgstr "No utilitzar ratolí"
874
875 #: ../../../src/MenuConfig.cpp:393
876 msgid "Swap mouse movement button"
877 msgstr "Moviment de ratolí per botó de canvi "
878
879 #: ../../../src/MenuConfig.cpp:394
880 msgid "Attack with mouse movement"
881 msgstr "Atacar amb moviment de ratolí"
882
883 #: ../../../src/MenuConfig.cpp:395
884 msgid "Joystick Deadzone"
885 msgstr "Zona morta del joystick"
886
887 #: ../../../src/MenuConfig.cpp:405
888 #, c-format
889 msgid "Primary binding: %s"
890 msgstr "Vincle primari: %s"
891
892 #: ../../../src/MenuConfig.cpp:406
893 #, c-format
894 msgid "Alternate binding: %s"
895 msgstr "Vincle alternatiu: %s"
896
897 #: ../../../src/MenuConfig.cpp:407
898 #, c-format
899 msgid "Joystick binding: %s"
900 msgstr "Vincle del Joystick: %s"
901
902 #: ../../../src/MenuConfig.cpp:508
260903 msgid ""
261904 "Will try to store surfaces in video memory versus system memory. The effect "
262905 "this has on performance depends on the renderer."
265908 "la memòria del sistema. L'efecte que això tindrà sobre el rendiment, variarà"
266909 " segons el renderitzador. "
267910
268 #: ../../../src/GameStateConfigDesktop.cpp:189
911 #: ../../../src/MenuConfig.cpp:509
269912 msgid ""
270913 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
271914 "windowed mode or input lag."
273916 "Evita l'esquinçament de la pantalla. Desactiveu si experimenteu "
274917 "\"tartamudesa\" en mode finestra o retràs en les entrades. "
275918
276 #: ../../../src/GameStateConfigDesktop.cpp:190
919 #: ../../../src/MenuConfig.cpp:510
277920 msgid ""
278921 "When enabled, this uses the screen DPI in addition to the window dimensions "
279922 "to scale the rendering resolution. Otherwise, only the window dimensions are"
283926 "de la finestra per escalar la resolució. Contràriament, només s'usaran les "
284927 "mides de la pantalla."
285928
286 #: ../../../src/GameStateConfigDesktop.cpp:191
929 #: ../../../src/MenuConfig.cpp:511
287930 msgid ""
288931 "This enables parallax (non-tile) layers. Disabling this setting can improve "
289932 "performance in some cases."
290933 msgstr ""
291
292 #: ../../../src/GameStateConfigDesktop.cpp:192
293 msgid "Experimental"
294 msgstr "Experimental"
295
296 #: ../../../src/GameStateConfigDesktop.cpp:193
297 msgid "For handheld devices"
298 msgstr "Per a dispositius mòbils"
299
300 #: ../../../src/GameStateConfigDesktop.cpp:211
301 msgid "Renderer"
302 msgstr "Renderitzador"
303
304 #: ../../../src/GameStateConfigDesktop.cpp:227
305 msgid "Full Screen Mode"
306 msgstr "Mode Pantalla Complerta"
307
308 #: ../../../src/GameStateConfigDesktop.cpp:231
309 msgid "Move hero using mouse"
310 msgstr "Mou l'heroi utilitzant el ratolí"
311
312 #: ../../../src/GameStateConfigDesktop.cpp:235
313 msgid "Hardware surfaces"
314 msgstr "Superfícies de maquinari"
315
316 #: ../../../src/GameStateConfigDesktop.cpp:239
317 msgid "V-Sync"
318 msgstr "V-Sync"
319
320 #: ../../../src/GameStateConfigDesktop.cpp:243
321 msgid "Texture Filtering"
322 msgstr "Filtre de Textura"
323
324 #: ../../../src/GameStateConfigDesktop.cpp:247
325 msgid "DPI scaling"
326 msgstr "Escalat per PPP"
327
328 #: ../../../src/GameStateConfigDesktop.cpp:251
329 msgid "Parallax Layers"
330 msgstr ""
331
332 #: ../../../src/GameStateConfigDesktop.cpp:255
333 msgid "Allow changing gamma"
334 msgstr "Permetre canviar gamma"
335
336 #: ../../../src/GameStateConfigDesktop.cpp:259
337 msgid "Gamma"
338 msgstr "Gamma"
339
340 #: ../../../src/GameStateConfigDesktop.cpp:263
341 msgid "Use joystick"
342 msgstr "Utilitzar joystick "
343
344 #: ../../../src/GameStateConfigDesktop.cpp:267
345 msgid "Joystick"
346 msgstr "Joystick"
347
348 #: ../../../src/GameStateConfigDesktop.cpp:283
349 msgid "Mouse aim"
350 msgstr "Objectiu amb ratolí"
351
352 #: ../../../src/GameStateConfigDesktop.cpp:287
353 msgid "Do not use mouse"
354 msgstr "No utilitzar ratolí"
355
356 #: ../../../src/GameStateConfigDesktop.cpp:291
357 msgid "Joystick Deadzone"
358 msgstr "Zona morta del joystick"
359
360 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
361 msgid "Loading..."
362 msgstr "Carregant..."
363
364 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
365 msgid "Delete Save"
366 msgstr "Esborrar i Desar"
367
368 #: ../../../src/GameStateLoad.cpp:88
369 msgid "Delete this save?"
370 msgstr "Eliminar aquesta partida desada?"
371
372 #: ../../../src/GameStateLoad.cpp:90
373 msgid "Exit to Title"
374 msgstr "Sortir als títols"
375
376 #: ../../../src/GameStateLoad.cpp:93
377 msgid "New Game"
378 msgstr "Joc Nou"
379
380 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
381 msgid "Choose a Slot"
382 msgstr "Elegiu un espai"
383
384 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
385 msgid "Enable a story mod to continue"
386 msgstr "Habilitar un mod d'història per continuar"
387
388 #: ../../../src/GameStateLoad.cpp:589
389 msgid "Load Game"
390 msgstr "Carregar Joc"
391
392 #: ../../../src/GameStateLoad.cpp:695
393 msgid "Entering game world..."
394 msgstr "Entrant al mon del joc..."
395
396 #: ../../../src/GameStateLoad.cpp:698
397 msgid "Loading saved game..."
398 msgstr "Carregant partida desada..."
399
400 #: ../../../src/GameStateLoad.cpp:731
401 msgid "Invalid save"
402 msgstr "Desat erroni"
403
404 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
405 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
406 #: ../../../src/MenuPowers.cpp:1542
407 #, c-format
408 msgid "Level %d"
409 msgstr "Nivell %d"
410
411 #: ../../../src/GameStateNew.cpp:68
412 msgid "Create"
413 msgstr "Crear"
414
415 #: ../../../src/GameStateNew.cpp:76
416 msgid "Randomize"
417 msgstr "Aleatoritzar"
418
419 #: ../../../src/GameStateNew.cpp:92
420 msgid "Choose a Portrait"
421 msgstr "Elegeix un retrat"
422
423 #: ../../../src/GameStateNew.cpp:96
424 msgid "Choose a Name"
425 msgstr "Tria un nom"
426
427 #: ../../../src/GameStateNew.cpp:100
428 msgid "Permadeath?"
429 msgstr "Mort permanent?"
430
431 #: ../../../src/GameStateNew.cpp:104
432 msgid "Choose a Class"
433 msgstr "Trieu una classe"
434
435 #: ../../../src/GameStateTitle.cpp:108
436 msgid "Play Game"
437 msgstr "Jugar"
438
439 #: ../../../src/GameStateTitle.cpp:111
440 msgid "Enable a core mod to continue"
441 msgstr "Activar un mod del nucli per a continuar"
442
443 #: ../../../src/GameStateTitle.cpp:115
444 msgid "Configuration"
445 msgstr "Configuració"
446
447 #: ../../../src/GameStateTitle.cpp:118
448 msgid "Credits"
449 msgstr "Crèdits"
450
451 #: ../../../src/GameStateTitle.cpp:121
452 msgid "Exit Game"
453 msgstr "Sortir del Joc"
454
455 #: ../../../src/InputState.cpp:402
456 msgid "Accept"
457 msgstr "Acceptar"
458
459 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
460 msgid "Up"
461 msgstr "Amunt"
462
463 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
464 msgid "Down"
465 msgstr "Avall"
466
467 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
468 msgid "Left"
469 msgstr "Esquerra"
470
471 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
472 msgid "Right"
473 msgstr "Dreta"
474
475 #: ../../../src/InputState.cpp:407
476 msgid "Bar1"
477 msgstr "Bar1"
478
479 #: ../../../src/InputState.cpp:408
480 msgid "Bar2"
481 msgstr "Bar2"
482
483 #: ../../../src/InputState.cpp:409
484 msgid "Bar3"
485 msgstr "Bar3"
486
487 #: ../../../src/InputState.cpp:410
488 msgid "Bar4"
489 msgstr "Bar4"
490
491 #: ../../../src/InputState.cpp:411
492 msgid "Bar5"
493 msgstr "Bar5"
494
495 #: ../../../src/InputState.cpp:412
496 msgid "Bar6"
497 msgstr "Bar6"
498
499 #: ../../../src/InputState.cpp:413
500 msgid "Bar7"
501 msgstr "Bar7"
502
503 #: ../../../src/InputState.cpp:414
504 msgid "Bar8"
505 msgstr "Bar8"
506
507 #: ../../../src/InputState.cpp:415
508 msgid "Bar9"
509 msgstr "Bar9"
510
511 #: ../../../src/InputState.cpp:416
512 msgid "Bar0"
513 msgstr "Bar0"
514
515 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
516 #: ../../../src/MenuCharacter.cpp:54
517 msgid "Character"
518 msgstr "Personatge"
519
520 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
521 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
522 msgid "Inventory"
523 msgstr "Inventari"
524
525 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
526 #: ../../../src/MenuPowers.cpp:168
527 msgid "Powers"
528 msgstr "Poders"
529
530 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
531 #: ../../../src/MenuLog.cpp:72
532 msgid "Log"
533 msgstr "Registre"
534
535 #: ../../../src/InputState.cpp:421
536 msgid "Main1"
537 msgstr "Principal1"
538
539 #: ../../../src/InputState.cpp:422
540 msgid "Main2"
541 msgstr "Principal2"
542
543 #: ../../../src/InputState.cpp:423
544 msgid "Ctrl"
545 msgstr "Ctrl"
546
547 #: ../../../src/InputState.cpp:424
548 msgid "Shift"
549 msgstr "Shift"
550
551 #: ../../../src/InputState.cpp:425
552 msgid "Alt"
553 msgstr "Alt"
554
555 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
556 msgid "Delete"
557 msgstr "Esborrar"
558
559 #: ../../../src/InputState.cpp:427
560 msgid "ActionBar Accept"
561 msgstr "Acceptació de la barra d'acció"
562
563 #: ../../../src/InputState.cpp:428
564 msgid "ActionBar Left"
565 msgstr "Barra d'acció esquerra"
566
567 #: ../../../src/InputState.cpp:429
568 msgid "ActionBar Right"
569 msgstr "Barra d'acció dreta"
570
571 #: ../../../src/InputState.cpp:430
572 msgid "ActionBar Use"
573 msgstr "Utilitzar la barra d'acció"
574
575 #: ../../../src/InputState.cpp:431
576 msgid "Developer Menu"
577 msgstr "Menú de desenvolupadors"
578
579 #: ../../../src/InputState.cpp:433
580 msgid "Left Mouse"
581 msgstr "Botó esquerre del ratolí"
582
583 #: ../../../src/InputState.cpp:434
584 msgid "Middle Mouse"
585 msgstr "Botó central del ratolí"
586
587 #: ../../../src/InputState.cpp:435
588 msgid "Right Mouse"
589 msgstr "Botó dret del ratolí"
590
591 #: ../../../src/InputState.cpp:436
592 msgid "Wheel Up"
593 msgstr "Roda amunt"
594
595 #: ../../../src/InputState.cpp:437
596 msgid "Wheel Down"
597 msgstr "Roda avall"
598
599 #: ../../../src/InputState.cpp:438
600 msgid "Mouse X1"
601 msgstr "Ratolí X1"
602
603 #: ../../../src/InputState.cpp:439
604 msgid "Mouse X2"
605 msgstr "Ratolí X2"
606
607 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
608 msgid "Unknown Item"
609 msgstr "Objecte desconegut"
610
611 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
612 #, c-format
613 msgid "%d%% Speed"
614 msgstr "%d%% Velocitat"
615
616 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
617 #, c-format
618 msgid "%d%% Attack Speed"
619 msgstr "%d%% Velocitat d'atac"
620
621 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
622 #: ../../../src/MenuPowers.cpp:833
623 #, c-format
624 msgid "Resistance (%s)"
625 msgstr "Resistència (%s)"
626
627 #: ../../../src/ItemManager.cpp:684
628 #, c-format
629 msgid "Requires %s"
630 msgstr "Demana %s"
631
632 #: ../../../src/ItemManager.cpp:733
633 msgid "Quest Item"
634 msgstr "Objecte de missió"
635
636 #: ../../../src/ItemManager.cpp:760
637 #, c-format
638 msgid "Quality: %s"
639 msgstr "Qualitat: %s"
640
641 #: ../../../src/ItemManager.cpp:785
642 #, c-format
643 msgid "Absorb: %d-%d"
644 msgstr "Amortidor: %d-%d"
645
646 #: ../../../src/ItemManager.cpp:787
647 #, c-format
648 msgid "Absorb: %d"
649 msgstr "Absorbir: %d"
650
651 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
652 #: ../../../src/MenuPowers.cpp:1134
653 #, c-format
654 msgid "Requires Level %d"
655 msgstr "Demana nivell %d"
656
657 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
658 #: ../../../src/MenuPowers.cpp:1125
659 #, c-format
660 msgid "Requires %s %d"
661 msgstr "Demana %s %d"
662
663 #: ../../../src/ItemManager.cpp:849
664 #, c-format
665 msgid "Requires Class: %s"
666 msgstr "Demana classe: %s"
667
668 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
669 #, c-format
670 msgid "Buy Price: %d %s"
671 msgstr "Preu de compra: %d %s"
672
673 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
674 #, c-format
675 msgid "Buy Price: %d %s each"
676 msgstr "Preu de compra: %d %s cadascun"
677
678 #: ../../../src/ItemManager.cpp:886
679 #, c-format
680 msgid "Sell Price: %d %s"
681 msgstr "Preu de venda: %d %s"
682
683 #: ../../../src/ItemManager.cpp:888
684 #, c-format
685 msgid "Sell Price: %d %s each"
686 msgstr "Preu de venda: %d %s cadascun"
687
688 #: ../../../src/ItemManager.cpp:897
689 msgid "Set:"
690 msgstr "Conjunt:"
691
692 #: ../../../src/ItemManager.cpp:904
693 #, c-format
694 msgid "%d items:"
695 msgstr "%d objectes:"
696
697 #: ../../../src/ItemManager.cpp:917
698 #, c-format
699 msgid "Press [%s] to use"
700 msgstr "Premi [%s] per utilitzar"
701
702 #: ../../../src/ItemManager.cpp:920
703 #, c-format
704 msgid "Press [%s] to read"
705 msgstr "Premi [%s] per llegir"
706
707 #: ../../../src/MenuActionBar.cpp:87
708 msgid "Loot tooltip visibility"
709 msgstr ""
710
711 #: ../../../src/MenuActionBar.cpp:88
712 msgid "Mini-map mode"
713 msgstr ""
714
715 #: ../../../src/MenuActionBar.cpp:89
716 msgid "Always show stat bar labels"
717 msgstr "Mostrar sempre les etiquetes de la barra d'atributs"
718
719 #: ../../../src/MenuActionBar.cpp:90
720 msgid "Show combat text"
721 msgstr "Mostrar text de combat"
722
723 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
724 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
725 #, c-format
726 msgid "Hotkey: %s"
727 msgstr "Drecera: %s"
728
729 #: ../../../src/MenuActionBar.cpp:474
730 #, c-format
731 msgid "Default. Temporarily show all loot tooltips with '%s'."
732 msgstr ""
733
734 #: ../../../src/MenuActionBar.cpp:476
735 #, c-format
736 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
737 msgstr ""
738
739 #: ../../../src/MenuActionBar.cpp:478
740 #, c-format
741 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
742 msgstr ""
743
744 #: ../../../src/MenuActionBar.cpp:482
745 msgid "Visible"
746 msgstr ""
747
748 #: ../../../src/MenuActionBar.cpp:484
749 msgid "Visible (2x zoom)"
750 msgstr ""
751
752 #: ../../../src/MenuActionBar.cpp:486
753 msgid "Hidden"
754 msgstr ""
755
756 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
757 msgid "Enabled"
758 msgstr ""
759
760 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
761 msgid "Disabled"
762 msgstr ""
763
764 #: ../../../src/MenuActionBar.cpp:657
765 msgid "Not enough MP."
766 msgstr "PM insuficients."
767
768 #: ../../../src/MenuActiveEffects.cpp:124
769 #, c-format
770 msgid "x%d"
771 msgstr "x%d"
772
773 #: ../../../src/MenuActiveEffects.cpp:219
774 msgid "Remaining:"
775 msgstr "Restants:"
776
777 #: ../../../src/MenuActiveEffects.cpp:225
778 #, c-format
779 msgid "x%d stacks"
780 msgstr "x%d piles"
781
782 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
783 msgid "Name"
784 msgstr "Nom"
785
786 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
787 msgid "Level"
788 msgstr "Nivell"
789
790 #: ../../../src/MenuCharacter.cpp:310
791 #, c-format
792 msgid "%d unspent stat point"
793 msgstr "%d punt d'estat no gastat"
794
795 #: ../../../src/MenuCharacter.cpp:313
796 #, c-format
797 msgid "%d unspent stat points"
798 msgstr "%d punts d'estat no gastats"
799
800 #: ../../../src/MenuCharacter.cpp:355
801 #, c-format
802 msgid "Reduces the damage taken from \"%s\" elemental attacks."
803 msgstr "Redueix el dany rebut de \"%s\" als atacs elementals."
804
805 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
806 #, c-format
807 msgid "XP: %d"
808 msgstr "Experiència: %d"
809
810 #: ../../../src/MenuCharacter.cpp:367
811 #, c-format
812 msgid "Next: %d"
813 msgstr "Següent: %d"
814
815 #: ../../../src/MenuCharacter.cpp:373
816 #, c-format
817 msgid "base (%d), bonus (%d)"
818 msgstr "base (%d), bonificació (%d)"
819
820 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
821 msgid "Related stats:"
822 msgstr "Atributs relacionats:"
823
824 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
825 #, c-format
826 msgid "Each level grants %d."
827 msgstr "Cada nivell concedeix %d."
828
829 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
830 #, c-format
831 msgid "Each point of %s grants %d."
832 msgstr "Cada punt de %s concedeix %d."
934 "Això activa les capes parallax (sense rajoles). Desactivar aquesta opció pot"
935 " millorar el rendiment en alguns casos."
936
937 #: ../../../src/MenuConfig.cpp:512
938 msgid ""
939 "Enables the below setting that controls the screen gamma level. The behavior"
940 " of the gamma setting can vary between platforms."
941 msgstr ""
942 "Activa l'opció de sota que controla el nivel gamma de la pantalla. El "
943 "comportament de l'opció gamma pot variar entre plataformes."
944
945 #: ../../../src/MenuConfig.cpp:513
946 msgid ""
947 "Provides additional text for information that is primarily conveyed through "
948 "color."
949 msgstr ""
950 "T'ofereix text addicional per informació que es transmet principalment a "
951 "través de color."
952
953 #: ../../../src/MenuConfig.cpp:514
954 msgid ""
955 "Some mods will automatically hide the stat bars when they are inactive. "
956 "Disabling this option will keep them displayed at all times."
957 msgstr ""
958 "Alguns mods amagaran automàticament les barres d'estat quan estiguin "
959 "inactives. Deshabilitar aquesta opció lesmantindrà visibles en tot moment."
960
961 #: ../../../src/MenuConfig.cpp:515
962 msgid ""
963 "When enabled, empty equipment slots will be filled with applicable items "
964 "when they are obtained."
965 msgstr ""
966
967 #: ../../../src/MenuConfig.cpp:516
968 msgid ""
969 "Shows a marker above enemies, allies, and the player when they are obscured "
970 "by tall objects."
971 msgstr ""
972
973 #: ../../../src/MenuConfig.cpp:517
974 msgid ""
975 "This allows the game to be controlled entirely with the keyboard (or "
976 "joystick)."
977 msgstr ""
978
979 #: ../../../src/MenuConfig.cpp:518
980 msgid ""
981 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
982 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
983 "instead of 'Main1'."
984 msgstr ""
985
986 #: ../../../src/MenuConfig.cpp:519
987 msgid ""
988 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
989 "assigned to the movement button can be used by targeting an enemy. If this "
990 "setting is disabled, it is required to use 'Shift' to access the Power "
991 "assigned to the movement button."
992 msgstr ""
993
994 #: ../../../src/MenuConfig.cpp:520
995 msgid ""
996 "The player's attacks will be aimed in the direction of the mouse cursor when"
997 " this is enabled."
998 msgstr ""
999
1000 #: ../../../src/MenuConfig.cpp:571
1001 msgid "Active Mods"
1002 msgstr "Mods Actius"
1003
1004 #: ../../../src/MenuConfig.cpp:580
1005 msgid "Available Mods"
1006 msgstr "Mods disponibles"
1007
1008 #: ../../../src/MenuConfig.cpp:599
1009 msgid "<< Disable"
1010 msgstr "<< Inhabilitar"
1011
1012 #: ../../../src/MenuConfig.cpp:605
1013 msgid "Enable >>"
1014 msgstr "Habilitar >>"
1015
1016 #: ../../../src/MenuConfig.cpp:1436
1017 msgid "Version:"
1018 msgstr "Versió:"
1019
1020 #: ../../../src/MenuConfig.cpp:1441
1021 msgid "Game:"
1022 msgstr "Joc:"
1023
1024 #: ../../../src/MenuConfig.cpp:1446
1025 msgid "Engine version:"
1026 msgstr "Versió del motor de joc:"
1027
1028 #: ../../../src/MenuConfig.cpp:1454
1029 msgid "Requires mods:"
1030 msgstr "Mods demanats:"
1031
1032 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
1033 msgid "(none)"
1034 msgstr "(cap)"
1035
1036 #: ../../../src/MenuConfig.cpp:1579
1037 msgid "Save & Exit"
1038 msgstr "Desar i sortir"
8331039
8341040 #: ../../../src/MenuDevConsole.cpp:63
8351041 msgid "Execute"
9621168
9631169 #: ../../../src/MenuDevConsole.cpp:536
9641170 msgid "<id>"
965 msgstr ""
1171 msgstr "<id>"
9661172
9671173 #: ../../../src/MenuDevConsole.cpp:552
9681174 #, c-format
9751181
9761182 #: ../../../src/MenuDevConsole.cpp:564
9771183 msgid "<key>=<val> <key>=<val> ..."
978 msgstr ""
1184 msgstr "<key>=<val> <key>=<val> ..."
9791185
9801186 #: ../../../src/MenuDevConsole.cpp:569
9811187 msgid "ERROR: Unknown command"
9851191 msgid "HINT: Type help"
9861192 msgstr ""
9871193
988 #: ../../../src/MenuEnemy.cpp:138
1194 #: ../../../src/MenuEnemy.cpp:162
9891195 #, c-format
9901196 msgid "%s level %d"
9911197 msgstr "%s nivell %d"
9921198
993 #: ../../../src/MenuEnemy.cpp:162
1199 #: ../../../src/MenuEnemy.cpp:186
9941200 msgid "Dead"
9951201 msgstr "Mort"
9961202
997 #: ../../../src/MenuEnemy.cpp:164
1203 #: ../../../src/MenuEnemy.cpp:188
9981204 msgid "Destroyed"
9991205 msgstr "Destruït"
10001206
1001 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
1002 msgid "Paused"
1003 msgstr "Pausat"
1004
1005 #: ../../../src/MenuExit.cpp:91
1006 msgid "Save & Exit"
1007 msgstr "Desar i sortir"
1008
1009 #: ../../../src/MenuExit.cpp:92
1010 msgid "Exit"
1011 msgstr "Sortir"
1012
1013 #: ../../../src/MenuExit.cpp:96
1014 msgid "Continue"
1015 msgstr "Continuar"
1016
1017 #: ../../../src/MenuInventory.cpp:73
1018 msgid "Automatically equip items"
1019 msgstr "Equipar objectes automàticament"
1020
1021 #: ../../../src/MenuInventory.cpp:188
1207 #: ../../../src/MenuInventory.cpp:177
10221208 #, c-format
10231209 msgid "Lost %d%% of %s."
10241210 msgstr "Ha perdut %d%% de %s."
10251211
1026 #: ../../../src/MenuInventory.cpp:195
1212 #: ../../../src/MenuInventory.cpp:184
10271213 #, c-format
10281214 msgid "Lost %d%% of total XP."
10291215 msgstr "Ha perdut %d%% de PX."
10301216
1031 #: ../../../src/MenuInventory.cpp:200
1217 #: ../../../src/MenuInventory.cpp:189
10321218 #, c-format
10331219 msgid "Lost %d%% of current level XP."
10341220 msgstr "Ha perdut %d%% del nivell de PX actual."
10351221
1036 #: ../../../src/MenuInventory.cpp:226
1222 #: ../../../src/MenuInventory.cpp:215
10371223 #, c-format
10381224 msgid "Lost %s."
10391225 msgstr "Ha perdut %s."
10401226
1041 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1227 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10421228 #, c-format
10431229 msgid "%d %s"
10441230 msgstr "%d %s"
10451231
1046 #: ../../../src/MenuInventory.cpp:317
1232 #: ../../../src/MenuInventory.cpp:300
10471233 msgid "Pick up item(s):"
10481234 msgstr "Agafar objecte(s):"
10491235
1050 #: ../../../src/MenuInventory.cpp:318
1236 #: ../../../src/MenuInventory.cpp:301
10511237 msgid "Use or equip item:"
10521238 msgstr "Utilitzar o equipar-se amb l'objecte:"
10531239
1054 #: ../../../src/MenuInventory.cpp:319
1240 #: ../../../src/MenuInventory.cpp:302
10551241 #, c-format
10561242 msgid "%s modifiers"
10571243 msgstr "%s modificadors"
10581244
1059 #: ../../../src/MenuInventory.cpp:320
1245 #: ../../../src/MenuInventory.cpp:303
10601246 msgid "Select a quantity of item:"
10611247 msgstr "Selecciona la quantitat d'objectes:"
10621248
1063 #: ../../../src/MenuInventory.cpp:323
1249 #: ../../../src/MenuInventory.cpp:306
10641250 msgid "Stash item stack:"
10651251 msgstr ""
10661252
1067 #: ../../../src/MenuInventory.cpp:325
1253 #: ../../../src/MenuInventory.cpp:308
10681254 msgid "Sell item stack:"
10691255 msgstr "Vendre la pila d'objectes:"
10701256
1071 #: ../../../src/MenuInventory.cpp:592
1257 #: ../../../src/MenuInventory.cpp:574
10721258 msgid "You don't have enough of the required item."
10731259 msgstr "No en teniu prou del objecte requerit."
10741260
1075 #: ../../../src/MenuInventory.cpp:599
1261 #: ../../../src/MenuInventory.cpp:586
10761262 msgid "You can't use this item right now."
10771263 msgstr "No podeu utilitzar aquest objecte ara mateix."
10781264
1079 #: ../../../src/MenuInventory.cpp:611
1265 #: ../../../src/MenuInventory.cpp:598
10801266 msgid "This item can only be used from the action bar."
10811267 msgstr ""
10821268
1083 #: ../../../src/MenuInventory.cpp:729
1269 #: ../../../src/MenuInventory.cpp:716
10841270 msgid "Inventory is full."
1085 msgstr ""
1086
1087 #: ../../../src/MenuInventory.cpp:849
1271 msgstr "L'inventari està complert"
1272
1273 #: ../../../src/MenuInventory.cpp:841
10881274 #, c-format
10891275 msgid "Not enough %s."
10901276 msgstr ""
10911277
1092 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1278 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
10931279 msgid "This item can not be sold."
10941280 msgstr "Aquest objecte no es pot vendre."
10951281
11011287 msgid "Quests"
11021288 msgstr "Missions"
11031289
1104 #: ../../../src/MenuManager.cpp:286
1290 #: ../../../src/MenuManager.cpp:296
11051291 #, c-format
11061292 msgid "XP: %d/%d"
11071293 msgstr "PX: %d/%d"
11081294
1109 #: ../../../src/MenuManager.cpp:827
1295 #: ../../../src/MenuManager.cpp:854
11101296 msgid "This item can not be dropped."
11111297 msgstr "Aquest objecte no es pot deixar anar."
11121298
11141300 msgid "Enter amount:"
11151301 msgstr "Introdueix l'import:"
11161302
1117 #: ../../../src/MenuPowers.cpp:787
1303 #: ../../../src/MenuPowers.cpp:786
11181304 msgid "Passive"
11191305 msgstr "Passiu"
11201306
1121 #: ../../../src/MenuPowers.cpp:792
1307 #: ../../../src/MenuPowers.cpp:791
11221308 #, c-format
11231309 msgid "Costs %d MP"
11241310 msgstr "Costs %d PM"
11251311
1126 #: ../../../src/MenuPowers.cpp:796
1312 #: ../../../src/MenuPowers.cpp:795
11271313 #, c-format
11281314 msgid "Costs %d HP"
11291315 msgstr "Costs %d PV"
11301316
1131 #: ../../../src/MenuPowers.cpp:801
1317 #: ../../../src/MenuPowers.cpp:800
11321318 msgid "Cooldown:"
11331319 msgstr "Refredar:"
11341320
1135 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1321 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11361322 msgid "Damage per second"
11371323 msgstr "Dany per segon"
11381324
1139 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1325 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11401326 msgid "HP per second"
11411327 msgstr "PV per segon"
11421328
1143 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1329 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11441330 msgid "MP per second"
11451331 msgstr "PM per segon"
11461332
1147 #: ../../../src/MenuPowers.cpp:885
1333 #: ../../../src/MenuPowers.cpp:884
11481334 msgid "Immobilize"
11491335 msgstr "Immobilitzar"
11501336
1151 #: ../../../src/MenuPowers.cpp:893
1337 #: ../../../src/MenuPowers.cpp:892
11521338 msgid "Immunity"
11531339 msgstr "Immunitat"
11541340
1155 #: ../../../src/MenuPowers.cpp:896
1341 #: ../../../src/MenuPowers.cpp:895
11561342 msgid "Immunity to damage over time"
11571343 msgstr ""
11581344
1159 #: ../../../src/MenuPowers.cpp:899
1345 #: ../../../src/MenuPowers.cpp:898
11601346 msgid "Immunity to slow"
11611347 msgstr ""
11621348
1163 #: ../../../src/MenuPowers.cpp:902
1349 #: ../../../src/MenuPowers.cpp:901
11641350 msgid "Immunity to stun"
11651351 msgstr ""
11661352
1167 #: ../../../src/MenuPowers.cpp:905
1353 #: ../../../src/MenuPowers.cpp:904
11681354 msgid "Immunity to HP steal"
11691355 msgstr "Immunitat al robatori de PV"
11701356
1171 #: ../../../src/MenuPowers.cpp:908
1357 #: ../../../src/MenuPowers.cpp:907
11721358 msgid "Immunity to MP steal"
11731359 msgstr ""
11741360
1175 #: ../../../src/MenuPowers.cpp:911
1361 #: ../../../src/MenuPowers.cpp:910
11761362 msgid "Immunity to knockback"
11771363 msgstr ""
11781364
1179 #: ../../../src/MenuPowers.cpp:914
1365 #: ../../../src/MenuPowers.cpp:913
11801366 msgid "Immunity to damage reflection"
11811367 msgstr ""
11821368
1183 #: ../../../src/MenuPowers.cpp:917
1369 #: ../../../src/MenuPowers.cpp:916
11841370 msgid "Stun"
11851371 msgstr ""
11861372
1187 #: ../../../src/MenuPowers.cpp:920
1373 #: ../../../src/MenuPowers.cpp:919
11881374 msgid "Automatic revive on death"
11891375 msgstr ""
11901376
1191 #: ../../../src/MenuPowers.cpp:923
1377 #: ../../../src/MenuPowers.cpp:922
11921378 msgid "Convert"
1193 msgstr ""
1194
1195 #: ../../../src/MenuPowers.cpp:926
1379 msgstr "Convertir"
1380
1381 #: ../../../src/MenuPowers.cpp:925
11961382 msgid "Fear"
11971383 msgstr "Por"
11981384
1199 #: ../../../src/MenuPowers.cpp:929
1385 #: ../../../src/MenuPowers.cpp:928
12001386 msgid "Lifespan"
12011387 msgstr ""
12021388
1203 #: ../../../src/MenuPowers.cpp:953
1389 #: ../../../src/MenuPowers.cpp:952
12041390 msgid "Magical Shield"
12051391 msgstr ""
12061392
1207 #: ../../../src/MenuPowers.cpp:982
1393 #: ../../../src/MenuPowers.cpp:981
12081394 msgid "Healing"
12091395 msgstr ""
12101396
1211 #: ../../../src/MenuPowers.cpp:985
1397 #: ../../../src/MenuPowers.cpp:984
12121398 msgid "Knockback"
12131399 msgstr ""
12141400
1215 #: ../../../src/MenuPowers.cpp:1010
1401 #: ../../../src/MenuPowers.cpp:1009
12161402 #, c-format
12171403 msgid "%d%% chance"
12181404 msgstr ""
12191405
1220 #: ../../../src/MenuPowers.cpp:1062
1406 #: ../../../src/MenuPowers.cpp:1061
12211407 msgid "Base Accuracy"
12221408 msgstr ""
12231409
1224 #: ../../../src/MenuPowers.cpp:1082
1410 #: ../../../src/MenuPowers.cpp:1081
12251411 msgid "Base Critical Chance"
12261412 msgstr ""
12271413
1228 #: ../../../src/MenuPowers.cpp:1090
1414 #: ../../../src/MenuPowers.cpp:1089
12291415 msgid "Ignores Absorbtion"
12301416 msgstr ""
12311417
1232 #: ../../../src/MenuPowers.cpp:1095
1418 #: ../../../src/MenuPowers.cpp:1094
12331419 msgid "Ignores Avoidance"
12341420 msgstr ""
12351421
1236 #: ../../../src/MenuPowers.cpp:1100
1422 #: ../../../src/MenuPowers.cpp:1099
12371423 #, c-format
12381424 msgid "%d%% Chance to crit slowed targets"
12391425 msgstr ""
12401426
1241 #: ../../../src/MenuPowers.cpp:1105
1427 #: ../../../src/MenuPowers.cpp:1104
12421428 #, c-format
12431429 msgid "Elemental Damage (%s)"
12441430 msgstr ""
12451431
1246 #: ../../../src/MenuPowers.cpp:1114
1432 #: ../../../src/MenuPowers.cpp:1113
12471433 #, c-format
12481434 msgid "Requires a %s"
12491435 msgstr ""
12501436
1251 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1437 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12521438 #, c-format
12531439 msgid "Requires Power: %s"
12541440 msgstr ""
12551441
1256 #: ../../../src/MenuPowers.cpp:1163
1442 #: ../../../src/MenuPowers.cpp:1162
12571443 msgid "Click to Unlock (uses 1 Skill Point)"
12581444 msgstr ""
12591445
1260 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1446 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12611447 msgid "Requires 1 Skill Point"
12621448 msgstr ""
12631449
1264 #: ../../../src/MenuPowers.cpp:1355
1450 #: ../../../src/MenuPowers.cpp:1354
12651451 #, c-format
12661452 msgid "%d unspent skill point"
12671453 msgstr ""
12681454
1269 #: ../../../src/MenuPowers.cpp:1358
1455 #: ../../../src/MenuPowers.cpp:1357
12701456 #, c-format
12711457 msgid "%d unspent skill points"
12721458 msgstr ""
12731459
1274 #: ../../../src/MenuPowers.cpp:1388
1460 #: ../../../src/MenuPowers.cpp:1387
12751461 msgid "Next Level:"
12761462 msgstr ""
12771463
1278 #: ../../../src/MenuStash.cpp:96
1279 msgid "Shared Stash"
1280 msgstr ""
1281
1282 #: ../../../src/MenuStash.cpp:209
1464 #: ../../../src/MenuStash.cpp:53
1465 msgid "Private"
1466 msgstr ""
1467
1468 #: ../../../src/MenuStash.cpp:55
1469 msgid "Shared"
1470 msgstr ""
1471
1472 #: ../../../src/MenuStash.cpp:103
1473 msgid "Stash"
1474 msgstr ""
1475
1476 #: ../../../src/MenuStash.cpp:258
12831477 msgid "Can not store quest items in the stash."
12841478 msgstr ""
12851479
1286 #: ../../../src/MenuStash.cpp:219
1480 #: ../../../src/MenuStash.cpp:263
1481 msgid "This item can not be stored in the stash."
1482 msgstr ""
1483
1484 #: ../../../src/MenuStash.cpp:268
1485 msgid "This item can not be stored in the private stash."
1486 msgstr ""
1487
1488 #: ../../../src/MenuStash.cpp:273
1489 msgid "This item can not be stored in the shared stash."
1490 msgstr ""
1491
1492 #: ../../../src/MenuStash.cpp:283
12871493 msgid "Stash is full."
12881494 msgstr ""
12891495
1290 #: ../../../src/MenuTalker.cpp:454
1496 #: ../../../src/MenuStash.cpp:340
1497 #, c-format
1498 msgid "Can not store item in stash: %s"
1499 msgstr ""
1500
1501 #: ../../../src/MenuTalker.cpp:447
1502 #, c-format
1503 msgid "<dialog node %d>"
1504 msgstr ""
1505
1506 #: ../../../src/MenuTalker.cpp:455
12911507 msgid "Trade"
12921508 msgstr "Comerç"
12931509
12951511 msgid "Buyback"
12961512 msgstr ""
12971513
1298 #: ../../../src/MenuVendor.cpp:279
1514 #: ../../../src/MenuVendor.cpp:281
12991515 msgid "Vendor"
13001516 msgstr ""
13011517
1302 #: ../../../src/PowerManager.cpp:1136
1518 #: ../../../src/PowerManager.cpp:1170
13031519 #, c-format
13041520 msgid "+%d Shield"
13051521 msgstr ""
13061522
1307 #: ../../../src/PowerManager.cpp:1392
1523 #: ../../../src/PowerManager.cpp:1426
13081524 msgid "You are already transformed, untransform first."
13091525 msgstr ""
13101526
1311 #: ../../../src/PowerManager.cpp:1404
1527 #: ../../../src/PowerManager.cpp:1438
13121528 msgid "Could not untransform at this position."
13131529 msgstr ""
13141530
13161532 msgid "Completed Quests"
13171533 msgstr ""
13181534
1319 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1535 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13201536 msgid "Game saved."
13211537 msgstr ""
13221538
1323 #: ../../../src/SDLInputState.cpp:582
1324 msgid "Backspace"
1325 msgstr ""
1326
1327 #: ../../../src/SDLInputState.cpp:583
1328 msgid "CapsLock"
1329 msgstr ""
1330
1331 #: ../../../src/SDLInputState.cpp:586
1539 #: ../../../src/SDLInputState.cpp:643
1540 msgid "BkSp"
1541 msgstr ""
1542
1543 #: ../../../src/SDLInputState.cpp:644
1544 msgid "Caps"
1545 msgstr ""
1546
1547 #: ../../../src/SDLInputState.cpp:645
1548 msgid "Del"
1549 msgstr ""
1550
1551 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
13321552 msgid "End"
13331553 msgstr "Fi"
13341554
1335 #: ../../../src/SDLInputState.cpp:587
1336 msgid "Escape"
1337 msgstr ""
1338
1339 #: ../../../src/SDLInputState.cpp:588
1555 #: ../../../src/SDLInputState.cpp:648
1556 msgid "Esc"
1557 msgstr ""
1558
1559 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
13401560 msgid "Home"
13411561 msgstr ""
13421562
1343 #: ../../../src/SDLInputState.cpp:589
1344 msgid "Insert"
1345 msgstr ""
1346
1347 #: ../../../src/SDLInputState.cpp:590
1348 msgid "Left Alt"
1349 msgstr ""
1350
1351 #: ../../../src/SDLInputState.cpp:591
1352 msgid "Left Ctrl"
1353 msgstr ""
1354
1355 #: ../../../src/SDLInputState.cpp:593
1356 msgid "Left Shift"
1357 msgstr ""
1358
1359 #: ../../../src/SDLInputState.cpp:594
1360 msgid "NumLock"
1361 msgstr ""
1362
1363 #: ../../../src/SDLInputState.cpp:595
1364 msgid "PageDown"
1365 msgstr ""
1366
1367 #: ../../../src/SDLInputState.cpp:596
1368 msgid "PageUp"
1369 msgstr ""
1370
1371 #: ../../../src/SDLInputState.cpp:597
1563 #: ../../../src/SDLInputState.cpp:650
1564 msgid "Ins"
1565 msgstr ""
1566
1567 #: ../../../src/SDLInputState.cpp:651
1568 msgid "LAlt"
1569 msgstr ""
1570
1571 #: ../../../src/SDLInputState.cpp:652
1572 msgid "LCtrl"
1573 msgstr ""
1574
1575 #: ../../../src/SDLInputState.cpp:654
1576 msgid "LShft"
1577 msgstr ""
1578
1579 #: ../../../src/SDLInputState.cpp:655
1580 msgid "Num"
1581 msgstr ""
1582
1583 #: ../../../src/SDLInputState.cpp:656
1584 msgid "PgDn"
1585 msgstr ""
1586
1587 #: ../../../src/SDLInputState.cpp:657
1588 msgid "PgUp"
1589 msgstr ""
1590
1591 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
13721592 msgid "Pause"
13731593 msgstr "Pausa"
13741594
1375 #: ../../../src/SDLInputState.cpp:598
1595 #: ../../../src/SDLInputState.cpp:659
1596 msgid "Print"
1597 msgstr ""
1598
1599 #: ../../../src/SDLInputState.cpp:660
1600 msgid "RAlt"
1601 msgstr ""
1602
1603 #: ../../../src/SDLInputState.cpp:661
1604 msgid "RCtrl"
1605 msgstr ""
1606
1607 #: ../../../src/SDLInputState.cpp:662
1608 msgid "Ret"
1609 msgstr ""
1610
1611 #: ../../../src/SDLInputState.cpp:664
1612 msgid "RShft"
1613 msgstr ""
1614
1615 #: ../../../src/SDLInputState.cpp:665
1616 msgid "SLock"
1617 msgstr ""
1618
1619 #: ../../../src/SDLInputState.cpp:666
1620 msgid "Spc"
1621 msgstr ""
1622
1623 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1624 msgid "Tab"
1625 msgstr "Tabulador"
1626
1627 #: ../../../src/SDLInputState.cpp:673
1628 msgid "Backspace"
1629 msgstr ""
1630
1631 #: ../../../src/SDLInputState.cpp:674
1632 msgid "CapsLock"
1633 msgstr ""
1634
1635 #: ../../../src/SDLInputState.cpp:678
1636 msgid "Escape"
1637 msgstr ""
1638
1639 #: ../../../src/SDLInputState.cpp:680
1640 msgid "Insert"
1641 msgstr ""
1642
1643 #: ../../../src/SDLInputState.cpp:681
1644 msgid "Left Alt"
1645 msgstr ""
1646
1647 #: ../../../src/SDLInputState.cpp:682
1648 msgid "Left Ctrl"
1649 msgstr ""
1650
1651 #: ../../../src/SDLInputState.cpp:684
1652 msgid "Left Shift"
1653 msgstr ""
1654
1655 #: ../../../src/SDLInputState.cpp:685
1656 msgid "NumLock"
1657 msgstr ""
1658
1659 #: ../../../src/SDLInputState.cpp:686
1660 msgid "PageDown"
1661 msgstr ""
1662
1663 #: ../../../src/SDLInputState.cpp:687
1664 msgid "PageUp"
1665 msgstr ""
1666
1667 #: ../../../src/SDLInputState.cpp:689
13761668 msgid "PrintScreen"
13771669 msgstr ""
13781670
1379 #: ../../../src/SDLInputState.cpp:599
1671 #: ../../../src/SDLInputState.cpp:690
13801672 msgid "Right Alt"
13811673 msgstr ""
13821674
1383 #: ../../../src/SDLInputState.cpp:600
1675 #: ../../../src/SDLInputState.cpp:691
13841676 msgid "Right Ctrl"
13851677 msgstr ""
13861678
1387 #: ../../../src/SDLInputState.cpp:601
1679 #: ../../../src/SDLInputState.cpp:692
13881680 msgid "Return"
13891681 msgstr ""
13901682
1391 #: ../../../src/SDLInputState.cpp:603
1683 #: ../../../src/SDLInputState.cpp:694
13921684 msgid "Right Shift"
13931685 msgstr ""
13941686
1395 #: ../../../src/SDLInputState.cpp:604
1687 #: ../../../src/SDLInputState.cpp:695
13961688 msgid "ScrollLock"
13971689 msgstr ""
13981690
1399 #: ../../../src/SDLInputState.cpp:605
1691 #: ../../../src/SDLInputState.cpp:696
14001692 msgid "Space"
14011693 msgstr "Espai"
14021694
1403 #: ../../../src/SDLInputState.cpp:606
1404 msgid "Tab"
1405 msgstr "Tabulador"
1406
1407 #: ../../../src/SDLInputState.cpp:620
1695 #: ../../../src/SDLInputState.cpp:710
1696 #, c-format
1697 msgid "M%d"
1698 msgstr ""
1699
1700 #: ../../../src/SDLInputState.cpp:716
14081701 #, c-format
14091702 msgid "Mouse %d"
14101703 msgstr ""
14111704
1412 #: ../../../src/SDLInputState.cpp:628
1705 #: ../../../src/SDLInputState.cpp:726
1706 #, c-format
1707 msgid "JX%d-"
1708 msgstr ""
1709
1710 #: ../../../src/SDLInputState.cpp:728
14131711 #, c-format
14141712 msgid "Axis %d -"
14151713 msgstr ""
14161714
1417 #: ../../../src/SDLInputState.cpp:630
1715 #: ../../../src/SDLInputState.cpp:732
1716 #, c-format
1717 msgid "JX%d+"
1718 msgstr ""
1719
1720 #: ../../../src/SDLInputState.cpp:734
14181721 #, c-format
14191722 msgid "Axis %d +"
14201723 msgstr ""
14211724
1422 #: ../../../src/SDLInputState.cpp:633
1725 #: ../../../src/SDLInputState.cpp:739
1726 #, c-format
1727 msgid "JB%d"
1728 msgstr ""
1729
1730 #: ../../../src/SDLInputState.cpp:741
14231731 #, c-format
14241732 msgid "Button %d"
14251733 msgstr ""
14261734
1427 #: ../../../src/SDLInputState.cpp:637
1428 msgid "(none)"
1429 msgstr ""
1430
1431 #: ../../../src/SDLInputState.cpp:677
1735 #: ../../../src/SDLInputState.cpp:788
14321736 msgid "Touch control D-Pad"
14331737 msgstr ""
14341738
1435 #: ../../../src/SDLInputState.cpp:701
1739 #: ../../../src/SDLInputState.cpp:812
14361740 msgid "Touch control buttons"
14371741 msgstr ""
14381742
1439 #: ../../../src/SDLInputState.cpp:716
1743 #: ../../../src/SDLInputState.cpp:827
14401744 msgid "Tap"
14411745 msgstr ""
14421746
1443 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1444 #: ../../../src/SDLInputState.cpp:768
1747 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1748 #, c-format
1749 msgid "Can not bind: %s"
1750 msgstr ""
1751
1752 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1753 #: ../../../src/SDLInputState.cpp:901
14451754 #, c-format
14461755 msgid "'%s' is no longer bound to:"
14471756 msgstr ""
16041913 msgid "k"
16051914 msgstr "k"
16061915
1607 #: ../../../src/Utils.cpp:580
1916 #: ../../../src/Utils.cpp:616
16081917 #, c-format
16091918 msgid "%s second"
16101919 msgstr "%s segon"
16111920
1612 #: ../../../src/Utils.cpp:583
1921 #: ../../../src/Utils.cpp:619
16131922 #, c-format
16141923 msgid "%s seconds"
16151924 msgstr "%s segons"
1111 msgstr ""
1212 "Project-Id-Version: PACKAGE VERSION\n"
1313 "Report-Msgid-Bugs-To: \n"
14 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
14 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1515 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1616 "Last-Translator: a hark <vit.hrachovy@sandbox.cz>, 2018\n"
1717 "Language-Team: Czech (https://www.transifex.com/flareorg/teams/84925/cs/)\n"
2121 "Language: cs\n"
2222 "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
2323
24 #: ../../../src/Avatar.cpp:367
24 #: ../../../src/Avatar.cpp:387
25 msgid "Your health is low!"
26 msgstr ""
27
28 #: ../../../src/Avatar.cpp:419
2529 #, c-format
2630 msgid "Congratulations, you have reached level %d!"
2731 msgstr "Dosáhl jsi levelu %d!"
2832
29 #: ../../../src/Avatar.cpp:369
30 msgid "You may increase one attribute through the Character Menu."
31 msgstr "Můžete zvýšit jeden atribtu v Menu Postavy"
32
33 #: ../../../src/Avatar.cpp:583
33 #: ../../../src/Avatar.cpp:421
34 msgid "You may increase one or more attributes through the Character Menu."
35 msgstr ""
36
37 #: ../../../src/Avatar.cpp:425
38 msgid "You may unlock one or more abilities through the Powers Menu."
39 msgstr ""
40
41 #: ../../../src/Avatar.cpp:692
3442 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3543 msgstr ""
3644
37 #: ../../../src/Avatar.cpp:589
45 #: ../../../src/Avatar.cpp:698
3846 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
3947 msgstr ""
4048
41 #: ../../../src/Avatar.cpp:839
49 #: ../../../src/Avatar.cpp:949
4250 msgid "Transformation expired. You have been moved back to a safe place."
4351 msgstr ""
4452
4755 msgid "%d %s removed."
4856 msgstr ""
4957
50 #: ../../../src/CampaignManager.cpp:162
58 #: ../../../src/CampaignManager.cpp:165
59 #, c-format
60 msgid "%s x%d removed."
61 msgstr ""
62
63 #: ../../../src/CampaignManager.cpp:167
5164 #, c-format
5265 msgid "%s removed."
5366 msgstr ""
5467
55 #: ../../../src/CampaignManager.cpp:175
68 #: ../../../src/CampaignManager.cpp:180
5669 #, c-format
5770 msgid "You receive %s."
5871 msgstr "Dostáváš %s."
5972
60 #: ../../../src/CampaignManager.cpp:177
73 #: ../../../src/CampaignManager.cpp:182
6174 #, c-format
6275 msgid "You receive %s x%d."
6376 msgstr "Dostáváš %s x%d."
6477
65 #: ../../../src/CampaignManager.cpp:186
78 #: ../../../src/CampaignManager.cpp:191
6679 #, c-format
6780 msgid "You receive %d %s."
6881 msgstr "Dostáváš %d %s."
6982
70 #: ../../../src/CampaignManager.cpp:195
83 #: ../../../src/CampaignManager.cpp:200
7184 #, c-format
7285 msgid "You receive %d XP."
7386 msgstr "Dostáváš %d XP."
7487
75 #: ../../../src/CampaignManager.cpp:201
88 #: ../../../src/CampaignManager.cpp:206
7689 msgid "HP restored."
7790 msgstr "HP obnoveno."
7891
79 #: ../../../src/CampaignManager.cpp:205
92 #: ../../../src/CampaignManager.cpp:210
8093 msgid "MP restored."
8194 msgstr "MP obnoveno."
8295
83 #: ../../../src/CampaignManager.cpp:210
96 #: ../../../src/CampaignManager.cpp:215
8497 msgid "HP and MP restored."
8598 msgstr "HP a MP obnoveno."
8699
87 #: ../../../src/CampaignManager.cpp:214
100 #: ../../../src/CampaignManager.cpp:219
88101 msgid "Negative effects removed."
89102 msgstr "Negativní účinky odstraněny."
90103
91 #: ../../../src/CampaignManager.cpp:220
104 #: ../../../src/CampaignManager.cpp:225
92105 msgid "HP and MP restored, negative effects removed"
93106 msgstr "HP a MP obnoveno, negativní účtinky odstraněny"
94107
106119 "The default renderer that is often faster than the SDL software renderer."
107120 msgstr ""
108121
109 #: ../../../src/EngineSettings.cpp:561
122 #: ../../../src/EngineSettings.cpp:572
110123 msgid "Adventurer"
111124 msgstr "Dobrodruh"
112125
113 #: ../../../src/Entity.cpp:511
126 #: ../../../src/Entity.cpp:522
114127 msgid "miss"
115128 msgstr "minout"
116129
117 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
118 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
130 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
131 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
119132 #, c-format
120133 msgid "+%d HP"
121134 msgstr ""
122135
123 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
124 #: ../../../src/StatBlock.cpp:822
136 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
137 #: ../../../src/StatBlock.cpp:830
125138 #, c-format
126139 msgid "+%d MP"
127140 msgstr "%d MP"
128141
129 #: ../../../src/EventManager.cpp:738
142 #: ../../../src/EventManager.cpp:782
130143 msgid "Unknown destination"
131144 msgstr "Neznámá lokace"
132145
133 #: ../../../src/GameStateConfigBase.cpp:89
134 #: ../../../src/GameStateConfigBase.cpp:110
146 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
147 msgid "Loading..."
148 msgstr "Nahrávám..."
149
150 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
151 msgid "Delete Save"
152 msgstr "Vymazat uložené pozice"
153
154 #: ../../../src/GameStateLoad.cpp:90
155 msgid "Delete this save?"
156 msgstr "Vymazat tuto pozici?"
157
158 #: ../../../src/GameStateLoad.cpp:92
159 msgid "Exit to Title"
160 msgstr "Ukončit do menu"
161
162 #: ../../../src/GameStateLoad.cpp:95
163 msgid "New Game"
164 msgstr "Nová Hra"
165
166 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
167 msgid "Choose a Slot"
168 msgstr "Vyber si pozici"
169
170 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
171 msgid "Enable a story mod to continue"
172 msgstr "Pro pokračování povol příběhový mod"
173
174 #: ../../../src/GameStateLoad.cpp:597
175 msgid "Load Game"
176 msgstr "Nahrát Hru"
177
178 #: ../../../src/GameStateLoad.cpp:706
179 msgid "Entering game world..."
180 msgstr "Vstupuji do herního světa..."
181
182 #: ../../../src/GameStateLoad.cpp:709
183 msgid "Loading saved game..."
184 msgstr "Nahrávám uloženou pozici..."
185
186 #: ../../../src/GameStateLoad.cpp:742
187 msgid "Invalid save"
188 msgstr ""
189
190 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
191 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
192 #: ../../../src/MenuPowers.cpp:1543
193 #, c-format
194 msgid "Level %d"
195 msgstr ""
196
197 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
198 #: ../../../src/MenuConfig.cpp:244
199 msgid "Cancel"
200 msgstr "Zrušit"
201
202 #: ../../../src/GameStateNew.cpp:68
203 msgid "Create"
204 msgstr "Vytvořit"
205
206 #: ../../../src/GameStateNew.cpp:76
207 msgid "Randomize"
208 msgstr ""
209
210 #: ../../../src/GameStateNew.cpp:92
211 msgid "Choose a Portrait"
212 msgstr "Zvol si Portrét"
213
214 #: ../../../src/GameStateNew.cpp:96
215 msgid "Choose a Name"
216 msgstr "Zvol své Jméno"
217
218 #: ../../../src/GameStateNew.cpp:100
219 msgid "Permadeath?"
220 msgstr "Pernamentní smrt?"
221
222 #: ../../../src/GameStateNew.cpp:104
223 msgid "Choose a Class"
224 msgstr "Zvol své povolání"
225
226 #: ../../../src/GameStateTitle.cpp:107
227 msgid "Play Game"
228 msgstr "Hrát Hru"
229
230 #: ../../../src/GameStateTitle.cpp:110
231 msgid "Enable a core mod to continue"
232 msgstr "Pro pokračování povol mod jádra"
233
234 #: ../../../src/GameStateTitle.cpp:114
235 msgid "Configuration"
236 msgstr "Nastavení"
237
238 #: ../../../src/GameStateTitle.cpp:117
239 msgid "Credits"
240 msgstr ""
241
242 #: ../../../src/GameStateTitle.cpp:120
243 msgid "Exit Game"
244 msgstr "Ukončit Hru"
245
246 #: ../../../src/InputState.cpp:407
247 msgid "Accept"
248 msgstr "Příjmout"
249
250 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
251 #: ../../../src/SDLInputState.cpp:698
252 msgid "Up"
253 msgstr "Nahoru"
254
255 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
256 #: ../../../src/SDLInputState.cpp:676
257 msgid "Down"
258 msgstr "Dolů"
259
260 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
261 #: ../../../src/SDLInputState.cpp:683
262 msgid "Left"
263 msgstr "Doleva"
264
265 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
266 #: ../../../src/SDLInputState.cpp:693
267 msgid "Right"
268 msgstr "Doprava"
269
270 #: ../../../src/InputState.cpp:412
271 msgid "Bar1"
272 msgstr ""
273
274 #: ../../../src/InputState.cpp:413
275 msgid "Bar2"
276 msgstr ""
277
278 #: ../../../src/InputState.cpp:414
279 msgid "Bar3"
280 msgstr ""
281
282 #: ../../../src/InputState.cpp:415
283 msgid "Bar4"
284 msgstr ""
285
286 #: ../../../src/InputState.cpp:416
287 msgid "Bar5"
288 msgstr ""
289
290 #: ../../../src/InputState.cpp:417
291 msgid "Bar6"
292 msgstr ""
293
294 #: ../../../src/InputState.cpp:418
295 msgid "Bar7"
296 msgstr ""
297
298 #: ../../../src/InputState.cpp:419
299 msgid "Bar8"
300 msgstr ""
301
302 #: ../../../src/InputState.cpp:420
303 msgid "Bar9"
304 msgstr ""
305
306 #: ../../../src/InputState.cpp:421
307 msgid "Bar0"
308 msgstr ""
309
310 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
311 #: ../../../src/MenuCharacter.cpp:54
312 msgid "Character"
313 msgstr "Postava"
314
315 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
316 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
317 msgid "Inventory"
318 msgstr "Inventář"
319
320 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
321 #: ../../../src/MenuPowers.cpp:167
322 msgid "Powers"
323 msgstr "Schopnosti"
324
325 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
326 #: ../../../src/MenuLog.cpp:72
327 msgid "Log"
328 msgstr "Deník"
329
330 #: ../../../src/InputState.cpp:426
331 msgid "Main1"
332 msgstr ""
333
334 #: ../../../src/InputState.cpp:427
335 msgid "Main2"
336 msgstr ""
337
338 #: ../../../src/InputState.cpp:428
339 msgid "Ctrl"
340 msgstr ""
341
342 #: ../../../src/InputState.cpp:429
343 msgid "Shift"
344 msgstr ""
345
346 #: ../../../src/InputState.cpp:430
347 msgid "Alt"
348 msgstr ""
349
350 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
351 msgid "Delete"
352 msgstr ""
353
354 #: ../../../src/InputState.cpp:432
355 msgid "ActionBar Accept"
356 msgstr ""
357
358 #: ../../../src/InputState.cpp:433
359 msgid "ActionBar Left"
360 msgstr ""
361
362 #: ../../../src/InputState.cpp:434
363 msgid "ActionBar Right"
364 msgstr ""
365
366 #: ../../../src/InputState.cpp:435
367 msgid "ActionBar Use"
368 msgstr ""
369
370 #: ../../../src/InputState.cpp:436
371 msgid "Developer Menu"
372 msgstr ""
373
374 #: ../../../src/InputState.cpp:438
375 msgid "Left Mouse"
376 msgstr ""
377
378 #: ../../../src/InputState.cpp:439
379 msgid "Middle Mouse"
380 msgstr ""
381
382 #: ../../../src/InputState.cpp:440
383 msgid "Right Mouse"
384 msgstr ""
385
386 #: ../../../src/InputState.cpp:441
387 msgid "Wheel Up"
388 msgstr ""
389
390 #: ../../../src/InputState.cpp:442
391 msgid "Wheel Down"
392 msgstr ""
393
394 #: ../../../src/InputState.cpp:443
395 msgid "Mouse X1"
396 msgstr ""
397
398 #: ../../../src/InputState.cpp:444
399 msgid "Mouse X2"
400 msgstr ""
401
402 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
403 msgid "Unknown Item"
404 msgstr ""
405
406 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
407 #, c-format
408 msgid "%d%% Speed"
409 msgstr ""
410
411 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
412 #, c-format
413 msgid "%d%% Attack Speed"
414 msgstr ""
415
416 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
417 #: ../../../src/MenuPowers.cpp:832
418 #, c-format
419 msgid "Resistance (%s)"
420 msgstr ""
421
422 #: ../../../src/ItemManager.cpp:714
423 #, c-format
424 msgid "Requires %s"
425 msgstr ""
426
427 #: ../../../src/ItemManager.cpp:763
428 msgid "Quest Item"
429 msgstr ""
430
431 #: ../../../src/ItemManager.cpp:790
432 #, c-format
433 msgid "Quality: %s"
434 msgstr ""
435
436 #: ../../../src/ItemManager.cpp:815
437 #, c-format
438 msgid "Absorb: %d-%d"
439 msgstr "Absorbuje: %d-%d"
440
441 #: ../../../src/ItemManager.cpp:817
442 #, c-format
443 msgid "Absorb: %d"
444 msgstr "Absorbuje: %d"
445
446 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
447 #: ../../../src/MenuPowers.cpp:1133
448 #, c-format
449 msgid "Requires Level %d"
450 msgstr "Potřebuje Level %d"
451
452 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
453 #: ../../../src/MenuPowers.cpp:1124
454 #, c-format
455 msgid "Requires %s %d"
456 msgstr ""
457
458 #: ../../../src/ItemManager.cpp:879
459 #, c-format
460 msgid "Requires Class: %s"
461 msgstr ""
462
463 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
464 #, c-format
465 msgid "Buy Price: %d %s"
466 msgstr "Nákupní Cena: %d %s"
467
468 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
469 #, c-format
470 msgid "Buy Price: %d %s each"
471 msgstr "Nákupní Cena: %d %s každý"
472
473 #: ../../../src/ItemManager.cpp:916
474 #, c-format
475 msgid "Sell Price: %d %s"
476 msgstr "Prodejní Cena: %d %s"
477
478 #: ../../../src/ItemManager.cpp:918
479 #, c-format
480 msgid "Sell Price: %d %s each"
481 msgstr "Prodejní Cena: %d %s každý"
482
483 #: ../../../src/ItemManager.cpp:927
484 msgid "Set:"
485 msgstr ""
486
487 #: ../../../src/ItemManager.cpp:934
488 #, c-format
489 msgid "%d items:"
490 msgstr ""
491
492 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
493 #, c-format
494 msgid "Press [%s] to use"
495 msgstr ""
496
497 #: ../../../src/ItemManager.cpp:951
498 #, c-format
499 msgid "Press [%s] to read"
500 msgstr ""
501
502 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
503 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
504 #, c-format
505 msgid "Hotkey: %s"
506 msgstr ""
507
508 #: ../../../src/MenuActionBar.cpp:599
509 msgid "Not enough MP."
510 msgstr ""
511
512 #: ../../../src/MenuActiveEffects.cpp:124
513 #, c-format
514 msgid "x%d"
515 msgstr ""
516
517 #: ../../../src/MenuActiveEffects.cpp:219
518 msgid "Remaining:"
519 msgstr ""
520
521 #: ../../../src/MenuActiveEffects.cpp:225
522 #, c-format
523 msgid "x%d stacks"
524 msgstr ""
525
526 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
527 msgid "Name"
528 msgstr "Jméno"
529
530 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
531 msgid "Level"
532 msgstr ""
533
534 #: ../../../src/MenuCharacter.cpp:310
535 #, c-format
536 msgid "%d unspent stat point"
537 msgstr ""
538
539 #: ../../../src/MenuCharacter.cpp:313
540 #, c-format
541 msgid "%d unspent stat points"
542 msgstr ""
543
544 #: ../../../src/MenuCharacter.cpp:355
545 #, c-format
546 msgid "Reduces the damage taken from \"%s\" elemental attacks."
547 msgstr ""
548
549 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
550 #, c-format
551 msgid "XP: %d"
552 msgstr ""
553
554 #: ../../../src/MenuCharacter.cpp:367
555 #, c-format
556 msgid "Next: %d"
557 msgstr "Další: %d"
558
559 #: ../../../src/MenuCharacter.cpp:373
560 #, c-format
561 msgid "base (%d), bonus (%d)"
562 msgstr "základní (%d), bonus (%d)"
563
564 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
565 msgid "Related stats:"
566 msgstr ""
567
568 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
569 #, c-format
570 msgid "Each level grants %d."
571 msgstr ""
572
573 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
574 #, c-format
575 msgid "Each point of %s grants %d."
576 msgstr ""
577
578 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
579 msgid "Clear"
580 msgstr ""
581
582 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
583 msgid "Assign:"
584 msgstr ""
585
586 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
135587 msgid "Defaults"
136588 msgstr "Původní"
137589
138 #: ../../../src/GameStateConfigBase.cpp:89
590 #: ../../../src/MenuConfig.cpp:123
139591 msgid "Reset ALL settings?"
140592 msgstr "Vrátit původní nastavení?"
141593
142 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
594 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
143595 msgid "OK"
144596 msgstr ""
145597
146 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
147 #: ../../../src/InputState.cpp:401
148 msgid "Cancel"
149 msgstr "Zrušit"
150
151 #: ../../../src/GameStateConfigBase.cpp:160
152 #: ../../../src/GameStateConfigDesktop.cpp:130
598 #: ../../../src/MenuConfig.cpp:246
599 msgid "Continue"
600 msgstr ""
601
602 #: ../../../src/MenuConfig.cpp:248
603 msgid "Save Game"
604 msgstr ""
605
606 #: ../../../src/MenuConfig.cpp:291
607 msgid "Default"
608 msgstr ""
609
610 #: ../../../src/MenuConfig.cpp:291
611 msgid ""
612 "Show all loot tooltips, except for those that would be obscured by the "
613 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
614 msgstr ""
615
616 #: ../../../src/MenuConfig.cpp:292
617 msgid "Show all"
618 msgstr ""
619
620 #: ../../../src/MenuConfig.cpp:292
621 msgid ""
622 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
623 msgstr ""
624
625 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
626 msgid "Hidden"
627 msgstr ""
628
629 #: ../../../src/MenuConfig.cpp:293
630 msgid ""
631 "Always hide loot tooltips, except for when a piece of loot is hovered with "
632 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
633 msgstr ""
634
635 #: ../../../src/MenuConfig.cpp:296
636 msgid "Visible"
637 msgstr ""
638
639 #: ../../../src/MenuConfig.cpp:297
640 msgid "Visible (2x zoom)"
641 msgstr ""
642
643 #: ../../../src/MenuConfig.cpp:301
644 msgid ""
645 "Controls the type of warning to be activated when the player is below the "
646 "low health threshold."
647 msgstr ""
648
649 #: ../../../src/MenuConfig.cpp:302
650 msgid "- Display a message"
651 msgstr ""
652
653 #: ../../../src/MenuConfig.cpp:303
654 msgid "- Play a sound"
655 msgstr ""
656
657 #: ../../../src/MenuConfig.cpp:304
658 msgid "- Change the cursor"
659 msgstr ""
660
661 #: ../../../src/MenuConfig.cpp:306
662 msgid "Disabled"
663 msgstr ""
664
665 #: ../../../src/MenuConfig.cpp:307
666 msgid "All"
667 msgstr ""
668
669 #: ../../../src/MenuConfig.cpp:308
670 msgid "Message & Cursor"
671 msgstr ""
672
673 #: ../../../src/MenuConfig.cpp:309
674 msgid "Message & Sound"
675 msgstr ""
676
677 #: ../../../src/MenuConfig.cpp:310
678 msgid "Sound & Cursor"
679 msgstr ""
680
681 #: ../../../src/MenuConfig.cpp:311
682 msgid "Message"
683 msgstr ""
684
685 #: ../../../src/MenuConfig.cpp:312
686 msgid "Cursor"
687 msgstr ""
688
689 #: ../../../src/MenuConfig.cpp:313
690 msgid "Sound"
691 msgstr ""
692
693 #: ../../../src/MenuConfig.cpp:319
694 msgid ""
695 "When the player's health drops below the given threshold, the low health "
696 "notifications are triggered if one or more of them is enabled."
697 msgstr ""
698
699 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
700 msgid "Exit"
701 msgstr "Konec"
702
703 #: ../../../src/MenuConfig.cpp:333
704 msgid "Video"
705 msgstr ""
706
707 #: ../../../src/MenuConfig.cpp:334
153708 msgid "Audio"
154709 msgstr ""
155710
156 #: ../../../src/GameStateConfigBase.cpp:161
157 #: ../../../src/GameStateConfigDesktop.cpp:131
711 #: ../../../src/MenuConfig.cpp:335
158712 msgid "Interface"
159713 msgstr ""
160714
161 #: ../../../src/GameStateConfigBase.cpp:162
162 #: ../../../src/GameStateConfigDesktop.cpp:134
715 #: ../../../src/MenuConfig.cpp:336
716 msgid "Input"
717 msgstr "Vstup"
718
719 #: ../../../src/MenuConfig.cpp:337
720 msgid "Keybindings"
721 msgstr "Nastavení kláves"
722
723 #: ../../../src/MenuConfig.cpp:338
163724 msgid "Mods"
164725 msgstr "Mody"
165726
166 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
727 #: ../../../src/MenuConfig.cpp:350
728 msgid "Paused"
729 msgstr ""
730
731 #: ../../../src/MenuConfig.cpp:353
732 msgid "Time Played"
733 msgstr ""
734
735 #: ../../../src/MenuConfig.cpp:359
736 msgid "Renderer"
737 msgstr ""
738
739 #: ../../../src/MenuConfig.cpp:360
740 msgid "Full Screen Mode"
741 msgstr "Mod plné obrazovky"
742
743 #: ../../../src/MenuConfig.cpp:361
744 msgid "Hardware surfaces"
745 msgstr "Hardwarové povrchy"
746
747 #: ../../../src/MenuConfig.cpp:362
748 msgid "V-Sync"
749 msgstr ""
750
751 #: ../../../src/MenuConfig.cpp:363
752 msgid "Texture Filtering"
753 msgstr ""
754
755 #: ../../../src/MenuConfig.cpp:364
756 msgid "DPI scaling"
757 msgstr ""
758
759 #: ../../../src/MenuConfig.cpp:365
760 msgid "Parallax Layers"
761 msgstr ""
762
763 #: ../../../src/MenuConfig.cpp:366
764 msgid "Allow changing gamma"
765 msgstr "Povolit změnu gammy"
766
767 #: ../../../src/MenuConfig.cpp:367
768 msgid "Gamma"
769 msgstr ""
770
771 #: ../../../src/MenuConfig.cpp:369
772 msgid "Sound Volume"
773 msgstr "Hlasitost Zvuku"
774
775 #: ../../../src/MenuConfig.cpp:370
167776 msgid "Music Volume"
168777 msgstr "Hlasitost Hudby"
169778
170 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
171 msgid "Sound Volume"
172 msgstr "Hlasitost Zvuku"
173
174 #: ../../../src/GameStateConfigBase.cpp:257
779 #: ../../../src/MenuConfig.cpp:372
175780 msgid "Language"
176781 msgstr "Jazyk"
177782
178 #: ../../../src/GameStateConfigBase.cpp:266
783 #: ../../../src/MenuConfig.cpp:373
179784 msgid "Show FPS"
180785 msgstr "Zobraz FPS"
181786
182 #: ../../../src/GameStateConfigBase.cpp:270
787 #: ../../../src/MenuConfig.cpp:374
788 msgid "Hardware mouse cursor"
789 msgstr ""
790
791 #: ../../../src/MenuConfig.cpp:375
183792 msgid "Colorblind Mode"
184793 msgstr ""
185794
186 #: ../../../src/GameStateConfigBase.cpp:274
187 msgid "Hardware mouse cursor"
188 msgstr ""
189
190 #: ../../../src/GameStateConfigBase.cpp:278
795 #: ../../../src/MenuConfig.cpp:376
191796 msgid "Developer Mode"
192797 msgstr ""
193798
194 #: ../../../src/GameStateConfigBase.cpp:282
799 #: ../../../src/MenuConfig.cpp:377
195800 msgid "Subtitles"
196801 msgstr ""
197802
198 #: ../../../src/GameStateConfigBase.cpp:286
199 msgid "Active Mods"
200 msgstr "Aktivní mody"
201
202 #: ../../../src/GameStateConfigBase.cpp:295
203 msgid "Available Mods"
204 msgstr "Mody k dispozici"
205
206 #: ../../../src/GameStateConfigBase.cpp:314
207 msgid "<< Disable"
208 msgstr "<< Zakázat"
209
210 #: ../../../src/GameStateConfigBase.cpp:320
211 msgid "Enable >>"
212 msgstr "Povolit >>"
213
214 #: ../../../src/GameStateConfigBase.cpp:873
215 msgid "Version:"
216 msgstr ""
217
218 #: ../../../src/GameStateConfigBase.cpp:878
219 msgid "Game:"
220 msgstr ""
221
222 #: ../../../src/GameStateConfigBase.cpp:883
223 msgid "Engine version:"
224 msgstr ""
225
226 #: ../../../src/GameStateConfigBase.cpp:891
227 msgid "Requires mods:"
228 msgstr ""
229
230 #: ../../../src/GameStateConfigDesktop.cpp:83
231 #: ../../../src/GameStateConfigDesktop.cpp:751
232 msgid "Clear"
233 msgstr ""
234
235 #: ../../../src/GameStateConfigDesktop.cpp:83
236 #: ../../../src/GameStateConfigDesktop.cpp:749
237 msgid "Assign:"
238 msgstr ""
239
240 #: ../../../src/GameStateConfigDesktop.cpp:128
241 msgid "Video"
242 msgstr ""
243
244 #: ../../../src/GameStateConfigDesktop.cpp:132
245 msgid "Input"
246 msgstr "Vstup"
247
248 #: ../../../src/GameStateConfigDesktop.cpp:133
249 msgid "Keybindings"
250 msgstr "Nastavení kláves"
251
252 #: ../../../src/GameStateConfigDesktop.cpp:188
803 #: ../../../src/MenuConfig.cpp:378
804 msgid "Loot tooltip visibility"
805 msgstr ""
806
807 #: ../../../src/MenuConfig.cpp:379
808 msgid "Mini-map mode"
809 msgstr ""
810
811 #: ../../../src/MenuConfig.cpp:380
812 msgid "Always show stat bar labels"
813 msgstr ""
814
815 #: ../../../src/MenuConfig.cpp:381
816 msgid "Allow stat bar auto-hiding"
817 msgstr ""
818
819 #: ../../../src/MenuConfig.cpp:382
820 msgid "Show combat text"
821 msgstr "Zobraz bojový text"
822
823 #: ../../../src/MenuConfig.cpp:383
824 msgid "Automatically equip items"
825 msgstr ""
826
827 #: ../../../src/MenuConfig.cpp:384
828 msgid "Show hidden entity markers"
829 msgstr ""
830
831 #: ../../../src/MenuConfig.cpp:385
832 msgid "Low health notification"
833 msgstr ""
834
835 #: ../../../src/MenuConfig.cpp:386
836 msgid "Low health threshold"
837 msgstr ""
838
839 #: ../../../src/MenuConfig.cpp:389
840 msgid "Joystick"
841 msgstr ""
842
843 #: ../../../src/MenuConfig.cpp:390
844 msgid "Move hero using mouse"
845 msgstr "Chůze pomocí myši"
846
847 #: ../../../src/MenuConfig.cpp:391
848 msgid "Mouse aim"
849 msgstr "Míření myší"
850
851 #: ../../../src/MenuConfig.cpp:392
852 msgid "Do not use mouse"
853 msgstr ""
854
855 #: ../../../src/MenuConfig.cpp:393
856 msgid "Swap mouse movement button"
857 msgstr ""
858
859 #: ../../../src/MenuConfig.cpp:394
860 msgid "Attack with mouse movement"
861 msgstr ""
862
863 #: ../../../src/MenuConfig.cpp:395
864 msgid "Joystick Deadzone"
865 msgstr ""
866
867 #: ../../../src/MenuConfig.cpp:405
868 #, c-format
869 msgid "Primary binding: %s"
870 msgstr ""
871
872 #: ../../../src/MenuConfig.cpp:406
873 #, c-format
874 msgid "Alternate binding: %s"
875 msgstr ""
876
877 #: ../../../src/MenuConfig.cpp:407
878 #, c-format
879 msgid "Joystick binding: %s"
880 msgstr ""
881
882 #: ../../../src/MenuConfig.cpp:508
253883 msgid ""
254884 "Will try to store surfaces in video memory versus system memory. The effect "
255885 "this has on performance depends on the renderer."
256886 msgstr ""
257887
258 #: ../../../src/GameStateConfigDesktop.cpp:189
888 #: ../../../src/MenuConfig.cpp:509
259889 msgid ""
260890 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
261891 "windowed mode or input lag."
262892 msgstr ""
263893
264 #: ../../../src/GameStateConfigDesktop.cpp:190
894 #: ../../../src/MenuConfig.cpp:510
265895 msgid ""
266896 "When enabled, this uses the screen DPI in addition to the window dimensions "
267897 "to scale the rendering resolution. Otherwise, only the window dimensions are"
268898 " used."
269899 msgstr ""
270900
271 #: ../../../src/GameStateConfigDesktop.cpp:191
901 #: ../../../src/MenuConfig.cpp:511
272902 msgid ""
273903 "This enables parallax (non-tile) layers. Disabling this setting can improve "
274904 "performance in some cases."
275905 msgstr ""
276906
277 #: ../../../src/GameStateConfigDesktop.cpp:192
278 msgid "Experimental"
279 msgstr "Experimentální"
280
281 #: ../../../src/GameStateConfigDesktop.cpp:193
282 msgid "For handheld devices"
283 msgstr ""
284
285 #: ../../../src/GameStateConfigDesktop.cpp:211
286 msgid "Renderer"
287 msgstr ""
288
289 #: ../../../src/GameStateConfigDesktop.cpp:227
290 msgid "Full Screen Mode"
291 msgstr "Mod plné obrazovky"
292
293 #: ../../../src/GameStateConfigDesktop.cpp:231
294 msgid "Move hero using mouse"
295 msgstr "Chůze pomocí myši"
296
297 #: ../../../src/GameStateConfigDesktop.cpp:235
298 msgid "Hardware surfaces"
299 msgstr "Hardwarové povrchy"
300
301 #: ../../../src/GameStateConfigDesktop.cpp:239
302 msgid "V-Sync"
303 msgstr ""
304
305 #: ../../../src/GameStateConfigDesktop.cpp:243
306 msgid "Texture Filtering"
307 msgstr ""
308
309 #: ../../../src/GameStateConfigDesktop.cpp:247
310 msgid "DPI scaling"
311 msgstr ""
312
313 #: ../../../src/GameStateConfigDesktop.cpp:251
314 msgid "Parallax Layers"
315 msgstr ""
316
317 #: ../../../src/GameStateConfigDesktop.cpp:255
318 msgid "Allow changing gamma"
319 msgstr "Povolit změnu gammy"
320
321 #: ../../../src/GameStateConfigDesktop.cpp:259
322 msgid "Gamma"
323 msgstr ""
324
325 #: ../../../src/GameStateConfigDesktop.cpp:263
326 msgid "Use joystick"
327 msgstr "Použít joystick"
328
329 #: ../../../src/GameStateConfigDesktop.cpp:267
330 msgid "Joystick"
331 msgstr ""
332
333 #: ../../../src/GameStateConfigDesktop.cpp:283
334 msgid "Mouse aim"
335 msgstr "Míření myší"
336
337 #: ../../../src/GameStateConfigDesktop.cpp:287
338 msgid "Do not use mouse"
339 msgstr ""
340
341 #: ../../../src/GameStateConfigDesktop.cpp:291
342 msgid "Joystick Deadzone"
343 msgstr ""
344
345 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
346 msgid "Loading..."
347 msgstr "Nahrávám..."
348
349 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
350 msgid "Delete Save"
351 msgstr "Vymazat uložené pozice"
352
353 #: ../../../src/GameStateLoad.cpp:88
354 msgid "Delete this save?"
355 msgstr "Vymazat tuto pozici?"
356
357 #: ../../../src/GameStateLoad.cpp:90
358 msgid "Exit to Title"
359 msgstr "Ukončit do menu"
360
361 #: ../../../src/GameStateLoad.cpp:93
362 msgid "New Game"
363 msgstr "Nová Hra"
364
365 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
366 msgid "Choose a Slot"
367 msgstr "Vyber si pozici"
368
369 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
370 msgid "Enable a story mod to continue"
371 msgstr "Pro pokračování povol příběhový mod"
372
373 #: ../../../src/GameStateLoad.cpp:589
374 msgid "Load Game"
375 msgstr "Nahrát Hru"
376
377 #: ../../../src/GameStateLoad.cpp:695
378 msgid "Entering game world..."
379 msgstr "Vstupuji do herního světa..."
380
381 #: ../../../src/GameStateLoad.cpp:698
382 msgid "Loading saved game..."
383 msgstr "Nahrávám uloženou pozici..."
384
385 #: ../../../src/GameStateLoad.cpp:731
386 msgid "Invalid save"
387 msgstr ""
388
389 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
390 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
391 #: ../../../src/MenuPowers.cpp:1542
392 #, c-format
393 msgid "Level %d"
394 msgstr ""
395
396 #: ../../../src/GameStateNew.cpp:68
397 msgid "Create"
398 msgstr "Vytvořit"
399
400 #: ../../../src/GameStateNew.cpp:76
401 msgid "Randomize"
402 msgstr ""
403
404 #: ../../../src/GameStateNew.cpp:92
405 msgid "Choose a Portrait"
406 msgstr "Zvol si Portrét"
407
408 #: ../../../src/GameStateNew.cpp:96
409 msgid "Choose a Name"
410 msgstr "Zvol své Jméno"
411
412 #: ../../../src/GameStateNew.cpp:100
413 msgid "Permadeath?"
414 msgstr "Pernamentní smrt?"
415
416 #: ../../../src/GameStateNew.cpp:104
417 msgid "Choose a Class"
418 msgstr "Zvol své povolání"
419
420 #: ../../../src/GameStateTitle.cpp:108
421 msgid "Play Game"
422 msgstr "Hrát Hru"
423
424 #: ../../../src/GameStateTitle.cpp:111
425 msgid "Enable a core mod to continue"
426 msgstr "Pro pokračování povol mod jádra"
427
428 #: ../../../src/GameStateTitle.cpp:115
429 msgid "Configuration"
430 msgstr "Nastavení"
431
432 #: ../../../src/GameStateTitle.cpp:118
433 msgid "Credits"
434 msgstr ""
435
436 #: ../../../src/GameStateTitle.cpp:121
437 msgid "Exit Game"
438 msgstr "Ukončit Hru"
439
440 #: ../../../src/InputState.cpp:402
441 msgid "Accept"
442 msgstr "Příjmout"
443
444 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
445 msgid "Up"
446 msgstr "Nahoru"
447
448 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
449 msgid "Down"
450 msgstr "Dolů"
451
452 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
453 msgid "Left"
454 msgstr "Doleva"
455
456 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
457 msgid "Right"
458 msgstr "Doprava"
459
460 #: ../../../src/InputState.cpp:407
461 msgid "Bar1"
462 msgstr ""
463
464 #: ../../../src/InputState.cpp:408
465 msgid "Bar2"
466 msgstr ""
467
468 #: ../../../src/InputState.cpp:409
469 msgid "Bar3"
470 msgstr ""
471
472 #: ../../../src/InputState.cpp:410
473 msgid "Bar4"
474 msgstr ""
475
476 #: ../../../src/InputState.cpp:411
477 msgid "Bar5"
478 msgstr ""
479
480 #: ../../../src/InputState.cpp:412
481 msgid "Bar6"
482 msgstr ""
483
484 #: ../../../src/InputState.cpp:413
485 msgid "Bar7"
486 msgstr ""
487
488 #: ../../../src/InputState.cpp:414
489 msgid "Bar8"
490 msgstr ""
491
492 #: ../../../src/InputState.cpp:415
493 msgid "Bar9"
494 msgstr ""
495
496 #: ../../../src/InputState.cpp:416
497 msgid "Bar0"
498 msgstr ""
499
500 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
501 #: ../../../src/MenuCharacter.cpp:54
502 msgid "Character"
503 msgstr "Postava"
504
505 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
506 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
507 msgid "Inventory"
508 msgstr "Inventář"
509
510 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
511 #: ../../../src/MenuPowers.cpp:168
512 msgid "Powers"
513 msgstr "Schopnosti"
514
515 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
516 #: ../../../src/MenuLog.cpp:72
517 msgid "Log"
518 msgstr "Deník"
519
520 #: ../../../src/InputState.cpp:421
521 msgid "Main1"
522 msgstr ""
523
524 #: ../../../src/InputState.cpp:422
525 msgid "Main2"
526 msgstr ""
527
528 #: ../../../src/InputState.cpp:423
529 msgid "Ctrl"
530 msgstr ""
531
532 #: ../../../src/InputState.cpp:424
533 msgid "Shift"
534 msgstr ""
535
536 #: ../../../src/InputState.cpp:425
537 msgid "Alt"
538 msgstr ""
539
540 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
541 msgid "Delete"
542 msgstr ""
543
544 #: ../../../src/InputState.cpp:427
545 msgid "ActionBar Accept"
546 msgstr ""
547
548 #: ../../../src/InputState.cpp:428
549 msgid "ActionBar Left"
550 msgstr ""
551
552 #: ../../../src/InputState.cpp:429
553 msgid "ActionBar Right"
554 msgstr ""
555
556 #: ../../../src/InputState.cpp:430
557 msgid "ActionBar Use"
558 msgstr ""
559
560 #: ../../../src/InputState.cpp:431
561 msgid "Developer Menu"
562 msgstr ""
563
564 #: ../../../src/InputState.cpp:433
565 msgid "Left Mouse"
566 msgstr ""
567
568 #: ../../../src/InputState.cpp:434
569 msgid "Middle Mouse"
570 msgstr ""
571
572 #: ../../../src/InputState.cpp:435
573 msgid "Right Mouse"
574 msgstr ""
575
576 #: ../../../src/InputState.cpp:436
577 msgid "Wheel Up"
578 msgstr ""
579
580 #: ../../../src/InputState.cpp:437
581 msgid "Wheel Down"
582 msgstr ""
583
584 #: ../../../src/InputState.cpp:438
585 msgid "Mouse X1"
586 msgstr ""
587
588 #: ../../../src/InputState.cpp:439
589 msgid "Mouse X2"
590 msgstr ""
591
592 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
593 msgid "Unknown Item"
594 msgstr ""
595
596 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
597 #, c-format
598 msgid "%d%% Speed"
599 msgstr ""
600
601 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
602 #, c-format
603 msgid "%d%% Attack Speed"
604 msgstr ""
605
606 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
607 #: ../../../src/MenuPowers.cpp:833
608 #, c-format
609 msgid "Resistance (%s)"
610 msgstr ""
611
612 #: ../../../src/ItemManager.cpp:684
613 #, c-format
614 msgid "Requires %s"
615 msgstr ""
616
617 #: ../../../src/ItemManager.cpp:733
618 msgid "Quest Item"
619 msgstr ""
620
621 #: ../../../src/ItemManager.cpp:760
622 #, c-format
623 msgid "Quality: %s"
624 msgstr ""
625
626 #: ../../../src/ItemManager.cpp:785
627 #, c-format
628 msgid "Absorb: %d-%d"
629 msgstr "Absorbuje: %d-%d"
630
631 #: ../../../src/ItemManager.cpp:787
632 #, c-format
633 msgid "Absorb: %d"
634 msgstr "Absorbuje: %d"
635
636 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
637 #: ../../../src/MenuPowers.cpp:1134
638 #, c-format
639 msgid "Requires Level %d"
640 msgstr "Potřebuje Level %d"
641
642 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
643 #: ../../../src/MenuPowers.cpp:1125
644 #, c-format
645 msgid "Requires %s %d"
646 msgstr ""
647
648 #: ../../../src/ItemManager.cpp:849
649 #, c-format
650 msgid "Requires Class: %s"
651 msgstr ""
652
653 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
654 #, c-format
655 msgid "Buy Price: %d %s"
656 msgstr "Nákupní Cena: %d %s"
657
658 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
659 #, c-format
660 msgid "Buy Price: %d %s each"
661 msgstr "Nákupní Cena: %d %s každý"
662
663 #: ../../../src/ItemManager.cpp:886
664 #, c-format
665 msgid "Sell Price: %d %s"
666 msgstr "Prodejní Cena: %d %s"
667
668 #: ../../../src/ItemManager.cpp:888
669 #, c-format
670 msgid "Sell Price: %d %s each"
671 msgstr "Prodejní Cena: %d %s každý"
672
673 #: ../../../src/ItemManager.cpp:897
674 msgid "Set:"
675 msgstr ""
676
677 #: ../../../src/ItemManager.cpp:904
678 #, c-format
679 msgid "%d items:"
680 msgstr ""
681
682 #: ../../../src/ItemManager.cpp:917
683 #, c-format
684 msgid "Press [%s] to use"
685 msgstr ""
686
687 #: ../../../src/ItemManager.cpp:920
688 #, c-format
689 msgid "Press [%s] to read"
690 msgstr ""
691
692 #: ../../../src/MenuActionBar.cpp:87
693 msgid "Loot tooltip visibility"
694 msgstr ""
695
696 #: ../../../src/MenuActionBar.cpp:88
697 msgid "Mini-map mode"
698 msgstr ""
699
700 #: ../../../src/MenuActionBar.cpp:89
701 msgid "Always show stat bar labels"
702 msgstr ""
703
704 #: ../../../src/MenuActionBar.cpp:90
705 msgid "Show combat text"
706 msgstr "Zobraz bojový text"
707
708 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
709 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
710 #, c-format
711 msgid "Hotkey: %s"
712 msgstr ""
713
714 #: ../../../src/MenuActionBar.cpp:474
715 #, c-format
716 msgid "Default. Temporarily show all loot tooltips with '%s'."
717 msgstr ""
718
719 #: ../../../src/MenuActionBar.cpp:476
720 #, c-format
721 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
722 msgstr ""
723
724 #: ../../../src/MenuActionBar.cpp:478
725 #, c-format
726 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
727 msgstr ""
728
729 #: ../../../src/MenuActionBar.cpp:482
730 msgid "Visible"
731 msgstr ""
732
733 #: ../../../src/MenuActionBar.cpp:484
734 msgid "Visible (2x zoom)"
735 msgstr ""
736
737 #: ../../../src/MenuActionBar.cpp:486
738 msgid "Hidden"
739 msgstr ""
740
741 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
742 msgid "Enabled"
743 msgstr ""
744
745 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
746 msgid "Disabled"
747 msgstr ""
748
749 #: ../../../src/MenuActionBar.cpp:657
750 msgid "Not enough MP."
751 msgstr ""
752
753 #: ../../../src/MenuActiveEffects.cpp:124
754 #, c-format
755 msgid "x%d"
756 msgstr ""
757
758 #: ../../../src/MenuActiveEffects.cpp:219
759 msgid "Remaining:"
760 msgstr ""
761
762 #: ../../../src/MenuActiveEffects.cpp:225
763 #, c-format
764 msgid "x%d stacks"
765 msgstr ""
766
767 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
768 msgid "Name"
769 msgstr "Jméno"
770
771 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
772 msgid "Level"
773 msgstr ""
774
775 #: ../../../src/MenuCharacter.cpp:310
776 #, c-format
777 msgid "%d unspent stat point"
778 msgstr ""
779
780 #: ../../../src/MenuCharacter.cpp:313
781 #, c-format
782 msgid "%d unspent stat points"
783 msgstr ""
784
785 #: ../../../src/MenuCharacter.cpp:355
786 #, c-format
787 msgid "Reduces the damage taken from \"%s\" elemental attacks."
788 msgstr ""
789
790 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
791 #, c-format
792 msgid "XP: %d"
793 msgstr ""
794
795 #: ../../../src/MenuCharacter.cpp:367
796 #, c-format
797 msgid "Next: %d"
798 msgstr "Další: %d"
799
800 #: ../../../src/MenuCharacter.cpp:373
801 #, c-format
802 msgid "base (%d), bonus (%d)"
803 msgstr "základní (%d), bonus (%d)"
804
805 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
806 msgid "Related stats:"
807 msgstr ""
808
809 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
810 #, c-format
811 msgid "Each level grants %d."
812 msgstr ""
813
814 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
815 #, c-format
816 msgid "Each point of %s grants %d."
907 #: ../../../src/MenuConfig.cpp:512
908 msgid ""
909 "Enables the below setting that controls the screen gamma level. The behavior"
910 " of the gamma setting can vary between platforms."
911 msgstr ""
912
913 #: ../../../src/MenuConfig.cpp:513
914 msgid ""
915 "Provides additional text for information that is primarily conveyed through "
916 "color."
917 msgstr ""
918
919 #: ../../../src/MenuConfig.cpp:514
920 msgid ""
921 "Some mods will automatically hide the stat bars when they are inactive. "
922 "Disabling this option will keep them displayed at all times."
923 msgstr ""
924
925 #: ../../../src/MenuConfig.cpp:515
926 msgid ""
927 "When enabled, empty equipment slots will be filled with applicable items "
928 "when they are obtained."
929 msgstr ""
930
931 #: ../../../src/MenuConfig.cpp:516
932 msgid ""
933 "Shows a marker above enemies, allies, and the player when they are obscured "
934 "by tall objects."
935 msgstr ""
936
937 #: ../../../src/MenuConfig.cpp:517
938 msgid ""
939 "This allows the game to be controlled entirely with the keyboard (or "
940 "joystick)."
941 msgstr ""
942
943 #: ../../../src/MenuConfig.cpp:518
944 msgid ""
945 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
946 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
947 "instead of 'Main1'."
948 msgstr ""
949
950 #: ../../../src/MenuConfig.cpp:519
951 msgid ""
952 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
953 "assigned to the movement button can be used by targeting an enemy. If this "
954 "setting is disabled, it is required to use 'Shift' to access the Power "
955 "assigned to the movement button."
956 msgstr ""
957
958 #: ../../../src/MenuConfig.cpp:520
959 msgid ""
960 "The player's attacks will be aimed in the direction of the mouse cursor when"
961 " this is enabled."
962 msgstr ""
963
964 #: ../../../src/MenuConfig.cpp:571
965 msgid "Active Mods"
966 msgstr "Aktivní mody"
967
968 #: ../../../src/MenuConfig.cpp:580
969 msgid "Available Mods"
970 msgstr "Mody k dispozici"
971
972 #: ../../../src/MenuConfig.cpp:599
973 msgid "<< Disable"
974 msgstr "<< Zakázat"
975
976 #: ../../../src/MenuConfig.cpp:605
977 msgid "Enable >>"
978 msgstr "Povolit >>"
979
980 #: ../../../src/MenuConfig.cpp:1436
981 msgid "Version:"
982 msgstr ""
983
984 #: ../../../src/MenuConfig.cpp:1441
985 msgid "Game:"
986 msgstr ""
987
988 #: ../../../src/MenuConfig.cpp:1446
989 msgid "Engine version:"
990 msgstr ""
991
992 #: ../../../src/MenuConfig.cpp:1454
993 msgid "Requires mods:"
994 msgstr ""
995
996 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
997 msgid "(none)"
998 msgstr ""
999
1000 #: ../../../src/MenuConfig.cpp:1579
1001 msgid "Save & Exit"
8171002 msgstr ""
8181003
8191004 #: ../../../src/MenuDevConsole.cpp:63
9691154 msgid "HINT: Type help"
9701155 msgstr ""
9711156
972 #: ../../../src/MenuEnemy.cpp:138
1157 #: ../../../src/MenuEnemy.cpp:162
9731158 #, c-format
9741159 msgid "%s level %d"
9751160 msgstr ""
9761161
977 #: ../../../src/MenuEnemy.cpp:162
1162 #: ../../../src/MenuEnemy.cpp:186
9781163 msgid "Dead"
9791164 msgstr "Mrtvý"
9801165
981 #: ../../../src/MenuEnemy.cpp:164
1166 #: ../../../src/MenuEnemy.cpp:188
9821167 msgid "Destroyed"
9831168 msgstr ""
9841169
985 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
986 msgid "Paused"
987 msgstr ""
988
989 #: ../../../src/MenuExit.cpp:91
990 msgid "Save & Exit"
991 msgstr ""
992
993 #: ../../../src/MenuExit.cpp:92
994 msgid "Exit"
995 msgstr "Konec"
996
997 #: ../../../src/MenuExit.cpp:96
998 msgid "Continue"
999 msgstr ""
1000
1001 #: ../../../src/MenuInventory.cpp:73
1002 msgid "Automatically equip items"
1003 msgstr ""
1004
1005 #: ../../../src/MenuInventory.cpp:188
1170 #: ../../../src/MenuInventory.cpp:177
10061171 #, c-format
10071172 msgid "Lost %d%% of %s."
10081173 msgstr ""
10091174
1010 #: ../../../src/MenuInventory.cpp:195
1175 #: ../../../src/MenuInventory.cpp:184
10111176 #, c-format
10121177 msgid "Lost %d%% of total XP."
10131178 msgstr ""
10141179
1015 #: ../../../src/MenuInventory.cpp:200
1180 #: ../../../src/MenuInventory.cpp:189
10161181 #, c-format
10171182 msgid "Lost %d%% of current level XP."
10181183 msgstr ""
10191184
1020 #: ../../../src/MenuInventory.cpp:226
1185 #: ../../../src/MenuInventory.cpp:215
10211186 #, c-format
10221187 msgid "Lost %s."
10231188 msgstr ""
10241189
1025 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1190 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10261191 #, c-format
10271192 msgid "%d %s"
10281193 msgstr ""
10291194
1030 #: ../../../src/MenuInventory.cpp:317
1195 #: ../../../src/MenuInventory.cpp:300
10311196 msgid "Pick up item(s):"
10321197 msgstr ""
10331198
1034 #: ../../../src/MenuInventory.cpp:318
1199 #: ../../../src/MenuInventory.cpp:301
10351200 msgid "Use or equip item:"
10361201 msgstr ""
10371202
1038 #: ../../../src/MenuInventory.cpp:319
1203 #: ../../../src/MenuInventory.cpp:302
10391204 #, c-format
10401205 msgid "%s modifiers"
10411206 msgstr ""
10421207
1043 #: ../../../src/MenuInventory.cpp:320
1208 #: ../../../src/MenuInventory.cpp:303
10441209 msgid "Select a quantity of item:"
10451210 msgstr ""
10461211
1047 #: ../../../src/MenuInventory.cpp:323
1212 #: ../../../src/MenuInventory.cpp:306
10481213 msgid "Stash item stack:"
10491214 msgstr ""
10501215
1051 #: ../../../src/MenuInventory.cpp:325
1216 #: ../../../src/MenuInventory.cpp:308
10521217 msgid "Sell item stack:"
10531218 msgstr ""
10541219
1055 #: ../../../src/MenuInventory.cpp:592
1220 #: ../../../src/MenuInventory.cpp:574
10561221 msgid "You don't have enough of the required item."
10571222 msgstr ""
10581223
1059 #: ../../../src/MenuInventory.cpp:599
1224 #: ../../../src/MenuInventory.cpp:586
10601225 msgid "You can't use this item right now."
10611226 msgstr ""
10621227
1063 #: ../../../src/MenuInventory.cpp:611
1228 #: ../../../src/MenuInventory.cpp:598
10641229 msgid "This item can only be used from the action bar."
10651230 msgstr "Tento předmět může být použit pouze z akčního menu"
10661231
1067 #: ../../../src/MenuInventory.cpp:729
1232 #: ../../../src/MenuInventory.cpp:716
10681233 msgid "Inventory is full."
10691234 msgstr "Inventář je plný."
10701235
1071 #: ../../../src/MenuInventory.cpp:849
1236 #: ../../../src/MenuInventory.cpp:841
10721237 #, c-format
10731238 msgid "Not enough %s."
10741239 msgstr ""
10751240
1076 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1241 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
10771242 msgid "This item can not be sold."
10781243 msgstr ""
10791244
10851250 msgid "Quests"
10861251 msgstr "Úkoly"
10871252
1088 #: ../../../src/MenuManager.cpp:286
1253 #: ../../../src/MenuManager.cpp:296
10891254 #, c-format
10901255 msgid "XP: %d/%d"
10911256 msgstr ""
10921257
1093 #: ../../../src/MenuManager.cpp:827
1258 #: ../../../src/MenuManager.cpp:854
10941259 msgid "This item can not be dropped."
10951260 msgstr ""
10961261
10981263 msgid "Enter amount:"
10991264 msgstr ""
11001265
1101 #: ../../../src/MenuPowers.cpp:787
1266 #: ../../../src/MenuPowers.cpp:786
11021267 msgid "Passive"
11031268 msgstr ""
11041269
1105 #: ../../../src/MenuPowers.cpp:792
1270 #: ../../../src/MenuPowers.cpp:791
11061271 #, c-format
11071272 msgid "Costs %d MP"
11081273 msgstr "Stojí %d MP"
11091274
1110 #: ../../../src/MenuPowers.cpp:796
1275 #: ../../../src/MenuPowers.cpp:795
11111276 #, c-format
11121277 msgid "Costs %d HP"
11131278 msgstr "Stojí %d HP"
11141279
1115 #: ../../../src/MenuPowers.cpp:801
1280 #: ../../../src/MenuPowers.cpp:800
11161281 msgid "Cooldown:"
11171282 msgstr ""
11181283
1119 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1284 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11201285 msgid "Damage per second"
11211286 msgstr ""
11221287
1123 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1288 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11241289 msgid "HP per second"
11251290 msgstr ""
11261291
1127 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1292 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11281293 msgid "MP per second"
11291294 msgstr ""
11301295
1131 #: ../../../src/MenuPowers.cpp:885
1296 #: ../../../src/MenuPowers.cpp:884
11321297 msgid "Immobilize"
11331298 msgstr ""
11341299
1135 #: ../../../src/MenuPowers.cpp:893
1300 #: ../../../src/MenuPowers.cpp:892
11361301 msgid "Immunity"
11371302 msgstr ""
11381303
1139 #: ../../../src/MenuPowers.cpp:896
1304 #: ../../../src/MenuPowers.cpp:895
11401305 msgid "Immunity to damage over time"
11411306 msgstr ""
11421307
1143 #: ../../../src/MenuPowers.cpp:899
1308 #: ../../../src/MenuPowers.cpp:898
11441309 msgid "Immunity to slow"
11451310 msgstr ""
11461311
1147 #: ../../../src/MenuPowers.cpp:902
1312 #: ../../../src/MenuPowers.cpp:901
11481313 msgid "Immunity to stun"
11491314 msgstr ""
11501315
1151 #: ../../../src/MenuPowers.cpp:905
1316 #: ../../../src/MenuPowers.cpp:904
11521317 msgid "Immunity to HP steal"
11531318 msgstr ""
11541319
1155 #: ../../../src/MenuPowers.cpp:908
1320 #: ../../../src/MenuPowers.cpp:907
11561321 msgid "Immunity to MP steal"
11571322 msgstr ""
11581323
1159 #: ../../../src/MenuPowers.cpp:911
1324 #: ../../../src/MenuPowers.cpp:910
11601325 msgid "Immunity to knockback"
11611326 msgstr ""
11621327
1163 #: ../../../src/MenuPowers.cpp:914
1328 #: ../../../src/MenuPowers.cpp:913
11641329 msgid "Immunity to damage reflection"
11651330 msgstr ""
11661331
1167 #: ../../../src/MenuPowers.cpp:917
1332 #: ../../../src/MenuPowers.cpp:916
11681333 msgid "Stun"
11691334 msgstr ""
11701335
1171 #: ../../../src/MenuPowers.cpp:920
1336 #: ../../../src/MenuPowers.cpp:919
11721337 msgid "Automatic revive on death"
11731338 msgstr ""
11741339
1175 #: ../../../src/MenuPowers.cpp:923
1340 #: ../../../src/MenuPowers.cpp:922
11761341 msgid "Convert"
11771342 msgstr ""
11781343
1179 #: ../../../src/MenuPowers.cpp:926
1344 #: ../../../src/MenuPowers.cpp:925
11801345 msgid "Fear"
11811346 msgstr ""
11821347
1183 #: ../../../src/MenuPowers.cpp:929
1348 #: ../../../src/MenuPowers.cpp:928
11841349 msgid "Lifespan"
11851350 msgstr ""
11861351
1187 #: ../../../src/MenuPowers.cpp:953
1352 #: ../../../src/MenuPowers.cpp:952
11881353 msgid "Magical Shield"
11891354 msgstr ""
11901355
1191 #: ../../../src/MenuPowers.cpp:982
1356 #: ../../../src/MenuPowers.cpp:981
11921357 msgid "Healing"
11931358 msgstr ""
11941359
1195 #: ../../../src/MenuPowers.cpp:985
1360 #: ../../../src/MenuPowers.cpp:984
11961361 msgid "Knockback"
11971362 msgstr ""
11981363
1199 #: ../../../src/MenuPowers.cpp:1010
1364 #: ../../../src/MenuPowers.cpp:1009
12001365 #, c-format
12011366 msgid "%d%% chance"
12021367 msgstr ""
12031368
1204 #: ../../../src/MenuPowers.cpp:1062
1369 #: ../../../src/MenuPowers.cpp:1061
12051370 msgid "Base Accuracy"
12061371 msgstr ""
12071372
1208 #: ../../../src/MenuPowers.cpp:1082
1373 #: ../../../src/MenuPowers.cpp:1081
12091374 msgid "Base Critical Chance"
12101375 msgstr ""
12111376
1212 #: ../../../src/MenuPowers.cpp:1090
1377 #: ../../../src/MenuPowers.cpp:1089
12131378 msgid "Ignores Absorbtion"
12141379 msgstr ""
12151380
1216 #: ../../../src/MenuPowers.cpp:1095
1381 #: ../../../src/MenuPowers.cpp:1094
12171382 msgid "Ignores Avoidance"
12181383 msgstr ""
12191384
1220 #: ../../../src/MenuPowers.cpp:1100
1385 #: ../../../src/MenuPowers.cpp:1099
12211386 #, c-format
12221387 msgid "%d%% Chance to crit slowed targets"
12231388 msgstr ""
12241389
1225 #: ../../../src/MenuPowers.cpp:1105
1390 #: ../../../src/MenuPowers.cpp:1104
12261391 #, c-format
12271392 msgid "Elemental Damage (%s)"
12281393 msgstr ""
12291394
1230 #: ../../../src/MenuPowers.cpp:1114
1395 #: ../../../src/MenuPowers.cpp:1113
12311396 #, c-format
12321397 msgid "Requires a %s"
12331398 msgstr ""
12341399
1235 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1400 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12361401 #, c-format
12371402 msgid "Requires Power: %s"
12381403 msgstr "Potřebuje Schopnost: %s"
12391404
1240 #: ../../../src/MenuPowers.cpp:1163
1405 #: ../../../src/MenuPowers.cpp:1162
12411406 msgid "Click to Unlock (uses 1 Skill Point)"
12421407 msgstr ""
12431408
1244 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1409 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12451410 msgid "Requires 1 Skill Point"
12461411 msgstr ""
12471412
1248 #: ../../../src/MenuPowers.cpp:1355
1413 #: ../../../src/MenuPowers.cpp:1354
12491414 #, c-format
12501415 msgid "%d unspent skill point"
12511416 msgstr ""
12521417
1253 #: ../../../src/MenuPowers.cpp:1358
1418 #: ../../../src/MenuPowers.cpp:1357
12541419 #, c-format
12551420 msgid "%d unspent skill points"
12561421 msgstr ""
12571422
1258 #: ../../../src/MenuPowers.cpp:1388
1423 #: ../../../src/MenuPowers.cpp:1387
12591424 msgid "Next Level:"
12601425 msgstr ""
12611426
1262 #: ../../../src/MenuStash.cpp:96
1263 msgid "Shared Stash"
1264 msgstr "Sdílená Skrýš"
1265
1266 #: ../../../src/MenuStash.cpp:209
1427 #: ../../../src/MenuStash.cpp:53
1428 msgid "Private"
1429 msgstr ""
1430
1431 #: ../../../src/MenuStash.cpp:55
1432 msgid "Shared"
1433 msgstr ""
1434
1435 #: ../../../src/MenuStash.cpp:103
1436 msgid "Stash"
1437 msgstr ""
1438
1439 #: ../../../src/MenuStash.cpp:258
12671440 msgid "Can not store quest items in the stash."
12681441 msgstr ""
12691442
1270 #: ../../../src/MenuStash.cpp:219
1443 #: ../../../src/MenuStash.cpp:263
1444 msgid "This item can not be stored in the stash."
1445 msgstr ""
1446
1447 #: ../../../src/MenuStash.cpp:268
1448 msgid "This item can not be stored in the private stash."
1449 msgstr ""
1450
1451 #: ../../../src/MenuStash.cpp:273
1452 msgid "This item can not be stored in the shared stash."
1453 msgstr ""
1454
1455 #: ../../../src/MenuStash.cpp:283
12711456 msgid "Stash is full."
12721457 msgstr ""
12731458
1274 #: ../../../src/MenuTalker.cpp:454
1459 #: ../../../src/MenuStash.cpp:340
1460 #, c-format
1461 msgid "Can not store item in stash: %s"
1462 msgstr ""
1463
1464 #: ../../../src/MenuTalker.cpp:447
1465 #, c-format
1466 msgid "<dialog node %d>"
1467 msgstr ""
1468
1469 #: ../../../src/MenuTalker.cpp:455
12751470 msgid "Trade"
12761471 msgstr "Obchodovat"
12771472
12791474 msgid "Buyback"
12801475 msgstr "Koupit Zpět"
12811476
1282 #: ../../../src/MenuVendor.cpp:279
1477 #: ../../../src/MenuVendor.cpp:281
12831478 msgid "Vendor"
12841479 msgstr "Obchodník"
12851480
1286 #: ../../../src/PowerManager.cpp:1136
1481 #: ../../../src/PowerManager.cpp:1170
12871482 #, c-format
12881483 msgid "+%d Shield"
12891484 msgstr "%d Štít"
12901485
1291 #: ../../../src/PowerManager.cpp:1392
1486 #: ../../../src/PowerManager.cpp:1426
12921487 msgid "You are already transformed, untransform first."
12931488 msgstr "Už jsi transformovaný, nejdřív se transformuj zpět."
12941489
1295 #: ../../../src/PowerManager.cpp:1404
1490 #: ../../../src/PowerManager.cpp:1438
12961491 msgid "Could not untransform at this position."
12971492 msgstr ""
12981493
13001495 msgid "Completed Quests"
13011496 msgstr ""
13021497
1303 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1498 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13041499 msgid "Game saved."
13051500 msgstr ""
13061501
1307 #: ../../../src/SDLInputState.cpp:582
1502 #: ../../../src/SDLInputState.cpp:643
1503 msgid "BkSp"
1504 msgstr ""
1505
1506 #: ../../../src/SDLInputState.cpp:644
1507 msgid "Caps"
1508 msgstr ""
1509
1510 #: ../../../src/SDLInputState.cpp:645
1511 msgid "Del"
1512 msgstr ""
1513
1514 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1515 msgid "End"
1516 msgstr ""
1517
1518 #: ../../../src/SDLInputState.cpp:648
1519 msgid "Esc"
1520 msgstr ""
1521
1522 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1523 msgid "Home"
1524 msgstr ""
1525
1526 #: ../../../src/SDLInputState.cpp:650
1527 msgid "Ins"
1528 msgstr ""
1529
1530 #: ../../../src/SDLInputState.cpp:651
1531 msgid "LAlt"
1532 msgstr ""
1533
1534 #: ../../../src/SDLInputState.cpp:652
1535 msgid "LCtrl"
1536 msgstr ""
1537
1538 #: ../../../src/SDLInputState.cpp:654
1539 msgid "LShft"
1540 msgstr ""
1541
1542 #: ../../../src/SDLInputState.cpp:655
1543 msgid "Num"
1544 msgstr ""
1545
1546 #: ../../../src/SDLInputState.cpp:656
1547 msgid "PgDn"
1548 msgstr ""
1549
1550 #: ../../../src/SDLInputState.cpp:657
1551 msgid "PgUp"
1552 msgstr ""
1553
1554 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1555 msgid "Pause"
1556 msgstr ""
1557
1558 #: ../../../src/SDLInputState.cpp:659
1559 msgid "Print"
1560 msgstr ""
1561
1562 #: ../../../src/SDLInputState.cpp:660
1563 msgid "RAlt"
1564 msgstr ""
1565
1566 #: ../../../src/SDLInputState.cpp:661
1567 msgid "RCtrl"
1568 msgstr ""
1569
1570 #: ../../../src/SDLInputState.cpp:662
1571 msgid "Ret"
1572 msgstr ""
1573
1574 #: ../../../src/SDLInputState.cpp:664
1575 msgid "RShft"
1576 msgstr ""
1577
1578 #: ../../../src/SDLInputState.cpp:665
1579 msgid "SLock"
1580 msgstr ""
1581
1582 #: ../../../src/SDLInputState.cpp:666
1583 msgid "Spc"
1584 msgstr ""
1585
1586 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1587 msgid "Tab"
1588 msgstr ""
1589
1590 #: ../../../src/SDLInputState.cpp:673
13081591 msgid "Backspace"
13091592 msgstr ""
13101593
1311 #: ../../../src/SDLInputState.cpp:583
1594 #: ../../../src/SDLInputState.cpp:674
13121595 msgid "CapsLock"
13131596 msgstr ""
13141597
1315 #: ../../../src/SDLInputState.cpp:586
1316 msgid "End"
1317 msgstr ""
1318
1319 #: ../../../src/SDLInputState.cpp:587
1598 #: ../../../src/SDLInputState.cpp:678
13201599 msgid "Escape"
13211600 msgstr ""
13221601
1323 #: ../../../src/SDLInputState.cpp:588
1324 msgid "Home"
1325 msgstr ""
1326
1327 #: ../../../src/SDLInputState.cpp:589
1602 #: ../../../src/SDLInputState.cpp:680
13281603 msgid "Insert"
13291604 msgstr ""
13301605
1331 #: ../../../src/SDLInputState.cpp:590
1606 #: ../../../src/SDLInputState.cpp:681
13321607 msgid "Left Alt"
13331608 msgstr ""
13341609
1335 #: ../../../src/SDLInputState.cpp:591
1610 #: ../../../src/SDLInputState.cpp:682
13361611 msgid "Left Ctrl"
13371612 msgstr ""
13381613
1339 #: ../../../src/SDLInputState.cpp:593
1614 #: ../../../src/SDLInputState.cpp:684
13401615 msgid "Left Shift"
13411616 msgstr ""
13421617
1343 #: ../../../src/SDLInputState.cpp:594
1618 #: ../../../src/SDLInputState.cpp:685
13441619 msgid "NumLock"
13451620 msgstr ""
13461621
1347 #: ../../../src/SDLInputState.cpp:595
1622 #: ../../../src/SDLInputState.cpp:686
13481623 msgid "PageDown"
13491624 msgstr ""
13501625
1351 #: ../../../src/SDLInputState.cpp:596
1626 #: ../../../src/SDLInputState.cpp:687
13521627 msgid "PageUp"
13531628 msgstr ""
13541629
1355 #: ../../../src/SDLInputState.cpp:597
1356 msgid "Pause"
1357 msgstr ""
1358
1359 #: ../../../src/SDLInputState.cpp:598
1630 #: ../../../src/SDLInputState.cpp:689
13601631 msgid "PrintScreen"
13611632 msgstr ""
13621633
1363 #: ../../../src/SDLInputState.cpp:599
1634 #: ../../../src/SDLInputState.cpp:690
13641635 msgid "Right Alt"
13651636 msgstr ""
13661637
1367 #: ../../../src/SDLInputState.cpp:600
1638 #: ../../../src/SDLInputState.cpp:691
13681639 msgid "Right Ctrl"
13691640 msgstr ""
13701641
1371 #: ../../../src/SDLInputState.cpp:601
1642 #: ../../../src/SDLInputState.cpp:692
13721643 msgid "Return"
13731644 msgstr ""
13741645
1375 #: ../../../src/SDLInputState.cpp:603
1646 #: ../../../src/SDLInputState.cpp:694
13761647 msgid "Right Shift"
13771648 msgstr ""
13781649
1379 #: ../../../src/SDLInputState.cpp:604
1650 #: ../../../src/SDLInputState.cpp:695
13801651 msgid "ScrollLock"
13811652 msgstr ""
13821653
1383 #: ../../../src/SDLInputState.cpp:605
1654 #: ../../../src/SDLInputState.cpp:696
13841655 msgid "Space"
13851656 msgstr ""
13861657
1387 #: ../../../src/SDLInputState.cpp:606
1388 msgid "Tab"
1389 msgstr ""
1390
1391 #: ../../../src/SDLInputState.cpp:620
1658 #: ../../../src/SDLInputState.cpp:710
1659 #, c-format
1660 msgid "M%d"
1661 msgstr ""
1662
1663 #: ../../../src/SDLInputState.cpp:716
13921664 #, c-format
13931665 msgid "Mouse %d"
13941666 msgstr ""
13951667
1396 #: ../../../src/SDLInputState.cpp:628
1668 #: ../../../src/SDLInputState.cpp:726
1669 #, c-format
1670 msgid "JX%d-"
1671 msgstr ""
1672
1673 #: ../../../src/SDLInputState.cpp:728
13971674 #, c-format
13981675 msgid "Axis %d -"
13991676 msgstr ""
14001677
1401 #: ../../../src/SDLInputState.cpp:630
1678 #: ../../../src/SDLInputState.cpp:732
1679 #, c-format
1680 msgid "JX%d+"
1681 msgstr ""
1682
1683 #: ../../../src/SDLInputState.cpp:734
14021684 #, c-format
14031685 msgid "Axis %d +"
14041686 msgstr ""
14051687
1406 #: ../../../src/SDLInputState.cpp:633
1688 #: ../../../src/SDLInputState.cpp:739
1689 #, c-format
1690 msgid "JB%d"
1691 msgstr ""
1692
1693 #: ../../../src/SDLInputState.cpp:741
14071694 #, c-format
14081695 msgid "Button %d"
14091696 msgstr ""
14101697
1411 #: ../../../src/SDLInputState.cpp:637
1412 msgid "(none)"
1413 msgstr ""
1414
1415 #: ../../../src/SDLInputState.cpp:677
1698 #: ../../../src/SDLInputState.cpp:788
14161699 msgid "Touch control D-Pad"
14171700 msgstr ""
14181701
1419 #: ../../../src/SDLInputState.cpp:701
1702 #: ../../../src/SDLInputState.cpp:812
14201703 msgid "Touch control buttons"
14211704 msgstr ""
14221705
1423 #: ../../../src/SDLInputState.cpp:716
1706 #: ../../../src/SDLInputState.cpp:827
14241707 msgid "Tap"
14251708 msgstr ""
14261709
1427 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1428 #: ../../../src/SDLInputState.cpp:768
1710 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1711 #, c-format
1712 msgid "Can not bind: %s"
1713 msgstr ""
1714
1715 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1716 #: ../../../src/SDLInputState.cpp:901
14291717 #, c-format
14301718 msgid "'%s' is no longer bound to:"
14311719 msgstr ""
15881876 msgid "k"
15891877 msgstr ""
15901878
1591 #: ../../../src/Utils.cpp:580
1879 #: ../../../src/Utils.cpp:616
15921880 #, c-format
15931881 msgid "%s second"
15941882 msgstr "1%s sekunda"
15951883
1596 #: ../../../src/Utils.cpp:583
1884 #: ../../../src/Utils.cpp:619
15971885 #, c-format
15981886 msgid "%s seconds"
15991887 msgstr "1%s sekundy"
33 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
44 #
55 # Translators:
6 # Justin Jacobs <jajdorkster@gmail.com>, 2018
7 # Wuzzy <almikes@aol.com>, 2018
8 # Fyrenic <fyrenic@protonmail.com>, 2018
6 # Justin Jacobs <jajdorkster@gmail.com>, 2019
7 # a287ca4390ac1060252ff7344e07cfb3_ddf63c0 <12d9bb92f00a9c2841133eeaac7a25bb_727560>, 2019
8 # Wuzzy <almikes@aol.com>, 2020
99 #
1010 #, fuzzy
1111 msgid ""
1212 msgstr ""
1313 "Project-Id-Version: PACKAGE VERSION\n"
1414 "Report-Msgid-Bugs-To: \n"
15 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
15 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1616 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
17 "Last-Translator: Fyrenic <fyrenic@protonmail.com>, 2018\n"
17 "Last-Translator: Wuzzy <almikes@aol.com>, 2020\n"
1818 "Language-Team: German (https://www.transifex.com/flareorg/teams/84925/de/)\n"
1919 "MIME-Version: 1.0\n"
2020 "Content-Type: text/plain; charset=UTF-8\n"
2222 "Language: de\n"
2323 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
2424
25 #: ../../../src/Avatar.cpp:367
25 #: ../../../src/Avatar.cpp:387
26 msgid "Your health is low!"
27 msgstr "Deine Gesundheit ist niedrig!"
28
29 #: ../../../src/Avatar.cpp:419
2630 #, c-format
2731 msgid "Congratulations, you have reached level %d!"
2832 msgstr "Glückwunsch, du hast Stufe %d erreicht!"
2933
30 #: ../../../src/Avatar.cpp:369
31 msgid "You may increase one attribute through the Character Menu."
32 msgstr "Du kannst ein Attribut im Charaktermenü erhöhen."
33
34 #: ../../../src/Avatar.cpp:583
34 #: ../../../src/Avatar.cpp:421
35 msgid "You may increase one or more attributes through the Character Menu."
36 msgstr "Du kannst einen oder mehrere Attribute im Charakter-Menü erhöhen."
37
38 #: ../../../src/Avatar.cpp:425
39 msgid "You may unlock one or more abilities through the Powers Menu."
40 msgstr ""
41 "Du kannst eine oder mehrere Fähigkeiten im Fähigkeiten-Menü freischalten."
42
43 #: ../../../src/Avatar.cpp:692
3544 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3645 msgstr ""
3746 "Du wurdest besiegt, das Spiel ist vorbei! Kehre mit ${INPUT_CONTINUE} zum "
3847 "Hauptmenü zurück."
3948
40 #: ../../../src/Avatar.cpp:589
49 #: ../../../src/Avatar.cpp:698
4150 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
42 msgstr "Du wurdest besiegt. Drücke ${INPUT_CONTINUE} um fortzufahren"
43
44 #: ../../../src/Avatar.cpp:839
51 msgstr "Du wurdest besiegt. Drücke ${INPUT_CONTINUE}, um fortzufahren."
52
53 #: ../../../src/Avatar.cpp:949
4554 msgid "Transformation expired. You have been moved back to a safe place."
4655 msgstr ""
4756 "Die Transformation ist aufgehoben. Du wurdest an einen sicheren Ort "
5261 msgid "%d %s removed."
5362 msgstr "%d %s entfernt."
5463
55 #: ../../../src/CampaignManager.cpp:162
64 #: ../../../src/CampaignManager.cpp:165
65 #, c-format
66 msgid "%s x%d removed."
67 msgstr "%s ×%d entfernt."
68
69 #: ../../../src/CampaignManager.cpp:167
5670 #, c-format
5771 msgid "%s removed."
5872 msgstr "%s entfernt."
5973
60 #: ../../../src/CampaignManager.cpp:175
74 #: ../../../src/CampaignManager.cpp:180
6175 #, c-format
6276 msgid "You receive %s."
6377 msgstr "Du erhältst %s."
6478
65 #: ../../../src/CampaignManager.cpp:177
79 #: ../../../src/CampaignManager.cpp:182
6680 #, c-format
6781 msgid "You receive %s x%d."
6882 msgstr "Du erhältst %s ×%d."
6983
70 #: ../../../src/CampaignManager.cpp:186
84 #: ../../../src/CampaignManager.cpp:191
7185 #, c-format
7286 msgid "You receive %d %s."
7387 msgstr "Du erhältst %d %s."
7488
75 #: ../../../src/CampaignManager.cpp:195
89 #: ../../../src/CampaignManager.cpp:200
7690 #, c-format
7791 msgid "You receive %d XP."
7892 msgstr "Du erhältst %d EP."
7993
80 #: ../../../src/CampaignManager.cpp:201
94 #: ../../../src/CampaignManager.cpp:206
8195 msgid "HP restored."
8296 msgstr "TP wiederhergestellt."
8397
84 #: ../../../src/CampaignManager.cpp:205
98 #: ../../../src/CampaignManager.cpp:210
8599 msgid "MP restored."
86100 msgstr "MP wiederhergestellt."
87101
88 #: ../../../src/CampaignManager.cpp:210
102 #: ../../../src/CampaignManager.cpp:215
89103 msgid "HP and MP restored."
90104 msgstr "TP und MP wiederhergestellt."
91105
92 #: ../../../src/CampaignManager.cpp:214
106 #: ../../../src/CampaignManager.cpp:219
93107 msgid "Negative effects removed."
94108 msgstr "Negative Wirkungen entfernt."
95109
96 #: ../../../src/CampaignManager.cpp:220
110 #: ../../../src/CampaignManager.cpp:225
97111 msgid "HP and MP restored, negative effects removed"
98 msgstr "TP und MP wiederhergestellt, Negativwirkungen entfernt."
112 msgstr "TP und MP wiederhergestellt, Negativwirkungen entfernt"
99113
100114 #: ../../../src/DeviceList.cpp:56
101115 msgid ""
117131 "\n"
118132 "Der Standard-Renderer, der oft schneller als der SDL-Software-Renderer ist."
119133
120 #: ../../../src/EngineSettings.cpp:561
134 #: ../../../src/EngineSettings.cpp:572
121135 msgid "Adventurer"
122136 msgstr "Abenteurer"
123137
124 #: ../../../src/Entity.cpp:511
138 #: ../../../src/Entity.cpp:522
125139 msgid "miss"
126140 msgstr "verfehlt"
127141
128 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
129 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
142 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
143 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
130144 #, c-format
131145 msgid "+%d HP"
132146 msgstr "+%d TP"
133147
134 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
135 #: ../../../src/StatBlock.cpp:822
148 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
149 #: ../../../src/StatBlock.cpp:830
136150 #, c-format
137151 msgid "+%d MP"
138152 msgstr "+%d MP"
139153
140 #: ../../../src/EventManager.cpp:738
154 #: ../../../src/EventManager.cpp:782
141155 msgid "Unknown destination"
142156 msgstr "Unbekanntes Ziel"
143157
144 #: ../../../src/GameStateConfigBase.cpp:89
145 #: ../../../src/GameStateConfigBase.cpp:110
158 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
159 msgid "Loading..."
160 msgstr "Laden ..."
161
162 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
163 msgid "Delete Save"
164 msgstr "Spiel löschen"
165
166 #: ../../../src/GameStateLoad.cpp:90
167 msgid "Delete this save?"
168 msgstr "Diesen Spielstand löschen?"
169
170 #: ../../../src/GameStateLoad.cpp:92
171 msgid "Exit to Title"
172 msgstr "Hauptmenü"
173
174 #: ../../../src/GameStateLoad.cpp:95
175 msgid "New Game"
176 msgstr "Neues Spiel"
177
178 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
179 msgid "Choose a Slot"
180 msgstr "Eintrag wählen"
181
182 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
183 msgid "Enable a story mod to continue"
184 msgstr "Aktiviere eine Erzähl-Mod, um fortzufahren"
185
186 #: ../../../src/GameStateLoad.cpp:597
187 msgid "Load Game"
188 msgstr "Spiel laden"
189
190 #: ../../../src/GameStateLoad.cpp:706
191 msgid "Entering game world..."
192 msgstr "Spielwelt wird betreten ..."
193
194 #: ../../../src/GameStateLoad.cpp:709
195 msgid "Loading saved game..."
196 msgstr "Spielstand wird geladen ..."
197
198 #: ../../../src/GameStateLoad.cpp:742
199 msgid "Invalid save"
200 msgstr "Ungültiger Spielstand"
201
202 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
203 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
204 #: ../../../src/MenuPowers.cpp:1543
205 #, c-format
206 msgid "Level %d"
207 msgstr "Stufe %d"
208
209 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
210 #: ../../../src/MenuConfig.cpp:244
211 msgid "Cancel"
212 msgstr "Abbrechen"
213
214 #: ../../../src/GameStateNew.cpp:68
215 msgid "Create"
216 msgstr "Erstellen"
217
218 #: ../../../src/GameStateNew.cpp:76
219 msgid "Randomize"
220 msgstr "Würfeln"
221
222 #: ../../../src/GameStateNew.cpp:92
223 msgid "Choose a Portrait"
224 msgstr "Wähle dein Porträt"
225
226 #: ../../../src/GameStateNew.cpp:96
227 msgid "Choose a Name"
228 msgstr "Wähle deinen Namen"
229
230 #: ../../../src/GameStateNew.cpp:100
231 msgid "Permadeath?"
232 msgstr "Dauerhafter Tod?"
233
234 #: ../../../src/GameStateNew.cpp:104
235 msgid "Choose a Class"
236 msgstr "Wähle eine Klasse"
237
238 #: ../../../src/GameStateTitle.cpp:107
239 msgid "Play Game"
240 msgstr "Spiel starten"
241
242 #: ../../../src/GameStateTitle.cpp:110
243 msgid "Enable a core mod to continue"
244 msgstr "Aktiviere eine Kern-Mod, um fortzufahren"
245
246 #: ../../../src/GameStateTitle.cpp:114
247 msgid "Configuration"
248 msgstr "Einstellungen"
249
250 #: ../../../src/GameStateTitle.cpp:117
251 msgid "Credits"
252 msgstr "Mitwirkende"
253
254 #: ../../../src/GameStateTitle.cpp:120
255 msgid "Exit Game"
256 msgstr "Beenden"
257
258 #: ../../../src/InputState.cpp:407
259 msgid "Accept"
260 msgstr "Bestätigen"
261
262 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
263 #: ../../../src/SDLInputState.cpp:698
264 msgid "Up"
265 msgstr "Hoch"
266
267 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
268 #: ../../../src/SDLInputState.cpp:676
269 msgid "Down"
270 msgstr "Runter"
271
272 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
273 #: ../../../src/SDLInputState.cpp:683
274 msgid "Left"
275 msgstr "Links"
276
277 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
278 #: ../../../src/SDLInputState.cpp:693
279 msgid "Right"
280 msgstr "Rechts"
281
282 #: ../../../src/InputState.cpp:412
283 msgid "Bar1"
284 msgstr "Aktionsleiste 1"
285
286 #: ../../../src/InputState.cpp:413
287 msgid "Bar2"
288 msgstr "Aktionsleiste 2"
289
290 #: ../../../src/InputState.cpp:414
291 msgid "Bar3"
292 msgstr "Aktionsleiste 3"
293
294 #: ../../../src/InputState.cpp:415
295 msgid "Bar4"
296 msgstr "Aktionsleiste 4"
297
298 #: ../../../src/InputState.cpp:416
299 msgid "Bar5"
300 msgstr "Aktionsleiste 5"
301
302 #: ../../../src/InputState.cpp:417
303 msgid "Bar6"
304 msgstr "Aktionsleiste 6"
305
306 #: ../../../src/InputState.cpp:418
307 msgid "Bar7"
308 msgstr "Aktionsleiste 7"
309
310 #: ../../../src/InputState.cpp:419
311 msgid "Bar8"
312 msgstr "Aktionsleiste 8"
313
314 #: ../../../src/InputState.cpp:420
315 msgid "Bar9"
316 msgstr "Aktionsleiste 9"
317
318 #: ../../../src/InputState.cpp:421
319 msgid "Bar0"
320 msgstr "Aktionsleiste 0"
321
322 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
323 #: ../../../src/MenuCharacter.cpp:54
324 msgid "Character"
325 msgstr "Charakter"
326
327 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
328 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
329 msgid "Inventory"
330 msgstr "Inventar"
331
332 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
333 #: ../../../src/MenuPowers.cpp:167
334 msgid "Powers"
335 msgstr "Fähigkeiten"
336
337 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
338 #: ../../../src/MenuLog.cpp:72
339 msgid "Log"
340 msgstr "Journal"
341
342 #: ../../../src/InputState.cpp:426
343 msgid "Main1"
344 msgstr "Aktionstaste 1"
345
346 #: ../../../src/InputState.cpp:427
347 msgid "Main2"
348 msgstr "Aktionstaste 2"
349
350 #: ../../../src/InputState.cpp:428
351 msgid "Ctrl"
352 msgstr "Strg"
353
354 #: ../../../src/InputState.cpp:429
355 msgid "Shift"
356 msgstr "Umschalt"
357
358 #: ../../../src/InputState.cpp:430
359 msgid "Alt"
360 msgstr "Alt"
361
362 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
363 msgid "Delete"
364 msgstr "Entf"
365
366 #: ../../../src/InputState.cpp:432
367 msgid "ActionBar Accept"
368 msgstr "Leiste Annehmen"
369
370 #: ../../../src/InputState.cpp:433
371 msgid "ActionBar Left"
372 msgstr "Leiste Links"
373
374 #: ../../../src/InputState.cpp:434
375 msgid "ActionBar Right"
376 msgstr "Leiste Rechts"
377
378 #: ../../../src/InputState.cpp:435
379 msgid "ActionBar Use"
380 msgstr "Leiste Benutzen"
381
382 #: ../../../src/InputState.cpp:436
383 msgid "Developer Menu"
384 msgstr "Entwicklermenü"
385
386 #: ../../../src/InputState.cpp:438
387 msgid "Left Mouse"
388 msgstr "Maus links"
389
390 #: ../../../src/InputState.cpp:439
391 msgid "Middle Mouse"
392 msgstr "Maus mittig"
393
394 #: ../../../src/InputState.cpp:440
395 msgid "Right Mouse"
396 msgstr "Maus rechts"
397
398 #: ../../../src/InputState.cpp:441
399 msgid "Wheel Up"
400 msgstr "Mausrad auf"
401
402 #: ../../../src/InputState.cpp:442
403 msgid "Wheel Down"
404 msgstr "Mausrad ab"
405
406 #: ../../../src/InputState.cpp:443
407 msgid "Mouse X1"
408 msgstr "Maus X1"
409
410 #: ../../../src/InputState.cpp:444
411 msgid "Mouse X2"
412 msgstr "Maus X2"
413
414 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
415 msgid "Unknown Item"
416 msgstr "Unbekannter Gegenstand"
417
418 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
419 #, c-format
420 msgid "%d%% Speed"
421 msgstr "%d%% Geschwindigkeit"
422
423 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
424 #, c-format
425 msgid "%d%% Attack Speed"
426 msgstr "%d%% Angriffsgeschwindigkeit"
427
428 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
429 #: ../../../src/MenuPowers.cpp:832
430 #, c-format
431 msgid "Resistance (%s)"
432 msgstr "Widerstand (%s)"
433
434 #: ../../../src/ItemManager.cpp:714
435 #, c-format
436 msgid "Requires %s"
437 msgstr "Benötigt %s"
438
439 #: ../../../src/ItemManager.cpp:763
440 msgid "Quest Item"
441 msgstr "Aufgabengegenstand"
442
443 #: ../../../src/ItemManager.cpp:790
444 #, c-format
445 msgid "Quality: %s"
446 msgstr "Qualität: %s"
447
448 #: ../../../src/ItemManager.cpp:815
449 #, c-format
450 msgid "Absorb: %d-%d"
451 msgstr "Absorbieren: %d-%d"
452
453 #: ../../../src/ItemManager.cpp:817
454 #, c-format
455 msgid "Absorb: %d"
456 msgstr "Absorbieren: %d"
457
458 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
459 #: ../../../src/MenuPowers.cpp:1133
460 #, c-format
461 msgid "Requires Level %d"
462 msgstr "Benötigt Stufe %d"
463
464 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
465 #: ../../../src/MenuPowers.cpp:1124
466 #, c-format
467 msgid "Requires %s %d"
468 msgstr "Benötigt %s %d"
469
470 #: ../../../src/ItemManager.cpp:879
471 #, c-format
472 msgid "Requires Class: %s"
473 msgstr "Benötigt Klasse: %s"
474
475 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
476 #, c-format
477 msgid "Buy Price: %d %s"
478 msgstr "Kaufpreis: %d %s"
479
480 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
481 #, c-format
482 msgid "Buy Price: %d %s each"
483 msgstr "Kaufpreis: je %d %s"
484
485 #: ../../../src/ItemManager.cpp:916
486 #, c-format
487 msgid "Sell Price: %d %s"
488 msgstr "Verkaufspreis: %d %s"
489
490 #: ../../../src/ItemManager.cpp:918
491 #, c-format
492 msgid "Sell Price: %d %s each"
493 msgstr "Verkaufspreis: je %d %s"
494
495 #: ../../../src/ItemManager.cpp:927
496 msgid "Set:"
497 msgstr "Set:"
498
499 #: ../../../src/ItemManager.cpp:934
500 #, c-format
501 msgid "%d items:"
502 msgstr "%d Gegenstände:"
503
504 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
505 #, c-format
506 msgid "Press [%s] to use"
507 msgstr "Drücke [%s] zum Verwenden"
508
509 #: ../../../src/ItemManager.cpp:951
510 #, c-format
511 msgid "Press [%s] to read"
512 msgstr "Drücke [%s] zum Lesen"
513
514 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
515 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
516 #, c-format
517 msgid "Hotkey: %s"
518 msgstr "Schnelltaste: %s"
519
520 #: ../../../src/MenuActionBar.cpp:599
521 msgid "Not enough MP."
522 msgstr "Nicht genügend MP."
523
524 #: ../../../src/MenuActiveEffects.cpp:124
525 #, c-format
526 msgid "x%d"
527 msgstr "×%d"
528
529 #: ../../../src/MenuActiveEffects.cpp:219
530 msgid "Remaining:"
531 msgstr "Verbleibend:"
532
533 #: ../../../src/MenuActiveEffects.cpp:225
534 #, c-format
535 msgid "x%d stacks"
536 msgstr "×%d Stapel"
537
538 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
539 msgid "Name"
540 msgstr "Name"
541
542 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
543 msgid "Level"
544 msgstr "Stufe"
545
546 #: ../../../src/MenuCharacter.cpp:310
547 #, c-format
548 msgid "%d unspent stat point"
549 msgstr "%d verfügbarer Wertepunkt"
550
551 #: ../../../src/MenuCharacter.cpp:313
552 #, c-format
553 msgid "%d unspent stat points"
554 msgstr "%d verfügbare Wertepunkte"
555
556 #: ../../../src/MenuCharacter.cpp:355
557 #, c-format
558 msgid "Reduces the damage taken from \"%s\" elemental attacks."
559 msgstr "Reduziert den Schaden von „%s“-Elementarangriffen."
560
561 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
562 #, c-format
563 msgid "XP: %d"
564 msgstr "EP: %d"
565
566 #: ../../../src/MenuCharacter.cpp:367
567 #, c-format
568 msgid "Next: %d"
569 msgstr "Nächste: %d"
570
571 #: ../../../src/MenuCharacter.cpp:373
572 #, c-format
573 msgid "base (%d), bonus (%d)"
574 msgstr "Basis (%d), Bonus (%d)"
575
576 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
577 msgid "Related stats:"
578 msgstr "Verwandte Werte:"
579
580 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
581 #, c-format
582 msgid "Each level grants %d."
583 msgstr "Jede Stufe gewährt %d."
584
585 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
586 #, c-format
587 msgid "Each point of %s grants %d."
588 msgstr "Jeder Punkt %s gewährt %d."
589
590 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
591 msgid "Clear"
592 msgstr "Löschen"
593
594 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
595 msgid "Assign:"
596 msgstr "Zuweisen:"
597
598 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
146599 msgid "Defaults"
147600 msgstr "Standard"
148601
149 #: ../../../src/GameStateConfigBase.cpp:89
602 #: ../../../src/MenuConfig.cpp:123
150603 msgid "Reset ALL settings?"
151604 msgstr "ALLE Einstellungen zurücksetzen?"
152605
153 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
606 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
154607 msgid "OK"
155608 msgstr "OK"
156609
157 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
158 #: ../../../src/InputState.cpp:401
159 msgid "Cancel"
160 msgstr "Abbrechen"
161
162 #: ../../../src/GameStateConfigBase.cpp:160
163 #: ../../../src/GameStateConfigDesktop.cpp:130
610 #: ../../../src/MenuConfig.cpp:246
611 msgid "Continue"
612 msgstr "Fortfahren"
613
614 #: ../../../src/MenuConfig.cpp:248
615 msgid "Save Game"
616 msgstr "Spiel speichern"
617
618 #: ../../../src/MenuConfig.cpp:291
619 msgid "Default"
620 msgstr "Standard"
621
622 #: ../../../src/MenuConfig.cpp:291
623 msgid ""
624 "Show all loot tooltips, except for those that would be obscured by the "
625 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
626 msgstr ""
627 "Zeige alle Beute-Hinweise, außer diejenigen, welche durch den Spieler oder "
628 "einen Gegner verdeckt werden. Zeige temporär alle Hinweise mit „Alt“."
629
630 #: ../../../src/MenuConfig.cpp:292
631 msgid "Show all"
632 msgstr "Alles anzeigen"
633
634 #: ../../../src/MenuConfig.cpp:292
635 msgid ""
636 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
637 msgstr ""
638 "Zeige alle Beute-Hinweise. Verstecke temporär alle Hinweise mit „Alt“."
639
640 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
641 msgid "Hidden"
642 msgstr "Versteckt"
643
644 #: ../../../src/MenuConfig.cpp:293
645 msgid ""
646 "Always hide loot tooltips, except for when a piece of loot is hovered with "
647 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
648 msgstr ""
649 "Verstecke alle Beute-Hinweise, außer der Mauszeiger zeigt auf den "
650 "Gegenstand. Zeige temporär alle Hinweise mit „Alt“."
651
652 #: ../../../src/MenuConfig.cpp:296
653 msgid "Visible"
654 msgstr "Sichtbar"
655
656 #: ../../../src/MenuConfig.cpp:297
657 msgid "Visible (2x zoom)"
658 msgstr "Sichtbar (2×-Zoom)"
659
660 #: ../../../src/MenuConfig.cpp:301
661 msgid ""
662 "Controls the type of warning to be activated when the player is below the "
663 "low health threshold."
664 msgstr ""
665 "Legt die Art der Warnung fest, die benutzt wird, wenn sich die "
666 "Spielergesundheit unter dem Niedrige-Gesundheit-Schwellwert befindet."
667
668 #: ../../../src/MenuConfig.cpp:302
669 msgid "- Display a message"
670 msgstr "- Nachricht anzeigen"
671
672 #: ../../../src/MenuConfig.cpp:303
673 msgid "- Play a sound"
674 msgstr "- Ton abspielen"
675
676 #: ../../../src/MenuConfig.cpp:304
677 msgid "- Change the cursor"
678 msgstr "- Mauszeiger ändern"
679
680 #: ../../../src/MenuConfig.cpp:306
681 msgid "Disabled"
682 msgstr "Deaktiviert"
683
684 #: ../../../src/MenuConfig.cpp:307
685 msgid "All"
686 msgstr "Alle"
687
688 #: ../../../src/MenuConfig.cpp:308
689 msgid "Message & Cursor"
690 msgstr "Nachricht u. Mauszeiger"
691
692 #: ../../../src/MenuConfig.cpp:309
693 msgid "Message & Sound"
694 msgstr "Nachricht u. Ton"
695
696 #: ../../../src/MenuConfig.cpp:310
697 msgid "Sound & Cursor"
698 msgstr "Ton u. Mauszeiger"
699
700 #: ../../../src/MenuConfig.cpp:311
701 msgid "Message"
702 msgstr "Nachricht"
703
704 #: ../../../src/MenuConfig.cpp:312
705 msgid "Cursor"
706 msgstr "Mauszeiger"
707
708 #: ../../../src/MenuConfig.cpp:313
709 msgid "Sound"
710 msgstr "Ton"
711
712 #: ../../../src/MenuConfig.cpp:319
713 msgid ""
714 "When the player's health drops below the given threshold, the low health "
715 "notifications are triggered if one or more of them is enabled."
716 msgstr ""
717 "Wenn die Spielergesundheit unter den angegebenem Wert fällt, werden die "
718 "Warnungen für niedrige Gesundheit aktiviert, wenn eine davon aktiviert ist."
719
720 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
721 msgid "Exit"
722 msgstr "Beenden"
723
724 #: ../../../src/MenuConfig.cpp:333
725 msgid "Video"
726 msgstr "Grafik"
727
728 #: ../../../src/MenuConfig.cpp:334
164729 msgid "Audio"
165730 msgstr "Ton"
166731
167 #: ../../../src/GameStateConfigBase.cpp:161
168 #: ../../../src/GameStateConfigDesktop.cpp:131
732 #: ../../../src/MenuConfig.cpp:335
169733 msgid "Interface"
170734 msgstr "Interface"
171735
172 #: ../../../src/GameStateConfigBase.cpp:162
173 #: ../../../src/GameStateConfigDesktop.cpp:134
736 #: ../../../src/MenuConfig.cpp:336
737 msgid "Input"
738 msgstr "Eingabe"
739
740 #: ../../../src/MenuConfig.cpp:337
741 msgid "Keybindings"
742 msgstr "Tastenbelegung"
743
744 #: ../../../src/MenuConfig.cpp:338
174745 msgid "Mods"
175746 msgstr "Mods"
176747
177 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
748 #: ../../../src/MenuConfig.cpp:350
749 msgid "Paused"
750 msgstr "Pausiert"
751
752 #: ../../../src/MenuConfig.cpp:353
753 msgid "Time Played"
754 msgstr "Spielzeit"
755
756 #: ../../../src/MenuConfig.cpp:359
757 msgid "Renderer"
758 msgstr "Renderer"
759
760 #: ../../../src/MenuConfig.cpp:360
761 msgid "Full Screen Mode"
762 msgstr "Vollbildmodus"
763
764 #: ../../../src/MenuConfig.cpp:361
765 msgid "Hardware surfaces"
766 msgstr "Hardwareoberflächen"
767
768 #: ../../../src/MenuConfig.cpp:362
769 msgid "V-Sync"
770 msgstr "V-Sync"
771
772 #: ../../../src/MenuConfig.cpp:363
773 msgid "Texture Filtering"
774 msgstr "Texturfilter"
775
776 #: ../../../src/MenuConfig.cpp:364
777 msgid "DPI scaling"
778 msgstr "DPI-Skalierung"
779
780 #: ../../../src/MenuConfig.cpp:365
781 msgid "Parallax Layers"
782 msgstr "Parallax-Ebenen"
783
784 #: ../../../src/MenuConfig.cpp:366
785 msgid "Allow changing gamma"
786 msgstr "Änderbarer Gamma-Wert"
787
788 #: ../../../src/MenuConfig.cpp:367
789 msgid "Gamma"
790 msgstr "Gamma-Wert"
791
792 #: ../../../src/MenuConfig.cpp:369
793 msgid "Sound Volume"
794 msgstr "Soundlautstärke"
795
796 #: ../../../src/MenuConfig.cpp:370
178797 msgid "Music Volume"
179798 msgstr "Musiklautstärke"
180799
181 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
182 msgid "Sound Volume"
183 msgstr "Soundlautstärke"
184
185 #: ../../../src/GameStateConfigBase.cpp:257
800 #: ../../../src/MenuConfig.cpp:372
186801 msgid "Language"
187802 msgstr "Sprache"
188803
189 #: ../../../src/GameStateConfigBase.cpp:266
804 #: ../../../src/MenuConfig.cpp:373
190805 msgid "Show FPS"
191806 msgstr "Framerate anzeigen"
192807
193 #: ../../../src/GameStateConfigBase.cpp:270
808 #: ../../../src/MenuConfig.cpp:374
809 msgid "Hardware mouse cursor"
810 msgstr "Hardware-Mauszeiger"
811
812 #: ../../../src/MenuConfig.cpp:375
194813 msgid "Colorblind Mode"
195814 msgstr "Modus für Farbblinde"
196815
197 #: ../../../src/GameStateConfigBase.cpp:274
198 msgid "Hardware mouse cursor"
199 msgstr "Hardware-Mauszeiger"
200
201 #: ../../../src/GameStateConfigBase.cpp:278
816 #: ../../../src/MenuConfig.cpp:376
202817 msgid "Developer Mode"
203818 msgstr "Entwicklermodus"
204819
205 #: ../../../src/GameStateConfigBase.cpp:282
820 #: ../../../src/MenuConfig.cpp:377
206821 msgid "Subtitles"
207822 msgstr "Untertitel"
208823
209 #: ../../../src/GameStateConfigBase.cpp:286
210 msgid "Active Mods"
211 msgstr "Aktive Mods"
212
213 #: ../../../src/GameStateConfigBase.cpp:295
214 msgid "Available Mods"
215 msgstr "Verfügbare Mods"
216
217 #: ../../../src/GameStateConfigBase.cpp:314
218 msgid "<< Disable"
219 msgstr "<< Deaktivieren"
220
221 #: ../../../src/GameStateConfigBase.cpp:320
222 msgid "Enable >>"
223 msgstr "Aktivieren >>"
224
225 #: ../../../src/GameStateConfigBase.cpp:873
226 msgid "Version:"
227 msgstr "Version:"
228
229 #: ../../../src/GameStateConfigBase.cpp:878
230 msgid "Game:"
231 msgstr "Spiel:"
232
233 #: ../../../src/GameStateConfigBase.cpp:883
234 msgid "Engine version:"
235 msgstr "Engine-Version:"
236
237 #: ../../../src/GameStateConfigBase.cpp:891
238 msgid "Requires mods:"
239 msgstr "Benötigte Mods:"
240
241 #: ../../../src/GameStateConfigDesktop.cpp:83
242 #: ../../../src/GameStateConfigDesktop.cpp:751
243 msgid "Clear"
244 msgstr "Löschen"
245
246 #: ../../../src/GameStateConfigDesktop.cpp:83
247 #: ../../../src/GameStateConfigDesktop.cpp:749
248 msgid "Assign:"
249 msgstr "Zuweisen:"
250
251 #: ../../../src/GameStateConfigDesktop.cpp:128
252 msgid "Video"
253 msgstr "Grafik"
254
255 #: ../../../src/GameStateConfigDesktop.cpp:132
256 msgid "Input"
257 msgstr "Eingabe"
258
259 #: ../../../src/GameStateConfigDesktop.cpp:133
260 msgid "Keybindings"
261 msgstr "Tastenbelegung"
262
263 #: ../../../src/GameStateConfigDesktop.cpp:188
824 #: ../../../src/MenuConfig.cpp:378
825 msgid "Loot tooltip visibility"
826 msgstr "Sichtbarkeit der Beute-Hinweise"
827
828 #: ../../../src/MenuConfig.cpp:379
829 msgid "Mini-map mode"
830 msgstr "Minikarten-Modus"
831
832 #: ../../../src/MenuConfig.cpp:380
833 msgid "Always show stat bar labels"
834 msgstr "Immer Werteleistenbeschriftung anzeigen"
835
836 #: ../../../src/MenuConfig.cpp:381
837 msgid "Allow stat bar auto-hiding"
838 msgstr "Erlaube automatisches Verstecken der Werteleiste"
839
840 #: ../../../src/MenuConfig.cpp:382
841 msgid "Show combat text"
842 msgstr "Kampftexte anzeigen"
843
844 #: ../../../src/MenuConfig.cpp:383
845 msgid "Automatically equip items"
846 msgstr "Automatisch ausrüsten"
847
848 #: ../../../src/MenuConfig.cpp:384
849 msgid "Show hidden entity markers"
850 msgstr "Zeige versteckte Entitätsmarker"
851
852 #: ../../../src/MenuConfig.cpp:385
853 msgid "Low health notification"
854 msgstr "Niedrige-Gesundheit-Warnung"
855
856 #: ../../../src/MenuConfig.cpp:386
857 msgid "Low health threshold"
858 msgstr "Niedrige-Gesundheit-Schwellwert"
859
860 #: ../../../src/MenuConfig.cpp:389
861 msgid "Joystick"
862 msgstr "Joystick"
863
864 #: ../../../src/MenuConfig.cpp:390
865 msgid "Move hero using mouse"
866 msgstr "Maus steuert Bewegung"
867
868 #: ../../../src/MenuConfig.cpp:391
869 msgid "Mouse aim"
870 msgstr "Zielen mit der Maus"
871
872 #: ../../../src/MenuConfig.cpp:392
873 msgid "Do not use mouse"
874 msgstr "Maus nicht benutzen"
875
876 #: ../../../src/MenuConfig.cpp:393
877 msgid "Swap mouse movement button"
878 msgstr "Maustasten zum Bewegen umschalten"
879
880 #: ../../../src/MenuConfig.cpp:394
881 msgid "Attack with mouse movement"
882 msgstr "Mit Maussteuerung angreifen"
883
884 #: ../../../src/MenuConfig.cpp:395
885 msgid "Joystick Deadzone"
886 msgstr "Joystick-Todeszone"
887
888 #: ../../../src/MenuConfig.cpp:405
889 #, c-format
890 msgid "Primary binding: %s"
891 msgstr "Primäre Belegung: %s"
892
893 #: ../../../src/MenuConfig.cpp:406
894 #, c-format
895 msgid "Alternate binding: %s"
896 msgstr "Alternative Belegung: %s"
897
898 #: ../../../src/MenuConfig.cpp:407
899 #, c-format
900 msgid "Joystick binding: %s"
901 msgstr "Joystick Belegung: %s"
902
903 #: ../../../src/MenuConfig.cpp:508
264904 msgid ""
265905 "Will try to store surfaces in video memory versus system memory. The effect "
266906 "this has on performance depends on the renderer."
268908 "Wird versuchen, Oberflächen im Grafikspeicher anstelle des Systemspeichers "
269909 "zu speichern. Die Auswirkung auf die Performanz hängt vom Renderer ab."
270910
271 #: ../../../src/GameStateConfigDesktop.cpp:189
911 #: ../../../src/MenuConfig.cpp:509
272912 msgid ""
273913 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
274914 "windowed mode or input lag."
276916 "Verhindert Screen Tearing. Deaktivieren, wenn du im Fenstermodus ein "
277917 "„Stottern“ oder Eingabeverzögerungen bemerkst."
278918
279 #: ../../../src/GameStateConfigDesktop.cpp:190
919 #: ../../../src/MenuConfig.cpp:510
280920 msgid ""
281921 "When enabled, this uses the screen DPI in addition to the window dimensions "
282922 "to scale the rendering resolution. Otherwise, only the window dimensions are"
286926 " anwenden, um die zum Zeichnen benutzte Auflösung zu skalieren. Ansonsten "
287927 "wird nur die Fenstergröße verwendet."
288928
289 #: ../../../src/GameStateConfigDesktop.cpp:191
929 #: ../../../src/MenuConfig.cpp:511
290930 msgid ""
291931 "This enables parallax (non-tile) layers. Disabling this setting can improve "
292932 "performance in some cases."
294934 "Aktiviert Parallax-Ebenen (Nicht-Kachel-Ebenen). Das Deaktivieren dieser "
295935 "Einstellung kann in einigen Fällen die Performanz erhöhen."
296936
297 #: ../../../src/GameStateConfigDesktop.cpp:192
298 msgid "Experimental"
299 msgstr "Experimentell"
300
301 #: ../../../src/GameStateConfigDesktop.cpp:193
302 msgid "For handheld devices"
303 msgstr "Für tragbare Geräte"
304
305 #: ../../../src/GameStateConfigDesktop.cpp:211
306 msgid "Renderer"
307 msgstr "Renderer"
308
309 #: ../../../src/GameStateConfigDesktop.cpp:227
310 msgid "Full Screen Mode"
311 msgstr "Vollbildmodus"
312
313 #: ../../../src/GameStateConfigDesktop.cpp:231
314 msgid "Move hero using mouse"
315 msgstr "Maus steuert Bewegung"
316
317 #: ../../../src/GameStateConfigDesktop.cpp:235
318 msgid "Hardware surfaces"
319 msgstr "Hardwareoberflächen"
320
321 #: ../../../src/GameStateConfigDesktop.cpp:239
322 msgid "V-Sync"
323 msgstr "V-Sync"
324
325 #: ../../../src/GameStateConfigDesktop.cpp:243
326 msgid "Texture Filtering"
327 msgstr "Texturfilter"
328
329 #: ../../../src/GameStateConfigDesktop.cpp:247
330 msgid "DPI scaling"
331 msgstr "DPI-Skalierung"
332
333 #: ../../../src/GameStateConfigDesktop.cpp:251
334 msgid "Parallax Layers"
335 msgstr "Parallax-Ebenen"
336
337 #: ../../../src/GameStateConfigDesktop.cpp:255
338 msgid "Allow changing gamma"
339 msgstr "Änderbarer Gamma-Wert"
340
341 #: ../../../src/GameStateConfigDesktop.cpp:259
342 msgid "Gamma"
343 msgstr "Gamma-Wert"
344
345 #: ../../../src/GameStateConfigDesktop.cpp:263
346 msgid "Use joystick"
347 msgstr "Joystick benutzen"
348
349 #: ../../../src/GameStateConfigDesktop.cpp:267
350 msgid "Joystick"
351 msgstr "Joystick"
352
353 #: ../../../src/GameStateConfigDesktop.cpp:283
354 msgid "Mouse aim"
355 msgstr "Zielen mit der Maus"
356
357 #: ../../../src/GameStateConfigDesktop.cpp:287
358 msgid "Do not use mouse"
359 msgstr "Maus nicht benutzen"
360
361 #: ../../../src/GameStateConfigDesktop.cpp:291
362 msgid "Joystick Deadzone"
363 msgstr "Joystick-Deadzone"
364
365 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
366 msgid "Loading..."
367 msgstr "Laden ..."
368
369 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
370 msgid "Delete Save"
371 msgstr "Spiel löschen"
372
373 #: ../../../src/GameStateLoad.cpp:88
374 msgid "Delete this save?"
375 msgstr "Diesen Spielstand löschen?"
376
377 #: ../../../src/GameStateLoad.cpp:90
378 msgid "Exit to Title"
379 msgstr "Hauptmenü"
380
381 #: ../../../src/GameStateLoad.cpp:93
382 msgid "New Game"
383 msgstr "Neues Spiel"
384
385 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
386 msgid "Choose a Slot"
387 msgstr "Eintrag wählen"
388
389 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
390 msgid "Enable a story mod to continue"
391 msgstr "Aktiviere eine Erzähl-Mod um fortzufahren"
392
393 #: ../../../src/GameStateLoad.cpp:589
394 msgid "Load Game"
395 msgstr "Spiel laden"
396
397 #: ../../../src/GameStateLoad.cpp:695
398 msgid "Entering game world..."
399 msgstr "Spielwelt wird betreten ..."
400
401 #: ../../../src/GameStateLoad.cpp:698
402 msgid "Loading saved game..."
403 msgstr "Spielstand wird geladen ..."
404
405 #: ../../../src/GameStateLoad.cpp:731
406 msgid "Invalid save"
407 msgstr "Ungültiger Spielstand"
408
409 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
410 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
411 #: ../../../src/MenuPowers.cpp:1542
412 #, c-format
413 msgid "Level %d"
414 msgstr "Stufe %d"
415
416 #: ../../../src/GameStateNew.cpp:68
417 msgid "Create"
418 msgstr "Erstellen"
419
420 #: ../../../src/GameStateNew.cpp:76
421 msgid "Randomize"
422 msgstr "Würfeln"
423
424 #: ../../../src/GameStateNew.cpp:92
425 msgid "Choose a Portrait"
426 msgstr "Wähle dein Porträt"
427
428 #: ../../../src/GameStateNew.cpp:96
429 msgid "Choose a Name"
430 msgstr "Wähle deinen Namen"
431
432 #: ../../../src/GameStateNew.cpp:100
433 msgid "Permadeath?"
434 msgstr "Dauerhafter Tod?"
435
436 #: ../../../src/GameStateNew.cpp:104
437 msgid "Choose a Class"
438 msgstr "Wähle eine Klasse"
439
440 #: ../../../src/GameStateTitle.cpp:108
441 msgid "Play Game"
442 msgstr "Spiel starten"
443
444 #: ../../../src/GameStateTitle.cpp:111
445 msgid "Enable a core mod to continue"
446 msgstr "Aktiviere eine Kern-Mod um fortzufahren"
447
448 #: ../../../src/GameStateTitle.cpp:115
449 msgid "Configuration"
450 msgstr "Einstellungen"
451
452 #: ../../../src/GameStateTitle.cpp:118
453 msgid "Credits"
454 msgstr "Mitwirkende"
455
456 #: ../../../src/GameStateTitle.cpp:121
457 msgid "Exit Game"
937 #: ../../../src/MenuConfig.cpp:512
938 msgid ""
939 "Enables the below setting that controls the screen gamma level. The behavior"
940 " of the gamma setting can vary between platforms."
941 msgstr ""
942 "Aktiviert die Möglichkeit, den Gammawert des Spiels zu ändern. Das Verhalten"
943 " dieser Einstellung schwankt stark zwischen Plattformen."
944
945 #: ../../../src/MenuConfig.cpp:513
946 msgid ""
947 "Provides additional text for information that is primarily conveyed through "
948 "color."
949 msgstr ""
950 "Zeigt zusätzlichen Text für Informationen, die hauptsächlich durch Farben "
951 "dargestellt werden."
952
953 #: ../../../src/MenuConfig.cpp:514
954 msgid ""
955 "Some mods will automatically hide the stat bars when they are inactive. "
956 "Disabling this option will keep them displayed at all times."
957 msgstr ""
958 "Einige Mods verstecken automatisch die Werteleisten, wenn inaktiv. Das "
959 "Deaktivieren dieser Option wird sie durchgehend anzeigen."
960
961 #: ../../../src/MenuConfig.cpp:515
962 msgid ""
963 "When enabled, empty equipment slots will be filled with applicable items "
964 "when they are obtained."
965 msgstr ""
966 "Wenn aktiviert, werden leere Ausrüstungseinträge automatisch mit gefundenen "
967 "Gegenständen gefüllt."
968
969 #: ../../../src/MenuConfig.cpp:516
970 msgid ""
971 "Shows a marker above enemies, allies, and the player when they are obscured "
972 "by tall objects."
973 msgstr ""
974 "Zeige einen Marker über Gegner, Verbündeten und dem Spieler, wenn sie von "
975 "großen Objekten verdeckt werden."
976
977 #: ../../../src/MenuConfig.cpp:517
978 msgid ""
979 "This allows the game to be controlled entirely with the keyboard (or "
980 "joystick)."
981 msgstr "Erlaubt Steuerung des gesamten Spiels mit Tastatur (oder Joystick)."
982
983 #: ../../../src/MenuConfig.cpp:518
984 msgid ""
985 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
986 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
987 "instead of 'Main1'."
988 msgstr ""
989 "Wenn „Maus steuert Bewegung“ aktiviert ist, legt diese Einstellung fest, ob "
990 "„Aktionstaste 1“ oder „Aktionstaste 2“ benutzt wird, um den Helden zu "
991 "bewegen. Falls aktiviert, steuert „Aktionstaste 2“ statt „Aktionstaste 1“ "
992 "die Bewegung."
993
994 #: ../../../src/MenuConfig.cpp:519
995 msgid ""
996 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
997 "assigned to the movement button can be used by targeting an enemy. If this "
998 "setting is disabled, it is required to use 'Shift' to access the Power "
999 "assigned to the movement button."
1000 msgstr ""
1001 "Wenn „Maus steuert Bewegung“ aktiviert ist, steuert diese Einstellung, ob "
1002 "die auf Maustasten gelegte Attacke benutzt wird, indem auf einen Gegner "
1003 "gezielt wird. Wenn diese Einstellung deaktiviert ist, muss „Umschalt“ "
1004 "verwendet werden, um die auf Maustasten gelegte Attacke auszuführen."
1005
1006 #: ../../../src/MenuConfig.cpp:520
1007 msgid ""
1008 "The player's attacks will be aimed in the direction of the mouse cursor when"
1009 " this is enabled."
1010 msgstr ""
1011 "Wenn aktiviert, greift der Spieler in die Richtung des Mauszeigers an."
1012
1013 #: ../../../src/MenuConfig.cpp:571
1014 msgid "Active Mods"
1015 msgstr "Aktive Mods"
1016
1017 #: ../../../src/MenuConfig.cpp:580
1018 msgid "Available Mods"
1019 msgstr "Verfügbare Mods"
1020
1021 #: ../../../src/MenuConfig.cpp:599
1022 msgid "<< Disable"
1023 msgstr "<< Deaktivieren"
1024
1025 #: ../../../src/MenuConfig.cpp:605
1026 msgid "Enable >>"
1027 msgstr "Aktivieren >>"
1028
1029 #: ../../../src/MenuConfig.cpp:1436
1030 msgid "Version:"
1031 msgstr "Version:"
1032
1033 #: ../../../src/MenuConfig.cpp:1441
1034 msgid "Game:"
1035 msgstr "Spiel:"
1036
1037 #: ../../../src/MenuConfig.cpp:1446
1038 msgid "Engine version:"
1039 msgstr "Engine-Version:"
1040
1041 #: ../../../src/MenuConfig.cpp:1454
1042 msgid "Requires mods:"
1043 msgstr "Benötigte Mods:"
1044
1045 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
1046 msgid "(none)"
1047 msgstr "(keine)"
1048
1049 #: ../../../src/MenuConfig.cpp:1579
1050 msgid "Save & Exit"
4581051 msgstr "Beenden"
459
460 #: ../../../src/InputState.cpp:402
461 msgid "Accept"
462 msgstr "Bestätigen"
463
464 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
465 msgid "Up"
466 msgstr "Hoch"
467
468 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
469 msgid "Down"
470 msgstr "Runter"
471
472 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
473 msgid "Left"
474 msgstr "Links"
475
476 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
477 msgid "Right"
478 msgstr "Rechts"
479
480 #: ../../../src/InputState.cpp:407
481 msgid "Bar1"
482 msgstr "Aktionsleiste 1"
483
484 #: ../../../src/InputState.cpp:408
485 msgid "Bar2"
486 msgstr "Aktionsleiste 2"
487
488 #: ../../../src/InputState.cpp:409
489 msgid "Bar3"
490 msgstr "Aktionsleiste 3"
491
492 #: ../../../src/InputState.cpp:410
493 msgid "Bar4"
494 msgstr "Aktionsleiste 4"
495
496 #: ../../../src/InputState.cpp:411
497 msgid "Bar5"
498 msgstr "Aktionsleiste 5"
499
500 #: ../../../src/InputState.cpp:412
501 msgid "Bar6"
502 msgstr "Aktionsleiste 6"
503
504 #: ../../../src/InputState.cpp:413
505 msgid "Bar7"
506 msgstr "Aktionsleiste 7"
507
508 #: ../../../src/InputState.cpp:414
509 msgid "Bar8"
510 msgstr "Aktionsleiste 8"
511
512 #: ../../../src/InputState.cpp:415
513 msgid "Bar9"
514 msgstr "Aktionsleiste 9"
515
516 #: ../../../src/InputState.cpp:416
517 msgid "Bar0"
518 msgstr "Aktionsleiste 0"
519
520 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
521 #: ../../../src/MenuCharacter.cpp:54
522 msgid "Character"
523 msgstr "Charakter"
524
525 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
526 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
527 msgid "Inventory"
528 msgstr "Inventar"
529
530 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
531 #: ../../../src/MenuPowers.cpp:168
532 msgid "Powers"
533 msgstr "Fähigkeiten"
534
535 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
536 #: ../../../src/MenuLog.cpp:72
537 msgid "Log"
538 msgstr "Journal"
539
540 #: ../../../src/InputState.cpp:421
541 msgid "Main1"
542 msgstr "Aktionstaste 1"
543
544 #: ../../../src/InputState.cpp:422
545 msgid "Main2"
546 msgstr "Aktionstaste 2"
547
548 #: ../../../src/InputState.cpp:423
549 msgid "Ctrl"
550 msgstr "Strg"
551
552 #: ../../../src/InputState.cpp:424
553 msgid "Shift"
554 msgstr "Umschalt"
555
556 #: ../../../src/InputState.cpp:425
557 msgid "Alt"
558 msgstr "Alt"
559
560 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
561 msgid "Delete"
562 msgstr "Entf"
563
564 #: ../../../src/InputState.cpp:427
565 msgid "ActionBar Accept"
566 msgstr "Leiste Annehmen"
567
568 #: ../../../src/InputState.cpp:428
569 msgid "ActionBar Left"
570 msgstr "Leiste Links"
571
572 #: ../../../src/InputState.cpp:429
573 msgid "ActionBar Right"
574 msgstr "Leiste Rechts"
575
576 #: ../../../src/InputState.cpp:430
577 msgid "ActionBar Use"
578 msgstr "Leiste Benutzen"
579
580 #: ../../../src/InputState.cpp:431
581 msgid "Developer Menu"
582 msgstr "Entwicklermenü"
583
584 #: ../../../src/InputState.cpp:433
585 msgid "Left Mouse"
586 msgstr "Maus links"
587
588 #: ../../../src/InputState.cpp:434
589 msgid "Middle Mouse"
590 msgstr "Maus mittig"
591
592 #: ../../../src/InputState.cpp:435
593 msgid "Right Mouse"
594 msgstr "Maus rechts"
595
596 #: ../../../src/InputState.cpp:436
597 msgid "Wheel Up"
598 msgstr "Mausrad auf"
599
600 #: ../../../src/InputState.cpp:437
601 msgid "Wheel Down"
602 msgstr "Mausrad ab"
603
604 #: ../../../src/InputState.cpp:438
605 msgid "Mouse X1"
606 msgstr "Maus X1"
607
608 #: ../../../src/InputState.cpp:439
609 msgid "Mouse X2"
610 msgstr "Maus X2"
611
612 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
613 msgid "Unknown Item"
614 msgstr "Unbekannter Gegenstand"
615
616 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
617 #, c-format
618 msgid "%d%% Speed"
619 msgstr "%d%% Geschwindigkeit"
620
621 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
622 #, c-format
623 msgid "%d%% Attack Speed"
624 msgstr "%d%% Angriffsgeschwindigkeit"
625
626 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
627 #: ../../../src/MenuPowers.cpp:833
628 #, c-format
629 msgid "Resistance (%s)"
630 msgstr "Widerstand (%s)"
631
632 #: ../../../src/ItemManager.cpp:684
633 #, c-format
634 msgid "Requires %s"
635 msgstr "Benötigt %s"
636
637 #: ../../../src/ItemManager.cpp:733
638 msgid "Quest Item"
639 msgstr "Aufgabengegenstand"
640
641 #: ../../../src/ItemManager.cpp:760
642 #, c-format
643 msgid "Quality: %s"
644 msgstr "Qualität: %s"
645
646 #: ../../../src/ItemManager.cpp:785
647 #, c-format
648 msgid "Absorb: %d-%d"
649 msgstr "Absorbieren: %d-%d"
650
651 #: ../../../src/ItemManager.cpp:787
652 #, c-format
653 msgid "Absorb: %d"
654 msgstr "Absorbieren: %d"
655
656 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
657 #: ../../../src/MenuPowers.cpp:1134
658 #, c-format
659 msgid "Requires Level %d"
660 msgstr "Benötigt Stufe %d"
661
662 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
663 #: ../../../src/MenuPowers.cpp:1125
664 #, c-format
665 msgid "Requires %s %d"
666 msgstr "Benötigt %s %d"
667
668 #: ../../../src/ItemManager.cpp:849
669 #, c-format
670 msgid "Requires Class: %s"
671 msgstr "Benötigt Klasse: %s"
672
673 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
674 #, c-format
675 msgid "Buy Price: %d %s"
676 msgstr "Kaufpreis: %d %s"
677
678 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
679 #, c-format
680 msgid "Buy Price: %d %s each"
681 msgstr "Kaufpreis: je %d %s"
682
683 #: ../../../src/ItemManager.cpp:886
684 #, c-format
685 msgid "Sell Price: %d %s"
686 msgstr "Verkaufspreis: %d %s"
687
688 #: ../../../src/ItemManager.cpp:888
689 #, c-format
690 msgid "Sell Price: %d %s each"
691 msgstr "Verkaufspreis: je %d %s"
692
693 #: ../../../src/ItemManager.cpp:897
694 msgid "Set:"
695 msgstr "Set:"
696
697 #: ../../../src/ItemManager.cpp:904
698 #, c-format
699 msgid "%d items:"
700 msgstr "%d Gegenstände:"
701
702 #: ../../../src/ItemManager.cpp:917
703 #, c-format
704 msgid "Press [%s] to use"
705 msgstr "Drücke [%s] zum Verwenden"
706
707 #: ../../../src/ItemManager.cpp:920
708 #, c-format
709 msgid "Press [%s] to read"
710 msgstr "Drücke [%s] zum Lesen"
711
712 #: ../../../src/MenuActionBar.cpp:87
713 msgid "Loot tooltip visibility"
714 msgstr "Sichtbarkeit der Beute-Hinweise"
715
716 #: ../../../src/MenuActionBar.cpp:88
717 msgid "Mini-map mode"
718 msgstr "Minikarten-Modus"
719
720 #: ../../../src/MenuActionBar.cpp:89
721 msgid "Always show stat bar labels"
722 msgstr "Immer Werteleistenbeschriftung anzeigen"
723
724 #: ../../../src/MenuActionBar.cpp:90
725 msgid "Show combat text"
726 msgstr "Kampftexte anzeigen"
727
728 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
729 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
730 #, c-format
731 msgid "Hotkey: %s"
732 msgstr "Schnelltaste: %s"
733
734 #: ../../../src/MenuActionBar.cpp:474
735 #, c-format
736 msgid "Default. Temporarily show all loot tooltips with '%s'."
737 msgstr "Standard. Zeige vorübergehend alle Beute-Hinweise mit '%s'."
738
739 #: ../../../src/MenuActionBar.cpp:476
740 #, c-format
741 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
742 msgstr "Zeige Alles. Verstecke vorübergehend alle Beute-Hinweise mit '%s'."
743
744 #: ../../../src/MenuActionBar.cpp:478
745 #, c-format
746 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
747 msgstr "Verstecke Alles. Zeige vorübergehend alle Beute-Hinweise mit '%s'."
748
749 #: ../../../src/MenuActionBar.cpp:482
750 msgid "Visible"
751 msgstr "Sichtbar"
752
753 #: ../../../src/MenuActionBar.cpp:484
754 msgid "Visible (2x zoom)"
755 msgstr "Sichtbar (2x Zoom)"
756
757 #: ../../../src/MenuActionBar.cpp:486
758 msgid "Hidden"
759 msgstr "Versteckt"
760
761 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
762 msgid "Enabled"
763 msgstr "Aktiviert"
764
765 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
766 msgid "Disabled"
767 msgstr "Deaktiviert"
768
769 #: ../../../src/MenuActionBar.cpp:657
770 msgid "Not enough MP."
771 msgstr "Nicht genügend MP."
772
773 #: ../../../src/MenuActiveEffects.cpp:124
774 #, c-format
775 msgid "x%d"
776 msgstr "×%d"
777
778 #: ../../../src/MenuActiveEffects.cpp:219
779 msgid "Remaining:"
780 msgstr "Verbleibend:"
781
782 #: ../../../src/MenuActiveEffects.cpp:225
783 #, c-format
784 msgid "x%d stacks"
785 msgstr "×%d Stapel"
786
787 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
788 msgid "Name"
789 msgstr "Name"
790
791 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
792 msgid "Level"
793 msgstr "Stufe"
794
795 #: ../../../src/MenuCharacter.cpp:310
796 #, c-format
797 msgid "%d unspent stat point"
798 msgstr "%d verfügbarer Wertepunkt"
799
800 #: ../../../src/MenuCharacter.cpp:313
801 #, c-format
802 msgid "%d unspent stat points"
803 msgstr "%d verfügbare Wertepunkte"
804
805 #: ../../../src/MenuCharacter.cpp:355
806 #, c-format
807 msgid "Reduces the damage taken from \"%s\" elemental attacks."
808 msgstr "Reduziert den Schaden von „%s“-Elementarangriffen."
809
810 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
811 #, c-format
812 msgid "XP: %d"
813 msgstr "EP: %d"
814
815 #: ../../../src/MenuCharacter.cpp:367
816 #, c-format
817 msgid "Next: %d"
818 msgstr "Nächste: %d"
819
820 #: ../../../src/MenuCharacter.cpp:373
821 #, c-format
822 msgid "base (%d), bonus (%d)"
823 msgstr "Basis (%d), Bonus (%d)"
824
825 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
826 msgid "Related stats:"
827 msgstr "Verwandte Werte: "
828
829 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
830 #, c-format
831 msgid "Each level grants %d."
832 msgstr "Jede Stufe gewährt %d."
833
834 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
835 #, c-format
836 msgid "Each point of %s grants %d."
837 msgstr "Jeder Punkt %s gewährt %d."
8381052
8391053 #: ../../../src/MenuDevConsole.cpp:63
8401054 msgid "Execute"
8531067 msgid "Arguments with spaces should be enclosed with double quotes. Example:"
8541068 msgstr ""
8551069 "Argumente mit Leerzeichen sollten in doppelte Anführungszeichen gesetzt "
856 "sein. Beispiel: "
1070 "sein. Beispiel:"
8571071
8581072 #: ../../../src/MenuDevConsole.cpp:147
8591073 msgid "Type 'help' to get a list of commands."
8691083
8701084 #: ../../../src/MenuDevConsole.cpp:239 ../../../src/MenuDevConsole.cpp:286
8711085 msgid "Entity"
872 msgstr "Entity"
1086 msgstr "Entität"
8731087
8741088 #: ../../../src/MenuDevConsole.cpp:261 ../../../src/MenuDevConsole.cpp:268
8751089 msgid "none"
8851099
8861100 #: ../../../src/MenuDevConsole.cpp:266
8871101 msgid "entity"
888 msgstr "Entity"
1102 msgstr "Entität"
8891103
8901104 #: ../../../src/MenuDevConsole.cpp:267
8911105 msgid "entity, ally"
892 msgstr "Entity, verbündet"
1106 msgstr "Entität, verbündet"
8931107
8941108 #: ../../../src/MenuDevConsole.cpp:274
8951109 msgid "Tile"
9761190
9771191 #: ../../../src/MenuDevConsole.cpp:536
9781192 msgid "<id>"
979 msgstr "<id>"
1193 msgstr "<ID>"
9801194
9811195 #: ../../../src/MenuDevConsole.cpp:552
9821196 #, c-format
9891203
9901204 #: ../../../src/MenuDevConsole.cpp:564
9911205 msgid "<key>=<val> <key>=<val> ..."
992 msgstr "<key>=<val> <key>=<val> ..."
1206 msgstr "<Schlüssel>=<Wert> <Schlüssel>=<Wert> ..."
9931207
9941208 #: ../../../src/MenuDevConsole.cpp:569
9951209 msgid "ERROR: Unknown command"
9991213 msgid "HINT: Type help"
10001214 msgstr "TIPP: Gib „help“ ein"
10011215
1002 #: ../../../src/MenuEnemy.cpp:138
1216 #: ../../../src/MenuEnemy.cpp:162
10031217 #, c-format
10041218 msgid "%s level %d"
10051219 msgstr "%s Stufe %d"
10061220
1007 #: ../../../src/MenuEnemy.cpp:162
1221 #: ../../../src/MenuEnemy.cpp:186
10081222 msgid "Dead"
10091223 msgstr "Tot"
10101224
1011 #: ../../../src/MenuEnemy.cpp:164
1225 #: ../../../src/MenuEnemy.cpp:188
10121226 msgid "Destroyed"
10131227 msgstr "Zerstört"
10141228
1015 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
1016 msgid "Paused"
1017 msgstr "Pausiert"
1018
1019 #: ../../../src/MenuExit.cpp:91
1020 msgid "Save & Exit"
1021 msgstr "Beenden"
1022
1023 #: ../../../src/MenuExit.cpp:92
1024 msgid "Exit"
1025 msgstr "Beenden"
1026
1027 #: ../../../src/MenuExit.cpp:96
1028 msgid "Continue"
1029 msgstr "Fortsetzen"
1030
1031 #: ../../../src/MenuInventory.cpp:73
1032 msgid "Automatically equip items"
1033 msgstr "Automatisch ausrüsten"
1034
1035 #: ../../../src/MenuInventory.cpp:188
1229 #: ../../../src/MenuInventory.cpp:177
10361230 #, c-format
10371231 msgid "Lost %d%% of %s."
10381232 msgstr "%d%% an %s verloren."
10391233
1040 #: ../../../src/MenuInventory.cpp:195
1234 #: ../../../src/MenuInventory.cpp:184
10411235 #, c-format
10421236 msgid "Lost %d%% of total XP."
10431237 msgstr "%d%% der gesamten EP verloren."
10441238
1045 #: ../../../src/MenuInventory.cpp:200
1239 #: ../../../src/MenuInventory.cpp:189
10461240 #, c-format
10471241 msgid "Lost %d%% of current level XP."
10481242 msgstr "%d%% EP der aktuellen Stufe verloren."
10491243
1050 #: ../../../src/MenuInventory.cpp:226
1244 #: ../../../src/MenuInventory.cpp:215
10511245 #, c-format
10521246 msgid "Lost %s."
10531247 msgstr "%s verloren."
10541248
1055 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1249 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10561250 #, c-format
10571251 msgid "%d %s"
10581252 msgstr "%d %s"
10591253
1060 #: ../../../src/MenuInventory.cpp:317
1254 #: ../../../src/MenuInventory.cpp:300
10611255 msgid "Pick up item(s):"
10621256 msgstr "Aufnehmen:"
10631257
1064 #: ../../../src/MenuInventory.cpp:318
1258 #: ../../../src/MenuInventory.cpp:301
10651259 msgid "Use or equip item:"
10661260 msgstr "Ausrüsten:"
10671261
1068 #: ../../../src/MenuInventory.cpp:319
1262 #: ../../../src/MenuInventory.cpp:302
10691263 #, c-format
10701264 msgid "%s modifiers"
10711265 msgstr "Tastenkombinationen mit %s:"
10721266
1073 #: ../../../src/MenuInventory.cpp:320
1267 #: ../../../src/MenuInventory.cpp:303
10741268 msgid "Select a quantity of item:"
10751269 msgstr "Anzahl wählen:"
10761270
1077 #: ../../../src/MenuInventory.cpp:323
1271 #: ../../../src/MenuInventory.cpp:306
10781272 msgid "Stash item stack:"
10791273 msgstr "Stapel einlagern:"
10801274
1081 #: ../../../src/MenuInventory.cpp:325
1275 #: ../../../src/MenuInventory.cpp:308
10821276 msgid "Sell item stack:"
10831277 msgstr "Stapel verkaufen:"
10841278
1085 #: ../../../src/MenuInventory.cpp:592
1279 #: ../../../src/MenuInventory.cpp:574
10861280 msgid "You don't have enough of the required item."
10871281 msgstr "Du hast nicht genug von diesem Gegenstand."
10881282
1089 #: ../../../src/MenuInventory.cpp:599
1283 #: ../../../src/MenuInventory.cpp:586
10901284 msgid "You can't use this item right now."
10911285 msgstr "Du kannst diesen Gegenstand jetzt nicht benutzen."
10921286
1093 #: ../../../src/MenuInventory.cpp:611
1287 #: ../../../src/MenuInventory.cpp:598
10941288 msgid "This item can only be used from the action bar."
10951289 msgstr "Dieser Gegenstand kann nur von der Aktionsleiste benutzt werden."
10961290
1097 #: ../../../src/MenuInventory.cpp:729
1291 #: ../../../src/MenuInventory.cpp:716
10981292 msgid "Inventory is full."
10991293 msgstr "Inventar ist voll."
11001294
1101 #: ../../../src/MenuInventory.cpp:849
1295 #: ../../../src/MenuInventory.cpp:841
11021296 #, c-format
11031297 msgid "Not enough %s."
11041298 msgstr "Nicht genug %s."
11051299
1106 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1300 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
11071301 msgid "This item can not be sold."
11081302 msgstr "Dieser Gegenstand kann nicht verkauft werden."
11091303
11151309 msgid "Quests"
11161310 msgstr "Aufgaben"
11171311
1118 #: ../../../src/MenuManager.cpp:286
1312 #: ../../../src/MenuManager.cpp:296
11191313 #, c-format
11201314 msgid "XP: %d/%d"
11211315 msgstr "EP: %d/%d"
11221316
1123 #: ../../../src/MenuManager.cpp:827
1317 #: ../../../src/MenuManager.cpp:854
11241318 msgid "This item can not be dropped."
11251319 msgstr "Dieser Gegenstand kann nicht abgelegt werden."
11261320
11281322 msgid "Enter amount:"
11291323 msgstr "Anzahl eingeben:"
11301324
1131 #: ../../../src/MenuPowers.cpp:787
1325 #: ../../../src/MenuPowers.cpp:786
11321326 msgid "Passive"
11331327 msgstr "Passiv"
11341328
1135 #: ../../../src/MenuPowers.cpp:792
1329 #: ../../../src/MenuPowers.cpp:791
11361330 #, c-format
11371331 msgid "Costs %d MP"
11381332 msgstr "Kostet %d MP"
11391333
1140 #: ../../../src/MenuPowers.cpp:796
1334 #: ../../../src/MenuPowers.cpp:795
11411335 #, c-format
11421336 msgid "Costs %d HP"
11431337 msgstr "Kostet %d TP"
11441338
1145 #: ../../../src/MenuPowers.cpp:801
1339 #: ../../../src/MenuPowers.cpp:800
11461340 msgid "Cooldown:"
11471341 msgstr "Abklingzeit:"
11481342
1149 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1343 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11501344 msgid "Damage per second"
11511345 msgstr "Schaden je Sekunde"
11521346
1153 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1347 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11541348 msgid "HP per second"
11551349 msgstr "TP je Sekunde"
11561350
1157 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1351 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11581352 msgid "MP per second"
11591353 msgstr "MP je Sekunde"
11601354
1161 #: ../../../src/MenuPowers.cpp:885
1355 #: ../../../src/MenuPowers.cpp:884
11621356 msgid "Immobilize"
11631357 msgstr "Erstarren"
11641358
1165 #: ../../../src/MenuPowers.cpp:893
1359 #: ../../../src/MenuPowers.cpp:892
11661360 msgid "Immunity"
11671361 msgstr "Immunität"
11681362
1169 #: ../../../src/MenuPowers.cpp:896
1363 #: ../../../src/MenuPowers.cpp:895
11701364 msgid "Immunity to damage over time"
11711365 msgstr "Immunität gegen Zeitschaden"
11721366
1173 #: ../../../src/MenuPowers.cpp:899
1367 #: ../../../src/MenuPowers.cpp:898
11741368 msgid "Immunity to slow"
11751369 msgstr "Immunität gegen Verzögerung"
11761370
1177 #: ../../../src/MenuPowers.cpp:902
1371 #: ../../../src/MenuPowers.cpp:901
11781372 msgid "Immunity to stun"
11791373 msgstr "Immunität gegen Schock"
11801374
1181 #: ../../../src/MenuPowers.cpp:905
1375 #: ../../../src/MenuPowers.cpp:904
11821376 msgid "Immunity to HP steal"
11831377 msgstr "Immunität gegen TP-Stehlen"
11841378
1185 #: ../../../src/MenuPowers.cpp:908
1379 #: ../../../src/MenuPowers.cpp:907
11861380 msgid "Immunity to MP steal"
11871381 msgstr "Immunität gegen MP-Stehlen"
11881382
1189 #: ../../../src/MenuPowers.cpp:911
1383 #: ../../../src/MenuPowers.cpp:910
11901384 msgid "Immunity to knockback"
11911385 msgstr "Immunität gegen Rückschlag"
11921386
1193 #: ../../../src/MenuPowers.cpp:914
1387 #: ../../../src/MenuPowers.cpp:913
11941388 msgid "Immunity to damage reflection"
11951389 msgstr "Immunität gegen Reflektionsschaden"
11961390
1197 #: ../../../src/MenuPowers.cpp:917
1391 #: ../../../src/MenuPowers.cpp:916
11981392 msgid "Stun"
11991393 msgstr "Schock"
12001394
1201 #: ../../../src/MenuPowers.cpp:920
1395 #: ../../../src/MenuPowers.cpp:919
12021396 msgid "Automatic revive on death"
12031397 msgstr "Automatisch wiederbeleben"
12041398
1205 #: ../../../src/MenuPowers.cpp:923
1399 #: ../../../src/MenuPowers.cpp:922
12061400 msgid "Convert"
12071401 msgstr "Umwandeln"
12081402
1209 #: ../../../src/MenuPowers.cpp:926
1403 #: ../../../src/MenuPowers.cpp:925
12101404 msgid "Fear"
12111405 msgstr "Angst"
12121406
1213 #: ../../../src/MenuPowers.cpp:929
1407 #: ../../../src/MenuPowers.cpp:928
12141408 msgid "Lifespan"
12151409 msgstr "Lebenszeit"
12161410
1217 #: ../../../src/MenuPowers.cpp:953
1411 #: ../../../src/MenuPowers.cpp:952
12181412 msgid "Magical Shield"
12191413 msgstr "Magischer Schild"
12201414
1221 #: ../../../src/MenuPowers.cpp:982
1415 #: ../../../src/MenuPowers.cpp:981
12221416 msgid "Healing"
12231417 msgstr "Heilung"
12241418
1225 #: ../../../src/MenuPowers.cpp:985
1419 #: ../../../src/MenuPowers.cpp:984
12261420 msgid "Knockback"
12271421 msgstr "Rückschlag"
12281422
1229 #: ../../../src/MenuPowers.cpp:1010
1423 #: ../../../src/MenuPowers.cpp:1009
12301424 #, c-format
12311425 msgid "%d%% chance"
12321426 msgstr "%d%% Wahrscheinlichkeit"
12331427
1234 #: ../../../src/MenuPowers.cpp:1062
1428 #: ../../../src/MenuPowers.cpp:1061
12351429 msgid "Base Accuracy"
1236 msgstr "Basis-Genauigkeit:"
1237
1238 #: ../../../src/MenuPowers.cpp:1082
1430 msgstr "Basis-Genauigkeit"
1431
1432 #: ../../../src/MenuPowers.cpp:1081
12391433 msgid "Base Critical Chance"
12401434 msgstr "Basis-Chance für krit. Treffer"
12411435
1242 #: ../../../src/MenuPowers.cpp:1090
1436 #: ../../../src/MenuPowers.cpp:1089
12431437 msgid "Ignores Absorbtion"
12441438 msgstr "Ignoriert Rüstung"
12451439
1246 #: ../../../src/MenuPowers.cpp:1095
1440 #: ../../../src/MenuPowers.cpp:1094
12471441 msgid "Ignores Avoidance"
12481442 msgstr "Ignoriert Ausweichen"
12491443
1250 #: ../../../src/MenuPowers.cpp:1100
1444 #: ../../../src/MenuPowers.cpp:1099
12511445 #, c-format
12521446 msgid "%d%% Chance to crit slowed targets"
12531447 msgstr "%d%% Wahrsch. für krit. verlangsamte Ziele"
12541448
1255 #: ../../../src/MenuPowers.cpp:1105
1449 #: ../../../src/MenuPowers.cpp:1104
12561450 #, c-format
12571451 msgid "Elemental Damage (%s)"
12581452 msgstr "Elementarschaden (%s)"
12591453
1260 #: ../../../src/MenuPowers.cpp:1114
1454 #: ../../../src/MenuPowers.cpp:1113
12611455 #, c-format
12621456 msgid "Requires a %s"
12631457 msgstr "Benötigt: %s"
12641458
1265 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1459 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12661460 #, c-format
12671461 msgid "Requires Power: %s"
12681462 msgstr "Benötigt Fähigkeit: %s"
12691463
1270 #: ../../../src/MenuPowers.cpp:1163
1464 #: ../../../src/MenuPowers.cpp:1162
12711465 msgid "Click to Unlock (uses 1 Skill Point)"
12721466 msgstr "Klicken zum Freischalten (benutzt 1 Fertigkeitspunkt)"
12731467
1274 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1468 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12751469 msgid "Requires 1 Skill Point"
12761470 msgstr "Benötigt 1 Fertigkeitspunkt"
12771471
1278 #: ../../../src/MenuPowers.cpp:1355
1472 #: ../../../src/MenuPowers.cpp:1354
12791473 #, c-format
12801474 msgid "%d unspent skill point"
12811475 msgstr "%d verfügbarer Fertigkeitspunkt"
12821476
1283 #: ../../../src/MenuPowers.cpp:1358
1477 #: ../../../src/MenuPowers.cpp:1357
12841478 #, c-format
12851479 msgid "%d unspent skill points"
12861480 msgstr "%d verfügbare Fertigkeitspunkte"
12871481
1288 #: ../../../src/MenuPowers.cpp:1388
1482 #: ../../../src/MenuPowers.cpp:1387
12891483 msgid "Next Level:"
12901484 msgstr "Nächste Stufe:"
12911485
1292 #: ../../../src/MenuStash.cpp:96
1293 msgid "Shared Stash"
1294 msgstr "Gemeinschaftslager"
1295
1296 #: ../../../src/MenuStash.cpp:209
1486 #: ../../../src/MenuStash.cpp:53
1487 msgid "Private"
1488 msgstr "Privat"
1489
1490 #: ../../../src/MenuStash.cpp:55
1491 msgid "Shared"
1492 msgstr "Gemeinsam"
1493
1494 #: ../../../src/MenuStash.cpp:103
1495 msgid "Stash"
1496 msgstr "Lagerraum"
1497
1498 #: ../../../src/MenuStash.cpp:258
12971499 msgid "Can not store quest items in the stash."
12981500 msgstr "Aufgabengegenstände können nicht eingelagert werden."
12991501
1300 #: ../../../src/MenuStash.cpp:219
1502 #: ../../../src/MenuStash.cpp:263
1503 msgid "This item can not be stored in the stash."
1504 msgstr "Dieser Gegenstand kann nicht eingelagert werden."
1505
1506 #: ../../../src/MenuStash.cpp:268
1507 msgid "This item can not be stored in the private stash."
1508 msgstr "Dieser Gegenstand kann nicht im privaten Lager eingelagert werden."
1509
1510 #: ../../../src/MenuStash.cpp:273
1511 msgid "This item can not be stored in the shared stash."
1512 msgstr ""
1513 "Dieser Gegenstand kann nicht im Gemeinschaftslager eingelagert werden."
1514
1515 #: ../../../src/MenuStash.cpp:283
13011516 msgid "Stash is full."
13021517 msgstr "Lagerraum ist voll."
13031518
1304 #: ../../../src/MenuTalker.cpp:454
1519 #: ../../../src/MenuStash.cpp:340
1520 #, c-format
1521 msgid "Can not store item in stash: %s"
1522 msgstr "Gegenstand kann nicht eingelagert werden: %s"
1523
1524 #: ../../../src/MenuTalker.cpp:447
1525 #, c-format
1526 msgid "<dialog node %d>"
1527 msgstr "<dialog node %d>"
1528
1529 #: ../../../src/MenuTalker.cpp:455
13051530 msgid "Trade"
13061531 msgstr "Handeln"
13071532
13091534 msgid "Buyback"
13101535 msgstr "Rückkauf"
13111536
1312 #: ../../../src/MenuVendor.cpp:279
1537 #: ../../../src/MenuVendor.cpp:281
13131538 msgid "Vendor"
13141539 msgstr "Verkäufer"
13151540
1316 #: ../../../src/PowerManager.cpp:1136
1541 #: ../../../src/PowerManager.cpp:1170
13171542 #, c-format
13181543 msgid "+%d Shield"
13191544 msgstr "+%d Schild"
13201545
1321 #: ../../../src/PowerManager.cpp:1392
1546 #: ../../../src/PowerManager.cpp:1426
13221547 msgid "You are already transformed, untransform first."
13231548 msgstr "Du bist bereits verwandelt, beende die Verwandlung zunächst."
13241549
1325 #: ../../../src/PowerManager.cpp:1404
1550 #: ../../../src/PowerManager.cpp:1438
13261551 msgid "Could not untransform at this position."
13271552 msgstr "An diesem Ort ist eine Zurückverwandlung nicht möglich."
13281553
13301555 msgid "Completed Quests"
13311556 msgstr "Erledigte Aufgaben"
13321557
1333 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1558 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13341559 msgid "Game saved."
13351560 msgstr "Spiel gespeichert."
13361561
1337 #: ../../../src/SDLInputState.cpp:582
1562 #: ../../../src/SDLInputState.cpp:643
1563 msgid "BkSp"
1564 msgstr "Rück"
1565
1566 #: ../../../src/SDLInputState.cpp:644
1567 msgid "Caps"
1568 msgstr "Festst"
1569
1570 #: ../../../src/SDLInputState.cpp:645
1571 msgid "Del"
1572 msgstr "Entf"
1573
1574 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1575 msgid "End"
1576 msgstr "Ende"
1577
1578 #: ../../../src/SDLInputState.cpp:648
1579 msgid "Esc"
1580 msgstr "Esc"
1581
1582 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1583 msgid "Home"
1584 msgstr "Pos1"
1585
1586 #: ../../../src/SDLInputState.cpp:650
1587 msgid "Ins"
1588 msgstr "Einfg"
1589
1590 #: ../../../src/SDLInputState.cpp:651
1591 msgid "LAlt"
1592 msgstr "LAlt"
1593
1594 #: ../../../src/SDLInputState.cpp:652
1595 msgid "LCtrl"
1596 msgstr "LStrg"
1597
1598 #: ../../../src/SDLInputState.cpp:654
1599 msgid "LShft"
1600 msgstr "LUmsch"
1601
1602 #: ../../../src/SDLInputState.cpp:655
1603 msgid "Num"
1604 msgstr "Num"
1605
1606 #: ../../../src/SDLInputState.cpp:656
1607 msgid "PgDn"
1608 msgstr "Bild↓"
1609
1610 #: ../../../src/SDLInputState.cpp:657
1611 msgid "PgUp"
1612 msgstr "Bild↑"
1613
1614 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1615 msgid "Pause"
1616 msgstr "Pause"
1617
1618 #: ../../../src/SDLInputState.cpp:659
1619 msgid "Print"
1620 msgstr "Druck"
1621
1622 #: ../../../src/SDLInputState.cpp:660
1623 msgid "RAlt"
1624 msgstr "RAlt"
1625
1626 #: ../../../src/SDLInputState.cpp:661
1627 msgid "RCtrl"
1628 msgstr "RStrg"
1629
1630 #: ../../../src/SDLInputState.cpp:662
1631 msgid "Ret"
1632 msgstr "Enter"
1633
1634 #: ../../../src/SDLInputState.cpp:664
1635 msgid "RShft"
1636 msgstr "RUmsch"
1637
1638 #: ../../../src/SDLInputState.cpp:665
1639 msgid "SLock"
1640 msgstr "Rollen"
1641
1642 #: ../../../src/SDLInputState.cpp:666
1643 msgid "Spc"
1644 msgstr "Leer"
1645
1646 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1647 msgid "Tab"
1648 msgstr "Tab"
1649
1650 #: ../../../src/SDLInputState.cpp:673
13381651 msgid "Backspace"
13391652 msgstr "Rücktaste"
13401653
1341 #: ../../../src/SDLInputState.cpp:583
1654 #: ../../../src/SDLInputState.cpp:674
13421655 msgid "CapsLock"
13431656 msgstr "Feststelltaste"
13441657
1345 #: ../../../src/SDLInputState.cpp:586
1346 msgid "End"
1347 msgstr "Ende"
1348
1349 #: ../../../src/SDLInputState.cpp:587
1658 #: ../../../src/SDLInputState.cpp:678
13501659 msgid "Escape"
13511660 msgstr "Escape"
13521661
1353 #: ../../../src/SDLInputState.cpp:588
1354 msgid "Home"
1355 msgstr "Pos1"
1356
1357 #: ../../../src/SDLInputState.cpp:589
1662 #: ../../../src/SDLInputState.cpp:680
13581663 msgid "Insert"
13591664 msgstr "Einfügen"
13601665
1361 #: ../../../src/SDLInputState.cpp:590
1666 #: ../../../src/SDLInputState.cpp:681
13621667 msgid "Left Alt"
13631668 msgstr "Alt links"
13641669
1365 #: ../../../src/SDLInputState.cpp:591
1670 #: ../../../src/SDLInputState.cpp:682
13661671 msgid "Left Ctrl"
13671672 msgstr "Strg links"
13681673
1369 #: ../../../src/SDLInputState.cpp:593
1674 #: ../../../src/SDLInputState.cpp:684
13701675 msgid "Left Shift"
13711676 msgstr "Umschalt links"
13721677
1373 #: ../../../src/SDLInputState.cpp:594
1678 #: ../../../src/SDLInputState.cpp:685
13741679 msgid "NumLock"
13751680 msgstr "Numlock"
13761681
1377 #: ../../../src/SDLInputState.cpp:595
1682 #: ../../../src/SDLInputState.cpp:686
13781683 msgid "PageDown"
13791684 msgstr "Bild ab"
13801685
1381 #: ../../../src/SDLInputState.cpp:596
1686 #: ../../../src/SDLInputState.cpp:687
13821687 msgid "PageUp"
13831688 msgstr "Bild auf"
13841689
1385 #: ../../../src/SDLInputState.cpp:597
1386 msgid "Pause"
1387 msgstr "Pause"
1388
1389 #: ../../../src/SDLInputState.cpp:598
1690 #: ../../../src/SDLInputState.cpp:689
13901691 msgid "PrintScreen"
13911692 msgstr "Drucken"
13921693
1393 #: ../../../src/SDLInputState.cpp:599
1694 #: ../../../src/SDLInputState.cpp:690
13941695 msgid "Right Alt"
13951696 msgstr "Alt rechts"
13961697
1397 #: ../../../src/SDLInputState.cpp:600
1698 #: ../../../src/SDLInputState.cpp:691
13981699 msgid "Right Ctrl"
13991700 msgstr "Strg rechts"
14001701
1401 #: ../../../src/SDLInputState.cpp:601
1702 #: ../../../src/SDLInputState.cpp:692
14021703 msgid "Return"
14031704 msgstr "Eingabe"
14041705
1405 #: ../../../src/SDLInputState.cpp:603
1706 #: ../../../src/SDLInputState.cpp:694
14061707 msgid "Right Shift"
14071708 msgstr "Umschalt rechts"
14081709
1409 #: ../../../src/SDLInputState.cpp:604
1710 #: ../../../src/SDLInputState.cpp:695
14101711 msgid "ScrollLock"
14111712 msgstr "Rollen"
14121713
1413 #: ../../../src/SDLInputState.cpp:605
1714 #: ../../../src/SDLInputState.cpp:696
14141715 msgid "Space"
14151716 msgstr "Leertaste"
14161717
1417 #: ../../../src/SDLInputState.cpp:606
1418 msgid "Tab"
1419 msgstr "Tab"
1420
1421 #: ../../../src/SDLInputState.cpp:620
1718 #: ../../../src/SDLInputState.cpp:710
1719 #, c-format
1720 msgid "M%d"
1721 msgstr "M%d"
1722
1723 #: ../../../src/SDLInputState.cpp:716
14221724 #, c-format
14231725 msgid "Mouse %d"
14241726 msgstr "Maus %d"
14251727
1426 #: ../../../src/SDLInputState.cpp:628
1728 #: ../../../src/SDLInputState.cpp:726
1729 #, c-format
1730 msgid "JX%d-"
1731 msgstr "JX%d-"
1732
1733 #: ../../../src/SDLInputState.cpp:728
14271734 #, c-format
14281735 msgid "Axis %d -"
14291736 msgstr "Achse %d -"
14301737
1431 #: ../../../src/SDLInputState.cpp:630
1738 #: ../../../src/SDLInputState.cpp:732
1739 #, c-format
1740 msgid "JX%d+"
1741 msgstr "JX%d+"
1742
1743 #: ../../../src/SDLInputState.cpp:734
14321744 #, c-format
14331745 msgid "Axis %d +"
14341746 msgstr "Achse %d +"
14351747
1436 #: ../../../src/SDLInputState.cpp:633
1748 #: ../../../src/SDLInputState.cpp:739
1749 #, c-format
1750 msgid "JB%d"
1751 msgstr "JB%d"
1752
1753 #: ../../../src/SDLInputState.cpp:741
14371754 #, c-format
14381755 msgid "Button %d"
14391756 msgstr "Taste %d"
14401757
1441 #: ../../../src/SDLInputState.cpp:637
1442 msgid "(none)"
1443 msgstr "(keine)"
1444
1445 #: ../../../src/SDLInputState.cpp:677
1758 #: ../../../src/SDLInputState.cpp:788
14461759 msgid "Touch control D-Pad"
14471760 msgstr "Touchscreen Steuerkreuz"
14481761
1449 #: ../../../src/SDLInputState.cpp:701
1762 #: ../../../src/SDLInputState.cpp:812
14501763 msgid "Touch control buttons"
14511764 msgstr "Touchscreen Tasten"
14521765
1453 #: ../../../src/SDLInputState.cpp:716
1766 #: ../../../src/SDLInputState.cpp:827
14541767 msgid "Tap"
14551768 msgstr "Antippen"
14561769
1457 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1458 #: ../../../src/SDLInputState.cpp:768
1770 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1771 #, c-format
1772 msgid "Can not bind: %s"
1773 msgstr "Kann nicht belegt werden: %s"
1774
1775 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1776 #: ../../../src/SDLInputState.cpp:901
14591777 #, c-format
14601778 msgid "'%s' is no longer bound to:"
14611779 msgstr "„%s“ ist nicht mehr zugewiesen auf:"
15441862
15451863 #: ../../../src/Stats.cpp:84
15461864 msgid "Increases the XP gained per kill."
1547 msgstr "Erhöht die EP für getötete Gegner"
1865 msgstr "Erhöht die EP für getötete Gegner."
15481866
15491867 #: ../../../src/Stats.cpp:88
15501868 #, c-format
15541872 #: ../../../src/Stats.cpp:89
15551873 #, c-format
15561874 msgid "Increases the %s found per drop."
1557 msgstr "Erhöht die Chance auf %s"
1875 msgstr "Erhöht die Chance auf %s."
15581876
15591877 #: ../../../src/Stats.cpp:93
15601878 msgid "Item Find Chance"
16251943 msgid "k"
16261944 msgstr "k"
16271945
1628 #: ../../../src/Utils.cpp:580
1946 #: ../../../src/Utils.cpp:616
16291947 #, c-format
16301948 msgid "%s second"
16311949 msgstr "%s Sekunde"
16321950
1633 #: ../../../src/Utils.cpp:583
1951 #: ../../../src/Utils.cpp:619
16341952 #, c-format
16351953 msgid "%s seconds"
16361954 msgstr "%s Sekunden"
1111 msgstr ""
1212 "Project-Id-Version: PACKAGE VERSION\n"
1313 "Report-Msgid-Bugs-To: \n"
14 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
14 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1515 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1616 "Last-Translator: Nea Retrogamer (nearetrogamer), 2018\n"
1717 "Language-Team: Greek (https://www.transifex.com/flareorg/teams/84925/el/)\n"
2121 "Language: el\n"
2222 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
2323
24 #: ../../../src/Avatar.cpp:367
24 #: ../../../src/Avatar.cpp:387
25 msgid "Your health is low!"
26 msgstr ""
27
28 #: ../../../src/Avatar.cpp:419
2529 #, c-format
2630 msgid "Congratulations, you have reached level %d!"
2731 msgstr "Συγχαρητήρια, έφτασες στο επίπεδο %d!"
2832
29 #: ../../../src/Avatar.cpp:369
30 msgid "You may increase one attribute through the Character Menu."
31 msgstr "Μπορείς να αυξήσεις μία ικανότητα μέσω του Μενού Χαρακτήρα."
32
33 #: ../../../src/Avatar.cpp:583
33 #: ../../../src/Avatar.cpp:421
34 msgid "You may increase one or more attributes through the Character Menu."
35 msgstr ""
36
37 #: ../../../src/Avatar.cpp:425
38 msgid "You may unlock one or more abilities through the Powers Menu."
39 msgstr ""
40
41 #: ../../../src/Avatar.cpp:692
3442 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3543 msgstr ""
3644
37 #: ../../../src/Avatar.cpp:589
45 #: ../../../src/Avatar.cpp:698
3846 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
3947 msgstr ""
4048
41 #: ../../../src/Avatar.cpp:839
49 #: ../../../src/Avatar.cpp:949
4250 msgid "Transformation expired. You have been moved back to a safe place."
4351 msgstr ""
4452
4755 msgid "%d %s removed."
4856 msgstr "%d %s αφαιρέθηκαν."
4957
50 #: ../../../src/CampaignManager.cpp:162
58 #: ../../../src/CampaignManager.cpp:165
59 #, c-format
60 msgid "%s x%d removed."
61 msgstr ""
62
63 #: ../../../src/CampaignManager.cpp:167
5164 #, c-format
5265 msgid "%s removed."
5366 msgstr "Αφαιρέθηκε: %s"
5467
55 #: ../../../src/CampaignManager.cpp:175
68 #: ../../../src/CampaignManager.cpp:180
5669 #, c-format
5770 msgid "You receive %s."
5871 msgstr "Λαμβάνεις %s."
5972
60 #: ../../../src/CampaignManager.cpp:177
73 #: ../../../src/CampaignManager.cpp:182
6174 #, c-format
6275 msgid "You receive %s x%d."
6376 msgstr "Λαμβάνεις %s x%d."
6477
65 #: ../../../src/CampaignManager.cpp:186
78 #: ../../../src/CampaignManager.cpp:191
6679 #, c-format
6780 msgid "You receive %d %s."
6881 msgstr "Λαμβάνεις %d %s."
6982
70 #: ../../../src/CampaignManager.cpp:195
83 #: ../../../src/CampaignManager.cpp:200
7184 #, c-format
7285 msgid "You receive %d XP."
7386 msgstr "Λαμβάνεις %d XP."
7487
75 #: ../../../src/CampaignManager.cpp:201
88 #: ../../../src/CampaignManager.cpp:206
7689 msgid "HP restored."
7790 msgstr "HP αναζωογονήθηκαν."
7891
79 #: ../../../src/CampaignManager.cpp:205
92 #: ../../../src/CampaignManager.cpp:210
8093 msgid "MP restored."
8194 msgstr "MP αναζωογονήθηκαν."
8295
83 #: ../../../src/CampaignManager.cpp:210
96 #: ../../../src/CampaignManager.cpp:215
8497 msgid "HP and MP restored."
8598 msgstr "HP και MP αναζωογονήθηκαν."
8699
87 #: ../../../src/CampaignManager.cpp:214
100 #: ../../../src/CampaignManager.cpp:219
88101 msgid "Negative effects removed."
89102 msgstr "Αρνητικές επιδράσεις αφαιρέθηκαν."
90103
91 #: ../../../src/CampaignManager.cpp:220
104 #: ../../../src/CampaignManager.cpp:225
92105 msgid "HP and MP restored, negative effects removed"
93106 msgstr "HP και MP αναζωογονήθηκαν, αρνητικές επιδράσεις αφαιρέθηκαν."
94107
106119 "The default renderer that is often faster than the SDL software renderer."
107120 msgstr ""
108121
109 #: ../../../src/EngineSettings.cpp:561
122 #: ../../../src/EngineSettings.cpp:572
110123 msgid "Adventurer"
111124 msgstr "Τυχοδιώκτης"
112125
113 #: ../../../src/Entity.cpp:511
126 #: ../../../src/Entity.cpp:522
114127 msgid "miss"
115128 msgstr "αστοχία"
116129
117 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
118 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
130 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
131 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
119132 #, c-format
120133 msgid "+%d HP"
121134 msgstr "+%d HP"
122135
123 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
124 #: ../../../src/StatBlock.cpp:822
136 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
137 #: ../../../src/StatBlock.cpp:830
125138 #, c-format
126139 msgid "+%d MP"
127140 msgstr "+%d MP"
128141
129 #: ../../../src/EventManager.cpp:738
142 #: ../../../src/EventManager.cpp:782
130143 msgid "Unknown destination"
131144 msgstr "Άγνωστος προορισμός"
132145
133 #: ../../../src/GameStateConfigBase.cpp:89
134 #: ../../../src/GameStateConfigBase.cpp:110
146 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
147 msgid "Loading..."
148 msgstr "Φόρτωση..."
149
150 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
151 msgid "Delete Save"
152 msgstr "Διαγραφή"
153
154 #: ../../../src/GameStateLoad.cpp:90
155 msgid "Delete this save?"
156 msgstr "Διαγραφή παιχνιδιού;"
157
158 #: ../../../src/GameStateLoad.cpp:92
159 msgid "Exit to Title"
160 msgstr "Έξοδος προς Τίτλο"
161
162 #: ../../../src/GameStateLoad.cpp:95
163 msgid "New Game"
164 msgstr "Νέο Παιχνίδι"
165
166 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
167 msgid "Choose a Slot"
168 msgstr "Επίλεξε μία Θέση"
169
170 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
171 msgid "Enable a story mod to continue"
172 msgstr "Ενεργοποίησε ένα πρόσθετο με σενάριο για να συνεχίσεις"
173
174 #: ../../../src/GameStateLoad.cpp:597
175 msgid "Load Game"
176 msgstr "Φόρτωση Παιχνιδιού"
177
178 #: ../../../src/GameStateLoad.cpp:706
179 msgid "Entering game world..."
180 msgstr "Είσοδος στο παιχνίδι..."
181
182 #: ../../../src/GameStateLoad.cpp:709
183 msgid "Loading saved game..."
184 msgstr "Φόρτωση αποθηκευμένου παιχνιδιού..."
185
186 #: ../../../src/GameStateLoad.cpp:742
187 msgid "Invalid save"
188 msgstr ""
189
190 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
191 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
192 #: ../../../src/MenuPowers.cpp:1543
193 #, c-format
194 msgid "Level %d"
195 msgstr "Επίπεδο %d"
196
197 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
198 #: ../../../src/MenuConfig.cpp:244
199 msgid "Cancel"
200 msgstr "Ακύρωση"
201
202 #: ../../../src/GameStateNew.cpp:68
203 msgid "Create"
204 msgstr "Δημιουργία"
205
206 #: ../../../src/GameStateNew.cpp:76
207 msgid "Randomize"
208 msgstr ""
209
210 #: ../../../src/GameStateNew.cpp:92
211 msgid "Choose a Portrait"
212 msgstr "Επιλογή Πορτραίτου"
213
214 #: ../../../src/GameStateNew.cpp:96
215 msgid "Choose a Name"
216 msgstr "Επιλογή Ονόματος"
217
218 #: ../../../src/GameStateNew.cpp:100
219 msgid "Permadeath?"
220 msgstr "Μόνιμος θάνατος;"
221
222 #: ../../../src/GameStateNew.cpp:104
223 msgid "Choose a Class"
224 msgstr "Επιλογή Κλάσης"
225
226 #: ../../../src/GameStateTitle.cpp:107
227 msgid "Play Game"
228 msgstr "Έναρξη Παιχνιδιού"
229
230 #: ../../../src/GameStateTitle.cpp:110
231 msgid "Enable a core mod to continue"
232 msgstr "Ενεργοποίησε ένα πρόσθετο πυρήνα για να συνεχίσεις"
233
234 #: ../../../src/GameStateTitle.cpp:114
235 msgid "Configuration"
236 msgstr "Ρυθμίσεις"
237
238 #: ../../../src/GameStateTitle.cpp:117
239 msgid "Credits"
240 msgstr "Μνεία"
241
242 #: ../../../src/GameStateTitle.cpp:120
243 msgid "Exit Game"
244 msgstr "Έξοδος"
245
246 #: ../../../src/InputState.cpp:407
247 msgid "Accept"
248 msgstr "Αποδοχή"
249
250 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
251 #: ../../../src/SDLInputState.cpp:698
252 msgid "Up"
253 msgstr "Πάνω"
254
255 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
256 #: ../../../src/SDLInputState.cpp:676
257 msgid "Down"
258 msgstr "Κάτω"
259
260 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
261 #: ../../../src/SDLInputState.cpp:683
262 msgid "Left"
263 msgstr "Αριστερά"
264
265 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
266 #: ../../../src/SDLInputState.cpp:693
267 msgid "Right"
268 msgstr "Δεξιά"
269
270 #: ../../../src/InputState.cpp:412
271 msgid "Bar1"
272 msgstr "Μπάρα 1"
273
274 #: ../../../src/InputState.cpp:413
275 msgid "Bar2"
276 msgstr "Μπάρα 2"
277
278 #: ../../../src/InputState.cpp:414
279 msgid "Bar3"
280 msgstr "Μπάρα 3"
281
282 #: ../../../src/InputState.cpp:415
283 msgid "Bar4"
284 msgstr "Μπάρα 4"
285
286 #: ../../../src/InputState.cpp:416
287 msgid "Bar5"
288 msgstr "Μπάρα 5"
289
290 #: ../../../src/InputState.cpp:417
291 msgid "Bar6"
292 msgstr "Μπάρα 6"
293
294 #: ../../../src/InputState.cpp:418
295 msgid "Bar7"
296 msgstr "Μπάρα 7"
297
298 #: ../../../src/InputState.cpp:419
299 msgid "Bar8"
300 msgstr "Μπάρα 8"
301
302 #: ../../../src/InputState.cpp:420
303 msgid "Bar9"
304 msgstr "Μπάρα 9"
305
306 #: ../../../src/InputState.cpp:421
307 msgid "Bar0"
308 msgstr "Μπάρα 0"
309
310 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
311 #: ../../../src/MenuCharacter.cpp:54
312 msgid "Character"
313 msgstr "Χαρακτήρας"
314
315 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
316 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
317 msgid "Inventory"
318 msgstr "Εξοπλισμός"
319
320 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
321 #: ../../../src/MenuPowers.cpp:167
322 msgid "Powers"
323 msgstr "Δυνάμεις"
324
325 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
326 #: ../../../src/MenuLog.cpp:72
327 msgid "Log"
328 msgstr "Ημερολόγιο"
329
330 #: ../../../src/InputState.cpp:426
331 msgid "Main1"
332 msgstr "Κύρια Ενέργεια 1"
333
334 #: ../../../src/InputState.cpp:427
335 msgid "Main2"
336 msgstr "Κύρια Ενέργεια 2"
337
338 #: ../../../src/InputState.cpp:428
339 msgid "Ctrl"
340 msgstr "Ctrl"
341
342 #: ../../../src/InputState.cpp:429
343 msgid "Shift"
344 msgstr "Shift"
345
346 #: ../../../src/InputState.cpp:430
347 msgid "Alt"
348 msgstr "Alt"
349
350 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
351 msgid "Delete"
352 msgstr "Διαγραφή"
353
354 #: ../../../src/InputState.cpp:432
355 msgid "ActionBar Accept"
356 msgstr "Μπάρα Ενεργειών Αποδοχή"
357
358 #: ../../../src/InputState.cpp:433
359 msgid "ActionBar Left"
360 msgstr "Μπάρα Ενεργειών Αριστερά"
361
362 #: ../../../src/InputState.cpp:434
363 msgid "ActionBar Right"
364 msgstr "Μπάρα Ενεργειών Δεξιά"
365
366 #: ../../../src/InputState.cpp:435
367 msgid "ActionBar Use"
368 msgstr "Μπάρα Ενεργειών Χρήση"
369
370 #: ../../../src/InputState.cpp:436
371 msgid "Developer Menu"
372 msgstr ""
373
374 #: ../../../src/InputState.cpp:438
375 msgid "Left Mouse"
376 msgstr ""
377
378 #: ../../../src/InputState.cpp:439
379 msgid "Middle Mouse"
380 msgstr ""
381
382 #: ../../../src/InputState.cpp:440
383 msgid "Right Mouse"
384 msgstr ""
385
386 #: ../../../src/InputState.cpp:441
387 msgid "Wheel Up"
388 msgstr ""
389
390 #: ../../../src/InputState.cpp:442
391 msgid "Wheel Down"
392 msgstr ""
393
394 #: ../../../src/InputState.cpp:443
395 msgid "Mouse X1"
396 msgstr ""
397
398 #: ../../../src/InputState.cpp:444
399 msgid "Mouse X2"
400 msgstr ""
401
402 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
403 msgid "Unknown Item"
404 msgstr ""
405
406 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
407 #, c-format
408 msgid "%d%% Speed"
409 msgstr "%d%%Ταχύτητα"
410
411 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
412 #, c-format
413 msgid "%d%% Attack Speed"
414 msgstr "%d%%Ταχύτητα Επίθεσης"
415
416 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
417 #: ../../../src/MenuPowers.cpp:832
418 #, c-format
419 msgid "Resistance (%s)"
420 msgstr ""
421
422 #: ../../../src/ItemManager.cpp:714
423 #, c-format
424 msgid "Requires %s"
425 msgstr ""
426
427 #: ../../../src/ItemManager.cpp:763
428 msgid "Quest Item"
429 msgstr "Αντικείμενο Αποστολής"
430
431 #: ../../../src/ItemManager.cpp:790
432 #, c-format
433 msgid "Quality: %s"
434 msgstr "Ποιότητα: %s"
435
436 #: ../../../src/ItemManager.cpp:815
437 #, c-format
438 msgid "Absorb: %d-%d"
439 msgstr "Απορρόφηση: %d-%d"
440
441 #: ../../../src/ItemManager.cpp:817
442 #, c-format
443 msgid "Absorb: %d"
444 msgstr "Απορρόφηση: %d"
445
446 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
447 #: ../../../src/MenuPowers.cpp:1133
448 #, c-format
449 msgid "Requires Level %d"
450 msgstr "Χρειάζεται Επίπεδο %d"
451
452 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
453 #: ../../../src/MenuPowers.cpp:1124
454 #, c-format
455 msgid "Requires %s %d"
456 msgstr "Χρειάζεται %s%d"
457
458 #: ../../../src/ItemManager.cpp:879
459 #, c-format
460 msgid "Requires Class: %s"
461 msgstr ""
462
463 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
464 #, c-format
465 msgid "Buy Price: %d %s"
466 msgstr "Τιμή Αγοράς: %d %s"
467
468 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
469 #, c-format
470 msgid "Buy Price: %d %s each"
471 msgstr "Τιμή Αγοράς: %d %s έκαστο"
472
473 #: ../../../src/ItemManager.cpp:916
474 #, c-format
475 msgid "Sell Price: %d %s"
476 msgstr "Τιμή Πώλησης: %d %s"
477
478 #: ../../../src/ItemManager.cpp:918
479 #, c-format
480 msgid "Sell Price: %d %s each"
481 msgstr "Τιμή Πώλησης: %d %s έκαστο"
482
483 #: ../../../src/ItemManager.cpp:927
484 msgid "Set:"
485 msgstr ""
486
487 #: ../../../src/ItemManager.cpp:934
488 #, c-format
489 msgid "%d items:"
490 msgstr ""
491
492 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
493 #, c-format
494 msgid "Press [%s] to use"
495 msgstr ""
496
497 #: ../../../src/ItemManager.cpp:951
498 #, c-format
499 msgid "Press [%s] to read"
500 msgstr ""
501
502 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
503 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
504 #, c-format
505 msgid "Hotkey: %s"
506 msgstr ""
507
508 #: ../../../src/MenuActionBar.cpp:599
509 msgid "Not enough MP."
510 msgstr ""
511
512 #: ../../../src/MenuActiveEffects.cpp:124
513 #, c-format
514 msgid "x%d"
515 msgstr ""
516
517 #: ../../../src/MenuActiveEffects.cpp:219
518 msgid "Remaining:"
519 msgstr ""
520
521 #: ../../../src/MenuActiveEffects.cpp:225
522 #, c-format
523 msgid "x%d stacks"
524 msgstr ""
525
526 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
527 msgid "Name"
528 msgstr "Όνομα"
529
530 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
531 msgid "Level"
532 msgstr "Επίπεδο"
533
534 #: ../../../src/MenuCharacter.cpp:310
535 #, c-format
536 msgid "%d unspent stat point"
537 msgstr ""
538
539 #: ../../../src/MenuCharacter.cpp:313
540 #, c-format
541 msgid "%d unspent stat points"
542 msgstr ""
543
544 #: ../../../src/MenuCharacter.cpp:355
545 #, c-format
546 msgid "Reduces the damage taken from \"%s\" elemental attacks."
547 msgstr ""
548
549 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
550 #, c-format
551 msgid "XP: %d"
552 msgstr "XP (Πόντοι Εμπειρίας): %d"
553
554 #: ../../../src/MenuCharacter.cpp:367
555 #, c-format
556 msgid "Next: %d"
557 msgstr "Επόμενο: %d"
558
559 #: ../../../src/MenuCharacter.cpp:373
560 #, c-format
561 msgid "base (%d), bonus (%d)"
562 msgstr "βάση (%d), μπόνους (%d)"
563
564 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
565 msgid "Related stats:"
566 msgstr ""
567
568 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
569 #, c-format
570 msgid "Each level grants %d."
571 msgstr ""
572
573 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
574 #, c-format
575 msgid "Each point of %s grants %d."
576 msgstr ""
577
578 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
579 msgid "Clear"
580 msgstr ""
581
582 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
583 msgid "Assign:"
584 msgstr ""
585
586 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
135587 msgid "Defaults"
136588 msgstr "Προκαθορισμένα"
137589
138 #: ../../../src/GameStateConfigBase.cpp:89
590 #: ../../../src/MenuConfig.cpp:123
139591 msgid "Reset ALL settings?"
140592 msgstr "Επαναφορά ΌΛΩΝ των ρυθμίσεων;"
141593
142 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
594 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
143595 msgid "OK"
144596 msgstr "Εντάξει"
145597
146 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
147 #: ../../../src/InputState.cpp:401
148 msgid "Cancel"
149 msgstr "Ακύρωση"
150
151 #: ../../../src/GameStateConfigBase.cpp:160
152 #: ../../../src/GameStateConfigDesktop.cpp:130
598 #: ../../../src/MenuConfig.cpp:246
599 msgid "Continue"
600 msgstr ""
601
602 #: ../../../src/MenuConfig.cpp:248
603 msgid "Save Game"
604 msgstr ""
605
606 #: ../../../src/MenuConfig.cpp:291
607 msgid "Default"
608 msgstr ""
609
610 #: ../../../src/MenuConfig.cpp:291
611 msgid ""
612 "Show all loot tooltips, except for those that would be obscured by the "
613 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
614 msgstr ""
615
616 #: ../../../src/MenuConfig.cpp:292
617 msgid "Show all"
618 msgstr ""
619
620 #: ../../../src/MenuConfig.cpp:292
621 msgid ""
622 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
623 msgstr ""
624
625 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
626 msgid "Hidden"
627 msgstr ""
628
629 #: ../../../src/MenuConfig.cpp:293
630 msgid ""
631 "Always hide loot tooltips, except for when a piece of loot is hovered with "
632 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
633 msgstr ""
634
635 #: ../../../src/MenuConfig.cpp:296
636 msgid "Visible"
637 msgstr ""
638
639 #: ../../../src/MenuConfig.cpp:297
640 msgid "Visible (2x zoom)"
641 msgstr ""
642
643 #: ../../../src/MenuConfig.cpp:301
644 msgid ""
645 "Controls the type of warning to be activated when the player is below the "
646 "low health threshold."
647 msgstr ""
648
649 #: ../../../src/MenuConfig.cpp:302
650 msgid "- Display a message"
651 msgstr ""
652
653 #: ../../../src/MenuConfig.cpp:303
654 msgid "- Play a sound"
655 msgstr ""
656
657 #: ../../../src/MenuConfig.cpp:304
658 msgid "- Change the cursor"
659 msgstr ""
660
661 #: ../../../src/MenuConfig.cpp:306
662 msgid "Disabled"
663 msgstr ""
664
665 #: ../../../src/MenuConfig.cpp:307
666 msgid "All"
667 msgstr ""
668
669 #: ../../../src/MenuConfig.cpp:308
670 msgid "Message & Cursor"
671 msgstr ""
672
673 #: ../../../src/MenuConfig.cpp:309
674 msgid "Message & Sound"
675 msgstr ""
676
677 #: ../../../src/MenuConfig.cpp:310
678 msgid "Sound & Cursor"
679 msgstr ""
680
681 #: ../../../src/MenuConfig.cpp:311
682 msgid "Message"
683 msgstr ""
684
685 #: ../../../src/MenuConfig.cpp:312
686 msgid "Cursor"
687 msgstr ""
688
689 #: ../../../src/MenuConfig.cpp:313
690 msgid "Sound"
691 msgstr ""
692
693 #: ../../../src/MenuConfig.cpp:319
694 msgid ""
695 "When the player's health drops below the given threshold, the low health "
696 "notifications are triggered if one or more of them is enabled."
697 msgstr ""
698
699 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
700 msgid "Exit"
701 msgstr "Έξοδος"
702
703 #: ../../../src/MenuConfig.cpp:333
704 msgid "Video"
705 msgstr "Εικόνα"
706
707 #: ../../../src/MenuConfig.cpp:334
153708 msgid "Audio"
154709 msgstr "Ήχος"
155710
156 #: ../../../src/GameStateConfigBase.cpp:161
157 #: ../../../src/GameStateConfigDesktop.cpp:131
711 #: ../../../src/MenuConfig.cpp:335
158712 msgid "Interface"
159713 msgstr "Περιβάλλον"
160714
161 #: ../../../src/GameStateConfigBase.cpp:162
162 #: ../../../src/GameStateConfigDesktop.cpp:134
715 #: ../../../src/MenuConfig.cpp:336
716 msgid "Input"
717 msgstr "Εισαγωγή"
718
719 #: ../../../src/MenuConfig.cpp:337
720 msgid "Keybindings"
721 msgstr "Πλήκτρα"
722
723 #: ../../../src/MenuConfig.cpp:338
163724 msgid "Mods"
164725 msgstr "Πρόσθετα"
165726
166 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
727 #: ../../../src/MenuConfig.cpp:350
728 msgid "Paused"
729 msgstr ""
730
731 #: ../../../src/MenuConfig.cpp:353
732 msgid "Time Played"
733 msgstr ""
734
735 #: ../../../src/MenuConfig.cpp:359
736 msgid "Renderer"
737 msgstr ""
738
739 #: ../../../src/MenuConfig.cpp:360
740 msgid "Full Screen Mode"
741 msgstr "Λειτουργία πλήρους οθόνης"
742
743 #: ../../../src/MenuConfig.cpp:361
744 msgid "Hardware surfaces"
745 msgstr "Χρήση κάρτας γραφικών για επιφάνειες"
746
747 #: ../../../src/MenuConfig.cpp:362
748 msgid "V-Sync"
749 msgstr ""
750
751 #: ../../../src/MenuConfig.cpp:363
752 msgid "Texture Filtering"
753 msgstr ""
754
755 #: ../../../src/MenuConfig.cpp:364
756 msgid "DPI scaling"
757 msgstr ""
758
759 #: ../../../src/MenuConfig.cpp:365
760 msgid "Parallax Layers"
761 msgstr ""
762
763 #: ../../../src/MenuConfig.cpp:366
764 msgid "Allow changing gamma"
765 msgstr "Επιτρέπεται η αλλαγή Φωτεινότητας"
766
767 #: ../../../src/MenuConfig.cpp:367
768 msgid "Gamma"
769 msgstr "Φωτεινότητα"
770
771 #: ../../../src/MenuConfig.cpp:369
772 msgid "Sound Volume"
773 msgstr "Ένταση Ήχου"
774
775 #: ../../../src/MenuConfig.cpp:370
167776 msgid "Music Volume"
168777 msgstr "Ένταση Μουσικής"
169778
170 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
171 msgid "Sound Volume"
172 msgstr "Ένταση Ήχου"
173
174 #: ../../../src/GameStateConfigBase.cpp:257
779 #: ../../../src/MenuConfig.cpp:372
175780 msgid "Language"
176781 msgstr "Γλώσσα"
177782
178 #: ../../../src/GameStateConfigBase.cpp:266
783 #: ../../../src/MenuConfig.cpp:373
179784 msgid "Show FPS"
180785 msgstr "Εμφάνιση καρέ ανά δευτερόλεπτο"
181786
182 #: ../../../src/GameStateConfigBase.cpp:270
787 #: ../../../src/MenuConfig.cpp:374
788 msgid "Hardware mouse cursor"
789 msgstr ""
790
791 #: ../../../src/MenuConfig.cpp:375
183792 msgid "Colorblind Mode"
184793 msgstr "Ρύθμιση Δυσχρωματοψίας"
185794
186 #: ../../../src/GameStateConfigBase.cpp:274
187 msgid "Hardware mouse cursor"
188 msgstr ""
189
190 #: ../../../src/GameStateConfigBase.cpp:278
795 #: ../../../src/MenuConfig.cpp:376
191796 msgid "Developer Mode"
192797 msgstr ""
193798
194 #: ../../../src/GameStateConfigBase.cpp:282
799 #: ../../../src/MenuConfig.cpp:377
195800 msgid "Subtitles"
196801 msgstr "Υπότιτλοι"
197802
198 #: ../../../src/GameStateConfigBase.cpp:286
199 msgid "Active Mods"
200 msgstr "Ενεργά Πρόσθετα"
201
202 #: ../../../src/GameStateConfigBase.cpp:295
203 msgid "Available Mods"
204 msgstr "Διαθέσιμα Πρόσθετα"
205
206 #: ../../../src/GameStateConfigBase.cpp:314
207 msgid "<< Disable"
208 msgstr "<< Απενεργοποίηση"
209
210 #: ../../../src/GameStateConfigBase.cpp:320
211 msgid "Enable >>"
212 msgstr "Ενεργοποίηση >>"
213
214 #: ../../../src/GameStateConfigBase.cpp:873
215 msgid "Version:"
216 msgstr ""
217
218 #: ../../../src/GameStateConfigBase.cpp:878
219 msgid "Game:"
220 msgstr "Παιχνίδι:"
221
222 #: ../../../src/GameStateConfigBase.cpp:883
223 msgid "Engine version:"
224 msgstr ""
225
226 #: ../../../src/GameStateConfigBase.cpp:891
227 msgid "Requires mods:"
228 msgstr ""
229
230 #: ../../../src/GameStateConfigDesktop.cpp:83
231 #: ../../../src/GameStateConfigDesktop.cpp:751
232 msgid "Clear"
233 msgstr ""
234
235 #: ../../../src/GameStateConfigDesktop.cpp:83
236 #: ../../../src/GameStateConfigDesktop.cpp:749
237 msgid "Assign:"
238 msgstr ""
239
240 #: ../../../src/GameStateConfigDesktop.cpp:128
241 msgid "Video"
242 msgstr "Εικόνα"
243
244 #: ../../../src/GameStateConfigDesktop.cpp:132
245 msgid "Input"
246 msgstr "Εισαγωγή"
247
248 #: ../../../src/GameStateConfigDesktop.cpp:133
249 msgid "Keybindings"
250 msgstr "Πλήκτρα"
251
252 #: ../../../src/GameStateConfigDesktop.cpp:188
803 #: ../../../src/MenuConfig.cpp:378
804 msgid "Loot tooltip visibility"
805 msgstr ""
806
807 #: ../../../src/MenuConfig.cpp:379
808 msgid "Mini-map mode"
809 msgstr ""
810
811 #: ../../../src/MenuConfig.cpp:380
812 msgid "Always show stat bar labels"
813 msgstr ""
814
815 #: ../../../src/MenuConfig.cpp:381
816 msgid "Allow stat bar auto-hiding"
817 msgstr ""
818
819 #: ../../../src/MenuConfig.cpp:382
820 msgid "Show combat text"
821 msgstr "Προβολή κειμένου μάχης"
822
823 #: ../../../src/MenuConfig.cpp:383
824 msgid "Automatically equip items"
825 msgstr ""
826
827 #: ../../../src/MenuConfig.cpp:384
828 msgid "Show hidden entity markers"
829 msgstr ""
830
831 #: ../../../src/MenuConfig.cpp:385
832 msgid "Low health notification"
833 msgstr ""
834
835 #: ../../../src/MenuConfig.cpp:386
836 msgid "Low health threshold"
837 msgstr ""
838
839 #: ../../../src/MenuConfig.cpp:389
840 msgid "Joystick"
841 msgstr "Χειριστήριο"
842
843 #: ../../../src/MenuConfig.cpp:390
844 msgid "Move hero using mouse"
845 msgstr "Κίνηση ήρωα με ποντίκι"
846
847 #: ../../../src/MenuConfig.cpp:391
848 msgid "Mouse aim"
849 msgstr "Σκόπευση με το ποντίκι"
850
851 #: ../../../src/MenuConfig.cpp:392
852 msgid "Do not use mouse"
853 msgstr "Απενεργοποίηση του ποντικιού"
854
855 #: ../../../src/MenuConfig.cpp:393
856 msgid "Swap mouse movement button"
857 msgstr ""
858
859 #: ../../../src/MenuConfig.cpp:394
860 msgid "Attack with mouse movement"
861 msgstr ""
862
863 #: ../../../src/MenuConfig.cpp:395
864 msgid "Joystick Deadzone"
865 msgstr "Νεκρή Ζώνη Χειριστηρίου"
866
867 #: ../../../src/MenuConfig.cpp:405
868 #, c-format
869 msgid "Primary binding: %s"
870 msgstr ""
871
872 #: ../../../src/MenuConfig.cpp:406
873 #, c-format
874 msgid "Alternate binding: %s"
875 msgstr ""
876
877 #: ../../../src/MenuConfig.cpp:407
878 #, c-format
879 msgid "Joystick binding: %s"
880 msgstr ""
881
882 #: ../../../src/MenuConfig.cpp:508
253883 msgid ""
254884 "Will try to store surfaces in video memory versus system memory. The effect "
255885 "this has on performance depends on the renderer."
256886 msgstr ""
257887
258 #: ../../../src/GameStateConfigDesktop.cpp:189
888 #: ../../../src/MenuConfig.cpp:509
259889 msgid ""
260890 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
261891 "windowed mode or input lag."
262892 msgstr ""
263893
264 #: ../../../src/GameStateConfigDesktop.cpp:190
894 #: ../../../src/MenuConfig.cpp:510
265895 msgid ""
266896 "When enabled, this uses the screen DPI in addition to the window dimensions "
267897 "to scale the rendering resolution. Otherwise, only the window dimensions are"
268898 " used."
269899 msgstr ""
270900
271 #: ../../../src/GameStateConfigDesktop.cpp:191
901 #: ../../../src/MenuConfig.cpp:511
272902 msgid ""
273903 "This enables parallax (non-tile) layers. Disabling this setting can improve "
274904 "performance in some cases."
275905 msgstr ""
276906
277 #: ../../../src/GameStateConfigDesktop.cpp:192
278 msgid "Experimental"
279 msgstr "Πειραματικό"
280
281 #: ../../../src/GameStateConfigDesktop.cpp:193
282 msgid "For handheld devices"
283 msgstr "Για φορητές συσκευές"
284
285 #: ../../../src/GameStateConfigDesktop.cpp:211
286 msgid "Renderer"
287 msgstr ""
288
289 #: ../../../src/GameStateConfigDesktop.cpp:227
290 msgid "Full Screen Mode"
291 msgstr "Λειτουργία πλήρους οθόνης"
292
293 #: ../../../src/GameStateConfigDesktop.cpp:231
294 msgid "Move hero using mouse"
295 msgstr "Κίνηση ήρωα με ποντίκι"
296
297 #: ../../../src/GameStateConfigDesktop.cpp:235
298 msgid "Hardware surfaces"
299 msgstr "Χρήση κάρτας γραφικών για επιφάνειες"
300
301 #: ../../../src/GameStateConfigDesktop.cpp:239
302 msgid "V-Sync"
303 msgstr ""
304
305 #: ../../../src/GameStateConfigDesktop.cpp:243
306 msgid "Texture Filtering"
307 msgstr ""
308
309 #: ../../../src/GameStateConfigDesktop.cpp:247
310 msgid "DPI scaling"
311 msgstr ""
312
313 #: ../../../src/GameStateConfigDesktop.cpp:251
314 msgid "Parallax Layers"
315 msgstr ""
316
317 #: ../../../src/GameStateConfigDesktop.cpp:255
318 msgid "Allow changing gamma"
319 msgstr "Επιτρέπεται η αλλαγή Φωτεινότητας"
320
321 #: ../../../src/GameStateConfigDesktop.cpp:259
322 msgid "Gamma"
323 msgstr "Φωτεινότητα"
324
325 #: ../../../src/GameStateConfigDesktop.cpp:263
326 msgid "Use joystick"
327 msgstr "Χρήση χειριστηρίου"
328
329 #: ../../../src/GameStateConfigDesktop.cpp:267
330 msgid "Joystick"
331 msgstr "Χειριστήριο"
332
333 #: ../../../src/GameStateConfigDesktop.cpp:283
334 msgid "Mouse aim"
335 msgstr "Σκόπευση με το ποντίκι"
336
337 #: ../../../src/GameStateConfigDesktop.cpp:287
338 msgid "Do not use mouse"
339 msgstr "Απενεργοποίηση του ποντικιού"
340
341 #: ../../../src/GameStateConfigDesktop.cpp:291
342 msgid "Joystick Deadzone"
343 msgstr "Νεκρή Ζώνη Χειριστηρίου"
344
345 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
346 msgid "Loading..."
347 msgstr "Φόρτωση..."
348
349 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
350 msgid "Delete Save"
351 msgstr "Διαγραφή"
352
353 #: ../../../src/GameStateLoad.cpp:88
354 msgid "Delete this save?"
355 msgstr "Διαγραφή παιχνιδιού;"
356
357 #: ../../../src/GameStateLoad.cpp:90
358 msgid "Exit to Title"
359 msgstr "Έξοδος προς Τίτλο"
360
361 #: ../../../src/GameStateLoad.cpp:93
362 msgid "New Game"
363 msgstr "Νέο Παιχνίδι"
364
365 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
366 msgid "Choose a Slot"
367 msgstr "Επίλεξε μία Θέση"
368
369 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
370 msgid "Enable a story mod to continue"
371 msgstr "Ενεργοποίησε ένα πρόσθετο με σενάριο για να συνεχίσεις"
372
373 #: ../../../src/GameStateLoad.cpp:589
374 msgid "Load Game"
375 msgstr "Φόρτωση Παιχνιδιού"
376
377 #: ../../../src/GameStateLoad.cpp:695
378 msgid "Entering game world..."
379 msgstr "Είσοδος στο παιχνίδι..."
380
381 #: ../../../src/GameStateLoad.cpp:698
382 msgid "Loading saved game..."
383 msgstr "Φόρτωση αποθηκευμένου παιχνιδιού..."
384
385 #: ../../../src/GameStateLoad.cpp:731
386 msgid "Invalid save"
387 msgstr ""
388
389 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
390 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
391 #: ../../../src/MenuPowers.cpp:1542
392 #, c-format
393 msgid "Level %d"
394 msgstr "Επίπεδο %d"
395
396 #: ../../../src/GameStateNew.cpp:68
397 msgid "Create"
398 msgstr "Δημιουργία"
399
400 #: ../../../src/GameStateNew.cpp:76
401 msgid "Randomize"
402 msgstr ""
403
404 #: ../../../src/GameStateNew.cpp:92
405 msgid "Choose a Portrait"
406 msgstr "Επιλογή Πορτραίτου"
407
408 #: ../../../src/GameStateNew.cpp:96
409 msgid "Choose a Name"
410 msgstr "Επιλογή Ονόματος"
411
412 #: ../../../src/GameStateNew.cpp:100
413 msgid "Permadeath?"
414 msgstr "Μόνιμος θάνατος;"
415
416 #: ../../../src/GameStateNew.cpp:104
417 msgid "Choose a Class"
418 msgstr "Επιλογή Κλάσης"
419
420 #: ../../../src/GameStateTitle.cpp:108
421 msgid "Play Game"
422 msgstr "Έναρξη Παιχνιδιού"
423
424 #: ../../../src/GameStateTitle.cpp:111
425 msgid "Enable a core mod to continue"
426 msgstr "Ενεργοποίησε ένα πρόσθετο πυρήνα για να συνεχίσεις"
427
428 #: ../../../src/GameStateTitle.cpp:115
429 msgid "Configuration"
430 msgstr "Ρυθμίσεις"
431
432 #: ../../../src/GameStateTitle.cpp:118
433 msgid "Credits"
434 msgstr "Μνεία"
435
436 #: ../../../src/GameStateTitle.cpp:121
437 msgid "Exit Game"
438 msgstr "Έξοδος"
439
440 #: ../../../src/InputState.cpp:402
441 msgid "Accept"
442 msgstr "Αποδοχή"
443
444 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
445 msgid "Up"
446 msgstr "Πάνω"
447
448 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
449 msgid "Down"
450 msgstr "Κάτω"
451
452 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
453 msgid "Left"
454 msgstr "Αριστερά"
455
456 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
457 msgid "Right"
458 msgstr "Δεξιά"
459
460 #: ../../../src/InputState.cpp:407
461 msgid "Bar1"
462 msgstr "Μπάρα 1"
463
464 #: ../../../src/InputState.cpp:408
465 msgid "Bar2"
466 msgstr "Μπάρα 2"
467
468 #: ../../../src/InputState.cpp:409
469 msgid "Bar3"
470 msgstr "Μπάρα 3"
471
472 #: ../../../src/InputState.cpp:410
473 msgid "Bar4"
474 msgstr "Μπάρα 4"
475
476 #: ../../../src/InputState.cpp:411
477 msgid "Bar5"
478 msgstr "Μπάρα 5"
479
480 #: ../../../src/InputState.cpp:412
481 msgid "Bar6"
482 msgstr "Μπάρα 6"
483
484 #: ../../../src/InputState.cpp:413
485 msgid "Bar7"
486 msgstr "Μπάρα 7"
487
488 #: ../../../src/InputState.cpp:414
489 msgid "Bar8"
490 msgstr "Μπάρα 8"
491
492 #: ../../../src/InputState.cpp:415
493 msgid "Bar9"
494 msgstr "Μπάρα 9"
495
496 #: ../../../src/InputState.cpp:416
497 msgid "Bar0"
498 msgstr "Μπάρα 0"
499
500 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
501 #: ../../../src/MenuCharacter.cpp:54
502 msgid "Character"
503 msgstr "Χαρακτήρας"
504
505 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
506 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
507 msgid "Inventory"
508 msgstr "Εξοπλισμός"
509
510 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
511 #: ../../../src/MenuPowers.cpp:168
512 msgid "Powers"
513 msgstr "Δυνάμεις"
514
515 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
516 #: ../../../src/MenuLog.cpp:72
517 msgid "Log"
518 msgstr "Ημερολόγιο"
519
520 #: ../../../src/InputState.cpp:421
521 msgid "Main1"
522 msgstr "Κύρια Ενέργεια 1"
523
524 #: ../../../src/InputState.cpp:422
525 msgid "Main2"
526 msgstr "Κύρια Ενέργεια 2"
527
528 #: ../../../src/InputState.cpp:423
529 msgid "Ctrl"
530 msgstr "Ctrl"
531
532 #: ../../../src/InputState.cpp:424
533 msgid "Shift"
534 msgstr "Shift"
535
536 #: ../../../src/InputState.cpp:425
537 msgid "Alt"
538 msgstr "Alt"
539
540 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
541 msgid "Delete"
542 msgstr "Διαγραφή"
543
544 #: ../../../src/InputState.cpp:427
545 msgid "ActionBar Accept"
546 msgstr "Μπάρα Ενεργειών Αποδοχή"
547
548 #: ../../../src/InputState.cpp:428
549 msgid "ActionBar Left"
550 msgstr "Μπάρα Ενεργειών Αριστερά"
551
552 #: ../../../src/InputState.cpp:429
553 msgid "ActionBar Right"
554 msgstr "Μπάρα Ενεργειών Δεξιά"
555
556 #: ../../../src/InputState.cpp:430
557 msgid "ActionBar Use"
558 msgstr "Μπάρα Ενεργειών Χρήση"
559
560 #: ../../../src/InputState.cpp:431
561 msgid "Developer Menu"
562 msgstr ""
563
564 #: ../../../src/InputState.cpp:433
565 msgid "Left Mouse"
566 msgstr ""
567
568 #: ../../../src/InputState.cpp:434
569 msgid "Middle Mouse"
570 msgstr ""
571
572 #: ../../../src/InputState.cpp:435
573 msgid "Right Mouse"
574 msgstr ""
575
576 #: ../../../src/InputState.cpp:436
577 msgid "Wheel Up"
578 msgstr ""
579
580 #: ../../../src/InputState.cpp:437
581 msgid "Wheel Down"
582 msgstr ""
583
584 #: ../../../src/InputState.cpp:438
585 msgid "Mouse X1"
586 msgstr ""
587
588 #: ../../../src/InputState.cpp:439
589 msgid "Mouse X2"
590 msgstr ""
591
592 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
593 msgid "Unknown Item"
594 msgstr ""
595
596 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
597 #, c-format
598 msgid "%d%% Speed"
599 msgstr "%d%%Ταχύτητα"
600
601 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
602 #, c-format
603 msgid "%d%% Attack Speed"
604 msgstr "%d%%Ταχύτητα Επίθεσης"
605
606 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
607 #: ../../../src/MenuPowers.cpp:833
608 #, c-format
609 msgid "Resistance (%s)"
610 msgstr ""
611
612 #: ../../../src/ItemManager.cpp:684
613 #, c-format
614 msgid "Requires %s"
615 msgstr ""
616
617 #: ../../../src/ItemManager.cpp:733
618 msgid "Quest Item"
619 msgstr "Αντικείμενο Αποστολής"
620
621 #: ../../../src/ItemManager.cpp:760
622 #, c-format
623 msgid "Quality: %s"
624 msgstr "Ποιότητα: %s"
625
626 #: ../../../src/ItemManager.cpp:785
627 #, c-format
628 msgid "Absorb: %d-%d"
629 msgstr "Απορρόφηση: %d-%d"
630
631 #: ../../../src/ItemManager.cpp:787
632 #, c-format
633 msgid "Absorb: %d"
634 msgstr "Απορρόφηση: %d"
635
636 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
637 #: ../../../src/MenuPowers.cpp:1134
638 #, c-format
639 msgid "Requires Level %d"
640 msgstr "Χρειάζεται Επίπεδο %d"
641
642 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
643 #: ../../../src/MenuPowers.cpp:1125
644 #, c-format
645 msgid "Requires %s %d"
646 msgstr "Χρειάζεται %s%d"
647
648 #: ../../../src/ItemManager.cpp:849
649 #, c-format
650 msgid "Requires Class: %s"
651 msgstr ""
652
653 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
654 #, c-format
655 msgid "Buy Price: %d %s"
656 msgstr "Τιμή Αγοράς: %d %s"
657
658 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
659 #, c-format
660 msgid "Buy Price: %d %s each"
661 msgstr "Τιμή Αγοράς: %d %s έκαστο"
662
663 #: ../../../src/ItemManager.cpp:886
664 #, c-format
665 msgid "Sell Price: %d %s"
666 msgstr "Τιμή Πώλησης: %d %s"
667
668 #: ../../../src/ItemManager.cpp:888
669 #, c-format
670 msgid "Sell Price: %d %s each"
671 msgstr "Τιμή Πώλησης: %d %s έκαστο"
672
673 #: ../../../src/ItemManager.cpp:897
674 msgid "Set:"
675 msgstr ""
676
677 #: ../../../src/ItemManager.cpp:904
678 #, c-format
679 msgid "%d items:"
680 msgstr ""
681
682 #: ../../../src/ItemManager.cpp:917
683 #, c-format
684 msgid "Press [%s] to use"
685 msgstr ""
686
687 #: ../../../src/ItemManager.cpp:920
688 #, c-format
689 msgid "Press [%s] to read"
690 msgstr ""
691
692 #: ../../../src/MenuActionBar.cpp:87
693 msgid "Loot tooltip visibility"
694 msgstr ""
695
696 #: ../../../src/MenuActionBar.cpp:88
697 msgid "Mini-map mode"
698 msgstr ""
699
700 #: ../../../src/MenuActionBar.cpp:89
701 msgid "Always show stat bar labels"
702 msgstr ""
703
704 #: ../../../src/MenuActionBar.cpp:90
705 msgid "Show combat text"
706 msgstr "Προβολή κειμένου μάχης"
707
708 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
709 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
710 #, c-format
711 msgid "Hotkey: %s"
712 msgstr ""
713
714 #: ../../../src/MenuActionBar.cpp:474
715 #, c-format
716 msgid "Default. Temporarily show all loot tooltips with '%s'."
717 msgstr ""
718
719 #: ../../../src/MenuActionBar.cpp:476
720 #, c-format
721 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
722 msgstr ""
723
724 #: ../../../src/MenuActionBar.cpp:478
725 #, c-format
726 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
727 msgstr ""
728
729 #: ../../../src/MenuActionBar.cpp:482
730 msgid "Visible"
731 msgstr ""
732
733 #: ../../../src/MenuActionBar.cpp:484
734 msgid "Visible (2x zoom)"
735 msgstr ""
736
737 #: ../../../src/MenuActionBar.cpp:486
738 msgid "Hidden"
739 msgstr ""
740
741 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
742 msgid "Enabled"
743 msgstr ""
744
745 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
746 msgid "Disabled"
747 msgstr ""
748
749 #: ../../../src/MenuActionBar.cpp:657
750 msgid "Not enough MP."
751 msgstr ""
752
753 #: ../../../src/MenuActiveEffects.cpp:124
754 #, c-format
755 msgid "x%d"
756 msgstr ""
757
758 #: ../../../src/MenuActiveEffects.cpp:219
759 msgid "Remaining:"
760 msgstr ""
761
762 #: ../../../src/MenuActiveEffects.cpp:225
763 #, c-format
764 msgid "x%d stacks"
765 msgstr ""
766
767 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
768 msgid "Name"
769 msgstr "Όνομα"
770
771 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
772 msgid "Level"
773 msgstr "Επίπεδο"
774
775 #: ../../../src/MenuCharacter.cpp:310
776 #, c-format
777 msgid "%d unspent stat point"
778 msgstr ""
779
780 #: ../../../src/MenuCharacter.cpp:313
781 #, c-format
782 msgid "%d unspent stat points"
783 msgstr ""
784
785 #: ../../../src/MenuCharacter.cpp:355
786 #, c-format
787 msgid "Reduces the damage taken from \"%s\" elemental attacks."
788 msgstr ""
789
790 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
791 #, c-format
792 msgid "XP: %d"
793 msgstr "XP (Πόντοι Εμπειρίας): %d"
794
795 #: ../../../src/MenuCharacter.cpp:367
796 #, c-format
797 msgid "Next: %d"
798 msgstr "Επόμενο: %d"
799
800 #: ../../../src/MenuCharacter.cpp:373
801 #, c-format
802 msgid "base (%d), bonus (%d)"
803 msgstr "βάση (%d), μπόνους (%d)"
804
805 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
806 msgid "Related stats:"
807 msgstr ""
808
809 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
810 #, c-format
811 msgid "Each level grants %d."
812 msgstr ""
813
814 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
815 #, c-format
816 msgid "Each point of %s grants %d."
817 msgstr ""
907 #: ../../../src/MenuConfig.cpp:512
908 msgid ""
909 "Enables the below setting that controls the screen gamma level. The behavior"
910 " of the gamma setting can vary between platforms."
911 msgstr ""
912
913 #: ../../../src/MenuConfig.cpp:513
914 msgid ""
915 "Provides additional text for information that is primarily conveyed through "
916 "color."
917 msgstr ""
918
919 #: ../../../src/MenuConfig.cpp:514
920 msgid ""
921 "Some mods will automatically hide the stat bars when they are inactive. "
922 "Disabling this option will keep them displayed at all times."
923 msgstr ""
924
925 #: ../../../src/MenuConfig.cpp:515
926 msgid ""
927 "When enabled, empty equipment slots will be filled with applicable items "
928 "when they are obtained."
929 msgstr ""
930
931 #: ../../../src/MenuConfig.cpp:516
932 msgid ""
933 "Shows a marker above enemies, allies, and the player when they are obscured "
934 "by tall objects."
935 msgstr ""
936
937 #: ../../../src/MenuConfig.cpp:517
938 msgid ""
939 "This allows the game to be controlled entirely with the keyboard (or "
940 "joystick)."
941 msgstr ""
942
943 #: ../../../src/MenuConfig.cpp:518
944 msgid ""
945 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
946 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
947 "instead of 'Main1'."
948 msgstr ""
949
950 #: ../../../src/MenuConfig.cpp:519
951 msgid ""
952 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
953 "assigned to the movement button can be used by targeting an enemy. If this "
954 "setting is disabled, it is required to use 'Shift' to access the Power "
955 "assigned to the movement button."
956 msgstr ""
957
958 #: ../../../src/MenuConfig.cpp:520
959 msgid ""
960 "The player's attacks will be aimed in the direction of the mouse cursor when"
961 " this is enabled."
962 msgstr ""
963
964 #: ../../../src/MenuConfig.cpp:571
965 msgid "Active Mods"
966 msgstr "Ενεργά Πρόσθετα"
967
968 #: ../../../src/MenuConfig.cpp:580
969 msgid "Available Mods"
970 msgstr "Διαθέσιμα Πρόσθετα"
971
972 #: ../../../src/MenuConfig.cpp:599
973 msgid "<< Disable"
974 msgstr "<< Απενεργοποίηση"
975
976 #: ../../../src/MenuConfig.cpp:605
977 msgid "Enable >>"
978 msgstr "Ενεργοποίηση >>"
979
980 #: ../../../src/MenuConfig.cpp:1436
981 msgid "Version:"
982 msgstr ""
983
984 #: ../../../src/MenuConfig.cpp:1441
985 msgid "Game:"
986 msgstr "Παιχνίδι:"
987
988 #: ../../../src/MenuConfig.cpp:1446
989 msgid "Engine version:"
990 msgstr ""
991
992 #: ../../../src/MenuConfig.cpp:1454
993 msgid "Requires mods:"
994 msgstr ""
995
996 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
997 msgid "(none)"
998 msgstr ""
999
1000 #: ../../../src/MenuConfig.cpp:1579
1001 msgid "Save & Exit"
1002 msgstr "Αποθήκευση & Έξοδος"
8181003
8191004 #: ../../../src/MenuDevConsole.cpp:63
8201005 msgid "Execute"
9691154 msgid "HINT: Type help"
9701155 msgstr ""
9711156
972 #: ../../../src/MenuEnemy.cpp:138
1157 #: ../../../src/MenuEnemy.cpp:162
9731158 #, c-format
9741159 msgid "%s level %d"
9751160 msgstr "%s επιπέδου %d"
9761161
977 #: ../../../src/MenuEnemy.cpp:162
1162 #: ../../../src/MenuEnemy.cpp:186
9781163 msgid "Dead"
9791164 msgstr "Νεκρός"
9801165
981 #: ../../../src/MenuEnemy.cpp:164
1166 #: ../../../src/MenuEnemy.cpp:188
9821167 msgid "Destroyed"
9831168 msgstr ""
9841169
985 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
986 msgid "Paused"
987 msgstr ""
988
989 #: ../../../src/MenuExit.cpp:91
990 msgid "Save & Exit"
991 msgstr "Αποθήκευση & Έξοδος"
992
993 #: ../../../src/MenuExit.cpp:92
994 msgid "Exit"
995 msgstr "Έξοδος"
996
997 #: ../../../src/MenuExit.cpp:96
998 msgid "Continue"
999 msgstr "Συνέχιση"
1000
1001 #: ../../../src/MenuInventory.cpp:73
1002 msgid "Automatically equip items"
1003 msgstr ""
1004
1005 #: ../../../src/MenuInventory.cpp:188
1170 #: ../../../src/MenuInventory.cpp:177
10061171 #, c-format
10071172 msgid "Lost %d%% of %s."
10081173 msgstr ""
10091174
1010 #: ../../../src/MenuInventory.cpp:195
1175 #: ../../../src/MenuInventory.cpp:184
10111176 #, c-format
10121177 msgid "Lost %d%% of total XP."
10131178 msgstr ""
10141179
1015 #: ../../../src/MenuInventory.cpp:200
1180 #: ../../../src/MenuInventory.cpp:189
10161181 #, c-format
10171182 msgid "Lost %d%% of current level XP."
10181183 msgstr ""
10191184
1020 #: ../../../src/MenuInventory.cpp:226
1185 #: ../../../src/MenuInventory.cpp:215
10211186 #, c-format
10221187 msgid "Lost %s."
10231188 msgstr "Έχασες %s."
10241189
1025 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1190 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10261191 #, c-format
10271192 msgid "%d %s"
10281193 msgstr "%d %s"
10291194
1030 #: ../../../src/MenuInventory.cpp:317
1195 #: ../../../src/MenuInventory.cpp:300
10311196 msgid "Pick up item(s):"
10321197 msgstr ""
10331198
1034 #: ../../../src/MenuInventory.cpp:318
1199 #: ../../../src/MenuInventory.cpp:301
10351200 msgid "Use or equip item:"
10361201 msgstr ""
10371202
1038 #: ../../../src/MenuInventory.cpp:319
1203 #: ../../../src/MenuInventory.cpp:302
10391204 #, c-format
10401205 msgid "%s modifiers"
10411206 msgstr ""
10421207
1043 #: ../../../src/MenuInventory.cpp:320
1208 #: ../../../src/MenuInventory.cpp:303
10441209 msgid "Select a quantity of item:"
10451210 msgstr ""
10461211
1047 #: ../../../src/MenuInventory.cpp:323
1212 #: ../../../src/MenuInventory.cpp:306
10481213 msgid "Stash item stack:"
10491214 msgstr ""
10501215
1051 #: ../../../src/MenuInventory.cpp:325
1216 #: ../../../src/MenuInventory.cpp:308
10521217 msgid "Sell item stack:"
10531218 msgstr ""
10541219
1055 #: ../../../src/MenuInventory.cpp:592
1220 #: ../../../src/MenuInventory.cpp:574
10561221 msgid "You don't have enough of the required item."
10571222 msgstr ""
10581223
1059 #: ../../../src/MenuInventory.cpp:599
1224 #: ../../../src/MenuInventory.cpp:586
10601225 msgid "You can't use this item right now."
10611226 msgstr ""
10621227
1063 #: ../../../src/MenuInventory.cpp:611
1228 #: ../../../src/MenuInventory.cpp:598
10641229 msgid "This item can only be used from the action bar."
10651230 msgstr ""
10661231 "Αυτό το αντικείμενο μπορεί να χρησιμοποιηθεί μόνο από την μπάρα ενεργειών."
10671232
1068 #: ../../../src/MenuInventory.cpp:729
1233 #: ../../../src/MenuInventory.cpp:716
10691234 msgid "Inventory is full."
10701235 msgstr "Έχεις παραφορτωθεί."
10711236
1072 #: ../../../src/MenuInventory.cpp:849
1237 #: ../../../src/MenuInventory.cpp:841
10731238 #, c-format
10741239 msgid "Not enough %s."
10751240 msgstr "Έλλειψη από %s."
10761241
1077 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1242 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
10781243 msgid "This item can not be sold."
10791244 msgstr ""
10801245
10861251 msgid "Quests"
10871252 msgstr "Αποστολές"
10881253
1089 #: ../../../src/MenuManager.cpp:286
1254 #: ../../../src/MenuManager.cpp:296
10901255 #, c-format
10911256 msgid "XP: %d/%d"
10921257 msgstr "XP: %d/%d"
10931258
1094 #: ../../../src/MenuManager.cpp:827
1259 #: ../../../src/MenuManager.cpp:854
10951260 msgid "This item can not be dropped."
10961261 msgstr ""
10971262
10991264 msgid "Enter amount:"
11001265 msgstr ""
11011266
1102 #: ../../../src/MenuPowers.cpp:787
1267 #: ../../../src/MenuPowers.cpp:786
11031268 msgid "Passive"
11041269 msgstr ""
11051270
1106 #: ../../../src/MenuPowers.cpp:792
1271 #: ../../../src/MenuPowers.cpp:791
11071272 #, c-format
11081273 msgid "Costs %d MP"
11091274 msgstr "Κοστίζει %d MP"
11101275
1111 #: ../../../src/MenuPowers.cpp:796
1276 #: ../../../src/MenuPowers.cpp:795
11121277 #, c-format
11131278 msgid "Costs %d HP"
11141279 msgstr "Κοστίζει %d ΗP"
11151280
1116 #: ../../../src/MenuPowers.cpp:801
1281 #: ../../../src/MenuPowers.cpp:800
11171282 msgid "Cooldown:"
11181283 msgstr ""
11191284
1120 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1285 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11211286 msgid "Damage per second"
11221287 msgstr ""
11231288
1124 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1289 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11251290 msgid "HP per second"
11261291 msgstr ""
11271292
1128 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1293 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11291294 msgid "MP per second"
11301295 msgstr ""
11311296
1132 #: ../../../src/MenuPowers.cpp:885
1297 #: ../../../src/MenuPowers.cpp:884
11331298 msgid "Immobilize"
11341299 msgstr ""
11351300
1136 #: ../../../src/MenuPowers.cpp:893
1301 #: ../../../src/MenuPowers.cpp:892
11371302 msgid "Immunity"
11381303 msgstr ""
11391304
1140 #: ../../../src/MenuPowers.cpp:896
1305 #: ../../../src/MenuPowers.cpp:895
11411306 msgid "Immunity to damage over time"
11421307 msgstr ""
11431308
1144 #: ../../../src/MenuPowers.cpp:899
1309 #: ../../../src/MenuPowers.cpp:898
11451310 msgid "Immunity to slow"
11461311 msgstr ""
11471312
1148 #: ../../../src/MenuPowers.cpp:902
1313 #: ../../../src/MenuPowers.cpp:901
11491314 msgid "Immunity to stun"
11501315 msgstr ""
11511316
1152 #: ../../../src/MenuPowers.cpp:905
1317 #: ../../../src/MenuPowers.cpp:904
11531318 msgid "Immunity to HP steal"
11541319 msgstr ""
11551320
1156 #: ../../../src/MenuPowers.cpp:908
1321 #: ../../../src/MenuPowers.cpp:907
11571322 msgid "Immunity to MP steal"
11581323 msgstr ""
11591324
1160 #: ../../../src/MenuPowers.cpp:911
1325 #: ../../../src/MenuPowers.cpp:910
11611326 msgid "Immunity to knockback"
11621327 msgstr ""
11631328
1164 #: ../../../src/MenuPowers.cpp:914
1329 #: ../../../src/MenuPowers.cpp:913
11651330 msgid "Immunity to damage reflection"
11661331 msgstr ""
11671332
1168 #: ../../../src/MenuPowers.cpp:917
1333 #: ../../../src/MenuPowers.cpp:916
11691334 msgid "Stun"
11701335 msgstr ""
11711336
1172 #: ../../../src/MenuPowers.cpp:920
1337 #: ../../../src/MenuPowers.cpp:919
11731338 msgid "Automatic revive on death"
11741339 msgstr ""
11751340
1176 #: ../../../src/MenuPowers.cpp:923
1341 #: ../../../src/MenuPowers.cpp:922
11771342 msgid "Convert"
11781343 msgstr ""
11791344
1180 #: ../../../src/MenuPowers.cpp:926
1345 #: ../../../src/MenuPowers.cpp:925
11811346 msgid "Fear"
11821347 msgstr ""
11831348
1184 #: ../../../src/MenuPowers.cpp:929
1349 #: ../../../src/MenuPowers.cpp:928
11851350 msgid "Lifespan"
11861351 msgstr ""
11871352
1188 #: ../../../src/MenuPowers.cpp:953
1353 #: ../../../src/MenuPowers.cpp:952
11891354 msgid "Magical Shield"
11901355 msgstr ""
11911356
1192 #: ../../../src/MenuPowers.cpp:982
1357 #: ../../../src/MenuPowers.cpp:981
11931358 msgid "Healing"
11941359 msgstr ""
11951360
1196 #: ../../../src/MenuPowers.cpp:985
1361 #: ../../../src/MenuPowers.cpp:984
11971362 msgid "Knockback"
11981363 msgstr ""
11991364
1200 #: ../../../src/MenuPowers.cpp:1010
1365 #: ../../../src/MenuPowers.cpp:1009
12011366 #, c-format
12021367 msgid "%d%% chance"
12031368 msgstr ""
12041369
1205 #: ../../../src/MenuPowers.cpp:1062
1370 #: ../../../src/MenuPowers.cpp:1061
12061371 msgid "Base Accuracy"
12071372 msgstr ""
12081373
1209 #: ../../../src/MenuPowers.cpp:1082
1374 #: ../../../src/MenuPowers.cpp:1081
12101375 msgid "Base Critical Chance"
12111376 msgstr ""
12121377
1213 #: ../../../src/MenuPowers.cpp:1090
1378 #: ../../../src/MenuPowers.cpp:1089
12141379 msgid "Ignores Absorbtion"
12151380 msgstr ""
12161381
1217 #: ../../../src/MenuPowers.cpp:1095
1382 #: ../../../src/MenuPowers.cpp:1094
12181383 msgid "Ignores Avoidance"
12191384 msgstr ""
12201385
1221 #: ../../../src/MenuPowers.cpp:1100
1386 #: ../../../src/MenuPowers.cpp:1099
12221387 #, c-format
12231388 msgid "%d%% Chance to crit slowed targets"
12241389 msgstr ""
12251390
1226 #: ../../../src/MenuPowers.cpp:1105
1391 #: ../../../src/MenuPowers.cpp:1104
12271392 #, c-format
12281393 msgid "Elemental Damage (%s)"
12291394 msgstr ""
12301395
1231 #: ../../../src/MenuPowers.cpp:1114
1396 #: ../../../src/MenuPowers.cpp:1113
12321397 #, c-format
12331398 msgid "Requires a %s"
12341399 msgstr "Χρειάζεται ένα %s"
12351400
1236 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1401 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12371402 #, c-format
12381403 msgid "Requires Power: %s"
12391404 msgstr "Χρειάζεται Δύναμη: %s"
12401405
1241 #: ../../../src/MenuPowers.cpp:1163
1406 #: ../../../src/MenuPowers.cpp:1162
12421407 msgid "Click to Unlock (uses 1 Skill Point)"
12431408 msgstr ""
12441409
1245 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1410 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12461411 msgid "Requires 1 Skill Point"
12471412 msgstr "Χρειάζεται 1 Πόντο Ικανότητας"
12481413
1249 #: ../../../src/MenuPowers.cpp:1355
1414 #: ../../../src/MenuPowers.cpp:1354
12501415 #, c-format
12511416 msgid "%d unspent skill point"
12521417 msgstr ""
12531418
1254 #: ../../../src/MenuPowers.cpp:1358
1419 #: ../../../src/MenuPowers.cpp:1357
12551420 #, c-format
12561421 msgid "%d unspent skill points"
12571422 msgstr ""
12581423
1259 #: ../../../src/MenuPowers.cpp:1388
1424 #: ../../../src/MenuPowers.cpp:1387
12601425 msgid "Next Level:"
12611426 msgstr "Επόμενο Επίπεδο:"
12621427
1263 #: ../../../src/MenuStash.cpp:96
1264 msgid "Shared Stash"
1265 msgstr "Κοινόχρηστη Αποθήκη"
1266
1267 #: ../../../src/MenuStash.cpp:209
1428 #: ../../../src/MenuStash.cpp:53
1429 msgid "Private"
1430 msgstr ""
1431
1432 #: ../../../src/MenuStash.cpp:55
1433 msgid "Shared"
1434 msgstr ""
1435
1436 #: ../../../src/MenuStash.cpp:103
1437 msgid "Stash"
1438 msgstr ""
1439
1440 #: ../../../src/MenuStash.cpp:258
12681441 msgid "Can not store quest items in the stash."
12691442 msgstr ""
12701443
1271 #: ../../../src/MenuStash.cpp:219
1444 #: ../../../src/MenuStash.cpp:263
1445 msgid "This item can not be stored in the stash."
1446 msgstr ""
1447
1448 #: ../../../src/MenuStash.cpp:268
1449 msgid "This item can not be stored in the private stash."
1450 msgstr ""
1451
1452 #: ../../../src/MenuStash.cpp:273
1453 msgid "This item can not be stored in the shared stash."
1454 msgstr ""
1455
1456 #: ../../../src/MenuStash.cpp:283
12721457 msgid "Stash is full."
12731458 msgstr ""
12741459
1275 #: ../../../src/MenuTalker.cpp:454
1460 #: ../../../src/MenuStash.cpp:340
1461 #, c-format
1462 msgid "Can not store item in stash: %s"
1463 msgstr ""
1464
1465 #: ../../../src/MenuTalker.cpp:447
1466 #, c-format
1467 msgid "<dialog node %d>"
1468 msgstr ""
1469
1470 #: ../../../src/MenuTalker.cpp:455
12761471 msgid "Trade"
12771472 msgstr "Εμπόριο"
12781473
12801475 msgid "Buyback"
12811476 msgstr "Επαναγορά"
12821477
1283 #: ../../../src/MenuVendor.cpp:279
1478 #: ../../../src/MenuVendor.cpp:281
12841479 msgid "Vendor"
12851480 msgstr "Πωλητής"
12861481
1287 #: ../../../src/PowerManager.cpp:1136
1482 #: ../../../src/PowerManager.cpp:1170
12881483 #, c-format
12891484 msgid "+%d Shield"
12901485 msgstr "+%d Άμυνα"
12911486
1292 #: ../../../src/PowerManager.cpp:1392
1487 #: ../../../src/PowerManager.cpp:1426
12931488 msgid "You are already transformed, untransform first."
12941489 msgstr "Έχεις ήδη μεταμορφωθεί, απομεταμορφώσου πρώτα."
12951490
1296 #: ../../../src/PowerManager.cpp:1404
1491 #: ../../../src/PowerManager.cpp:1438
12971492 msgid "Could not untransform at this position."
12981493 msgstr ""
12991494
13011496 msgid "Completed Quests"
13021497 msgstr ""
13031498
1304 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1499 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13051500 msgid "Game saved."
13061501 msgstr ""
13071502
1308 #: ../../../src/SDLInputState.cpp:582
1503 #: ../../../src/SDLInputState.cpp:643
1504 msgid "BkSp"
1505 msgstr ""
1506
1507 #: ../../../src/SDLInputState.cpp:644
1508 msgid "Caps"
1509 msgstr ""
1510
1511 #: ../../../src/SDLInputState.cpp:645
1512 msgid "Del"
1513 msgstr ""
1514
1515 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1516 msgid "End"
1517 msgstr ""
1518
1519 #: ../../../src/SDLInputState.cpp:648
1520 msgid "Esc"
1521 msgstr ""
1522
1523 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1524 msgid "Home"
1525 msgstr ""
1526
1527 #: ../../../src/SDLInputState.cpp:650
1528 msgid "Ins"
1529 msgstr ""
1530
1531 #: ../../../src/SDLInputState.cpp:651
1532 msgid "LAlt"
1533 msgstr ""
1534
1535 #: ../../../src/SDLInputState.cpp:652
1536 msgid "LCtrl"
1537 msgstr ""
1538
1539 #: ../../../src/SDLInputState.cpp:654
1540 msgid "LShft"
1541 msgstr ""
1542
1543 #: ../../../src/SDLInputState.cpp:655
1544 msgid "Num"
1545 msgstr ""
1546
1547 #: ../../../src/SDLInputState.cpp:656
1548 msgid "PgDn"
1549 msgstr ""
1550
1551 #: ../../../src/SDLInputState.cpp:657
1552 msgid "PgUp"
1553 msgstr ""
1554
1555 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1556 msgid "Pause"
1557 msgstr ""
1558
1559 #: ../../../src/SDLInputState.cpp:659
1560 msgid "Print"
1561 msgstr ""
1562
1563 #: ../../../src/SDLInputState.cpp:660
1564 msgid "RAlt"
1565 msgstr ""
1566
1567 #: ../../../src/SDLInputState.cpp:661
1568 msgid "RCtrl"
1569 msgstr ""
1570
1571 #: ../../../src/SDLInputState.cpp:662
1572 msgid "Ret"
1573 msgstr ""
1574
1575 #: ../../../src/SDLInputState.cpp:664
1576 msgid "RShft"
1577 msgstr ""
1578
1579 #: ../../../src/SDLInputState.cpp:665
1580 msgid "SLock"
1581 msgstr ""
1582
1583 #: ../../../src/SDLInputState.cpp:666
1584 msgid "Spc"
1585 msgstr ""
1586
1587 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1588 msgid "Tab"
1589 msgstr ""
1590
1591 #: ../../../src/SDLInputState.cpp:673
13091592 msgid "Backspace"
13101593 msgstr ""
13111594
1312 #: ../../../src/SDLInputState.cpp:583
1595 #: ../../../src/SDLInputState.cpp:674
13131596 msgid "CapsLock"
13141597 msgstr ""
13151598
1316 #: ../../../src/SDLInputState.cpp:586
1317 msgid "End"
1318 msgstr ""
1319
1320 #: ../../../src/SDLInputState.cpp:587
1599 #: ../../../src/SDLInputState.cpp:678
13211600 msgid "Escape"
13221601 msgstr ""
13231602
1324 #: ../../../src/SDLInputState.cpp:588
1325 msgid "Home"
1326 msgstr ""
1327
1328 #: ../../../src/SDLInputState.cpp:589
1603 #: ../../../src/SDLInputState.cpp:680
13291604 msgid "Insert"
13301605 msgstr ""
13311606
1332 #: ../../../src/SDLInputState.cpp:590
1607 #: ../../../src/SDLInputState.cpp:681
13331608 msgid "Left Alt"
13341609 msgstr ""
13351610
1336 #: ../../../src/SDLInputState.cpp:591
1611 #: ../../../src/SDLInputState.cpp:682
13371612 msgid "Left Ctrl"
13381613 msgstr ""
13391614
1340 #: ../../../src/SDLInputState.cpp:593
1615 #: ../../../src/SDLInputState.cpp:684
13411616 msgid "Left Shift"
13421617 msgstr ""
13431618
1344 #: ../../../src/SDLInputState.cpp:594
1619 #: ../../../src/SDLInputState.cpp:685
13451620 msgid "NumLock"
13461621 msgstr ""
13471622
1348 #: ../../../src/SDLInputState.cpp:595
1623 #: ../../../src/SDLInputState.cpp:686
13491624 msgid "PageDown"
13501625 msgstr ""
13511626
1352 #: ../../../src/SDLInputState.cpp:596
1627 #: ../../../src/SDLInputState.cpp:687
13531628 msgid "PageUp"
13541629 msgstr ""
13551630
1356 #: ../../../src/SDLInputState.cpp:597
1357 msgid "Pause"
1358 msgstr ""
1359
1360 #: ../../../src/SDLInputState.cpp:598
1631 #: ../../../src/SDLInputState.cpp:689
13611632 msgid "PrintScreen"
13621633 msgstr ""
13631634
1364 #: ../../../src/SDLInputState.cpp:599
1635 #: ../../../src/SDLInputState.cpp:690
13651636 msgid "Right Alt"
13661637 msgstr ""
13671638
1368 #: ../../../src/SDLInputState.cpp:600
1639 #: ../../../src/SDLInputState.cpp:691
13691640 msgid "Right Ctrl"
13701641 msgstr ""
13711642
1372 #: ../../../src/SDLInputState.cpp:601
1643 #: ../../../src/SDLInputState.cpp:692
13731644 msgid "Return"
13741645 msgstr ""
13751646
1376 #: ../../../src/SDLInputState.cpp:603
1647 #: ../../../src/SDLInputState.cpp:694
13771648 msgid "Right Shift"
13781649 msgstr ""
13791650
1380 #: ../../../src/SDLInputState.cpp:604
1651 #: ../../../src/SDLInputState.cpp:695
13811652 msgid "ScrollLock"
13821653 msgstr ""
13831654
1384 #: ../../../src/SDLInputState.cpp:605
1655 #: ../../../src/SDLInputState.cpp:696
13851656 msgid "Space"
13861657 msgstr ""
13871658
1388 #: ../../../src/SDLInputState.cpp:606
1389 msgid "Tab"
1390 msgstr ""
1391
1392 #: ../../../src/SDLInputState.cpp:620
1659 #: ../../../src/SDLInputState.cpp:710
1660 #, c-format
1661 msgid "M%d"
1662 msgstr ""
1663
1664 #: ../../../src/SDLInputState.cpp:716
13931665 #, c-format
13941666 msgid "Mouse %d"
13951667 msgstr "Ποντίκι %d"
13961668
1397 #: ../../../src/SDLInputState.cpp:628
1669 #: ../../../src/SDLInputState.cpp:726
1670 #, c-format
1671 msgid "JX%d-"
1672 msgstr ""
1673
1674 #: ../../../src/SDLInputState.cpp:728
13981675 #, c-format
13991676 msgid "Axis %d -"
14001677 msgstr "Άξονας %d -"
14011678
1402 #: ../../../src/SDLInputState.cpp:630
1679 #: ../../../src/SDLInputState.cpp:732
1680 #, c-format
1681 msgid "JX%d+"
1682 msgstr ""
1683
1684 #: ../../../src/SDLInputState.cpp:734
14031685 #, c-format
14041686 msgid "Axis %d +"
14051687 msgstr "Άξονας %d +"
14061688
1407 #: ../../../src/SDLInputState.cpp:633
1689 #: ../../../src/SDLInputState.cpp:739
1690 #, c-format
1691 msgid "JB%d"
1692 msgstr ""
1693
1694 #: ../../../src/SDLInputState.cpp:741
14081695 #, c-format
14091696 msgid "Button %d"
14101697 msgstr ""
14111698
1412 #: ../../../src/SDLInputState.cpp:637
1413 msgid "(none)"
1414 msgstr ""
1415
1416 #: ../../../src/SDLInputState.cpp:677
1699 #: ../../../src/SDLInputState.cpp:788
14171700 msgid "Touch control D-Pad"
14181701 msgstr ""
14191702
1420 #: ../../../src/SDLInputState.cpp:701
1703 #: ../../../src/SDLInputState.cpp:812
14211704 msgid "Touch control buttons"
14221705 msgstr ""
14231706
1424 #: ../../../src/SDLInputState.cpp:716
1707 #: ../../../src/SDLInputState.cpp:827
14251708 msgid "Tap"
14261709 msgstr ""
14271710
1428 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1429 #: ../../../src/SDLInputState.cpp:768
1711 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1712 #, c-format
1713 msgid "Can not bind: %s"
1714 msgstr ""
1715
1716 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1717 #: ../../../src/SDLInputState.cpp:901
14301718 #, c-format
14311719 msgid "'%s' is no longer bound to:"
14321720 msgstr ""
15891877 msgid "k"
15901878 msgstr "κ"
15911879
1592 #: ../../../src/Utils.cpp:580
1880 #: ../../../src/Utils.cpp:616
15931881 #, c-format
15941882 msgid "%s second"
15951883 msgstr "%s δευτερόλεπτο"
15961884
1597 #: ../../../src/Utils.cpp:583
1885 #: ../../../src/Utils.cpp:619
15981886 #, c-format
15991887 msgid "%s seconds"
16001888 msgstr "%s δευτερόλεπτα"
55 # Translators:
66 # Justin Jacobs <jajdorkster@gmail.com>, 2018
77 # Eric R, 2018
8 # Diego J. Romero López <diegojromerolopez@gmail.com>, 2018
8 # Agustin Ferrario <agustin.ferrario@hotmail.com.ar>, 2020
9 # Diego J. Romero López <diegojromerolopez@gmail.com>, 2020
910 #
1011 #, fuzzy
1112 msgid ""
1213 msgstr ""
1314 "Project-Id-Version: PACKAGE VERSION\n"
1415 "Report-Msgid-Bugs-To: \n"
15 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
16 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1617 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
17 "Last-Translator: Diego J. Romero López <diegojromerolopez@gmail.com>, 2018\n"
18 "Last-Translator: Diego J. Romero López <diegojromerolopez@gmail.com>, 2020\n"
1819 "Language-Team: Spanish (https://www.transifex.com/flareorg/teams/84925/es/)\n"
1920 "MIME-Version: 1.0\n"
2021 "Content-Type: text/plain; charset=UTF-8\n"
2223 "Language: es\n"
2324 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
2425
25 #: ../../../src/Avatar.cpp:367
26 #: ../../../src/Avatar.cpp:387
27 msgid "Your health is low!"
28 msgstr "Tu salud es baja"
29
30 #: ../../../src/Avatar.cpp:419
2631 #, c-format
2732 msgid "Congratulations, you have reached level %d!"
2833 msgstr "¡Felicidades, has alcanzado el nivel %d!"
2934
30 #: ../../../src/Avatar.cpp:369
31 msgid "You may increase one attribute through the Character Menu."
32 msgstr "Puedes aumentar un atributo a través del Menú de Personaje."
33
34 #: ../../../src/Avatar.cpp:583
35 #: ../../../src/Avatar.cpp:421
36 msgid "You may increase one or more attributes through the Character Menu."
37 msgstr "Puedes avanzar uno o más atributos desde el Menú de Personaje"
38
39 #: ../../../src/Avatar.cpp:425
40 msgid "You may unlock one or more abilities through the Powers Menu."
41 msgstr "Puedes desbloquear una o más habilidades a través del Menú de Poderes"
42
43 #: ../../../src/Avatar.cpp:692
3544 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3645 msgstr ""
3746 "Has sido derrotado y el juego ha terminado. Pulsa ${INPUT_CONTINUE} para "
3847 "salir al título."
3948
40 #: ../../../src/Avatar.cpp:589
49 #: ../../../src/Avatar.cpp:698
4150 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
4251 msgstr "Has sido derrotado. Pulsa ${INPUT_CONTINUE} para continuar."
4352
44 #: ../../../src/Avatar.cpp:839
53 #: ../../../src/Avatar.cpp:949
4554 msgid "Transformation expired. You have been moved back to a safe place."
4655 msgstr "La transformación ha expirado. Se te ha movido a un lugar seguro."
4756
5059 msgid "%d %s removed."
5160 msgstr "%d %s quitado."
5261
53 #: ../../../src/CampaignManager.cpp:162
62 #: ../../../src/CampaignManager.cpp:165
63 #, c-format
64 msgid "%s x%d removed."
65 msgstr "%s x%d quitado."
66
67 #: ../../../src/CampaignManager.cpp:167
5468 #, c-format
5569 msgid "%s removed."
5670 msgstr "%s quitado."
5771
58 #: ../../../src/CampaignManager.cpp:175
72 #: ../../../src/CampaignManager.cpp:180
5973 #, c-format
6074 msgid "You receive %s."
6175 msgstr "Recibes %s."
6276
63 #: ../../../src/CampaignManager.cpp:177
77 #: ../../../src/CampaignManager.cpp:182
6478 #, c-format
6579 msgid "You receive %s x%d."
6680 msgstr "Recibes %s x%d."
6781
68 #: ../../../src/CampaignManager.cpp:186
82 #: ../../../src/CampaignManager.cpp:191
6983 #, c-format
7084 msgid "You receive %d %s."
7185 msgstr "Recibes %d %s."
7286
73 #: ../../../src/CampaignManager.cpp:195
87 #: ../../../src/CampaignManager.cpp:200
7488 #, c-format
7589 msgid "You receive %d XP."
7690 msgstr "Recibes %d XP."
7791
78 #: ../../../src/CampaignManager.cpp:201
92 #: ../../../src/CampaignManager.cpp:206
7993 msgid "HP restored."
8094 msgstr "PV restaurados."
8195
82 #: ../../../src/CampaignManager.cpp:205
96 #: ../../../src/CampaignManager.cpp:210
8397 msgid "MP restored."
8498 msgstr "PM restaurados."
8599
86 #: ../../../src/CampaignManager.cpp:210
100 #: ../../../src/CampaignManager.cpp:215
87101 msgid "HP and MP restored."
88102 msgstr "PV y PM restaurados."
89103
90 #: ../../../src/CampaignManager.cpp:214
104 #: ../../../src/CampaignManager.cpp:219
91105 msgid "Negative effects removed."
92106 msgstr "Efectos negativos eliminados."
93107
94 #: ../../../src/CampaignManager.cpp:220
108 #: ../../../src/CampaignManager.cpp:225
95109 msgid "HP and MP restored, negative effects removed"
96110 msgstr "Restaurados PV y PM, efectos negativos eliminados"
97111
115129 "\n"
116130 "El renderizador predeterminado que suele ser más rápido que el renderizador SDL por software."
117131
118 #: ../../../src/EngineSettings.cpp:561
132 #: ../../../src/EngineSettings.cpp:572
119133 msgid "Adventurer"
120134 msgstr "Aventurero"
121135
122 #: ../../../src/Entity.cpp:511
136 #: ../../../src/Entity.cpp:522
123137 msgid "miss"
124138 msgstr "fallo"
125139
126 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
127 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
140 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
141 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
128142 #, c-format
129143 msgid "+%d HP"
130144 msgstr "+%d PV"
131145
132 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
133 #: ../../../src/StatBlock.cpp:822
146 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
147 #: ../../../src/StatBlock.cpp:830
134148 #, c-format
135149 msgid "+%d MP"
136150 msgstr "+%d PM"
137151
138 #: ../../../src/EventManager.cpp:738
152 #: ../../../src/EventManager.cpp:782
139153 msgid "Unknown destination"
140154 msgstr "Destino desconocido"
141155
142 #: ../../../src/GameStateConfigBase.cpp:89
143 #: ../../../src/GameStateConfigBase.cpp:110
156 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
157 msgid "Loading..."
158 msgstr "Cargando..."
159
160 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
161 msgid "Delete Save"
162 msgstr "Eliminar"
163
164 #: ../../../src/GameStateLoad.cpp:90
165 msgid "Delete this save?"
166 msgstr "¿Eliminar esta partida guardada?"
167
168 #: ../../../src/GameStateLoad.cpp:92
169 msgid "Exit to Title"
170 msgstr "Salir al Título"
171
172 #: ../../../src/GameStateLoad.cpp:95
173 msgid "New Game"
174 msgstr "Nuevo Juego"
175
176 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
177 msgid "Choose a Slot"
178 msgstr "Elija una ranura"
179
180 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
181 msgid "Enable a story mod to continue"
182 msgstr "Habilitar un mod de historia para continuar"
183
184 #: ../../../src/GameStateLoad.cpp:597
185 msgid "Load Game"
186 msgstr "Cargar Juego"
187
188 #: ../../../src/GameStateLoad.cpp:706
189 msgid "Entering game world..."
190 msgstr "Entrando en mundo del juego..."
191
192 #: ../../../src/GameStateLoad.cpp:709
193 msgid "Loading saved game..."
194 msgstr "Cargando partida guardada..."
195
196 #: ../../../src/GameStateLoad.cpp:742
197 msgid "Invalid save"
198 msgstr "Partida guardada inválida"
199
200 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
201 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
202 #: ../../../src/MenuPowers.cpp:1543
203 #, c-format
204 msgid "Level %d"
205 msgstr "Nivel %d"
206
207 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
208 #: ../../../src/MenuConfig.cpp:244
209 msgid "Cancel"
210 msgstr "Cancelar"
211
212 #: ../../../src/GameStateNew.cpp:68
213 msgid "Create"
214 msgstr "Crear"
215
216 #: ../../../src/GameStateNew.cpp:76
217 msgid "Randomize"
218 msgstr "Aleatorizar"
219
220 #: ../../../src/GameStateNew.cpp:92
221 msgid "Choose a Portrait"
222 msgstr "Elige un retrato"
223
224 #: ../../../src/GameStateNew.cpp:96
225 msgid "Choose a Name"
226 msgstr "Elige un nombre"
227
228 #: ../../../src/GameStateNew.cpp:100
229 msgid "Permadeath?"
230 msgstr "¿Muerte permanente?"
231
232 #: ../../../src/GameStateNew.cpp:104
233 msgid "Choose a Class"
234 msgstr "Elige una clase"
235
236 #: ../../../src/GameStateTitle.cpp:107
237 msgid "Play Game"
238 msgstr "Jugar"
239
240 #: ../../../src/GameStateTitle.cpp:110
241 msgid "Enable a core mod to continue"
242 msgstr "Habilitar un mod de núcleo para continuar"
243
244 #: ../../../src/GameStateTitle.cpp:114
245 msgid "Configuration"
246 msgstr "Configuración"
247
248 #: ../../../src/GameStateTitle.cpp:117
249 msgid "Credits"
250 msgstr "Créditos"
251
252 #: ../../../src/GameStateTitle.cpp:120
253 msgid "Exit Game"
254 msgstr "Salir del juego"
255
256 #: ../../../src/InputState.cpp:407
257 msgid "Accept"
258 msgstr "Aceptar"
259
260 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
261 #: ../../../src/SDLInputState.cpp:698
262 msgid "Up"
263 msgstr "Arriba"
264
265 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
266 #: ../../../src/SDLInputState.cpp:676
267 msgid "Down"
268 msgstr "Abajo"
269
270 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
271 #: ../../../src/SDLInputState.cpp:683
272 msgid "Left"
273 msgstr "Izquierda"
274
275 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
276 #: ../../../src/SDLInputState.cpp:693
277 msgid "Right"
278 msgstr "Derecha"
279
280 #: ../../../src/InputState.cpp:412
281 msgid "Bar1"
282 msgstr "Bar1"
283
284 #: ../../../src/InputState.cpp:413
285 msgid "Bar2"
286 msgstr "Bar2"
287
288 #: ../../../src/InputState.cpp:414
289 msgid "Bar3"
290 msgstr "Bar3"
291
292 #: ../../../src/InputState.cpp:415
293 msgid "Bar4"
294 msgstr "Bar4"
295
296 #: ../../../src/InputState.cpp:416
297 msgid "Bar5"
298 msgstr "Bar5"
299
300 #: ../../../src/InputState.cpp:417
301 msgid "Bar6"
302 msgstr "Bar6"
303
304 #: ../../../src/InputState.cpp:418
305 msgid "Bar7"
306 msgstr "Bar7"
307
308 #: ../../../src/InputState.cpp:419
309 msgid "Bar8"
310 msgstr "Bar8"
311
312 #: ../../../src/InputState.cpp:420
313 msgid "Bar9"
314 msgstr "Bar9"
315
316 #: ../../../src/InputState.cpp:421
317 msgid "Bar0"
318 msgstr "Bar0"
319
320 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
321 #: ../../../src/MenuCharacter.cpp:54
322 msgid "Character"
323 msgstr "Personaje"
324
325 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
326 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
327 msgid "Inventory"
328 msgstr "Inventario"
329
330 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
331 #: ../../../src/MenuPowers.cpp:167
332 msgid "Powers"
333 msgstr "Poderes"
334
335 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
336 #: ../../../src/MenuLog.cpp:72
337 msgid "Log"
338 msgstr "Registro"
339
340 #: ../../../src/InputState.cpp:426
341 msgid "Main1"
342 msgstr "Principal1"
343
344 #: ../../../src/InputState.cpp:427
345 msgid "Main2"
346 msgstr "Principal2"
347
348 #: ../../../src/InputState.cpp:428
349 msgid "Ctrl"
350 msgstr "Ctrl"
351
352 #: ../../../src/InputState.cpp:429
353 msgid "Shift"
354 msgstr "Shift"
355
356 #: ../../../src/InputState.cpp:430
357 msgid "Alt"
358 msgstr "Alt"
359
360 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
361 msgid "Delete"
362 msgstr "Suprimir"
363
364 #: ../../../src/InputState.cpp:432
365 msgid "ActionBar Accept"
366 msgstr "Aceptación de la barra de acción"
367
368 #: ../../../src/InputState.cpp:433
369 msgid "ActionBar Left"
370 msgstr "Barra de acción izquierda"
371
372 #: ../../../src/InputState.cpp:434
373 msgid "ActionBar Right"
374 msgstr "Barra de acción derecha"
375
376 #: ../../../src/InputState.cpp:435
377 msgid "ActionBar Use"
378 msgstr "Uso de la barra de acción"
379
380 #: ../../../src/InputState.cpp:436
381 msgid "Developer Menu"
382 msgstr "Menú de desarrolladores"
383
384 #: ../../../src/InputState.cpp:438
385 msgid "Left Mouse"
386 msgstr "Botón izquierdo del ratón"
387
388 #: ../../../src/InputState.cpp:439
389 msgid "Middle Mouse"
390 msgstr "Botón central del ratón"
391
392 #: ../../../src/InputState.cpp:440
393 msgid "Right Mouse"
394 msgstr "Botón derecho del ratón"
395
396 #: ../../../src/InputState.cpp:441
397 msgid "Wheel Up"
398 msgstr "Rueda hacia arriba"
399
400 #: ../../../src/InputState.cpp:442
401 msgid "Wheel Down"
402 msgstr "Rueda hacia abajo"
403
404 #: ../../../src/InputState.cpp:443
405 msgid "Mouse X1"
406 msgstr "Ratón X1"
407
408 #: ../../../src/InputState.cpp:444
409 msgid "Mouse X2"
410 msgstr "Ratón X2"
411
412 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
413 msgid "Unknown Item"
414 msgstr "Objeto desconocido"
415
416 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
417 #, c-format
418 msgid "%d%% Speed"
419 msgstr "%d%% velocidad"
420
421 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
422 #, c-format
423 msgid "%d%% Attack Speed"
424 msgstr "%d%% velocidad de ataque"
425
426 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
427 #: ../../../src/MenuPowers.cpp:832
428 #, c-format
429 msgid "Resistance (%s)"
430 msgstr "Resistencia (%s)"
431
432 #: ../../../src/ItemManager.cpp:714
433 #, c-format
434 msgid "Requires %s"
435 msgstr "Requiere %s"
436
437 #: ../../../src/ItemManager.cpp:763
438 msgid "Quest Item"
439 msgstr "Objeto de gesta"
440
441 #: ../../../src/ItemManager.cpp:790
442 #, c-format
443 msgid "Quality: %s"
444 msgstr "Calidad: %s"
445
446 #: ../../../src/ItemManager.cpp:815
447 #, c-format
448 msgid "Absorb: %d-%d"
449 msgstr "Absorber: %d-%d"
450
451 #: ../../../src/ItemManager.cpp:817
452 #, c-format
453 msgid "Absorb: %d"
454 msgstr "Absorber: %d"
455
456 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
457 #: ../../../src/MenuPowers.cpp:1133
458 #, c-format
459 msgid "Requires Level %d"
460 msgstr "Requiere nivel %d"
461
462 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
463 #: ../../../src/MenuPowers.cpp:1124
464 #, c-format
465 msgid "Requires %s %d"
466 msgstr "Requiere %s %d"
467
468 #: ../../../src/ItemManager.cpp:879
469 #, c-format
470 msgid "Requires Class: %s"
471 msgstr "Requiere clase: %s"
472
473 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
474 #, c-format
475 msgid "Buy Price: %d %s"
476 msgstr "Precio de compra: %d %s"
477
478 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
479 #, c-format
480 msgid "Buy Price: %d %s each"
481 msgstr "Precio de compra: %d %s cada"
482
483 #: ../../../src/ItemManager.cpp:916
484 #, c-format
485 msgid "Sell Price: %d %s"
486 msgstr "Precio de venta: %d %s"
487
488 #: ../../../src/ItemManager.cpp:918
489 #, c-format
490 msgid "Sell Price: %d %s each"
491 msgstr "Precio de venta: %d %s cada"
492
493 #: ../../../src/ItemManager.cpp:927
494 msgid "Set:"
495 msgstr "Conjunto:"
496
497 #: ../../../src/ItemManager.cpp:934
498 #, c-format
499 msgid "%d items:"
500 msgstr "%d objetos:"
501
502 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
503 #, c-format
504 msgid "Press [%s] to use"
505 msgstr "Pulsa [%s] para usar"
506
507 #: ../../../src/ItemManager.cpp:951
508 #, c-format
509 msgid "Press [%s] to read"
510 msgstr "Pulsa [%s] para leer"
511
512 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
513 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
514 #, c-format
515 msgid "Hotkey: %s"
516 msgstr "Atajo: %s"
517
518 #: ../../../src/MenuActionBar.cpp:599
519 msgid "Not enough MP."
520 msgstr "PM insuficientes."
521
522 #: ../../../src/MenuActiveEffects.cpp:124
523 #, c-format
524 msgid "x%d"
525 msgstr "x%d"
526
527 #: ../../../src/MenuActiveEffects.cpp:219
528 msgid "Remaining:"
529 msgstr "Restantes:"
530
531 #: ../../../src/MenuActiveEffects.cpp:225
532 #, c-format
533 msgid "x%d stacks"
534 msgstr "x%d pilas"
535
536 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
537 msgid "Name"
538 msgstr "Nombre"
539
540 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
541 msgid "Level"
542 msgstr "Nivel"
543
544 #: ../../../src/MenuCharacter.cpp:310
545 #, c-format
546 msgid "%d unspent stat point"
547 msgstr "%d punto de atributo restante"
548
549 #: ../../../src/MenuCharacter.cpp:313
550 #, c-format
551 msgid "%d unspent stat points"
552 msgstr "%d puntos de atributos restantes"
553
554 #: ../../../src/MenuCharacter.cpp:355
555 #, c-format
556 msgid "Reduces the damage taken from \"%s\" elemental attacks."
557 msgstr "Reduce el daño recibido de ataques elementales de \"%s\"."
558
559 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
560 #, c-format
561 msgid "XP: %d"
562 msgstr "Experiencia: %d"
563
564 #: ../../../src/MenuCharacter.cpp:367
565 #, c-format
566 msgid "Next: %d"
567 msgstr "Siguiente: %d"
568
569 #: ../../../src/MenuCharacter.cpp:373
570 #, c-format
571 msgid "base (%d), bonus (%d)"
572 msgstr "base (%d), bonus (%d)"
573
574 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
575 msgid "Related stats:"
576 msgstr "Atributos relacionadas:"
577
578 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
579 #, c-format
580 msgid "Each level grants %d."
581 msgstr "Cada nivel otorga %d."
582
583 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
584 #, c-format
585 msgid "Each point of %s grants %d."
586 msgstr "Cada punto de %s otorga %d."
587
588 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
589 msgid "Clear"
590 msgstr "Limpiar"
591
592 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
593 msgid "Assign:"
594 msgstr "Asignar:"
595
596 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
144597 msgid "Defaults"
145598 msgstr "Por defecto"
146599
147 #: ../../../src/GameStateConfigBase.cpp:89
600 #: ../../../src/MenuConfig.cpp:123
148601 msgid "Reset ALL settings?"
149602 msgstr "¿Restablecer TODOS los ajustes?"
150603
151 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
604 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
152605 msgid "OK"
153606 msgstr "Aceptar"
154607
155 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
156 #: ../../../src/InputState.cpp:401
157 msgid "Cancel"
158 msgstr "Cancelar"
159
160 #: ../../../src/GameStateConfigBase.cpp:160
161 #: ../../../src/GameStateConfigDesktop.cpp:130
608 #: ../../../src/MenuConfig.cpp:246
609 msgid "Continue"
610 msgstr "Continuar"
611
612 #: ../../../src/MenuConfig.cpp:248
613 msgid "Save Game"
614 msgstr "Guardar la partida"
615
616 #: ../../../src/MenuConfig.cpp:291
617 msgid "Default"
618 msgstr "Opción por defecto"
619
620 #: ../../../src/MenuConfig.cpp:291
621 msgid ""
622 "Show all loot tooltips, except for those that would be obscured by the "
623 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
624 msgstr ""
625 "Mostrar los consejos referidos al botín, exceptuando aquellos ocultos por el"
626 " jugador o un enemigo. Para mostrar todos los consejos pulsa \"Alt\"."
627
628 #: ../../../src/MenuConfig.cpp:292
629 msgid "Show all"
630 msgstr "Mostrar todos"
631
632 #: ../../../src/MenuConfig.cpp:292
633 msgid ""
634 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
635 msgstr ""
636 "Siempre mostrar las ayudas del botín. Ocultar temporalmente todas las ayudas"
637 " del botín con \"Alt\"."
638
639 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
640 msgid "Hidden"
641 msgstr "Oculto"
642
643 #: ../../../src/MenuConfig.cpp:293
644 msgid ""
645 "Always hide loot tooltips, except for when a piece of loot is hovered with "
646 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
647 msgstr ""
648 "Ocultar siempre los consejos referidos al botín, exceptuando cuando uno de "
649 "los objetos tenga el cursor del ratón encima. Para mostrar todos los "
650 "consejos pulsa \"Alt\"."
651
652 #: ../../../src/MenuConfig.cpp:296
653 msgid "Visible"
654 msgstr "Visible"
655
656 #: ../../../src/MenuConfig.cpp:297
657 msgid "Visible (2x zoom)"
658 msgstr "Visible (aumento: 2x)"
659
660 #: ../../../src/MenuConfig.cpp:301
661 msgid ""
662 "Controls the type of warning to be activated when the player is below the "
663 "low health threshold."
664 msgstr ""
665 "Controla el tipo de aviso que se activará cuando la salud del jugador esté "
666 "por debajo del umbral de bajo nivel de salud."
667
668 #: ../../../src/MenuConfig.cpp:302
669 msgid "- Display a message"
670 msgstr "- Muestra un mensaje"
671
672 #: ../../../src/MenuConfig.cpp:303
673 msgid "- Play a sound"
674 msgstr "- Reproduce un sonido"
675
676 #: ../../../src/MenuConfig.cpp:304
677 msgid "- Change the cursor"
678 msgstr "- Cambia el cursor"
679
680 #: ../../../src/MenuConfig.cpp:306
681 msgid "Disabled"
682 msgstr "Deshabilitado"
683
684 #: ../../../src/MenuConfig.cpp:307
685 msgid "All"
686 msgstr "Todos"
687
688 #: ../../../src/MenuConfig.cpp:308
689 msgid "Message & Cursor"
690 msgstr "Mensaje y cursor"
691
692 #: ../../../src/MenuConfig.cpp:309
693 msgid "Message & Sound"
694 msgstr "Mensaje y sonido"
695
696 #: ../../../src/MenuConfig.cpp:310
697 msgid "Sound & Cursor"
698 msgstr "Sonido y cursor"
699
700 #: ../../../src/MenuConfig.cpp:311
701 msgid "Message"
702 msgstr "Mensaje"
703
704 #: ../../../src/MenuConfig.cpp:312
705 msgid "Cursor"
706 msgstr "Cursor"
707
708 #: ../../../src/MenuConfig.cpp:313
709 msgid "Sound"
710 msgstr "Sonido"
711
712 #: ../../../src/MenuConfig.cpp:319
713 msgid ""
714 "When the player's health drops below the given threshold, the low health "
715 "notifications are triggered if one or more of them is enabled."
716 msgstr ""
717 "Cuando la salud del jugador esté por debajo de un umbral determinado, las "
718 "notificaciones de baja saludo se activarán si al menos una de de ellas están"
719 " activadas."
720
721 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
722 msgid "Exit"
723 msgstr "Salir"
724
725 #: ../../../src/MenuConfig.cpp:333
726 msgid "Video"
727 msgstr "Vídeo"
728
729 #: ../../../src/MenuConfig.cpp:334
162730 msgid "Audio"
163731 msgstr "Audio"
164732
165 #: ../../../src/GameStateConfigBase.cpp:161
166 #: ../../../src/GameStateConfigDesktop.cpp:131
733 #: ../../../src/MenuConfig.cpp:335
167734 msgid "Interface"
168735 msgstr "Interfaz"
169736
170 #: ../../../src/GameStateConfigBase.cpp:162
171 #: ../../../src/GameStateConfigDesktop.cpp:134
737 #: ../../../src/MenuConfig.cpp:336
738 msgid "Input"
739 msgstr "Entrada"
740
741 #: ../../../src/MenuConfig.cpp:337
742 msgid "Keybindings"
743 msgstr "Teclas"
744
745 #: ../../../src/MenuConfig.cpp:338
172746 msgid "Mods"
173747 msgstr "Mods"
174748
175 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
749 #: ../../../src/MenuConfig.cpp:350
750 msgid "Paused"
751 msgstr "Pausado"
752
753 #: ../../../src/MenuConfig.cpp:353
754 msgid "Time Played"
755 msgstr "Tiempo de juego"
756
757 #: ../../../src/MenuConfig.cpp:359
758 msgid "Renderer"
759 msgstr "Renderizador"
760
761 #: ../../../src/MenuConfig.cpp:360
762 msgid "Full Screen Mode"
763 msgstr "Modo de pantalla completa"
764
765 #: ../../../src/MenuConfig.cpp:361
766 msgid "Hardware surfaces"
767 msgstr "Superficies de hardware"
768
769 #: ../../../src/MenuConfig.cpp:362
770 msgid "V-Sync"
771 msgstr "V-Sync"
772
773 #: ../../../src/MenuConfig.cpp:363
774 msgid "Texture Filtering"
775 msgstr "Filtro de textura"
776
777 #: ../../../src/MenuConfig.cpp:364
778 msgid "DPI scaling"
779 msgstr "Escalado por PPP"
780
781 #: ../../../src/MenuConfig.cpp:365
782 msgid "Parallax Layers"
783 msgstr "Capas de paralaje"
784
785 #: ../../../src/MenuConfig.cpp:366
786 msgid "Allow changing gamma"
787 msgstr "Permitir cambiar gama"
788
789 #: ../../../src/MenuConfig.cpp:367
790 msgid "Gamma"
791 msgstr "Gama"
792
793 #: ../../../src/MenuConfig.cpp:369
794 msgid "Sound Volume"
795 msgstr "Volumen de sonido"
796
797 #: ../../../src/MenuConfig.cpp:370
176798 msgid "Music Volume"
177799 msgstr "Volumen de música"
178800
179 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
180 msgid "Sound Volume"
181 msgstr "Volumen de sonido"
182
183 #: ../../../src/GameStateConfigBase.cpp:257
801 #: ../../../src/MenuConfig.cpp:372
184802 msgid "Language"
185803 msgstr "Idioma"
186804
187 #: ../../../src/GameStateConfigBase.cpp:266
805 #: ../../../src/MenuConfig.cpp:373
188806 msgid "Show FPS"
189807 msgstr "Mostrar FPS"
190808
191 #: ../../../src/GameStateConfigBase.cpp:270
809 #: ../../../src/MenuConfig.cpp:374
810 msgid "Hardware mouse cursor"
811 msgstr "Cursor del ratón por hardware"
812
813 #: ../../../src/MenuConfig.cpp:375
192814 msgid "Colorblind Mode"
193815 msgstr "Modo para daltónicos"
194816
195 #: ../../../src/GameStateConfigBase.cpp:274
196 msgid "Hardware mouse cursor"
197 msgstr "Cursor del ratón por hardware"
198
199 #: ../../../src/GameStateConfigBase.cpp:278
817 #: ../../../src/MenuConfig.cpp:376
200818 msgid "Developer Mode"
201819 msgstr "Modo desarrollador"
202820
203 #: ../../../src/GameStateConfigBase.cpp:282
821 #: ../../../src/MenuConfig.cpp:377
204822 msgid "Subtitles"
205823 msgstr "Subtítulos"
206824
207 #: ../../../src/GameStateConfigBase.cpp:286
208 msgid "Active Mods"
209 msgstr "Mods Activos"
210
211 #: ../../../src/GameStateConfigBase.cpp:295
212 msgid "Available Mods"
213 msgstr "Mods Disponibles"
214
215 #: ../../../src/GameStateConfigBase.cpp:314
216 msgid "<< Disable"
217 msgstr "<< Inhabilitar"
218
219 #: ../../../src/GameStateConfigBase.cpp:320
220 msgid "Enable >>"
221 msgstr "Habilitar >>"
222
223 #: ../../../src/GameStateConfigBase.cpp:873
224 msgid "Version:"
225 msgstr "Versión:"
226
227 #: ../../../src/GameStateConfigBase.cpp:878
228 msgid "Game:"
229 msgstr "Juego:"
230
231 #: ../../../src/GameStateConfigBase.cpp:883
232 msgid "Engine version:"
233 msgstr "Versión del motor de juego:"
234
235 #: ../../../src/GameStateConfigBase.cpp:891
236 msgid "Requires mods:"
237 msgstr "Mods requeridos:"
238
239 #: ../../../src/GameStateConfigDesktop.cpp:83
240 #: ../../../src/GameStateConfigDesktop.cpp:751
241 msgid "Clear"
242 msgstr "Limpiar"
243
244 #: ../../../src/GameStateConfigDesktop.cpp:83
245 #: ../../../src/GameStateConfigDesktop.cpp:749
246 msgid "Assign:"
247 msgstr "Asignar:"
248
249 #: ../../../src/GameStateConfigDesktop.cpp:128
250 msgid "Video"
251 msgstr "Vídeo"
252
253 #: ../../../src/GameStateConfigDesktop.cpp:132
254 msgid "Input"
255 msgstr "Entrada"
256
257 #: ../../../src/GameStateConfigDesktop.cpp:133
258 msgid "Keybindings"
259 msgstr "Teclas"
260
261 #: ../../../src/GameStateConfigDesktop.cpp:188
825 #: ../../../src/MenuConfig.cpp:378
826 msgid "Loot tooltip visibility"
827 msgstr "Ayuda a la visibilidad del botín"
828
829 #: ../../../src/MenuConfig.cpp:379
830 msgid "Mini-map mode"
831 msgstr "Modo minimapa"
832
833 #: ../../../src/MenuConfig.cpp:380
834 msgid "Always show stat bar labels"
835 msgstr "Mostrar etiquetas en las barra de atributos"
836
837 #: ../../../src/MenuConfig.cpp:381
838 msgid "Allow stat bar auto-hiding"
839 msgstr "Permitir ocultar automáticamente la barra de estado"
840
841 #: ../../../src/MenuConfig.cpp:382
842 msgid "Show combat text"
843 msgstr "Mostrar texto de combate"
844
845 #: ../../../src/MenuConfig.cpp:383
846 msgid "Automatically equip items"
847 msgstr "Automáticamente equipar con objetos"
848
849 #: ../../../src/MenuConfig.cpp:384
850 msgid "Show hidden entity markers"
851 msgstr "Mostrar marcadores de entidad ocultos"
852
853 #: ../../../src/MenuConfig.cpp:385
854 msgid "Low health notification"
855 msgstr "Notificación de salud baja"
856
857 #: ../../../src/MenuConfig.cpp:386
858 msgid "Low health threshold"
859 msgstr "Notificación de salud baja"
860
861 #: ../../../src/MenuConfig.cpp:389
862 msgid "Joystick"
863 msgstr "Joystick"
864
865 #: ../../../src/MenuConfig.cpp:390
866 msgid "Move hero using mouse"
867 msgstr "Mover héroe a través del ratón"
868
869 #: ../../../src/MenuConfig.cpp:391
870 msgid "Mouse aim"
871 msgstr "Ratón para apuntar"
872
873 #: ../../../src/MenuConfig.cpp:392
874 msgid "Do not use mouse"
875 msgstr "No usar ratón"
876
877 #: ../../../src/MenuConfig.cpp:393
878 msgid "Swap mouse movement button"
879 msgstr "Intercambiar botón de movimiento de ratón"
880
881 #: ../../../src/MenuConfig.cpp:394
882 msgid "Attack with mouse movement"
883 msgstr "Atacar con movimiento de ratón"
884
885 #: ../../../src/MenuConfig.cpp:395
886 msgid "Joystick Deadzone"
887 msgstr "Zona sin joystick"
888
889 #: ../../../src/MenuConfig.cpp:405
890 #, c-format
891 msgid "Primary binding: %s"
892 msgstr "Vinculación primaria: %s"
893
894 #: ../../../src/MenuConfig.cpp:406
895 #, c-format
896 msgid "Alternate binding: %s"
897 msgstr "Vinculación alternativa: %s"
898
899 #: ../../../src/MenuConfig.cpp:407
900 #, c-format
901 msgid "Joystick binding: %s"
902 msgstr "Vinculación con Joystick: %s"
903
904 #: ../../../src/MenuConfig.cpp:508
262905 msgid ""
263906 "Will try to store surfaces in video memory versus system memory. The effect "
264907 "this has on performance depends on the renderer."
266909 "Intentará almacenar las superficies en la memoria de vídeo en vez de en la "
267910 "memoria del sistema. Esto afectará de forma distinta según el renderizador."
268911
269 #: ../../../src/GameStateConfigDesktop.cpp:189
912 #: ../../../src/MenuConfig.cpp:509
270913 msgid ""
271914 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
272915 "windowed mode or input lag."
274917 "Evita que la pantalla se muestre rota. Se puede desactivar si se detectan "
275918 "\"parpadeos\" de imagen en el modo ventana o retraso en las entradas"
276919
277 #: ../../../src/GameStateConfigDesktop.cpp:190
920 #: ../../../src/MenuConfig.cpp:510
278921 msgid ""
279922 "When enabled, this uses the screen DPI in addition to the window dimensions "
280923 "to scale the rendering resolution. Otherwise, only the window dimensions are"
284927 "dimensiones de la ventana para escalar la resolución. De lo contrario, sólo "
285928 "se usarán las dimensiones de la ventana."
286929
287 #: ../../../src/GameStateConfigDesktop.cpp:191
930 #: ../../../src/MenuConfig.cpp:511
288931 msgid ""
289932 "This enables parallax (non-tile) layers. Disabling this setting can improve "
290933 "performance in some cases."
292935 "Activa las capas de paralaje (sin teselas). Desactivar esta opción puede "
293936 "mejorar el rendimiento en algunos casos."
294937
295 #: ../../../src/GameStateConfigDesktop.cpp:192
296 msgid "Experimental"
297 msgstr "Experimental"
298
299 #: ../../../src/GameStateConfigDesktop.cpp:193
300 msgid "For handheld devices"
301 msgstr "Para dispositivos móviles"
302
303 #: ../../../src/GameStateConfigDesktop.cpp:211
304 msgid "Renderer"
305 msgstr "Renderizador"
306
307 #: ../../../src/GameStateConfigDesktop.cpp:227
308 msgid "Full Screen Mode"
309 msgstr "Modo de pantalla completa"
310
311 #: ../../../src/GameStateConfigDesktop.cpp:231
312 msgid "Move hero using mouse"
313 msgstr "Mover héroe a través del ratón"
314
315 #: ../../../src/GameStateConfigDesktop.cpp:235
316 msgid "Hardware surfaces"
317 msgstr "Superficies de hardware"
318
319 #: ../../../src/GameStateConfigDesktop.cpp:239
320 msgid "V-Sync"
321 msgstr "V-Sync"
322
323 #: ../../../src/GameStateConfigDesktop.cpp:243
324 msgid "Texture Filtering"
325 msgstr "Filtro de textura"
326
327 #: ../../../src/GameStateConfigDesktop.cpp:247
328 msgid "DPI scaling"
329 msgstr "Escalado por PPP"
330
331 #: ../../../src/GameStateConfigDesktop.cpp:251
332 msgid "Parallax Layers"
333 msgstr "Capas de paralaje"
334
335 #: ../../../src/GameStateConfigDesktop.cpp:255
336 msgid "Allow changing gamma"
337 msgstr "Permitir cambiar gama"
338
339 #: ../../../src/GameStateConfigDesktop.cpp:259
340 msgid "Gamma"
341 msgstr "Gama"
342
343 #: ../../../src/GameStateConfigDesktop.cpp:263
344 msgid "Use joystick"
345 msgstr "Usar joystick"
346
347 #: ../../../src/GameStateConfigDesktop.cpp:267
348 msgid "Joystick"
349 msgstr "Joystick"
350
351 #: ../../../src/GameStateConfigDesktop.cpp:283
352 msgid "Mouse aim"
353 msgstr "Ratón para apuntar"
354
355 #: ../../../src/GameStateConfigDesktop.cpp:287
356 msgid "Do not use mouse"
357 msgstr "No usar ratón"
358
359 #: ../../../src/GameStateConfigDesktop.cpp:291
360 msgid "Joystick Deadzone"
361 msgstr "Zona sin joystick"
362
363 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
364 msgid "Loading..."
365 msgstr "Cargando..."
366
367 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
368 msgid "Delete Save"
369 msgstr "Eliminar"
370
371 #: ../../../src/GameStateLoad.cpp:88
372 msgid "Delete this save?"
373 msgstr "¿Eliminar esta partida guardada?"
374
375 #: ../../../src/GameStateLoad.cpp:90
376 msgid "Exit to Title"
377 msgstr "Salir al Título"
378
379 #: ../../../src/GameStateLoad.cpp:93
380 msgid "New Game"
381 msgstr "Nuevo Juego"
382
383 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
384 msgid "Choose a Slot"
385 msgstr "Elija una ranura"
386
387 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
388 msgid "Enable a story mod to continue"
389 msgstr "Habilitar un mod de historia para continuar"
390
391 #: ../../../src/GameStateLoad.cpp:589
392 msgid "Load Game"
393 msgstr "Cargar Juego"
394
395 #: ../../../src/GameStateLoad.cpp:695
396 msgid "Entering game world..."
397 msgstr "Entrando en mundo del juego..."
398
399 #: ../../../src/GameStateLoad.cpp:698
400 msgid "Loading saved game..."
401 msgstr "Cargando partida guardada..."
402
403 #: ../../../src/GameStateLoad.cpp:731
404 msgid "Invalid save"
405 msgstr "Partida guardada inválida"
406
407 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
408 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
409 #: ../../../src/MenuPowers.cpp:1542
410 #, c-format
411 msgid "Level %d"
412 msgstr "Nivel %d"
413
414 #: ../../../src/GameStateNew.cpp:68
415 msgid "Create"
416 msgstr "Crear"
417
418 #: ../../../src/GameStateNew.cpp:76
419 msgid "Randomize"
420 msgstr "Aleatorizar"
421
422 #: ../../../src/GameStateNew.cpp:92
423 msgid "Choose a Portrait"
424 msgstr "Elige un retrato"
425
426 #: ../../../src/GameStateNew.cpp:96
427 msgid "Choose a Name"
428 msgstr "Elige un nombre"
429
430 #: ../../../src/GameStateNew.cpp:100
431 msgid "Permadeath?"
432 msgstr "¿Muerte permanente?"
433
434 #: ../../../src/GameStateNew.cpp:104
435 msgid "Choose a Class"
436 msgstr "Elige una clase"
437
438 #: ../../../src/GameStateTitle.cpp:108
439 msgid "Play Game"
440 msgstr "Jugar"
441
442 #: ../../../src/GameStateTitle.cpp:111
443 msgid "Enable a core mod to continue"
444 msgstr "Habilitar un mod de núcleo para continuar"
445
446 #: ../../../src/GameStateTitle.cpp:115
447 msgid "Configuration"
448 msgstr "Configuración"
449
450 #: ../../../src/GameStateTitle.cpp:118
451 msgid "Credits"
452 msgstr "Créditos"
453
454 #: ../../../src/GameStateTitle.cpp:121
455 msgid "Exit Game"
456 msgstr "Salir del juego"
457
458 #: ../../../src/InputState.cpp:402
459 msgid "Accept"
460 msgstr "Aceptar"
461
462 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
463 msgid "Up"
464 msgstr "Arriba"
465
466 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
467 msgid "Down"
468 msgstr "Abajo"
469
470 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
471 msgid "Left"
472 msgstr "Izquierda"
473
474 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
475 msgid "Right"
476 msgstr "Derecha"
477
478 #: ../../../src/InputState.cpp:407
479 msgid "Bar1"
480 msgstr "Bar1"
481
482 #: ../../../src/InputState.cpp:408
483 msgid "Bar2"
484 msgstr "Bar2"
485
486 #: ../../../src/InputState.cpp:409
487 msgid "Bar3"
488 msgstr "Bar3"
489
490 #: ../../../src/InputState.cpp:410
491 msgid "Bar4"
492 msgstr "Bar4"
493
494 #: ../../../src/InputState.cpp:411
495 msgid "Bar5"
496 msgstr "Bar5"
497
498 #: ../../../src/InputState.cpp:412
499 msgid "Bar6"
500 msgstr "Bar6"
501
502 #: ../../../src/InputState.cpp:413
503 msgid "Bar7"
504 msgstr "Bar7"
505
506 #: ../../../src/InputState.cpp:414
507 msgid "Bar8"
508 msgstr "Bar8"
509
510 #: ../../../src/InputState.cpp:415
511 msgid "Bar9"
512 msgstr "Bar9"
513
514 #: ../../../src/InputState.cpp:416
515 msgid "Bar0"
516 msgstr "Bar0"
517
518 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
519 #: ../../../src/MenuCharacter.cpp:54
520 msgid "Character"
521 msgstr "Personaje"
522
523 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
524 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
525 msgid "Inventory"
526 msgstr "Inventario"
527
528 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
529 #: ../../../src/MenuPowers.cpp:168
530 msgid "Powers"
531 msgstr "Poderes"
532
533 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
534 #: ../../../src/MenuLog.cpp:72
535 msgid "Log"
536 msgstr "Registro"
537
538 #: ../../../src/InputState.cpp:421
539 msgid "Main1"
540 msgstr "Principal1"
541
542 #: ../../../src/InputState.cpp:422
543 msgid "Main2"
544 msgstr "Principal2"
545
546 #: ../../../src/InputState.cpp:423
547 msgid "Ctrl"
548 msgstr "Ctrl"
549
550 #: ../../../src/InputState.cpp:424
551 msgid "Shift"
552 msgstr "Shift"
553
554 #: ../../../src/InputState.cpp:425
555 msgid "Alt"
556 msgstr "Alt"
557
558 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
559 msgid "Delete"
560 msgstr "Suprimir"
561
562 #: ../../../src/InputState.cpp:427
563 msgid "ActionBar Accept"
564 msgstr "Aceptación de la barra de acción"
565
566 #: ../../../src/InputState.cpp:428
567 msgid "ActionBar Left"
568 msgstr "Barra de acción izquierda"
569
570 #: ../../../src/InputState.cpp:429
571 msgid "ActionBar Right"
572 msgstr "Barra de acción derecha"
573
574 #: ../../../src/InputState.cpp:430
575 msgid "ActionBar Use"
576 msgstr "Uso de la barra de acción"
577
578 #: ../../../src/InputState.cpp:431
579 msgid "Developer Menu"
580 msgstr "Menú de desarrolladores"
581
582 #: ../../../src/InputState.cpp:433
583 msgid "Left Mouse"
584 msgstr "Botón izquierdo del ratón"
585
586 #: ../../../src/InputState.cpp:434
587 msgid "Middle Mouse"
588 msgstr "Botón central del ratón"
589
590 #: ../../../src/InputState.cpp:435
591 msgid "Right Mouse"
592 msgstr "Botón derecho del ratón"
593
594 #: ../../../src/InputState.cpp:436
595 msgid "Wheel Up"
596 msgstr "Rueda hacia arriba"
597
598 #: ../../../src/InputState.cpp:437
599 msgid "Wheel Down"
600 msgstr "Rueda hacia abajo"
601
602 #: ../../../src/InputState.cpp:438
603 msgid "Mouse X1"
604 msgstr "Ratón X1"
605
606 #: ../../../src/InputState.cpp:439
607 msgid "Mouse X2"
608 msgstr "Ratón X2"
609
610 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
611 msgid "Unknown Item"
612 msgstr "Objeto desconocido"
613
614 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
615 #, c-format
616 msgid "%d%% Speed"
617 msgstr "%d%% velocidad"
618
619 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
620 #, c-format
621 msgid "%d%% Attack Speed"
622 msgstr "%d%% velocidad de ataque"
623
624 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
625 #: ../../../src/MenuPowers.cpp:833
626 #, c-format
627 msgid "Resistance (%s)"
628 msgstr "Resistencia (%s)"
629
630 #: ../../../src/ItemManager.cpp:684
631 #, c-format
632 msgid "Requires %s"
633 msgstr "Requiere %s"
634
635 #: ../../../src/ItemManager.cpp:733
636 msgid "Quest Item"
637 msgstr "Objeto de gesta"
638
639 #: ../../../src/ItemManager.cpp:760
640 #, c-format
641 msgid "Quality: %s"
642 msgstr "Calidad: %s"
643
644 #: ../../../src/ItemManager.cpp:785
645 #, c-format
646 msgid "Absorb: %d-%d"
647 msgstr "Absorber: %d-%d"
648
649 #: ../../../src/ItemManager.cpp:787
650 #, c-format
651 msgid "Absorb: %d"
652 msgstr "Absorber: %d"
653
654 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
655 #: ../../../src/MenuPowers.cpp:1134
656 #, c-format
657 msgid "Requires Level %d"
658 msgstr "Requiere nivel %d"
659
660 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
661 #: ../../../src/MenuPowers.cpp:1125
662 #, c-format
663 msgid "Requires %s %d"
664 msgstr "Requiere %s %d"
665
666 #: ../../../src/ItemManager.cpp:849
667 #, c-format
668 msgid "Requires Class: %s"
669 msgstr "Requiere clase: %s"
670
671 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
672 #, c-format
673 msgid "Buy Price: %d %s"
674 msgstr "Precio de compra: %d %s"
675
676 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
677 #, c-format
678 msgid "Buy Price: %d %s each"
679 msgstr "Precio de compra: %d %s cada"
680
681 #: ../../../src/ItemManager.cpp:886
682 #, c-format
683 msgid "Sell Price: %d %s"
684 msgstr "Precio de venta: %d %s"
685
686 #: ../../../src/ItemManager.cpp:888
687 #, c-format
688 msgid "Sell Price: %d %s each"
689 msgstr "Precio de venta: %d %s cada"
690
691 #: ../../../src/ItemManager.cpp:897
692 msgid "Set:"
693 msgstr "Conjunto:"
694
695 #: ../../../src/ItemManager.cpp:904
696 #, c-format
697 msgid "%d items:"
698 msgstr "%d objetos:"
699
700 #: ../../../src/ItemManager.cpp:917
701 #, c-format
702 msgid "Press [%s] to use"
703 msgstr "Pulsa [%s] para usar"
704
705 #: ../../../src/ItemManager.cpp:920
706 #, c-format
707 msgid "Press [%s] to read"
708 msgstr "Pulsa [%s] para leer"
709
710 #: ../../../src/MenuActionBar.cpp:87
711 msgid "Loot tooltip visibility"
712 msgstr "Ayuda a la visibilidad del botín"
713
714 #: ../../../src/MenuActionBar.cpp:88
715 msgid "Mini-map mode"
716 msgstr "Modo minimapa"
717
718 #: ../../../src/MenuActionBar.cpp:89
719 msgid "Always show stat bar labels"
720 msgstr "Mostrar etiquetas en las barra de atributos"
721
722 #: ../../../src/MenuActionBar.cpp:90
723 msgid "Show combat text"
724 msgstr "Mostrar texto de combate"
725
726 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
727 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
728 #, c-format
729 msgid "Hotkey: %s"
730 msgstr "Atajo: %s"
731
732 #: ../../../src/MenuActionBar.cpp:474
733 #, c-format
734 msgid "Default. Temporarily show all loot tooltips with '%s'."
735 msgstr ""
736 "Predeterminado. Muestra temporalmente todas las ayudas de botín con '%s'."
737
738 #: ../../../src/MenuActionBar.cpp:476
739 #, c-format
740 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
741 msgstr ""
742 "Mostrar todas. Muestra temporalmente todas las ayudas de botín con '%s'."
743
744 #: ../../../src/MenuActionBar.cpp:478
745 #, c-format
746 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
747 msgstr ""
748 "Ocultar todas. Muestra temporalmente todas las ayudas de botín con '%s'."
749
750 #: ../../../src/MenuActionBar.cpp:482
751 msgid "Visible"
752 msgstr "Visible"
753
754 #: ../../../src/MenuActionBar.cpp:484
755 msgid "Visible (2x zoom)"
756 msgstr "Visible (aumento: 2x)"
757
758 #: ../../../src/MenuActionBar.cpp:486
759 msgid "Hidden"
760 msgstr "Oculto"
761
762 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
763 msgid "Enabled"
764 msgstr "Habilitado"
765
766 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
767 msgid "Disabled"
768 msgstr "Deshabilitado"
769
770 #: ../../../src/MenuActionBar.cpp:657
771 msgid "Not enough MP."
772 msgstr "PM insuficientes."
773
774 #: ../../../src/MenuActiveEffects.cpp:124
775 #, c-format
776 msgid "x%d"
777 msgstr "x%d"
778
779 #: ../../../src/MenuActiveEffects.cpp:219
780 msgid "Remaining:"
781 msgstr "Restantes:"
782
783 #: ../../../src/MenuActiveEffects.cpp:225
784 #, c-format
785 msgid "x%d stacks"
786 msgstr "x%d pilas"
787
788 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
789 msgid "Name"
790 msgstr "Nombre"
791
792 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
793 msgid "Level"
794 msgstr "Nivel"
795
796 #: ../../../src/MenuCharacter.cpp:310
797 #, c-format
798 msgid "%d unspent stat point"
799 msgstr "%d punto de atributo restante"
800
801 #: ../../../src/MenuCharacter.cpp:313
802 #, c-format
803 msgid "%d unspent stat points"
804 msgstr "%d puntos de atributos restantes"
805
806 #: ../../../src/MenuCharacter.cpp:355
807 #, c-format
808 msgid "Reduces the damage taken from \"%s\" elemental attacks."
809 msgstr "Reduce el daño recibido de ataques elementales de \"%s\"."
810
811 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
812 #, c-format
813 msgid "XP: %d"
814 msgstr "Experiencia: %d"
815
816 #: ../../../src/MenuCharacter.cpp:367
817 #, c-format
818 msgid "Next: %d"
819 msgstr "Siguiente: %d"
820
821 #: ../../../src/MenuCharacter.cpp:373
822 #, c-format
823 msgid "base (%d), bonus (%d)"
824 msgstr "base (%d), bonus (%d)"
825
826 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
827 msgid "Related stats:"
828 msgstr "Atributos relacionadas:"
829
830 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
831 #, c-format
832 msgid "Each level grants %d."
833 msgstr "Cada nivel otorga %d."
834
835 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
836 #, c-format
837 msgid "Each point of %s grants %d."
838 msgstr "Cada punto de %s otorga %d."
938 #: ../../../src/MenuConfig.cpp:512
939 msgid ""
940 "Enables the below setting that controls the screen gamma level. The behavior"
941 " of the gamma setting can vary between platforms."
942 msgstr ""
943 "Activa la opción inferior que controla el nivel de transparencia de la "
944 "pantalla. El comportamiento de transparencia puede variar entre plataformas."
945
946 #: ../../../src/MenuConfig.cpp:513
947 msgid ""
948 "Provides additional text for information that is primarily conveyed through "
949 "color."
950 msgstr ""
951 "Proporciona text adicional para la información que se muestra principalmente"
952 " mediante colores."
953
954 #: ../../../src/MenuConfig.cpp:514
955 msgid ""
956 "Some mods will automatically hide the stat bars when they are inactive. "
957 "Disabling this option will keep them displayed at all times."
958 msgstr ""
959 "Algunos mods ocultan automáticamente las barras de estado cuando no están "
960 "activas. Desactivar esta opción hace que se muestren siempre."
961
962 #: ../../../src/MenuConfig.cpp:515
963 msgid ""
964 "When enabled, empty equipment slots will be filled with applicable items "
965 "when they are obtained."
966 msgstr ""
967 "Cuando está activado, las ranuras de equipamiento libres se asignarán con "
968 "elementos que se puedan usar en cuanto se obtengan."
969
970 #: ../../../src/MenuConfig.cpp:516
971 msgid ""
972 "Shows a marker above enemies, allies, and the player when they are obscured "
973 "by tall objects."
974 msgstr ""
975 "Muestra un marcador por encima de los enemigos, aliados y el jugador cuando "
976 "se vean tapados por objetos de gran altura."
977
978 #: ../../../src/MenuConfig.cpp:517
979 msgid ""
980 "This allows the game to be controlled entirely with the keyboard (or "
981 "joystick)."
982 msgstr ""
983 "Esto permite controlar el juego por completo con el teclado (o con un "
984 "joystick)."
985
986 #: ../../../src/MenuConfig.cpp:518
987 msgid ""
988 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
989 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
990 "instead of 'Main1'."
991 msgstr ""
992 "Cuando \"Mover héroe usando el ratón\" está activado, esta opción controla "
993 "si \"Principal1\" o \"Principal2\" se usan para moverlo. Si activado, se "
994 "usará \"Principal2\" en vez de \"Principal1\"."
995
996 #: ../../../src/MenuConfig.cpp:519
997 msgid ""
998 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
999 "assigned to the movement button can be used by targeting an enemy. If this "
1000 "setting is disabled, it is required to use 'Shift' to access the Power "
1001 "assigned to the movement button."
1002 msgstr ""
1003 "Cuando la opción de \"Mover héroe usando el ratón\" está activa, esta opción"
1004 " controla si el Poder asignado al botón de movimiento puede usarse en cuanto"
1005 " se apunta a un enemigo. Si esta opción está desactivada, se necesita usar "
1006 "el botón \"Mayús\" para acceder al Poder asignado al botón de movimiento."
1007
1008 #: ../../../src/MenuConfig.cpp:520
1009 msgid ""
1010 "The player's attacks will be aimed in the direction of the mouse cursor when"
1011 " this is enabled."
1012 msgstr ""
1013 "Los ataques del jugador se dirigirán a la dirección del cursor del ratón "
1014 "cuando esta opción esté activada."
1015
1016 #: ../../../src/MenuConfig.cpp:571
1017 msgid "Active Mods"
1018 msgstr "Mods Activos"
1019
1020 #: ../../../src/MenuConfig.cpp:580
1021 msgid "Available Mods"
1022 msgstr "Mods Disponibles"
1023
1024 #: ../../../src/MenuConfig.cpp:599
1025 msgid "<< Disable"
1026 msgstr "<< Inhabilitar"
1027
1028 #: ../../../src/MenuConfig.cpp:605
1029 msgid "Enable >>"
1030 msgstr "Habilitar >>"
1031
1032 #: ../../../src/MenuConfig.cpp:1436
1033 msgid "Version:"
1034 msgstr "Versión:"
1035
1036 #: ../../../src/MenuConfig.cpp:1441
1037 msgid "Game:"
1038 msgstr "Juego:"
1039
1040 #: ../../../src/MenuConfig.cpp:1446
1041 msgid "Engine version:"
1042 msgstr "Versión del motor de juego:"
1043
1044 #: ../../../src/MenuConfig.cpp:1454
1045 msgid "Requires mods:"
1046 msgstr "Mods requeridos:"
1047
1048 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
1049 msgid "(none)"
1050 msgstr "(ninguno)"
1051
1052 #: ../../../src/MenuConfig.cpp:1579
1053 msgid "Save & Exit"
1054 msgstr "Guardar y salir"
8391055
8401056 #: ../../../src/MenuDevConsole.cpp:63
8411057 msgid "Execute"
10001216 msgid "HINT: Type help"
10011217 msgstr "CONSEJO: escribe help"
10021218
1003 #: ../../../src/MenuEnemy.cpp:138
1219 #: ../../../src/MenuEnemy.cpp:162
10041220 #, c-format
10051221 msgid "%s level %d"
10061222 msgstr "%s nivel%d"
10071223
1008 #: ../../../src/MenuEnemy.cpp:162
1224 #: ../../../src/MenuEnemy.cpp:186
10091225 msgid "Dead"
10101226 msgstr "Muerto"
10111227
1012 #: ../../../src/MenuEnemy.cpp:164
1228 #: ../../../src/MenuEnemy.cpp:188
10131229 msgid "Destroyed"
10141230 msgstr "Destruido"
10151231
1016 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
1017 msgid "Paused"
1018 msgstr "Pausado"
1019
1020 #: ../../../src/MenuExit.cpp:91
1021 msgid "Save & Exit"
1022 msgstr "Guardar y salir"
1023
1024 #: ../../../src/MenuExit.cpp:92
1025 msgid "Exit"
1026 msgstr "Salir"
1027
1028 #: ../../../src/MenuExit.cpp:96
1029 msgid "Continue"
1030 msgstr "Continuar"
1031
1032 #: ../../../src/MenuInventory.cpp:73
1033 msgid "Automatically equip items"
1034 msgstr "Automáticamente equipar con objetos"
1035
1036 #: ../../../src/MenuInventory.cpp:188
1232 #: ../../../src/MenuInventory.cpp:177
10371233 #, c-format
10381234 msgid "Lost %d%% of %s."
10391235 msgstr "Perdió %d%% de %s."
10401236
1041 #: ../../../src/MenuInventory.cpp:195
1237 #: ../../../src/MenuInventory.cpp:184
10421238 #, c-format
10431239 msgid "Lost %d%% of total XP."
10441240 msgstr "Perdió %d%% de PX."
10451241
1046 #: ../../../src/MenuInventory.cpp:200
1242 #: ../../../src/MenuInventory.cpp:189
10471243 #, c-format
10481244 msgid "Lost %d%% of current level XP."
10491245 msgstr "Perdió %d%% del nivel de PX actual."
10501246
1051 #: ../../../src/MenuInventory.cpp:226
1247 #: ../../../src/MenuInventory.cpp:215
10521248 #, c-format
10531249 msgid "Lost %s."
10541250 msgstr "Perdió %s."
10551251
1056 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1252 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10571253 #, c-format
10581254 msgid "%d %s"
10591255 msgstr "%d %s"
10601256
1061 #: ../../../src/MenuInventory.cpp:317
1257 #: ../../../src/MenuInventory.cpp:300
10621258 msgid "Pick up item(s):"
10631259 msgstr "Coger objeto/s:"
10641260
1065 #: ../../../src/MenuInventory.cpp:318
1261 #: ../../../src/MenuInventory.cpp:301
10661262 msgid "Use or equip item:"
10671263 msgstr "Usar o equiparse con objeto:"
10681264
1069 #: ../../../src/MenuInventory.cpp:319
1265 #: ../../../src/MenuInventory.cpp:302
10701266 #, c-format
10711267 msgid "%s modifiers"
10721268 msgstr "modificadores %s"
10731269
1074 #: ../../../src/MenuInventory.cpp:320
1270 #: ../../../src/MenuInventory.cpp:303
10751271 msgid "Select a quantity of item:"
10761272 msgstr "Selecciona la cantidad de elementos:"
10771273
1078 #: ../../../src/MenuInventory.cpp:323
1274 #: ../../../src/MenuInventory.cpp:306
10791275 msgid "Stash item stack:"
1080 msgstr "Devolver un objeto a la pila:"
1081
1082 #: ../../../src/MenuInventory.cpp:325
1276 msgstr "Devolver un objeto al almacén:"
1277
1278 #: ../../../src/MenuInventory.cpp:308
10831279 msgid "Sell item stack:"
10841280 msgstr "Vender pila de objetos:"
10851281
1086 #: ../../../src/MenuInventory.cpp:592
1282 #: ../../../src/MenuInventory.cpp:574
10871283 msgid "You don't have enough of the required item."
10881284 msgstr "No tienes suficiente del objeto requerido."
10891285
1090 #: ../../../src/MenuInventory.cpp:599
1286 #: ../../../src/MenuInventory.cpp:586
10911287 msgid "You can't use this item right now."
10921288 msgstr "Ahora no puedes usar este objeto."
10931289
1094 #: ../../../src/MenuInventory.cpp:611
1290 #: ../../../src/MenuInventory.cpp:598
10951291 msgid "This item can only be used from the action bar."
10961292 msgstr "Este elemento sólo se puede utilizar en la barra de acción."
10971293
1098 #: ../../../src/MenuInventory.cpp:729
1294 #: ../../../src/MenuInventory.cpp:716
10991295 msgid "Inventory is full."
11001296 msgstr "El inventario esta completo."
11011297
1102 #: ../../../src/MenuInventory.cpp:849
1298 #: ../../../src/MenuInventory.cpp:841
11031299 #, c-format
11041300 msgid "Not enough %s."
11051301 msgstr "No hay suficientes %s."
11061302
1107 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1303 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
11081304 msgid "This item can not be sold."
11091305 msgstr "Este objeto no se puede vender."
11101306
11161312 msgid "Quests"
11171313 msgstr "Gestas"
11181314
1119 #: ../../../src/MenuManager.cpp:286
1315 #: ../../../src/MenuManager.cpp:296
11201316 #, c-format
11211317 msgid "XP: %d/%d"
11221318 msgstr "Experiencia: %d/%d"
11231319
1124 #: ../../../src/MenuManager.cpp:827
1320 #: ../../../src/MenuManager.cpp:854
11251321 msgid "This item can not be dropped."
11261322 msgstr "Este objeto no se puede soltar."
11271323
11291325 msgid "Enter amount:"
11301326 msgstr "Introduce cantidad:"
11311327
1132 #: ../../../src/MenuPowers.cpp:787
1328 #: ../../../src/MenuPowers.cpp:786
11331329 msgid "Passive"
11341330 msgstr "Pasivo"
11351331
1136 #: ../../../src/MenuPowers.cpp:792
1332 #: ../../../src/MenuPowers.cpp:791
11371333 #, c-format
11381334 msgid "Costs %d MP"
11391335 msgstr "Costos %d PM"
11401336
1141 #: ../../../src/MenuPowers.cpp:796
1337 #: ../../../src/MenuPowers.cpp:795
11421338 #, c-format
11431339 msgid "Costs %d HP"
11441340 msgstr "Costos %d HP"
11451341
1146 #: ../../../src/MenuPowers.cpp:801
1342 #: ../../../src/MenuPowers.cpp:800
11471343 msgid "Cooldown:"
11481344 msgstr "Enfriar:"
11491345
1150 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1346 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11511347 msgid "Damage per second"
11521348 msgstr "Daño por segundo"
11531349
1154 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1350 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11551351 msgid "HP per second"
11561352 msgstr "PV por segundo"
11571353
1158 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1354 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11591355 msgid "MP per second"
11601356 msgstr "PM por segundo"
11611357
1162 #: ../../../src/MenuPowers.cpp:885
1358 #: ../../../src/MenuPowers.cpp:884
11631359 msgid "Immobilize"
11641360 msgstr "Inmovilizar"
11651361
1166 #: ../../../src/MenuPowers.cpp:893
1362 #: ../../../src/MenuPowers.cpp:892
11671363 msgid "Immunity"
11681364 msgstr "Inmunidad"
11691365
1170 #: ../../../src/MenuPowers.cpp:896
1366 #: ../../../src/MenuPowers.cpp:895
11711367 msgid "Immunity to damage over time"
11721368 msgstr "Inmunidad al daño durante un tiempo"
11731369
1174 #: ../../../src/MenuPowers.cpp:899
1370 #: ../../../src/MenuPowers.cpp:898
11751371 msgid "Immunity to slow"
11761372 msgstr "Inmunidad a la lentidud"
11771373
1178 #: ../../../src/MenuPowers.cpp:902
1374 #: ../../../src/MenuPowers.cpp:901
11791375 msgid "Immunity to stun"
11801376 msgstr "Inmunidad al aturdimiento"
11811377
1182 #: ../../../src/MenuPowers.cpp:905
1378 #: ../../../src/MenuPowers.cpp:904
11831379 msgid "Immunity to HP steal"
11841380 msgstr "Inmunidad al robo de PV"
11851381
1186 #: ../../../src/MenuPowers.cpp:908
1382 #: ../../../src/MenuPowers.cpp:907
11871383 msgid "Immunity to MP steal"
11881384 msgstr "Inmunidad al robo de PM"
11891385
1190 #: ../../../src/MenuPowers.cpp:911
1386 #: ../../../src/MenuPowers.cpp:910
11911387 msgid "Immunity to knockback"
11921388 msgstr "Inmunidad al contragolpe"
11931389
1194 #: ../../../src/MenuPowers.cpp:914
1390 #: ../../../src/MenuPowers.cpp:913
11951391 msgid "Immunity to damage reflection"
11961392 msgstr "Inmunidad a la reflexión de daño"
11971393
1198 #: ../../../src/MenuPowers.cpp:917
1394 #: ../../../src/MenuPowers.cpp:916
11991395 msgid "Stun"
12001396 msgstr "Aturdir"
12011397
1202 #: ../../../src/MenuPowers.cpp:920
1398 #: ../../../src/MenuPowers.cpp:919
12031399 msgid "Automatic revive on death"
12041400 msgstr "Revivir automáticamente al morir"
12051401
1206 #: ../../../src/MenuPowers.cpp:923
1402 #: ../../../src/MenuPowers.cpp:922
12071403 msgid "Convert"
12081404 msgstr "Convertir"
12091405
1210 #: ../../../src/MenuPowers.cpp:926
1406 #: ../../../src/MenuPowers.cpp:925
12111407 msgid "Fear"
12121408 msgstr "Miedo"
12131409
1214 #: ../../../src/MenuPowers.cpp:929
1410 #: ../../../src/MenuPowers.cpp:928
12151411 msgid "Lifespan"
12161412 msgstr "Vida"
12171413
1218 #: ../../../src/MenuPowers.cpp:953
1414 #: ../../../src/MenuPowers.cpp:952
12191415 msgid "Magical Shield"
12201416 msgstr "Armadura mágica"
12211417
1222 #: ../../../src/MenuPowers.cpp:982
1418 #: ../../../src/MenuPowers.cpp:981
12231419 msgid "Healing"
12241420 msgstr "Sanación"
12251421
1226 #: ../../../src/MenuPowers.cpp:985
1422 #: ../../../src/MenuPowers.cpp:984
12271423 msgid "Knockback"
12281424 msgstr "Contragolpe"
12291425
1230 #: ../../../src/MenuPowers.cpp:1010
1426 #: ../../../src/MenuPowers.cpp:1009
12311427 #, c-format
12321428 msgid "%d%% chance"
12331429 msgstr "%d%% probabilidad "
12341430
1235 #: ../../../src/MenuPowers.cpp:1062
1431 #: ../../../src/MenuPowers.cpp:1061
12361432 msgid "Base Accuracy"
12371433 msgstr "Exactitud base"
12381434
1239 #: ../../../src/MenuPowers.cpp:1082
1435 #: ../../../src/MenuPowers.cpp:1081
12401436 msgid "Base Critical Chance"
12411437 msgstr "Probabilidad base de crítico"
12421438
1243 #: ../../../src/MenuPowers.cpp:1090
1439 #: ../../../src/MenuPowers.cpp:1089
12441440 msgid "Ignores Absorbtion"
12451441 msgstr "Ignora absorción"
12461442
1247 #: ../../../src/MenuPowers.cpp:1095
1443 #: ../../../src/MenuPowers.cpp:1094
12481444 msgid "Ignores Avoidance"
12491445 msgstr "Ignora evitación"
12501446
1251 #: ../../../src/MenuPowers.cpp:1100
1447 #: ../../../src/MenuPowers.cpp:1099
12521448 #, c-format
12531449 msgid "%d%% Chance to crit slowed targets"
12541450 msgstr "%d%% Probabilidad de crítico en objetivos lentos"
12551451
1256 #: ../../../src/MenuPowers.cpp:1105
1452 #: ../../../src/MenuPowers.cpp:1104
12571453 #, c-format
12581454 msgid "Elemental Damage (%s)"
12591455 msgstr "Daño elemental (%s)"
12601456
1261 #: ../../../src/MenuPowers.cpp:1114
1457 #: ../../../src/MenuPowers.cpp:1113
12621458 #, c-format
12631459 msgid "Requires a %s"
12641460 msgstr "Requiere un/a %s"
12651461
1266 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1462 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12671463 #, c-format
12681464 msgid "Requires Power: %s"
12691465 msgstr "Requiere Poder: %s"
12701466
1271 #: ../../../src/MenuPowers.cpp:1163
1467 #: ../../../src/MenuPowers.cpp:1162
12721468 msgid "Click to Unlock (uses 1 Skill Point)"
12731469 msgstr "Pulsa para desbloquear (usa 1 punto de habilidad)"
12741470
1275 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1471 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12761472 msgid "Requires 1 Skill Point"
12771473 msgstr "Requiere 1 punto de habilidad"
12781474
1279 #: ../../../src/MenuPowers.cpp:1355
1475 #: ../../../src/MenuPowers.cpp:1354
12801476 #, c-format
12811477 msgid "%d unspent skill point"
12821478 msgstr "%d punto de habilidad restante"
12831479
1284 #: ../../../src/MenuPowers.cpp:1358
1480 #: ../../../src/MenuPowers.cpp:1357
12851481 #, c-format
12861482 msgid "%d unspent skill points"
12871483 msgstr "%d puntos de habilidad restantes"
12881484
1289 #: ../../../src/MenuPowers.cpp:1388
1485 #: ../../../src/MenuPowers.cpp:1387
12901486 msgid "Next Level:"
12911487 msgstr "Siguiente nivel:"
12921488
1293 #: ../../../src/MenuStash.cpp:96
1294 msgid "Shared Stash"
1295 msgstr "Almacén compartido"
1296
1297 #: ../../../src/MenuStash.cpp:209
1489 #: ../../../src/MenuStash.cpp:53
1490 msgid "Private"
1491 msgstr "Privado"
1492
1493 #: ../../../src/MenuStash.cpp:55
1494 msgid "Shared"
1495 msgstr "Compartido"
1496
1497 #: ../../../src/MenuStash.cpp:103
1498 msgid "Stash"
1499 msgstr "Almacén"
1500
1501 #: ../../../src/MenuStash.cpp:258
12981502 msgid "Can not store quest items in the stash."
12991503 msgstr "No puedes guardar objetos de gesta en tu almacén."
13001504
1301 #: ../../../src/MenuStash.cpp:219
1505 #: ../../../src/MenuStash.cpp:263
1506 msgid "This item can not be stored in the stash."
1507 msgstr "Este objeto no se puede guardar en el almacén."
1508
1509 #: ../../../src/MenuStash.cpp:268
1510 msgid "This item can not be stored in the private stash."
1511 msgstr "Este objeto no se puede guardar en el almacén privado."
1512
1513 #: ../../../src/MenuStash.cpp:273
1514 msgid "This item can not be stored in the shared stash."
1515 msgstr "Este objeto no se puede guardar en el almacén compartido."
1516
1517 #: ../../../src/MenuStash.cpp:283
13021518 msgid "Stash is full."
13031519 msgstr "Almacén lleno."
13041520
1305 #: ../../../src/MenuTalker.cpp:454
1521 #: ../../../src/MenuStash.cpp:340
1522 #, c-format
1523 msgid "Can not store item in stash: %s"
1524 msgstr "No se puede guardar objeto en el amacén: %s"
1525
1526 #: ../../../src/MenuTalker.cpp:447
1527 #, c-format
1528 msgid "<dialog node %d>"
1529 msgstr "<dialog node %d>"
1530
1531 #: ../../../src/MenuTalker.cpp:455
13061532 msgid "Trade"
13071533 msgstr "Comerciar"
13081534
13101536 msgid "Buyback"
13111537 msgstr "Recompra"
13121538
1313 #: ../../../src/MenuVendor.cpp:279
1539 #: ../../../src/MenuVendor.cpp:281
13141540 msgid "Vendor"
13151541 msgstr "Vendedor"
13161542
1317 #: ../../../src/PowerManager.cpp:1136
1543 #: ../../../src/PowerManager.cpp:1170
13181544 #, c-format
13191545 msgid "+%d Shield"
13201546 msgstr "+%d Escudo"
13211547
1322 #: ../../../src/PowerManager.cpp:1392
1548 #: ../../../src/PowerManager.cpp:1426
13231549 msgid "You are already transformed, untransform first."
13241550 msgstr "Usted ya está transformado, destransformase primero."
13251551
1326 #: ../../../src/PowerManager.cpp:1404
1552 #: ../../../src/PowerManager.cpp:1438
13271553 msgid "Could not untransform at this position."
13281554 msgstr "No se puede quitar la transformación en esta posición."
13291555
13311557 msgid "Completed Quests"
13321558 msgstr "Gestas completadas"
13331559
1334 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1560 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13351561 msgid "Game saved."
13361562 msgstr "Partida guardada."
13371563
1338 #: ../../../src/SDLInputState.cpp:582
1564 #: ../../../src/SDLInputState.cpp:643
1565 msgid "BkSp"
1566 msgstr "Retroceso"
1567
1568 #: ../../../src/SDLInputState.cpp:644
1569 msgid "Caps"
1570 msgstr "BloqMayús"
1571
1572 #: ../../../src/SDLInputState.cpp:645
1573 msgid "Del"
1574 msgstr "Suprimir"
1575
1576 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1577 msgid "End"
1578 msgstr "Fin"
1579
1580 #: ../../../src/SDLInputState.cpp:648
1581 msgid "Esc"
1582 msgstr "Esc"
1583
1584 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1585 msgid "Home"
1586 msgstr "Inicio"
1587
1588 #: ../../../src/SDLInputState.cpp:650
1589 msgid "Ins"
1590 msgstr "Ins"
1591
1592 #: ../../../src/SDLInputState.cpp:651
1593 msgid "LAlt"
1594 msgstr "AltIzq"
1595
1596 #: ../../../src/SDLInputState.cpp:652
1597 msgid "LCtrl"
1598 msgstr "CtrlIzq"
1599
1600 #: ../../../src/SDLInputState.cpp:654
1601 msgid "LShft"
1602 msgstr "MayúsIzq"
1603
1604 #: ../../../src/SDLInputState.cpp:655
1605 msgid "Num"
1606 msgstr "BloqNum"
1607
1608 #: ../../../src/SDLInputState.cpp:656
1609 msgid "PgDn"
1610 msgstr "AvPág"
1611
1612 #: ../../../src/SDLInputState.cpp:657
1613 msgid "PgUp"
1614 msgstr "RePág"
1615
1616 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1617 msgid "Pause"
1618 msgstr "Pausar"
1619
1620 #: ../../../src/SDLInputState.cpp:659
1621 msgid "Print"
1622 msgstr "Impr"
1623
1624 #: ../../../src/SDLInputState.cpp:660
1625 msgid "RAlt"
1626 msgstr "AltDch"
1627
1628 #: ../../../src/SDLInputState.cpp:661
1629 msgid "RCtrl"
1630 msgstr "CtrlDch"
1631
1632 #: ../../../src/SDLInputState.cpp:662
1633 msgid "Ret"
1634 msgstr "Intro"
1635
1636 #: ../../../src/SDLInputState.cpp:664
1637 msgid "RShft"
1638 msgstr "MayúsDch"
1639
1640 #: ../../../src/SDLInputState.cpp:665
1641 msgid "SLock"
1642 msgstr "BloqDespl"
1643
1644 #: ../../../src/SDLInputState.cpp:666
1645 msgid "Spc"
1646 msgstr "Esp"
1647
1648 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1649 msgid "Tab"
1650 msgstr "Tabulador"
1651
1652 #: ../../../src/SDLInputState.cpp:673
13391653 msgid "Backspace"
13401654 msgstr "Retroceso"
13411655
1342 #: ../../../src/SDLInputState.cpp:583
1656 #: ../../../src/SDLInputState.cpp:674
13431657 msgid "CapsLock"
13441658 msgstr "BloqMayús"
13451659
1346 #: ../../../src/SDLInputState.cpp:586
1347 msgid "End"
1348 msgstr "Fin"
1349
1350 #: ../../../src/SDLInputState.cpp:587
1660 #: ../../../src/SDLInputState.cpp:678
13511661 msgid "Escape"
13521662 msgstr "Escape"
13531663
1354 #: ../../../src/SDLInputState.cpp:588
1355 msgid "Home"
1356 msgstr "Inicio"
1357
1358 #: ../../../src/SDLInputState.cpp:589
1664 #: ../../../src/SDLInputState.cpp:680
13591665 msgid "Insert"
13601666 msgstr "Insertar"
13611667
1362 #: ../../../src/SDLInputState.cpp:590
1668 #: ../../../src/SDLInputState.cpp:681
13631669 msgid "Left Alt"
13641670 msgstr "Alt Izquierdo"
13651671
1366 #: ../../../src/SDLInputState.cpp:591
1672 #: ../../../src/SDLInputState.cpp:682
13671673 msgid "Left Ctrl"
13681674 msgstr "Ctrl Izquierdo"
13691675
1370 #: ../../../src/SDLInputState.cpp:593
1676 #: ../../../src/SDLInputState.cpp:684
13711677 msgid "Left Shift"
13721678 msgstr "Mayús Izquierdo"
13731679
1374 #: ../../../src/SDLInputState.cpp:594
1680 #: ../../../src/SDLInputState.cpp:685
13751681 msgid "NumLock"
13761682 msgstr "BloqueoDeNúmeros"
13771683
1378 #: ../../../src/SDLInputState.cpp:595
1684 #: ../../../src/SDLInputState.cpp:686
13791685 msgid "PageDown"
13801686 msgstr "Avanzar Página"
13811687
1382 #: ../../../src/SDLInputState.cpp:596
1688 #: ../../../src/SDLInputState.cpp:687
13831689 msgid "PageUp"
13841690 msgstr "Retroceder Página"
13851691
1386 #: ../../../src/SDLInputState.cpp:597
1387 msgid "Pause"
1388 msgstr "Pausar"
1389
1390 #: ../../../src/SDLInputState.cpp:598
1692 #: ../../../src/SDLInputState.cpp:689
13911693 msgid "PrintScreen"
13921694 msgstr "Imprimir Pantalla"
13931695
1394 #: ../../../src/SDLInputState.cpp:599
1696 #: ../../../src/SDLInputState.cpp:690
13951697 msgid "Right Alt"
13961698 msgstr "Alt Derecho"
13971699
1398 #: ../../../src/SDLInputState.cpp:600
1700 #: ../../../src/SDLInputState.cpp:691
13991701 msgid "Right Ctrl"
14001702 msgstr "Ctrl Derecho"
14011703
1402 #: ../../../src/SDLInputState.cpp:601
1704 #: ../../../src/SDLInputState.cpp:692
14031705 msgid "Return"
14041706 msgstr "Retorno"
14051707
1406 #: ../../../src/SDLInputState.cpp:603
1708 #: ../../../src/SDLInputState.cpp:694
14071709 msgid "Right Shift"
14081710 msgstr "Mayús. derecho"
14091711
1410 #: ../../../src/SDLInputState.cpp:604
1712 #: ../../../src/SDLInputState.cpp:695
14111713 msgid "ScrollLock"
14121714 msgstr "BloqDesplazamiento"
14131715
1414 #: ../../../src/SDLInputState.cpp:605
1716 #: ../../../src/SDLInputState.cpp:696
14151717 msgid "Space"
14161718 msgstr "Espacio"
14171719
1418 #: ../../../src/SDLInputState.cpp:606
1419 msgid "Tab"
1420 msgstr "Tabulador"
1421
1422 #: ../../../src/SDLInputState.cpp:620
1720 #: ../../../src/SDLInputState.cpp:710
1721 #, c-format
1722 msgid "M%d"
1723 msgstr "M%d"
1724
1725 #: ../../../src/SDLInputState.cpp:716
14231726 #, c-format
14241727 msgid "Mouse %d"
14251728 msgstr "Ratón %d"
14261729
1427 #: ../../../src/SDLInputState.cpp:628
1730 #: ../../../src/SDLInputState.cpp:726
1731 #, c-format
1732 msgid "JX%d-"
1733 msgstr "JX%d-"
1734
1735 #: ../../../src/SDLInputState.cpp:728
14281736 #, c-format
14291737 msgid "Axis %d -"
14301738 msgstr "Eje %d -"
14311739
1432 #: ../../../src/SDLInputState.cpp:630
1740 #: ../../../src/SDLInputState.cpp:732
1741 #, c-format
1742 msgid "JX%d+"
1743 msgstr "JX%d+"
1744
1745 #: ../../../src/SDLInputState.cpp:734
14331746 #, c-format
14341747 msgid "Axis %d +"
14351748 msgstr "Eje %d +"
14361749
1437 #: ../../../src/SDLInputState.cpp:633
1750 #: ../../../src/SDLInputState.cpp:739
1751 #, c-format
1752 msgid "JB%d"
1753 msgstr "JB%d"
1754
1755 #: ../../../src/SDLInputState.cpp:741
14381756 #, c-format
14391757 msgid "Button %d"
14401758 msgstr "Botón %d"
14411759
1442 #: ../../../src/SDLInputState.cpp:637
1443 msgid "(none)"
1444 msgstr "(ninguno)"
1445
1446 #: ../../../src/SDLInputState.cpp:677
1760 #: ../../../src/SDLInputState.cpp:788
14471761 msgid "Touch control D-Pad"
14481762 msgstr "Cruceta direccional"
14491763
1450 #: ../../../src/SDLInputState.cpp:701
1764 #: ../../../src/SDLInputState.cpp:812
14511765 msgid "Touch control buttons"
14521766 msgstr "Botones de control táctiles"
14531767
1454 #: ../../../src/SDLInputState.cpp:716
1768 #: ../../../src/SDLInputState.cpp:827
14551769 msgid "Tap"
14561770 msgstr "Palmadita"
14571771
1458 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1459 #: ../../../src/SDLInputState.cpp:768
1772 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1773 #, c-format
1774 msgid "Can not bind: %s"
1775 msgstr "No se puede vincular: %s"
1776
1777 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1778 #: ../../../src/SDLInputState.cpp:901
14601779 #, c-format
14611780 msgid "'%s' is no longer bound to:"
14621781 msgstr "'%s' no está ligado más a:"
16241943 msgid "k"
16251944 msgstr "Aceptar"
16261945
1627 #: ../../../src/Utils.cpp:580
1946 #: ../../../src/Utils.cpp:616
16281947 #, c-format
16291948 msgid "%s second"
16301949 msgstr "%s segundo"
16311950
1632 #: ../../../src/Utils.cpp:583
1951 #: ../../../src/Utils.cpp:619
16331952 #, c-format
16341953 msgid "%s seconds"
16351954 msgstr "%s segundos"
0 # SOME DESCRIPTIVE TITLE.
1 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
2 # This file is distributed under the same license as the PACKAGE package.
3 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4 #
5 #, fuzzy
6 msgid ""
7 msgstr ""
8 "Project-Id-Version: PACKAGE VERSION\n"
9 "Report-Msgid-Bugs-To: \n"
10 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
11 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
12 "Language-Team: Basque (https://www.transifex.com/flareorg/teams/84925/eu/)\n"
13 "MIME-Version: 1.0\n"
14 "Content-Type: text/plain; charset=UTF-8\n"
15 "Content-Transfer-Encoding: 8bit\n"
16 "Language: eu\n"
17 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
19 #: ../../../src/Avatar.cpp:387
20 msgid "Your health is low!"
21 msgstr ""
22
23 #: ../../../src/Avatar.cpp:419
24 #, c-format
25 msgid "Congratulations, you have reached level %d!"
26 msgstr ""
27
28 #: ../../../src/Avatar.cpp:421
29 msgid "You may increase one or more attributes through the Character Menu."
30 msgstr ""
31
32 #: ../../../src/Avatar.cpp:425
33 msgid "You may unlock one or more abilities through the Powers Menu."
34 msgstr ""
35
36 #: ../../../src/Avatar.cpp:692
37 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
38 msgstr ""
39
40 #: ../../../src/Avatar.cpp:698
41 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
42 msgstr ""
43
44 #: ../../../src/Avatar.cpp:949
45 msgid "Transformation expired. You have been moved back to a safe place."
46 msgstr ""
47
48 #: ../../../src/CampaignManager.cpp:153
49 #, c-format
50 msgid "%d %s removed."
51 msgstr ""
52
53 #: ../../../src/CampaignManager.cpp:165
54 #, c-format
55 msgid "%s x%d removed."
56 msgstr ""
57
58 #: ../../../src/CampaignManager.cpp:167
59 #, c-format
60 msgid "%s removed."
61 msgstr ""
62
63 #: ../../../src/CampaignManager.cpp:180
64 #, c-format
65 msgid "You receive %s."
66 msgstr ""
67
68 #: ../../../src/CampaignManager.cpp:182
69 #, c-format
70 msgid "You receive %s x%d."
71 msgstr ""
72
73 #: ../../../src/CampaignManager.cpp:191
74 #, c-format
75 msgid "You receive %d %s."
76 msgstr ""
77
78 #: ../../../src/CampaignManager.cpp:200
79 #, c-format
80 msgid "You receive %d XP."
81 msgstr ""
82
83 #: ../../../src/CampaignManager.cpp:206
84 msgid "HP restored."
85 msgstr ""
86
87 #: ../../../src/CampaignManager.cpp:210
88 msgid "MP restored."
89 msgstr ""
90
91 #: ../../../src/CampaignManager.cpp:215
92 msgid "HP and MP restored."
93 msgstr ""
94
95 #: ../../../src/CampaignManager.cpp:219
96 msgid "Negative effects removed."
97 msgstr ""
98
99 #: ../../../src/CampaignManager.cpp:225
100 msgid "HP and MP restored, negative effects removed"
101 msgstr ""
102
103 #: ../../../src/DeviceList.cpp:56
104 msgid ""
105 "SDL software renderer\n"
106 "\n"
107 "Often slower, but less likely to have issues."
108 msgstr ""
109
110 #: ../../../src/DeviceList.cpp:59
111 msgid ""
112 "SDL hardware renderer\n"
113 "\n"
114 "The default renderer that is often faster than the SDL software renderer."
115 msgstr ""
116
117 #: ../../../src/EngineSettings.cpp:572
118 msgid "Adventurer"
119 msgstr ""
120
121 #: ../../../src/Entity.cpp:522
122 msgid "miss"
123 msgstr ""
124
125 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
126 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
127 #, c-format
128 msgid "+%d HP"
129 msgstr ""
130
131 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
132 #: ../../../src/StatBlock.cpp:830
133 #, c-format
134 msgid "+%d MP"
135 msgstr ""
136
137 #: ../../../src/EventManager.cpp:782
138 msgid "Unknown destination"
139 msgstr ""
140
141 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
142 msgid "Loading..."
143 msgstr ""
144
145 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
146 msgid "Delete Save"
147 msgstr ""
148
149 #: ../../../src/GameStateLoad.cpp:90
150 msgid "Delete this save?"
151 msgstr ""
152
153 #: ../../../src/GameStateLoad.cpp:92
154 msgid "Exit to Title"
155 msgstr ""
156
157 #: ../../../src/GameStateLoad.cpp:95
158 msgid "New Game"
159 msgstr ""
160
161 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
162 msgid "Choose a Slot"
163 msgstr ""
164
165 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
166 msgid "Enable a story mod to continue"
167 msgstr ""
168
169 #: ../../../src/GameStateLoad.cpp:597
170 msgid "Load Game"
171 msgstr ""
172
173 #: ../../../src/GameStateLoad.cpp:706
174 msgid "Entering game world..."
175 msgstr ""
176
177 #: ../../../src/GameStateLoad.cpp:709
178 msgid "Loading saved game..."
179 msgstr ""
180
181 #: ../../../src/GameStateLoad.cpp:742
182 msgid "Invalid save"
183 msgstr ""
184
185 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
186 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
187 #: ../../../src/MenuPowers.cpp:1543
188 #, c-format
189 msgid "Level %d"
190 msgstr ""
191
192 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
193 #: ../../../src/MenuConfig.cpp:244
194 msgid "Cancel"
195 msgstr ""
196
197 #: ../../../src/GameStateNew.cpp:68
198 msgid "Create"
199 msgstr ""
200
201 #: ../../../src/GameStateNew.cpp:76
202 msgid "Randomize"
203 msgstr ""
204
205 #: ../../../src/GameStateNew.cpp:92
206 msgid "Choose a Portrait"
207 msgstr ""
208
209 #: ../../../src/GameStateNew.cpp:96
210 msgid "Choose a Name"
211 msgstr ""
212
213 #: ../../../src/GameStateNew.cpp:100
214 msgid "Permadeath?"
215 msgstr ""
216
217 #: ../../../src/GameStateNew.cpp:104
218 msgid "Choose a Class"
219 msgstr ""
220
221 #: ../../../src/GameStateTitle.cpp:107
222 msgid "Play Game"
223 msgstr ""
224
225 #: ../../../src/GameStateTitle.cpp:110
226 msgid "Enable a core mod to continue"
227 msgstr ""
228
229 #: ../../../src/GameStateTitle.cpp:114
230 msgid "Configuration"
231 msgstr ""
232
233 #: ../../../src/GameStateTitle.cpp:117
234 msgid "Credits"
235 msgstr ""
236
237 #: ../../../src/GameStateTitle.cpp:120
238 msgid "Exit Game"
239 msgstr ""
240
241 #: ../../../src/InputState.cpp:407
242 msgid "Accept"
243 msgstr ""
244
245 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
246 #: ../../../src/SDLInputState.cpp:698
247 msgid "Up"
248 msgstr ""
249
250 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
251 #: ../../../src/SDLInputState.cpp:676
252 msgid "Down"
253 msgstr ""
254
255 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
256 #: ../../../src/SDLInputState.cpp:683
257 msgid "Left"
258 msgstr ""
259
260 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
261 #: ../../../src/SDLInputState.cpp:693
262 msgid "Right"
263 msgstr ""
264
265 #: ../../../src/InputState.cpp:412
266 msgid "Bar1"
267 msgstr ""
268
269 #: ../../../src/InputState.cpp:413
270 msgid "Bar2"
271 msgstr ""
272
273 #: ../../../src/InputState.cpp:414
274 msgid "Bar3"
275 msgstr ""
276
277 #: ../../../src/InputState.cpp:415
278 msgid "Bar4"
279 msgstr ""
280
281 #: ../../../src/InputState.cpp:416
282 msgid "Bar5"
283 msgstr ""
284
285 #: ../../../src/InputState.cpp:417
286 msgid "Bar6"
287 msgstr ""
288
289 #: ../../../src/InputState.cpp:418
290 msgid "Bar7"
291 msgstr ""
292
293 #: ../../../src/InputState.cpp:419
294 msgid "Bar8"
295 msgstr ""
296
297 #: ../../../src/InputState.cpp:420
298 msgid "Bar9"
299 msgstr ""
300
301 #: ../../../src/InputState.cpp:421
302 msgid "Bar0"
303 msgstr ""
304
305 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
306 #: ../../../src/MenuCharacter.cpp:54
307 msgid "Character"
308 msgstr ""
309
310 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
311 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
312 msgid "Inventory"
313 msgstr ""
314
315 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
316 #: ../../../src/MenuPowers.cpp:167
317 msgid "Powers"
318 msgstr ""
319
320 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
321 #: ../../../src/MenuLog.cpp:72
322 msgid "Log"
323 msgstr ""
324
325 #: ../../../src/InputState.cpp:426
326 msgid "Main1"
327 msgstr ""
328
329 #: ../../../src/InputState.cpp:427
330 msgid "Main2"
331 msgstr ""
332
333 #: ../../../src/InputState.cpp:428
334 msgid "Ctrl"
335 msgstr ""
336
337 #: ../../../src/InputState.cpp:429
338 msgid "Shift"
339 msgstr ""
340
341 #: ../../../src/InputState.cpp:430
342 msgid "Alt"
343 msgstr ""
344
345 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
346 msgid "Delete"
347 msgstr ""
348
349 #: ../../../src/InputState.cpp:432
350 msgid "ActionBar Accept"
351 msgstr ""
352
353 #: ../../../src/InputState.cpp:433
354 msgid "ActionBar Left"
355 msgstr ""
356
357 #: ../../../src/InputState.cpp:434
358 msgid "ActionBar Right"
359 msgstr ""
360
361 #: ../../../src/InputState.cpp:435
362 msgid "ActionBar Use"
363 msgstr ""
364
365 #: ../../../src/InputState.cpp:436
366 msgid "Developer Menu"
367 msgstr ""
368
369 #: ../../../src/InputState.cpp:438
370 msgid "Left Mouse"
371 msgstr ""
372
373 #: ../../../src/InputState.cpp:439
374 msgid "Middle Mouse"
375 msgstr ""
376
377 #: ../../../src/InputState.cpp:440
378 msgid "Right Mouse"
379 msgstr ""
380
381 #: ../../../src/InputState.cpp:441
382 msgid "Wheel Up"
383 msgstr ""
384
385 #: ../../../src/InputState.cpp:442
386 msgid "Wheel Down"
387 msgstr ""
388
389 #: ../../../src/InputState.cpp:443
390 msgid "Mouse X1"
391 msgstr ""
392
393 #: ../../../src/InputState.cpp:444
394 msgid "Mouse X2"
395 msgstr ""
396
397 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
398 msgid "Unknown Item"
399 msgstr ""
400
401 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
402 #, c-format
403 msgid "%d%% Speed"
404 msgstr ""
405
406 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
407 #, c-format
408 msgid "%d%% Attack Speed"
409 msgstr ""
410
411 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
412 #: ../../../src/MenuPowers.cpp:832
413 #, c-format
414 msgid "Resistance (%s)"
415 msgstr ""
416
417 #: ../../../src/ItemManager.cpp:714
418 #, c-format
419 msgid "Requires %s"
420 msgstr ""
421
422 #: ../../../src/ItemManager.cpp:763
423 msgid "Quest Item"
424 msgstr ""
425
426 #: ../../../src/ItemManager.cpp:790
427 #, c-format
428 msgid "Quality: %s"
429 msgstr ""
430
431 #: ../../../src/ItemManager.cpp:815
432 #, c-format
433 msgid "Absorb: %d-%d"
434 msgstr ""
435
436 #: ../../../src/ItemManager.cpp:817
437 #, c-format
438 msgid "Absorb: %d"
439 msgstr ""
440
441 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
442 #: ../../../src/MenuPowers.cpp:1133
443 #, c-format
444 msgid "Requires Level %d"
445 msgstr ""
446
447 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
448 #: ../../../src/MenuPowers.cpp:1124
449 #, c-format
450 msgid "Requires %s %d"
451 msgstr ""
452
453 #: ../../../src/ItemManager.cpp:879
454 #, c-format
455 msgid "Requires Class: %s"
456 msgstr ""
457
458 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
459 #, c-format
460 msgid "Buy Price: %d %s"
461 msgstr ""
462
463 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
464 #, c-format
465 msgid "Buy Price: %d %s each"
466 msgstr ""
467
468 #: ../../../src/ItemManager.cpp:916
469 #, c-format
470 msgid "Sell Price: %d %s"
471 msgstr ""
472
473 #: ../../../src/ItemManager.cpp:918
474 #, c-format
475 msgid "Sell Price: %d %s each"
476 msgstr ""
477
478 #: ../../../src/ItemManager.cpp:927
479 msgid "Set:"
480 msgstr ""
481
482 #: ../../../src/ItemManager.cpp:934
483 #, c-format
484 msgid "%d items:"
485 msgstr ""
486
487 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
488 #, c-format
489 msgid "Press [%s] to use"
490 msgstr ""
491
492 #: ../../../src/ItemManager.cpp:951
493 #, c-format
494 msgid "Press [%s] to read"
495 msgstr ""
496
497 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
498 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
499 #, c-format
500 msgid "Hotkey: %s"
501 msgstr ""
502
503 #: ../../../src/MenuActionBar.cpp:599
504 msgid "Not enough MP."
505 msgstr ""
506
507 #: ../../../src/MenuActiveEffects.cpp:124
508 #, c-format
509 msgid "x%d"
510 msgstr ""
511
512 #: ../../../src/MenuActiveEffects.cpp:219
513 msgid "Remaining:"
514 msgstr ""
515
516 #: ../../../src/MenuActiveEffects.cpp:225
517 #, c-format
518 msgid "x%d stacks"
519 msgstr ""
520
521 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
522 msgid "Name"
523 msgstr ""
524
525 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
526 msgid "Level"
527 msgstr ""
528
529 #: ../../../src/MenuCharacter.cpp:310
530 #, c-format
531 msgid "%d unspent stat point"
532 msgstr ""
533
534 #: ../../../src/MenuCharacter.cpp:313
535 #, c-format
536 msgid "%d unspent stat points"
537 msgstr ""
538
539 #: ../../../src/MenuCharacter.cpp:355
540 #, c-format
541 msgid "Reduces the damage taken from \"%s\" elemental attacks."
542 msgstr ""
543
544 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
545 #, c-format
546 msgid "XP: %d"
547 msgstr ""
548
549 #: ../../../src/MenuCharacter.cpp:367
550 #, c-format
551 msgid "Next: %d"
552 msgstr ""
553
554 #: ../../../src/MenuCharacter.cpp:373
555 #, c-format
556 msgid "base (%d), bonus (%d)"
557 msgstr ""
558
559 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
560 msgid "Related stats:"
561 msgstr ""
562
563 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
564 #, c-format
565 msgid "Each level grants %d."
566 msgstr ""
567
568 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
569 #, c-format
570 msgid "Each point of %s grants %d."
571 msgstr ""
572
573 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
574 msgid "Clear"
575 msgstr ""
576
577 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
578 msgid "Assign:"
579 msgstr ""
580
581 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
582 msgid "Defaults"
583 msgstr ""
584
585 #: ../../../src/MenuConfig.cpp:123
586 msgid "Reset ALL settings?"
587 msgstr ""
588
589 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
590 msgid "OK"
591 msgstr ""
592
593 #: ../../../src/MenuConfig.cpp:246
594 msgid "Continue"
595 msgstr ""
596
597 #: ../../../src/MenuConfig.cpp:248
598 msgid "Save Game"
599 msgstr ""
600
601 #: ../../../src/MenuConfig.cpp:291
602 msgid "Default"
603 msgstr ""
604
605 #: ../../../src/MenuConfig.cpp:291
606 msgid ""
607 "Show all loot tooltips, except for those that would be obscured by the "
608 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
609 msgstr ""
610
611 #: ../../../src/MenuConfig.cpp:292
612 msgid "Show all"
613 msgstr ""
614
615 #: ../../../src/MenuConfig.cpp:292
616 msgid ""
617 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
618 msgstr ""
619
620 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
621 msgid "Hidden"
622 msgstr ""
623
624 #: ../../../src/MenuConfig.cpp:293
625 msgid ""
626 "Always hide loot tooltips, except for when a piece of loot is hovered with "
627 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
628 msgstr ""
629
630 #: ../../../src/MenuConfig.cpp:296
631 msgid "Visible"
632 msgstr ""
633
634 #: ../../../src/MenuConfig.cpp:297
635 msgid "Visible (2x zoom)"
636 msgstr ""
637
638 #: ../../../src/MenuConfig.cpp:301
639 msgid ""
640 "Controls the type of warning to be activated when the player is below the "
641 "low health threshold."
642 msgstr ""
643
644 #: ../../../src/MenuConfig.cpp:302
645 msgid "- Display a message"
646 msgstr ""
647
648 #: ../../../src/MenuConfig.cpp:303
649 msgid "- Play a sound"
650 msgstr ""
651
652 #: ../../../src/MenuConfig.cpp:304
653 msgid "- Change the cursor"
654 msgstr ""
655
656 #: ../../../src/MenuConfig.cpp:306
657 msgid "Disabled"
658 msgstr ""
659
660 #: ../../../src/MenuConfig.cpp:307
661 msgid "All"
662 msgstr ""
663
664 #: ../../../src/MenuConfig.cpp:308
665 msgid "Message & Cursor"
666 msgstr ""
667
668 #: ../../../src/MenuConfig.cpp:309
669 msgid "Message & Sound"
670 msgstr ""
671
672 #: ../../../src/MenuConfig.cpp:310
673 msgid "Sound & Cursor"
674 msgstr ""
675
676 #: ../../../src/MenuConfig.cpp:311
677 msgid "Message"
678 msgstr ""
679
680 #: ../../../src/MenuConfig.cpp:312
681 msgid "Cursor"
682 msgstr ""
683
684 #: ../../../src/MenuConfig.cpp:313
685 msgid "Sound"
686 msgstr ""
687
688 #: ../../../src/MenuConfig.cpp:319
689 msgid ""
690 "When the player's health drops below the given threshold, the low health "
691 "notifications are triggered if one or more of them is enabled."
692 msgstr ""
693
694 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
695 msgid "Exit"
696 msgstr ""
697
698 #: ../../../src/MenuConfig.cpp:333
699 msgid "Video"
700 msgstr ""
701
702 #: ../../../src/MenuConfig.cpp:334
703 msgid "Audio"
704 msgstr ""
705
706 #: ../../../src/MenuConfig.cpp:335
707 msgid "Interface"
708 msgstr ""
709
710 #: ../../../src/MenuConfig.cpp:336
711 msgid "Input"
712 msgstr ""
713
714 #: ../../../src/MenuConfig.cpp:337
715 msgid "Keybindings"
716 msgstr ""
717
718 #: ../../../src/MenuConfig.cpp:338
719 msgid "Mods"
720 msgstr ""
721
722 #: ../../../src/MenuConfig.cpp:350
723 msgid "Paused"
724 msgstr ""
725
726 #: ../../../src/MenuConfig.cpp:353
727 msgid "Time Played"
728 msgstr ""
729
730 #: ../../../src/MenuConfig.cpp:359
731 msgid "Renderer"
732 msgstr ""
733
734 #: ../../../src/MenuConfig.cpp:360
735 msgid "Full Screen Mode"
736 msgstr ""
737
738 #: ../../../src/MenuConfig.cpp:361
739 msgid "Hardware surfaces"
740 msgstr ""
741
742 #: ../../../src/MenuConfig.cpp:362
743 msgid "V-Sync"
744 msgstr ""
745
746 #: ../../../src/MenuConfig.cpp:363
747 msgid "Texture Filtering"
748 msgstr ""
749
750 #: ../../../src/MenuConfig.cpp:364
751 msgid "DPI scaling"
752 msgstr ""
753
754 #: ../../../src/MenuConfig.cpp:365
755 msgid "Parallax Layers"
756 msgstr ""
757
758 #: ../../../src/MenuConfig.cpp:366
759 msgid "Allow changing gamma"
760 msgstr ""
761
762 #: ../../../src/MenuConfig.cpp:367
763 msgid "Gamma"
764 msgstr ""
765
766 #: ../../../src/MenuConfig.cpp:369
767 msgid "Sound Volume"
768 msgstr ""
769
770 #: ../../../src/MenuConfig.cpp:370
771 msgid "Music Volume"
772 msgstr ""
773
774 #: ../../../src/MenuConfig.cpp:372
775 msgid "Language"
776 msgstr ""
777
778 #: ../../../src/MenuConfig.cpp:373
779 msgid "Show FPS"
780 msgstr ""
781
782 #: ../../../src/MenuConfig.cpp:374
783 msgid "Hardware mouse cursor"
784 msgstr ""
785
786 #: ../../../src/MenuConfig.cpp:375
787 msgid "Colorblind Mode"
788 msgstr ""
789
790 #: ../../../src/MenuConfig.cpp:376
791 msgid "Developer Mode"
792 msgstr ""
793
794 #: ../../../src/MenuConfig.cpp:377
795 msgid "Subtitles"
796 msgstr ""
797
798 #: ../../../src/MenuConfig.cpp:378
799 msgid "Loot tooltip visibility"
800 msgstr ""
801
802 #: ../../../src/MenuConfig.cpp:379
803 msgid "Mini-map mode"
804 msgstr ""
805
806 #: ../../../src/MenuConfig.cpp:380
807 msgid "Always show stat bar labels"
808 msgstr ""
809
810 #: ../../../src/MenuConfig.cpp:381
811 msgid "Allow stat bar auto-hiding"
812 msgstr ""
813
814 #: ../../../src/MenuConfig.cpp:382
815 msgid "Show combat text"
816 msgstr ""
817
818 #: ../../../src/MenuConfig.cpp:383
819 msgid "Automatically equip items"
820 msgstr ""
821
822 #: ../../../src/MenuConfig.cpp:384
823 msgid "Show hidden entity markers"
824 msgstr ""
825
826 #: ../../../src/MenuConfig.cpp:385
827 msgid "Low health notification"
828 msgstr ""
829
830 #: ../../../src/MenuConfig.cpp:386
831 msgid "Low health threshold"
832 msgstr ""
833
834 #: ../../../src/MenuConfig.cpp:389
835 msgid "Joystick"
836 msgstr ""
837
838 #: ../../../src/MenuConfig.cpp:390
839 msgid "Move hero using mouse"
840 msgstr ""
841
842 #: ../../../src/MenuConfig.cpp:391
843 msgid "Mouse aim"
844 msgstr ""
845
846 #: ../../../src/MenuConfig.cpp:392
847 msgid "Do not use mouse"
848 msgstr ""
849
850 #: ../../../src/MenuConfig.cpp:393
851 msgid "Swap mouse movement button"
852 msgstr ""
853
854 #: ../../../src/MenuConfig.cpp:394
855 msgid "Attack with mouse movement"
856 msgstr ""
857
858 #: ../../../src/MenuConfig.cpp:395
859 msgid "Joystick Deadzone"
860 msgstr ""
861
862 #: ../../../src/MenuConfig.cpp:405
863 #, c-format
864 msgid "Primary binding: %s"
865 msgstr ""
866
867 #: ../../../src/MenuConfig.cpp:406
868 #, c-format
869 msgid "Alternate binding: %s"
870 msgstr ""
871
872 #: ../../../src/MenuConfig.cpp:407
873 #, c-format
874 msgid "Joystick binding: %s"
875 msgstr ""
876
877 #: ../../../src/MenuConfig.cpp:508
878 msgid ""
879 "Will try to store surfaces in video memory versus system memory. The effect "
880 "this has on performance depends on the renderer."
881 msgstr ""
882
883 #: ../../../src/MenuConfig.cpp:509
884 msgid ""
885 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
886 "windowed mode or input lag."
887 msgstr ""
888
889 #: ../../../src/MenuConfig.cpp:510
890 msgid ""
891 "When enabled, this uses the screen DPI in addition to the window dimensions "
892 "to scale the rendering resolution. Otherwise, only the window dimensions are"
893 " used."
894 msgstr ""
895
896 #: ../../../src/MenuConfig.cpp:511
897 msgid ""
898 "This enables parallax (non-tile) layers. Disabling this setting can improve "
899 "performance in some cases."
900 msgstr ""
901
902 #: ../../../src/MenuConfig.cpp:512
903 msgid ""
904 "Enables the below setting that controls the screen gamma level. The behavior"
905 " of the gamma setting can vary between platforms."
906 msgstr ""
907
908 #: ../../../src/MenuConfig.cpp:513
909 msgid ""
910 "Provides additional text for information that is primarily conveyed through "
911 "color."
912 msgstr ""
913
914 #: ../../../src/MenuConfig.cpp:514
915 msgid ""
916 "Some mods will automatically hide the stat bars when they are inactive. "
917 "Disabling this option will keep them displayed at all times."
918 msgstr ""
919
920 #: ../../../src/MenuConfig.cpp:515
921 msgid ""
922 "When enabled, empty equipment slots will be filled with applicable items "
923 "when they are obtained."
924 msgstr ""
925
926 #: ../../../src/MenuConfig.cpp:516
927 msgid ""
928 "Shows a marker above enemies, allies, and the player when they are obscured "
929 "by tall objects."
930 msgstr ""
931
932 #: ../../../src/MenuConfig.cpp:517
933 msgid ""
934 "This allows the game to be controlled entirely with the keyboard (or "
935 "joystick)."
936 msgstr ""
937
938 #: ../../../src/MenuConfig.cpp:518
939 msgid ""
940 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
941 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
942 "instead of 'Main1'."
943 msgstr ""
944
945 #: ../../../src/MenuConfig.cpp:519
946 msgid ""
947 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
948 "assigned to the movement button can be used by targeting an enemy. If this "
949 "setting is disabled, it is required to use 'Shift' to access the Power "
950 "assigned to the movement button."
951 msgstr ""
952
953 #: ../../../src/MenuConfig.cpp:520
954 msgid ""
955 "The player's attacks will be aimed in the direction of the mouse cursor when"
956 " this is enabled."
957 msgstr ""
958
959 #: ../../../src/MenuConfig.cpp:571
960 msgid "Active Mods"
961 msgstr ""
962
963 #: ../../../src/MenuConfig.cpp:580
964 msgid "Available Mods"
965 msgstr ""
966
967 #: ../../../src/MenuConfig.cpp:599
968 msgid "<< Disable"
969 msgstr ""
970
971 #: ../../../src/MenuConfig.cpp:605
972 msgid "Enable >>"
973 msgstr ""
974
975 #: ../../../src/MenuConfig.cpp:1436
976 msgid "Version:"
977 msgstr ""
978
979 #: ../../../src/MenuConfig.cpp:1441
980 msgid "Game:"
981 msgstr ""
982
983 #: ../../../src/MenuConfig.cpp:1446
984 msgid "Engine version:"
985 msgstr ""
986
987 #: ../../../src/MenuConfig.cpp:1454
988 msgid "Requires mods:"
989 msgstr ""
990
991 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
992 msgid "(none)"
993 msgstr ""
994
995 #: ../../../src/MenuConfig.cpp:1579
996 msgid "Save & Exit"
997 msgstr ""
998
999 #: ../../../src/MenuDevConsole.cpp:63
1000 msgid "Execute"
1001 msgstr ""
1002
1003 #: ../../../src/MenuDevConsole.cpp:101 ../../../src/MenuDevConsole.cpp:151
1004 msgid "Developer Console"
1005 msgstr ""
1006
1007 #: ../../../src/MenuDevConsole.cpp:141
1008 #, c-format
1009 msgid "Use '%s' to inspect with the cursor."
1010 msgstr ""
1011
1012 #: ../../../src/MenuDevConsole.cpp:146
1013 msgid "Arguments with spaces should be enclosed with double quotes. Example:"
1014 msgstr ""
1015
1016 #: ../../../src/MenuDevConsole.cpp:147
1017 msgid "Type 'help' to get a list of commands."
1018 msgstr ""
1019
1020 #: ../../../src/MenuDevConsole.cpp:209 ../../../src/MenuDevConsole.cpp:213
1021 msgid "px"
1022 msgstr ""
1023
1024 #: ../../../src/MenuDevConsole.cpp:224
1025 msgid "Distance"
1026 msgstr ""
1027
1028 #: ../../../src/MenuDevConsole.cpp:239 ../../../src/MenuDevConsole.cpp:286
1029 msgid "Entity"
1030 msgstr ""
1031
1032 #: ../../../src/MenuDevConsole.cpp:261 ../../../src/MenuDevConsole.cpp:268
1033 msgid "none"
1034 msgstr ""
1035
1036 #: ../../../src/MenuDevConsole.cpp:262 ../../../src/MenuDevConsole.cpp:264
1037 msgid "wall"
1038 msgstr ""
1039
1040 #: ../../../src/MenuDevConsole.cpp:263 ../../../src/MenuDevConsole.cpp:265
1041 msgid "short wall / pit"
1042 msgstr ""
1043
1044 #: ../../../src/MenuDevConsole.cpp:266
1045 msgid "entity"
1046 msgstr ""
1047
1048 #: ../../../src/MenuDevConsole.cpp:267
1049 msgid "entity, ally"
1050 msgstr ""
1051
1052 #: ../../../src/MenuDevConsole.cpp:274
1053 msgid "Tile"
1054 msgstr ""
1055
1056 #: ../../../src/MenuDevConsole.cpp:360
1057 msgid "adds a power to the action bar"
1058 msgstr ""
1059
1060 #: ../../../src/MenuDevConsole.cpp:361
1061 msgid "turns on/off the display of the FPS counter"
1062 msgstr ""
1063
1064 #: ../../../src/MenuDevConsole.cpp:362
1065 msgid "turns on/off all of the HUD elements"
1066 msgstr ""
1067
1068 #: ../../../src/MenuDevConsole.cpp:363
1069 msgid "turns on/off the developer hud"
1070 msgstr ""
1071
1072 #: ../../../src/MenuDevConsole.cpp:364
1073 msgid ""
1074 "Prints a list of powers that match a search term. No search term will list "
1075 "all items"
1076 msgstr ""
1077
1078 #: ../../../src/MenuDevConsole.cpp:365
1079 msgid "Prints out all the map filenames located in the \"maps/\" directory."
1080 msgstr ""
1081
1082 #: ../../../src/MenuDevConsole.cpp:366
1083 msgid ""
1084 "Prints out the active campaign statuses that match a search term. No search "
1085 "term will list all active statuses"
1086 msgstr ""
1087
1088 #: ../../../src/MenuDevConsole.cpp:367
1089 msgid ""
1090 "Prints a list of items that match a search term. No search term will list "
1091 "all items"
1092 msgstr ""
1093
1094 #: ../../../src/MenuDevConsole.cpp:368
1095 msgid ""
1096 "parses a series of event components and executes them as a single event"
1097 msgstr ""
1098
1099 #: ../../../src/MenuDevConsole.cpp:369
1100 msgid "clears the command history"
1101 msgstr ""
1102
1103 #: ../../../src/MenuDevConsole.cpp:370
1104 msgid "displays this text"
1105 msgstr ""
1106
1107 #: ../../../src/MenuDevConsole.cpp:377
1108 msgid "Toggled the developer hud"
1109 msgstr ""
1110
1111 #: ../../../src/MenuDevConsole.cpp:381
1112 msgid "Toggled the hud"
1113 msgstr ""
1114
1115 #: ../../../src/MenuDevConsole.cpp:385
1116 msgid "Toggled the FPS counter"
1117 msgstr ""
1118
1119 #: ../../../src/MenuDevConsole.cpp:534
1120 msgid "ERROR: Incorrect number of arguments"
1121 msgstr ""
1122
1123 #: ../../../src/MenuDevConsole.cpp:536 ../../../src/MenuDevConsole.cpp:564
1124 msgid "HINT:"
1125 msgstr ""
1126
1127 #: ../../../src/MenuDevConsole.cpp:536
1128 msgid "<id>"
1129 msgstr ""
1130
1131 #: ../../../src/MenuDevConsole.cpp:552
1132 #, c-format
1133 msgid "ERROR: '%s' is not a valid event key"
1134 msgstr ""
1135
1136 #: ../../../src/MenuDevConsole.cpp:562
1137 msgid "ERROR: Too few arguments"
1138 msgstr ""
1139
1140 #: ../../../src/MenuDevConsole.cpp:564
1141 msgid "<key>=<val> <key>=<val> ..."
1142 msgstr ""
1143
1144 #: ../../../src/MenuDevConsole.cpp:569
1145 msgid "ERROR: Unknown command"
1146 msgstr ""
1147
1148 #: ../../../src/MenuDevConsole.cpp:571
1149 msgid "HINT: Type help"
1150 msgstr ""
1151
1152 #: ../../../src/MenuEnemy.cpp:162
1153 #, c-format
1154 msgid "%s level %d"
1155 msgstr ""
1156
1157 #: ../../../src/MenuEnemy.cpp:186
1158 msgid "Dead"
1159 msgstr ""
1160
1161 #: ../../../src/MenuEnemy.cpp:188
1162 msgid "Destroyed"
1163 msgstr ""
1164
1165 #: ../../../src/MenuInventory.cpp:177
1166 #, c-format
1167 msgid "Lost %d%% of %s."
1168 msgstr ""
1169
1170 #: ../../../src/MenuInventory.cpp:184
1171 #, c-format
1172 msgid "Lost %d%% of total XP."
1173 msgstr ""
1174
1175 #: ../../../src/MenuInventory.cpp:189
1176 #, c-format
1177 msgid "Lost %d%% of current level XP."
1178 msgstr ""
1179
1180 #: ../../../src/MenuInventory.cpp:215
1181 #, c-format
1182 msgid "Lost %s."
1183 msgstr ""
1184
1185 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
1186 #, c-format
1187 msgid "%d %s"
1188 msgstr ""
1189
1190 #: ../../../src/MenuInventory.cpp:300
1191 msgid "Pick up item(s):"
1192 msgstr ""
1193
1194 #: ../../../src/MenuInventory.cpp:301
1195 msgid "Use or equip item:"
1196 msgstr ""
1197
1198 #: ../../../src/MenuInventory.cpp:302
1199 #, c-format
1200 msgid "%s modifiers"
1201 msgstr ""
1202
1203 #: ../../../src/MenuInventory.cpp:303
1204 msgid "Select a quantity of item:"
1205 msgstr ""
1206
1207 #: ../../../src/MenuInventory.cpp:306
1208 msgid "Stash item stack:"
1209 msgstr ""
1210
1211 #: ../../../src/MenuInventory.cpp:308
1212 msgid "Sell item stack:"
1213 msgstr ""
1214
1215 #: ../../../src/MenuInventory.cpp:574
1216 msgid "You don't have enough of the required item."
1217 msgstr ""
1218
1219 #: ../../../src/MenuInventory.cpp:586
1220 msgid "You can't use this item right now."
1221 msgstr ""
1222
1223 #: ../../../src/MenuInventory.cpp:598
1224 msgid "This item can only be used from the action bar."
1225 msgstr ""
1226
1227 #: ../../../src/MenuInventory.cpp:716
1228 msgid "Inventory is full."
1229 msgstr ""
1230
1231 #: ../../../src/MenuInventory.cpp:841
1232 #, c-format
1233 msgid "Not enough %s."
1234 msgstr ""
1235
1236 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
1237 msgid "This item can not be sold."
1238 msgstr ""
1239
1240 #: ../../../src/MenuLog.cpp:91
1241 msgid "Notes"
1242 msgstr ""
1243
1244 #: ../../../src/MenuLog.cpp:92
1245 msgid "Quests"
1246 msgstr ""
1247
1248 #: ../../../src/MenuManager.cpp:296
1249 #, c-format
1250 msgid "XP: %d/%d"
1251 msgstr ""
1252
1253 #: ../../../src/MenuManager.cpp:854
1254 msgid "This item can not be dropped."
1255 msgstr ""
1256
1257 #: ../../../src/MenuNumPicker.cpp:59
1258 msgid "Enter amount:"
1259 msgstr ""
1260
1261 #: ../../../src/MenuPowers.cpp:786
1262 msgid "Passive"
1263 msgstr ""
1264
1265 #: ../../../src/MenuPowers.cpp:791
1266 #, c-format
1267 msgid "Costs %d MP"
1268 msgstr ""
1269
1270 #: ../../../src/MenuPowers.cpp:795
1271 #, c-format
1272 msgid "Costs %d HP"
1273 msgstr ""
1274
1275 #: ../../../src/MenuPowers.cpp:800
1276 msgid "Cooldown:"
1277 msgstr ""
1278
1279 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
1280 msgid "Damage per second"
1281 msgstr ""
1282
1283 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
1284 msgid "HP per second"
1285 msgstr ""
1286
1287 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
1288 msgid "MP per second"
1289 msgstr ""
1290
1291 #: ../../../src/MenuPowers.cpp:884
1292 msgid "Immobilize"
1293 msgstr ""
1294
1295 #: ../../../src/MenuPowers.cpp:892
1296 msgid "Immunity"
1297 msgstr ""
1298
1299 #: ../../../src/MenuPowers.cpp:895
1300 msgid "Immunity to damage over time"
1301 msgstr ""
1302
1303 #: ../../../src/MenuPowers.cpp:898
1304 msgid "Immunity to slow"
1305 msgstr ""
1306
1307 #: ../../../src/MenuPowers.cpp:901
1308 msgid "Immunity to stun"
1309 msgstr ""
1310
1311 #: ../../../src/MenuPowers.cpp:904
1312 msgid "Immunity to HP steal"
1313 msgstr ""
1314
1315 #: ../../../src/MenuPowers.cpp:907
1316 msgid "Immunity to MP steal"
1317 msgstr ""
1318
1319 #: ../../../src/MenuPowers.cpp:910
1320 msgid "Immunity to knockback"
1321 msgstr ""
1322
1323 #: ../../../src/MenuPowers.cpp:913
1324 msgid "Immunity to damage reflection"
1325 msgstr ""
1326
1327 #: ../../../src/MenuPowers.cpp:916
1328 msgid "Stun"
1329 msgstr ""
1330
1331 #: ../../../src/MenuPowers.cpp:919
1332 msgid "Automatic revive on death"
1333 msgstr ""
1334
1335 #: ../../../src/MenuPowers.cpp:922
1336 msgid "Convert"
1337 msgstr ""
1338
1339 #: ../../../src/MenuPowers.cpp:925
1340 msgid "Fear"
1341 msgstr ""
1342
1343 #: ../../../src/MenuPowers.cpp:928
1344 msgid "Lifespan"
1345 msgstr ""
1346
1347 #: ../../../src/MenuPowers.cpp:952
1348 msgid "Magical Shield"
1349 msgstr ""
1350
1351 #: ../../../src/MenuPowers.cpp:981
1352 msgid "Healing"
1353 msgstr ""
1354
1355 #: ../../../src/MenuPowers.cpp:984
1356 msgid "Knockback"
1357 msgstr ""
1358
1359 #: ../../../src/MenuPowers.cpp:1009
1360 #, c-format
1361 msgid "%d%% chance"
1362 msgstr ""
1363
1364 #: ../../../src/MenuPowers.cpp:1061
1365 msgid "Base Accuracy"
1366 msgstr ""
1367
1368 #: ../../../src/MenuPowers.cpp:1081
1369 msgid "Base Critical Chance"
1370 msgstr ""
1371
1372 #: ../../../src/MenuPowers.cpp:1089
1373 msgid "Ignores Absorbtion"
1374 msgstr ""
1375
1376 #: ../../../src/MenuPowers.cpp:1094
1377 msgid "Ignores Avoidance"
1378 msgstr ""
1379
1380 #: ../../../src/MenuPowers.cpp:1099
1381 #, c-format
1382 msgid "%d%% Chance to crit slowed targets"
1383 msgstr ""
1384
1385 #: ../../../src/MenuPowers.cpp:1104
1386 #, c-format
1387 msgid "Elemental Damage (%s)"
1388 msgstr ""
1389
1390 #: ../../../src/MenuPowers.cpp:1113
1391 #, c-format
1392 msgid "Requires a %s"
1393 msgstr ""
1394
1395 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
1396 #, c-format
1397 msgid "Requires Power: %s"
1398 msgstr ""
1399
1400 #: ../../../src/MenuPowers.cpp:1162
1401 msgid "Click to Unlock (uses 1 Skill Point)"
1402 msgstr ""
1403
1404 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
1405 msgid "Requires 1 Skill Point"
1406 msgstr ""
1407
1408 #: ../../../src/MenuPowers.cpp:1354
1409 #, c-format
1410 msgid "%d unspent skill point"
1411 msgstr ""
1412
1413 #: ../../../src/MenuPowers.cpp:1357
1414 #, c-format
1415 msgid "%d unspent skill points"
1416 msgstr ""
1417
1418 #: ../../../src/MenuPowers.cpp:1387
1419 msgid "Next Level:"
1420 msgstr ""
1421
1422 #: ../../../src/MenuStash.cpp:53
1423 msgid "Private"
1424 msgstr ""
1425
1426 #: ../../../src/MenuStash.cpp:55
1427 msgid "Shared"
1428 msgstr ""
1429
1430 #: ../../../src/MenuStash.cpp:103
1431 msgid "Stash"
1432 msgstr ""
1433
1434 #: ../../../src/MenuStash.cpp:258
1435 msgid "Can not store quest items in the stash."
1436 msgstr ""
1437
1438 #: ../../../src/MenuStash.cpp:263
1439 msgid "This item can not be stored in the stash."
1440 msgstr ""
1441
1442 #: ../../../src/MenuStash.cpp:268
1443 msgid "This item can not be stored in the private stash."
1444 msgstr ""
1445
1446 #: ../../../src/MenuStash.cpp:273
1447 msgid "This item can not be stored in the shared stash."
1448 msgstr ""
1449
1450 #: ../../../src/MenuStash.cpp:283
1451 msgid "Stash is full."
1452 msgstr ""
1453
1454 #: ../../../src/MenuStash.cpp:340
1455 #, c-format
1456 msgid "Can not store item in stash: %s"
1457 msgstr ""
1458
1459 #: ../../../src/MenuTalker.cpp:447
1460 #, c-format
1461 msgid "<dialog node %d>"
1462 msgstr ""
1463
1464 #: ../../../src/MenuTalker.cpp:455
1465 msgid "Trade"
1466 msgstr ""
1467
1468 #: ../../../src/MenuVendor.cpp:58
1469 msgid "Buyback"
1470 msgstr ""
1471
1472 #: ../../../src/MenuVendor.cpp:281
1473 msgid "Vendor"
1474 msgstr ""
1475
1476 #: ../../../src/PowerManager.cpp:1170
1477 #, c-format
1478 msgid "+%d Shield"
1479 msgstr ""
1480
1481 #: ../../../src/PowerManager.cpp:1426
1482 msgid "You are already transformed, untransform first."
1483 msgstr ""
1484
1485 #: ../../../src/PowerManager.cpp:1438
1486 msgid "Could not untransform at this position."
1487 msgstr ""
1488
1489 #: ../../../src/QuestLog.cpp:234
1490 msgid "Completed Quests"
1491 msgstr ""
1492
1493 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
1494 msgid "Game saved."
1495 msgstr ""
1496
1497 #: ../../../src/SDLInputState.cpp:643
1498 msgid "BkSp"
1499 msgstr ""
1500
1501 #: ../../../src/SDLInputState.cpp:644
1502 msgid "Caps"
1503 msgstr ""
1504
1505 #: ../../../src/SDLInputState.cpp:645
1506 msgid "Del"
1507 msgstr ""
1508
1509 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1510 msgid "End"
1511 msgstr ""
1512
1513 #: ../../../src/SDLInputState.cpp:648
1514 msgid "Esc"
1515 msgstr ""
1516
1517 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1518 msgid "Home"
1519 msgstr ""
1520
1521 #: ../../../src/SDLInputState.cpp:650
1522 msgid "Ins"
1523 msgstr ""
1524
1525 #: ../../../src/SDLInputState.cpp:651
1526 msgid "LAlt"
1527 msgstr ""
1528
1529 #: ../../../src/SDLInputState.cpp:652
1530 msgid "LCtrl"
1531 msgstr ""
1532
1533 #: ../../../src/SDLInputState.cpp:654
1534 msgid "LShft"
1535 msgstr ""
1536
1537 #: ../../../src/SDLInputState.cpp:655
1538 msgid "Num"
1539 msgstr ""
1540
1541 #: ../../../src/SDLInputState.cpp:656
1542 msgid "PgDn"
1543 msgstr ""
1544
1545 #: ../../../src/SDLInputState.cpp:657
1546 msgid "PgUp"
1547 msgstr ""
1548
1549 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1550 msgid "Pause"
1551 msgstr ""
1552
1553 #: ../../../src/SDLInputState.cpp:659
1554 msgid "Print"
1555 msgstr ""
1556
1557 #: ../../../src/SDLInputState.cpp:660
1558 msgid "RAlt"
1559 msgstr ""
1560
1561 #: ../../../src/SDLInputState.cpp:661
1562 msgid "RCtrl"
1563 msgstr ""
1564
1565 #: ../../../src/SDLInputState.cpp:662
1566 msgid "Ret"
1567 msgstr ""
1568
1569 #: ../../../src/SDLInputState.cpp:664
1570 msgid "RShft"
1571 msgstr ""
1572
1573 #: ../../../src/SDLInputState.cpp:665
1574 msgid "SLock"
1575 msgstr ""
1576
1577 #: ../../../src/SDLInputState.cpp:666
1578 msgid "Spc"
1579 msgstr ""
1580
1581 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1582 msgid "Tab"
1583 msgstr ""
1584
1585 #: ../../../src/SDLInputState.cpp:673
1586 msgid "Backspace"
1587 msgstr ""
1588
1589 #: ../../../src/SDLInputState.cpp:674
1590 msgid "CapsLock"
1591 msgstr ""
1592
1593 #: ../../../src/SDLInputState.cpp:678
1594 msgid "Escape"
1595 msgstr ""
1596
1597 #: ../../../src/SDLInputState.cpp:680
1598 msgid "Insert"
1599 msgstr ""
1600
1601 #: ../../../src/SDLInputState.cpp:681
1602 msgid "Left Alt"
1603 msgstr ""
1604
1605 #: ../../../src/SDLInputState.cpp:682
1606 msgid "Left Ctrl"
1607 msgstr ""
1608
1609 #: ../../../src/SDLInputState.cpp:684
1610 msgid "Left Shift"
1611 msgstr ""
1612
1613 #: ../../../src/SDLInputState.cpp:685
1614 msgid "NumLock"
1615 msgstr ""
1616
1617 #: ../../../src/SDLInputState.cpp:686
1618 msgid "PageDown"
1619 msgstr ""
1620
1621 #: ../../../src/SDLInputState.cpp:687
1622 msgid "PageUp"
1623 msgstr ""
1624
1625 #: ../../../src/SDLInputState.cpp:689
1626 msgid "PrintScreen"
1627 msgstr ""
1628
1629 #: ../../../src/SDLInputState.cpp:690
1630 msgid "Right Alt"
1631 msgstr ""
1632
1633 #: ../../../src/SDLInputState.cpp:691
1634 msgid "Right Ctrl"
1635 msgstr ""
1636
1637 #: ../../../src/SDLInputState.cpp:692
1638 msgid "Return"
1639 msgstr ""
1640
1641 #: ../../../src/SDLInputState.cpp:694
1642 msgid "Right Shift"
1643 msgstr ""
1644
1645 #: ../../../src/SDLInputState.cpp:695
1646 msgid "ScrollLock"
1647 msgstr ""
1648
1649 #: ../../../src/SDLInputState.cpp:696
1650 msgid "Space"
1651 msgstr ""
1652
1653 #: ../../../src/SDLInputState.cpp:710
1654 #, c-format
1655 msgid "M%d"
1656 msgstr ""
1657
1658 #: ../../../src/SDLInputState.cpp:716
1659 #, c-format
1660 msgid "Mouse %d"
1661 msgstr ""
1662
1663 #: ../../../src/SDLInputState.cpp:726
1664 #, c-format
1665 msgid "JX%d-"
1666 msgstr ""
1667
1668 #: ../../../src/SDLInputState.cpp:728
1669 #, c-format
1670 msgid "Axis %d -"
1671 msgstr ""
1672
1673 #: ../../../src/SDLInputState.cpp:732
1674 #, c-format
1675 msgid "JX%d+"
1676 msgstr ""
1677
1678 #: ../../../src/SDLInputState.cpp:734
1679 #, c-format
1680 msgid "Axis %d +"
1681 msgstr ""
1682
1683 #: ../../../src/SDLInputState.cpp:739
1684 #, c-format
1685 msgid "JB%d"
1686 msgstr ""
1687
1688 #: ../../../src/SDLInputState.cpp:741
1689 #, c-format
1690 msgid "Button %d"
1691 msgstr ""
1692
1693 #: ../../../src/SDLInputState.cpp:788
1694 msgid "Touch control D-Pad"
1695 msgstr ""
1696
1697 #: ../../../src/SDLInputState.cpp:812
1698 msgid "Touch control buttons"
1699 msgstr ""
1700
1701 #: ../../../src/SDLInputState.cpp:827
1702 msgid "Tap"
1703 msgstr ""
1704
1705 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1706 #, c-format
1707 msgid "Can not bind: %s"
1708 msgstr ""
1709
1710 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1711 #: ../../../src/SDLInputState.cpp:901
1712 #, c-format
1713 msgid "'%s' is no longer bound to:"
1714 msgstr ""
1715
1716 #: ../../../src/Stats.cpp:38
1717 msgid "Max HP"
1718 msgstr ""
1719
1720 #: ../../../src/Stats.cpp:39
1721 msgid "Total amount of HP."
1722 msgstr ""
1723
1724 #: ../../../src/Stats.cpp:43
1725 msgid "HP Regen"
1726 msgstr ""
1727
1728 #: ../../../src/Stats.cpp:44
1729 msgid "Ticks of HP regen per minute."
1730 msgstr ""
1731
1732 #: ../../../src/Stats.cpp:48
1733 msgid "Max MP"
1734 msgstr ""
1735
1736 #: ../../../src/Stats.cpp:49
1737 msgid "Total amount of MP."
1738 msgstr ""
1739
1740 #: ../../../src/Stats.cpp:53
1741 msgid "MP Regen"
1742 msgstr ""
1743
1744 #: ../../../src/Stats.cpp:54
1745 msgid "Ticks of MP regen per minute."
1746 msgstr ""
1747
1748 #: ../../../src/Stats.cpp:58
1749 msgid "Accuracy"
1750 msgstr ""
1751
1752 #: ../../../src/Stats.cpp:59
1753 msgid ""
1754 "Accuracy rating. The enemy's Avoidance rating is subtracted from this value "
1755 "to calculate your likeliness to land a direct hit."
1756 msgstr ""
1757
1758 #: ../../../src/Stats.cpp:63
1759 msgid "Avoidance"
1760 msgstr ""
1761
1762 #: ../../../src/Stats.cpp:64
1763 msgid ""
1764 "Avoidance rating. This value is subtracted from the enemy's Accuracy rating "
1765 "to calculate their likeliness to land a direct hit."
1766 msgstr ""
1767
1768 #: ../../../src/Stats.cpp:68
1769 msgid "Absorb Min"
1770 msgstr ""
1771
1772 #: ../../../src/Stats.cpp:69 ../../../src/Stats.cpp:74
1773 msgid "Reduces the amount of damage taken."
1774 msgstr ""
1775
1776 #: ../../../src/Stats.cpp:73
1777 msgid "Absorb Max"
1778 msgstr ""
1779
1780 #: ../../../src/Stats.cpp:78
1781 msgid "Critical Hit Chance"
1782 msgstr ""
1783
1784 #: ../../../src/Stats.cpp:79
1785 msgid "Chance for an attack to do extra damage."
1786 msgstr ""
1787
1788 #: ../../../src/Stats.cpp:83
1789 msgid "Bonus XP"
1790 msgstr ""
1791
1792 #: ../../../src/Stats.cpp:84
1793 msgid "Increases the XP gained per kill."
1794 msgstr ""
1795
1796 #: ../../../src/Stats.cpp:88
1797 #, c-format
1798 msgid "Bonus %s"
1799 msgstr ""
1800
1801 #: ../../../src/Stats.cpp:89
1802 #, c-format
1803 msgid "Increases the %s found per drop."
1804 msgstr ""
1805
1806 #: ../../../src/Stats.cpp:93
1807 msgid "Item Find Chance"
1808 msgstr ""
1809
1810 #: ../../../src/Stats.cpp:94
1811 msgid "Increases the chance that an enemy will drop an item."
1812 msgstr ""
1813
1814 #: ../../../src/Stats.cpp:98
1815 msgid "Stealth"
1816 msgstr ""
1817
1818 #: ../../../src/Stats.cpp:99
1819 msgid "Increases your ability to move undetected."
1820 msgstr ""
1821
1822 #: ../../../src/Stats.cpp:103
1823 msgid "Poise"
1824 msgstr ""
1825
1826 #: ../../../src/Stats.cpp:104
1827 msgid "Reduces your chance of stumbling when hit."
1828 msgstr ""
1829
1830 #: ../../../src/Stats.cpp:108
1831 msgid "Missile Reflect Chance"
1832 msgstr ""
1833
1834 #: ../../../src/Stats.cpp:109
1835 msgid "Increases your chance of reflecting missiles back at enemies."
1836 msgstr ""
1837
1838 #: ../../../src/Stats.cpp:113
1839 msgid "Damage Reflection"
1840 msgstr ""
1841
1842 #: ../../../src/Stats.cpp:114
1843 msgid "Deals a percentage of damage taken back to the attacker."
1844 msgstr ""
1845
1846 #: ../../../src/Stats.cpp:118
1847 msgid "HP Steal"
1848 msgstr ""
1849
1850 #: ../../../src/Stats.cpp:119
1851 msgid "Percentage of HP stolen per hit."
1852 msgstr ""
1853
1854 #: ../../../src/Stats.cpp:123
1855 msgid "MP Steal"
1856 msgstr ""
1857
1858 #: ../../../src/Stats.cpp:124
1859 msgid "Percentage of MP stolen per hit."
1860 msgstr ""
1861
1862 #: ../../../src/Stats.cpp:128
1863 msgid "Base HP"
1864 msgstr ""
1865
1866 #: ../../../src/Stats.cpp:133
1867 msgid "Base MP"
1868 msgstr ""
1869
1870 #: ../../../src/Utils.cpp:346
1871 msgid "k"
1872 msgstr ""
1873
1874 #: ../../../src/Utils.cpp:616
1875 #, c-format
1876 msgid "%s second"
1877 msgstr ""
1878
1879 #: ../../../src/Utils.cpp:619
1880 #, c-format
1881 msgid "%s seconds"
1882 msgstr ""
1883
1884 #: ../../../src/Version.cpp:139
1885 msgid "or newer"
1886 msgstr ""
1887
1888 #: ../../../src/Version.cpp:142
1889 msgid "or older"
1890 msgstr ""
1010 msgstr ""
1111 "Project-Id-Version: PACKAGE VERSION\n"
1212 "Report-Msgid-Bugs-To: \n"
13 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
13 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1414 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1515 "Last-Translator: Justin Jacobs <jajdorkster@gmail.com>, 2018\n"
1616 "Language-Team: Finnish (https://www.transifex.com/flareorg/teams/84925/fi/)\n"
2020 "Language: fi\n"
2121 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
2222
23 #: ../../../src/Avatar.cpp:367
23 #: ../../../src/Avatar.cpp:387
24 msgid "Your health is low!"
25 msgstr ""
26
27 #: ../../../src/Avatar.cpp:419
2428 #, c-format
2529 msgid "Congratulations, you have reached level %d!"
2630 msgstr "Onnittelut, olet päässyt tasolle %d!"
2731
28 #: ../../../src/Avatar.cpp:369
29 msgid "You may increase one attribute through the Character Menu."
30 msgstr "Voit nostaa yhtä kyvyistäsi hahmovalikossa."
31
32 #: ../../../src/Avatar.cpp:583
32 #: ../../../src/Avatar.cpp:421
33 msgid "You may increase one or more attributes through the Character Menu."
34 msgstr ""
35
36 #: ../../../src/Avatar.cpp:425
37 msgid "You may unlock one or more abilities through the Powers Menu."
38 msgstr ""
39
40 #: ../../../src/Avatar.cpp:692
3341 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3442 msgstr ""
3543
36 #: ../../../src/Avatar.cpp:589
44 #: ../../../src/Avatar.cpp:698
3745 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
3846 msgstr ""
3947
40 #: ../../../src/Avatar.cpp:839
48 #: ../../../src/Avatar.cpp:949
4149 msgid "Transformation expired. You have been moved back to a safe place."
4250 msgstr ""
4351
4654 msgid "%d %s removed."
4755 msgstr ""
4856
49 #: ../../../src/CampaignManager.cpp:162
57 #: ../../../src/CampaignManager.cpp:165
58 #, c-format
59 msgid "%s x%d removed."
60 msgstr ""
61
62 #: ../../../src/CampaignManager.cpp:167
5063 #, c-format
5164 msgid "%s removed."
5265 msgstr ""
5366
54 #: ../../../src/CampaignManager.cpp:175
67 #: ../../../src/CampaignManager.cpp:180
5568 #, c-format
5669 msgid "You receive %s."
5770 msgstr "Hallussasi on nyt %s."
5871
59 #: ../../../src/CampaignManager.cpp:177
72 #: ../../../src/CampaignManager.cpp:182
6073 #, c-format
6174 msgid "You receive %s x%d."
6275 msgstr "Saat %s x%d"
6376
64 #: ../../../src/CampaignManager.cpp:186
77 #: ../../../src/CampaignManager.cpp:191
6578 #, c-format
6679 msgid "You receive %d %s."
6780 msgstr "Saat %d %s"
6881
69 #: ../../../src/CampaignManager.cpp:195
82 #: ../../../src/CampaignManager.cpp:200
7083 #, c-format
7184 msgid "You receive %d XP."
7285 msgstr "Saat %d kokemusta."
7386
74 #: ../../../src/CampaignManager.cpp:201
87 #: ../../../src/CampaignManager.cpp:206
7588 msgid "HP restored."
7689 msgstr "Osumapisteet palautuneet."
7790
78 #: ../../../src/CampaignManager.cpp:205
91 #: ../../../src/CampaignManager.cpp:210
7992 msgid "MP restored."
8093 msgstr "Mentaalipisteet palautuneet."
8194
82 #: ../../../src/CampaignManager.cpp:210
95 #: ../../../src/CampaignManager.cpp:215
8396 msgid "HP and MP restored."
8497 msgstr "OP ja MP palautuneet."
8598
86 #: ../../../src/CampaignManager.cpp:214
99 #: ../../../src/CampaignManager.cpp:219
87100 msgid "Negative effects removed."
88101 msgstr "Haitalliset vaikutukset poistuneet."
89102
90 #: ../../../src/CampaignManager.cpp:220
103 #: ../../../src/CampaignManager.cpp:225
91104 msgid "HP and MP restored, negative effects removed"
92105 msgstr "OP ja MP palautuneet ja haitalliset vaikutukset poistuneet."
93106
105118 "The default renderer that is often faster than the SDL software renderer."
106119 msgstr ""
107120
108 #: ../../../src/EngineSettings.cpp:561
121 #: ../../../src/EngineSettings.cpp:572
109122 msgid "Adventurer"
110123 msgstr "Seikkailija"
111124
112 #: ../../../src/Entity.cpp:511
125 #: ../../../src/Entity.cpp:522
113126 msgid "miss"
114127 msgstr "ohi"
115128
116 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
117 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
129 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
130 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
118131 #, c-format
119132 msgid "+%d HP"
120133 msgstr "+%d OP"
121134
122 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
123 #: ../../../src/StatBlock.cpp:822
135 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
136 #: ../../../src/StatBlock.cpp:830
124137 #, c-format
125138 msgid "+%d MP"
126139 msgstr "+%d MP"
127140
128 #: ../../../src/EventManager.cpp:738
141 #: ../../../src/EventManager.cpp:782
129142 msgid "Unknown destination"
130143 msgstr "Tuntematon määränpää"
131144
132 #: ../../../src/GameStateConfigBase.cpp:89
133 #: ../../../src/GameStateConfigBase.cpp:110
145 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
146 msgid "Loading..."
147 msgstr "Ladataan..."
148
149 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
150 msgid "Delete Save"
151 msgstr "Poista tallennus"
152
153 #: ../../../src/GameStateLoad.cpp:90
154 msgid "Delete this save?"
155 msgstr "Poistetaanko tallennus?"
156
157 #: ../../../src/GameStateLoad.cpp:92
158 msgid "Exit to Title"
159 msgstr "Palaa päävalikkoon"
160
161 #: ../../../src/GameStateLoad.cpp:95
162 msgid "New Game"
163 msgstr "Uusi peli"
164
165 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
166 msgid "Choose a Slot"
167 msgstr "Valitse ura"
168
169 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
170 msgid "Enable a story mod to continue"
171 msgstr "Salli tarinamodin jatkaa"
172
173 #: ../../../src/GameStateLoad.cpp:597
174 msgid "Load Game"
175 msgstr "Lataa peli"
176
177 #: ../../../src/GameStateLoad.cpp:706
178 msgid "Entering game world..."
179 msgstr "Saavutaan pelimaailmaan..."
180
181 #: ../../../src/GameStateLoad.cpp:709
182 msgid "Loading saved game..."
183 msgstr "Ladataan tallennettu peli..."
184
185 #: ../../../src/GameStateLoad.cpp:742
186 msgid "Invalid save"
187 msgstr ""
188
189 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
190 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
191 #: ../../../src/MenuPowers.cpp:1543
192 #, c-format
193 msgid "Level %d"
194 msgstr "Taso %d"
195
196 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
197 #: ../../../src/MenuConfig.cpp:244
198 msgid "Cancel"
199 msgstr "Peru"
200
201 #: ../../../src/GameStateNew.cpp:68
202 msgid "Create"
203 msgstr "Aloita"
204
205 #: ../../../src/GameStateNew.cpp:76
206 msgid "Randomize"
207 msgstr ""
208
209 #: ../../../src/GameStateNew.cpp:92
210 msgid "Choose a Portrait"
211 msgstr "Valitse muotokuva"
212
213 #: ../../../src/GameStateNew.cpp:96
214 msgid "Choose a Name"
215 msgstr "Valitse nimi"
216
217 #: ../../../src/GameStateNew.cpp:100
218 msgid "Permadeath?"
219 msgstr "Lopullinen kuolema?"
220
221 #: ../../../src/GameStateNew.cpp:104
222 msgid "Choose a Class"
223 msgstr "Valitse luokka"
224
225 #: ../../../src/GameStateTitle.cpp:107
226 msgid "Play Game"
227 msgstr "Pelaa"
228
229 #: ../../../src/GameStateTitle.cpp:110
230 msgid "Enable a core mod to continue"
231 msgstr "Salli ydinmodin jatkaa"
232
233 #: ../../../src/GameStateTitle.cpp:114
234 msgid "Configuration"
235 msgstr "Asetukset"
236
237 #: ../../../src/GameStateTitle.cpp:117
238 msgid "Credits"
239 msgstr ""
240
241 #: ../../../src/GameStateTitle.cpp:120
242 msgid "Exit Game"
243 msgstr "Lopeta peli"
244
245 #: ../../../src/InputState.cpp:407
246 msgid "Accept"
247 msgstr "Hyväksy"
248
249 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
250 #: ../../../src/SDLInputState.cpp:698
251 msgid "Up"
252 msgstr "Ylös"
253
254 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
255 #: ../../../src/SDLInputState.cpp:676
256 msgid "Down"
257 msgstr "Alas"
258
259 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
260 #: ../../../src/SDLInputState.cpp:683
261 msgid "Left"
262 msgstr "Vasen"
263
264 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
265 #: ../../../src/SDLInputState.cpp:693
266 msgid "Right"
267 msgstr "Oikea"
268
269 #: ../../../src/InputState.cpp:412
270 msgid "Bar1"
271 msgstr ""
272
273 #: ../../../src/InputState.cpp:413
274 msgid "Bar2"
275 msgstr ""
276
277 #: ../../../src/InputState.cpp:414
278 msgid "Bar3"
279 msgstr ""
280
281 #: ../../../src/InputState.cpp:415
282 msgid "Bar4"
283 msgstr ""
284
285 #: ../../../src/InputState.cpp:416
286 msgid "Bar5"
287 msgstr ""
288
289 #: ../../../src/InputState.cpp:417
290 msgid "Bar6"
291 msgstr ""
292
293 #: ../../../src/InputState.cpp:418
294 msgid "Bar7"
295 msgstr ""
296
297 #: ../../../src/InputState.cpp:419
298 msgid "Bar8"
299 msgstr ""
300
301 #: ../../../src/InputState.cpp:420
302 msgid "Bar9"
303 msgstr ""
304
305 #: ../../../src/InputState.cpp:421
306 msgid "Bar0"
307 msgstr ""
308
309 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
310 #: ../../../src/MenuCharacter.cpp:54
311 msgid "Character"
312 msgstr "Hahmo"
313
314 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
315 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
316 msgid "Inventory"
317 msgstr "Tavaraluettelo"
318
319 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
320 #: ../../../src/MenuPowers.cpp:167
321 msgid "Powers"
322 msgstr "Voimat"
323
324 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
325 #: ../../../src/MenuLog.cpp:72
326 msgid "Log"
327 msgstr "Loki"
328
329 #: ../../../src/InputState.cpp:426
330 msgid "Main1"
331 msgstr ""
332
333 #: ../../../src/InputState.cpp:427
334 msgid "Main2"
335 msgstr ""
336
337 #: ../../../src/InputState.cpp:428
338 msgid "Ctrl"
339 msgstr ""
340
341 #: ../../../src/InputState.cpp:429
342 msgid "Shift"
343 msgstr "Vaihto"
344
345 #: ../../../src/InputState.cpp:430
346 msgid "Alt"
347 msgstr ""
348
349 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
350 msgid "Delete"
351 msgstr ""
352
353 #: ../../../src/InputState.cpp:432
354 msgid "ActionBar Accept"
355 msgstr ""
356
357 #: ../../../src/InputState.cpp:433
358 msgid "ActionBar Left"
359 msgstr ""
360
361 #: ../../../src/InputState.cpp:434
362 msgid "ActionBar Right"
363 msgstr ""
364
365 #: ../../../src/InputState.cpp:435
366 msgid "ActionBar Use"
367 msgstr ""
368
369 #: ../../../src/InputState.cpp:436
370 msgid "Developer Menu"
371 msgstr ""
372
373 #: ../../../src/InputState.cpp:438
374 msgid "Left Mouse"
375 msgstr ""
376
377 #: ../../../src/InputState.cpp:439
378 msgid "Middle Mouse"
379 msgstr ""
380
381 #: ../../../src/InputState.cpp:440
382 msgid "Right Mouse"
383 msgstr ""
384
385 #: ../../../src/InputState.cpp:441
386 msgid "Wheel Up"
387 msgstr ""
388
389 #: ../../../src/InputState.cpp:442
390 msgid "Wheel Down"
391 msgstr ""
392
393 #: ../../../src/InputState.cpp:443
394 msgid "Mouse X1"
395 msgstr ""
396
397 #: ../../../src/InputState.cpp:444
398 msgid "Mouse X2"
399 msgstr ""
400
401 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
402 msgid "Unknown Item"
403 msgstr ""
404
405 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
406 #, c-format
407 msgid "%d%% Speed"
408 msgstr ""
409
410 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
411 #, c-format
412 msgid "%d%% Attack Speed"
413 msgstr ""
414
415 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
416 #: ../../../src/MenuPowers.cpp:832
417 #, c-format
418 msgid "Resistance (%s)"
419 msgstr ""
420
421 #: ../../../src/ItemManager.cpp:714
422 #, c-format
423 msgid "Requires %s"
424 msgstr ""
425
426 #: ../../../src/ItemManager.cpp:763
427 msgid "Quest Item"
428 msgstr ""
429
430 #: ../../../src/ItemManager.cpp:790
431 #, c-format
432 msgid "Quality: %s"
433 msgstr ""
434
435 #: ../../../src/ItemManager.cpp:815
436 #, c-format
437 msgid "Absorb: %d-%d"
438 msgstr "Vaimennus: %d-%d"
439
440 #: ../../../src/ItemManager.cpp:817
441 #, c-format
442 msgid "Absorb: %d"
443 msgstr "Vaimennus: %d"
444
445 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
446 #: ../../../src/MenuPowers.cpp:1133
447 #, c-format
448 msgid "Requires Level %d"
449 msgstr "Vaatii tason %d"
450
451 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
452 #: ../../../src/MenuPowers.cpp:1124
453 #, c-format
454 msgid "Requires %s %d"
455 msgstr ""
456
457 #: ../../../src/ItemManager.cpp:879
458 #, c-format
459 msgid "Requires Class: %s"
460 msgstr ""
461
462 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
463 #, c-format
464 msgid "Buy Price: %d %s"
465 msgstr "Ostohinta: %d kultaa"
466
467 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
468 #, c-format
469 msgid "Buy Price: %d %s each"
470 msgstr "Ostohinta: á %d kultaa"
471
472 #: ../../../src/ItemManager.cpp:916
473 #, c-format
474 msgid "Sell Price: %d %s"
475 msgstr "Myyntihinta: %d kultaa"
476
477 #: ../../../src/ItemManager.cpp:918
478 #, c-format
479 msgid "Sell Price: %d %s each"
480 msgstr "Myyntihinta: á %d kultaa"
481
482 #: ../../../src/ItemManager.cpp:927
483 msgid "Set:"
484 msgstr ""
485
486 #: ../../../src/ItemManager.cpp:934
487 #, c-format
488 msgid "%d items:"
489 msgstr ""
490
491 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
492 #, c-format
493 msgid "Press [%s] to use"
494 msgstr ""
495
496 #: ../../../src/ItemManager.cpp:951
497 #, c-format
498 msgid "Press [%s] to read"
499 msgstr ""
500
501 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
502 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
503 #, c-format
504 msgid "Hotkey: %s"
505 msgstr ""
506
507 #: ../../../src/MenuActionBar.cpp:599
508 msgid "Not enough MP."
509 msgstr ""
510
511 #: ../../../src/MenuActiveEffects.cpp:124
512 #, c-format
513 msgid "x%d"
514 msgstr ""
515
516 #: ../../../src/MenuActiveEffects.cpp:219
517 msgid "Remaining:"
518 msgstr ""
519
520 #: ../../../src/MenuActiveEffects.cpp:225
521 #, c-format
522 msgid "x%d stacks"
523 msgstr ""
524
525 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
526 msgid "Name"
527 msgstr "Nimi"
528
529 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
530 msgid "Level"
531 msgstr "Taso"
532
533 #: ../../../src/MenuCharacter.cpp:310
534 #, c-format
535 msgid "%d unspent stat point"
536 msgstr ""
537
538 #: ../../../src/MenuCharacter.cpp:313
539 #, c-format
540 msgid "%d unspent stat points"
541 msgstr ""
542
543 #: ../../../src/MenuCharacter.cpp:355
544 #, c-format
545 msgid "Reduces the damage taken from \"%s\" elemental attacks."
546 msgstr ""
547
548 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
549 #, c-format
550 msgid "XP: %d"
551 msgstr "Kokemus: %d"
552
553 #: ../../../src/MenuCharacter.cpp:367
554 #, c-format
555 msgid "Next: %d"
556 msgstr "Seuraava: %d"
557
558 #: ../../../src/MenuCharacter.cpp:373
559 #, c-format
560 msgid "base (%d), bonus (%d)"
561 msgstr "perus (%d), lisä (%d)"
562
563 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
564 msgid "Related stats:"
565 msgstr ""
566
567 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
568 #, c-format
569 msgid "Each level grants %d."
570 msgstr ""
571
572 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
573 #, c-format
574 msgid "Each point of %s grants %d."
575 msgstr ""
576
577 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
578 msgid "Clear"
579 msgstr ""
580
581 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
582 msgid "Assign:"
583 msgstr ""
584
585 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
134586 msgid "Defaults"
135587 msgstr "Oletukset"
136588
137 #: ../../../src/GameStateConfigBase.cpp:89
589 #: ../../../src/MenuConfig.cpp:123
138590 msgid "Reset ALL settings?"
139591 msgstr "Palauta KAIKKI asetukset?"
140592
141 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
593 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
142594 msgid "OK"
143595 msgstr "OK"
144596
145 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
146 #: ../../../src/InputState.cpp:401
147 msgid "Cancel"
148 msgstr "Peru"
149
150 #: ../../../src/GameStateConfigBase.cpp:160
151 #: ../../../src/GameStateConfigDesktop.cpp:130
597 #: ../../../src/MenuConfig.cpp:246
598 msgid "Continue"
599 msgstr ""
600
601 #: ../../../src/MenuConfig.cpp:248
602 msgid "Save Game"
603 msgstr ""
604
605 #: ../../../src/MenuConfig.cpp:291
606 msgid "Default"
607 msgstr ""
608
609 #: ../../../src/MenuConfig.cpp:291
610 msgid ""
611 "Show all loot tooltips, except for those that would be obscured by the "
612 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
613 msgstr ""
614
615 #: ../../../src/MenuConfig.cpp:292
616 msgid "Show all"
617 msgstr ""
618
619 #: ../../../src/MenuConfig.cpp:292
620 msgid ""
621 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
622 msgstr ""
623
624 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
625 msgid "Hidden"
626 msgstr ""
627
628 #: ../../../src/MenuConfig.cpp:293
629 msgid ""
630 "Always hide loot tooltips, except for when a piece of loot is hovered with "
631 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
632 msgstr ""
633
634 #: ../../../src/MenuConfig.cpp:296
635 msgid "Visible"
636 msgstr ""
637
638 #: ../../../src/MenuConfig.cpp:297
639 msgid "Visible (2x zoom)"
640 msgstr ""
641
642 #: ../../../src/MenuConfig.cpp:301
643 msgid ""
644 "Controls the type of warning to be activated when the player is below the "
645 "low health threshold."
646 msgstr ""
647
648 #: ../../../src/MenuConfig.cpp:302
649 msgid "- Display a message"
650 msgstr ""
651
652 #: ../../../src/MenuConfig.cpp:303
653 msgid "- Play a sound"
654 msgstr ""
655
656 #: ../../../src/MenuConfig.cpp:304
657 msgid "- Change the cursor"
658 msgstr ""
659
660 #: ../../../src/MenuConfig.cpp:306
661 msgid "Disabled"
662 msgstr ""
663
664 #: ../../../src/MenuConfig.cpp:307
665 msgid "All"
666 msgstr ""
667
668 #: ../../../src/MenuConfig.cpp:308
669 msgid "Message & Cursor"
670 msgstr ""
671
672 #: ../../../src/MenuConfig.cpp:309
673 msgid "Message & Sound"
674 msgstr ""
675
676 #: ../../../src/MenuConfig.cpp:310
677 msgid "Sound & Cursor"
678 msgstr ""
679
680 #: ../../../src/MenuConfig.cpp:311
681 msgid "Message"
682 msgstr ""
683
684 #: ../../../src/MenuConfig.cpp:312
685 msgid "Cursor"
686 msgstr ""
687
688 #: ../../../src/MenuConfig.cpp:313
689 msgid "Sound"
690 msgstr ""
691
692 #: ../../../src/MenuConfig.cpp:319
693 msgid ""
694 "When the player's health drops below the given threshold, the low health "
695 "notifications are triggered if one or more of them is enabled."
696 msgstr ""
697
698 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
699 msgid "Exit"
700 msgstr "Poistu"
701
702 #: ../../../src/MenuConfig.cpp:333
703 msgid "Video"
704 msgstr "Video"
705
706 #: ../../../src/MenuConfig.cpp:334
152707 msgid "Audio"
153708 msgstr "Audio"
154709
155 #: ../../../src/GameStateConfigBase.cpp:161
156 #: ../../../src/GameStateConfigDesktop.cpp:131
710 #: ../../../src/MenuConfig.cpp:335
157711 msgid "Interface"
158712 msgstr "Käyttöliittymä"
159713
160 #: ../../../src/GameStateConfigBase.cpp:162
161 #: ../../../src/GameStateConfigDesktop.cpp:134
714 #: ../../../src/MenuConfig.cpp:336
715 msgid "Input"
716 msgstr "Ohjaus"
717
718 #: ../../../src/MenuConfig.cpp:337
719 msgid "Keybindings"
720 msgstr "Näppäimet"
721
722 #: ../../../src/MenuConfig.cpp:338
162723 msgid "Mods"
163724 msgstr "Modit"
164725
165 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
726 #: ../../../src/MenuConfig.cpp:350
727 msgid "Paused"
728 msgstr ""
729
730 #: ../../../src/MenuConfig.cpp:353
731 msgid "Time Played"
732 msgstr ""
733
734 #: ../../../src/MenuConfig.cpp:359
735 msgid "Renderer"
736 msgstr ""
737
738 #: ../../../src/MenuConfig.cpp:360
739 msgid "Full Screen Mode"
740 msgstr "Täysi ruutu"
741
742 #: ../../../src/MenuConfig.cpp:361
743 msgid "Hardware surfaces"
744 msgstr "Hardware surfaces"
745
746 #: ../../../src/MenuConfig.cpp:362
747 msgid "V-Sync"
748 msgstr ""
749
750 #: ../../../src/MenuConfig.cpp:363
751 msgid "Texture Filtering"
752 msgstr ""
753
754 #: ../../../src/MenuConfig.cpp:364
755 msgid "DPI scaling"
756 msgstr ""
757
758 #: ../../../src/MenuConfig.cpp:365
759 msgid "Parallax Layers"
760 msgstr ""
761
762 #: ../../../src/MenuConfig.cpp:366
763 msgid "Allow changing gamma"
764 msgstr "Salli gamma-muutokset"
765
766 #: ../../../src/MenuConfig.cpp:367
767 msgid "Gamma"
768 msgstr "Gamma"
769
770 #: ../../../src/MenuConfig.cpp:369
771 msgid "Sound Volume"
772 msgstr "äänenvoimakkuus"
773
774 #: ../../../src/MenuConfig.cpp:370
166775 msgid "Music Volume"
167776 msgstr "Musiikin voimakkuus"
168777
169 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
170 msgid "Sound Volume"
171 msgstr "äänenvoimakkuus"
172
173 #: ../../../src/GameStateConfigBase.cpp:257
778 #: ../../../src/MenuConfig.cpp:372
174779 msgid "Language"
175780 msgstr "Kieli"
176781
177 #: ../../../src/GameStateConfigBase.cpp:266
782 #: ../../../src/MenuConfig.cpp:373
178783 msgid "Show FPS"
179784 msgstr "Näytä päivitystaso (FPS)"
180785
181 #: ../../../src/GameStateConfigBase.cpp:270
786 #: ../../../src/MenuConfig.cpp:374
787 msgid "Hardware mouse cursor"
788 msgstr ""
789
790 #: ../../../src/MenuConfig.cpp:375
182791 msgid "Colorblind Mode"
183792 msgstr ""
184793
185 #: ../../../src/GameStateConfigBase.cpp:274
186 msgid "Hardware mouse cursor"
187 msgstr ""
188
189 #: ../../../src/GameStateConfigBase.cpp:278
794 #: ../../../src/MenuConfig.cpp:376
190795 msgid "Developer Mode"
191796 msgstr ""
192797
193 #: ../../../src/GameStateConfigBase.cpp:282
798 #: ../../../src/MenuConfig.cpp:377
194799 msgid "Subtitles"
195800 msgstr ""
196801
197 #: ../../../src/GameStateConfigBase.cpp:286
198 msgid "Active Mods"
199 msgstr "Käytössäolevat modit"
200
201 #: ../../../src/GameStateConfigBase.cpp:295
202 msgid "Available Mods"
203 msgstr "Saatavilla olevat modit"
204
205 #: ../../../src/GameStateConfigBase.cpp:314
206 msgid "<< Disable"
207 msgstr "<< Poista käytöstä"
208
209 #: ../../../src/GameStateConfigBase.cpp:320
210 msgid "Enable >>"
211 msgstr "Ota käyttöön >>"
212
213 #: ../../../src/GameStateConfigBase.cpp:873
214 msgid "Version:"
215 msgstr ""
216
217 #: ../../../src/GameStateConfigBase.cpp:878
218 msgid "Game:"
219 msgstr ""
220
221 #: ../../../src/GameStateConfigBase.cpp:883
222 msgid "Engine version:"
223 msgstr ""
224
225 #: ../../../src/GameStateConfigBase.cpp:891
226 msgid "Requires mods:"
227 msgstr ""
228
229 #: ../../../src/GameStateConfigDesktop.cpp:83
230 #: ../../../src/GameStateConfigDesktop.cpp:751
231 msgid "Clear"
232 msgstr ""
233
234 #: ../../../src/GameStateConfigDesktop.cpp:83
235 #: ../../../src/GameStateConfigDesktop.cpp:749
236 msgid "Assign:"
237 msgstr ""
238
239 #: ../../../src/GameStateConfigDesktop.cpp:128
240 msgid "Video"
241 msgstr "Video"
242
243 #: ../../../src/GameStateConfigDesktop.cpp:132
244 msgid "Input"
245 msgstr "Ohjaus"
246
247 #: ../../../src/GameStateConfigDesktop.cpp:133
248 msgid "Keybindings"
249 msgstr "Näppäimet"
250
251 #: ../../../src/GameStateConfigDesktop.cpp:188
802 #: ../../../src/MenuConfig.cpp:378
803 msgid "Loot tooltip visibility"
804 msgstr ""
805
806 #: ../../../src/MenuConfig.cpp:379
807 msgid "Mini-map mode"
808 msgstr ""
809
810 #: ../../../src/MenuConfig.cpp:380
811 msgid "Always show stat bar labels"
812 msgstr ""
813
814 #: ../../../src/MenuConfig.cpp:381
815 msgid "Allow stat bar auto-hiding"
816 msgstr ""
817
818 #: ../../../src/MenuConfig.cpp:382
819 msgid "Show combat text"
820 msgstr "Näytä taisteluteksti"
821
822 #: ../../../src/MenuConfig.cpp:383
823 msgid "Automatically equip items"
824 msgstr ""
825
826 #: ../../../src/MenuConfig.cpp:384
827 msgid "Show hidden entity markers"
828 msgstr ""
829
830 #: ../../../src/MenuConfig.cpp:385
831 msgid "Low health notification"
832 msgstr ""
833
834 #: ../../../src/MenuConfig.cpp:386
835 msgid "Low health threshold"
836 msgstr ""
837
838 #: ../../../src/MenuConfig.cpp:389
839 msgid "Joystick"
840 msgstr "Peliohjain"
841
842 #: ../../../src/MenuConfig.cpp:390
843 msgid "Move hero using mouse"
844 msgstr "Liikuta sankaria hiirellä"
845
846 #: ../../../src/MenuConfig.cpp:391
847 msgid "Mouse aim"
848 msgstr "Hiiritähtäys"
849
850 #: ../../../src/MenuConfig.cpp:392
851 msgid "Do not use mouse"
852 msgstr ""
853
854 #: ../../../src/MenuConfig.cpp:393
855 msgid "Swap mouse movement button"
856 msgstr ""
857
858 #: ../../../src/MenuConfig.cpp:394
859 msgid "Attack with mouse movement"
860 msgstr ""
861
862 #: ../../../src/MenuConfig.cpp:395
863 msgid "Joystick Deadzone"
864 msgstr ""
865
866 #: ../../../src/MenuConfig.cpp:405
867 #, c-format
868 msgid "Primary binding: %s"
869 msgstr ""
870
871 #: ../../../src/MenuConfig.cpp:406
872 #, c-format
873 msgid "Alternate binding: %s"
874 msgstr ""
875
876 #: ../../../src/MenuConfig.cpp:407
877 #, c-format
878 msgid "Joystick binding: %s"
879 msgstr ""
880
881 #: ../../../src/MenuConfig.cpp:508
252882 msgid ""
253883 "Will try to store surfaces in video memory versus system memory. The effect "
254884 "this has on performance depends on the renderer."
255885 msgstr ""
256886
257 #: ../../../src/GameStateConfigDesktop.cpp:189
887 #: ../../../src/MenuConfig.cpp:509
258888 msgid ""
259889 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
260890 "windowed mode or input lag."
261891 msgstr ""
262892
263 #: ../../../src/GameStateConfigDesktop.cpp:190
893 #: ../../../src/MenuConfig.cpp:510
264894 msgid ""
265895 "When enabled, this uses the screen DPI in addition to the window dimensions "
266896 "to scale the rendering resolution. Otherwise, only the window dimensions are"
267897 " used."
268898 msgstr ""
269899
270 #: ../../../src/GameStateConfigDesktop.cpp:191
900 #: ../../../src/MenuConfig.cpp:511
271901 msgid ""
272902 "This enables parallax (non-tile) layers. Disabling this setting can improve "
273903 "performance in some cases."
274904 msgstr ""
275905
276 #: ../../../src/GameStateConfigDesktop.cpp:192
277 msgid "Experimental"
278 msgstr "Kokeellinen"
279
280 #: ../../../src/GameStateConfigDesktop.cpp:193
281 msgid "For handheld devices"
282 msgstr ""
283
284 #: ../../../src/GameStateConfigDesktop.cpp:211
285 msgid "Renderer"
286 msgstr ""
287
288 #: ../../../src/GameStateConfigDesktop.cpp:227
289 msgid "Full Screen Mode"
290 msgstr "Täysi ruutu"
291
292 #: ../../../src/GameStateConfigDesktop.cpp:231
293 msgid "Move hero using mouse"
294 msgstr "Liikuta sankaria hiirellä"
295
296 #: ../../../src/GameStateConfigDesktop.cpp:235
297 msgid "Hardware surfaces"
298 msgstr "Hardware surfaces"
299
300 #: ../../../src/GameStateConfigDesktop.cpp:239
301 msgid "V-Sync"
302 msgstr ""
303
304 #: ../../../src/GameStateConfigDesktop.cpp:243
305 msgid "Texture Filtering"
306 msgstr ""
307
308 #: ../../../src/GameStateConfigDesktop.cpp:247
309 msgid "DPI scaling"
310 msgstr ""
311
312 #: ../../../src/GameStateConfigDesktop.cpp:251
313 msgid "Parallax Layers"
314 msgstr ""
315
316 #: ../../../src/GameStateConfigDesktop.cpp:255
317 msgid "Allow changing gamma"
318 msgstr "Salli gamma-muutokset"
319
320 #: ../../../src/GameStateConfigDesktop.cpp:259
321 msgid "Gamma"
322 msgstr "Gamma"
323
324 #: ../../../src/GameStateConfigDesktop.cpp:263
325 msgid "Use joystick"
326 msgstr "Käytä peliohjainta"
327
328 #: ../../../src/GameStateConfigDesktop.cpp:267
329 msgid "Joystick"
330 msgstr "Peliohjain"
331
332 #: ../../../src/GameStateConfigDesktop.cpp:283
333 msgid "Mouse aim"
334 msgstr "Hiiritähtäys"
335
336 #: ../../../src/GameStateConfigDesktop.cpp:287
337 msgid "Do not use mouse"
338 msgstr ""
339
340 #: ../../../src/GameStateConfigDesktop.cpp:291
341 msgid "Joystick Deadzone"
342 msgstr ""
343
344 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
345 msgid "Loading..."
346 msgstr "Ladataan..."
347
348 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
349 msgid "Delete Save"
350 msgstr "Poista tallennus"
351
352 #: ../../../src/GameStateLoad.cpp:88
353 msgid "Delete this save?"
354 msgstr "Poistetaanko tallennus?"
355
356 #: ../../../src/GameStateLoad.cpp:90
357 msgid "Exit to Title"
358 msgstr "Palaa päävalikkoon"
359
360 #: ../../../src/GameStateLoad.cpp:93
361 msgid "New Game"
362 msgstr "Uusi peli"
363
364 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
365 msgid "Choose a Slot"
366 msgstr "Valitse ura"
367
368 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
369 msgid "Enable a story mod to continue"
370 msgstr "Salli tarinamodin jatkaa"
371
372 #: ../../../src/GameStateLoad.cpp:589
373 msgid "Load Game"
374 msgstr "Lataa peli"
375
376 #: ../../../src/GameStateLoad.cpp:695
377 msgid "Entering game world..."
378 msgstr "Saavutaan pelimaailmaan..."
379
380 #: ../../../src/GameStateLoad.cpp:698
381 msgid "Loading saved game..."
382 msgstr "Ladataan tallennettu peli..."
383
384 #: ../../../src/GameStateLoad.cpp:731
385 msgid "Invalid save"
386 msgstr ""
387
388 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
389 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
390 #: ../../../src/MenuPowers.cpp:1542
391 #, c-format
392 msgid "Level %d"
393 msgstr "Taso %d"
394
395 #: ../../../src/GameStateNew.cpp:68
396 msgid "Create"
397 msgstr "Aloita"
398
399 #: ../../../src/GameStateNew.cpp:76
400 msgid "Randomize"
401 msgstr ""
402
403 #: ../../../src/GameStateNew.cpp:92
404 msgid "Choose a Portrait"
405 msgstr "Valitse muotokuva"
406
407 #: ../../../src/GameStateNew.cpp:96
408 msgid "Choose a Name"
409 msgstr "Valitse nimi"
410
411 #: ../../../src/GameStateNew.cpp:100
412 msgid "Permadeath?"
413 msgstr "Lopullinen kuolema?"
414
415 #: ../../../src/GameStateNew.cpp:104
416 msgid "Choose a Class"
417 msgstr "Valitse luokka"
418
419 #: ../../../src/GameStateTitle.cpp:108
420 msgid "Play Game"
421 msgstr "Pelaa"
422
423 #: ../../../src/GameStateTitle.cpp:111
424 msgid "Enable a core mod to continue"
425 msgstr "Salli ydinmodin jatkaa"
426
427 #: ../../../src/GameStateTitle.cpp:115
428 msgid "Configuration"
429 msgstr "Asetukset"
430
431 #: ../../../src/GameStateTitle.cpp:118
432 msgid "Credits"
433 msgstr ""
434
435 #: ../../../src/GameStateTitle.cpp:121
436 msgid "Exit Game"
437 msgstr "Lopeta peli"
438
439 #: ../../../src/InputState.cpp:402
440 msgid "Accept"
441 msgstr "Hyväksy"
442
443 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
444 msgid "Up"
445 msgstr "Ylös"
446
447 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
448 msgid "Down"
449 msgstr "Alas"
450
451 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
452 msgid "Left"
453 msgstr "Vasen"
454
455 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
456 msgid "Right"
457 msgstr "Oikea"
458
459 #: ../../../src/InputState.cpp:407
460 msgid "Bar1"
461 msgstr ""
462
463 #: ../../../src/InputState.cpp:408
464 msgid "Bar2"
465 msgstr ""
466
467 #: ../../../src/InputState.cpp:409
468 msgid "Bar3"
469 msgstr ""
470
471 #: ../../../src/InputState.cpp:410
472 msgid "Bar4"
473 msgstr ""
474
475 #: ../../../src/InputState.cpp:411
476 msgid "Bar5"
477 msgstr ""
478
479 #: ../../../src/InputState.cpp:412
480 msgid "Bar6"
481 msgstr ""
482
483 #: ../../../src/InputState.cpp:413
484 msgid "Bar7"
485 msgstr ""
486
487 #: ../../../src/InputState.cpp:414
488 msgid "Bar8"
489 msgstr ""
490
491 #: ../../../src/InputState.cpp:415
492 msgid "Bar9"
493 msgstr ""
494
495 #: ../../../src/InputState.cpp:416
496 msgid "Bar0"
497 msgstr ""
498
499 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
500 #: ../../../src/MenuCharacter.cpp:54
501 msgid "Character"
502 msgstr "Hahmo"
503
504 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
505 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
506 msgid "Inventory"
507 msgstr "Tavaraluettelo"
508
509 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
510 #: ../../../src/MenuPowers.cpp:168
511 msgid "Powers"
512 msgstr "Voimat"
513
514 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
515 #: ../../../src/MenuLog.cpp:72
516 msgid "Log"
517 msgstr "Loki"
518
519 #: ../../../src/InputState.cpp:421
520 msgid "Main1"
521 msgstr ""
522
523 #: ../../../src/InputState.cpp:422
524 msgid "Main2"
525 msgstr ""
526
527 #: ../../../src/InputState.cpp:423
528 msgid "Ctrl"
529 msgstr ""
530
531 #: ../../../src/InputState.cpp:424
532 msgid "Shift"
533 msgstr "Vaihto"
534
535 #: ../../../src/InputState.cpp:425
536 msgid "Alt"
537 msgstr ""
538
539 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
540 msgid "Delete"
541 msgstr ""
542
543 #: ../../../src/InputState.cpp:427
544 msgid "ActionBar Accept"
545 msgstr ""
546
547 #: ../../../src/InputState.cpp:428
548 msgid "ActionBar Left"
549 msgstr ""
550
551 #: ../../../src/InputState.cpp:429
552 msgid "ActionBar Right"
553 msgstr ""
554
555 #: ../../../src/InputState.cpp:430
556 msgid "ActionBar Use"
557 msgstr ""
558
559 #: ../../../src/InputState.cpp:431
560 msgid "Developer Menu"
561 msgstr ""
562
563 #: ../../../src/InputState.cpp:433
564 msgid "Left Mouse"
565 msgstr ""
566
567 #: ../../../src/InputState.cpp:434
568 msgid "Middle Mouse"
569 msgstr ""
570
571 #: ../../../src/InputState.cpp:435
572 msgid "Right Mouse"
573 msgstr ""
574
575 #: ../../../src/InputState.cpp:436
576 msgid "Wheel Up"
577 msgstr ""
578
579 #: ../../../src/InputState.cpp:437
580 msgid "Wheel Down"
581 msgstr ""
582
583 #: ../../../src/InputState.cpp:438
584 msgid "Mouse X1"
585 msgstr ""
586
587 #: ../../../src/InputState.cpp:439
588 msgid "Mouse X2"
589 msgstr ""
590
591 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
592 msgid "Unknown Item"
593 msgstr ""
594
595 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
596 #, c-format
597 msgid "%d%% Speed"
598 msgstr ""
599
600 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
601 #, c-format
602 msgid "%d%% Attack Speed"
603 msgstr ""
604
605 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
606 #: ../../../src/MenuPowers.cpp:833
607 #, c-format
608 msgid "Resistance (%s)"
609 msgstr ""
610
611 #: ../../../src/ItemManager.cpp:684
612 #, c-format
613 msgid "Requires %s"
614 msgstr ""
615
616 #: ../../../src/ItemManager.cpp:733
617 msgid "Quest Item"
618 msgstr ""
619
620 #: ../../../src/ItemManager.cpp:760
621 #, c-format
622 msgid "Quality: %s"
623 msgstr ""
624
625 #: ../../../src/ItemManager.cpp:785
626 #, c-format
627 msgid "Absorb: %d-%d"
628 msgstr "Vaimennus: %d-%d"
629
630 #: ../../../src/ItemManager.cpp:787
631 #, c-format
632 msgid "Absorb: %d"
633 msgstr "Vaimennus: %d"
634
635 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
636 #: ../../../src/MenuPowers.cpp:1134
637 #, c-format
638 msgid "Requires Level %d"
639 msgstr "Vaatii tason %d"
640
641 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
642 #: ../../../src/MenuPowers.cpp:1125
643 #, c-format
644 msgid "Requires %s %d"
645 msgstr ""
646
647 #: ../../../src/ItemManager.cpp:849
648 #, c-format
649 msgid "Requires Class: %s"
650 msgstr ""
651
652 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
653 #, c-format
654 msgid "Buy Price: %d %s"
655 msgstr "Ostohinta: %d kultaa"
656
657 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
658 #, c-format
659 msgid "Buy Price: %d %s each"
660 msgstr "Ostohinta: á %d kultaa"
661
662 #: ../../../src/ItemManager.cpp:886
663 #, c-format
664 msgid "Sell Price: %d %s"
665 msgstr "Myyntihinta: %d kultaa"
666
667 #: ../../../src/ItemManager.cpp:888
668 #, c-format
669 msgid "Sell Price: %d %s each"
670 msgstr "Myyntihinta: á %d kultaa"
671
672 #: ../../../src/ItemManager.cpp:897
673 msgid "Set:"
674 msgstr ""
675
676 #: ../../../src/ItemManager.cpp:904
677 #, c-format
678 msgid "%d items:"
679 msgstr ""
680
681 #: ../../../src/ItemManager.cpp:917
682 #, c-format
683 msgid "Press [%s] to use"
684 msgstr ""
685
686 #: ../../../src/ItemManager.cpp:920
687 #, c-format
688 msgid "Press [%s] to read"
689 msgstr ""
690
691 #: ../../../src/MenuActionBar.cpp:87
692 msgid "Loot tooltip visibility"
693 msgstr ""
694
695 #: ../../../src/MenuActionBar.cpp:88
696 msgid "Mini-map mode"
697 msgstr ""
698
699 #: ../../../src/MenuActionBar.cpp:89
700 msgid "Always show stat bar labels"
701 msgstr ""
702
703 #: ../../../src/MenuActionBar.cpp:90
704 msgid "Show combat text"
705 msgstr "Näytä taisteluteksti"
706
707 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
708 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
709 #, c-format
710 msgid "Hotkey: %s"
711 msgstr ""
712
713 #: ../../../src/MenuActionBar.cpp:474
714 #, c-format
715 msgid "Default. Temporarily show all loot tooltips with '%s'."
716 msgstr ""
717
718 #: ../../../src/MenuActionBar.cpp:476
719 #, c-format
720 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
721 msgstr ""
722
723 #: ../../../src/MenuActionBar.cpp:478
724 #, c-format
725 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
726 msgstr ""
727
728 #: ../../../src/MenuActionBar.cpp:482
729 msgid "Visible"
730 msgstr ""
731
732 #: ../../../src/MenuActionBar.cpp:484
733 msgid "Visible (2x zoom)"
734 msgstr ""
735
736 #: ../../../src/MenuActionBar.cpp:486
737 msgid "Hidden"
738 msgstr ""
739
740 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
741 msgid "Enabled"
742 msgstr ""
743
744 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
745 msgid "Disabled"
746 msgstr ""
747
748 #: ../../../src/MenuActionBar.cpp:657
749 msgid "Not enough MP."
750 msgstr ""
751
752 #: ../../../src/MenuActiveEffects.cpp:124
753 #, c-format
754 msgid "x%d"
755 msgstr ""
756
757 #: ../../../src/MenuActiveEffects.cpp:219
758 msgid "Remaining:"
759 msgstr ""
760
761 #: ../../../src/MenuActiveEffects.cpp:225
762 #, c-format
763 msgid "x%d stacks"
764 msgstr ""
765
766 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
767 msgid "Name"
768 msgstr "Nimi"
769
770 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
771 msgid "Level"
772 msgstr "Taso"
773
774 #: ../../../src/MenuCharacter.cpp:310
775 #, c-format
776 msgid "%d unspent stat point"
777 msgstr ""
778
779 #: ../../../src/MenuCharacter.cpp:313
780 #, c-format
781 msgid "%d unspent stat points"
782 msgstr ""
783
784 #: ../../../src/MenuCharacter.cpp:355
785 #, c-format
786 msgid "Reduces the damage taken from \"%s\" elemental attacks."
787 msgstr ""
788
789 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
790 #, c-format
791 msgid "XP: %d"
792 msgstr "Kokemus: %d"
793
794 #: ../../../src/MenuCharacter.cpp:367
795 #, c-format
796 msgid "Next: %d"
797 msgstr "Seuraava: %d"
798
799 #: ../../../src/MenuCharacter.cpp:373
800 #, c-format
801 msgid "base (%d), bonus (%d)"
802 msgstr "perus (%d), lisä (%d)"
803
804 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
805 msgid "Related stats:"
806 msgstr ""
807
808 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
809 #, c-format
810 msgid "Each level grants %d."
811 msgstr ""
812
813 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
814 #, c-format
815 msgid "Each point of %s grants %d."
906 #: ../../../src/MenuConfig.cpp:512
907 msgid ""
908 "Enables the below setting that controls the screen gamma level. The behavior"
909 " of the gamma setting can vary between platforms."
910 msgstr ""
911
912 #: ../../../src/MenuConfig.cpp:513
913 msgid ""
914 "Provides additional text for information that is primarily conveyed through "
915 "color."
916 msgstr ""
917
918 #: ../../../src/MenuConfig.cpp:514
919 msgid ""
920 "Some mods will automatically hide the stat bars when they are inactive. "
921 "Disabling this option will keep them displayed at all times."
922 msgstr ""
923
924 #: ../../../src/MenuConfig.cpp:515
925 msgid ""
926 "When enabled, empty equipment slots will be filled with applicable items "
927 "when they are obtained."
928 msgstr ""
929
930 #: ../../../src/MenuConfig.cpp:516
931 msgid ""
932 "Shows a marker above enemies, allies, and the player when they are obscured "
933 "by tall objects."
934 msgstr ""
935
936 #: ../../../src/MenuConfig.cpp:517
937 msgid ""
938 "This allows the game to be controlled entirely with the keyboard (or "
939 "joystick)."
940 msgstr ""
941
942 #: ../../../src/MenuConfig.cpp:518
943 msgid ""
944 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
945 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
946 "instead of 'Main1'."
947 msgstr ""
948
949 #: ../../../src/MenuConfig.cpp:519
950 msgid ""
951 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
952 "assigned to the movement button can be used by targeting an enemy. If this "
953 "setting is disabled, it is required to use 'Shift' to access the Power "
954 "assigned to the movement button."
955 msgstr ""
956
957 #: ../../../src/MenuConfig.cpp:520
958 msgid ""
959 "The player's attacks will be aimed in the direction of the mouse cursor when"
960 " this is enabled."
961 msgstr ""
962
963 #: ../../../src/MenuConfig.cpp:571
964 msgid "Active Mods"
965 msgstr "Käytössäolevat modit"
966
967 #: ../../../src/MenuConfig.cpp:580
968 msgid "Available Mods"
969 msgstr "Saatavilla olevat modit"
970
971 #: ../../../src/MenuConfig.cpp:599
972 msgid "<< Disable"
973 msgstr "<< Poista käytöstä"
974
975 #: ../../../src/MenuConfig.cpp:605
976 msgid "Enable >>"
977 msgstr "Ota käyttöön >>"
978
979 #: ../../../src/MenuConfig.cpp:1436
980 msgid "Version:"
981 msgstr ""
982
983 #: ../../../src/MenuConfig.cpp:1441
984 msgid "Game:"
985 msgstr ""
986
987 #: ../../../src/MenuConfig.cpp:1446
988 msgid "Engine version:"
989 msgstr ""
990
991 #: ../../../src/MenuConfig.cpp:1454
992 msgid "Requires mods:"
993 msgstr ""
994
995 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
996 msgid "(none)"
997 msgstr ""
998
999 #: ../../../src/MenuConfig.cpp:1579
1000 msgid "Save & Exit"
8161001 msgstr ""
8171002
8181003 #: ../../../src/MenuDevConsole.cpp:63
9681153 msgid "HINT: Type help"
9691154 msgstr ""
9701155
971 #: ../../../src/MenuEnemy.cpp:138
1156 #: ../../../src/MenuEnemy.cpp:162
9721157 #, c-format
9731158 msgid "%s level %d"
9741159 msgstr "%s taso %d"
9751160
976 #: ../../../src/MenuEnemy.cpp:162
1161 #: ../../../src/MenuEnemy.cpp:186
9771162 msgid "Dead"
9781163 msgstr "Kuollut"
9791164
980 #: ../../../src/MenuEnemy.cpp:164
1165 #: ../../../src/MenuEnemy.cpp:188
9811166 msgid "Destroyed"
9821167 msgstr ""
9831168
984 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
985 msgid "Paused"
986 msgstr ""
987
988 #: ../../../src/MenuExit.cpp:91
989 msgid "Save & Exit"
990 msgstr ""
991
992 #: ../../../src/MenuExit.cpp:92
993 msgid "Exit"
994 msgstr "Poistu"
995
996 #: ../../../src/MenuExit.cpp:96
997 msgid "Continue"
998 msgstr ""
999
1000 #: ../../../src/MenuInventory.cpp:73
1001 msgid "Automatically equip items"
1002 msgstr ""
1003
1004 #: ../../../src/MenuInventory.cpp:188
1169 #: ../../../src/MenuInventory.cpp:177
10051170 #, c-format
10061171 msgid "Lost %d%% of %s."
10071172 msgstr ""
10081173
1009 #: ../../../src/MenuInventory.cpp:195
1174 #: ../../../src/MenuInventory.cpp:184
10101175 #, c-format
10111176 msgid "Lost %d%% of total XP."
10121177 msgstr ""
10131178
1014 #: ../../../src/MenuInventory.cpp:200
1179 #: ../../../src/MenuInventory.cpp:189
10151180 #, c-format
10161181 msgid "Lost %d%% of current level XP."
10171182 msgstr ""
10181183
1019 #: ../../../src/MenuInventory.cpp:226
1184 #: ../../../src/MenuInventory.cpp:215
10201185 #, c-format
10211186 msgid "Lost %s."
10221187 msgstr ""
10231188
1024 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1189 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10251190 #, c-format
10261191 msgid "%d %s"
10271192 msgstr ""
10281193
1029 #: ../../../src/MenuInventory.cpp:317
1194 #: ../../../src/MenuInventory.cpp:300
10301195 msgid "Pick up item(s):"
10311196 msgstr ""
10321197
1033 #: ../../../src/MenuInventory.cpp:318
1198 #: ../../../src/MenuInventory.cpp:301
10341199 msgid "Use or equip item:"
10351200 msgstr ""
10361201
1037 #: ../../../src/MenuInventory.cpp:319
1202 #: ../../../src/MenuInventory.cpp:302
10381203 #, c-format
10391204 msgid "%s modifiers"
10401205 msgstr ""
10411206
1042 #: ../../../src/MenuInventory.cpp:320
1207 #: ../../../src/MenuInventory.cpp:303
10431208 msgid "Select a quantity of item:"
10441209 msgstr ""
10451210
1046 #: ../../../src/MenuInventory.cpp:323
1211 #: ../../../src/MenuInventory.cpp:306
10471212 msgid "Stash item stack:"
10481213 msgstr ""
10491214
1050 #: ../../../src/MenuInventory.cpp:325
1215 #: ../../../src/MenuInventory.cpp:308
10511216 msgid "Sell item stack:"
10521217 msgstr ""
10531218
1054 #: ../../../src/MenuInventory.cpp:592
1219 #: ../../../src/MenuInventory.cpp:574
10551220 msgid "You don't have enough of the required item."
10561221 msgstr ""
10571222
1058 #: ../../../src/MenuInventory.cpp:599
1223 #: ../../../src/MenuInventory.cpp:586
10591224 msgid "You can't use this item right now."
10601225 msgstr ""
10611226
1062 #: ../../../src/MenuInventory.cpp:611
1227 #: ../../../src/MenuInventory.cpp:598
10631228 msgid "This item can only be used from the action bar."
10641229 msgstr "Tätä tavaraa voit käyttää vain toimintapalkista."
10651230
1066 #: ../../../src/MenuInventory.cpp:729
1231 #: ../../../src/MenuInventory.cpp:716
10671232 msgid "Inventory is full."
10681233 msgstr "Tavaraluettelo on täynnä."
10691234
1070 #: ../../../src/MenuInventory.cpp:849
1235 #: ../../../src/MenuInventory.cpp:841
10711236 #, c-format
10721237 msgid "Not enough %s."
10731238 msgstr ""
10741239
1075 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1240 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
10761241 msgid "This item can not be sold."
10771242 msgstr ""
10781243
10841249 msgid "Quests"
10851250 msgstr "Etsinnät"
10861251
1087 #: ../../../src/MenuManager.cpp:286
1252 #: ../../../src/MenuManager.cpp:296
10881253 #, c-format
10891254 msgid "XP: %d/%d"
10901255 msgstr "Kokemus: %d/%d"
10911256
1092 #: ../../../src/MenuManager.cpp:827
1257 #: ../../../src/MenuManager.cpp:854
10931258 msgid "This item can not be dropped."
10941259 msgstr ""
10951260
10971262 msgid "Enter amount:"
10981263 msgstr ""
10991264
1100 #: ../../../src/MenuPowers.cpp:787
1265 #: ../../../src/MenuPowers.cpp:786
11011266 msgid "Passive"
11021267 msgstr ""
11031268
1104 #: ../../../src/MenuPowers.cpp:792
1269 #: ../../../src/MenuPowers.cpp:791
11051270 #, c-format
11061271 msgid "Costs %d MP"
11071272 msgstr "Kustannus %d MP"
11081273
1109 #: ../../../src/MenuPowers.cpp:796
1274 #: ../../../src/MenuPowers.cpp:795
11101275 #, c-format
11111276 msgid "Costs %d HP"
11121277 msgstr "Kustannus %d OP"
11131278
1114 #: ../../../src/MenuPowers.cpp:801
1279 #: ../../../src/MenuPowers.cpp:800
11151280 msgid "Cooldown:"
11161281 msgstr ""
11171282
1118 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1283 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11191284 msgid "Damage per second"
11201285 msgstr ""
11211286
1122 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1287 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11231288 msgid "HP per second"
11241289 msgstr ""
11251290
1126 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1291 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11271292 msgid "MP per second"
11281293 msgstr ""
11291294
1130 #: ../../../src/MenuPowers.cpp:885
1295 #: ../../../src/MenuPowers.cpp:884
11311296 msgid "Immobilize"
11321297 msgstr ""
11331298
1134 #: ../../../src/MenuPowers.cpp:893
1299 #: ../../../src/MenuPowers.cpp:892
11351300 msgid "Immunity"
11361301 msgstr ""
11371302
1138 #: ../../../src/MenuPowers.cpp:896
1303 #: ../../../src/MenuPowers.cpp:895
11391304 msgid "Immunity to damage over time"
11401305 msgstr ""
11411306
1142 #: ../../../src/MenuPowers.cpp:899
1307 #: ../../../src/MenuPowers.cpp:898
11431308 msgid "Immunity to slow"
11441309 msgstr ""
11451310
1146 #: ../../../src/MenuPowers.cpp:902
1311 #: ../../../src/MenuPowers.cpp:901
11471312 msgid "Immunity to stun"
11481313 msgstr ""
11491314
1150 #: ../../../src/MenuPowers.cpp:905
1315 #: ../../../src/MenuPowers.cpp:904
11511316 msgid "Immunity to HP steal"
11521317 msgstr ""
11531318
1154 #: ../../../src/MenuPowers.cpp:908
1319 #: ../../../src/MenuPowers.cpp:907
11551320 msgid "Immunity to MP steal"
11561321 msgstr ""
11571322
1158 #: ../../../src/MenuPowers.cpp:911
1323 #: ../../../src/MenuPowers.cpp:910
11591324 msgid "Immunity to knockback"
11601325 msgstr ""
11611326
1162 #: ../../../src/MenuPowers.cpp:914
1327 #: ../../../src/MenuPowers.cpp:913
11631328 msgid "Immunity to damage reflection"
11641329 msgstr ""
11651330
1166 #: ../../../src/MenuPowers.cpp:917
1331 #: ../../../src/MenuPowers.cpp:916
11671332 msgid "Stun"
11681333 msgstr ""
11691334
1170 #: ../../../src/MenuPowers.cpp:920
1335 #: ../../../src/MenuPowers.cpp:919
11711336 msgid "Automatic revive on death"
11721337 msgstr ""
11731338
1174 #: ../../../src/MenuPowers.cpp:923
1339 #: ../../../src/MenuPowers.cpp:922
11751340 msgid "Convert"
11761341 msgstr ""
11771342
1178 #: ../../../src/MenuPowers.cpp:926
1343 #: ../../../src/MenuPowers.cpp:925
11791344 msgid "Fear"
11801345 msgstr ""
11811346
1182 #: ../../../src/MenuPowers.cpp:929
1347 #: ../../../src/MenuPowers.cpp:928
11831348 msgid "Lifespan"
11841349 msgstr ""
11851350
1186 #: ../../../src/MenuPowers.cpp:953
1351 #: ../../../src/MenuPowers.cpp:952
11871352 msgid "Magical Shield"
11881353 msgstr ""
11891354
1190 #: ../../../src/MenuPowers.cpp:982
1355 #: ../../../src/MenuPowers.cpp:981
11911356 msgid "Healing"
11921357 msgstr ""
11931358
1194 #: ../../../src/MenuPowers.cpp:985
1359 #: ../../../src/MenuPowers.cpp:984
11951360 msgid "Knockback"
11961361 msgstr ""
11971362
1198 #: ../../../src/MenuPowers.cpp:1010
1363 #: ../../../src/MenuPowers.cpp:1009
11991364 #, c-format
12001365 msgid "%d%% chance"
12011366 msgstr ""
12021367
1203 #: ../../../src/MenuPowers.cpp:1062
1368 #: ../../../src/MenuPowers.cpp:1061
12041369 msgid "Base Accuracy"
12051370 msgstr ""
12061371
1207 #: ../../../src/MenuPowers.cpp:1082
1372 #: ../../../src/MenuPowers.cpp:1081
12081373 msgid "Base Critical Chance"
12091374 msgstr ""
12101375
1211 #: ../../../src/MenuPowers.cpp:1090
1376 #: ../../../src/MenuPowers.cpp:1089
12121377 msgid "Ignores Absorbtion"
12131378 msgstr ""
12141379
1215 #: ../../../src/MenuPowers.cpp:1095
1380 #: ../../../src/MenuPowers.cpp:1094
12161381 msgid "Ignores Avoidance"
12171382 msgstr ""
12181383
1219 #: ../../../src/MenuPowers.cpp:1100
1384 #: ../../../src/MenuPowers.cpp:1099
12201385 #, c-format
12211386 msgid "%d%% Chance to crit slowed targets"
12221387 msgstr ""
12231388
1224 #: ../../../src/MenuPowers.cpp:1105
1389 #: ../../../src/MenuPowers.cpp:1104
12251390 #, c-format
12261391 msgid "Elemental Damage (%s)"
12271392 msgstr ""
12281393
1229 #: ../../../src/MenuPowers.cpp:1114
1394 #: ../../../src/MenuPowers.cpp:1113
12301395 #, c-format
12311396 msgid "Requires a %s"
12321397 msgstr ""
12331398
1234 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1399 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12351400 #, c-format
12361401 msgid "Requires Power: %s"
12371402 msgstr "Vaatii voiman: %s"
12381403
1239 #: ../../../src/MenuPowers.cpp:1163
1404 #: ../../../src/MenuPowers.cpp:1162
12401405 msgid "Click to Unlock (uses 1 Skill Point)"
12411406 msgstr ""
12421407
1243 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1408 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12441409 msgid "Requires 1 Skill Point"
12451410 msgstr ""
12461411
1247 #: ../../../src/MenuPowers.cpp:1355
1412 #: ../../../src/MenuPowers.cpp:1354
12481413 #, c-format
12491414 msgid "%d unspent skill point"
12501415 msgstr ""
12511416
1252 #: ../../../src/MenuPowers.cpp:1358
1417 #: ../../../src/MenuPowers.cpp:1357
12531418 #, c-format
12541419 msgid "%d unspent skill points"
12551420 msgstr ""
12561421
1257 #: ../../../src/MenuPowers.cpp:1388
1422 #: ../../../src/MenuPowers.cpp:1387
12581423 msgid "Next Level:"
12591424 msgstr ""
12601425
1261 #: ../../../src/MenuStash.cpp:96
1262 msgid "Shared Stash"
1263 msgstr "Jaettu kätkö"
1264
1265 #: ../../../src/MenuStash.cpp:209
1426 #: ../../../src/MenuStash.cpp:53
1427 msgid "Private"
1428 msgstr ""
1429
1430 #: ../../../src/MenuStash.cpp:55
1431 msgid "Shared"
1432 msgstr ""
1433
1434 #: ../../../src/MenuStash.cpp:103
1435 msgid "Stash"
1436 msgstr ""
1437
1438 #: ../../../src/MenuStash.cpp:258
12661439 msgid "Can not store quest items in the stash."
12671440 msgstr ""
12681441
1269 #: ../../../src/MenuStash.cpp:219
1442 #: ../../../src/MenuStash.cpp:263
1443 msgid "This item can not be stored in the stash."
1444 msgstr ""
1445
1446 #: ../../../src/MenuStash.cpp:268
1447 msgid "This item can not be stored in the private stash."
1448 msgstr ""
1449
1450 #: ../../../src/MenuStash.cpp:273
1451 msgid "This item can not be stored in the shared stash."
1452 msgstr ""
1453
1454 #: ../../../src/MenuStash.cpp:283
12701455 msgid "Stash is full."
12711456 msgstr ""
12721457
1273 #: ../../../src/MenuTalker.cpp:454
1458 #: ../../../src/MenuStash.cpp:340
1459 #, c-format
1460 msgid "Can not store item in stash: %s"
1461 msgstr ""
1462
1463 #: ../../../src/MenuTalker.cpp:447
1464 #, c-format
1465 msgid "<dialog node %d>"
1466 msgstr ""
1467
1468 #: ../../../src/MenuTalker.cpp:455
12741469 msgid "Trade"
12751470 msgstr "Tee kaupat"
12761471
12781473 msgid "Buyback"
12791474 msgstr "Takaisinosto"
12801475
1281 #: ../../../src/MenuVendor.cpp:279
1476 #: ../../../src/MenuVendor.cpp:281
12821477 msgid "Vendor"
12831478 msgstr "Kauppias"
12841479
1285 #: ../../../src/PowerManager.cpp:1136
1480 #: ../../../src/PowerManager.cpp:1170
12861481 #, c-format
12871482 msgid "+%d Shield"
12881483 msgstr "+%d kilpi"
12891484
1290 #: ../../../src/PowerManager.cpp:1392
1485 #: ../../../src/PowerManager.cpp:1426
12911486 msgid "You are already transformed, untransform first."
12921487 msgstr "Olet jo muuntunut, palaa ensin entisellesi."
12931488
1294 #: ../../../src/PowerManager.cpp:1404
1489 #: ../../../src/PowerManager.cpp:1438
12951490 msgid "Could not untransform at this position."
12961491 msgstr ""
12971492
12991494 msgid "Completed Quests"
13001495 msgstr ""
13011496
1302 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1497 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13031498 msgid "Game saved."
13041499 msgstr ""
13051500
1306 #: ../../../src/SDLInputState.cpp:582
1501 #: ../../../src/SDLInputState.cpp:643
1502 msgid "BkSp"
1503 msgstr ""
1504
1505 #: ../../../src/SDLInputState.cpp:644
1506 msgid "Caps"
1507 msgstr ""
1508
1509 #: ../../../src/SDLInputState.cpp:645
1510 msgid "Del"
1511 msgstr ""
1512
1513 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1514 msgid "End"
1515 msgstr ""
1516
1517 #: ../../../src/SDLInputState.cpp:648
1518 msgid "Esc"
1519 msgstr ""
1520
1521 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1522 msgid "Home"
1523 msgstr ""
1524
1525 #: ../../../src/SDLInputState.cpp:650
1526 msgid "Ins"
1527 msgstr ""
1528
1529 #: ../../../src/SDLInputState.cpp:651
1530 msgid "LAlt"
1531 msgstr ""
1532
1533 #: ../../../src/SDLInputState.cpp:652
1534 msgid "LCtrl"
1535 msgstr ""
1536
1537 #: ../../../src/SDLInputState.cpp:654
1538 msgid "LShft"
1539 msgstr ""
1540
1541 #: ../../../src/SDLInputState.cpp:655
1542 msgid "Num"
1543 msgstr ""
1544
1545 #: ../../../src/SDLInputState.cpp:656
1546 msgid "PgDn"
1547 msgstr ""
1548
1549 #: ../../../src/SDLInputState.cpp:657
1550 msgid "PgUp"
1551 msgstr ""
1552
1553 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1554 msgid "Pause"
1555 msgstr ""
1556
1557 #: ../../../src/SDLInputState.cpp:659
1558 msgid "Print"
1559 msgstr ""
1560
1561 #: ../../../src/SDLInputState.cpp:660
1562 msgid "RAlt"
1563 msgstr ""
1564
1565 #: ../../../src/SDLInputState.cpp:661
1566 msgid "RCtrl"
1567 msgstr ""
1568
1569 #: ../../../src/SDLInputState.cpp:662
1570 msgid "Ret"
1571 msgstr ""
1572
1573 #: ../../../src/SDLInputState.cpp:664
1574 msgid "RShft"
1575 msgstr ""
1576
1577 #: ../../../src/SDLInputState.cpp:665
1578 msgid "SLock"
1579 msgstr ""
1580
1581 #: ../../../src/SDLInputState.cpp:666
1582 msgid "Spc"
1583 msgstr ""
1584
1585 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1586 msgid "Tab"
1587 msgstr ""
1588
1589 #: ../../../src/SDLInputState.cpp:673
13071590 msgid "Backspace"
13081591 msgstr ""
13091592
1310 #: ../../../src/SDLInputState.cpp:583
1593 #: ../../../src/SDLInputState.cpp:674
13111594 msgid "CapsLock"
13121595 msgstr ""
13131596
1314 #: ../../../src/SDLInputState.cpp:586
1315 msgid "End"
1316 msgstr ""
1317
1318 #: ../../../src/SDLInputState.cpp:587
1597 #: ../../../src/SDLInputState.cpp:678
13191598 msgid "Escape"
13201599 msgstr ""
13211600
1322 #: ../../../src/SDLInputState.cpp:588
1323 msgid "Home"
1324 msgstr ""
1325
1326 #: ../../../src/SDLInputState.cpp:589
1601 #: ../../../src/SDLInputState.cpp:680
13271602 msgid "Insert"
13281603 msgstr ""
13291604
1330 #: ../../../src/SDLInputState.cpp:590
1605 #: ../../../src/SDLInputState.cpp:681
13311606 msgid "Left Alt"
13321607 msgstr ""
13331608
1334 #: ../../../src/SDLInputState.cpp:591
1609 #: ../../../src/SDLInputState.cpp:682
13351610 msgid "Left Ctrl"
13361611 msgstr ""
13371612
1338 #: ../../../src/SDLInputState.cpp:593
1613 #: ../../../src/SDLInputState.cpp:684
13391614 msgid "Left Shift"
13401615 msgstr ""
13411616
1342 #: ../../../src/SDLInputState.cpp:594
1617 #: ../../../src/SDLInputState.cpp:685
13431618 msgid "NumLock"
13441619 msgstr ""
13451620
1346 #: ../../../src/SDLInputState.cpp:595
1621 #: ../../../src/SDLInputState.cpp:686
13471622 msgid "PageDown"
13481623 msgstr ""
13491624
1350 #: ../../../src/SDLInputState.cpp:596
1625 #: ../../../src/SDLInputState.cpp:687
13511626 msgid "PageUp"
13521627 msgstr ""
13531628
1354 #: ../../../src/SDLInputState.cpp:597
1355 msgid "Pause"
1356 msgstr ""
1357
1358 #: ../../../src/SDLInputState.cpp:598
1629 #: ../../../src/SDLInputState.cpp:689
13591630 msgid "PrintScreen"
13601631 msgstr ""
13611632
1362 #: ../../../src/SDLInputState.cpp:599
1633 #: ../../../src/SDLInputState.cpp:690
13631634 msgid "Right Alt"
13641635 msgstr ""
13651636
1366 #: ../../../src/SDLInputState.cpp:600
1637 #: ../../../src/SDLInputState.cpp:691
13671638 msgid "Right Ctrl"
13681639 msgstr ""
13691640
1370 #: ../../../src/SDLInputState.cpp:601
1641 #: ../../../src/SDLInputState.cpp:692
13711642 msgid "Return"
13721643 msgstr ""
13731644
1374 #: ../../../src/SDLInputState.cpp:603
1645 #: ../../../src/SDLInputState.cpp:694
13751646 msgid "Right Shift"
13761647 msgstr ""
13771648
1378 #: ../../../src/SDLInputState.cpp:604
1649 #: ../../../src/SDLInputState.cpp:695
13791650 msgid "ScrollLock"
13801651 msgstr ""
13811652
1382 #: ../../../src/SDLInputState.cpp:605
1653 #: ../../../src/SDLInputState.cpp:696
13831654 msgid "Space"
13841655 msgstr ""
13851656
1386 #: ../../../src/SDLInputState.cpp:606
1387 msgid "Tab"
1388 msgstr ""
1389
1390 #: ../../../src/SDLInputState.cpp:620
1657 #: ../../../src/SDLInputState.cpp:710
1658 #, c-format
1659 msgid "M%d"
1660 msgstr ""
1661
1662 #: ../../../src/SDLInputState.cpp:716
13911663 #, c-format
13921664 msgid "Mouse %d"
13931665 msgstr ""
13941666
1395 #: ../../../src/SDLInputState.cpp:628
1667 #: ../../../src/SDLInputState.cpp:726
1668 #, c-format
1669 msgid "JX%d-"
1670 msgstr ""
1671
1672 #: ../../../src/SDLInputState.cpp:728
13961673 #, c-format
13971674 msgid "Axis %d -"
13981675 msgstr ""
13991676
1400 #: ../../../src/SDLInputState.cpp:630
1677 #: ../../../src/SDLInputState.cpp:732
1678 #, c-format
1679 msgid "JX%d+"
1680 msgstr ""
1681
1682 #: ../../../src/SDLInputState.cpp:734
14011683 #, c-format
14021684 msgid "Axis %d +"
14031685 msgstr ""
14041686
1405 #: ../../../src/SDLInputState.cpp:633
1687 #: ../../../src/SDLInputState.cpp:739
1688 #, c-format
1689 msgid "JB%d"
1690 msgstr ""
1691
1692 #: ../../../src/SDLInputState.cpp:741
14061693 #, c-format
14071694 msgid "Button %d"
14081695 msgstr ""
14091696
1410 #: ../../../src/SDLInputState.cpp:637
1411 msgid "(none)"
1412 msgstr ""
1413
1414 #: ../../../src/SDLInputState.cpp:677
1697 #: ../../../src/SDLInputState.cpp:788
14151698 msgid "Touch control D-Pad"
14161699 msgstr ""
14171700
1418 #: ../../../src/SDLInputState.cpp:701
1701 #: ../../../src/SDLInputState.cpp:812
14191702 msgid "Touch control buttons"
14201703 msgstr ""
14211704
1422 #: ../../../src/SDLInputState.cpp:716
1705 #: ../../../src/SDLInputState.cpp:827
14231706 msgid "Tap"
14241707 msgstr ""
14251708
1426 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1427 #: ../../../src/SDLInputState.cpp:768
1709 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1710 #, c-format
1711 msgid "Can not bind: %s"
1712 msgstr ""
1713
1714 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1715 #: ../../../src/SDLInputState.cpp:901
14281716 #, c-format
14291717 msgid "'%s' is no longer bound to:"
14301718 msgstr ""
15871875 msgid "k"
15881876 msgstr ""
15891877
1590 #: ../../../src/Utils.cpp:580
1878 #: ../../../src/Utils.cpp:616
15911879 #, c-format
15921880 msgid "%s second"
15931881 msgstr ""
15941882
1595 #: ../../../src/Utils.cpp:583
1883 #: ../../../src/Utils.cpp:619
15961884 #, c-format
15971885 msgid "%s seconds"
15981886 msgstr ""
44 #
55 # Translators:
66 # Justin Jacobs <jajdorkster@gmail.com>, 2018
7 # syl_, 2019
8 # Christophe Nemo <djlittlenemo@gmail.com>, 2020
79 #
810 #, fuzzy
911 msgid ""
1012 msgstr ""
1113 "Project-Id-Version: PACKAGE VERSION\n"
1214 "Report-Msgid-Bugs-To: \n"
13 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
15 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1416 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
15 "Last-Translator: Justin Jacobs <jajdorkster@gmail.com>, 2018\n"
17 "Last-Translator: Christophe Nemo <djlittlenemo@gmail.com>, 2020\n"
1618 "Language-Team: French (https://www.transifex.com/flareorg/teams/84925/fr/)\n"
1719 "MIME-Version: 1.0\n"
1820 "Content-Type: text/plain; charset=UTF-8\n"
2022 "Language: fr\n"
2123 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
2224
23 #: ../../../src/Avatar.cpp:367
25 #: ../../../src/Avatar.cpp:387
26 msgid "Your health is low!"
27 msgstr "Votre santé est basse !"
28
29 #: ../../../src/Avatar.cpp:419
2430 #, c-format
2531 msgid "Congratulations, you have reached level %d!"
2632 msgstr "Félicitations, vous avez atteint le niveau %d !"
2733
28 #: ../../../src/Avatar.cpp:369
29 msgid "You may increase one attribute through the Character Menu."
30 msgstr "Vous pouvez améliorer un attribut via le menu Personnage."
31
32 #: ../../../src/Avatar.cpp:583
34 #: ../../../src/Avatar.cpp:421
35 msgid "You may increase one or more attributes through the Character Menu."
36 msgstr ""
37 "Vous pouvez améliorer un ou plusieurs attributs via le menu Personnage."
38
39 #: ../../../src/Avatar.cpp:425
40 msgid "You may unlock one or more abilities through the Powers Menu."
41 msgstr "Vous pouvez débloquer une ou plusieurs capacités via le menu Pouvoirs"
42
43 #: ../../../src/Avatar.cpp:692
3344 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3445 msgstr ""
35
36 #: ../../../src/Avatar.cpp:589
46 "Vous avez été vaincu. Partie terminée ! ${INPUT_CONTINUE} pour quitter vers "
47 "le menu."
48
49 #: ../../../src/Avatar.cpp:698
3750 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
38 msgstr ""
39
40 #: ../../../src/Avatar.cpp:839
51 msgstr "Vous avez été vaincu. ${INPUT_CONTINUE} pour continuer."
52
53 #: ../../../src/Avatar.cpp:949
4154 msgid "Transformation expired. You have been moved back to a safe place."
4255 msgstr "Transformation expirée. On vous a ramené à un endroit sûr."
4356
4659 msgid "%d %s removed."
4760 msgstr "%d %s supprimé."
4861
49 #: ../../../src/CampaignManager.cpp:162
62 #: ../../../src/CampaignManager.cpp:165
63 #, c-format
64 msgid "%s x%d removed."
65 msgstr "%s x%d supprimés."
66
67 #: ../../../src/CampaignManager.cpp:167
5068 #, c-format
5169 msgid "%s removed."
5270 msgstr "%s supprimé."
5371
54 #: ../../../src/CampaignManager.cpp:175
72 #: ../../../src/CampaignManager.cpp:180
5573 #, c-format
5674 msgid "You receive %s."
5775 msgstr "Vous recevez %s."
5876
59 #: ../../../src/CampaignManager.cpp:177
77 #: ../../../src/CampaignManager.cpp:182
6078 #, c-format
6179 msgid "You receive %s x%d."
6280 msgstr "Vous recevez %s x%d."
6381
64 #: ../../../src/CampaignManager.cpp:186
82 #: ../../../src/CampaignManager.cpp:191
6583 #, c-format
6684 msgid "You receive %d %s."
6785 msgstr "Vous recevez %d %s."
6886
69 #: ../../../src/CampaignManager.cpp:195
87 #: ../../../src/CampaignManager.cpp:200
7088 #, c-format
7189 msgid "You receive %d XP."
7290 msgstr "Vous recevez %d points d'expérience."
7391
74 #: ../../../src/CampaignManager.cpp:201
92 #: ../../../src/CampaignManager.cpp:206
7593 msgid "HP restored."
7694 msgstr "PV restaurés."
7795
78 #: ../../../src/CampaignManager.cpp:205
96 #: ../../../src/CampaignManager.cpp:210
7997 msgid "MP restored."
8098 msgstr "PM restaurés."
8199
82 #: ../../../src/CampaignManager.cpp:210
100 #: ../../../src/CampaignManager.cpp:215
83101 msgid "HP and MP restored."
84102 msgstr "PV et PM restaurés."
85103
86 #: ../../../src/CampaignManager.cpp:214
104 #: ../../../src/CampaignManager.cpp:219
87105 msgid "Negative effects removed."
88106 msgstr "Effet négatif supprimé"
89107
90 #: ../../../src/CampaignManager.cpp:220
108 #: ../../../src/CampaignManager.cpp:225
91109 msgid "HP and MP restored, negative effects removed"
92110 msgstr "PV et PM restaurés, effet négatif supprimé"
93111
97115 "\n"
98116 "Often slower, but less likely to have issues."
99117 msgstr ""
118 "Rendu SDL logiciel\n"
119 "\n"
120 "Souvent plus lent, mais plus stable."
100121
101122 #: ../../../src/DeviceList.cpp:59
102123 msgid ""
104125 "\n"
105126 "The default renderer that is often faster than the SDL software renderer."
106127 msgstr ""
107
108 #: ../../../src/EngineSettings.cpp:561
128 "Rendu SDL matériel\n"
129 "\n"
130 "Le rendu par défaut souvent plus rapide que le rendu SDL logiciel."
131
132 #: ../../../src/EngineSettings.cpp:572
109133 msgid "Adventurer"
110134 msgstr "Aventurier"
111135
112 #: ../../../src/Entity.cpp:511
136 #: ../../../src/Entity.cpp:522
113137 msgid "miss"
114138 msgstr "manqué"
115139
116 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
117 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
140 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
141 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
118142 #, c-format
119143 msgid "+%d HP"
120144 msgstr "+%d PV"
121145
122 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
123 #: ../../../src/StatBlock.cpp:822
146 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
147 #: ../../../src/StatBlock.cpp:830
124148 #, c-format
125149 msgid "+%d MP"
126150 msgstr "+%d PM"
127151
128 #: ../../../src/EventManager.cpp:738
152 #: ../../../src/EventManager.cpp:782
129153 msgid "Unknown destination"
130154 msgstr "Destination inconnue"
131155
132 #: ../../../src/GameStateConfigBase.cpp:89
133 #: ../../../src/GameStateConfigBase.cpp:110
156 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
157 msgid "Loading..."
158 msgstr "Chargement..."
159
160 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
161 msgid "Delete Save"
162 msgstr "Suppr. sauvegarde"
163
164 #: ../../../src/GameStateLoad.cpp:90
165 msgid "Delete this save?"
166 msgstr "Supprimer cette sauvegarde ?"
167
168 #: ../../../src/GameStateLoad.cpp:92
169 msgid "Exit to Title"
170 msgstr "Retour au menu"
171
172 #: ../../../src/GameStateLoad.cpp:95
173 msgid "New Game"
174 msgstr "Nouvelle partie"
175
176 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
177 msgid "Choose a Slot"
178 msgstr "Choisir une partie"
179
180 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
181 msgid "Enable a story mod to continue"
182 msgstr "Activez un mod scénario pour continuer"
183
184 #: ../../../src/GameStateLoad.cpp:597
185 msgid "Load Game"
186 msgstr "Charger la partie"
187
188 #: ../../../src/GameStateLoad.cpp:706
189 msgid "Entering game world..."
190 msgstr "Entrée dans le monde du jeu..."
191
192 #: ../../../src/GameStateLoad.cpp:709
193 msgid "Loading saved game..."
194 msgstr "Chargement d'une partie..."
195
196 #: ../../../src/GameStateLoad.cpp:742
197 msgid "Invalid save"
198 msgstr "Sauvegarde invalide"
199
200 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
201 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
202 #: ../../../src/MenuPowers.cpp:1543
203 #, c-format
204 msgid "Level %d"
205 msgstr "Niveau %d"
206
207 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
208 #: ../../../src/MenuConfig.cpp:244
209 msgid "Cancel"
210 msgstr "Annuler"
211
212 #: ../../../src/GameStateNew.cpp:68
213 msgid "Create"
214 msgstr "Créer"
215
216 #: ../../../src/GameStateNew.cpp:76
217 msgid "Randomize"
218 msgstr "Aléatoire"
219
220 #: ../../../src/GameStateNew.cpp:92
221 msgid "Choose a Portrait"
222 msgstr "Choisissez un portrait"
223
224 #: ../../../src/GameStateNew.cpp:96
225 msgid "Choose a Name"
226 msgstr "Choisissez un nom"
227
228 #: ../../../src/GameStateNew.cpp:100
229 msgid "Permadeath?"
230 msgstr "Mort permanente ? "
231
232 #: ../../../src/GameStateNew.cpp:104
233 msgid "Choose a Class"
234 msgstr "Choisissez une classe"
235
236 #: ../../../src/GameStateTitle.cpp:107
237 msgid "Play Game"
238 msgstr "Jouer"
239
240 #: ../../../src/GameStateTitle.cpp:110
241 msgid "Enable a core mod to continue"
242 msgstr "Activez un mod de base pour continuer"
243
244 #: ../../../src/GameStateTitle.cpp:114
245 msgid "Configuration"
246 msgstr "Configuration"
247
248 #: ../../../src/GameStateTitle.cpp:117
249 msgid "Credits"
250 msgstr "Crédits"
251
252 #: ../../../src/GameStateTitle.cpp:120
253 msgid "Exit Game"
254 msgstr "Quitter"
255
256 #: ../../../src/InputState.cpp:407
257 msgid "Accept"
258 msgstr "Accepter"
259
260 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
261 #: ../../../src/SDLInputState.cpp:698
262 msgid "Up"
263 msgstr "Haut"
264
265 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
266 #: ../../../src/SDLInputState.cpp:676
267 msgid "Down"
268 msgstr "Bas"
269
270 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
271 #: ../../../src/SDLInputState.cpp:683
272 msgid "Left"
273 msgstr "Gauche"
274
275 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
276 #: ../../../src/SDLInputState.cpp:693
277 msgid "Right"
278 msgstr "Droite"
279
280 #: ../../../src/InputState.cpp:412
281 msgid "Bar1"
282 msgstr "Emplacement 1"
283
284 #: ../../../src/InputState.cpp:413
285 msgid "Bar2"
286 msgstr "Emplacement 2"
287
288 #: ../../../src/InputState.cpp:414
289 msgid "Bar3"
290 msgstr "Emplacement 3"
291
292 #: ../../../src/InputState.cpp:415
293 msgid "Bar4"
294 msgstr "Emplacement 4"
295
296 #: ../../../src/InputState.cpp:416
297 msgid "Bar5"
298 msgstr "Emplacement 5"
299
300 #: ../../../src/InputState.cpp:417
301 msgid "Bar6"
302 msgstr "Emplacement 6"
303
304 #: ../../../src/InputState.cpp:418
305 msgid "Bar7"
306 msgstr "Emplacement 7"
307
308 #: ../../../src/InputState.cpp:419
309 msgid "Bar8"
310 msgstr "Emplacement 8"
311
312 #: ../../../src/InputState.cpp:420
313 msgid "Bar9"
314 msgstr "Emplacement 9"
315
316 #: ../../../src/InputState.cpp:421
317 msgid "Bar0"
318 msgstr "Emplacement 0"
319
320 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
321 #: ../../../src/MenuCharacter.cpp:54
322 msgid "Character"
323 msgstr "Personnage"
324
325 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
326 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
327 msgid "Inventory"
328 msgstr "Inventaire"
329
330 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
331 #: ../../../src/MenuPowers.cpp:167
332 msgid "Powers"
333 msgstr "Pouvoirs"
334
335 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
336 #: ../../../src/MenuLog.cpp:72
337 msgid "Log"
338 msgstr "Journal"
339
340 #: ../../../src/InputState.cpp:426
341 msgid "Main1"
342 msgstr "Principal 1"
343
344 #: ../../../src/InputState.cpp:427
345 msgid "Main2"
346 msgstr "Principal 2"
347
348 #: ../../../src/InputState.cpp:428
349 msgid "Ctrl"
350 msgstr "Ctrl"
351
352 #: ../../../src/InputState.cpp:429
353 msgid "Shift"
354 msgstr "Maj"
355
356 #: ../../../src/InputState.cpp:430
357 msgid "Alt"
358 msgstr "Alt"
359
360 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
361 msgid "Delete"
362 msgstr "Supprimer"
363
364 #: ../../../src/InputState.cpp:432
365 msgid "ActionBar Accept"
366 msgstr "Barre d'action Accepter"
367
368 #: ../../../src/InputState.cpp:433
369 msgid "ActionBar Left"
370 msgstr "Barre d'action Gauche"
371
372 #: ../../../src/InputState.cpp:434
373 msgid "ActionBar Right"
374 msgstr "Barre d'action Droite"
375
376 #: ../../../src/InputState.cpp:435
377 msgid "ActionBar Use"
378 msgstr "Barre d'action Utiliser"
379
380 #: ../../../src/InputState.cpp:436
381 msgid "Developer Menu"
382 msgstr "Menu développeur"
383
384 #: ../../../src/InputState.cpp:438
385 msgid "Left Mouse"
386 msgstr "Clic gauche"
387
388 #: ../../../src/InputState.cpp:439
389 msgid "Middle Mouse"
390 msgstr "Clic molette"
391
392 #: ../../../src/InputState.cpp:440
393 msgid "Right Mouse"
394 msgstr "Clic droit"
395
396 #: ../../../src/InputState.cpp:441
397 msgid "Wheel Up"
398 msgstr "Molette haut"
399
400 #: ../../../src/InputState.cpp:442
401 msgid "Wheel Down"
402 msgstr "Molette bas"
403
404 #: ../../../src/InputState.cpp:443
405 msgid "Mouse X1"
406 msgstr "Souris X1"
407
408 #: ../../../src/InputState.cpp:444
409 msgid "Mouse X2"
410 msgstr "Souris X2"
411
412 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
413 msgid "Unknown Item"
414 msgstr "Objet inconnu"
415
416 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
417 #, c-format
418 msgid "%d%% Speed"
419 msgstr "%d%% Vitesse"
420
421 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
422 #, c-format
423 msgid "%d%% Attack Speed"
424 msgstr "%d%%Vitesse d'attaque"
425
426 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
427 #: ../../../src/MenuPowers.cpp:832
428 #, c-format
429 msgid "Resistance (%s)"
430 msgstr "Résistance (%s)"
431
432 #: ../../../src/ItemManager.cpp:714
433 #, c-format
434 msgid "Requires %s"
435 msgstr "Nécessite %s"
436
437 #: ../../../src/ItemManager.cpp:763
438 msgid "Quest Item"
439 msgstr "Objet de quête"
440
441 #: ../../../src/ItemManager.cpp:790
442 #, c-format
443 msgid "Quality: %s"
444 msgstr "Qualité : %s"
445
446 #: ../../../src/ItemManager.cpp:815
447 #, c-format
448 msgid "Absorb: %d-%d"
449 msgstr "Absorbe : %d-%d"
450
451 #: ../../../src/ItemManager.cpp:817
452 #, c-format
453 msgid "Absorb: %d"
454 msgstr "Absorbe : %d"
455
456 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
457 #: ../../../src/MenuPowers.cpp:1133
458 #, c-format
459 msgid "Requires Level %d"
460 msgstr "Nécessite le niveau %d"
461
462 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
463 #: ../../../src/MenuPowers.cpp:1124
464 #, c-format
465 msgid "Requires %s %d"
466 msgstr "Nécessite %s %d"
467
468 #: ../../../src/ItemManager.cpp:879
469 #, c-format
470 msgid "Requires Class: %s"
471 msgstr "Classe nécessaire : %s"
472
473 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
474 #, c-format
475 msgid "Buy Price: %d %s"
476 msgstr "Prix d'achat : %d %s"
477
478 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
479 #, c-format
480 msgid "Buy Price: %d %s each"
481 msgstr "Prix d'achat : %d %s par pièce"
482
483 #: ../../../src/ItemManager.cpp:916
484 #, c-format
485 msgid "Sell Price: %d %s"
486 msgstr "Prix de vente : %d %s"
487
488 #: ../../../src/ItemManager.cpp:918
489 #, c-format
490 msgid "Sell Price: %d %s each"
491 msgstr "Prix de vente : %d %s par pièce"
492
493 #: ../../../src/ItemManager.cpp:927
494 msgid "Set:"
495 msgstr "Ensemble :"
496
497 #: ../../../src/ItemManager.cpp:934
498 #, c-format
499 msgid "%d items:"
500 msgstr "%dobjets :"
501
502 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
503 #, c-format
504 msgid "Press [%s] to use"
505 msgstr "Appuyer sur [%s] pour utiliser"
506
507 #: ../../../src/ItemManager.cpp:951
508 #, c-format
509 msgid "Press [%s] to read"
510 msgstr "Appuyer sur [%s] pour lire"
511
512 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
513 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
514 #, c-format
515 msgid "Hotkey: %s"
516 msgstr "Touche : %s"
517
518 #: ../../../src/MenuActionBar.cpp:599
519 msgid "Not enough MP."
520 msgstr "Pas assez de PM."
521
522 #: ../../../src/MenuActiveEffects.cpp:124
523 #, c-format
524 msgid "x%d"
525 msgstr "x%d"
526
527 #: ../../../src/MenuActiveEffects.cpp:219
528 msgid "Remaining:"
529 msgstr "Restants :"
530
531 #: ../../../src/MenuActiveEffects.cpp:225
532 #, c-format
533 msgid "x%d stacks"
534 msgstr "x%dpiles d'objets"
535
536 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
537 msgid "Name"
538 msgstr "Nom"
539
540 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
541 msgid "Level"
542 msgstr "Niveau"
543
544 #: ../../../src/MenuCharacter.cpp:310
545 #, c-format
546 msgid "%d unspent stat point"
547 msgstr "%d point de statistique inutilisé"
548
549 #: ../../../src/MenuCharacter.cpp:313
550 #, c-format
551 msgid "%d unspent stat points"
552 msgstr "%d points de statistique inutilisés"
553
554 #: ../../../src/MenuCharacter.cpp:355
555 #, c-format
556 msgid "Reduces the damage taken from \"%s\" elemental attacks."
557 msgstr "Réduit la quantité de dégât reçue des attaques élémentaires \"%s\"."
558
559 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
560 #, c-format
561 msgid "XP: %d"
562 msgstr "XP : %d"
563
564 #: ../../../src/MenuCharacter.cpp:367
565 #, c-format
566 msgid "Next: %d"
567 msgstr "Prochain : %d"
568
569 #: ../../../src/MenuCharacter.cpp:373
570 #, c-format
571 msgid "base (%d), bonus (%d)"
572 msgstr "base (%d), bonus (%d)"
573
574 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
575 msgid "Related stats:"
576 msgstr "Statistiques liées : "
577
578 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
579 #, c-format
580 msgid "Each level grants %d."
581 msgstr "Chaque niveau donne %d."
582
583 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
584 #, c-format
585 msgid "Each point of %s grants %d."
586 msgstr "Chaque point de %s donne %d."
587
588 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
589 msgid "Clear"
590 msgstr "Effacer"
591
592 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
593 msgid "Assign:"
594 msgstr "Assigner :"
595
596 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
134597 msgid "Defaults"
135598 msgstr "Par défaut"
136599
137 #: ../../../src/GameStateConfigBase.cpp:89
600 #: ../../../src/MenuConfig.cpp:123
138601 msgid "Reset ALL settings?"
139602 msgstr "Réinitaliser TOUS les réglages ?"
140603
141 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
604 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
142605 msgid "OK"
143606 msgstr "OK"
144607
145 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
146 #: ../../../src/InputState.cpp:401
147 msgid "Cancel"
148 msgstr "Annuler"
149
150 #: ../../../src/GameStateConfigBase.cpp:160
151 #: ../../../src/GameStateConfigDesktop.cpp:130
608 #: ../../../src/MenuConfig.cpp:246
609 msgid "Continue"
610 msgstr "Continuer"
611
612 #: ../../../src/MenuConfig.cpp:248
613 msgid "Save Game"
614 msgstr "Sauvegarder la partie"
615
616 #: ../../../src/MenuConfig.cpp:291
617 msgid "Default"
618 msgstr "Défaut"
619
620 #: ../../../src/MenuConfig.cpp:291
621 msgid ""
622 "Show all loot tooltips, except for those that would be obscured by the "
623 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
624 msgstr ""
625 "Montrer toutes les infobulles de butin, sauf celles qui pourraient être "
626 "masquées par le joueur ou un ennemi. Afficher toutes les infobulles de butin"
627 " temporairement avec la touche 'Alt'."
628
629 #: ../../../src/MenuConfig.cpp:292
630 msgid "Show all"
631 msgstr "Afficher tout"
632
633 #: ../../../src/MenuConfig.cpp:292
634 msgid ""
635 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
636 msgstr ""
637 "Toujours montrer les infobulles de butin. Cacher temporairement les "
638 "infobulles de butin avec la touche 'Alt'."
639
640 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
641 msgid "Hidden"
642 msgstr "Caché"
643
644 #: ../../../src/MenuConfig.cpp:293
645 msgid ""
646 "Always hide loot tooltips, except for when a piece of loot is hovered with "
647 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
648 msgstr ""
649 "Toujours masquer les infobulles de butin, sauf lorsqu'une pièce du butin est"
650 " survolée par la souris. Montrer temporairement toutes les infobulles de "
651 "butin avec la touche 'Alt'."
652
653 #: ../../../src/MenuConfig.cpp:296
654 msgid "Visible"
655 msgstr "Visible"
656
657 #: ../../../src/MenuConfig.cpp:297
658 msgid "Visible (2x zoom)"
659 msgstr "Visible (zoom x2)"
660
661 #: ../../../src/MenuConfig.cpp:301
662 msgid ""
663 "Controls the type of warning to be activated when the player is below the "
664 "low health threshold."
665 msgstr ""
666 "Contrôle le type d'alerte activée lorsque la santé du joueur est sous le "
667 "seuil de santé bas."
668
669 #: ../../../src/MenuConfig.cpp:302
670 msgid "- Display a message"
671 msgstr "- Afficher un message"
672
673 #: ../../../src/MenuConfig.cpp:303
674 msgid "- Play a sound"
675 msgstr "- Jouer un son"
676
677 #: ../../../src/MenuConfig.cpp:304
678 msgid "- Change the cursor"
679 msgstr "- Changer le curseur"
680
681 #: ../../../src/MenuConfig.cpp:306
682 msgid "Disabled"
683 msgstr "Désactivé"
684
685 #: ../../../src/MenuConfig.cpp:307
686 msgid "All"
687 msgstr "Tout"
688
689 #: ../../../src/MenuConfig.cpp:308
690 msgid "Message & Cursor"
691 msgstr "Message & Curseur"
692
693 #: ../../../src/MenuConfig.cpp:309
694 msgid "Message & Sound"
695 msgstr "Message & Son"
696
697 #: ../../../src/MenuConfig.cpp:310
698 msgid "Sound & Cursor"
699 msgstr "Son & Curseur"
700
701 #: ../../../src/MenuConfig.cpp:311
702 msgid "Message"
703 msgstr "Message"
704
705 #: ../../../src/MenuConfig.cpp:312
706 msgid "Cursor"
707 msgstr "Curseur"
708
709 #: ../../../src/MenuConfig.cpp:313
710 msgid "Sound"
711 msgstr "Son"
712
713 #: ../../../src/MenuConfig.cpp:319
714 msgid ""
715 "When the player's health drops below the given threshold, the low health "
716 "notifications are triggered if one or more of them is enabled."
717 msgstr ""
718 "Lorsque la santé du joueur tombe en dessous du seuil donné, les "
719 "notifications de santé basse sont déclenchées si au moins l'une d'entre "
720 "elles est activée."
721
722 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
723 msgid "Exit"
724 msgstr "Quitter"
725
726 #: ../../../src/MenuConfig.cpp:333
727 msgid "Video"
728 msgstr "Vidéo"
729
730 #: ../../../src/MenuConfig.cpp:334
152731 msgid "Audio"
153732 msgstr "Audio"
154733
155 #: ../../../src/GameStateConfigBase.cpp:161
156 #: ../../../src/GameStateConfigDesktop.cpp:131
734 #: ../../../src/MenuConfig.cpp:335
157735 msgid "Interface"
158736 msgstr "Interface"
159737
160 #: ../../../src/GameStateConfigBase.cpp:162
161 #: ../../../src/GameStateConfigDesktop.cpp:134
738 #: ../../../src/MenuConfig.cpp:336
739 msgid "Input"
740 msgstr "Entrée"
741
742 #: ../../../src/MenuConfig.cpp:337
743 msgid "Keybindings"
744 msgstr "Commandes"
745
746 #: ../../../src/MenuConfig.cpp:338
162747 msgid "Mods"
163748 msgstr "Mods"
164749
165 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
750 #: ../../../src/MenuConfig.cpp:350
751 msgid "Paused"
752 msgstr "En pause"
753
754 #: ../../../src/MenuConfig.cpp:353
755 msgid "Time Played"
756 msgstr "Temps de jeu"
757
758 #: ../../../src/MenuConfig.cpp:359
759 msgid "Renderer"
760 msgstr "Rendu"
761
762 #: ../../../src/MenuConfig.cpp:360
763 msgid "Full Screen Mode"
764 msgstr "Mode plein écran"
765
766 #: ../../../src/MenuConfig.cpp:361
767 msgid "Hardware surfaces"
768 msgstr "Surfaces matérielles"
769
770 #: ../../../src/MenuConfig.cpp:362
771 msgid "V-Sync"
772 msgstr "V-Sync"
773
774 #: ../../../src/MenuConfig.cpp:363
775 msgid "Texture Filtering"
776 msgstr "Filtrage de textures"
777
778 #: ../../../src/MenuConfig.cpp:364
779 msgid "DPI scaling"
780 msgstr "Echelonnage DPI"
781
782 #: ../../../src/MenuConfig.cpp:365
783 msgid "Parallax Layers"
784 msgstr "Couches parallax"
785
786 #: ../../../src/MenuConfig.cpp:366
787 msgid "Allow changing gamma"
788 msgstr "Régler le gamma"
789
790 #: ../../../src/MenuConfig.cpp:367
791 msgid "Gamma"
792 msgstr "Gamma"
793
794 #: ../../../src/MenuConfig.cpp:369
795 msgid "Sound Volume"
796 msgstr "Volume des sons"
797
798 #: ../../../src/MenuConfig.cpp:370
166799 msgid "Music Volume"
167800 msgstr "Volume de la musique"
168801
169 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
170 msgid "Sound Volume"
171 msgstr "Volume des sons"
172
173 #: ../../../src/GameStateConfigBase.cpp:257
802 #: ../../../src/MenuConfig.cpp:372
174803 msgid "Language"
175804 msgstr "Langues"
176805
177 #: ../../../src/GameStateConfigBase.cpp:266
806 #: ../../../src/MenuConfig.cpp:373
178807 msgid "Show FPS"
179808 msgstr "Afficher les FPS"
180809
181 #: ../../../src/GameStateConfigBase.cpp:270
810 #: ../../../src/MenuConfig.cpp:374
811 msgid "Hardware mouse cursor"
812 msgstr "Curseur matériel"
813
814 #: ../../../src/MenuConfig.cpp:375
182815 msgid "Colorblind Mode"
183816 msgstr "Mode daltonien"
184817
185 #: ../../../src/GameStateConfigBase.cpp:274
186 msgid "Hardware mouse cursor"
187 msgstr ""
188
189 #: ../../../src/GameStateConfigBase.cpp:278
818 #: ../../../src/MenuConfig.cpp:376
190819 msgid "Developer Mode"
191820 msgstr "Mode développeur"
192821
193 #: ../../../src/GameStateConfigBase.cpp:282
822 #: ../../../src/MenuConfig.cpp:377
194823 msgid "Subtitles"
195 msgstr ""
196
197 #: ../../../src/GameStateConfigBase.cpp:286
198 msgid "Active Mods"
199 msgstr "Mods actifs"
200
201 #: ../../../src/GameStateConfigBase.cpp:295
202 msgid "Available Mods"
203 msgstr "Mods disponibles"
204
205 #: ../../../src/GameStateConfigBase.cpp:314
206 msgid "<< Disable"
207 msgstr "<< Désactiver"
208
209 #: ../../../src/GameStateConfigBase.cpp:320
210 msgid "Enable >>"
211 msgstr "Activer >>"
212
213 #: ../../../src/GameStateConfigBase.cpp:873
214 msgid "Version:"
215 msgstr ""
216
217 #: ../../../src/GameStateConfigBase.cpp:878
218 msgid "Game:"
219 msgstr ""
220
221 #: ../../../src/GameStateConfigBase.cpp:883
222 msgid "Engine version:"
223 msgstr ""
224
225 #: ../../../src/GameStateConfigBase.cpp:891
226 msgid "Requires mods:"
227 msgstr ""
228
229 #: ../../../src/GameStateConfigDesktop.cpp:83
230 #: ../../../src/GameStateConfigDesktop.cpp:751
231 msgid "Clear"
232 msgstr "Effacer"
233
234 #: ../../../src/GameStateConfigDesktop.cpp:83
235 #: ../../../src/GameStateConfigDesktop.cpp:749
236 msgid "Assign:"
237 msgstr ""
238
239 #: ../../../src/GameStateConfigDesktop.cpp:128
240 msgid "Video"
241 msgstr "Vidéo"
242
243 #: ../../../src/GameStateConfigDesktop.cpp:132
244 msgid "Input"
245 msgstr "Entrée"
246
247 #: ../../../src/GameStateConfigDesktop.cpp:133
248 msgid "Keybindings"
249 msgstr "Commandes"
250
251 #: ../../../src/GameStateConfigDesktop.cpp:188
824 msgstr "Sous-titres"
825
826 #: ../../../src/MenuConfig.cpp:378
827 msgid "Loot tooltip visibility"
828 msgstr "Visibilité infobulle butin"
829
830 #: ../../../src/MenuConfig.cpp:379
831 msgid "Mini-map mode"
832 msgstr "Mode mini-carte"
833
834 #: ../../../src/MenuConfig.cpp:380
835 msgid "Always show stat bar labels"
836 msgstr "Toujours montrer les étiquettes de la barre de statistiques"
837
838 #: ../../../src/MenuConfig.cpp:381
839 msgid "Allow stat bar auto-hiding"
840 msgstr "Autorise le masquage auto de la barre de statut"
841
842 #: ../../../src/MenuConfig.cpp:382
843 msgid "Show combat text"
844 msgstr "Afficher le texte des combats"
845
846 #: ../../../src/MenuConfig.cpp:383
847 msgid "Automatically equip items"
848 msgstr "Équiper automatiquement les objets"
849
850 #: ../../../src/MenuConfig.cpp:384
851 msgid "Show hidden entity markers"
852 msgstr "Montre les marqueurs d'entité cachés"
853
854 #: ../../../src/MenuConfig.cpp:385
855 msgid "Low health notification"
856 msgstr "Notification de santé basse"
857
858 #: ../../../src/MenuConfig.cpp:386
859 msgid "Low health threshold"
860 msgstr "Seuil de santé basse"
861
862 #: ../../../src/MenuConfig.cpp:389
863 msgid "Joystick"
864 msgstr "Manette"
865
866 #: ../../../src/MenuConfig.cpp:390
867 msgid "Move hero using mouse"
868 msgstr "Déplacement du héro à la souris"
869
870 #: ../../../src/MenuConfig.cpp:391
871 msgid "Mouse aim"
872 msgstr "Visée à la souris"
873
874 #: ../../../src/MenuConfig.cpp:392
875 msgid "Do not use mouse"
876 msgstr "Ne pas utiliser la souris"
877
878 #: ../../../src/MenuConfig.cpp:393
879 msgid "Swap mouse movement button"
880 msgstr "Inverser les boutons de mouvement de la souris"
881
882 #: ../../../src/MenuConfig.cpp:394
883 msgid "Attack with mouse movement"
884 msgstr "Attaquer avec les mouvement de la souris"
885
886 #: ../../../src/MenuConfig.cpp:395
887 msgid "Joystick Deadzone"
888 msgstr "Zone morte du joystick"
889
890 #: ../../../src/MenuConfig.cpp:405
891 #, c-format
892 msgid "Primary binding: %s"
893 msgstr "Affectation principale : %s"
894
895 #: ../../../src/MenuConfig.cpp:406
896 #, c-format
897 msgid "Alternate binding: %s"
898 msgstr "Affectation secondaire : %s"
899
900 #: ../../../src/MenuConfig.cpp:407
901 #, c-format
902 msgid "Joystick binding: %s"
903 msgstr "Affectation de la manette : %s"
904
905 #: ../../../src/MenuConfig.cpp:508
252906 msgid ""
253907 "Will try to store surfaces in video memory versus system memory. The effect "
254908 "this has on performance depends on the renderer."
255909 msgstr ""
256
257 #: ../../../src/GameStateConfigDesktop.cpp:189
910 "Tentera de stocker les surfaces dans la mémoire vidéo plutôt que la mémoire "
911 "du système. L'effet sur les performances dépend de la carte vidéo."
912
913 #: ../../../src/MenuConfig.cpp:509
258914 msgid ""
259915 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
260916 "windowed mode or input lag."
261917 msgstr ""
262
263 #: ../../../src/GameStateConfigDesktop.cpp:190
918 "Evite l'apparition de déchirement d'écran. A désactiver si vous subissez des"
919 " 'bégaiements' en mode fenêtré ou des retards de saisie. "
920
921 #: ../../../src/MenuConfig.cpp:510
264922 msgid ""
265923 "When enabled, this uses the screen DPI in addition to the window dimensions "
266924 "to scale the rendering resolution. Otherwise, only the window dimensions are"
267925 " used."
268926 msgstr ""
269
270 #: ../../../src/GameStateConfigDesktop.cpp:191
927 "Si activé, utilise le DPI de votre écran en plus de la taille de la fenêtre "
928 "pour échelonner la résolution de rendu. Autrement, seule les dimensions de "
929 "la fenêtre sont utilisées."
930
931 #: ../../../src/MenuConfig.cpp:511
271932 msgid ""
272933 "This enables parallax (non-tile) layers. Disabling this setting can improve "
273934 "performance in some cases."
274935 msgstr ""
275
276 #: ../../../src/GameStateConfigDesktop.cpp:192
277 msgid "Experimental"
278 msgstr "Expérimental"
279
280 #: ../../../src/GameStateConfigDesktop.cpp:193
281 msgid "For handheld devices"
282 msgstr "Pour les terminaux portables"
283
284 #: ../../../src/GameStateConfigDesktop.cpp:211
285 msgid "Renderer"
286 msgstr ""
287
288 #: ../../../src/GameStateConfigDesktop.cpp:227
289 msgid "Full Screen Mode"
290 msgstr "Mode plein écran"
291
292 #: ../../../src/GameStateConfigDesktop.cpp:231
293 msgid "Move hero using mouse"
294 msgstr "Déplacement du héro à la souris"
295
296 #: ../../../src/GameStateConfigDesktop.cpp:235
297 msgid "Hardware surfaces"
298 msgstr "Hardware surfaces"
299
300 #: ../../../src/GameStateConfigDesktop.cpp:239
301 msgid "V-Sync"
302 msgstr "V-Sync"
303
304 #: ../../../src/GameStateConfigDesktop.cpp:243
305 msgid "Texture Filtering"
306 msgstr "Filtrage de textures"
307
308 #: ../../../src/GameStateConfigDesktop.cpp:247
309 msgid "DPI scaling"
310 msgstr ""
311
312 #: ../../../src/GameStateConfigDesktop.cpp:251
313 msgid "Parallax Layers"
314 msgstr ""
315
316 #: ../../../src/GameStateConfigDesktop.cpp:255
317 msgid "Allow changing gamma"
318 msgstr "Régler le gamma"
319
320 #: ../../../src/GameStateConfigDesktop.cpp:259
321 msgid "Gamma"
322 msgstr "Gamma"
323
324 #: ../../../src/GameStateConfigDesktop.cpp:263
325 msgid "Use joystick"
326 msgstr "Utiliser une manette"
327
328 #: ../../../src/GameStateConfigDesktop.cpp:267
329 msgid "Joystick"
330 msgstr "Manette"
331
332 #: ../../../src/GameStateConfigDesktop.cpp:283
333 msgid "Mouse aim"
334 msgstr "Visée à la souris"
335
336 #: ../../../src/GameStateConfigDesktop.cpp:287
337 msgid "Do not use mouse"
338 msgstr ""
339
340 #: ../../../src/GameStateConfigDesktop.cpp:291
341 msgid "Joystick Deadzone"
342 msgstr ""
343
344 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
345 msgid "Loading..."
346 msgstr "Chargement..."
347
348 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
349 msgid "Delete Save"
350 msgstr "Suppr. sauvegarde"
351
352 #: ../../../src/GameStateLoad.cpp:88
353 msgid "Delete this save?"
354 msgstr "Supprimer cette sauvegarde ?"
355
356 #: ../../../src/GameStateLoad.cpp:90
357 msgid "Exit to Title"
358 msgstr "Retour au menu"
359
360 #: ../../../src/GameStateLoad.cpp:93
361 msgid "New Game"
362 msgstr "Nouvelle partie"
363
364 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
365 msgid "Choose a Slot"
366 msgstr "Choisir une partie"
367
368 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
369 msgid "Enable a story mod to continue"
370 msgstr "Activez un mod scenario pour continuer"
371
372 #: ../../../src/GameStateLoad.cpp:589
373 msgid "Load Game"
374 msgstr "Charger la partie"
375
376 #: ../../../src/GameStateLoad.cpp:695
377 msgid "Entering game world..."
378 msgstr "Entrée dans le monde du jeu..."
379
380 #: ../../../src/GameStateLoad.cpp:698
381 msgid "Loading saved game..."
382 msgstr "Chargement d'une partie..."
383
384 #: ../../../src/GameStateLoad.cpp:731
385 msgid "Invalid save"
386 msgstr ""
387
388 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
389 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
390 #: ../../../src/MenuPowers.cpp:1542
391 #, c-format
392 msgid "Level %d"
393 msgstr "Niveau %d"
394
395 #: ../../../src/GameStateNew.cpp:68
396 msgid "Create"
397 msgstr "Créer"
398
399 #: ../../../src/GameStateNew.cpp:76
400 msgid "Randomize"
401 msgstr ""
402
403 #: ../../../src/GameStateNew.cpp:92
404 msgid "Choose a Portrait"
405 msgstr "Choisissez un portrait"
406
407 #: ../../../src/GameStateNew.cpp:96
408 msgid "Choose a Name"
409 msgstr "Choisissez un nom"
410
411 #: ../../../src/GameStateNew.cpp:100
412 msgid "Permadeath?"
413 msgstr "Mort permanente ? "
414
415 #: ../../../src/GameStateNew.cpp:104
416 msgid "Choose a Class"
417 msgstr "Choisir une classe"
418
419 #: ../../../src/GameStateTitle.cpp:108
420 msgid "Play Game"
421 msgstr "Jouer"
422
423 #: ../../../src/GameStateTitle.cpp:111
424 msgid "Enable a core mod to continue"
425 msgstr "Activez un mod de base pour continuer"
426
427 #: ../../../src/GameStateTitle.cpp:115
428 msgid "Configuration"
429 msgstr "Configuration"
430
431 #: ../../../src/GameStateTitle.cpp:118
432 msgid "Credits"
433 msgstr "Crédits"
434
435 #: ../../../src/GameStateTitle.cpp:121
436 msgid "Exit Game"
437 msgstr "Quitter"
438
439 #: ../../../src/InputState.cpp:402
440 msgid "Accept"
441 msgstr "Accepter"
442
443 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
444 msgid "Up"
445 msgstr "Haut"
446
447 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
448 msgid "Down"
449 msgstr "Bas"
450
451 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
452 msgid "Left"
453 msgstr "Gauche"
454
455 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
456 msgid "Right"
457 msgstr "Droite"
458
459 #: ../../../src/InputState.cpp:407
460 msgid "Bar1"
461 msgstr "Emplacement 1"
462
463 #: ../../../src/InputState.cpp:408
464 msgid "Bar2"
465 msgstr "Emplacement 2"
466
467 #: ../../../src/InputState.cpp:409
468 msgid "Bar3"
469 msgstr "Emplacement 3"
470
471 #: ../../../src/InputState.cpp:410
472 msgid "Bar4"
473 msgstr "Emplacement 4"
474
475 #: ../../../src/InputState.cpp:411
476 msgid "Bar5"
477 msgstr "Emplacement 5"
478
479 #: ../../../src/InputState.cpp:412
480 msgid "Bar6"
481 msgstr "Emplacement 6"
482
483 #: ../../../src/InputState.cpp:413
484 msgid "Bar7"
485 msgstr "Emplacement 7"
486
487 #: ../../../src/InputState.cpp:414
488 msgid "Bar8"
489 msgstr "Emplacement 8"
490
491 #: ../../../src/InputState.cpp:415
492 msgid "Bar9"
493 msgstr "Emplacement 9"
494
495 #: ../../../src/InputState.cpp:416
496 msgid "Bar0"
497 msgstr "Emplacement 0"
498
499 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
500 #: ../../../src/MenuCharacter.cpp:54
501 msgid "Character"
502 msgstr "Personnage"
503
504 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
505 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
506 msgid "Inventory"
507 msgstr "Inventaire"
508
509 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
510 #: ../../../src/MenuPowers.cpp:168
511 msgid "Powers"
512 msgstr "Pouvoirs"
513
514 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
515 #: ../../../src/MenuLog.cpp:72
516 msgid "Log"
517 msgstr "Journal"
518
519 #: ../../../src/InputState.cpp:421
520 msgid "Main1"
521 msgstr "Principal 1"
522
523 #: ../../../src/InputState.cpp:422
524 msgid "Main2"
525 msgstr "Principal 2"
526
527 #: ../../../src/InputState.cpp:423
528 msgid "Ctrl"
529 msgstr "Ctrl"
530
531 #: ../../../src/InputState.cpp:424
532 msgid "Shift"
533 msgstr "Maj"
534
535 #: ../../../src/InputState.cpp:425
536 msgid "Alt"
537 msgstr "Alt"
538
539 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
540 msgid "Delete"
541 msgstr "Supprimer"
542
543 #: ../../../src/InputState.cpp:427
544 msgid "ActionBar Accept"
545 msgstr ""
546
547 #: ../../../src/InputState.cpp:428
548 msgid "ActionBar Left"
549 msgstr "Barre d'action Gauche"
550
551 #: ../../../src/InputState.cpp:429
552 msgid "ActionBar Right"
553 msgstr "Barre d'action Droite"
554
555 #: ../../../src/InputState.cpp:430
556 msgid "ActionBar Use"
557 msgstr "Utilisation de la barre d'action"
558
559 #: ../../../src/InputState.cpp:431
560 msgid "Developer Menu"
561 msgstr "Menu du développeur"
562
563 #: ../../../src/InputState.cpp:433
564 msgid "Left Mouse"
565 msgstr "Clic gauche"
566
567 #: ../../../src/InputState.cpp:434
568 msgid "Middle Mouse"
569 msgstr "Clic molette"
570
571 #: ../../../src/InputState.cpp:435
572 msgid "Right Mouse"
573 msgstr ""
574
575 #: ../../../src/InputState.cpp:436
576 msgid "Wheel Up"
577 msgstr ""
578
579 #: ../../../src/InputState.cpp:437
580 msgid "Wheel Down"
581 msgstr ""
582
583 #: ../../../src/InputState.cpp:438
584 msgid "Mouse X1"
585 msgstr ""
586
587 #: ../../../src/InputState.cpp:439
588 msgid "Mouse X2"
589 msgstr ""
590
591 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
592 msgid "Unknown Item"
593 msgstr "Objet inconnu"
594
595 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
596 #, c-format
597 msgid "%d%% Speed"
598 msgstr ""
599
600 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
601 #, c-format
602 msgid "%d%% Attack Speed"
603 msgstr ""
604
605 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
606 #: ../../../src/MenuPowers.cpp:833
607 #, c-format
608 msgid "Resistance (%s)"
609 msgstr ""
610
611 #: ../../../src/ItemManager.cpp:684
612 #, c-format
613 msgid "Requires %s"
614 msgstr ""
615
616 #: ../../../src/ItemManager.cpp:733
617 msgid "Quest Item"
618 msgstr ""
619
620 #: ../../../src/ItemManager.cpp:760
621 #, c-format
622 msgid "Quality: %s"
623 msgstr "Qualité: %s"
624
625 #: ../../../src/ItemManager.cpp:785
626 #, c-format
627 msgid "Absorb: %d-%d"
628 msgstr "Absorbe : %d-%d"
629
630 #: ../../../src/ItemManager.cpp:787
631 #, c-format
632 msgid "Absorb: %d"
633 msgstr "Absorbe : %d"
634
635 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
636 #: ../../../src/MenuPowers.cpp:1134
637 #, c-format
638 msgid "Requires Level %d"
639 msgstr "Nécessite le niveau %d"
640
641 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
642 #: ../../../src/MenuPowers.cpp:1125
643 #, c-format
644 msgid "Requires %s %d"
645 msgstr ""
646
647 #: ../../../src/ItemManager.cpp:849
648 #, c-format
649 msgid "Requires Class: %s"
650 msgstr ""
651
652 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
653 #, c-format
654 msgid "Buy Price: %d %s"
655 msgstr "Prix d'achat : %d %s"
656
657 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
658 #, c-format
659 msgid "Buy Price: %d %s each"
660 msgstr "Prix d'achat : %d %s par pièce"
661
662 #: ../../../src/ItemManager.cpp:886
663 #, c-format
664 msgid "Sell Price: %d %s"
665 msgstr "Prix de vente : %d %s"
666
667 #: ../../../src/ItemManager.cpp:888
668 #, c-format
669 msgid "Sell Price: %d %s each"
670 msgstr "Prix de vente : %d %s par pièce"
671
672 #: ../../../src/ItemManager.cpp:897
673 msgid "Set:"
674 msgstr ""
675
676 #: ../../../src/ItemManager.cpp:904
677 #, c-format
678 msgid "%d items:"
679 msgstr ""
680
681 #: ../../../src/ItemManager.cpp:917
682 #, c-format
683 msgid "Press [%s] to use"
684 msgstr ""
685
686 #: ../../../src/ItemManager.cpp:920
687 #, c-format
688 msgid "Press [%s] to read"
689 msgstr ""
690
691 #: ../../../src/MenuActionBar.cpp:87
692 msgid "Loot tooltip visibility"
693 msgstr ""
694
695 #: ../../../src/MenuActionBar.cpp:88
696 msgid "Mini-map mode"
697 msgstr ""
698
699 #: ../../../src/MenuActionBar.cpp:89
700 msgid "Always show stat bar labels"
701 msgstr "Toujours montrer les étiquettes de la bare de statistiques"
702
703 #: ../../../src/MenuActionBar.cpp:90
704 msgid "Show combat text"
705 msgstr "Afficher le texte des combats"
706
707 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
708 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
709 #, c-format
710 msgid "Hotkey: %s"
711 msgstr "Touche: %s"
712
713 #: ../../../src/MenuActionBar.cpp:474
714 #, c-format
715 msgid "Default. Temporarily show all loot tooltips with '%s'."
716 msgstr ""
717
718 #: ../../../src/MenuActionBar.cpp:476
719 #, c-format
720 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
721 msgstr ""
722
723 #: ../../../src/MenuActionBar.cpp:478
724 #, c-format
725 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
726 msgstr ""
727
728 #: ../../../src/MenuActionBar.cpp:482
729 msgid "Visible"
730 msgstr ""
731
732 #: ../../../src/MenuActionBar.cpp:484
733 msgid "Visible (2x zoom)"
734 msgstr ""
735
736 #: ../../../src/MenuActionBar.cpp:486
737 msgid "Hidden"
738 msgstr ""
739
740 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
741 msgid "Enabled"
742 msgstr ""
743
744 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
745 msgid "Disabled"
746 msgstr ""
747
748 #: ../../../src/MenuActionBar.cpp:657
749 msgid "Not enough MP."
750 msgstr ""
751
752 #: ../../../src/MenuActiveEffects.cpp:124
753 #, c-format
754 msgid "x%d"
755 msgstr ""
756
757 #: ../../../src/MenuActiveEffects.cpp:219
758 msgid "Remaining:"
759 msgstr ""
760
761 #: ../../../src/MenuActiveEffects.cpp:225
762 #, c-format
763 msgid "x%d stacks"
764 msgstr ""
765
766 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
767 msgid "Name"
768 msgstr "Nom"
769
770 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
771 msgid "Level"
772 msgstr "Niveau"
773
774 #: ../../../src/MenuCharacter.cpp:310
775 #, c-format
776 msgid "%d unspent stat point"
777 msgstr ""
778
779 #: ../../../src/MenuCharacter.cpp:313
780 #, c-format
781 msgid "%d unspent stat points"
782 msgstr ""
783
784 #: ../../../src/MenuCharacter.cpp:355
785 #, c-format
786 msgid "Reduces the damage taken from \"%s\" elemental attacks."
787 msgstr ""
788
789 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
790 #, c-format
791 msgid "XP: %d"
792 msgstr "XP : %d"
793
794 #: ../../../src/MenuCharacter.cpp:367
795 #, c-format
796 msgid "Next: %d"
797 msgstr "Prochain : %d"
798
799 #: ../../../src/MenuCharacter.cpp:373
800 #, c-format
801 msgid "base (%d), bonus (%d)"
802 msgstr "base (%d), bonus (%d)"
803
804 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
805 msgid "Related stats:"
806 msgstr "Statistiques liées: "
807
808 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
809 #, c-format
810 msgid "Each level grants %d."
811 msgstr ""
812
813 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
814 #, c-format
815 msgid "Each point of %s grants %d."
816 msgstr ""
936 "Active les couches parallax. La désactivation de cette option peut améliorer"
937 " les performances dans certains cas."
938
939 #: ../../../src/MenuConfig.cpp:512
940 msgid ""
941 "Enables the below setting that controls the screen gamma level. The behavior"
942 " of the gamma setting can vary between platforms."
943 msgstr ""
944 "Active le réglage ci-dessous qui contrôle le niveau gamma de l'écran. Le "
945 "comportement du paramètre gamma peut varier selon les plateformes."
946
947 #: ../../../src/MenuConfig.cpp:513
948 msgid ""
949 "Provides additional text for information that is primarily conveyed through "
950 "color."
951 msgstr ""
952 "Fournit du texte supplémentaire aux informations principalement transmises "
953 "par la couleur."
954
955 #: ../../../src/MenuConfig.cpp:514
956 msgid ""
957 "Some mods will automatically hide the stat bars when they are inactive. "
958 "Disabling this option will keep them displayed at all times."
959 msgstr ""
960 "Certains mods cachent automatiquement les barres de statistiques quand ils "
961 "sont inactifs. Désactiver cette option les affichera en permanence."
962
963 #: ../../../src/MenuConfig.cpp:515
964 msgid ""
965 "When enabled, empty equipment slots will be filled with applicable items "
966 "when they are obtained."
967 msgstr ""
968 "En activant cette option, les emplacements d'équipement vides seront remplis"
969 " des objets adéquats obtenus."
970
971 #: ../../../src/MenuConfig.cpp:516
972 msgid ""
973 "Shows a marker above enemies, allies, and the player when they are obscured "
974 "by tall objects."
975 msgstr ""
976 "Place un marqueur au-dessus des ennemis, des alliés et du joueur lorsqu'ils "
977 "sont masqués par de grands objets."
978
979 #: ../../../src/MenuConfig.cpp:517
980 msgid ""
981 "This allows the game to be controlled entirely with the keyboard (or "
982 "joystick)."
983 msgstr ""
984 "Cela permet au jeu d'être entièrement contrôlé via le clavier (ou le "
985 "joystick)."
986
987 #: ../../../src/MenuConfig.cpp:518
988 msgid ""
989 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
990 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
991 "instead of 'Main1'."
992 msgstr ""
993 "Lorsque 'Déplacer le héros à la souris' est activé, ce paramètre contrôle si"
994 " 'Principal1' ou 'Principal2' est utilisé pour déplacer le héros. S'il est "
995 "activé, 'Principal2' déplacera le héros à la place de 'Principal1'."
996
997 #: ../../../src/MenuConfig.cpp:519
998 msgid ""
999 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
1000 "assigned to the movement button can be used by targeting an enemy. If this "
1001 "setting is disabled, it is required to use 'Shift' to access the Power "
1002 "assigned to the movement button."
1003 msgstr ""
1004 "Si 'Déplacer le héros avec la souris' est activé, ce paramètre contrôle si "
1005 "la Pouvoir assigné au bouton de mouvement peut être utilisé pour cibler un "
1006 "ennemi. S'il est désactivé, il est nécessaire d'utiliser la touche 'Shift' "
1007 "pour activer le Pouvoir assigné au bouton de mouvement."
1008
1009 #: ../../../src/MenuConfig.cpp:520
1010 msgid ""
1011 "The player's attacks will be aimed in the direction of the mouse cursor when"
1012 " this is enabled."
1013 msgstr ""
1014 "L'attaque du joueur sera dirigée dans la direction du curseur de la souris "
1015 "si ce paramètre est activé."
1016
1017 #: ../../../src/MenuConfig.cpp:571
1018 msgid "Active Mods"
1019 msgstr "Mods actifs"
1020
1021 #: ../../../src/MenuConfig.cpp:580
1022 msgid "Available Mods"
1023 msgstr "Mods disponibles"
1024
1025 #: ../../../src/MenuConfig.cpp:599
1026 msgid "<< Disable"
1027 msgstr "<< Désactiver"
1028
1029 #: ../../../src/MenuConfig.cpp:605
1030 msgid "Enable >>"
1031 msgstr "Activer >>"
1032
1033 #: ../../../src/MenuConfig.cpp:1436
1034 msgid "Version:"
1035 msgstr "Version :"
1036
1037 #: ../../../src/MenuConfig.cpp:1441
1038 msgid "Game:"
1039 msgstr "Jeu :"
1040
1041 #: ../../../src/MenuConfig.cpp:1446
1042 msgid "Engine version:"
1043 msgstr "Version du moteur :"
1044
1045 #: ../../../src/MenuConfig.cpp:1454
1046 msgid "Requires mods:"
1047 msgstr "Mods nécessaires :"
1048
1049 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
1050 msgid "(none)"
1051 msgstr "(rien)"
1052
1053 #: ../../../src/MenuConfig.cpp:1579
1054 msgid "Save & Exit"
1055 msgstr "Sauvegarder & Quitter"
8171056
8181057 #: ../../../src/MenuDevConsole.cpp:63
8191058 msgid "Execute"
8261065 #: ../../../src/MenuDevConsole.cpp:141
8271066 #, c-format
8281067 msgid "Use '%s' to inspect with the cursor."
829 msgstr ""
1068 msgstr "Utilisez '%s' pour inspecter avec le curseur."
8301069
8311070 #: ../../../src/MenuDevConsole.cpp:146
8321071 msgid "Arguments with spaces should be enclosed with double quotes. Example:"
8361075
8371076 #: ../../../src/MenuDevConsole.cpp:147
8381077 msgid "Type 'help' to get a list of commands."
839 msgstr ""
1078 msgstr "Tapez 'help' pour obtenir une liste des commandes."
8401079
8411080 #: ../../../src/MenuDevConsole.cpp:209 ../../../src/MenuDevConsole.cpp:213
8421081 msgid "px"
843 msgstr ""
1082 msgstr "px"
8441083
8451084 #: ../../../src/MenuDevConsole.cpp:224
8461085 msgid "Distance"
847 msgstr ""
1086 msgstr "Distance"
8481087
8491088 #: ../../../src/MenuDevConsole.cpp:239 ../../../src/MenuDevConsole.cpp:286
8501089 msgid "Entity"
851 msgstr ""
1090 msgstr "Entité"
8521091
8531092 #: ../../../src/MenuDevConsole.cpp:261 ../../../src/MenuDevConsole.cpp:268
8541093 msgid "none"
855 msgstr ""
1094 msgstr "aucun"
8561095
8571096 #: ../../../src/MenuDevConsole.cpp:262 ../../../src/MenuDevConsole.cpp:264
8581097 msgid "wall"
859 msgstr ""
1098 msgstr "mur"
8601099
8611100 #: ../../../src/MenuDevConsole.cpp:263 ../../../src/MenuDevConsole.cpp:265
8621101 msgid "short wall / pit"
863 msgstr ""
1102 msgstr "petit mur / fossé"
8641103
8651104 #: ../../../src/MenuDevConsole.cpp:266
8661105 msgid "entity"
867 msgstr ""
1106 msgstr "entité"
8681107
8691108 #: ../../../src/MenuDevConsole.cpp:267
8701109 msgid "entity, ally"
871 msgstr ""
1110 msgstr "entité, allié"
8721111
8731112 #: ../../../src/MenuDevConsole.cpp:274
8741113 msgid "Tile"
875 msgstr ""
1114 msgstr "Tuile"
8761115
8771116 #: ../../../src/MenuDevConsole.cpp:360
8781117 msgid "adds a power to the action bar"
879 msgstr ""
1118 msgstr "ajoute un pouvoir à la barre d'action"
8801119
8811120 #: ../../../src/MenuDevConsole.cpp:361
8821121 msgid "turns on/off the display of the FPS counter"
883 msgstr ""
1122 msgstr "allume ou éteint l'affichage du compteur de FPS"
8841123
8851124 #: ../../../src/MenuDevConsole.cpp:362
8861125 msgid "turns on/off all of the HUD elements"
8951134 "Prints a list of powers that match a search term. No search term will list "
8961135 "all items"
8971136 msgstr ""
1137 "Imprime une liste des pouvoirs correspondant au terme recherché. Sans terme "
1138 "recherché, affiche tous les objets."
8981139
8991140 #: ../../../src/MenuDevConsole.cpp:365
9001141 msgid "Prints out all the map filenames located in the \"maps/\" directory."
901 msgstr ""
1142 msgstr "Imprime tous les fichiers cartes situés dans le répertoire \"/maps\"."
9021143
9031144 #: ../../../src/MenuDevConsole.cpp:366
9041145 msgid ""
9421183
9431184 #: ../../../src/MenuDevConsole.cpp:385
9441185 msgid "Toggled the FPS counter"
945 msgstr ""
1186 msgstr "Alterne le compteur FPS"
9461187
9471188 #: ../../../src/MenuDevConsole.cpp:534
9481189 msgid "ERROR: Incorrect number of arguments"
949 msgstr ""
1190 msgstr "ERREUR : nombre d'arguments incorrect"
9501191
9511192 #: ../../../src/MenuDevConsole.cpp:536 ../../../src/MenuDevConsole.cpp:564
9521193 msgid "HINT:"
953 msgstr ""
1194 msgstr "SUGGESTION :"
9541195
9551196 #: ../../../src/MenuDevConsole.cpp:536
9561197 msgid "<id>"
957 msgstr ""
1198 msgstr "<id>"
9581199
9591200 #: ../../../src/MenuDevConsole.cpp:552
9601201 #, c-format
9611202 msgid "ERROR: '%s' is not a valid event key"
962 msgstr "ERREUR: '%s' n'est pas une clé d'évènement valide"
1203 msgstr "ERREUR : '%s' n'est pas une clé d'évènement valide"
9631204
9641205 #: ../../../src/MenuDevConsole.cpp:562
9651206 msgid "ERROR: Too few arguments"
966 msgstr "ERREUR: Trop peu d'arguments"
1207 msgstr "ERREUR : Trop peu d'arguments"
9671208
9681209 #: ../../../src/MenuDevConsole.cpp:564
9691210 msgid "<key>=<val> <key>=<val> ..."
970 msgstr ""
1211 msgstr "<key>=<val> <key>=<val> ..."
9711212
9721213 #: ../../../src/MenuDevConsole.cpp:569
9731214 msgid "ERROR: Unknown command"
974 msgstr "ERREUR: Commande inconnue"
1215 msgstr "ERREUR : Commande inconnue"
9751216
9761217 #: ../../../src/MenuDevConsole.cpp:571
9771218 msgid "HINT: Type help"
9781219 msgstr "SUGGESTION : tapez help"
9791220
980 #: ../../../src/MenuEnemy.cpp:138
1221 #: ../../../src/MenuEnemy.cpp:162
9811222 #, c-format
9821223 msgid "%s level %d"
9831224 msgstr "%s niveau %d"
9841225
985 #: ../../../src/MenuEnemy.cpp:162
1226 #: ../../../src/MenuEnemy.cpp:186
9861227 msgid "Dead"
9871228 msgstr "Mort"
9881229
989 #: ../../../src/MenuEnemy.cpp:164
1230 #: ../../../src/MenuEnemy.cpp:188
9901231 msgid "Destroyed"
991 msgstr ""
992
993 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
994 msgid "Paused"
995 msgstr "En pause"
996
997 #: ../../../src/MenuExit.cpp:91
998 msgid "Save & Exit"
999 msgstr "Sauvegarder & Quitter"
1000
1001 #: ../../../src/MenuExit.cpp:92
1002 msgid "Exit"
1003 msgstr "Quitter"
1004
1005 #: ../../../src/MenuExit.cpp:96
1006 msgid "Continue"
1007 msgstr "Continuer"
1008
1009 #: ../../../src/MenuInventory.cpp:73
1010 msgid "Automatically equip items"
1011 msgstr "Équiper automatiquement les objets"
1012
1013 #: ../../../src/MenuInventory.cpp:188
1232 msgstr "Détruit"
1233
1234 #: ../../../src/MenuInventory.cpp:177
10141235 #, c-format
10151236 msgid "Lost %d%% of %s."
1016 msgstr ""
1017
1018 #: ../../../src/MenuInventory.cpp:195
1237 msgstr "Perte %d %% de %s."
1238
1239 #: ../../../src/MenuInventory.cpp:184
10191240 #, c-format
10201241 msgid "Lost %d%% of total XP."
1021 msgstr ""
1022
1023 #: ../../../src/MenuInventory.cpp:200
1242 msgstr "Perte de %d %% des XP totaux."
1243
1244 #: ../../../src/MenuInventory.cpp:189
10241245 #, c-format
10251246 msgid "Lost %d%% of current level XP."
1026 msgstr ""
1027
1028 #: ../../../src/MenuInventory.cpp:226
1247 msgstr "Perte de %d %% du niveau d'XP actuel."
1248
1249 #: ../../../src/MenuInventory.cpp:215
10291250 #, c-format
10301251 msgid "Lost %s."
10311252 msgstr "Perdu %s."
10321253
1033 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1254 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10341255 #, c-format
10351256 msgid "%d %s"
10361257 msgstr "%d %s"
10371258
1038 #: ../../../src/MenuInventory.cpp:317
1259 #: ../../../src/MenuInventory.cpp:300
10391260 msgid "Pick up item(s):"
1040 msgstr "Rammaser les objet(s):"
1041
1042 #: ../../../src/MenuInventory.cpp:318
1261 msgstr "Ramasser les objet(s) :"
1262
1263 #: ../../../src/MenuInventory.cpp:301
10431264 msgid "Use or equip item:"
1044 msgstr "Utilisez ou équipez un objet:"
1045
1046 #: ../../../src/MenuInventory.cpp:319
1265 msgstr "Utiliser ou équiper un objet :"
1266
1267 #: ../../../src/MenuInventory.cpp:302
10471268 #, c-format
10481269 msgid "%s modifiers"
1049 msgstr "modificateurs de %s"
1050
1051 #: ../../../src/MenuInventory.cpp:320
1270 msgstr "Modificateurs de %s"
1271
1272 #: ../../../src/MenuInventory.cpp:303
10521273 msgid "Select a quantity of item:"
1053 msgstr "Sélectionnez une quantitée d'objet:"
1054
1055 #: ../../../src/MenuInventory.cpp:323
1274 msgstr "Sélectionner une quantité d'objet :"
1275
1276 #: ../../../src/MenuInventory.cpp:306
10561277 msgid "Stash item stack:"
10571278 msgstr "Mettre au coffre la pile d'objets :"
10581279
1059 #: ../../../src/MenuInventory.cpp:325
1280 #: ../../../src/MenuInventory.cpp:308
10601281 msgid "Sell item stack:"
10611282 msgstr "Vendre la pile d'objets :"
10621283
1063 #: ../../../src/MenuInventory.cpp:592
1284 #: ../../../src/MenuInventory.cpp:574
10641285 msgid "You don't have enough of the required item."
10651286 msgstr "Vous n'avez pas l'objet nécessaire en quantité suffisante."
10661287
1067 #: ../../../src/MenuInventory.cpp:599
1288 #: ../../../src/MenuInventory.cpp:586
10681289 msgid "You can't use this item right now."
1069 msgstr ""
1070
1071 #: ../../../src/MenuInventory.cpp:611
1290 msgstr "Vous ne pouvez pas utiliser cet objet maintenant."
1291
1292 #: ../../../src/MenuInventory.cpp:598
10721293 msgid "This item can only be used from the action bar."
10731294 msgstr "Cet objet ne peut être utilisé que depuis la barre d'action."
10741295
1075 #: ../../../src/MenuInventory.cpp:729
1296 #: ../../../src/MenuInventory.cpp:716
10761297 msgid "Inventory is full."
10771298 msgstr "L'inventaire est complet."
10781299
1079 #: ../../../src/MenuInventory.cpp:849
1300 #: ../../../src/MenuInventory.cpp:841
10801301 #, c-format
10811302 msgid "Not enough %s."
1082 msgstr ""
1083
1084 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1303 msgstr "Pas assez de %s."
1304
1305 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
10851306 msgid "This item can not be sold."
1086 msgstr ""
1307 msgstr "Cet objet ne peut pas être vendu."
10871308
10881309 #: ../../../src/MenuLog.cpp:91
10891310 msgid "Notes"
10931314 msgid "Quests"
10941315 msgstr "Quêtes"
10951316
1096 #: ../../../src/MenuManager.cpp:286
1317 #: ../../../src/MenuManager.cpp:296
10971318 #, c-format
10981319 msgid "XP: %d/%d"
1099 msgstr "XP: %d/%d"
1100
1101 #: ../../../src/MenuManager.cpp:827
1320 msgstr "XP : %d/%d"
1321
1322 #: ../../../src/MenuManager.cpp:854
11021323 msgid "This item can not be dropped."
1103 msgstr ""
1324 msgstr "Cet objet ne peut pas être abandonné."
11041325
11051326 #: ../../../src/MenuNumPicker.cpp:59
11061327 msgid "Enter amount:"
11071328 msgstr "Saisir la quantité :"
11081329
1109 #: ../../../src/MenuPowers.cpp:787
1330 #: ../../../src/MenuPowers.cpp:786
11101331 msgid "Passive"
1111 msgstr ""
1112
1113 #: ../../../src/MenuPowers.cpp:792
1332 msgstr "Passif"
1333
1334 #: ../../../src/MenuPowers.cpp:791
11141335 #, c-format
11151336 msgid "Costs %d MP"
11161337 msgstr "Consomme %d PM"
11171338
1118 #: ../../../src/MenuPowers.cpp:796
1339 #: ../../../src/MenuPowers.cpp:795
11191340 #, c-format
11201341 msgid "Costs %d HP"
11211342 msgstr "Consomme %d PV"
11221343
1123 #: ../../../src/MenuPowers.cpp:801
1344 #: ../../../src/MenuPowers.cpp:800
11241345 msgid "Cooldown:"
1125 msgstr ""
1126
1127 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1346 msgstr "Rechargement :"
1347
1348 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11281349 msgid "Damage per second"
1129 msgstr "Dommages par secondes"
1130
1131 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1350 msgstr "Dégâts par seconde"
1351
1352 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11321353 msgid "HP per second"
11331354 msgstr "PV par seconde"
11341355
1135 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1356 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11361357 msgid "MP per second"
11371358 msgstr "PM par seconde"
11381359
1139 #: ../../../src/MenuPowers.cpp:885
1360 #: ../../../src/MenuPowers.cpp:884
11401361 msgid "Immobilize"
11411362 msgstr "Immobilise"
11421363
1143 #: ../../../src/MenuPowers.cpp:893
1364 #: ../../../src/MenuPowers.cpp:892
11441365 msgid "Immunity"
11451366 msgstr "Immunité"
11461367
1147 #: ../../../src/MenuPowers.cpp:896
1368 #: ../../../src/MenuPowers.cpp:895
11481369 msgid "Immunity to damage over time"
11491370 msgstr "Immunité aux dommages progressifs"
11501371
1151 #: ../../../src/MenuPowers.cpp:899
1372 #: ../../../src/MenuPowers.cpp:898
11521373 msgid "Immunity to slow"
11531374 msgstr "Immunité à la lenteur"
11541375
1155 #: ../../../src/MenuPowers.cpp:902
1376 #: ../../../src/MenuPowers.cpp:901
11561377 msgid "Immunity to stun"
11571378 msgstr "Immunité à l'étourdissement"
11581379
1159 #: ../../../src/MenuPowers.cpp:905
1380 #: ../../../src/MenuPowers.cpp:904
11601381 msgid "Immunity to HP steal"
11611382 msgstr "Immunité au vol de PV"
11621383
1163 #: ../../../src/MenuPowers.cpp:908
1384 #: ../../../src/MenuPowers.cpp:907
11641385 msgid "Immunity to MP steal"
11651386 msgstr "Immunité au vol de PM"
11661387
1167 #: ../../../src/MenuPowers.cpp:911
1388 #: ../../../src/MenuPowers.cpp:910
11681389 msgid "Immunity to knockback"
11691390 msgstr "Immunité au recul"
11701391
1171 #: ../../../src/MenuPowers.cpp:914
1392 #: ../../../src/MenuPowers.cpp:913
11721393 msgid "Immunity to damage reflection"
11731394 msgstr "Immunité au renvoi de dommage"
11741395
1175 #: ../../../src/MenuPowers.cpp:917
1396 #: ../../../src/MenuPowers.cpp:916
11761397 msgid "Stun"
11771398 msgstr "Étourdissement"
11781399
1179 #: ../../../src/MenuPowers.cpp:920
1400 #: ../../../src/MenuPowers.cpp:919
11801401 msgid "Automatic revive on death"
11811402 msgstr "Résurection automatique lors de la mort"
11821403
1183 #: ../../../src/MenuPowers.cpp:923
1404 #: ../../../src/MenuPowers.cpp:922
11841405 msgid "Convert"
11851406 msgstr "Convertir"
11861407
1187 #: ../../../src/MenuPowers.cpp:926
1408 #: ../../../src/MenuPowers.cpp:925
11881409 msgid "Fear"
11891410 msgstr "Peur"
11901411
1191 #: ../../../src/MenuPowers.cpp:929
1412 #: ../../../src/MenuPowers.cpp:928
11921413 msgid "Lifespan"
11931414 msgstr "Durée de vie"
11941415
1195 #: ../../../src/MenuPowers.cpp:953
1416 #: ../../../src/MenuPowers.cpp:952
11961417 msgid "Magical Shield"
11971418 msgstr "Bouclier magique"
11981419
1199 #: ../../../src/MenuPowers.cpp:982
1420 #: ../../../src/MenuPowers.cpp:981
12001421 msgid "Healing"
12011422 msgstr "Soin"
12021423
1203 #: ../../../src/MenuPowers.cpp:985
1424 #: ../../../src/MenuPowers.cpp:984
12041425 msgid "Knockback"
12051426 msgstr "Recul"
12061427
1207 #: ../../../src/MenuPowers.cpp:1010
1428 #: ../../../src/MenuPowers.cpp:1009
12081429 #, c-format
12091430 msgid "%d%% chance"
12101431 msgstr ""
12111432
1212 #: ../../../src/MenuPowers.cpp:1062
1433 #: ../../../src/MenuPowers.cpp:1061
12131434 msgid "Base Accuracy"
1214 msgstr ""
1215
1216 #: ../../../src/MenuPowers.cpp:1082
1435 msgstr "Précision de base"
1436
1437 #: ../../../src/MenuPowers.cpp:1081
12171438 msgid "Base Critical Chance"
12181439 msgstr "Chance criticales de base"
12191440
1220 #: ../../../src/MenuPowers.cpp:1090
1441 #: ../../../src/MenuPowers.cpp:1089
12211442 msgid "Ignores Absorbtion"
1222 msgstr "Ignore l'Absorption"
1223
1224 #: ../../../src/MenuPowers.cpp:1095
1443 msgstr "Ignore l'absorption"
1444
1445 #: ../../../src/MenuPowers.cpp:1094
12251446 msgid "Ignores Avoidance"
1226 msgstr ""
1227
1228 #: ../../../src/MenuPowers.cpp:1100
1447 msgstr "Ignore l'esquive"
1448
1449 #: ../../../src/MenuPowers.cpp:1099
12291450 #, c-format
12301451 msgid "%d%% Chance to crit slowed targets"
12311452 msgstr "%d%% chances de coup critique sur les cibles lentes"
12321453
1233 #: ../../../src/MenuPowers.cpp:1105
1454 #: ../../../src/MenuPowers.cpp:1104
12341455 #, c-format
12351456 msgid "Elemental Damage (%s)"
1236 msgstr ""
1237
1238 #: ../../../src/MenuPowers.cpp:1114
1457 msgstr "Dégâts élémentaires (%s)"
1458
1459 #: ../../../src/MenuPowers.cpp:1113
12391460 #, c-format
12401461 msgid "Requires a %s"
1241 msgstr ""
1242
1243 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1462 msgstr "Nécessite un(e) %s"
1463
1464 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12441465 #, c-format
12451466 msgid "Requires Power: %s"
1246 msgstr "Nécessite le pouvoir: %s"
1247
1248 #: ../../../src/MenuPowers.cpp:1163
1467 msgstr "Nécessite le pouvoir : %s"
1468
1469 #: ../../../src/MenuPowers.cpp:1162
12491470 msgid "Click to Unlock (uses 1 Skill Point)"
12501471 msgstr "Cliquez pour débloquer (utilise 1 point de compétence)"
12511472
1252 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1473 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12531474 msgid "Requires 1 Skill Point"
1254 msgstr ""
1255
1256 #: ../../../src/MenuPowers.cpp:1355
1475 msgstr "Nécessite 1 point de compétence"
1476
1477 #: ../../../src/MenuPowers.cpp:1354
12571478 #, c-format
12581479 msgid "%d unspent skill point"
1259 msgstr ""
1260
1261 #: ../../../src/MenuPowers.cpp:1358
1480 msgstr "%d point de compétence inutilisé"
1481
1482 #: ../../../src/MenuPowers.cpp:1357
12621483 #, c-format
12631484 msgid "%d unspent skill points"
1264 msgstr ""
1265
1266 #: ../../../src/MenuPowers.cpp:1388
1485 msgstr "%d points de compétence inutilisés"
1486
1487 #: ../../../src/MenuPowers.cpp:1387
12671488 msgid "Next Level:"
1268 msgstr ""
1269
1270 #: ../../../src/MenuStash.cpp:96
1271 msgid "Shared Stash"
1272 msgstr "Coffre commun"
1273
1274 #: ../../../src/MenuStash.cpp:209
1489 msgstr "Niveau suivant :"
1490
1491 #: ../../../src/MenuStash.cpp:53
1492 msgid "Private"
1493 msgstr "Privé"
1494
1495 #: ../../../src/MenuStash.cpp:55
1496 msgid "Shared"
1497 msgstr "Partagé"
1498
1499 #: ../../../src/MenuStash.cpp:103
1500 msgid "Stash"
1501 msgstr "Coffre"
1502
1503 #: ../../../src/MenuStash.cpp:258
12751504 msgid "Can not store quest items in the stash."
12761505 msgstr "Impossible de stocker l'objet d'une quête dans le coffre."
12771506
1278 #: ../../../src/MenuStash.cpp:219
1507 #: ../../../src/MenuStash.cpp:263
1508 msgid "This item can not be stored in the stash."
1509 msgstr "Cet objet ne peut pas être placé dans le coffre."
1510
1511 #: ../../../src/MenuStash.cpp:268
1512 msgid "This item can not be stored in the private stash."
1513 msgstr "Cet objet ne peut pas être placé dans le coffre privé."
1514
1515 #: ../../../src/MenuStash.cpp:273
1516 msgid "This item can not be stored in the shared stash."
1517 msgstr "Cet objet ne peut pas être placé dans le coffre partagé."
1518
1519 #: ../../../src/MenuStash.cpp:283
12791520 msgid "Stash is full."
1280 msgstr ""
1281
1282 #: ../../../src/MenuTalker.cpp:454
1521 msgstr "le coffre est complet."
1522
1523 #: ../../../src/MenuStash.cpp:340
1524 #, c-format
1525 msgid "Can not store item in stash: %s"
1526 msgstr "Impossible de placer l'objet dans le coffre : %s"
1527
1528 #: ../../../src/MenuTalker.cpp:447
1529 #, c-format
1530 msgid "<dialog node %d>"
1531 msgstr "<dialog node %d>"
1532
1533 #: ../../../src/MenuTalker.cpp:455
12831534 msgid "Trade"
12841535 msgstr "Commercer"
12851536
12871538 msgid "Buyback"
12881539 msgstr "Racheter"
12891540
1290 #: ../../../src/MenuVendor.cpp:279
1541 #: ../../../src/MenuVendor.cpp:281
12911542 msgid "Vendor"
12921543 msgstr "Vendeur"
12931544
1294 #: ../../../src/PowerManager.cpp:1136
1545 #: ../../../src/PowerManager.cpp:1170
12951546 #, c-format
12961547 msgid "+%d Shield"
12971548 msgstr "Bouclier +%d"
12981549
1299 #: ../../../src/PowerManager.cpp:1392
1550 #: ../../../src/PowerManager.cpp:1426
13001551 msgid "You are already transformed, untransform first."
13011552 msgstr "Vous êtes deja transformé, reprenez forme humaine avant."
13021553
1303 #: ../../../src/PowerManager.cpp:1404
1554 #: ../../../src/PowerManager.cpp:1438
13041555 msgid "Could not untransform at this position."
13051556 msgstr "Vous ne pouvez pas reprendre forme humaine à cette position."
13061557
13071558 #: ../../../src/QuestLog.cpp:234
13081559 msgid "Completed Quests"
1309 msgstr ""
1310
1311 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1560 msgstr "Quêtes terminées"
1561
1562 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13121563 msgid "Game saved."
13131564 msgstr "Jeu sauvegardé."
13141565
1315 #: ../../../src/SDLInputState.cpp:582
1566 #: ../../../src/SDLInputState.cpp:643
1567 msgid "BkSp"
1568 msgstr "RetArr"
1569
1570 #: ../../../src/SDLInputState.cpp:644
1571 msgid "Caps"
1572 msgstr "Maj"
1573
1574 #: ../../../src/SDLInputState.cpp:645
1575 msgid "Del"
1576 msgstr "Suppr"
1577
1578 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1579 msgid "End"
1580 msgstr "Fin"
1581
1582 #: ../../../src/SDLInputState.cpp:648
1583 msgid "Esc"
1584 msgstr "Ech"
1585
1586 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1587 msgid "Home"
1588 msgstr "Orig"
1589
1590 #: ../../../src/SDLInputState.cpp:650
1591 msgid "Ins"
1592 msgstr "Ins"
1593
1594 #: ../../../src/SDLInputState.cpp:651
1595 msgid "LAlt"
1596 msgstr "AltG"
1597
1598 #: ../../../src/SDLInputState.cpp:652
1599 msgid "LCtrl"
1600 msgstr "CtrlG"
1601
1602 #: ../../../src/SDLInputState.cpp:654
1603 msgid "LShft"
1604 msgstr "ShfG"
1605
1606 #: ../../../src/SDLInputState.cpp:655
1607 msgid "Num"
1608 msgstr "Num"
1609
1610 #: ../../../src/SDLInputState.cpp:656
1611 msgid "PgDn"
1612 msgstr "PgDn"
1613
1614 #: ../../../src/SDLInputState.cpp:657
1615 msgid "PgUp"
1616 msgstr "PgUp"
1617
1618 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1619 msgid "Pause"
1620 msgstr "Pause"
1621
1622 #: ../../../src/SDLInputState.cpp:659
1623 msgid "Print"
1624 msgstr "Imp"
1625
1626 #: ../../../src/SDLInputState.cpp:660
1627 msgid "RAlt"
1628 msgstr "AltD"
1629
1630 #: ../../../src/SDLInputState.cpp:661
1631 msgid "RCtrl"
1632 msgstr "CtrlD"
1633
1634 #: ../../../src/SDLInputState.cpp:662
1635 msgid "Ret"
1636 msgstr "Ret"
1637
1638 #: ../../../src/SDLInputState.cpp:664
1639 msgid "RShft"
1640 msgstr "ShfD"
1641
1642 #: ../../../src/SDLInputState.cpp:665
1643 msgid "SLock"
1644 msgstr "ArrDefil"
1645
1646 #: ../../../src/SDLInputState.cpp:666
1647 msgid "Spc"
1648 msgstr "Esp"
1649
1650 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1651 msgid "Tab"
1652 msgstr "Tab"
1653
1654 #: ../../../src/SDLInputState.cpp:673
13161655 msgid "Backspace"
1317 msgstr ""
1318
1319 #: ../../../src/SDLInputState.cpp:583
1656 msgstr "Retour arrière"
1657
1658 #: ../../../src/SDLInputState.cpp:674
13201659 msgid "CapsLock"
1321 msgstr ""
1322
1323 #: ../../../src/SDLInputState.cpp:586
1324 msgid "End"
1325 msgstr ""
1326
1327 #: ../../../src/SDLInputState.cpp:587
1660 msgstr "Verr Maj"
1661
1662 #: ../../../src/SDLInputState.cpp:678
13281663 msgid "Escape"
1329 msgstr ""
1330
1331 #: ../../../src/SDLInputState.cpp:588
1332 msgid "Home"
1333 msgstr ""
1334
1335 #: ../../../src/SDLInputState.cpp:589
1664 msgstr "Échap"
1665
1666 #: ../../../src/SDLInputState.cpp:680
13361667 msgid "Insert"
1337 msgstr ""
1338
1339 #: ../../../src/SDLInputState.cpp:590
1668 msgstr "Inser"
1669
1670 #: ../../../src/SDLInputState.cpp:681
13401671 msgid "Left Alt"
1341 msgstr ""
1342
1343 #: ../../../src/SDLInputState.cpp:591
1672 msgstr "Alt gauche"
1673
1674 #: ../../../src/SDLInputState.cpp:682
13441675 msgid "Left Ctrl"
1345 msgstr ""
1346
1347 #: ../../../src/SDLInputState.cpp:593
1676 msgstr "Ctrl gauche"
1677
1678 #: ../../../src/SDLInputState.cpp:684
13481679 msgid "Left Shift"
1349 msgstr ""
1350
1351 #: ../../../src/SDLInputState.cpp:594
1680 msgstr "Maj gauche"
1681
1682 #: ../../../src/SDLInputState.cpp:685
13521683 msgid "NumLock"
1353 msgstr ""
1354
1355 #: ../../../src/SDLInputState.cpp:595
1684 msgstr "Ver Num"
1685
1686 #: ../../../src/SDLInputState.cpp:686
13561687 msgid "PageDown"
1357 msgstr ""
1358
1359 #: ../../../src/SDLInputState.cpp:596
1688 msgstr "PgSuiv"
1689
1690 #: ../../../src/SDLInputState.cpp:687
13601691 msgid "PageUp"
1361 msgstr ""
1362
1363 #: ../../../src/SDLInputState.cpp:597
1364 msgid "Pause"
1365 msgstr ""
1366
1367 #: ../../../src/SDLInputState.cpp:598
1692 msgstr "PgPréc"
1693
1694 #: ../../../src/SDLInputState.cpp:689
13681695 msgid "PrintScreen"
1369 msgstr ""
1370
1371 #: ../../../src/SDLInputState.cpp:599
1696 msgstr "Impr Écran"
1697
1698 #: ../../../src/SDLInputState.cpp:690
13721699 msgid "Right Alt"
1373 msgstr ""
1374
1375 #: ../../../src/SDLInputState.cpp:600
1700 msgstr "Alt droit"
1701
1702 #: ../../../src/SDLInputState.cpp:691
13761703 msgid "Right Ctrl"
1377 msgstr ""
1378
1379 #: ../../../src/SDLInputState.cpp:601
1704 msgstr "Ctrl droit"
1705
1706 #: ../../../src/SDLInputState.cpp:692
13801707 msgid "Return"
1381 msgstr ""
1382
1383 #: ../../../src/SDLInputState.cpp:603
1708 msgstr "Entrée"
1709
1710 #: ../../../src/SDLInputState.cpp:694
13841711 msgid "Right Shift"
1385 msgstr ""
1386
1387 #: ../../../src/SDLInputState.cpp:604
1712 msgstr "Maj droit"
1713
1714 #: ../../../src/SDLInputState.cpp:695
13881715 msgid "ScrollLock"
1389 msgstr ""
1390
1391 #: ../../../src/SDLInputState.cpp:605
1716 msgstr "Arrêt défil"
1717
1718 #: ../../../src/SDLInputState.cpp:696
13921719 msgid "Space"
1393 msgstr ""
1394
1395 #: ../../../src/SDLInputState.cpp:606
1396 msgid "Tab"
1397 msgstr ""
1398
1399 #: ../../../src/SDLInputState.cpp:620
1720 msgstr "Espace"
1721
1722 #: ../../../src/SDLInputState.cpp:710
1723 #, c-format
1724 msgid "M%d"
1725 msgstr "M%d"
1726
1727 #: ../../../src/SDLInputState.cpp:716
14001728 #, c-format
14011729 msgid "Mouse %d"
1402 msgstr ""
1403
1404 #: ../../../src/SDLInputState.cpp:628
1730 msgstr "Souris %d"
1731
1732 #: ../../../src/SDLInputState.cpp:726
1733 #, c-format
1734 msgid "JX%d-"
1735 msgstr "JX%d-"
1736
1737 #: ../../../src/SDLInputState.cpp:728
14051738 #, c-format
14061739 msgid "Axis %d -"
14071740 msgstr "Axe %d -"
14081741
1409 #: ../../../src/SDLInputState.cpp:630
1742 #: ../../../src/SDLInputState.cpp:732
1743 #, c-format
1744 msgid "JX%d+"
1745 msgstr "JX%d+"
1746
1747 #: ../../../src/SDLInputState.cpp:734
14101748 #, c-format
14111749 msgid "Axis %d +"
14121750 msgstr "Axe %d +"
14131751
1414 #: ../../../src/SDLInputState.cpp:633
1752 #: ../../../src/SDLInputState.cpp:739
1753 #, c-format
1754 msgid "JB%d"
1755 msgstr "JB%d"
1756
1757 #: ../../../src/SDLInputState.cpp:741
14151758 #, c-format
14161759 msgid "Button %d"
14171760 msgstr "Bouton %d"
14181761
1419 #: ../../../src/SDLInputState.cpp:637
1420 msgid "(none)"
1421 msgstr "(rien)"
1422
1423 #: ../../../src/SDLInputState.cpp:677
1762 #: ../../../src/SDLInputState.cpp:788
14241763 msgid "Touch control D-Pad"
1425 msgstr ""
1426
1427 #: ../../../src/SDLInputState.cpp:701
1764 msgstr "Touch control D-Pad"
1765
1766 #: ../../../src/SDLInputState.cpp:812
14281767 msgid "Touch control buttons"
1429 msgstr ""
1430
1431 #: ../../../src/SDLInputState.cpp:716
1768 msgstr "Touch control buttons"
1769
1770 #: ../../../src/SDLInputState.cpp:827
14321771 msgid "Tap"
14331772 msgstr "Touchez"
14341773
1435 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1436 #: ../../../src/SDLInputState.cpp:768
1774 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1775 #, c-format
1776 msgid "Can not bind: %s"
1777 msgstr "Impossible d'affecter : %s"
1778
1779 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1780 #: ../../../src/SDLInputState.cpp:901
14371781 #, c-format
14381782 msgid "'%s' is no longer bound to:"
1439 msgstr ""
1783 msgstr "'%s' n'est plus assigné à :"
14401784
14411785 #: ../../../src/Stats.cpp:38
14421786 msgid "Max HP"
1443 msgstr ""
1787 msgstr "PV max"
14441788
14451789 #: ../../../src/Stats.cpp:39
14461790 msgid "Total amount of HP."
1447 msgstr ""
1791 msgstr "Nombre total de PV."
14481792
14491793 #: ../../../src/Stats.cpp:43
14501794 msgid "HP Regen"
1451 msgstr ""
1795 msgstr "Régénération PV"
14521796
14531797 #: ../../../src/Stats.cpp:44
14541798 msgid "Ticks of HP regen per minute."
1455 msgstr "Quantité de PV regénérés par minute."
1799 msgstr "Quantité de PV régénérés par minute."
14561800
14571801 #: ../../../src/Stats.cpp:48
14581802 msgid "Max MP"
1459 msgstr ""
1803 msgstr "PM max"
14601804
14611805 #: ../../../src/Stats.cpp:49
14621806 msgid "Total amount of MP."
1463 msgstr ""
1807 msgstr "Nombre total de PM."
14641808
14651809 #: ../../../src/Stats.cpp:53
14661810 msgid "MP Regen"
1467 msgstr ""
1811 msgstr "Régénération PM"
14681812
14691813 #: ../../../src/Stats.cpp:54
14701814 msgid "Ticks of MP regen per minute."
1471 msgstr "Quanité de PM regénérés par minute."
1815 msgstr "Quantité de PM régénérés par minute."
14721816
14731817 #: ../../../src/Stats.cpp:58
14741818 msgid "Accuracy"
1475 msgstr ""
1819 msgstr "Précision"
14761820
14771821 #: ../../../src/Stats.cpp:59
14781822 msgid ""
14791823 "Accuracy rating. The enemy's Avoidance rating is subtracted from this value "
14801824 "to calculate your likeliness to land a direct hit."
14811825 msgstr ""
1826 "Score de précision. Le score d'esquive de l'ennemi est soustrait à cette "
1827 "valeur pour calculer votre probabilité de porter un coup direct."
14821828
14831829 #: ../../../src/Stats.cpp:63
14841830 msgid "Avoidance"
1485 msgstr ""
1831 msgstr "Esquive"
14861832
14871833 #: ../../../src/Stats.cpp:64
14881834 msgid ""
14891835 "Avoidance rating. This value is subtracted from the enemy's Accuracy rating "
14901836 "to calculate their likeliness to land a direct hit."
14911837 msgstr ""
1838 "Score d'esquive. Cette valeur est soustraite au score de précision de "
1839 "l'ennemi pour calculer sa probabilité de porter un coup direct."
14921840
14931841 #: ../../../src/Stats.cpp:68
14941842 msgid "Absorb Min"
1495 msgstr ""
1843 msgstr "Absorption min"
14961844
14971845 #: ../../../src/Stats.cpp:69 ../../../src/Stats.cpp:74
14981846 msgid "Reduces the amount of damage taken."
1499 msgstr ""
1847 msgstr "Réduit la quantité de dégât reçue."
15001848
15011849 #: ../../../src/Stats.cpp:73
15021850 msgid "Absorb Max"
1503 msgstr ""
1851 msgstr "Absorption max"
15041852
15051853 #: ../../../src/Stats.cpp:78
15061854 msgid "Critical Hit Chance"
15081856
15091857 #: ../../../src/Stats.cpp:79
15101858 msgid "Chance for an attack to do extra damage."
1511 msgstr ""
1859 msgstr "Chance pour une attaque de faire des dégâts supplémentaires."
15121860
15131861 #: ../../../src/Stats.cpp:83
15141862 msgid "Bonus XP"
1515 msgstr ""
1863 msgstr "Bonus XP"
15161864
15171865 #: ../../../src/Stats.cpp:84
15181866 msgid "Increases the XP gained per kill."
1519 msgstr ""
1867 msgstr "Augmente l'XP gagnée pour chaque mort."
15201868
15211869 #: ../../../src/Stats.cpp:88
15221870 #, c-format
15231871 msgid "Bonus %s"
1524 msgstr ""
1872 msgstr "Bonus %s"
15251873
15261874 #: ../../../src/Stats.cpp:89
15271875 #, c-format
15281876 msgid "Increases the %s found per drop."
1529 msgstr ""
1877 msgstr "Augmente %s trouvé dans chaque butin."
15301878
15311879 #: ../../../src/Stats.cpp:93
15321880 msgid "Item Find Chance"
1533 msgstr ""
1881 msgstr "Chance de trouver un objet"
15341882
15351883 #: ../../../src/Stats.cpp:94
15361884 msgid "Increases the chance that an enemy will drop an item."
1537 msgstr ""
1885 msgstr "Augmente les chances qu'un ennemi laisse un objet."
15381886
15391887 #: ../../../src/Stats.cpp:98
15401888 msgid "Stealth"
1541 msgstr ""
1889 msgstr "Furtivité"
15421890
15431891 #: ../../../src/Stats.cpp:99
15441892 msgid "Increases your ability to move undetected."
1545 msgstr ""
1893 msgstr "Augmente votre capacité à vous déplacer sans être détecté."
15461894
15471895 #: ../../../src/Stats.cpp:103
15481896 msgid "Poise"
1549 msgstr ""
1897 msgstr "Équilibre"
15501898
15511899 #: ../../../src/Stats.cpp:104
15521900 msgid "Reduces your chance of stumbling when hit."
1553 msgstr ""
1901 msgstr "Réduit vos risques de trébucher quand vous êtes touché."
15541902
15551903 #: ../../../src/Stats.cpp:108
15561904 msgid "Missile Reflect Chance"
15621910
15631911 #: ../../../src/Stats.cpp:113
15641912 msgid "Damage Reflection"
1565 msgstr "Renvoi de Dommages"
1913 msgstr "Renvoi de dégâts"
15661914
15671915 #: ../../../src/Stats.cpp:114
15681916 msgid "Deals a percentage of damage taken back to the attacker."
15701918
15711919 #: ../../../src/Stats.cpp:118
15721920 msgid "HP Steal"
1573 msgstr ""
1921 msgstr "Vol de PV"
15741922
15751923 #: ../../../src/Stats.cpp:119
15761924 msgid "Percentage of HP stolen per hit."
1577 msgstr ""
1925 msgstr "Pourcentage de PV volé par coup."
15781926
15791927 #: ../../../src/Stats.cpp:123
15801928 msgid "MP Steal"
1581 msgstr ""
1929 msgstr "Vol de PM"
15821930
15831931 #: ../../../src/Stats.cpp:124
15841932 msgid "Percentage of MP stolen per hit."
1585 msgstr ""
1933 msgstr "Pourcentage de PM volé par coup."
15861934
15871935 #: ../../../src/Stats.cpp:128
15881936 msgid "Base HP"
15941942
15951943 #: ../../../src/Utils.cpp:346
15961944 msgid "k"
1597 msgstr ""
1598
1599 #: ../../../src/Utils.cpp:580
1945 msgstr "k"
1946
1947 #: ../../../src/Utils.cpp:616
16001948 #, c-format
16011949 msgid "%s second"
1602 msgstr ""
1603
1604 #: ../../../src/Utils.cpp:583
1950 msgstr "%s seconde"
1951
1952 #: ../../../src/Utils.cpp:619
16051953 #, c-format
16061954 msgid "%s seconds"
1607 msgstr ""
1955 msgstr "%s secondes"
16081956
16091957 #: ../../../src/Version.cpp:139
16101958 msgid "or newer"
1611 msgstr ""
1959 msgstr "ou plus récent"
16121960
16131961 #: ../../../src/Version.cpp:142
16141962 msgid "or older"
1615 msgstr ""
1963 msgstr "ou plus ancien"
44 #
55 # Translators:
66 # Justin Jacobs <jajdorkster@gmail.com>, 2018
7 # GunChleoc, 2018
7 # GunChleoc, 2020
88 #
99 #, fuzzy
1010 msgid ""
1111 msgstr ""
1212 "Project-Id-Version: PACKAGE VERSION\n"
1313 "Report-Msgid-Bugs-To: \n"
14 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
14 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1515 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
16 "Last-Translator: GunChleoc, 2018\n"
16 "Last-Translator: GunChleoc, 2020\n"
1717 "Language-Team: Gaelic, Scottish (https://www.transifex.com/flareorg/teams/84925/gd/)\n"
1818 "MIME-Version: 1.0\n"
1919 "Content-Type: text/plain; charset=UTF-8\n"
2121 "Language: gd\n"
2222 "Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3;\n"
2323
24 #: ../../../src/Avatar.cpp:367
24 #: ../../../src/Avatar.cpp:387
25 msgid "Your health is low!"
26 msgstr "Tha droch-shlàinte ort!"
27
28 #: ../../../src/Avatar.cpp:419
2529 #, c-format
2630 msgid "Congratulations, you have reached level %d!"
2731 msgstr "Meal do naidheachd, ràinig thu leibheil %d!"
2832
29 #: ../../../src/Avatar.cpp:369
30 msgid "You may increase one attribute through the Character Menu."
31 msgstr "Faodaidh tu buadh àrdachadh air clàr-taice a’ phearsa."
32
33 #: ../../../src/Avatar.cpp:583
33 #: ../../../src/Avatar.cpp:421
34 msgid "You may increase one or more attributes through the Character Menu."
35 msgstr "Faodaidh tu buadh no dhà àrdachadh air clàr-taice a’ phearsa."
36
37 #: ../../../src/Avatar.cpp:425
38 msgid "You may unlock one or more abilities through the Powers Menu."
39 msgstr ""
40 "Faodaidh tu a’ ghlas a thoirt far comas no dhà air clàr-taice nan "
41 "cumhachdan."
42
43 #: ../../../src/Avatar.cpp:692
3444 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3545 msgstr ""
3646 "Chaidh do ruaig. Crìoch a’ gheama! ${INPUT_CONTINUE} gus fàgail gun tiotal."
3747
38 #: ../../../src/Avatar.cpp:589
48 #: ../../../src/Avatar.cpp:698
3949 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
4050 msgstr "Chaidh do ruaig. ${INPUT_CONTINUE} gus leantainn air adhart."
4151
42 #: ../../../src/Avatar.cpp:839
52 #: ../../../src/Avatar.cpp:949
4353 msgid "Transformation expired. You have been moved back to a safe place."
4454 msgstr ""
4555 "Dh’fhalbh an ùine air a’ chruth-atharrachadh. Chaidh do ghluasad air ais gu "
5060 msgid "%d %s removed."
5161 msgstr "Chaidh %d %s a thoirt air falbh."
5262
53 #: ../../../src/CampaignManager.cpp:162
63 #: ../../../src/CampaignManager.cpp:165
64 #, c-format
65 msgid "%s x%d removed."
66 msgstr "Chaidh %s x%d a thoirt air falbh."
67
68 #: ../../../src/CampaignManager.cpp:167
5469 #, c-format
5570 msgid "%s removed."
5671 msgstr "Chaidh %s a thoirt air falbh."
5772
58 #: ../../../src/CampaignManager.cpp:175
73 #: ../../../src/CampaignManager.cpp:180
5974 #, c-format
6075 msgid "You receive %s."
6176 msgstr "Fhuair thu %s."
6277
63 #: ../../../src/CampaignManager.cpp:177
78 #: ../../../src/CampaignManager.cpp:182
6479 #, c-format
6580 msgid "You receive %s x%d."
6681 msgstr "Fhuair thu %s x%d."
6782
68 #: ../../../src/CampaignManager.cpp:186
83 #: ../../../src/CampaignManager.cpp:191
6984 #, c-format
7085 msgid "You receive %d %s."
7186 msgstr "Fhuair thu %d %s."
7287
73 #: ../../../src/CampaignManager.cpp:195
88 #: ../../../src/CampaignManager.cpp:200
7489 #, c-format
7590 msgid "You receive %d XP."
7691 msgstr "Fhuair thu %d puing-eòlais."
7792
78 #: ../../../src/CampaignManager.cpp:201
93 #: ../../../src/CampaignManager.cpp:206
7994 msgid "HP restored."
8095 msgstr "Chaidh puingean-beatha a leigheas."
8196
82 #: ../../../src/CampaignManager.cpp:205
97 #: ../../../src/CampaignManager.cpp:210
8398 msgid "MP restored."
8499 msgstr "Chaidh puingean-gluasaid a leigheas."
85100
86 #: ../../../src/CampaignManager.cpp:210
101 #: ../../../src/CampaignManager.cpp:215
87102 msgid "HP and MP restored."
88103 msgstr "Chaidh puingean-beatha is puingean-gluasaid a leigheas."
89104
90 #: ../../../src/CampaignManager.cpp:214
105 #: ../../../src/CampaignManager.cpp:219
91106 msgid "Negative effects removed."
92107 msgstr "Chaidh èifeachdan dona a thoirt air falbh."
93108
94 #: ../../../src/CampaignManager.cpp:220
109 #: ../../../src/CampaignManager.cpp:225
95110 msgid "HP and MP restored, negative effects removed"
96111 msgstr ""
97112 "Chaidh puingean-beatha is puingean-gluasaid a leigheas is èifeachdan dona a "
117132 "\n"
118133 "An t-inneal-reandaraidh tùsail a bhios nas luaithe mar as trice na an t-inneal-reandaraidh bathair-bhog SDL."
119134
120 #: ../../../src/EngineSettings.cpp:561
135 #: ../../../src/EngineSettings.cpp:572
121136 msgid "Adventurer"
122137 msgstr "Baoghlair"
123138
124 #: ../../../src/Entity.cpp:511
139 #: ../../../src/Entity.cpp:522
125140 msgid "miss"
126141 msgstr "mì-amais"
127142
128 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
129 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
143 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
144 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
130145 #, c-format
131146 msgid "+%d HP"
132147 msgstr "+%d puingean-beatha"
133148
134 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
135 #: ../../../src/StatBlock.cpp:822
149 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
150 #: ../../../src/StatBlock.cpp:830
136151 #, c-format
137152 msgid "+%d MP"
138153 msgstr "+%d puingean-gluasaid"
139154
140 #: ../../../src/EventManager.cpp:738
155 #: ../../../src/EventManager.cpp:782
141156 msgid "Unknown destination"
142157 msgstr "Ceann-uidhe neo-aithnichte"
143158
144 #: ../../../src/GameStateConfigBase.cpp:89
145 #: ../../../src/GameStateConfigBase.cpp:110
159 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
160 msgid "Loading..."
161 msgstr "’Ga luchdadh…"
162
163 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
164 msgid "Delete Save"
165 msgstr "Sguab às"
166
167 #: ../../../src/GameStateLoad.cpp:90
168 msgid "Delete this save?"
169 msgstr "An sguab sinn an geama às?"
170
171 #: ../../../src/GameStateLoad.cpp:92
172 msgid "Exit to Title"
173 msgstr "Fàg gun tiotal"
174
175 #: ../../../src/GameStateLoad.cpp:95
176 msgid "New Game"
177 msgstr "Geama ùr"
178
179 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
180 msgid "Choose a Slot"
181 msgstr "Tagh slot"
182
183 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
184 msgid "Enable a story mod to continue"
185 msgstr "Cuir tuilleadan sgeulachd an comas gus leantainn air adhart"
186
187 #: ../../../src/GameStateLoad.cpp:597
188 msgid "Load Game"
189 msgstr "Luchdaich"
190
191 #: ../../../src/GameStateLoad.cpp:706
192 msgid "Entering game world..."
193 msgstr "A’ dol a-steach do shaoghal a’ gheama…"
194
195 #: ../../../src/GameStateLoad.cpp:709
196 msgid "Loading saved game..."
197 msgstr "A’ luchdadh geama air a shàbhaladh…"
198
199 #: ../../../src/GameStateLoad.cpp:742
200 msgid "Invalid save"
201 msgstr "Geama air a shàbhaladh mì-dhligheach"
202
203 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
204 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
205 #: ../../../src/MenuPowers.cpp:1543
206 #, c-format
207 msgid "Level %d"
208 msgstr "Leibheil %d"
209
210 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
211 #: ../../../src/MenuConfig.cpp:244
212 msgid "Cancel"
213 msgstr "Sguir dheth"
214
215 #: ../../../src/GameStateNew.cpp:68
216 msgid "Create"
217 msgstr "Cruthaich"
218
219 #: ../../../src/GameStateNew.cpp:76
220 msgid "Randomize"
221 msgstr "Cuir air thuaiream"
222
223 #: ../../../src/GameStateNew.cpp:92
224 msgid "Choose a Portrait"
225 msgstr "Tagh dealbh"
226
227 #: ../../../src/GameStateNew.cpp:96
228 msgid "Choose a Name"
229 msgstr "Tagh ainm"
230
231 #: ../../../src/GameStateNew.cpp:100
232 msgid "Permadeath?"
233 msgstr "Bàs maireannach?"
234
235 #: ../../../src/GameStateNew.cpp:104
236 msgid "Choose a Class"
237 msgstr "Tagh clas"
238
239 #: ../../../src/GameStateTitle.cpp:107
240 msgid "Play Game"
241 msgstr "Cluich geama"
242
243 #: ../../../src/GameStateTitle.cpp:110
244 msgid "Enable a core mod to continue"
245 msgstr "Cuir bun-thuilleadan an comas gus leantainn air adhart"
246
247 #: ../../../src/GameStateTitle.cpp:114
248 msgid "Configuration"
249 msgstr "Rèiteachadh"
250
251 #: ../../../src/GameStateTitle.cpp:117
252 msgid "Credits"
253 msgstr "Urram"
254
255 #: ../../../src/GameStateTitle.cpp:120
256 msgid "Exit Game"
257 msgstr "Fàg an geama"
258
259 #: ../../../src/InputState.cpp:407
260 msgid "Accept"
261 msgstr "Gabh ris"
262
263 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
264 #: ../../../src/SDLInputState.cpp:698
265 msgid "Up"
266 msgstr "Suas"
267
268 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
269 #: ../../../src/SDLInputState.cpp:676
270 msgid "Down"
271 msgstr "Sìos"
272
273 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
274 #: ../../../src/SDLInputState.cpp:683
275 msgid "Left"
276 msgstr "Gu clì"
277
278 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
279 #: ../../../src/SDLInputState.cpp:693
280 msgid "Right"
281 msgstr "Gu deas"
282
283 #: ../../../src/InputState.cpp:412
284 msgid "Bar1"
285 msgstr "Bàr 1"
286
287 #: ../../../src/InputState.cpp:413
288 msgid "Bar2"
289 msgstr "Bàr 2"
290
291 #: ../../../src/InputState.cpp:414
292 msgid "Bar3"
293 msgstr "Bàr 3"
294
295 #: ../../../src/InputState.cpp:415
296 msgid "Bar4"
297 msgstr "Bàr 4"
298
299 #: ../../../src/InputState.cpp:416
300 msgid "Bar5"
301 msgstr "Bàr 5"
302
303 #: ../../../src/InputState.cpp:417
304 msgid "Bar6"
305 msgstr "Bàr 6"
306
307 #: ../../../src/InputState.cpp:418
308 msgid "Bar7"
309 msgstr "Bàr 7"
310
311 #: ../../../src/InputState.cpp:419
312 msgid "Bar8"
313 msgstr "Bàr 8"
314
315 #: ../../../src/InputState.cpp:420
316 msgid "Bar9"
317 msgstr "Bàr 9"
318
319 #: ../../../src/InputState.cpp:421
320 msgid "Bar0"
321 msgstr "Bàr 0"
322
323 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
324 #: ../../../src/MenuCharacter.cpp:54
325 msgid "Character"
326 msgstr "Pearsa"
327
328 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
329 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
330 msgid "Inventory"
331 msgstr "Tasgadh"
332
333 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
334 #: ../../../src/MenuPowers.cpp:167
335 msgid "Powers"
336 msgstr "Cumhachdan"
337
338 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
339 #: ../../../src/MenuLog.cpp:72
340 msgid "Log"
341 msgstr "Leabhar-latha"
342
343 #: ../../../src/InputState.cpp:426
344 msgid "Main1"
345 msgstr "Prìomh-ghnìomh"
346
347 #: ../../../src/InputState.cpp:427
348 msgid "Main2"
349 msgstr "Gnìomh dàrnach"
350
351 #: ../../../src/InputState.cpp:428
352 msgid "Ctrl"
353 msgstr "Ctrl"
354
355 #: ../../../src/InputState.cpp:429
356 msgid "Shift"
357 msgstr "Shift"
358
359 #: ../../../src/InputState.cpp:430
360 msgid "Alt"
361 msgstr "Alt"
362
363 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
364 msgid "Delete"
365 msgstr "Delete"
366
367 #: ../../../src/InputState.cpp:432
368 msgid "ActionBar Accept"
369 msgstr "Bàr – Gabh ris"
370
371 #: ../../../src/InputState.cpp:433
372 msgid "ActionBar Left"
373 msgstr "Bàr – Gu clì"
374
375 #: ../../../src/InputState.cpp:434
376 msgid "ActionBar Right"
377 msgstr "Bàr – Gu deas"
378
379 #: ../../../src/InputState.cpp:435
380 msgid "ActionBar Use"
381 msgstr "Bàr – Cleachd"
382
383 #: ../../../src/InputState.cpp:436
384 msgid "Developer Menu"
385 msgstr "Clàr-taice an luchd-leasachaidh"
386
387 #: ../../../src/InputState.cpp:438
388 msgid "Left Mouse"
389 msgstr "Clì na luchaige"
390
391 #: ../../../src/InputState.cpp:439
392 msgid "Middle Mouse"
393 msgstr "Meadhanach na luchaige"
394
395 #: ../../../src/InputState.cpp:440
396 msgid "Right Mouse"
397 msgstr "Deas na luchaige"
398
399 #: ../../../src/InputState.cpp:441
400 msgid "Wheel Up"
401 msgstr "Cuibhle suas"
402
403 #: ../../../src/InputState.cpp:442
404 msgid "Wheel Down"
405 msgstr "Cuibhle sìos"
406
407 #: ../../../src/InputState.cpp:443
408 msgid "Mouse X1"
409 msgstr "X1 na luchaige"
410
411 #: ../../../src/InputState.cpp:444
412 msgid "Mouse X2"
413 msgstr "X2 na luchaige"
414
415 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
416 msgid "Unknown Item"
417 msgstr "Nì nach aithne dhuinn"
418
419 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
420 #, c-format
421 msgid "%d%% Speed"
422 msgstr "Luaths de %d%%"
423
424 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
425 #, c-format
426 msgid "%d%% Attack Speed"
427 msgstr "Luaths ionnsaighe de %d%%"
428
429 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
430 #: ../../../src/MenuPowers.cpp:832
431 #, c-format
432 msgid "Resistance (%s)"
433 msgstr "Comas-seasaimh (%s)"
434
435 #: ../../../src/ItemManager.cpp:714
436 #, c-format
437 msgid "Requires %s"
438 msgstr "Feumach air %s"
439
440 #: ../../../src/ItemManager.cpp:763
441 msgid "Quest Item"
442 msgstr "Nì cinn-thurais"
443
444 #: ../../../src/ItemManager.cpp:790
445 #, c-format
446 msgid "Quality: %s"
447 msgstr "Càileachd: %s"
448
449 #: ../../../src/ItemManager.cpp:815
450 #, c-format
451 msgid "Absorb: %d-%d"
452 msgstr "Ceapadh: %d–%d"
453
454 #: ../../../src/ItemManager.cpp:817
455 #, c-format
456 msgid "Absorb: %d"
457 msgstr "Ceapadh: %d"
458
459 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
460 #: ../../../src/MenuPowers.cpp:1133
461 #, c-format
462 msgid "Requires Level %d"
463 msgstr "Feum air leibheil %d"
464
465 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
466 #: ../../../src/MenuPowers.cpp:1124
467 #, c-format
468 msgid "Requires %s %d"
469 msgstr "Feum air: %s %d"
470
471 #: ../../../src/ItemManager.cpp:879
472 #, c-format
473 msgid "Requires Class: %s"
474 msgstr "Feum air a’ chlas: %s"
475
476 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
477 #, c-format
478 msgid "Buy Price: %d %s"
479 msgstr "Prìs ceannaich: %d %s"
480
481 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
482 #, c-format
483 msgid "Buy Price: %d %s each"
484 msgstr "Prìs ceannaich: %d %s an urra"
485
486 #: ../../../src/ItemManager.cpp:916
487 #, c-format
488 msgid "Sell Price: %d %s"
489 msgstr "Prìs reic: %d %s"
490
491 #: ../../../src/ItemManager.cpp:918
492 #, c-format
493 msgid "Sell Price: %d %s each"
494 msgstr "Prìs reic: %d %s an urra"
495
496 #: ../../../src/ItemManager.cpp:927
497 msgid "Set:"
498 msgstr "Seata:"
499
500 #: ../../../src/ItemManager.cpp:934
501 #, c-format
502 msgid "%d items:"
503 msgstr "%d nithean:"
504
505 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
506 #, c-format
507 msgid "Press [%s] to use"
508 msgstr "Brùth air [%s] gus a chleachdadh"
509
510 #: ../../../src/ItemManager.cpp:951
511 #, c-format
512 msgid "Press [%s] to read"
513 msgstr "Brùth air [%s] gus a leughadh"
514
515 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
516 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
517 #, c-format
518 msgid "Hotkey: %s"
519 msgstr "Grad-iuchair: %s"
520
521 #: ../../../src/MenuActionBar.cpp:599
522 msgid "Not enough MP."
523 msgstr "Chan fhoghainn na PG."
524
525 #: ../../../src/MenuActiveEffects.cpp:124
526 #, c-format
527 msgid "x%d"
528 msgstr "x%d"
529
530 #: ../../../src/MenuActiveEffects.cpp:219
531 msgid "Remaining:"
532 msgstr "Air fhàgail:"
533
534 #: ../../../src/MenuActiveEffects.cpp:225
535 #, c-format
536 msgid "x%d stacks"
537 msgstr "x%d cruach(an)"
538
539 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
540 msgid "Name"
541 msgstr "Ainm"
542
543 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
544 msgid "Level"
545 msgstr "Leibheil"
546
547 #: ../../../src/MenuCharacter.cpp:310
548 #, c-format
549 msgid "%d unspent stat point"
550 msgstr "%d phuing-pearsa nach deach a chleachdadh"
551
552 #: ../../../src/MenuCharacter.cpp:313
553 #, c-format
554 msgid "%d unspent stat points"
555 msgstr "%d puing(ean)-pearsa nach deach a chleachdadh"
556
557 #: ../../../src/MenuCharacter.cpp:355
558 #, c-format
559 msgid "Reduces the damage taken from \"%s\" elemental attacks."
560 msgstr ""
561 "Ìslichidh seo an dochann a dh’fhulaingeas tu o ionnsaighean dùileach “%s”."
562
563 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
564 #, c-format
565 msgid "XP: %d"
566 msgstr "Puingean-eòlais: %d"
567
568 #: ../../../src/MenuCharacter.cpp:367
569 #, c-format
570 msgid "Next: %d"
571 msgstr "An ath-fhear: %d"
572
573 #: ../../../src/MenuCharacter.cpp:373
574 #, c-format
575 msgid "base (%d), bonus (%d)"
576 msgstr "bunait (%d), duais (%d)"
577
578 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
579 msgid "Related stats:"
580 msgstr "Stadastaireachd cho-cheangailte:"
581
582 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
583 #, c-format
584 msgid "Each level grants %d."
585 msgstr "Bheir gach leibheil %d dhut."
586
587 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
588 #, c-format
589 msgid "Each point of %s grants %d."
590 msgstr "Bheir gach puing dhe %s %d dhut."
591
592 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
593 msgid "Clear"
594 msgstr "Falamhaich"
595
596 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
597 msgid "Assign:"
598 msgstr "Sònraich:"
599
600 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
146601 msgid "Defaults"
147602 msgstr "Bun-roghainnean"
148603
149 #: ../../../src/GameStateConfigBase.cpp:89
604 #: ../../../src/MenuConfig.cpp:123
150605 msgid "Reset ALL settings?"
151606 msgstr "A bheil thu airson GACH roghainn ath-shuidheachadh?"
152607
153 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
608 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
154609 msgid "OK"
155610 msgstr "Ceart ma-thà"
156611
157 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
158 #: ../../../src/InputState.cpp:401
159 msgid "Cancel"
160 msgstr "Sguir dheth"
161
162 #: ../../../src/GameStateConfigBase.cpp:160
163 #: ../../../src/GameStateConfigDesktop.cpp:130
612 #: ../../../src/MenuConfig.cpp:246
613 msgid "Continue"
614 msgstr "Lean air adhart"
615
616 #: ../../../src/MenuConfig.cpp:248
617 msgid "Save Game"
618 msgstr "Sàbhail an geama"
619
620 #: ../../../src/MenuConfig.cpp:291
621 msgid "Default"
622 msgstr "Bun-roghainn"
623
624 #: ../../../src/MenuConfig.cpp:291
625 msgid ""
626 "Show all loot tooltips, except for those that would be obscured by the "
627 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
628 msgstr ""
629 "Seall a h-uile gliocas-sgrìn air spùinn ach an fheadhainn a rachadh fhalach "
630 "leis a’ cluicheadair no le nàmhaid. Seall a h-uile gliocas-sgrìn air spùinn "
631 "rè seal le “Alt”."
632
633 #: ../../../src/MenuConfig.cpp:292
634 msgid "Show all"
635 msgstr "Seall na h-uile"
636
637 #: ../../../src/MenuConfig.cpp:292
638 msgid ""
639 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
640 msgstr ""
641 "Seall gliocasan-sgrìn air spùinn an-còmhnaidh. Falaich a h-uile gliocas-"
642 "sgrìn air spùinn rè seal le “Alt”."
643
644 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
645 msgid "Hidden"
646 msgstr "Falaichte"
647
648 #: ../../../src/MenuConfig.cpp:293
649 msgid ""
650 "Always hide loot tooltips, except for when a piece of loot is hovered with "
651 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
652 msgstr ""
653 "Falaich gliocasan-sgrìn air spùinn an-còmhnaidh ach nuair a chumas tu an "
654 "luchag air cuid spùinne. Seall a h-uile gliocas-sgrìn air spùinn rè seal le "
655 "“Alt”."
656
657 #: ../../../src/MenuConfig.cpp:296
658 msgid "Visible"
659 msgstr "Ri fhaicinn"
660
661 #: ../../../src/MenuConfig.cpp:297
662 msgid "Visible (2x zoom)"
663 msgstr "Ri fhaicinn (sùm 2x)"
664
665 #: ../../../src/MenuConfig.cpp:301
666 msgid ""
667 "Controls the type of warning to be activated when the player is below the "
668 "low health threshold."
669 msgstr ""
670 "Stiùirichidh seo an seòrsa de rabhadh a gheibh an cluicheadair nuair a bhios"
671 " an t-slàinte nas ìsle na an stairsneach."
672
673 #: ../../../src/MenuConfig.cpp:302
674 msgid "- Display a message"
675 msgstr "- Seall teachdaireachd"
676
677 #: ../../../src/MenuConfig.cpp:303
678 msgid "- Play a sound"
679 msgstr "- Cluich fuaim"
680
681 #: ../../../src/MenuConfig.cpp:304
682 msgid "- Change the cursor"
683 msgstr "- Atharraich an cùrsair"
684
685 #: ../../../src/MenuConfig.cpp:306
686 msgid "Disabled"
687 msgstr "À comas"
688
689 #: ../../../src/MenuConfig.cpp:307
690 msgid "All"
691 msgstr "Na h-uile"
692
693 #: ../../../src/MenuConfig.cpp:308
694 msgid "Message & Cursor"
695 msgstr "Teachdaireachd ⁊ cùrsair"
696
697 #: ../../../src/MenuConfig.cpp:309
698 msgid "Message & Sound"
699 msgstr "Teachdaireachd ⁊ fuaim"
700
701 #: ../../../src/MenuConfig.cpp:310
702 msgid "Sound & Cursor"
703 msgstr "Fuaim ⁊ cùrsair"
704
705 #: ../../../src/MenuConfig.cpp:311
706 msgid "Message"
707 msgstr "Teachdaireachd"
708
709 #: ../../../src/MenuConfig.cpp:312
710 msgid "Cursor"
711 msgstr "Cùrsair"
712
713 #: ../../../src/MenuConfig.cpp:313
714 msgid "Sound"
715 msgstr "Fuaim"
716
717 #: ../../../src/MenuConfig.cpp:319
718 msgid ""
719 "When the player's health drops below the given threshold, the low health "
720 "notifications are triggered if one or more of them is enabled."
721 msgstr ""
722 "Nuair a thèid slàinte a’ chluicheadair nas ìsle na an stairsneach, nochdaidh"
723 " na brathan droch-shlàinte a tha an comas."
724
725 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
726 msgid "Exit"
727 msgstr "Fàg an geama"
728
729 #: ../../../src/MenuConfig.cpp:333
730 msgid "Video"
731 msgstr "Video"
732
733 #: ../../../src/MenuConfig.cpp:334
164734 msgid "Audio"
165735 msgstr "Fuaim"
166736
167 #: ../../../src/GameStateConfigBase.cpp:161
168 #: ../../../src/GameStateConfigDesktop.cpp:131
737 #: ../../../src/MenuConfig.cpp:335
169738 msgid "Interface"
170739 msgstr "Eadar-aghaidh"
171740
172 #: ../../../src/GameStateConfigBase.cpp:162
173 #: ../../../src/GameStateConfigDesktop.cpp:134
741 #: ../../../src/MenuConfig.cpp:336
742 msgid "Input"
743 msgstr "Ion-chur"
744
745 #: ../../../src/MenuConfig.cpp:337
746 msgid "Keybindings"
747 msgstr "Nasgadh iuchraichean"
748
749 #: ../../../src/MenuConfig.cpp:338
174750 msgid "Mods"
175751 msgstr "Tuilleadain"
176752
177 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
753 #: ../../../src/MenuConfig.cpp:350
754 msgid "Paused"
755 msgstr "’Na stad"
756
757 #: ../../../src/MenuConfig.cpp:353
758 msgid "Time Played"
759 msgstr "Ùine air a chluich"
760
761 #: ../../../src/MenuConfig.cpp:359
762 msgid "Renderer"
763 msgstr "Inneal-reandaraidh"
764
765 #: ../../../src/MenuConfig.cpp:360
766 msgid "Full Screen Mode"
767 msgstr "Modh làn-sgrìn"
768
769 #: ../../../src/MenuConfig.cpp:361
770 msgid "Hardware surfaces"
771 msgstr "Uachdaran bathair-chruaidh"
772
773 #: ../../../src/MenuConfig.cpp:362
774 msgid "V-Sync"
775 msgstr "Sioncronachadh-V"
776
777 #: ../../../src/MenuConfig.cpp:363
778 msgid "Texture Filtering"
779 msgstr "Criathrag innich"
780
781 #: ../../../src/MenuConfig.cpp:364
782 msgid "DPI scaling"
783 msgstr "Sgèileadh DPI"
784
785 #: ../../../src/MenuConfig.cpp:365
786 msgid "Parallax Layers"
787 msgstr "Breathan paraileige"
788
789 #: ../../../src/MenuConfig.cpp:366
790 msgid "Allow changing gamma"
791 msgstr "Faodar gamma atharrachadh"
792
793 #: ../../../src/MenuConfig.cpp:367
794 msgid "Gamma"
795 msgstr "Gamma"
796
797 #: ../../../src/MenuConfig.cpp:369
798 msgid "Sound Volume"
799 msgstr "Àirde na fuaime"
800
801 #: ../../../src/MenuConfig.cpp:370
178802 msgid "Music Volume"
179803 msgstr "Àirde a’ chiùil"
180804
181 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
182 msgid "Sound Volume"
183 msgstr "Àirde na fuaime"
184
185 #: ../../../src/GameStateConfigBase.cpp:257
805 #: ../../../src/MenuConfig.cpp:372
186806 msgid "Language"
187807 msgstr "Cànan"
188808
189 #: ../../../src/GameStateConfigBase.cpp:266
809 #: ../../../src/MenuConfig.cpp:373
190810 msgid "Show FPS"
191811 msgstr "Seall FPS"
192812
193 #: ../../../src/GameStateConfigBase.cpp:270
813 #: ../../../src/MenuConfig.cpp:374
814 msgid "Hardware mouse cursor"
815 msgstr "Cùrsair luchaige bathair-chruaidh"
816
817 #: ../../../src/MenuConfig.cpp:375
194818 msgid "Colorblind Mode"
195819 msgstr "Modh dath-dhoille"
196820
197 #: ../../../src/GameStateConfigBase.cpp:274
198 msgid "Hardware mouse cursor"
199 msgstr "Cùrsair luchaige bathair-chruaidh"
200
201 #: ../../../src/GameStateConfigBase.cpp:278
821 #: ../../../src/MenuConfig.cpp:376
202822 msgid "Developer Mode"
203823 msgstr "Modh an luchd-leasachaidh"
204824
205 #: ../../../src/GameStateConfigBase.cpp:282
825 #: ../../../src/MenuConfig.cpp:377
206826 msgid "Subtitles"
207827 msgstr "Fo-thiotalan"
208828
209 #: ../../../src/GameStateConfigBase.cpp:286
210 msgid "Active Mods"
211 msgstr "Tuilleadain ghnìomhach"
212
213 #: ../../../src/GameStateConfigBase.cpp:295
214 msgid "Available Mods"
215 msgstr "Tuilleadain ri làimh"
216
217 #: ../../../src/GameStateConfigBase.cpp:314
218 msgid "<< Disable"
219 msgstr "<< Cuir à comas"
220
221 #: ../../../src/GameStateConfigBase.cpp:320
222 msgid "Enable >>"
223 msgstr "Cuir an comas >>"
224
225 #: ../../../src/GameStateConfigBase.cpp:873
226 msgid "Version:"
227 msgstr "Tionndadh:"
228
229 #: ../../../src/GameStateConfigBase.cpp:878
230 msgid "Game:"
231 msgstr "Geama:"
232
233 #: ../../../src/GameStateConfigBase.cpp:883
234 msgid "Engine version:"
235 msgstr "Tionndadh an einnsein:"
236
237 #: ../../../src/GameStateConfigBase.cpp:891
238 msgid "Requires mods:"
239 msgstr "Feum air tuilleadain:"
240
241 #: ../../../src/GameStateConfigDesktop.cpp:83
242 #: ../../../src/GameStateConfigDesktop.cpp:751
243 msgid "Clear"
244 msgstr "Falamhaich"
245
246 #: ../../../src/GameStateConfigDesktop.cpp:83
247 #: ../../../src/GameStateConfigDesktop.cpp:749
248 msgid "Assign:"
249 msgstr "Sònraich:"
250
251 #: ../../../src/GameStateConfigDesktop.cpp:128
252 msgid "Video"
253 msgstr "Video"
254
255 #: ../../../src/GameStateConfigDesktop.cpp:132
256 msgid "Input"
257 msgstr "Ion-chur"
258
259 #: ../../../src/GameStateConfigDesktop.cpp:133
260 msgid "Keybindings"
261 msgstr "Nasgadh iuchraichean"
262
263 #: ../../../src/GameStateConfigDesktop.cpp:188
829 #: ../../../src/MenuConfig.cpp:378
830 msgid "Loot tooltip visibility"
831 msgstr "Faicsinneachd gliocasan-sgrìn nam spùinn"
832
833 #: ../../../src/MenuConfig.cpp:379
834 msgid "Mini-map mode"
835 msgstr "Modh a’ mheanbh-mhapa"
836
837 #: ../../../src/MenuConfig.cpp:380
838 msgid "Always show stat bar labels"
839 msgstr "Seall leubailean bàr na stadastaireachd an-còmhnaidh"
840
841 #: ../../../src/MenuConfig.cpp:381
842 msgid "Allow stat bar auto-hiding"
843 msgstr "Ceadaich falach fèin-obrachail air bàr na stadastaireachd"
844
845 #: ../../../src/MenuConfig.cpp:382
846 msgid "Show combat text"
847 msgstr "Seall teacsa na còmhraige"
848
849 #: ../../../src/MenuConfig.cpp:383
850 msgid "Automatically equip items"
851 msgstr "Uidheamaich nithean gu fèin-obrachail"
852
853 #: ../../../src/MenuConfig.cpp:384
854 msgid "Show hidden entity markers"
855 msgstr "Seall comharraidhean nan nithean falaichte"
856
857 #: ../../../src/MenuConfig.cpp:385
858 msgid "Low health notification"
859 msgstr "Brath na droch-shlàinte"
860
861 #: ../../../src/MenuConfig.cpp:386
862 msgid "Low health threshold"
863 msgstr "Stairsneach na droch-shlàinte"
864
865 #: ../../../src/MenuConfig.cpp:389
866 msgid "Joystick"
867 msgstr "Joystick"
868
869 #: ../../../src/MenuConfig.cpp:390
870 msgid "Move hero using mouse"
871 msgstr "Gluais an gaisgeach leis an luchag"
872
873 #: ../../../src/MenuConfig.cpp:391
874 msgid "Mouse aim"
875 msgstr "Amas luchaige"
876
877 #: ../../../src/MenuConfig.cpp:392
878 msgid "Do not use mouse"
879 msgstr "Na cleachd an luchag"
880
881 #: ../../../src/MenuConfig.cpp:393
882 msgid "Swap mouse movement button"
883 msgstr "Suaip putan luchaige a’ ghluasaid"
884
885 #: ../../../src/MenuConfig.cpp:394
886 msgid "Attack with mouse movement"
887 msgstr "Thoir ionnsaigh le gluasad na luchaige"
888
889 #: ../../../src/MenuConfig.cpp:395
890 msgid "Joystick Deadzone"
891 msgstr "Marbh-sòn an joystick"
892
893 #: ../../../src/MenuConfig.cpp:405
894 #, c-format
895 msgid "Primary binding: %s"
896 msgstr "Prìomh-nasgadh: %s"
897
898 #: ../../../src/MenuConfig.cpp:406
899 #, c-format
900 msgid "Alternate binding: %s"
901 msgstr "Nasgadh eile: %s"
902
903 #: ../../../src/MenuConfig.cpp:407
904 #, c-format
905 msgid "Joystick binding: %s"
906 msgstr "Nasgadh joystick: %s"
907
908 #: ../../../src/MenuConfig.cpp:508
264909 msgid ""
265910 "Will try to store surfaces in video memory versus system memory. The effect "
266911 "this has on performance depends on the renderer."
269914 "t-siostaim. Tha a’ bhuaidh a th’ aige air an dèanadas a-rèir an inneil-"
270915 "reandaraidh."
271916
272 #: ../../../src/GameStateConfigDesktop.cpp:189
917 #: ../../../src/MenuConfig.cpp:509
273918 msgid ""
274919 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
275920 "windowed mode or input lag."
277922 "Tha seo an aghaidh reubadh na sgrìn. cuir à comas e ma tha a modh uinneagach"
278923 " “stadach” no ma tha maille air an ion-chur."
279924
280 #: ../../../src/GameStateConfigDesktop.cpp:190
925 #: ../../../src/MenuConfig.cpp:510
281926 msgid ""
282927 "When enabled, this uses the screen DPI in addition to the window dimensions "
283928 "to scale the rendering resolution. Otherwise, only the window dimensions are"
287932 "na h-uinneige airson dùmhlachd-bhreacaidh an reandaraidh a sgèileadh. Mur "
288933 "eil, cha dèid ach meud na h-uinneige a chleachdadh."
289934
290 #: ../../../src/GameStateConfigDesktop.cpp:191
935 #: ../../../src/MenuConfig.cpp:511
291936 msgid ""
292937 "This enables parallax (non-tile) layers. Disabling this setting can improve "
293938 "performance in some cases."
294939 msgstr ""
295
296 #: ../../../src/GameStateConfigDesktop.cpp:192
297 msgid "Experimental"
298 msgstr "Deuchainneil"
299
300 #: ../../../src/GameStateConfigDesktop.cpp:193
301 msgid "For handheld devices"
302 msgstr "Airson innealan-làimhe"
303
304 #: ../../../src/GameStateConfigDesktop.cpp:211
305 msgid "Renderer"
306 msgstr "Inneal-reandaraidh"
307
308 #: ../../../src/GameStateConfigDesktop.cpp:227
309 msgid "Full Screen Mode"
310 msgstr "Modh làn-sgrìn"
311
312 #: ../../../src/GameStateConfigDesktop.cpp:231
313 msgid "Move hero using mouse"
314 msgstr "Gluais an gaisgeach le luchag"
315
316 #: ../../../src/GameStateConfigDesktop.cpp:235
317 msgid "Hardware surfaces"
318 msgstr "Uachdaran bathair-chruaidh"
319
320 #: ../../../src/GameStateConfigDesktop.cpp:239
321 msgid "V-Sync"
322 msgstr "Sioncronachadh-V"
323
324 #: ../../../src/GameStateConfigDesktop.cpp:243
325 msgid "Texture Filtering"
326 msgstr "Criathrag innich"
327
328 #: ../../../src/GameStateConfigDesktop.cpp:247
329 msgid "DPI scaling"
330 msgstr "Sgèileadh DPI"
331
332 #: ../../../src/GameStateConfigDesktop.cpp:251
333 msgid "Parallax Layers"
334 msgstr ""
335
336 #: ../../../src/GameStateConfigDesktop.cpp:255
337 msgid "Allow changing gamma"
338 msgstr "Faodar gamma atharrachadh"
339
340 #: ../../../src/GameStateConfigDesktop.cpp:259
341 msgid "Gamma"
342 msgstr "Gamma"
343
344 #: ../../../src/GameStateConfigDesktop.cpp:263
345 msgid "Use joystick"
346 msgstr "Cleachd joystick"
347
348 #: ../../../src/GameStateConfigDesktop.cpp:267
349 msgid "Joystick"
350 msgstr "Joystick"
351
352 #: ../../../src/GameStateConfigDesktop.cpp:283
353 msgid "Mouse aim"
354 msgstr "Amas luchaige"
355
356 #: ../../../src/GameStateConfigDesktop.cpp:287
357 msgid "Do not use mouse"
358 msgstr "Na cleachd an luchag"
359
360 #: ../../../src/GameStateConfigDesktop.cpp:291
361 msgid "Joystick Deadzone"
362 msgstr "Marbh-sòn an joystick"
363
364 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
365 msgid "Loading..."
366 msgstr "’Ga luchdadh…"
367
368 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
369 msgid "Delete Save"
370 msgstr "Sguab às"
371
372 #: ../../../src/GameStateLoad.cpp:88
373 msgid "Delete this save?"
374 msgstr "An sguab sinn an geama às?"
375
376 #: ../../../src/GameStateLoad.cpp:90
377 msgid "Exit to Title"
378 msgstr "Fàg gun tiotal"
379
380 #: ../../../src/GameStateLoad.cpp:93
381 msgid "New Game"
382 msgstr "Geama ùr"
383
384 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
385 msgid "Choose a Slot"
386 msgstr "Tagh slot"
387
388 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
389 msgid "Enable a story mod to continue"
390 msgstr "Cuir tuilleadan sgeulachd an comas gus leantainn air adhart"
391
392 #: ../../../src/GameStateLoad.cpp:589
393 msgid "Load Game"
394 msgstr "Luchdaich"
395
396 #: ../../../src/GameStateLoad.cpp:695
397 msgid "Entering game world..."
398 msgstr "A’ dol a-steach do shaoghal a’ gheama…"
399
400 #: ../../../src/GameStateLoad.cpp:698
401 msgid "Loading saved game..."
402 msgstr "A’ luchdadh geama air a shàbhaladh…"
403
404 #: ../../../src/GameStateLoad.cpp:731
405 msgid "Invalid save"
406 msgstr "Geama air a shàbhaladh mì-dhligheach"
407
408 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
409 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
410 #: ../../../src/MenuPowers.cpp:1542
411 #, c-format
412 msgid "Level %d"
413 msgstr "Leibheil %d"
414
415 #: ../../../src/GameStateNew.cpp:68
416 msgid "Create"
417 msgstr "Cruthaich"
418
419 #: ../../../src/GameStateNew.cpp:76
420 msgid "Randomize"
421 msgstr "Cuir air thuaiream"
422
423 #: ../../../src/GameStateNew.cpp:92
424 msgid "Choose a Portrait"
425 msgstr "Tagh dealbh"
426
427 #: ../../../src/GameStateNew.cpp:96
428 msgid "Choose a Name"
429 msgstr "Tagh ainm"
430
431 #: ../../../src/GameStateNew.cpp:100
432 msgid "Permadeath?"
433 msgstr "Bàs maireannach?"
434
435 #: ../../../src/GameStateNew.cpp:104
436 msgid "Choose a Class"
437 msgstr "Tagh clas"
438
439 #: ../../../src/GameStateTitle.cpp:108
440 msgid "Play Game"
441 msgstr "Cluich geama"
442
443 #: ../../../src/GameStateTitle.cpp:111
444 msgid "Enable a core mod to continue"
445 msgstr "Cuir bun-thuilleadan an comas gus leantainn air adhart"
446
447 #: ../../../src/GameStateTitle.cpp:115
448 msgid "Configuration"
449 msgstr "Rèiteachadh"
450
451 #: ../../../src/GameStateTitle.cpp:118
452 msgid "Credits"
453 msgstr "Urram"
454
455 #: ../../../src/GameStateTitle.cpp:121
456 msgid "Exit Game"
457 msgstr "Fàg an geama"
458
459 #: ../../../src/InputState.cpp:402
460 msgid "Accept"
461 msgstr "Gabh ris"
462
463 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
464 msgid "Up"
465 msgstr "Suas"
466
467 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
468 msgid "Down"
469 msgstr "Sìos"
470
471 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
472 msgid "Left"
473 msgstr "Gu clì"
474
475 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
476 msgid "Right"
477 msgstr "Gu deas"
478
479 #: ../../../src/InputState.cpp:407
480 msgid "Bar1"
481 msgstr "Bàr 1"
482
483 #: ../../../src/InputState.cpp:408
484 msgid "Bar2"
485 msgstr "Bàr 2"
486
487 #: ../../../src/InputState.cpp:409
488 msgid "Bar3"
489 msgstr "Bàr 3"
490
491 #: ../../../src/InputState.cpp:410
492 msgid "Bar4"
493 msgstr "Bàr 4"
494
495 #: ../../../src/InputState.cpp:411
496 msgid "Bar5"
497 msgstr "Bàr 5"
498
499 #: ../../../src/InputState.cpp:412
500 msgid "Bar6"
501 msgstr "Bàr 6"
502
503 #: ../../../src/InputState.cpp:413
504 msgid "Bar7"
505 msgstr "Bàr 7"
506
507 #: ../../../src/InputState.cpp:414
508 msgid "Bar8"
509 msgstr "Bàr 8"
510
511 #: ../../../src/InputState.cpp:415
512 msgid "Bar9"
513 msgstr "Bàr 9"
514
515 #: ../../../src/InputState.cpp:416
516 msgid "Bar0"
517 msgstr "Bàr 0"
518
519 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
520 #: ../../../src/MenuCharacter.cpp:54
521 msgid "Character"
522 msgstr "Pearsa"
523
524 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
525 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
526 msgid "Inventory"
527 msgstr "Tasgadh"
528
529 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
530 #: ../../../src/MenuPowers.cpp:168
531 msgid "Powers"
532 msgstr "Cumhachdan"
533
534 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
535 #: ../../../src/MenuLog.cpp:72
536 msgid "Log"
537 msgstr "Leabhar-latha"
538
539 #: ../../../src/InputState.cpp:421
540 msgid "Main1"
541 msgstr "Prìomh-ghnìomh"
542
543 #: ../../../src/InputState.cpp:422
544 msgid "Main2"
545 msgstr "Gnìomh dàrnach"
546
547 #: ../../../src/InputState.cpp:423
548 msgid "Ctrl"
549 msgstr "Ctrl"
550
551 #: ../../../src/InputState.cpp:424
552 msgid "Shift"
553 msgstr "Shift"
554
555 #: ../../../src/InputState.cpp:425
556 msgid "Alt"
557 msgstr "Alt"
558
559 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
560 msgid "Delete"
561 msgstr "Delete"
562
563 #: ../../../src/InputState.cpp:427
564 msgid "ActionBar Accept"
565 msgstr "Bàr – Gabh ris"
566
567 #: ../../../src/InputState.cpp:428
568 msgid "ActionBar Left"
569 msgstr "Bàr – Gu clì"
570
571 #: ../../../src/InputState.cpp:429
572 msgid "ActionBar Right"
573 msgstr "Bàr – Gu deas"
574
575 #: ../../../src/InputState.cpp:430
576 msgid "ActionBar Use"
577 msgstr "Bàr – Cleachd"
578
579 #: ../../../src/InputState.cpp:431
580 msgid "Developer Menu"
581 msgstr "Clàr-taice an luchd-leasachaidh"
582
583 #: ../../../src/InputState.cpp:433
584 msgid "Left Mouse"
585 msgstr "Clì na luchaige"
586
587 #: ../../../src/InputState.cpp:434
588 msgid "Middle Mouse"
589 msgstr "Meadhanach na luchaige"
590
591 #: ../../../src/InputState.cpp:435
592 msgid "Right Mouse"
593 msgstr "Deas na luchaige"
594
595 #: ../../../src/InputState.cpp:436
596 msgid "Wheel Up"
597 msgstr "Cuibhle suas"
598
599 #: ../../../src/InputState.cpp:437
600 msgid "Wheel Down"
601 msgstr "Cuibhle sìos"
602
603 #: ../../../src/InputState.cpp:438
604 msgid "Mouse X1"
605 msgstr "X1 na luchaige"
606
607 #: ../../../src/InputState.cpp:439
608 msgid "Mouse X2"
609 msgstr "X2 na luchaige"
610
611 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
612 msgid "Unknown Item"
613 msgstr "Nì nach aithne dhuinn"
614
615 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
616 #, c-format
617 msgid "%d%% Speed"
618 msgstr "Luaths de %d%%"
619
620 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
621 #, c-format
622 msgid "%d%% Attack Speed"
623 msgstr "Luaths ionnsaighe de %d%%"
624
625 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
626 #: ../../../src/MenuPowers.cpp:833
627 #, c-format
628 msgid "Resistance (%s)"
629 msgstr "Comas-seasaimh (%s)"
630
631 #: ../../../src/ItemManager.cpp:684
632 #, c-format
633 msgid "Requires %s"
634 msgstr "Feumach air %s"
635
636 #: ../../../src/ItemManager.cpp:733
637 msgid "Quest Item"
638 msgstr "Nì cinn-thurais"
639
640 #: ../../../src/ItemManager.cpp:760
641 #, c-format
642 msgid "Quality: %s"
643 msgstr "Càileachd: %s"
644
645 #: ../../../src/ItemManager.cpp:785
646 #, c-format
647 msgid "Absorb: %d-%d"
648 msgstr "Ceapadh: %d–%d"
649
650 #: ../../../src/ItemManager.cpp:787
651 #, c-format
652 msgid "Absorb: %d"
653 msgstr "Ceapadh: %d"
654
655 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
656 #: ../../../src/MenuPowers.cpp:1134
657 #, c-format
658 msgid "Requires Level %d"
659 msgstr "Feum air leibheil %d"
660
661 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
662 #: ../../../src/MenuPowers.cpp:1125
663 #, c-format
664 msgid "Requires %s %d"
665 msgstr "Feum air: %s %d"
666
667 #: ../../../src/ItemManager.cpp:849
668 #, c-format
669 msgid "Requires Class: %s"
670 msgstr "Feum air a’ chlas: %s"
671
672 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
673 #, c-format
674 msgid "Buy Price: %d %s"
675 msgstr "Prìs ceannaich: %d %s"
676
677 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
678 #, c-format
679 msgid "Buy Price: %d %s each"
680 msgstr "Prìs ceannaich: %d %s an urra"
681
682 #: ../../../src/ItemManager.cpp:886
683 #, c-format
684 msgid "Sell Price: %d %s"
685 msgstr "Prìs reic: %d %s"
686
687 #: ../../../src/ItemManager.cpp:888
688 #, c-format
689 msgid "Sell Price: %d %s each"
690 msgstr "Prìs reic: %d %s an urra"
691
692 #: ../../../src/ItemManager.cpp:897
693 msgid "Set:"
694 msgstr "Seata:"
695
696 #: ../../../src/ItemManager.cpp:904
697 #, c-format
698 msgid "%d items:"
699 msgstr "%d nithean:"
700
701 #: ../../../src/ItemManager.cpp:917
702 #, c-format
703 msgid "Press [%s] to use"
704 msgstr "Brùth air [%s] gus a chleachdadh"
705
706 #: ../../../src/ItemManager.cpp:920
707 #, c-format
708 msgid "Press [%s] to read"
709 msgstr "Brùth air [%s] gus a leughadh"
710
711 #: ../../../src/MenuActionBar.cpp:87
712 msgid "Loot tooltip visibility"
713 msgstr "Faicsinneachd gliocasan-sgrìn nam spùinn"
714
715 #: ../../../src/MenuActionBar.cpp:88
716 msgid "Mini-map mode"
717 msgstr "Modh a’ mheanbh-mhapa"
718
719 #: ../../../src/MenuActionBar.cpp:89
720 msgid "Always show stat bar labels"
721 msgstr "Seall leubailean bàr na stadastaireachd an-còmhnaidh"
722
723 #: ../../../src/MenuActionBar.cpp:90
724 msgid "Show combat text"
725 msgstr "Seall teacsa na còmhraige"
726
727 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
728 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
729 #, c-format
730 msgid "Hotkey: %s"
731 msgstr "Grad-iuchair: %s"
732
733 #: ../../../src/MenuActionBar.cpp:474
734 #, c-format
735 msgid "Default. Temporarily show all loot tooltips with '%s'."
736 msgstr "Tùsail. Seall a h-uile gliocas-sgrìn nam spùinn rè seal le “%s”."
737
738 #: ../../../src/MenuActionBar.cpp:476
739 #, c-format
740 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
741 msgstr ""
742 "Seall na h-uile. Falaich a h-uile gliocas-sgrìn nam spùinn rè seal le “%s”."
743
744 #: ../../../src/MenuActionBar.cpp:478
745 #, c-format
746 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
747 msgstr ""
748 "Falaich na h-uile. Falaich a h-uile gliocas-sgrìn nam spùinn rè seal le "
749 "“%s”."
750
751 #: ../../../src/MenuActionBar.cpp:482
752 msgid "Visible"
753 msgstr "Ri fhaicinn"
754
755 #: ../../../src/MenuActionBar.cpp:484
756 msgid "Visible (2x zoom)"
757 msgstr ""
758
759 #: ../../../src/MenuActionBar.cpp:486
760 msgid "Hidden"
761 msgstr "Falaichte"
762
763 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
764 msgid "Enabled"
765 msgstr "An comas"
766
767 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
768 msgid "Disabled"
769 msgstr "À comas"
770
771 #: ../../../src/MenuActionBar.cpp:657
772 msgid "Not enough MP."
773 msgstr "Chan fhoghainn na PG."
774
775 #: ../../../src/MenuActiveEffects.cpp:124
776 #, c-format
777 msgid "x%d"
778 msgstr "x%d"
779
780 #: ../../../src/MenuActiveEffects.cpp:219
781 msgid "Remaining:"
782 msgstr "Air fhàgail:"
783
784 #: ../../../src/MenuActiveEffects.cpp:225
785 #, c-format
786 msgid "x%d stacks"
787 msgstr "x%d cruach(an)"
788
789 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
790 msgid "Name"
791 msgstr "Ainm"
792
793 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
794 msgid "Level"
795 msgstr "Leibheil"
796
797 #: ../../../src/MenuCharacter.cpp:310
798 #, c-format
799 msgid "%d unspent stat point"
800 msgstr "%d phuing-pearsa nach deach a chleachdadh"
801
802 #: ../../../src/MenuCharacter.cpp:313
803 #, c-format
804 msgid "%d unspent stat points"
805 msgstr "%d puing(ean)-pearsa nach deach a chleachdadh"
806
807 #: ../../../src/MenuCharacter.cpp:355
808 #, c-format
809 msgid "Reduces the damage taken from \"%s\" elemental attacks."
810 msgstr ""
811 "Ìslichidh seo an dochann a dh’fhulaingeas tu o ionnsaighean dùileach “%s”"
812
813 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
814 #, c-format
815 msgid "XP: %d"
816 msgstr "Puingean-eòlais: %d"
817
818 #: ../../../src/MenuCharacter.cpp:367
819 #, c-format
820 msgid "Next: %d"
821 msgstr "An ath-fhear: %d"
822
823 #: ../../../src/MenuCharacter.cpp:373
824 #, c-format
825 msgid "base (%d), bonus (%d)"
826 msgstr "bunait (%d), duais (%d)"
827
828 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
829 msgid "Related stats:"
830 msgstr "Stadastaireachd cho-cheangailte:"
831
832 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
833 #, c-format
834 msgid "Each level grants %d."
835 msgstr "Bheir gach leibheil %d dhut."
836
837 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
838 #, c-format
839 msgid "Each point of %s grants %d."
840 msgstr "Bheir gach puing dhe %s %d dhut."
940 "Cuiridh seo breathan paraileige (nach eil ’nan leacagan) an comas. "
941 "Dh’fhaoidte gum faigh thu barrachd dèanadais ma chuireas tu seo à comas."
942
943 #: ../../../src/MenuConfig.cpp:512
944 msgid ""
945 "Enables the below setting that controls the screen gamma level. The behavior"
946 " of the gamma setting can vary between platforms."
947 msgstr ""
948 "Cuiridh seo an comas an roghainn gu h-ìosal air leibheil gamma na sgrìn. "
949 "Dh’fhaoidte gum bi giùlan eadar-dhealaichte na roghainn gamma air ùrlaran "
950 "eadar-dhealaichte."
951
952 #: ../../../src/MenuConfig.cpp:513
953 msgid ""
954 "Provides additional text for information that is primarily conveyed through "
955 "color."
956 msgstr ""
957 "Solairidh seo teacsa a bharrachd airson fiosrachadh a thèid a shealltainn le"
958 " dath gu h-àraidh."
959
960 #: ../../../src/MenuConfig.cpp:514
961 msgid ""
962 "Some mods will automatically hide the stat bars when they are inactive. "
963 "Disabling this option will keep them displayed at all times."
964 msgstr ""
965 "Falaichidh cuid a thuilleadain bàraichean na stadastaireachd nuair a bhios "
966 "iad à comas. Ma chuireas tu an roghainn seo à comas, thèid an sealltainn an-"
967 "còmhnaidh."
968
969 #: ../../../src/MenuConfig.cpp:515
970 msgid ""
971 "When enabled, empty equipment slots will be filled with applicable items "
972 "when they are obtained."
973 msgstr ""
974 "Nuair a bhios seo an comas, thèid slotaichean uidheamachd falamh a lìonadh "
975 "le nithean iomchaidh nuair a gheibh thu iad."
976
977 #: ../../../src/MenuConfig.cpp:516
978 msgid ""
979 "Shows a marker above enemies, allies, and the player when they are obscured "
980 "by tall objects."
981 msgstr ""
982 "Seallaidh seo comharra os cionn nan nàimhdean, nan caidreabhach ’s a’ "
983 "chluicheadair nuair a thèid am falach le nithean mòra."
984
985 #: ../../../src/MenuConfig.cpp:517
986 msgid ""
987 "This allows the game to be controlled entirely with the keyboard (or "
988 "joystick)."
989 msgstr ""
990 "Nuair a bhiod seo air, ’s urrainn dhut an geama a stiùireadh leis a’ mheur-"
991 "chlàr (no joystick) a-mhàin."
992
993 #: ../../../src/MenuConfig.cpp:518
994 msgid ""
995 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
996 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
997 "instead of 'Main1'."
998 msgstr ""
999 "Nuair a bhios “Gluais an gaisgeach leis an luchag” an comas, stiùirichidh an"
1000 " roghainn seo co-dhiù an dèid “Prìomh-ghnìomh” no “Gnìomh dàrnach” a "
1001 "chleachdadh airson an gaisgeach a ghluasad. Ma bhios e an comas, gluaisidh "
1002 "“Gnìomh dàrnach” seach “Prìomh-ghnìomh” an gaisgeach."
1003
1004 #: ../../../src/MenuConfig.cpp:519
1005 msgid ""
1006 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
1007 "assigned to the movement button can be used by targeting an enemy. If this "
1008 "setting is disabled, it is required to use 'Shift' to access the Power "
1009 "assigned to the movement button."
1010 msgstr ""
1011 "Nuair a bhios “Gluais an gaisgeach leis an luchag” an comas, stiùirichidh an"
1012 " roghainn seo ma ghabhas a’ chumhachd a chaidh iomruineadh do phutan a’ "
1013 "ghluasaid a chleachdadh le amas air nàmhaid. Ma tha an roghainn seo à comas,"
1014 " feumaidh tu “Shift” a chleachdadh ach an cleachd thu a’ chumhachd a chaidh "
1015 "iomruineadh do phutan a’ ghluasaid."
1016
1017 #: ../../../src/MenuConfig.cpp:520
1018 msgid ""
1019 "The player's attacks will be aimed in the direction of the mouse cursor when"
1020 " this is enabled."
1021 msgstr ""
1022 "Thèid ionnsaighean a’ chluicheadair a dh’amas an comhair cùrsair na luchaige"
1023 " nuair a bhios seo an comas."
1024
1025 #: ../../../src/MenuConfig.cpp:571
1026 msgid "Active Mods"
1027 msgstr "Tuilleadain ghnìomhach"
1028
1029 #: ../../../src/MenuConfig.cpp:580
1030 msgid "Available Mods"
1031 msgstr "Tuilleadain ri làimh"
1032
1033 #: ../../../src/MenuConfig.cpp:599
1034 msgid "<< Disable"
1035 msgstr "<< Cuir à comas"
1036
1037 #: ../../../src/MenuConfig.cpp:605
1038 msgid "Enable >>"
1039 msgstr "Cuir an comas >>"
1040
1041 #: ../../../src/MenuConfig.cpp:1436
1042 msgid "Version:"
1043 msgstr "Tionndadh:"
1044
1045 #: ../../../src/MenuConfig.cpp:1441
1046 msgid "Game:"
1047 msgstr "Geama:"
1048
1049 #: ../../../src/MenuConfig.cpp:1446
1050 msgid "Engine version:"
1051 msgstr "Tionndadh an einnsein:"
1052
1053 #: ../../../src/MenuConfig.cpp:1454
1054 msgid "Requires mods:"
1055 msgstr "Feum air tuilleadain:"
1056
1057 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
1058 msgid "(none)"
1059 msgstr "(chan eil gin)"
1060
1061 #: ../../../src/MenuConfig.cpp:1579
1062 msgid "Save & Exit"
1063 msgstr "Sàbhail is fàg"
8411064
8421065 #: ../../../src/MenuDevConsole.cpp:63
8431066 msgid "Execute"
9041127
9051128 #: ../../../src/MenuDevConsole.cpp:361
9061129 msgid "turns on/off the display of the FPS counter"
907 msgstr ""
1130 msgstr "seallaidh/falaichidh seo cunntas nan FPS"
9081131
9091132 #: ../../../src/MenuDevConsole.cpp:362
9101133 msgid "turns on/off all of the HUD elements"
9681191
9691192 #: ../../../src/MenuDevConsole.cpp:385
9701193 msgid "Toggled the FPS counter"
971 msgstr ""
1194 msgstr "Chaidh cunntar nan FPS a thoglachadh"
9721195
9731196 #: ../../../src/MenuDevConsole.cpp:534
9741197 msgid "ERROR: Incorrect number of arguments"
10031226 msgid "HINT: Type help"
10041227 msgstr "OIDHEAM: Sgrìobh “help”"
10051228
1006 #: ../../../src/MenuEnemy.cpp:138
1229 #: ../../../src/MenuEnemy.cpp:162
10071230 #, c-format
10081231 msgid "%s level %d"
10091232 msgstr "%s leibheil %d"
10101233
1011 #: ../../../src/MenuEnemy.cpp:162
1234 #: ../../../src/MenuEnemy.cpp:186
10121235 msgid "Dead"
10131236 msgstr "Marbh"
10141237
1015 #: ../../../src/MenuEnemy.cpp:164
1238 #: ../../../src/MenuEnemy.cpp:188
10161239 msgid "Destroyed"
10171240 msgstr "Air a mhilleadh"
10181241
1019 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
1020 msgid "Paused"
1021 msgstr "’Na stad"
1022
1023 #: ../../../src/MenuExit.cpp:91
1024 msgid "Save & Exit"
1025 msgstr "Sàbhail is fàg"
1026
1027 #: ../../../src/MenuExit.cpp:92
1028 msgid "Exit"
1029 msgstr "Fàg an geama"
1030
1031 #: ../../../src/MenuExit.cpp:96
1032 msgid "Continue"
1033 msgstr "Lean air adhart"
1034
1035 #: ../../../src/MenuInventory.cpp:73
1036 msgid "Automatically equip items"
1037 msgstr "Uidheamaich nithean gu fèin-obrachail"
1038
1039 #: ../../../src/MenuInventory.cpp:188
1242 #: ../../../src/MenuInventory.cpp:177
10401243 #, c-format
10411244 msgid "Lost %d%% of %s."
10421245 msgstr "Chaill thu %d%% dhe %s."
10431246
1044 #: ../../../src/MenuInventory.cpp:195
1247 #: ../../../src/MenuInventory.cpp:184
10451248 #, c-format
10461249 msgid "Lost %d%% of total XP."
10471250 msgstr "Chaill thu %d%% dhe na puingean-eòlais iomlan."
10481251
1049 #: ../../../src/MenuInventory.cpp:200
1252 #: ../../../src/MenuInventory.cpp:189
10501253 #, c-format
10511254 msgid "Lost %d%% of current level XP."
10521255 msgstr "Chaill thu %d%% dhe na puingean-eòlais airson an leibheil seo."
10531256
1054 #: ../../../src/MenuInventory.cpp:226
1257 #: ../../../src/MenuInventory.cpp:215
10551258 #, c-format
10561259 msgid "Lost %s."
10571260 msgstr "Chaill thu %s."
10581261
1059 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1262 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10601263 #, c-format
10611264 msgid "%d %s"
10621265 msgstr "%d %s"
10631266
1064 #: ../../../src/MenuInventory.cpp:317
1267 #: ../../../src/MenuInventory.cpp:300
10651268 msgid "Pick up item(s):"
10661269 msgstr "Tog nì:"
10671270
1068 #: ../../../src/MenuInventory.cpp:318
1271 #: ../../../src/MenuInventory.cpp:301
10691272 msgid "Use or equip item:"
10701273 msgstr "Cleachd no uidheamaich nì:"
10711274
1072 #: ../../../src/MenuInventory.cpp:319
1275 #: ../../../src/MenuInventory.cpp:302
10731276 #, c-format
10741277 msgid "%s modifiers"
10751278 msgstr "Atharraichearan air %s"
10761279
1077 #: ../../../src/MenuInventory.cpp:320
1280 #: ../../../src/MenuInventory.cpp:303
10781281 msgid "Select a quantity of item:"
10791282 msgstr "Tagh uiread dhen nì:"
10801283
1081 #: ../../../src/MenuInventory.cpp:323
1284 #: ../../../src/MenuInventory.cpp:306
10821285 msgid "Stash item stack:"
10831286 msgstr "Cuir stac nan nithean dhan stòr:"
10841287
1085 #: ../../../src/MenuInventory.cpp:325
1288 #: ../../../src/MenuInventory.cpp:308
10861289 msgid "Sell item stack:"
10871290 msgstr "Reic stac nan nithean:"
10881291
1089 #: ../../../src/MenuInventory.cpp:592
1292 #: ../../../src/MenuInventory.cpp:574
10901293 msgid "You don't have enough of the required item."
10911294 msgstr "Chan eil gu leòr dhen nì riatanach agad."
10921295
1093 #: ../../../src/MenuInventory.cpp:599
1296 #: ../../../src/MenuInventory.cpp:586
10941297 msgid "You can't use this item right now."
10951298 msgstr "Chan urrainn dhut an nì seo a chleachdadh an-dràsta."
10961299
1097 #: ../../../src/MenuInventory.cpp:611
1300 #: ../../../src/MenuInventory.cpp:598
10981301 msgid "This item can only be used from the action bar."
10991302 msgstr "Cha ghabh an nì seo cleachdadh ach on bhàr-ghnìomhan."
11001303
1101 #: ../../../src/MenuInventory.cpp:729
1304 #: ../../../src/MenuInventory.cpp:716
11021305 msgid "Inventory is full."
11031306 msgstr "Tha an tasgadh làn."
11041307
1105 #: ../../../src/MenuInventory.cpp:849
1308 #: ../../../src/MenuInventory.cpp:841
11061309 #, c-format
11071310 msgid "Not enough %s."
11081311 msgstr "Chan eil %s gu leòr agad."
11091312
1110 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1313 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
11111314 msgid "This item can not be sold."
11121315 msgstr "Cha ghabh an nì seo reic."
11131316
11191322 msgid "Quests"
11201323 msgstr "Cinn-thurais"
11211324
1122 #: ../../../src/MenuManager.cpp:286
1325 #: ../../../src/MenuManager.cpp:296
11231326 #, c-format
11241327 msgid "XP: %d/%d"
11251328 msgstr "Puingean-eòlais: %d/%d"
11261329
1127 #: ../../../src/MenuManager.cpp:827
1330 #: ../../../src/MenuManager.cpp:854
11281331 msgid "This item can not be dropped."
11291332 msgstr "Chan urrainn dhut an nì seo a leigeil às."
11301333
11321335 msgid "Enter amount:"
11331336 msgstr "Cuir a-steach àireamh:"
11341337
1135 #: ../../../src/MenuPowers.cpp:787
1338 #: ../../../src/MenuPowers.cpp:786
11361339 msgid "Passive"
11371340 msgstr "Fulangach"
11381341
1139 #: ../../../src/MenuPowers.cpp:792
1342 #: ../../../src/MenuPowers.cpp:791
11401343 #, c-format
11411344 msgid "Costs %d MP"
11421345 msgstr "Cosgaidh e %d puingean-gluasaid"
11431346
1144 #: ../../../src/MenuPowers.cpp:796
1347 #: ../../../src/MenuPowers.cpp:795
11451348 #, c-format
11461349 msgid "Costs %d HP"
11471350 msgstr "Cosgaidh e %d puingean-beatha"
11481351
1149 #: ../../../src/MenuPowers.cpp:801
1352 #: ../../../src/MenuPowers.cpp:800
11501353 msgid "Cooldown:"
11511354 msgstr "Fuarachadh:"
11521355
1153 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1356 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11541357 msgid "Damage per second"
11551358 msgstr "Dochann gach diog"
11561359
1157 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1360 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11581361 msgid "HP per second"
11591362 msgstr "Puingean-beatha gach diog"
11601363
1161 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1364 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11621365 msgid "MP per second"
11631366 msgstr "Puingean-gluasaid gach diog"
11641367
1165 #: ../../../src/MenuPowers.cpp:885
1368 #: ../../../src/MenuPowers.cpp:884
11661369 msgid "Immobilize"
11671370 msgstr "Do-ghluasad"
11681371
1169 #: ../../../src/MenuPowers.cpp:893
1372 #: ../../../src/MenuPowers.cpp:892
11701373 msgid "Immunity"
11711374 msgstr "Dìonachd"
11721375
1173 #: ../../../src/MenuPowers.cpp:896
1376 #: ../../../src/MenuPowers.cpp:895
11741377 msgid "Immunity to damage over time"
11751378 msgstr "Dìonachd an aghaidh dochainn rè ùine"
11761379
1177 #: ../../../src/MenuPowers.cpp:899
1380 #: ../../../src/MenuPowers.cpp:898
11781381 msgid "Immunity to slow"
11791382 msgstr "Dìonachd an aghaidh maille"
11801383
1181 #: ../../../src/MenuPowers.cpp:902
1384 #: ../../../src/MenuPowers.cpp:901
11821385 msgid "Immunity to stun"
11831386 msgstr "Dìonachd an aghaidh tuainealaich"
11841387
1185 #: ../../../src/MenuPowers.cpp:905
1388 #: ../../../src/MenuPowers.cpp:904
11861389 msgid "Immunity to HP steal"
11871390 msgstr "Dìonachd an aghaidh goid phuingean-beatha"
11881391
1189 #: ../../../src/MenuPowers.cpp:908
1392 #: ../../../src/MenuPowers.cpp:907
11901393 msgid "Immunity to MP steal"
11911394 msgstr "Dìonachd an aghaidh goid phuingean-gluasaid"
11921395
1193 #: ../../../src/MenuPowers.cpp:911
1396 #: ../../../src/MenuPowers.cpp:910
11941397 msgid "Immunity to knockback"
11951398 msgstr "Dìonachd an aghaidh bualaidh air ais"
11961399
1197 #: ../../../src/MenuPowers.cpp:914
1400 #: ../../../src/MenuPowers.cpp:913
11981401 msgid "Immunity to damage reflection"
11991402 msgstr "Dìonachd an aghaidh frith-thilgeil dochainn"
12001403
1201 #: ../../../src/MenuPowers.cpp:917
1404 #: ../../../src/MenuPowers.cpp:916
12021405 msgid "Stun"
12031406 msgstr "Tuainealaich"
12041407
1205 #: ../../../src/MenuPowers.cpp:920
1408 #: ../../../src/MenuPowers.cpp:919
12061409 msgid "Automatic revive on death"
12071410 msgstr "Ath-ghin fèin-obrachail seach bàs"
12081411
1209 #: ../../../src/MenuPowers.cpp:923
1412 #: ../../../src/MenuPowers.cpp:922
12101413 msgid "Convert"
12111414 msgstr "Iompaich"
12121415
1213 #: ../../../src/MenuPowers.cpp:926
1416 #: ../../../src/MenuPowers.cpp:925
12141417 msgid "Fear"
12151418 msgstr "Eagal"
12161419
1217 #: ../../../src/MenuPowers.cpp:929
1420 #: ../../../src/MenuPowers.cpp:928
12181421 msgid "Lifespan"
12191422 msgstr "Faid-bheatha"
12201423
1221 #: ../../../src/MenuPowers.cpp:953
1424 #: ../../../src/MenuPowers.cpp:952
12221425 msgid "Magical Shield"
12231426 msgstr "Sgiath dhraoidheach"
12241427
1225 #: ../../../src/MenuPowers.cpp:982
1428 #: ../../../src/MenuPowers.cpp:981
12261429 msgid "Healing"
12271430 msgstr "Slànachadh"
12281431
1229 #: ../../../src/MenuPowers.cpp:985
1432 #: ../../../src/MenuPowers.cpp:984
12301433 msgid "Knockback"
12311434 msgstr "Bualadh air ais"
12321435
1233 #: ../../../src/MenuPowers.cpp:1010
1436 #: ../../../src/MenuPowers.cpp:1009
12341437 #, c-format
12351438 msgid "%d%% chance"
12361439 msgstr "teans de %d%%"
12371440
1238 #: ../../../src/MenuPowers.cpp:1062
1441 #: ../../../src/MenuPowers.cpp:1061
12391442 msgid "Base Accuracy"
12401443 msgstr "Pongalachd bhunasach"
12411444
1242 #: ../../../src/MenuPowers.cpp:1082
1445 #: ../../../src/MenuPowers.cpp:1081
12431446 msgid "Base Critical Chance"
12441447 msgstr "Teans bunasach air bualadh èiginneach"
12451448
1246 #: ../../../src/MenuPowers.cpp:1090
1449 #: ../../../src/MenuPowers.cpp:1089
12471450 msgid "Ignores Absorbtion"
12481451 msgstr "Leigidh seo seachad an ceapadh"
12491452
1250 #: ../../../src/MenuPowers.cpp:1095
1453 #: ../../../src/MenuPowers.cpp:1094
12511454 msgid "Ignores Avoidance"
12521455 msgstr "Leigidh seo seachad an seachnadh"
12531456
1254 #: ../../../src/MenuPowers.cpp:1100
1457 #: ../../../src/MenuPowers.cpp:1099
12551458 #, c-format
12561459 msgid "%d%% Chance to crit slowed targets"
12571460 msgstr "Teans dhe %d%% gun dèan thu bualadh èiginneach air amas le maille air"
12581461
1259 #: ../../../src/MenuPowers.cpp:1105
1462 #: ../../../src/MenuPowers.cpp:1104
12601463 #, c-format
12611464 msgid "Elemental Damage (%s)"
12621465 msgstr "Dochann dùile (%s)"
12631466
1264 #: ../../../src/MenuPowers.cpp:1114
1467 #: ../../../src/MenuPowers.cpp:1113
12651468 #, c-format
12661469 msgid "Requires a %s"
12671470 msgstr "Feum air: %s"
12681471
1269 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1472 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12701473 #, c-format
12711474 msgid "Requires Power: %s"
12721475 msgstr "Feum air cumhachd: %s"
12731476
1274 #: ../../../src/MenuPowers.cpp:1163
1477 #: ../../../src/MenuPowers.cpp:1162
12751478 msgid "Click to Unlock (uses 1 Skill Point)"
12761479 msgstr "Briog gus a neo-ghlasadh (cleachdaidh seo 1 phuing-sgil)"
12771480
1278 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1481 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12791482 msgid "Requires 1 Skill Point"
12801483 msgstr "Feum air 1 phuing-sgil"
12811484
1282 #: ../../../src/MenuPowers.cpp:1355
1485 #: ../../../src/MenuPowers.cpp:1354
12831486 #, c-format
12841487 msgid "%d unspent skill point"
12851488 msgstr "%dphuing-sgil nach deach a chleachdadh"
12861489
1287 #: ../../../src/MenuPowers.cpp:1358
1490 #: ../../../src/MenuPowers.cpp:1357
12881491 #, c-format
12891492 msgid "%d unspent skill points"
12901493 msgstr "%d puing(ean)-sgil nach deach a chleachdadh"
12911494
1292 #: ../../../src/MenuPowers.cpp:1388
1495 #: ../../../src/MenuPowers.cpp:1387
12931496 msgid "Next Level:"
12941497 msgstr "An t-ath leibheil:"
12951498
1296 #: ../../../src/MenuStash.cpp:96
1297 msgid "Shared Stash"
1298 msgstr "Stòr co-roinnte"
1299
1300 #: ../../../src/MenuStash.cpp:209
1499 #: ../../../src/MenuStash.cpp:53
1500 msgid "Private"
1501 msgstr "Prìobhaideach"
1502
1503 #: ../../../src/MenuStash.cpp:55
1504 msgid "Shared"
1505 msgstr "Co-roinnte"
1506
1507 #: ../../../src/MenuStash.cpp:103
1508 msgid "Stash"
1509 msgstr "Stòr"
1510
1511 #: ../../../src/MenuStash.cpp:258
13011512 msgid "Can not store quest items in the stash."
13021513 msgstr "Cha ghabh nithean cinn-thurais a chur dhan stòr."
13031514
1304 #: ../../../src/MenuStash.cpp:219
1515 #: ../../../src/MenuStash.cpp:263
1516 msgid "This item can not be stored in the stash."
1517 msgstr "Cha ghabh an nì seo a chur dhan stòr."
1518
1519 #: ../../../src/MenuStash.cpp:268
1520 msgid "This item can not be stored in the private stash."
1521 msgstr "Cha ghabh an nì seo a chur dhan stòr phrìobhaideach."
1522
1523 #: ../../../src/MenuStash.cpp:273
1524 msgid "This item can not be stored in the shared stash."
1525 msgstr "Cha ghabh an nì seo a chur dhan stòr cho-roinnte."
1526
1527 #: ../../../src/MenuStash.cpp:283
13051528 msgid "Stash is full."
13061529 msgstr "Tha an stòr làn."
13071530
1308 #: ../../../src/MenuTalker.cpp:454
1531 #: ../../../src/MenuStash.cpp:340
1532 #, c-format
1533 msgid "Can not store item in stash: %s"
1534 msgstr "Cha ghabh an nì a chur dhan stòr: %s"
1535
1536 #: ../../../src/MenuTalker.cpp:447
1537 #, c-format
1538 msgid "<dialog node %d>"
1539 msgstr "<nòd còmhraidh %d>"
1540
1541 #: ../../../src/MenuTalker.cpp:455
13091542 msgid "Trade"
13101543 msgstr "Malart"
13111544
13131546 msgid "Buyback"
13141547 msgstr "Na reic thu roimhe"
13151548
1316 #: ../../../src/MenuVendor.cpp:279
1549 #: ../../../src/MenuVendor.cpp:281
13171550 msgid "Vendor"
13181551 msgstr "Reiceadair"
13191552
1320 #: ../../../src/PowerManager.cpp:1136
1553 #: ../../../src/PowerManager.cpp:1170
13211554 #, c-format
13221555 msgid "+%d Shield"
13231556 msgstr "Sgiath +%d"
13241557
1325 #: ../../../src/PowerManager.cpp:1392
1558 #: ../../../src/PowerManager.cpp:1426
13261559 msgid "You are already transformed, untransform first."
13271560 msgstr ""
13281561 "Tha thu air cruth-atharrachadh mar-thà, feumaidh tu an cruth tùsail agad a "
13291562 "ghabhail an toiseach."
13301563
1331 #: ../../../src/PowerManager.cpp:1404
1564 #: ../../../src/PowerManager.cpp:1438
13321565 msgid "Could not untransform at this position."
13331566 msgstr "Cha b’ urrainn dhut neo-chruth-atharrachadh air an ionad seo."
13341567
13361569 msgid "Completed Quests"
13371570 msgstr "Cinn-thurais air a choileanadh"
13381571
1339 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1572 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13401573 msgid "Game saved."
13411574 msgstr "Chaidh an geama a shàbhaladh."
13421575
1343 #: ../../../src/SDLInputState.cpp:582
1576 #: ../../../src/SDLInputState.cpp:643
1577 msgid "BkSp"
1578 msgstr "BkSp"
1579
1580 #: ../../../src/SDLInputState.cpp:644
1581 msgid "Caps"
1582 msgstr "Caps"
1583
1584 #: ../../../src/SDLInputState.cpp:645
1585 msgid "Del"
1586 msgstr "Del"
1587
1588 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1589 msgid "End"
1590 msgstr "End"
1591
1592 #: ../../../src/SDLInputState.cpp:648
1593 msgid "Esc"
1594 msgstr "Esc"
1595
1596 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1597 msgid "Home"
1598 msgstr "Home"
1599
1600 #: ../../../src/SDLInputState.cpp:650
1601 msgid "Ins"
1602 msgstr "Ins"
1603
1604 #: ../../../src/SDLInputState.cpp:651
1605 msgid "LAlt"
1606 msgstr "Alt clì"
1607
1608 #: ../../../src/SDLInputState.cpp:652
1609 msgid "LCtrl"
1610 msgstr "Ctrl clì"
1611
1612 #: ../../../src/SDLInputState.cpp:654
1613 msgid "LShft"
1614 msgstr "Shift clì"
1615
1616 #: ../../../src/SDLInputState.cpp:655
1617 msgid "Num"
1618 msgstr "Num"
1619
1620 #: ../../../src/SDLInputState.cpp:656
1621 msgid "PgDn"
1622 msgstr "PgDn"
1623
1624 #: ../../../src/SDLInputState.cpp:657
1625 msgid "PgUp"
1626 msgstr "PgUp"
1627
1628 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1629 msgid "Pause"
1630 msgstr "Pause"
1631
1632 #: ../../../src/SDLInputState.cpp:659
1633 msgid "Print"
1634 msgstr "Print"
1635
1636 #: ../../../src/SDLInputState.cpp:660
1637 msgid "RAlt"
1638 msgstr "Alt deas"
1639
1640 #: ../../../src/SDLInputState.cpp:661
1641 msgid "RCtrl"
1642 msgstr "Ctrl deas"
1643
1644 #: ../../../src/SDLInputState.cpp:662
1645 msgid "Ret"
1646 msgstr "Return"
1647
1648 #: ../../../src/SDLInputState.cpp:664
1649 msgid "RShft"
1650 msgstr "Shift deas"
1651
1652 #: ../../../src/SDLInputState.cpp:665
1653 msgid "SLock"
1654 msgstr "SLock"
1655
1656 #: ../../../src/SDLInputState.cpp:666
1657 msgid "Spc"
1658 msgstr "Spc"
1659
1660 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1661 msgid "Tab"
1662 msgstr "Tab"
1663
1664 #: ../../../src/SDLInputState.cpp:673
13441665 msgid "Backspace"
13451666 msgstr "Backspace"
13461667
1347 #: ../../../src/SDLInputState.cpp:583
1668 #: ../../../src/SDLInputState.cpp:674
13481669 msgid "CapsLock"
13491670 msgstr "CapsLock"
13501671
1351 #: ../../../src/SDLInputState.cpp:586
1352 msgid "End"
1353 msgstr "End"
1354
1355 #: ../../../src/SDLInputState.cpp:587
1672 #: ../../../src/SDLInputState.cpp:678
13561673 msgid "Escape"
13571674 msgstr "Escape"
13581675
1359 #: ../../../src/SDLInputState.cpp:588
1360 msgid "Home"
1361 msgstr "Home"
1362
1363 #: ../../../src/SDLInputState.cpp:589
1676 #: ../../../src/SDLInputState.cpp:680
13641677 msgid "Insert"
13651678 msgstr "Insert"
13661679
1367 #: ../../../src/SDLInputState.cpp:590
1680 #: ../../../src/SDLInputState.cpp:681
13681681 msgid "Left Alt"
13691682 msgstr "Alt clì"
13701683
1371 #: ../../../src/SDLInputState.cpp:591
1684 #: ../../../src/SDLInputState.cpp:682
13721685 msgid "Left Ctrl"
13731686 msgstr "Ctrl clì"
13741687
1375 #: ../../../src/SDLInputState.cpp:593
1688 #: ../../../src/SDLInputState.cpp:684
13761689 msgid "Left Shift"
13771690 msgstr "Shift clì"
13781691
1379 #: ../../../src/SDLInputState.cpp:594
1692 #: ../../../src/SDLInputState.cpp:685
13801693 msgid "NumLock"
13811694 msgstr "NumLock"
13821695
1383 #: ../../../src/SDLInputState.cpp:595
1696 #: ../../../src/SDLInputState.cpp:686
13841697 msgid "PageDown"
13851698 msgstr "PageDown"
13861699
1387 #: ../../../src/SDLInputState.cpp:596
1700 #: ../../../src/SDLInputState.cpp:687
13881701 msgid "PageUp"
13891702 msgstr "PageUp"
13901703
1391 #: ../../../src/SDLInputState.cpp:597
1392 msgid "Pause"
1393 msgstr "Pause"
1394
1395 #: ../../../src/SDLInputState.cpp:598
1704 #: ../../../src/SDLInputState.cpp:689
13961705 msgid "PrintScreen"
13971706 msgstr "PrintScreen"
13981707
1399 #: ../../../src/SDLInputState.cpp:599
1708 #: ../../../src/SDLInputState.cpp:690
14001709 msgid "Right Alt"
14011710 msgstr "Alt deas"
14021711
1403 #: ../../../src/SDLInputState.cpp:600
1712 #: ../../../src/SDLInputState.cpp:691
14041713 msgid "Right Ctrl"
14051714 msgstr "Ctrl deas"
14061715
1407 #: ../../../src/SDLInputState.cpp:601
1716 #: ../../../src/SDLInputState.cpp:692
14081717 msgid "Return"
14091718 msgstr "Return"
14101719
1411 #: ../../../src/SDLInputState.cpp:603
1720 #: ../../../src/SDLInputState.cpp:694
14121721 msgid "Right Shift"
14131722 msgstr "Shift deas"
14141723
1415 #: ../../../src/SDLInputState.cpp:604
1724 #: ../../../src/SDLInputState.cpp:695
14161725 msgid "ScrollLock"
14171726 msgstr "ScrollLock"
14181727
1419 #: ../../../src/SDLInputState.cpp:605
1728 #: ../../../src/SDLInputState.cpp:696
14201729 msgid "Space"
14211730 msgstr "Space"
14221731
1423 #: ../../../src/SDLInputState.cpp:606
1424 msgid "Tab"
1425 msgstr "Tab"
1426
1427 #: ../../../src/SDLInputState.cpp:620
1732 #: ../../../src/SDLInputState.cpp:710
1733 #, c-format
1734 msgid "M%d"
1735 msgstr "Luch%d"
1736
1737 #: ../../../src/SDLInputState.cpp:716
14281738 #, c-format
14291739 msgid "Mouse %d"
14301740 msgstr "%d na luchaige"
14311741
1432 #: ../../../src/SDLInputState.cpp:628
1742 #: ../../../src/SDLInputState.cpp:726
1743 #, c-format
1744 msgid "JX%d-"
1745 msgstr "BiorX%d-"
1746
1747 #: ../../../src/SDLInputState.cpp:728
14331748 #, c-format
14341749 msgid "Axis %d -"
14351750 msgstr "Aiseal %d -"
14361751
1437 #: ../../../src/SDLInputState.cpp:630
1752 #: ../../../src/SDLInputState.cpp:732
1753 #, c-format
1754 msgid "JX%d+"
1755 msgstr "BiorX%d+"
1756
1757 #: ../../../src/SDLInputState.cpp:734
14381758 #, c-format
14391759 msgid "Axis %d +"
14401760 msgstr "Aiseal %d +"
14411761
1442 #: ../../../src/SDLInputState.cpp:633
1762 #: ../../../src/SDLInputState.cpp:739
1763 #, c-format
1764 msgid "JB%d"
1765 msgstr "BiorPut%d"
1766
1767 #: ../../../src/SDLInputState.cpp:741
14431768 #, c-format
14441769 msgid "Button %d"
14451770 msgstr "Putan %d"
14461771
1447 #: ../../../src/SDLInputState.cpp:637
1448 msgid "(none)"
1449 msgstr "(chan eil gin)"
1450
1451 #: ../../../src/SDLInputState.cpp:677
1772 #: ../../../src/SDLInputState.cpp:788
14521773 msgid "Touch control D-Pad"
14531774 msgstr "Pada-D an t-suathaidh"
14541775
1455 #: ../../../src/SDLInputState.cpp:701
1776 #: ../../../src/SDLInputState.cpp:812
14561777 msgid "Touch control buttons"
14571778 msgstr "Putanan an t-suathaidh"
14581779
1459 #: ../../../src/SDLInputState.cpp:716
1780 #: ../../../src/SDLInputState.cpp:827
14601781 msgid "Tap"
14611782 msgstr "Gnogadh"
14621783
1463 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1464 #: ../../../src/SDLInputState.cpp:768
1784 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1785 #, c-format
1786 msgid "Can not bind: %s"
1787 msgstr "Cha ghabh a nasgadh: %s"
1788
1789 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1790 #: ../../../src/SDLInputState.cpp:901
14651791 #, c-format
14661792 msgid "'%s' is no longer bound to:"
14671793 msgstr "Chan eil “%s” naisgte tuilleadh ri:"
16301956 msgid "k"
16311957 msgstr "k"
16321958
1633 #: ../../../src/Utils.cpp:580
1959 #: ../../../src/Utils.cpp:616
16341960 #, c-format
16351961 msgid "%s second"
16361962 msgstr "%s diog"
16371963
1638 #: ../../../src/Utils.cpp:583
1964 #: ../../../src/Utils.cpp:619
16391965 #, c-format
16401966 msgid "%s seconds"
16411967 msgstr "%s diog(an)"
1010 msgstr ""
1111 "Project-Id-Version: PACKAGE VERSION\n"
1212 "Report-Msgid-Bugs-To: \n"
13 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
13 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1414 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1515 "Last-Translator: Justin Jacobs <jajdorkster@gmail.com>, 2018\n"
1616 "Language-Team: Galician (https://www.transifex.com/flareorg/teams/84925/gl/)\n"
2020 "Language: gl\n"
2121 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
2222
23 #: ../../../src/Avatar.cpp:367
23 #: ../../../src/Avatar.cpp:387
24 msgid "Your health is low!"
25 msgstr ""
26
27 #: ../../../src/Avatar.cpp:419
2428 #, c-format
2529 msgid "Congratulations, you have reached level %d!"
2630 msgstr "Parabéns, chegaches ao nivel %d!"
2731
28 #: ../../../src/Avatar.cpp:369
29 msgid "You may increase one attribute through the Character Menu."
30 msgstr "Podes aumentar un atributo desde o menú da personaxe."
31
32 #: ../../../src/Avatar.cpp:583
32 #: ../../../src/Avatar.cpp:421
33 msgid "You may increase one or more attributes through the Character Menu."
34 msgstr ""
35
36 #: ../../../src/Avatar.cpp:425
37 msgid "You may unlock one or more abilities through the Powers Menu."
38 msgstr ""
39
40 #: ../../../src/Avatar.cpp:692
3341 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3442 msgstr ""
3543
36 #: ../../../src/Avatar.cpp:589
44 #: ../../../src/Avatar.cpp:698
3745 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
3846 msgstr ""
3947
40 #: ../../../src/Avatar.cpp:839
48 #: ../../../src/Avatar.cpp:949
4149 msgid "Transformation expired. You have been moved back to a safe place."
4250 msgstr ""
4351
4654 msgid "%d %s removed."
4755 msgstr "%d %s menos."
4856
49 #: ../../../src/CampaignManager.cpp:162
57 #: ../../../src/CampaignManager.cpp:165
58 #, c-format
59 msgid "%s x%d removed."
60 msgstr ""
61
62 #: ../../../src/CampaignManager.cpp:167
5063 #, c-format
5164 msgid "%s removed."
5265 msgstr "%s menos."
5366
54 #: ../../../src/CampaignManager.cpp:175
67 #: ../../../src/CampaignManager.cpp:180
5568 #, c-format
5669 msgid "You receive %s."
5770 msgstr "Obtiveches unha unidade de %s."
5871
59 #: ../../../src/CampaignManager.cpp:177
72 #: ../../../src/CampaignManager.cpp:182
6073 #, c-format
6174 msgid "You receive %s x%d."
6275 msgstr "Obtiveches %d unidades de %s."
6376
64 #: ../../../src/CampaignManager.cpp:186
77 #: ../../../src/CampaignManager.cpp:191
6578 #, c-format
6679 msgid "You receive %d %s."
6780 msgstr "Obtiveches %d %s."
6881
69 #: ../../../src/CampaignManager.cpp:195
82 #: ../../../src/CampaignManager.cpp:200
7083 #, c-format
7184 msgid "You receive %d XP."
7285 msgstr "A túa experiencia aumentou %d puntos."
7386
74 #: ../../../src/CampaignManager.cpp:201
87 #: ../../../src/CampaignManager.cpp:206
7588 msgid "HP restored."
7689 msgstr "Recuperaches a vida."
7790
78 #: ../../../src/CampaignManager.cpp:205
91 #: ../../../src/CampaignManager.cpp:210
7992 msgid "MP restored."
8093 msgstr "Recuperaches a enerxía."
8194
82 #: ../../../src/CampaignManager.cpp:210
95 #: ../../../src/CampaignManager.cpp:215
8396 msgid "HP and MP restored."
8497 msgstr "Recuperaches a vida e a enerxía."
8598
86 #: ../../../src/CampaignManager.cpp:214
99 #: ../../../src/CampaignManager.cpp:219
87100 msgid "Negative effects removed."
88101 msgstr "Elimináronse os efectos negativos."
89102
90 #: ../../../src/CampaignManager.cpp:220
103 #: ../../../src/CampaignManager.cpp:225
91104 msgid "HP and MP restored, negative effects removed"
92105 msgstr "Recuperaches a vida e a enerxía, e elimináronse os efectos negativos."
93106
105118 "The default renderer that is often faster than the SDL software renderer."
106119 msgstr ""
107120
108 #: ../../../src/EngineSettings.cpp:561
121 #: ../../../src/EngineSettings.cpp:572
109122 msgid "Adventurer"
110123 msgstr "Aventureiro"
111124
112 #: ../../../src/Entity.cpp:511
125 #: ../../../src/Entity.cpp:522
113126 msgid "miss"
114127 msgstr "fallo"
115128
116 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
117 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
129 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
130 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
118131 #, c-format
119132 msgid "+%d HP"
120133 msgstr "+%d de vida"
121134
122 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
123 #: ../../../src/StatBlock.cpp:822
135 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
136 #: ../../../src/StatBlock.cpp:830
124137 #, c-format
125138 msgid "+%d MP"
126139 msgstr "+%d de enerxía"
127140
128 #: ../../../src/EventManager.cpp:738
141 #: ../../../src/EventManager.cpp:782
129142 msgid "Unknown destination"
130143 msgstr "Destino descoñecido."
131144
132 #: ../../../src/GameStateConfigBase.cpp:89
133 #: ../../../src/GameStateConfigBase.cpp:110
145 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
146 msgid "Loading..."
147 msgstr "Cargando…"
148
149 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
150 msgid "Delete Save"
151 msgstr "Borrar a partida"
152
153 #: ../../../src/GameStateLoad.cpp:90
154 msgid "Delete this save?"
155 msgstr "Estás seguro?"
156
157 #: ../../../src/GameStateLoad.cpp:92
158 msgid "Exit to Title"
159 msgstr "Menú principal"
160
161 #: ../../../src/GameStateLoad.cpp:95
162 msgid "New Game"
163 msgstr "Nova partida"
164
165 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
166 msgid "Choose a Slot"
167 msgstr "Escolla un espazo"
168
169 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
170 msgid "Enable a story mod to continue"
171 msgstr "Activa unha modificación de historia para continuar."
172
173 #: ../../../src/GameStateLoad.cpp:597
174 msgid "Load Game"
175 msgstr "Cargar a partida"
176
177 #: ../../../src/GameStateLoad.cpp:706
178 msgid "Entering game world..."
179 msgstr "Cargando o mundo…"
180
181 #: ../../../src/GameStateLoad.cpp:709
182 msgid "Loading saved game..."
183 msgstr "Cargando a partida..."
184
185 #: ../../../src/GameStateLoad.cpp:742
186 msgid "Invalid save"
187 msgstr ""
188
189 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
190 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
191 #: ../../../src/MenuPowers.cpp:1543
192 #, c-format
193 msgid "Level %d"
194 msgstr "Nivel %d"
195
196 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
197 #: ../../../src/MenuConfig.cpp:244
198 msgid "Cancel"
199 msgstr "Cancelar"
200
201 #: ../../../src/GameStateNew.cpp:68
202 msgid "Create"
203 msgstr "Crear"
204
205 #: ../../../src/GameStateNew.cpp:76
206 msgid "Randomize"
207 msgstr ""
208
209 #: ../../../src/GameStateNew.cpp:92
210 msgid "Choose a Portrait"
211 msgstr "Retrato:"
212
213 #: ../../../src/GameStateNew.cpp:96
214 msgid "Choose a Name"
215 msgstr "Nome:"
216
217 #: ../../../src/GameStateNew.cpp:100
218 msgid "Permadeath?"
219 msgstr "Perder a partida ao morrer."
220
221 #: ../../../src/GameStateNew.cpp:104
222 msgid "Choose a Class"
223 msgstr "Clase:"
224
225 #: ../../../src/GameStateTitle.cpp:107
226 msgid "Play Game"
227 msgstr "Xogar"
228
229 #: ../../../src/GameStateTitle.cpp:110
230 msgid "Enable a core mod to continue"
231 msgstr "Activa unha modificación base para continuar."
232
233 #: ../../../src/GameStateTitle.cpp:114
234 msgid "Configuration"
235 msgstr "Configuración"
236
237 #: ../../../src/GameStateTitle.cpp:117
238 msgid "Credits"
239 msgstr "Autores"
240
241 #: ../../../src/GameStateTitle.cpp:120
242 msgid "Exit Game"
243 msgstr "Saír"
244
245 #: ../../../src/InputState.cpp:407
246 msgid "Accept"
247 msgstr "Aceptar"
248
249 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
250 #: ../../../src/SDLInputState.cpp:698
251 msgid "Up"
252 msgstr "Arriba"
253
254 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
255 #: ../../../src/SDLInputState.cpp:676
256 msgid "Down"
257 msgstr "Abaixo"
258
259 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
260 #: ../../../src/SDLInputState.cpp:683
261 msgid "Left"
262 msgstr "Esquerda"
263
264 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
265 #: ../../../src/SDLInputState.cpp:693
266 msgid "Right"
267 msgstr "Dereita"
268
269 #: ../../../src/InputState.cpp:412
270 msgid "Bar1"
271 msgstr "Acción 1"
272
273 #: ../../../src/InputState.cpp:413
274 msgid "Bar2"
275 msgstr "Acción 2"
276
277 #: ../../../src/InputState.cpp:414
278 msgid "Bar3"
279 msgstr "Acción 3"
280
281 #: ../../../src/InputState.cpp:415
282 msgid "Bar4"
283 msgstr "Acción 4"
284
285 #: ../../../src/InputState.cpp:416
286 msgid "Bar5"
287 msgstr "Acción 5"
288
289 #: ../../../src/InputState.cpp:417
290 msgid "Bar6"
291 msgstr "Acción 6"
292
293 #: ../../../src/InputState.cpp:418
294 msgid "Bar7"
295 msgstr "Acción 7"
296
297 #: ../../../src/InputState.cpp:419
298 msgid "Bar8"
299 msgstr "Acción 8"
300
301 #: ../../../src/InputState.cpp:420
302 msgid "Bar9"
303 msgstr "Acción 9"
304
305 #: ../../../src/InputState.cpp:421
306 msgid "Bar0"
307 msgstr "Acción 0"
308
309 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
310 #: ../../../src/MenuCharacter.cpp:54
311 msgid "Character"
312 msgstr "Personaxe"
313
314 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
315 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
316 msgid "Inventory"
317 msgstr "Inventario"
318
319 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
320 #: ../../../src/MenuPowers.cpp:167
321 msgid "Powers"
322 msgstr "Habilidades"
323
324 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
325 #: ../../../src/MenuLog.cpp:72
326 msgid "Log"
327 msgstr "Rexistro"
328
329 #: ../../../src/InputState.cpp:426
330 msgid "Main1"
331 msgstr "Acción principal"
332
333 #: ../../../src/InputState.cpp:427
334 msgid "Main2"
335 msgstr "Acción secundaria"
336
337 #: ../../../src/InputState.cpp:428
338 msgid "Ctrl"
339 msgstr "Control"
340
341 #: ../../../src/InputState.cpp:429
342 msgid "Shift"
343 msgstr "Maiúsculas"
344
345 #: ../../../src/InputState.cpp:430
346 msgid "Alt"
347 msgstr ""
348
349 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
350 msgid "Delete"
351 msgstr "Suprimir"
352
353 #: ../../../src/InputState.cpp:432
354 msgid "ActionBar Accept"
355 msgstr "Aceptar (barra de accións)"
356
357 #: ../../../src/InputState.cpp:433
358 msgid "ActionBar Left"
359 msgstr "Esquerda (barra de accións)"
360
361 #: ../../../src/InputState.cpp:434
362 msgid "ActionBar Right"
363 msgstr "Dereita (barra de accións)"
364
365 #: ../../../src/InputState.cpp:435
366 msgid "ActionBar Use"
367 msgstr "Usar (barra de accións)"
368
369 #: ../../../src/InputState.cpp:436
370 msgid "Developer Menu"
371 msgstr "Menú de desenvolvedor"
372
373 #: ../../../src/InputState.cpp:438
374 msgid "Left Mouse"
375 msgstr ""
376
377 #: ../../../src/InputState.cpp:439
378 msgid "Middle Mouse"
379 msgstr ""
380
381 #: ../../../src/InputState.cpp:440
382 msgid "Right Mouse"
383 msgstr ""
384
385 #: ../../../src/InputState.cpp:441
386 msgid "Wheel Up"
387 msgstr ""
388
389 #: ../../../src/InputState.cpp:442
390 msgid "Wheel Down"
391 msgstr ""
392
393 #: ../../../src/InputState.cpp:443
394 msgid "Mouse X1"
395 msgstr ""
396
397 #: ../../../src/InputState.cpp:444
398 msgid "Mouse X2"
399 msgstr ""
400
401 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
402 msgid "Unknown Item"
403 msgstr "Elemento descoñecido"
404
405 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
406 #, c-format
407 msgid "%d%% Speed"
408 msgstr "%d%% velocidade"
409
410 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
411 #, c-format
412 msgid "%d%% Attack Speed"
413 msgstr ""
414
415 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
416 #: ../../../src/MenuPowers.cpp:832
417 #, c-format
418 msgid "Resistance (%s)"
419 msgstr ""
420
421 #: ../../../src/ItemManager.cpp:714
422 #, c-format
423 msgid "Requires %s"
424 msgstr ""
425
426 #: ../../../src/ItemManager.cpp:763
427 msgid "Quest Item"
428 msgstr "Obxecto dunha misión"
429
430 #: ../../../src/ItemManager.cpp:790
431 #, c-format
432 msgid "Quality: %s"
433 msgstr "Calidade: %s"
434
435 #: ../../../src/ItemManager.cpp:815
436 #, c-format
437 msgid "Absorb: %d-%d"
438 msgstr "Absorción: %d-%d"
439
440 #: ../../../src/ItemManager.cpp:817
441 #, c-format
442 msgid "Absorb: %d"
443 msgstr "Absorción: %d"
444
445 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
446 #: ../../../src/MenuPowers.cpp:1133
447 #, c-format
448 msgid "Requires Level %d"
449 msgstr "Require o nivel %d."
450
451 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
452 #: ../../../src/MenuPowers.cpp:1124
453 #, c-format
454 msgid "Requires %s %d"
455 msgstr ""
456
457 #: ../../../src/ItemManager.cpp:879
458 #, c-format
459 msgid "Requires Class: %s"
460 msgstr "Require a clase «%s»."
461
462 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
463 #, c-format
464 msgid "Buy Price: %d %s"
465 msgstr "Prezo de compra: %d %s"
466
467 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
468 #, c-format
469 msgid "Buy Price: %d %s each"
470 msgstr "Prezo de compra: %d %s por unidade"
471
472 #: ../../../src/ItemManager.cpp:916
473 #, c-format
474 msgid "Sell Price: %d %s"
475 msgstr "Prezo de venda: %d %s"
476
477 #: ../../../src/ItemManager.cpp:918
478 #, c-format
479 msgid "Sell Price: %d %s each"
480 msgstr "Prezo de venda: %d %s por unidade"
481
482 #: ../../../src/ItemManager.cpp:927
483 msgid "Set:"
484 msgstr ""
485
486 #: ../../../src/ItemManager.cpp:934
487 #, c-format
488 msgid "%d items:"
489 msgstr ""
490
491 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
492 #, c-format
493 msgid "Press [%s] to use"
494 msgstr ""
495
496 #: ../../../src/ItemManager.cpp:951
497 #, c-format
498 msgid "Press [%s] to read"
499 msgstr ""
500
501 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
502 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
503 #, c-format
504 msgid "Hotkey: %s"
505 msgstr ""
506
507 #: ../../../src/MenuActionBar.cpp:599
508 msgid "Not enough MP."
509 msgstr ""
510
511 #: ../../../src/MenuActiveEffects.cpp:124
512 #, c-format
513 msgid "x%d"
514 msgstr ""
515
516 #: ../../../src/MenuActiveEffects.cpp:219
517 msgid "Remaining:"
518 msgstr ""
519
520 #: ../../../src/MenuActiveEffects.cpp:225
521 #, c-format
522 msgid "x%d stacks"
523 msgstr ""
524
525 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
526 msgid "Name"
527 msgstr "Nome"
528
529 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
530 msgid "Level"
531 msgstr "Nivel"
532
533 #: ../../../src/MenuCharacter.cpp:310
534 #, c-format
535 msgid "%d unspent stat point"
536 msgstr ""
537
538 #: ../../../src/MenuCharacter.cpp:313
539 #, c-format
540 msgid "%d unspent stat points"
541 msgstr ""
542
543 #: ../../../src/MenuCharacter.cpp:355
544 #, c-format
545 msgid "Reduces the damage taken from \"%s\" elemental attacks."
546 msgstr ""
547
548 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
549 #, c-format
550 msgid "XP: %d"
551 msgstr "Experiencia: %d"
552
553 #: ../../../src/MenuCharacter.cpp:367
554 #, c-format
555 msgid "Next: %d"
556 msgstr "Seguinte nivel: %d"
557
558 #: ../../../src/MenuCharacter.cpp:373
559 #, c-format
560 msgid "base (%d), bonus (%d)"
561 msgstr "Base: %d. Bonificación: %d."
562
563 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
564 msgid "Related stats:"
565 msgstr ""
566
567 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
568 #, c-format
569 msgid "Each level grants %d."
570 msgstr ""
571
572 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
573 #, c-format
574 msgid "Each point of %s grants %d."
575 msgstr ""
576
577 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
578 msgid "Clear"
579 msgstr "Baleirar"
580
581 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
582 msgid "Assign:"
583 msgstr ""
584
585 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
134586 msgid "Defaults"
135587 msgstr "Restablecer"
136588
137 #: ../../../src/GameStateConfigBase.cpp:89
589 #: ../../../src/MenuConfig.cpp:123
138590 msgid "Reset ALL settings?"
139591 msgstr "Volver á configuración inicial?"
140592
141 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
593 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
142594 msgid "OK"
143595 msgstr "Aceptar"
144596
145 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
146 #: ../../../src/InputState.cpp:401
147 msgid "Cancel"
148 msgstr "Cancelar"
149
150 #: ../../../src/GameStateConfigBase.cpp:160
151 #: ../../../src/GameStateConfigDesktop.cpp:130
597 #: ../../../src/MenuConfig.cpp:246
598 msgid "Continue"
599 msgstr ""
600
601 #: ../../../src/MenuConfig.cpp:248
602 msgid "Save Game"
603 msgstr ""
604
605 #: ../../../src/MenuConfig.cpp:291
606 msgid "Default"
607 msgstr ""
608
609 #: ../../../src/MenuConfig.cpp:291
610 msgid ""
611 "Show all loot tooltips, except for those that would be obscured by the "
612 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
613 msgstr ""
614
615 #: ../../../src/MenuConfig.cpp:292
616 msgid "Show all"
617 msgstr ""
618
619 #: ../../../src/MenuConfig.cpp:292
620 msgid ""
621 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
622 msgstr ""
623
624 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
625 msgid "Hidden"
626 msgstr ""
627
628 #: ../../../src/MenuConfig.cpp:293
629 msgid ""
630 "Always hide loot tooltips, except for when a piece of loot is hovered with "
631 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
632 msgstr ""
633
634 #: ../../../src/MenuConfig.cpp:296
635 msgid "Visible"
636 msgstr ""
637
638 #: ../../../src/MenuConfig.cpp:297
639 msgid "Visible (2x zoom)"
640 msgstr ""
641
642 #: ../../../src/MenuConfig.cpp:301
643 msgid ""
644 "Controls the type of warning to be activated when the player is below the "
645 "low health threshold."
646 msgstr ""
647
648 #: ../../../src/MenuConfig.cpp:302
649 msgid "- Display a message"
650 msgstr ""
651
652 #: ../../../src/MenuConfig.cpp:303
653 msgid "- Play a sound"
654 msgstr ""
655
656 #: ../../../src/MenuConfig.cpp:304
657 msgid "- Change the cursor"
658 msgstr ""
659
660 #: ../../../src/MenuConfig.cpp:306
661 msgid "Disabled"
662 msgstr ""
663
664 #: ../../../src/MenuConfig.cpp:307
665 msgid "All"
666 msgstr ""
667
668 #: ../../../src/MenuConfig.cpp:308
669 msgid "Message & Cursor"
670 msgstr ""
671
672 #: ../../../src/MenuConfig.cpp:309
673 msgid "Message & Sound"
674 msgstr ""
675
676 #: ../../../src/MenuConfig.cpp:310
677 msgid "Sound & Cursor"
678 msgstr ""
679
680 #: ../../../src/MenuConfig.cpp:311
681 msgid "Message"
682 msgstr ""
683
684 #: ../../../src/MenuConfig.cpp:312
685 msgid "Cursor"
686 msgstr ""
687
688 #: ../../../src/MenuConfig.cpp:313
689 msgid "Sound"
690 msgstr ""
691
692 #: ../../../src/MenuConfig.cpp:319
693 msgid ""
694 "When the player's health drops below the given threshold, the low health "
695 "notifications are triggered if one or more of them is enabled."
696 msgstr ""
697
698 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
699 msgid "Exit"
700 msgstr "Volver ao menú"
701
702 #: ../../../src/MenuConfig.cpp:333
703 msgid "Video"
704 msgstr "Vídeo"
705
706 #: ../../../src/MenuConfig.cpp:334
152707 msgid "Audio"
153708 msgstr "Son"
154709
155 #: ../../../src/GameStateConfigBase.cpp:161
156 #: ../../../src/GameStateConfigDesktop.cpp:131
710 #: ../../../src/MenuConfig.cpp:335
157711 msgid "Interface"
158712 msgstr "Interface"
159713
160 #: ../../../src/GameStateConfigBase.cpp:162
161 #: ../../../src/GameStateConfigDesktop.cpp:134
714 #: ../../../src/MenuConfig.cpp:336
715 msgid "Input"
716 msgstr "Entrada"
717
718 #: ../../../src/MenuConfig.cpp:337
719 msgid "Keybindings"
720 msgstr "Controis"
721
722 #: ../../../src/MenuConfig.cpp:338
162723 msgid "Mods"
163724 msgstr "Mods"
164725
165 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
726 #: ../../../src/MenuConfig.cpp:350
727 msgid "Paused"
728 msgstr ""
729
730 #: ../../../src/MenuConfig.cpp:353
731 msgid "Time Played"
732 msgstr ""
733
734 #: ../../../src/MenuConfig.cpp:359
735 msgid "Renderer"
736 msgstr ""
737
738 #: ../../../src/MenuConfig.cpp:360
739 msgid "Full Screen Mode"
740 msgstr "Pantalla completa:"
741
742 #: ../../../src/MenuConfig.cpp:361
743 msgid "Hardware surfaces"
744 msgstr "Superficies por hardware:"
745
746 #: ../../../src/MenuConfig.cpp:362
747 msgid "V-Sync"
748 msgstr ""
749
750 #: ../../../src/MenuConfig.cpp:363
751 msgid "Texture Filtering"
752 msgstr ""
753
754 #: ../../../src/MenuConfig.cpp:364
755 msgid "DPI scaling"
756 msgstr ""
757
758 #: ../../../src/MenuConfig.cpp:365
759 msgid "Parallax Layers"
760 msgstr ""
761
762 #: ../../../src/MenuConfig.cpp:366
763 msgid "Allow changing gamma"
764 msgstr "Permitir cambiar o gamma:"
765
766 #: ../../../src/MenuConfig.cpp:367
767 msgid "Gamma"
768 msgstr "Gamma:"
769
770 #: ../../../src/MenuConfig.cpp:369
771 msgid "Sound Volume"
772 msgstr "Volume dos sons:"
773
774 #: ../../../src/MenuConfig.cpp:370
166775 msgid "Music Volume"
167776 msgstr "Volume da música:"
168777
169 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
170 msgid "Sound Volume"
171 msgstr "Volume dos sons:"
172
173 #: ../../../src/GameStateConfigBase.cpp:257
778 #: ../../../src/MenuConfig.cpp:372
174779 msgid "Language"
175780 msgstr "Idioma:"
176781
177 #: ../../../src/GameStateConfigBase.cpp:266
782 #: ../../../src/MenuConfig.cpp:373
178783 msgid "Show FPS"
179784 msgstr "Mostrar os FPS:"
180785
181 #: ../../../src/GameStateConfigBase.cpp:270
786 #: ../../../src/MenuConfig.cpp:374
787 msgid "Hardware mouse cursor"
788 msgstr "Cursor do rato por hardware:"
789
790 #: ../../../src/MenuConfig.cpp:375
182791 msgid "Colorblind Mode"
183792 msgstr "Modo daltónico:"
184793
185 #: ../../../src/GameStateConfigBase.cpp:274
186 msgid "Hardware mouse cursor"
187 msgstr "Cursor do rato por hardware:"
188
189 #: ../../../src/GameStateConfigBase.cpp:278
794 #: ../../../src/MenuConfig.cpp:376
190795 msgid "Developer Mode"
191796 msgstr "Modo de desenvolvedor"
192797
193 #: ../../../src/GameStateConfigBase.cpp:282
798 #: ../../../src/MenuConfig.cpp:377
194799 msgid "Subtitles"
195800 msgstr ""
196801
197 #: ../../../src/GameStateConfigBase.cpp:286
198 msgid "Active Mods"
199 msgstr "Mods activos:"
200
201 #: ../../../src/GameStateConfigBase.cpp:295
202 msgid "Available Mods"
203 msgstr "Mods dispoñíbeis:"
204
205 #: ../../../src/GameStateConfigBase.cpp:314
206 msgid "<< Disable"
207 msgstr "← Desactivar"
208
209 #: ../../../src/GameStateConfigBase.cpp:320
210 msgid "Enable >>"
211 msgstr "Activar →"
212
213 #: ../../../src/GameStateConfigBase.cpp:873
214 msgid "Version:"
215 msgstr ""
216
217 #: ../../../src/GameStateConfigBase.cpp:878
218 msgid "Game:"
219 msgstr ""
220
221 #: ../../../src/GameStateConfigBase.cpp:883
222 msgid "Engine version:"
223 msgstr ""
224
225 #: ../../../src/GameStateConfigBase.cpp:891
226 msgid "Requires mods:"
227 msgstr ""
228
229 #: ../../../src/GameStateConfigDesktop.cpp:83
230 #: ../../../src/GameStateConfigDesktop.cpp:751
231 msgid "Clear"
232 msgstr "Baleirar"
233
234 #: ../../../src/GameStateConfigDesktop.cpp:83
235 #: ../../../src/GameStateConfigDesktop.cpp:749
236 msgid "Assign:"
237 msgstr ""
238
239 #: ../../../src/GameStateConfigDesktop.cpp:128
240 msgid "Video"
241 msgstr "Vídeo"
242
243 #: ../../../src/GameStateConfigDesktop.cpp:132
244 msgid "Input"
245 msgstr "Entrada"
246
247 #: ../../../src/GameStateConfigDesktop.cpp:133
248 msgid "Keybindings"
249 msgstr "Controis"
250
251 #: ../../../src/GameStateConfigDesktop.cpp:188
802 #: ../../../src/MenuConfig.cpp:378
803 msgid "Loot tooltip visibility"
804 msgstr ""
805
806 #: ../../../src/MenuConfig.cpp:379
807 msgid "Mini-map mode"
808 msgstr ""
809
810 #: ../../../src/MenuConfig.cpp:380
811 msgid "Always show stat bar labels"
812 msgstr ""
813
814 #: ../../../src/MenuConfig.cpp:381
815 msgid "Allow stat bar auto-hiding"
816 msgstr ""
817
818 #: ../../../src/MenuConfig.cpp:382
819 msgid "Show combat text"
820 msgstr "Mostrar texto de combate:"
821
822 #: ../../../src/MenuConfig.cpp:383
823 msgid "Automatically equip items"
824 msgstr ""
825
826 #: ../../../src/MenuConfig.cpp:384
827 msgid "Show hidden entity markers"
828 msgstr ""
829
830 #: ../../../src/MenuConfig.cpp:385
831 msgid "Low health notification"
832 msgstr ""
833
834 #: ../../../src/MenuConfig.cpp:386
835 msgid "Low health threshold"
836 msgstr ""
837
838 #: ../../../src/MenuConfig.cpp:389
839 msgid "Joystick"
840 msgstr "Mando:"
841
842 #: ../../../src/MenuConfig.cpp:390
843 msgid "Move hero using mouse"
844 msgstr "Mover a personaxe co cursor:"
845
846 #: ../../../src/MenuConfig.cpp:391
847 msgid "Mouse aim"
848 msgstr "Apuntar co rato:"
849
850 #: ../../../src/MenuConfig.cpp:392
851 msgid "Do not use mouse"
852 msgstr "Non usar o rato:"
853
854 #: ../../../src/MenuConfig.cpp:393
855 msgid "Swap mouse movement button"
856 msgstr ""
857
858 #: ../../../src/MenuConfig.cpp:394
859 msgid "Attack with mouse movement"
860 msgstr ""
861
862 #: ../../../src/MenuConfig.cpp:395
863 msgid "Joystick Deadzone"
864 msgstr "Límite do mando"
865
866 #: ../../../src/MenuConfig.cpp:405
867 #, c-format
868 msgid "Primary binding: %s"
869 msgstr ""
870
871 #: ../../../src/MenuConfig.cpp:406
872 #, c-format
873 msgid "Alternate binding: %s"
874 msgstr ""
875
876 #: ../../../src/MenuConfig.cpp:407
877 #, c-format
878 msgid "Joystick binding: %s"
879 msgstr ""
880
881 #: ../../../src/MenuConfig.cpp:508
252882 msgid ""
253883 "Will try to store surfaces in video memory versus system memory. The effect "
254884 "this has on performance depends on the renderer."
255885 msgstr ""
256886
257 #: ../../../src/GameStateConfigDesktop.cpp:189
887 #: ../../../src/MenuConfig.cpp:509
258888 msgid ""
259889 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
260890 "windowed mode or input lag."
261891 msgstr ""
262892
263 #: ../../../src/GameStateConfigDesktop.cpp:190
893 #: ../../../src/MenuConfig.cpp:510
264894 msgid ""
265895 "When enabled, this uses the screen DPI in addition to the window dimensions "
266896 "to scale the rendering resolution. Otherwise, only the window dimensions are"
267897 " used."
268898 msgstr ""
269899
270 #: ../../../src/GameStateConfigDesktop.cpp:191
900 #: ../../../src/MenuConfig.cpp:511
271901 msgid ""
272902 "This enables parallax (non-tile) layers. Disabling this setting can improve "
273903 "performance in some cases."
274904 msgstr ""
275905
276 #: ../../../src/GameStateConfigDesktop.cpp:192
277 msgid "Experimental"
278 msgstr "Experimental."
279
280 #: ../../../src/GameStateConfigDesktop.cpp:193
281 msgid "For handheld devices"
282 msgstr "Para dispositivos móbiles."
283
284 #: ../../../src/GameStateConfigDesktop.cpp:211
285 msgid "Renderer"
286 msgstr ""
287
288 #: ../../../src/GameStateConfigDesktop.cpp:227
289 msgid "Full Screen Mode"
290 msgstr "Pantalla completa:"
291
292 #: ../../../src/GameStateConfigDesktop.cpp:231
293 msgid "Move hero using mouse"
294 msgstr "Mover a personaxe co cursor:"
295
296 #: ../../../src/GameStateConfigDesktop.cpp:235
297 msgid "Hardware surfaces"
298 msgstr "Superficies por hardware:"
299
300 #: ../../../src/GameStateConfigDesktop.cpp:239
301 msgid "V-Sync"
302 msgstr ""
303
304 #: ../../../src/GameStateConfigDesktop.cpp:243
305 msgid "Texture Filtering"
306 msgstr ""
307
308 #: ../../../src/GameStateConfigDesktop.cpp:247
309 msgid "DPI scaling"
310 msgstr ""
311
312 #: ../../../src/GameStateConfigDesktop.cpp:251
313 msgid "Parallax Layers"
314 msgstr ""
315
316 #: ../../../src/GameStateConfigDesktop.cpp:255
317 msgid "Allow changing gamma"
318 msgstr "Permitir cambiar o gamma:"
319
320 #: ../../../src/GameStateConfigDesktop.cpp:259
321 msgid "Gamma"
322 msgstr "Gamma:"
323
324 #: ../../../src/GameStateConfigDesktop.cpp:263
325 msgid "Use joystick"
326 msgstr "Empregar un mando:"
327
328 #: ../../../src/GameStateConfigDesktop.cpp:267
329 msgid "Joystick"
330 msgstr "Mando:"
331
332 #: ../../../src/GameStateConfigDesktop.cpp:283
333 msgid "Mouse aim"
334 msgstr "Apuntar co rato:"
335
336 #: ../../../src/GameStateConfigDesktop.cpp:287
337 msgid "Do not use mouse"
338 msgstr "Non usar o rato:"
339
340 #: ../../../src/GameStateConfigDesktop.cpp:291
341 msgid "Joystick Deadzone"
342 msgstr "Límite do mando"
343
344 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
345 msgid "Loading..."
346 msgstr "Cargando…"
347
348 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
349 msgid "Delete Save"
350 msgstr "Borrar a partida"
351
352 #: ../../../src/GameStateLoad.cpp:88
353 msgid "Delete this save?"
354 msgstr "Estás seguro?"
355
356 #: ../../../src/GameStateLoad.cpp:90
357 msgid "Exit to Title"
358 msgstr "Menú principal"
359
360 #: ../../../src/GameStateLoad.cpp:93
361 msgid "New Game"
362 msgstr "Nova partida"
363
364 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
365 msgid "Choose a Slot"
366 msgstr "Escolla un espazo"
367
368 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
369 msgid "Enable a story mod to continue"
370 msgstr "Activa unha modificación de historia para continuar."
371
372 #: ../../../src/GameStateLoad.cpp:589
373 msgid "Load Game"
374 msgstr "Cargar a partida"
375
376 #: ../../../src/GameStateLoad.cpp:695
377 msgid "Entering game world..."
378 msgstr "Cargando o mundo…"
379
380 #: ../../../src/GameStateLoad.cpp:698
381 msgid "Loading saved game..."
382 msgstr "Cargando a partida..."
383
384 #: ../../../src/GameStateLoad.cpp:731
385 msgid "Invalid save"
386 msgstr ""
387
388 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
389 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
390 #: ../../../src/MenuPowers.cpp:1542
391 #, c-format
392 msgid "Level %d"
393 msgstr "Nivel %d"
394
395 #: ../../../src/GameStateNew.cpp:68
396 msgid "Create"
397 msgstr "Crear"
398
399 #: ../../../src/GameStateNew.cpp:76
400 msgid "Randomize"
401 msgstr ""
402
403 #: ../../../src/GameStateNew.cpp:92
404 msgid "Choose a Portrait"
405 msgstr "Retrato:"
406
407 #: ../../../src/GameStateNew.cpp:96
408 msgid "Choose a Name"
409 msgstr "Nome:"
410
411 #: ../../../src/GameStateNew.cpp:100
412 msgid "Permadeath?"
413 msgstr "Perder a partida ao morrer."
414
415 #: ../../../src/GameStateNew.cpp:104
416 msgid "Choose a Class"
417 msgstr "Clase:"
418
419 #: ../../../src/GameStateTitle.cpp:108
420 msgid "Play Game"
421 msgstr "Xogar"
422
423 #: ../../../src/GameStateTitle.cpp:111
424 msgid "Enable a core mod to continue"
425 msgstr "Activa unha modificación base para continuar."
426
427 #: ../../../src/GameStateTitle.cpp:115
428 msgid "Configuration"
429 msgstr "Configuración"
430
431 #: ../../../src/GameStateTitle.cpp:118
432 msgid "Credits"
433 msgstr "Autores"
434
435 #: ../../../src/GameStateTitle.cpp:121
436 msgid "Exit Game"
437 msgstr "Saír"
438
439 #: ../../../src/InputState.cpp:402
440 msgid "Accept"
441 msgstr "Aceptar"
442
443 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
444 msgid "Up"
445 msgstr "Arriba"
446
447 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
448 msgid "Down"
449 msgstr "Abaixo"
450
451 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
452 msgid "Left"
453 msgstr "Esquerda"
454
455 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
456 msgid "Right"
457 msgstr "Dereita"
458
459 #: ../../../src/InputState.cpp:407
460 msgid "Bar1"
461 msgstr "Acción 1"
462
463 #: ../../../src/InputState.cpp:408
464 msgid "Bar2"
465 msgstr "Acción 2"
466
467 #: ../../../src/InputState.cpp:409
468 msgid "Bar3"
469 msgstr "Acción 3"
470
471 #: ../../../src/InputState.cpp:410
472 msgid "Bar4"
473 msgstr "Acción 4"
474
475 #: ../../../src/InputState.cpp:411
476 msgid "Bar5"
477 msgstr "Acción 5"
478
479 #: ../../../src/InputState.cpp:412
480 msgid "Bar6"
481 msgstr "Acción 6"
482
483 #: ../../../src/InputState.cpp:413
484 msgid "Bar7"
485 msgstr "Acción 7"
486
487 #: ../../../src/InputState.cpp:414
488 msgid "Bar8"
489 msgstr "Acción 8"
490
491 #: ../../../src/InputState.cpp:415
492 msgid "Bar9"
493 msgstr "Acción 9"
494
495 #: ../../../src/InputState.cpp:416
496 msgid "Bar0"
497 msgstr "Acción 0"
498
499 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
500 #: ../../../src/MenuCharacter.cpp:54
501 msgid "Character"
502 msgstr "Personaxe"
503
504 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
505 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
506 msgid "Inventory"
507 msgstr "Inventario"
508
509 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
510 #: ../../../src/MenuPowers.cpp:168
511 msgid "Powers"
512 msgstr "Habilidades"
513
514 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
515 #: ../../../src/MenuLog.cpp:72
516 msgid "Log"
517 msgstr "Rexistro"
518
519 #: ../../../src/InputState.cpp:421
520 msgid "Main1"
521 msgstr "Acción principal"
522
523 #: ../../../src/InputState.cpp:422
524 msgid "Main2"
525 msgstr "Acción secundaria"
526
527 #: ../../../src/InputState.cpp:423
528 msgid "Ctrl"
529 msgstr "Control"
530
531 #: ../../../src/InputState.cpp:424
532 msgid "Shift"
533 msgstr "Maiúsculas"
534
535 #: ../../../src/InputState.cpp:425
536 msgid "Alt"
537 msgstr ""
538
539 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
540 msgid "Delete"
541 msgstr "Suprimir"
542
543 #: ../../../src/InputState.cpp:427
544 msgid "ActionBar Accept"
545 msgstr "Aceptar (barra de accións)"
546
547 #: ../../../src/InputState.cpp:428
548 msgid "ActionBar Left"
549 msgstr "Esquerda (barra de accións)"
550
551 #: ../../../src/InputState.cpp:429
552 msgid "ActionBar Right"
553 msgstr "Dereita (barra de accións)"
554
555 #: ../../../src/InputState.cpp:430
556 msgid "ActionBar Use"
557 msgstr "Usar (barra de accións)"
558
559 #: ../../../src/InputState.cpp:431
560 msgid "Developer Menu"
561 msgstr "Menú de desenvolvedor"
562
563 #: ../../../src/InputState.cpp:433
564 msgid "Left Mouse"
565 msgstr ""
566
567 #: ../../../src/InputState.cpp:434
568 msgid "Middle Mouse"
569 msgstr ""
570
571 #: ../../../src/InputState.cpp:435
572 msgid "Right Mouse"
573 msgstr ""
574
575 #: ../../../src/InputState.cpp:436
576 msgid "Wheel Up"
577 msgstr ""
578
579 #: ../../../src/InputState.cpp:437
580 msgid "Wheel Down"
581 msgstr ""
582
583 #: ../../../src/InputState.cpp:438
584 msgid "Mouse X1"
585 msgstr ""
586
587 #: ../../../src/InputState.cpp:439
588 msgid "Mouse X2"
589 msgstr ""
590
591 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
592 msgid "Unknown Item"
593 msgstr "Elemento descoñecido"
594
595 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
596 #, c-format
597 msgid "%d%% Speed"
598 msgstr "%d%% velocidade"
599
600 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
601 #, c-format
602 msgid "%d%% Attack Speed"
603 msgstr ""
604
605 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
606 #: ../../../src/MenuPowers.cpp:833
607 #, c-format
608 msgid "Resistance (%s)"
609 msgstr ""
610
611 #: ../../../src/ItemManager.cpp:684
612 #, c-format
613 msgid "Requires %s"
614 msgstr ""
615
616 #: ../../../src/ItemManager.cpp:733
617 msgid "Quest Item"
618 msgstr "Obxecto dunha misión"
619
620 #: ../../../src/ItemManager.cpp:760
621 #, c-format
622 msgid "Quality: %s"
623 msgstr "Calidade: %s"
624
625 #: ../../../src/ItemManager.cpp:785
626 #, c-format
627 msgid "Absorb: %d-%d"
628 msgstr "Absorción: %d-%d"
629
630 #: ../../../src/ItemManager.cpp:787
631 #, c-format
632 msgid "Absorb: %d"
633 msgstr "Absorción: %d"
634
635 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
636 #: ../../../src/MenuPowers.cpp:1134
637 #, c-format
638 msgid "Requires Level %d"
639 msgstr "Require o nivel %d."
640
641 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
642 #: ../../../src/MenuPowers.cpp:1125
643 #, c-format
644 msgid "Requires %s %d"
645 msgstr ""
646
647 #: ../../../src/ItemManager.cpp:849
648 #, c-format
649 msgid "Requires Class: %s"
650 msgstr "Require a clase «%s»."
651
652 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
653 #, c-format
654 msgid "Buy Price: %d %s"
655 msgstr "Prezo de compra: %d %s"
656
657 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
658 #, c-format
659 msgid "Buy Price: %d %s each"
660 msgstr "Prezo de compra: %d %s por unidade"
661
662 #: ../../../src/ItemManager.cpp:886
663 #, c-format
664 msgid "Sell Price: %d %s"
665 msgstr "Prezo de venda: %d %s"
666
667 #: ../../../src/ItemManager.cpp:888
668 #, c-format
669 msgid "Sell Price: %d %s each"
670 msgstr "Prezo de venda: %d %s por unidade"
671
672 #: ../../../src/ItemManager.cpp:897
673 msgid "Set:"
674 msgstr ""
675
676 #: ../../../src/ItemManager.cpp:904
677 #, c-format
678 msgid "%d items:"
679 msgstr ""
680
681 #: ../../../src/ItemManager.cpp:917
682 #, c-format
683 msgid "Press [%s] to use"
684 msgstr ""
685
686 #: ../../../src/ItemManager.cpp:920
687 #, c-format
688 msgid "Press [%s] to read"
689 msgstr ""
690
691 #: ../../../src/MenuActionBar.cpp:87
692 msgid "Loot tooltip visibility"
693 msgstr ""
694
695 #: ../../../src/MenuActionBar.cpp:88
696 msgid "Mini-map mode"
697 msgstr ""
698
699 #: ../../../src/MenuActionBar.cpp:89
700 msgid "Always show stat bar labels"
701 msgstr ""
702
703 #: ../../../src/MenuActionBar.cpp:90
704 msgid "Show combat text"
705 msgstr "Mostrar texto de combate:"
706
707 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
708 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
709 #, c-format
710 msgid "Hotkey: %s"
711 msgstr ""
712
713 #: ../../../src/MenuActionBar.cpp:474
714 #, c-format
715 msgid "Default. Temporarily show all loot tooltips with '%s'."
716 msgstr ""
717
718 #: ../../../src/MenuActionBar.cpp:476
719 #, c-format
720 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
721 msgstr ""
722
723 #: ../../../src/MenuActionBar.cpp:478
724 #, c-format
725 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
726 msgstr ""
727
728 #: ../../../src/MenuActionBar.cpp:482
729 msgid "Visible"
730 msgstr ""
731
732 #: ../../../src/MenuActionBar.cpp:484
733 msgid "Visible (2x zoom)"
734 msgstr ""
735
736 #: ../../../src/MenuActionBar.cpp:486
737 msgid "Hidden"
738 msgstr ""
739
740 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
741 msgid "Enabled"
742 msgstr ""
743
744 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
745 msgid "Disabled"
746 msgstr ""
747
748 #: ../../../src/MenuActionBar.cpp:657
749 msgid "Not enough MP."
750 msgstr ""
751
752 #: ../../../src/MenuActiveEffects.cpp:124
753 #, c-format
754 msgid "x%d"
755 msgstr ""
756
757 #: ../../../src/MenuActiveEffects.cpp:219
758 msgid "Remaining:"
759 msgstr ""
760
761 #: ../../../src/MenuActiveEffects.cpp:225
762 #, c-format
763 msgid "x%d stacks"
764 msgstr ""
765
766 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
767 msgid "Name"
768 msgstr "Nome"
769
770 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
771 msgid "Level"
772 msgstr "Nivel"
773
774 #: ../../../src/MenuCharacter.cpp:310
775 #, c-format
776 msgid "%d unspent stat point"
777 msgstr ""
778
779 #: ../../../src/MenuCharacter.cpp:313
780 #, c-format
781 msgid "%d unspent stat points"
782 msgstr ""
783
784 #: ../../../src/MenuCharacter.cpp:355
785 #, c-format
786 msgid "Reduces the damage taken from \"%s\" elemental attacks."
787 msgstr ""
788
789 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
790 #, c-format
791 msgid "XP: %d"
792 msgstr "Experiencia: %d"
793
794 #: ../../../src/MenuCharacter.cpp:367
795 #, c-format
796 msgid "Next: %d"
797 msgstr "Seguinte nivel: %d"
798
799 #: ../../../src/MenuCharacter.cpp:373
800 #, c-format
801 msgid "base (%d), bonus (%d)"
802 msgstr "Base: %d. Bonificación: %d."
803
804 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
805 msgid "Related stats:"
806 msgstr ""
807
808 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
809 #, c-format
810 msgid "Each level grants %d."
811 msgstr ""
812
813 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
814 #, c-format
815 msgid "Each point of %s grants %d."
816 msgstr ""
906 #: ../../../src/MenuConfig.cpp:512
907 msgid ""
908 "Enables the below setting that controls the screen gamma level. The behavior"
909 " of the gamma setting can vary between platforms."
910 msgstr ""
911
912 #: ../../../src/MenuConfig.cpp:513
913 msgid ""
914 "Provides additional text for information that is primarily conveyed through "
915 "color."
916 msgstr ""
917
918 #: ../../../src/MenuConfig.cpp:514
919 msgid ""
920 "Some mods will automatically hide the stat bars when they are inactive. "
921 "Disabling this option will keep them displayed at all times."
922 msgstr ""
923
924 #: ../../../src/MenuConfig.cpp:515
925 msgid ""
926 "When enabled, empty equipment slots will be filled with applicable items "
927 "when they are obtained."
928 msgstr ""
929
930 #: ../../../src/MenuConfig.cpp:516
931 msgid ""
932 "Shows a marker above enemies, allies, and the player when they are obscured "
933 "by tall objects."
934 msgstr ""
935
936 #: ../../../src/MenuConfig.cpp:517
937 msgid ""
938 "This allows the game to be controlled entirely with the keyboard (or "
939 "joystick)."
940 msgstr ""
941
942 #: ../../../src/MenuConfig.cpp:518
943 msgid ""
944 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
945 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
946 "instead of 'Main1'."
947 msgstr ""
948
949 #: ../../../src/MenuConfig.cpp:519
950 msgid ""
951 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
952 "assigned to the movement button can be used by targeting an enemy. If this "
953 "setting is disabled, it is required to use 'Shift' to access the Power "
954 "assigned to the movement button."
955 msgstr ""
956
957 #: ../../../src/MenuConfig.cpp:520
958 msgid ""
959 "The player's attacks will be aimed in the direction of the mouse cursor when"
960 " this is enabled."
961 msgstr ""
962
963 #: ../../../src/MenuConfig.cpp:571
964 msgid "Active Mods"
965 msgstr "Mods activos:"
966
967 #: ../../../src/MenuConfig.cpp:580
968 msgid "Available Mods"
969 msgstr "Mods dispoñíbeis:"
970
971 #: ../../../src/MenuConfig.cpp:599
972 msgid "<< Disable"
973 msgstr "← Desactivar"
974
975 #: ../../../src/MenuConfig.cpp:605
976 msgid "Enable >>"
977 msgstr "Activar →"
978
979 #: ../../../src/MenuConfig.cpp:1436
980 msgid "Version:"
981 msgstr ""
982
983 #: ../../../src/MenuConfig.cpp:1441
984 msgid "Game:"
985 msgstr ""
986
987 #: ../../../src/MenuConfig.cpp:1446
988 msgid "Engine version:"
989 msgstr ""
990
991 #: ../../../src/MenuConfig.cpp:1454
992 msgid "Requires mods:"
993 msgstr ""
994
995 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
996 msgid "(none)"
997 msgstr "(ningún)"
998
999 #: ../../../src/MenuConfig.cpp:1579
1000 msgid "Save & Exit"
1001 msgstr "Gardar e saír"
8171002
8181003 #: ../../../src/MenuDevConsole.cpp:63
8191004 msgid "Execute"
9681153 msgid "HINT: Type help"
9691154 msgstr ""
9701155
971 #: ../../../src/MenuEnemy.cpp:138
1156 #: ../../../src/MenuEnemy.cpp:162
9721157 #, c-format
9731158 msgid "%s level %d"
9741159 msgstr "%s (nivel %d)"
9751160
976 #: ../../../src/MenuEnemy.cpp:162
1161 #: ../../../src/MenuEnemy.cpp:186
9771162 msgid "Dead"
9781163 msgstr "Morto"
9791164
980 #: ../../../src/MenuEnemy.cpp:164
1165 #: ../../../src/MenuEnemy.cpp:188
9811166 msgid "Destroyed"
9821167 msgstr ""
9831168
984 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
985 msgid "Paused"
986 msgstr ""
987
988 #: ../../../src/MenuExit.cpp:91
989 msgid "Save & Exit"
990 msgstr "Gardar e saír"
991
992 #: ../../../src/MenuExit.cpp:92
993 msgid "Exit"
994 msgstr "Volver ao menú"
995
996 #: ../../../src/MenuExit.cpp:96
997 msgid "Continue"
998 msgstr ""
999
1000 #: ../../../src/MenuInventory.cpp:73
1001 msgid "Automatically equip items"
1002 msgstr ""
1003
1004 #: ../../../src/MenuInventory.cpp:188
1169 #: ../../../src/MenuInventory.cpp:177
10051170 #, c-format
10061171 msgid "Lost %d%% of %s."
10071172 msgstr ""
10081173
1009 #: ../../../src/MenuInventory.cpp:195
1174 #: ../../../src/MenuInventory.cpp:184
10101175 #, c-format
10111176 msgid "Lost %d%% of total XP."
10121177 msgstr ""
10131178
1014 #: ../../../src/MenuInventory.cpp:200
1179 #: ../../../src/MenuInventory.cpp:189
10151180 #, c-format
10161181 msgid "Lost %d%% of current level XP."
10171182 msgstr ""
10181183
1019 #: ../../../src/MenuInventory.cpp:226
1184 #: ../../../src/MenuInventory.cpp:215
10201185 #, c-format
10211186 msgid "Lost %s."
10221187 msgstr "Perdiches %s."
10231188
1024 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1189 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10251190 #, c-format
10261191 msgid "%d %s"
10271192 msgstr "%d %s"
10281193
1029 #: ../../../src/MenuInventory.cpp:317
1194 #: ../../../src/MenuInventory.cpp:300
10301195 msgid "Pick up item(s):"
10311196 msgstr ""
10321197
1033 #: ../../../src/MenuInventory.cpp:318
1198 #: ../../../src/MenuInventory.cpp:301
10341199 msgid "Use or equip item:"
10351200 msgstr ""
10361201
1037 #: ../../../src/MenuInventory.cpp:319
1202 #: ../../../src/MenuInventory.cpp:302
10381203 #, c-format
10391204 msgid "%s modifiers"
10401205 msgstr ""
10411206
1042 #: ../../../src/MenuInventory.cpp:320
1207 #: ../../../src/MenuInventory.cpp:303
10431208 msgid "Select a quantity of item:"
10441209 msgstr ""
10451210
1046 #: ../../../src/MenuInventory.cpp:323
1211 #: ../../../src/MenuInventory.cpp:306
10471212 msgid "Stash item stack:"
10481213 msgstr ""
10491214
1050 #: ../../../src/MenuInventory.cpp:325
1215 #: ../../../src/MenuInventory.cpp:308
10511216 msgid "Sell item stack:"
10521217 msgstr ""
10531218
1054 #: ../../../src/MenuInventory.cpp:592
1219 #: ../../../src/MenuInventory.cpp:574
10551220 msgid "You don't have enough of the required item."
10561221 msgstr "Non ten unha cantidade suficiente do elemento necesario."
10571222
1058 #: ../../../src/MenuInventory.cpp:599
1223 #: ../../../src/MenuInventory.cpp:586
10591224 msgid "You can't use this item right now."
10601225 msgstr ""
10611226
1062 #: ../../../src/MenuInventory.cpp:611
1227 #: ../../../src/MenuInventory.cpp:598
10631228 msgid "This item can only be used from the action bar."
10641229 msgstr "Este obxecto só pode empregarse desde a barra de acción."
10651230
1066 #: ../../../src/MenuInventory.cpp:729
1231 #: ../../../src/MenuInventory.cpp:716
10671232 msgid "Inventory is full."
10681233 msgstr "O inventario está cheo."
10691234
1070 #: ../../../src/MenuInventory.cpp:849
1235 #: ../../../src/MenuInventory.cpp:841
10711236 #, c-format
10721237 msgid "Not enough %s."
10731238 msgstr "Non tes %s dabondo."
10741239
1075 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1240 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
10761241 msgid "This item can not be sold."
10771242 msgstr ""
10781243
10841249 msgid "Quests"
10851250 msgstr "Misións"
10861251
1087 #: ../../../src/MenuManager.cpp:286
1252 #: ../../../src/MenuManager.cpp:296
10881253 #, c-format
10891254 msgid "XP: %d/%d"
10901255 msgstr "Experiencia: %d/%d"
10911256
1092 #: ../../../src/MenuManager.cpp:827
1257 #: ../../../src/MenuManager.cpp:854
10931258 msgid "This item can not be dropped."
10941259 msgstr ""
10951260
10971262 msgid "Enter amount:"
10981263 msgstr ""
10991264
1100 #: ../../../src/MenuPowers.cpp:787
1265 #: ../../../src/MenuPowers.cpp:786
11011266 msgid "Passive"
11021267 msgstr ""
11031268
1104 #: ../../../src/MenuPowers.cpp:792
1269 #: ../../../src/MenuPowers.cpp:791
11051270 #, c-format
11061271 msgid "Costs %d MP"
11071272 msgstr "Consume %d de enerxía"
11081273
1109 #: ../../../src/MenuPowers.cpp:796
1274 #: ../../../src/MenuPowers.cpp:795
11101275 #, c-format
11111276 msgid "Costs %d HP"
11121277 msgstr "Consume %d de vida"
11131278
1114 #: ../../../src/MenuPowers.cpp:801
1279 #: ../../../src/MenuPowers.cpp:800
11151280 msgid "Cooldown:"
11161281 msgstr ""
11171282
1118 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1283 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11191284 msgid "Damage per second"
11201285 msgstr ""
11211286
1122 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1287 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11231288 msgid "HP per second"
11241289 msgstr ""
11251290
1126 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1291 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11271292 msgid "MP per second"
11281293 msgstr ""
11291294
1130 #: ../../../src/MenuPowers.cpp:885
1295 #: ../../../src/MenuPowers.cpp:884
11311296 msgid "Immobilize"
11321297 msgstr ""
11331298
1134 #: ../../../src/MenuPowers.cpp:893
1299 #: ../../../src/MenuPowers.cpp:892
11351300 msgid "Immunity"
11361301 msgstr ""
11371302
1138 #: ../../../src/MenuPowers.cpp:896
1303 #: ../../../src/MenuPowers.cpp:895
11391304 msgid "Immunity to damage over time"
11401305 msgstr ""
11411306
1142 #: ../../../src/MenuPowers.cpp:899
1307 #: ../../../src/MenuPowers.cpp:898
11431308 msgid "Immunity to slow"
11441309 msgstr ""
11451310
1146 #: ../../../src/MenuPowers.cpp:902
1311 #: ../../../src/MenuPowers.cpp:901
11471312 msgid "Immunity to stun"
11481313 msgstr ""
11491314
1150 #: ../../../src/MenuPowers.cpp:905
1315 #: ../../../src/MenuPowers.cpp:904
11511316 msgid "Immunity to HP steal"
11521317 msgstr ""
11531318
1154 #: ../../../src/MenuPowers.cpp:908
1319 #: ../../../src/MenuPowers.cpp:907
11551320 msgid "Immunity to MP steal"
11561321 msgstr ""
11571322
1158 #: ../../../src/MenuPowers.cpp:911
1323 #: ../../../src/MenuPowers.cpp:910
11591324 msgid "Immunity to knockback"
11601325 msgstr ""
11611326
1162 #: ../../../src/MenuPowers.cpp:914
1327 #: ../../../src/MenuPowers.cpp:913
11631328 msgid "Immunity to damage reflection"
11641329 msgstr ""
11651330
1166 #: ../../../src/MenuPowers.cpp:917
1331 #: ../../../src/MenuPowers.cpp:916
11671332 msgid "Stun"
11681333 msgstr ""
11691334
1170 #: ../../../src/MenuPowers.cpp:920
1335 #: ../../../src/MenuPowers.cpp:919
11711336 msgid "Automatic revive on death"
11721337 msgstr ""
11731338
1174 #: ../../../src/MenuPowers.cpp:923
1339 #: ../../../src/MenuPowers.cpp:922
11751340 msgid "Convert"
11761341 msgstr ""
11771342
1178 #: ../../../src/MenuPowers.cpp:926
1343 #: ../../../src/MenuPowers.cpp:925
11791344 msgid "Fear"
11801345 msgstr ""
11811346
1182 #: ../../../src/MenuPowers.cpp:929
1347 #: ../../../src/MenuPowers.cpp:928
11831348 msgid "Lifespan"
11841349 msgstr ""
11851350
1186 #: ../../../src/MenuPowers.cpp:953
1351 #: ../../../src/MenuPowers.cpp:952
11871352 msgid "Magical Shield"
11881353 msgstr ""
11891354
1190 #: ../../../src/MenuPowers.cpp:982
1355 #: ../../../src/MenuPowers.cpp:981
11911356 msgid "Healing"
11921357 msgstr ""
11931358
1194 #: ../../../src/MenuPowers.cpp:985
1359 #: ../../../src/MenuPowers.cpp:984
11951360 msgid "Knockback"
11961361 msgstr ""
11971362
1198 #: ../../../src/MenuPowers.cpp:1010
1363 #: ../../../src/MenuPowers.cpp:1009
11991364 #, c-format
12001365 msgid "%d%% chance"
12011366 msgstr ""
12021367
1203 #: ../../../src/MenuPowers.cpp:1062
1368 #: ../../../src/MenuPowers.cpp:1061
12041369 msgid "Base Accuracy"
12051370 msgstr ""
12061371
1207 #: ../../../src/MenuPowers.cpp:1082
1372 #: ../../../src/MenuPowers.cpp:1081
12081373 msgid "Base Critical Chance"
12091374 msgstr ""
12101375
1211 #: ../../../src/MenuPowers.cpp:1090
1376 #: ../../../src/MenuPowers.cpp:1089
12121377 msgid "Ignores Absorbtion"
12131378 msgstr ""
12141379
1215 #: ../../../src/MenuPowers.cpp:1095
1380 #: ../../../src/MenuPowers.cpp:1094
12161381 msgid "Ignores Avoidance"
12171382 msgstr ""
12181383
1219 #: ../../../src/MenuPowers.cpp:1100
1384 #: ../../../src/MenuPowers.cpp:1099
12201385 #, c-format
12211386 msgid "%d%% Chance to crit slowed targets"
12221387 msgstr ""
12231388
1224 #: ../../../src/MenuPowers.cpp:1105
1389 #: ../../../src/MenuPowers.cpp:1104
12251390 #, c-format
12261391 msgid "Elemental Damage (%s)"
12271392 msgstr ""
12281393
1229 #: ../../../src/MenuPowers.cpp:1114
1394 #: ../../../src/MenuPowers.cpp:1113
12301395 #, c-format
12311396 msgid "Requires a %s"
12321397 msgstr "Require unha unidade de %s."
12331398
1234 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1399 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12351400 #, c-format
12361401 msgid "Requires Power: %s"
12371402 msgstr "Require a habilidade «%s»."
12381403
1239 #: ../../../src/MenuPowers.cpp:1163
1404 #: ../../../src/MenuPowers.cpp:1162
12401405 msgid "Click to Unlock (uses 1 Skill Point)"
12411406 msgstr ""
12421407
1243 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1408 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12441409 msgid "Requires 1 Skill Point"
12451410 msgstr ""
12461411
1247 #: ../../../src/MenuPowers.cpp:1355
1412 #: ../../../src/MenuPowers.cpp:1354
12481413 #, c-format
12491414 msgid "%d unspent skill point"
12501415 msgstr ""
12511416
1252 #: ../../../src/MenuPowers.cpp:1358
1417 #: ../../../src/MenuPowers.cpp:1357
12531418 #, c-format
12541419 msgid "%d unspent skill points"
12551420 msgstr ""
12561421
1257 #: ../../../src/MenuPowers.cpp:1388
1422 #: ../../../src/MenuPowers.cpp:1387
12581423 msgid "Next Level:"
12591424 msgstr "Seguinte nivel:"
12601425
1261 #: ../../../src/MenuStash.cpp:96
1262 msgid "Shared Stash"
1263 msgstr "Reserva compartida"
1264
1265 #: ../../../src/MenuStash.cpp:209
1426 #: ../../../src/MenuStash.cpp:53
1427 msgid "Private"
1428 msgstr ""
1429
1430 #: ../../../src/MenuStash.cpp:55
1431 msgid "Shared"
1432 msgstr ""
1433
1434 #: ../../../src/MenuStash.cpp:103
1435 msgid "Stash"
1436 msgstr ""
1437
1438 #: ../../../src/MenuStash.cpp:258
12661439 msgid "Can not store quest items in the stash."
12671440 msgstr ""
12681441
1269 #: ../../../src/MenuStash.cpp:219
1442 #: ../../../src/MenuStash.cpp:263
1443 msgid "This item can not be stored in the stash."
1444 msgstr ""
1445
1446 #: ../../../src/MenuStash.cpp:268
1447 msgid "This item can not be stored in the private stash."
1448 msgstr ""
1449
1450 #: ../../../src/MenuStash.cpp:273
1451 msgid "This item can not be stored in the shared stash."
1452 msgstr ""
1453
1454 #: ../../../src/MenuStash.cpp:283
12701455 msgid "Stash is full."
12711456 msgstr ""
12721457
1273 #: ../../../src/MenuTalker.cpp:454
1458 #: ../../../src/MenuStash.cpp:340
1459 #, c-format
1460 msgid "Can not store item in stash: %s"
1461 msgstr ""
1462
1463 #: ../../../src/MenuTalker.cpp:447
1464 #, c-format
1465 msgid "<dialog node %d>"
1466 msgstr ""
1467
1468 #: ../../../src/MenuTalker.cpp:455
12741469 msgid "Trade"
12751470 msgstr "Comercio"
12761471
12781473 msgid "Buyback"
12791474 msgstr "Recuperar"
12801475
1281 #: ../../../src/MenuVendor.cpp:279
1476 #: ../../../src/MenuVendor.cpp:281
12821477 msgid "Vendor"
12831478 msgstr "Vendedor"
12841479
1285 #: ../../../src/PowerManager.cpp:1136
1480 #: ../../../src/PowerManager.cpp:1170
12861481 #, c-format
12871482 msgid "+%d Shield"
12881483 msgstr "+%d de escudo"
12891484
1290 #: ../../../src/PowerManager.cpp:1392
1485 #: ../../../src/PowerManager.cpp:1426
12911486 msgid "You are already transformed, untransform first."
12921487 msgstr "Xa estás transformado, primeiro recupera a forma orixinal."
12931488
1294 #: ../../../src/PowerManager.cpp:1404
1489 #: ../../../src/PowerManager.cpp:1438
12951490 msgid "Could not untransform at this position."
12961491 msgstr ""
12971492
12991494 msgid "Completed Quests"
13001495 msgstr ""
13011496
1302 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1497 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13031498 msgid "Game saved."
13041499 msgstr "Gardouse a partida."
13051500
1306 #: ../../../src/SDLInputState.cpp:582
1501 #: ../../../src/SDLInputState.cpp:643
1502 msgid "BkSp"
1503 msgstr ""
1504
1505 #: ../../../src/SDLInputState.cpp:644
1506 msgid "Caps"
1507 msgstr ""
1508
1509 #: ../../../src/SDLInputState.cpp:645
1510 msgid "Del"
1511 msgstr ""
1512
1513 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1514 msgid "End"
1515 msgstr ""
1516
1517 #: ../../../src/SDLInputState.cpp:648
1518 msgid "Esc"
1519 msgstr ""
1520
1521 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1522 msgid "Home"
1523 msgstr ""
1524
1525 #: ../../../src/SDLInputState.cpp:650
1526 msgid "Ins"
1527 msgstr ""
1528
1529 #: ../../../src/SDLInputState.cpp:651
1530 msgid "LAlt"
1531 msgstr ""
1532
1533 #: ../../../src/SDLInputState.cpp:652
1534 msgid "LCtrl"
1535 msgstr ""
1536
1537 #: ../../../src/SDLInputState.cpp:654
1538 msgid "LShft"
1539 msgstr ""
1540
1541 #: ../../../src/SDLInputState.cpp:655
1542 msgid "Num"
1543 msgstr ""
1544
1545 #: ../../../src/SDLInputState.cpp:656
1546 msgid "PgDn"
1547 msgstr ""
1548
1549 #: ../../../src/SDLInputState.cpp:657
1550 msgid "PgUp"
1551 msgstr ""
1552
1553 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1554 msgid "Pause"
1555 msgstr ""
1556
1557 #: ../../../src/SDLInputState.cpp:659
1558 msgid "Print"
1559 msgstr ""
1560
1561 #: ../../../src/SDLInputState.cpp:660
1562 msgid "RAlt"
1563 msgstr ""
1564
1565 #: ../../../src/SDLInputState.cpp:661
1566 msgid "RCtrl"
1567 msgstr ""
1568
1569 #: ../../../src/SDLInputState.cpp:662
1570 msgid "Ret"
1571 msgstr ""
1572
1573 #: ../../../src/SDLInputState.cpp:664
1574 msgid "RShft"
1575 msgstr ""
1576
1577 #: ../../../src/SDLInputState.cpp:665
1578 msgid "SLock"
1579 msgstr ""
1580
1581 #: ../../../src/SDLInputState.cpp:666
1582 msgid "Spc"
1583 msgstr ""
1584
1585 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1586 msgid "Tab"
1587 msgstr ""
1588
1589 #: ../../../src/SDLInputState.cpp:673
13071590 msgid "Backspace"
13081591 msgstr ""
13091592
1310 #: ../../../src/SDLInputState.cpp:583
1593 #: ../../../src/SDLInputState.cpp:674
13111594 msgid "CapsLock"
13121595 msgstr ""
13131596
1314 #: ../../../src/SDLInputState.cpp:586
1315 msgid "End"
1316 msgstr ""
1317
1318 #: ../../../src/SDLInputState.cpp:587
1597 #: ../../../src/SDLInputState.cpp:678
13191598 msgid "Escape"
13201599 msgstr ""
13211600
1322 #: ../../../src/SDLInputState.cpp:588
1323 msgid "Home"
1324 msgstr ""
1325
1326 #: ../../../src/SDLInputState.cpp:589
1601 #: ../../../src/SDLInputState.cpp:680
13271602 msgid "Insert"
13281603 msgstr ""
13291604
1330 #: ../../../src/SDLInputState.cpp:590
1605 #: ../../../src/SDLInputState.cpp:681
13311606 msgid "Left Alt"
13321607 msgstr ""
13331608
1334 #: ../../../src/SDLInputState.cpp:591
1609 #: ../../../src/SDLInputState.cpp:682
13351610 msgid "Left Ctrl"
13361611 msgstr ""
13371612
1338 #: ../../../src/SDLInputState.cpp:593
1613 #: ../../../src/SDLInputState.cpp:684
13391614 msgid "Left Shift"
13401615 msgstr ""
13411616
1342 #: ../../../src/SDLInputState.cpp:594
1617 #: ../../../src/SDLInputState.cpp:685
13431618 msgid "NumLock"
13441619 msgstr ""
13451620
1346 #: ../../../src/SDLInputState.cpp:595
1621 #: ../../../src/SDLInputState.cpp:686
13471622 msgid "PageDown"
13481623 msgstr ""
13491624
1350 #: ../../../src/SDLInputState.cpp:596
1625 #: ../../../src/SDLInputState.cpp:687
13511626 msgid "PageUp"
13521627 msgstr ""
13531628
1354 #: ../../../src/SDLInputState.cpp:597
1355 msgid "Pause"
1356 msgstr ""
1357
1358 #: ../../../src/SDLInputState.cpp:598
1629 #: ../../../src/SDLInputState.cpp:689
13591630 msgid "PrintScreen"
13601631 msgstr ""
13611632
1362 #: ../../../src/SDLInputState.cpp:599
1633 #: ../../../src/SDLInputState.cpp:690
13631634 msgid "Right Alt"
13641635 msgstr ""
13651636
1366 #: ../../../src/SDLInputState.cpp:600
1637 #: ../../../src/SDLInputState.cpp:691
13671638 msgid "Right Ctrl"
13681639 msgstr ""
13691640
1370 #: ../../../src/SDLInputState.cpp:601
1641 #: ../../../src/SDLInputState.cpp:692
13711642 msgid "Return"
13721643 msgstr ""
13731644
1374 #: ../../../src/SDLInputState.cpp:603
1645 #: ../../../src/SDLInputState.cpp:694
13751646 msgid "Right Shift"
13761647 msgstr ""
13771648
1378 #: ../../../src/SDLInputState.cpp:604
1649 #: ../../../src/SDLInputState.cpp:695
13791650 msgid "ScrollLock"
13801651 msgstr ""
13811652
1382 #: ../../../src/SDLInputState.cpp:605
1653 #: ../../../src/SDLInputState.cpp:696
13831654 msgid "Space"
13841655 msgstr ""
13851656
1386 #: ../../../src/SDLInputState.cpp:606
1387 msgid "Tab"
1388 msgstr ""
1389
1390 #: ../../../src/SDLInputState.cpp:620
1657 #: ../../../src/SDLInputState.cpp:710
1658 #, c-format
1659 msgid "M%d"
1660 msgstr ""
1661
1662 #: ../../../src/SDLInputState.cpp:716
13911663 #, c-format
13921664 msgid "Mouse %d"
13931665 msgstr ""
13941666
1395 #: ../../../src/SDLInputState.cpp:628
1667 #: ../../../src/SDLInputState.cpp:726
1668 #, c-format
1669 msgid "JX%d-"
1670 msgstr ""
1671
1672 #: ../../../src/SDLInputState.cpp:728
13961673 #, c-format
13971674 msgid "Axis %d -"
13981675 msgstr ""
13991676
1400 #: ../../../src/SDLInputState.cpp:630
1677 #: ../../../src/SDLInputState.cpp:732
1678 #, c-format
1679 msgid "JX%d+"
1680 msgstr ""
1681
1682 #: ../../../src/SDLInputState.cpp:734
14011683 #, c-format
14021684 msgid "Axis %d +"
14031685 msgstr ""
14041686
1405 #: ../../../src/SDLInputState.cpp:633
1687 #: ../../../src/SDLInputState.cpp:739
1688 #, c-format
1689 msgid "JB%d"
1690 msgstr ""
1691
1692 #: ../../../src/SDLInputState.cpp:741
14061693 #, c-format
14071694 msgid "Button %d"
14081695 msgstr "Botón %d"
14091696
1410 #: ../../../src/SDLInputState.cpp:637
1411 msgid "(none)"
1412 msgstr "(ningún)"
1413
1414 #: ../../../src/SDLInputState.cpp:677
1697 #: ../../../src/SDLInputState.cpp:788
14151698 msgid "Touch control D-Pad"
14161699 msgstr ""
14171700
1418 #: ../../../src/SDLInputState.cpp:701
1701 #: ../../../src/SDLInputState.cpp:812
14191702 msgid "Touch control buttons"
14201703 msgstr ""
14211704
1422 #: ../../../src/SDLInputState.cpp:716
1705 #: ../../../src/SDLInputState.cpp:827
14231706 msgid "Tap"
14241707 msgstr ""
14251708
1426 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1427 #: ../../../src/SDLInputState.cpp:768
1709 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1710 #, c-format
1711 msgid "Can not bind: %s"
1712 msgstr ""
1713
1714 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1715 #: ../../../src/SDLInputState.cpp:901
14281716 #, c-format
14291717 msgid "'%s' is no longer bound to:"
14301718 msgstr ""
15871875 msgid "k"
15881876 msgstr "k"
15891877
1590 #: ../../../src/Utils.cpp:580
1878 #: ../../../src/Utils.cpp:616
15911879 #, c-format
15921880 msgid "%s second"
15931881 msgstr ""
15941882
1595 #: ../../../src/Utils.cpp:583
1883 #: ../../../src/Utils.cpp:619
15961884 #, c-format
15971885 msgid "%s seconds"
15981886 msgstr ""
77 msgstr ""
88 "Project-Id-Version: PACKAGE VERSION\n"
99 "Report-Msgid-Bugs-To: \n"
10 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
10 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1111 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1212 "Language-Team: Hebrew (https://www.transifex.com/flareorg/teams/84925/he/)\n"
1313 "MIME-Version: 1.0\n"
1616 "Language: he\n"
1717 "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n"
1818
19 #: ../../../src/Avatar.cpp:367
19 #: ../../../src/Avatar.cpp:387
20 msgid "Your health is low!"
21 msgstr ""
22
23 #: ../../../src/Avatar.cpp:419
2024 #, c-format
2125 msgid "Congratulations, you have reached level %d!"
2226 msgstr ""
2327
24 #: ../../../src/Avatar.cpp:369
25 msgid "You may increase one attribute through the Character Menu."
26 msgstr ""
27
28 #: ../../../src/Avatar.cpp:583
28 #: ../../../src/Avatar.cpp:421
29 msgid "You may increase one or more attributes through the Character Menu."
30 msgstr ""
31
32 #: ../../../src/Avatar.cpp:425
33 msgid "You may unlock one or more abilities through the Powers Menu."
34 msgstr ""
35
36 #: ../../../src/Avatar.cpp:692
2937 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3038 msgstr ""
3139
32 #: ../../../src/Avatar.cpp:589
40 #: ../../../src/Avatar.cpp:698
3341 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
3442 msgstr ""
3543
36 #: ../../../src/Avatar.cpp:839
44 #: ../../../src/Avatar.cpp:949
3745 msgid "Transformation expired. You have been moved back to a safe place."
3846 msgstr ""
3947
4250 msgid "%d %s removed."
4351 msgstr ""
4452
45 #: ../../../src/CampaignManager.cpp:162
53 #: ../../../src/CampaignManager.cpp:165
54 #, c-format
55 msgid "%s x%d removed."
56 msgstr ""
57
58 #: ../../../src/CampaignManager.cpp:167
4659 #, c-format
4760 msgid "%s removed."
4861 msgstr ""
4962
50 #: ../../../src/CampaignManager.cpp:175
63 #: ../../../src/CampaignManager.cpp:180
5164 #, c-format
5265 msgid "You receive %s."
5366 msgstr ""
5467
55 #: ../../../src/CampaignManager.cpp:177
68 #: ../../../src/CampaignManager.cpp:182
5669 #, c-format
5770 msgid "You receive %s x%d."
5871 msgstr ""
5972
60 #: ../../../src/CampaignManager.cpp:186
73 #: ../../../src/CampaignManager.cpp:191
6174 #, c-format
6275 msgid "You receive %d %s."
6376 msgstr ""
6477
65 #: ../../../src/CampaignManager.cpp:195
78 #: ../../../src/CampaignManager.cpp:200
6679 #, c-format
6780 msgid "You receive %d XP."
6881 msgstr ""
6982
70 #: ../../../src/CampaignManager.cpp:201
83 #: ../../../src/CampaignManager.cpp:206
7184 msgid "HP restored."
7285 msgstr ""
7386
74 #: ../../../src/CampaignManager.cpp:205
87 #: ../../../src/CampaignManager.cpp:210
7588 msgid "MP restored."
7689 msgstr ""
7790
78 #: ../../../src/CampaignManager.cpp:210
91 #: ../../../src/CampaignManager.cpp:215
7992 msgid "HP and MP restored."
8093 msgstr ""
8194
82 #: ../../../src/CampaignManager.cpp:214
95 #: ../../../src/CampaignManager.cpp:219
8396 msgid "Negative effects removed."
8497 msgstr ""
8598
86 #: ../../../src/CampaignManager.cpp:220
99 #: ../../../src/CampaignManager.cpp:225
87100 msgid "HP and MP restored, negative effects removed"
88101 msgstr ""
89102
101114 "The default renderer that is often faster than the SDL software renderer."
102115 msgstr ""
103116
104 #: ../../../src/EngineSettings.cpp:561
117 #: ../../../src/EngineSettings.cpp:572
105118 msgid "Adventurer"
106119 msgstr ""
107120
108 #: ../../../src/Entity.cpp:511
121 #: ../../../src/Entity.cpp:522
109122 msgid "miss"
110123 msgstr ""
111124
112 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
113 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
125 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
126 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
114127 #, c-format
115128 msgid "+%d HP"
116129 msgstr ""
117130
118 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
119 #: ../../../src/StatBlock.cpp:822
131 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
132 #: ../../../src/StatBlock.cpp:830
120133 #, c-format
121134 msgid "+%d MP"
122135 msgstr ""
123136
124 #: ../../../src/EventManager.cpp:738
137 #: ../../../src/EventManager.cpp:782
125138 msgid "Unknown destination"
126139 msgstr ""
127140
128 #: ../../../src/GameStateConfigBase.cpp:89
129 #: ../../../src/GameStateConfigBase.cpp:110
141 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
142 msgid "Loading..."
143 msgstr ""
144
145 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
146 msgid "Delete Save"
147 msgstr ""
148
149 #: ../../../src/GameStateLoad.cpp:90
150 msgid "Delete this save?"
151 msgstr ""
152
153 #: ../../../src/GameStateLoad.cpp:92
154 msgid "Exit to Title"
155 msgstr ""
156
157 #: ../../../src/GameStateLoad.cpp:95
158 msgid "New Game"
159 msgstr ""
160
161 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
162 msgid "Choose a Slot"
163 msgstr ""
164
165 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
166 msgid "Enable a story mod to continue"
167 msgstr ""
168
169 #: ../../../src/GameStateLoad.cpp:597
170 msgid "Load Game"
171 msgstr ""
172
173 #: ../../../src/GameStateLoad.cpp:706
174 msgid "Entering game world..."
175 msgstr ""
176
177 #: ../../../src/GameStateLoad.cpp:709
178 msgid "Loading saved game..."
179 msgstr ""
180
181 #: ../../../src/GameStateLoad.cpp:742
182 msgid "Invalid save"
183 msgstr ""
184
185 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
186 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
187 #: ../../../src/MenuPowers.cpp:1543
188 #, c-format
189 msgid "Level %d"
190 msgstr ""
191
192 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
193 #: ../../../src/MenuConfig.cpp:244
194 msgid "Cancel"
195 msgstr ""
196
197 #: ../../../src/GameStateNew.cpp:68
198 msgid "Create"
199 msgstr ""
200
201 #: ../../../src/GameStateNew.cpp:76
202 msgid "Randomize"
203 msgstr ""
204
205 #: ../../../src/GameStateNew.cpp:92
206 msgid "Choose a Portrait"
207 msgstr ""
208
209 #: ../../../src/GameStateNew.cpp:96
210 msgid "Choose a Name"
211 msgstr ""
212
213 #: ../../../src/GameStateNew.cpp:100
214 msgid "Permadeath?"
215 msgstr ""
216
217 #: ../../../src/GameStateNew.cpp:104
218 msgid "Choose a Class"
219 msgstr ""
220
221 #: ../../../src/GameStateTitle.cpp:107
222 msgid "Play Game"
223 msgstr ""
224
225 #: ../../../src/GameStateTitle.cpp:110
226 msgid "Enable a core mod to continue"
227 msgstr ""
228
229 #: ../../../src/GameStateTitle.cpp:114
230 msgid "Configuration"
231 msgstr ""
232
233 #: ../../../src/GameStateTitle.cpp:117
234 msgid "Credits"
235 msgstr ""
236
237 #: ../../../src/GameStateTitle.cpp:120
238 msgid "Exit Game"
239 msgstr ""
240
241 #: ../../../src/InputState.cpp:407
242 msgid "Accept"
243 msgstr ""
244
245 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
246 #: ../../../src/SDLInputState.cpp:698
247 msgid "Up"
248 msgstr ""
249
250 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
251 #: ../../../src/SDLInputState.cpp:676
252 msgid "Down"
253 msgstr ""
254
255 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
256 #: ../../../src/SDLInputState.cpp:683
257 msgid "Left"
258 msgstr ""
259
260 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
261 #: ../../../src/SDLInputState.cpp:693
262 msgid "Right"
263 msgstr ""
264
265 #: ../../../src/InputState.cpp:412
266 msgid "Bar1"
267 msgstr ""
268
269 #: ../../../src/InputState.cpp:413
270 msgid "Bar2"
271 msgstr ""
272
273 #: ../../../src/InputState.cpp:414
274 msgid "Bar3"
275 msgstr ""
276
277 #: ../../../src/InputState.cpp:415
278 msgid "Bar4"
279 msgstr ""
280
281 #: ../../../src/InputState.cpp:416
282 msgid "Bar5"
283 msgstr ""
284
285 #: ../../../src/InputState.cpp:417
286 msgid "Bar6"
287 msgstr ""
288
289 #: ../../../src/InputState.cpp:418
290 msgid "Bar7"
291 msgstr ""
292
293 #: ../../../src/InputState.cpp:419
294 msgid "Bar8"
295 msgstr ""
296
297 #: ../../../src/InputState.cpp:420
298 msgid "Bar9"
299 msgstr ""
300
301 #: ../../../src/InputState.cpp:421
302 msgid "Bar0"
303 msgstr ""
304
305 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
306 #: ../../../src/MenuCharacter.cpp:54
307 msgid "Character"
308 msgstr ""
309
310 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
311 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
312 msgid "Inventory"
313 msgstr ""
314
315 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
316 #: ../../../src/MenuPowers.cpp:167
317 msgid "Powers"
318 msgstr ""
319
320 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
321 #: ../../../src/MenuLog.cpp:72
322 msgid "Log"
323 msgstr ""
324
325 #: ../../../src/InputState.cpp:426
326 msgid "Main1"
327 msgstr ""
328
329 #: ../../../src/InputState.cpp:427
330 msgid "Main2"
331 msgstr ""
332
333 #: ../../../src/InputState.cpp:428
334 msgid "Ctrl"
335 msgstr ""
336
337 #: ../../../src/InputState.cpp:429
338 msgid "Shift"
339 msgstr ""
340
341 #: ../../../src/InputState.cpp:430
342 msgid "Alt"
343 msgstr ""
344
345 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
346 msgid "Delete"
347 msgstr ""
348
349 #: ../../../src/InputState.cpp:432
350 msgid "ActionBar Accept"
351 msgstr ""
352
353 #: ../../../src/InputState.cpp:433
354 msgid "ActionBar Left"
355 msgstr ""
356
357 #: ../../../src/InputState.cpp:434
358 msgid "ActionBar Right"
359 msgstr ""
360
361 #: ../../../src/InputState.cpp:435
362 msgid "ActionBar Use"
363 msgstr ""
364
365 #: ../../../src/InputState.cpp:436
366 msgid "Developer Menu"
367 msgstr ""
368
369 #: ../../../src/InputState.cpp:438
370 msgid "Left Mouse"
371 msgstr ""
372
373 #: ../../../src/InputState.cpp:439
374 msgid "Middle Mouse"
375 msgstr ""
376
377 #: ../../../src/InputState.cpp:440
378 msgid "Right Mouse"
379 msgstr ""
380
381 #: ../../../src/InputState.cpp:441
382 msgid "Wheel Up"
383 msgstr ""
384
385 #: ../../../src/InputState.cpp:442
386 msgid "Wheel Down"
387 msgstr ""
388
389 #: ../../../src/InputState.cpp:443
390 msgid "Mouse X1"
391 msgstr ""
392
393 #: ../../../src/InputState.cpp:444
394 msgid "Mouse X2"
395 msgstr ""
396
397 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
398 msgid "Unknown Item"
399 msgstr ""
400
401 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
402 #, c-format
403 msgid "%d%% Speed"
404 msgstr ""
405
406 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
407 #, c-format
408 msgid "%d%% Attack Speed"
409 msgstr ""
410
411 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
412 #: ../../../src/MenuPowers.cpp:832
413 #, c-format
414 msgid "Resistance (%s)"
415 msgstr ""
416
417 #: ../../../src/ItemManager.cpp:714
418 #, c-format
419 msgid "Requires %s"
420 msgstr ""
421
422 #: ../../../src/ItemManager.cpp:763
423 msgid "Quest Item"
424 msgstr ""
425
426 #: ../../../src/ItemManager.cpp:790
427 #, c-format
428 msgid "Quality: %s"
429 msgstr ""
430
431 #: ../../../src/ItemManager.cpp:815
432 #, c-format
433 msgid "Absorb: %d-%d"
434 msgstr ""
435
436 #: ../../../src/ItemManager.cpp:817
437 #, c-format
438 msgid "Absorb: %d"
439 msgstr ""
440
441 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
442 #: ../../../src/MenuPowers.cpp:1133
443 #, c-format
444 msgid "Requires Level %d"
445 msgstr ""
446
447 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
448 #: ../../../src/MenuPowers.cpp:1124
449 #, c-format
450 msgid "Requires %s %d"
451 msgstr ""
452
453 #: ../../../src/ItemManager.cpp:879
454 #, c-format
455 msgid "Requires Class: %s"
456 msgstr ""
457
458 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
459 #, c-format
460 msgid "Buy Price: %d %s"
461 msgstr ""
462
463 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
464 #, c-format
465 msgid "Buy Price: %d %s each"
466 msgstr ""
467
468 #: ../../../src/ItemManager.cpp:916
469 #, c-format
470 msgid "Sell Price: %d %s"
471 msgstr ""
472
473 #: ../../../src/ItemManager.cpp:918
474 #, c-format
475 msgid "Sell Price: %d %s each"
476 msgstr ""
477
478 #: ../../../src/ItemManager.cpp:927
479 msgid "Set:"
480 msgstr ""
481
482 #: ../../../src/ItemManager.cpp:934
483 #, c-format
484 msgid "%d items:"
485 msgstr ""
486
487 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
488 #, c-format
489 msgid "Press [%s] to use"
490 msgstr ""
491
492 #: ../../../src/ItemManager.cpp:951
493 #, c-format
494 msgid "Press [%s] to read"
495 msgstr ""
496
497 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
498 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
499 #, c-format
500 msgid "Hotkey: %s"
501 msgstr ""
502
503 #: ../../../src/MenuActionBar.cpp:599
504 msgid "Not enough MP."
505 msgstr ""
506
507 #: ../../../src/MenuActiveEffects.cpp:124
508 #, c-format
509 msgid "x%d"
510 msgstr ""
511
512 #: ../../../src/MenuActiveEffects.cpp:219
513 msgid "Remaining:"
514 msgstr ""
515
516 #: ../../../src/MenuActiveEffects.cpp:225
517 #, c-format
518 msgid "x%d stacks"
519 msgstr ""
520
521 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
522 msgid "Name"
523 msgstr ""
524
525 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
526 msgid "Level"
527 msgstr ""
528
529 #: ../../../src/MenuCharacter.cpp:310
530 #, c-format
531 msgid "%d unspent stat point"
532 msgstr ""
533
534 #: ../../../src/MenuCharacter.cpp:313
535 #, c-format
536 msgid "%d unspent stat points"
537 msgstr ""
538
539 #: ../../../src/MenuCharacter.cpp:355
540 #, c-format
541 msgid "Reduces the damage taken from \"%s\" elemental attacks."
542 msgstr ""
543
544 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
545 #, c-format
546 msgid "XP: %d"
547 msgstr ""
548
549 #: ../../../src/MenuCharacter.cpp:367
550 #, c-format
551 msgid "Next: %d"
552 msgstr ""
553
554 #: ../../../src/MenuCharacter.cpp:373
555 #, c-format
556 msgid "base (%d), bonus (%d)"
557 msgstr ""
558
559 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
560 msgid "Related stats:"
561 msgstr ""
562
563 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
564 #, c-format
565 msgid "Each level grants %d."
566 msgstr ""
567
568 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
569 #, c-format
570 msgid "Each point of %s grants %d."
571 msgstr ""
572
573 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
574 msgid "Clear"
575 msgstr ""
576
577 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
578 msgid "Assign:"
579 msgstr ""
580
581 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
130582 msgid "Defaults"
131583 msgstr ""
132584
133 #: ../../../src/GameStateConfigBase.cpp:89
585 #: ../../../src/MenuConfig.cpp:123
134586 msgid "Reset ALL settings?"
135587 msgstr ""
136588
137 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
589 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
138590 msgid "OK"
139591 msgstr ""
140592
141 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
142 #: ../../../src/InputState.cpp:401
143 msgid "Cancel"
144 msgstr ""
145
146 #: ../../../src/GameStateConfigBase.cpp:160
147 #: ../../../src/GameStateConfigDesktop.cpp:130
593 #: ../../../src/MenuConfig.cpp:246
594 msgid "Continue"
595 msgstr ""
596
597 #: ../../../src/MenuConfig.cpp:248
598 msgid "Save Game"
599 msgstr ""
600
601 #: ../../../src/MenuConfig.cpp:291
602 msgid "Default"
603 msgstr ""
604
605 #: ../../../src/MenuConfig.cpp:291
606 msgid ""
607 "Show all loot tooltips, except for those that would be obscured by the "
608 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
609 msgstr ""
610
611 #: ../../../src/MenuConfig.cpp:292
612 msgid "Show all"
613 msgstr ""
614
615 #: ../../../src/MenuConfig.cpp:292
616 msgid ""
617 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
618 msgstr ""
619
620 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
621 msgid "Hidden"
622 msgstr ""
623
624 #: ../../../src/MenuConfig.cpp:293
625 msgid ""
626 "Always hide loot tooltips, except for when a piece of loot is hovered with "
627 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
628 msgstr ""
629
630 #: ../../../src/MenuConfig.cpp:296
631 msgid "Visible"
632 msgstr ""
633
634 #: ../../../src/MenuConfig.cpp:297
635 msgid "Visible (2x zoom)"
636 msgstr ""
637
638 #: ../../../src/MenuConfig.cpp:301
639 msgid ""
640 "Controls the type of warning to be activated when the player is below the "
641 "low health threshold."
642 msgstr ""
643
644 #: ../../../src/MenuConfig.cpp:302
645 msgid "- Display a message"
646 msgstr ""
647
648 #: ../../../src/MenuConfig.cpp:303
649 msgid "- Play a sound"
650 msgstr ""
651
652 #: ../../../src/MenuConfig.cpp:304
653 msgid "- Change the cursor"
654 msgstr ""
655
656 #: ../../../src/MenuConfig.cpp:306
657 msgid "Disabled"
658 msgstr ""
659
660 #: ../../../src/MenuConfig.cpp:307
661 msgid "All"
662 msgstr ""
663
664 #: ../../../src/MenuConfig.cpp:308
665 msgid "Message & Cursor"
666 msgstr ""
667
668 #: ../../../src/MenuConfig.cpp:309
669 msgid "Message & Sound"
670 msgstr ""
671
672 #: ../../../src/MenuConfig.cpp:310
673 msgid "Sound & Cursor"
674 msgstr ""
675
676 #: ../../../src/MenuConfig.cpp:311
677 msgid "Message"
678 msgstr ""
679
680 #: ../../../src/MenuConfig.cpp:312
681 msgid "Cursor"
682 msgstr ""
683
684 #: ../../../src/MenuConfig.cpp:313
685 msgid "Sound"
686 msgstr ""
687
688 #: ../../../src/MenuConfig.cpp:319
689 msgid ""
690 "When the player's health drops below the given threshold, the low health "
691 "notifications are triggered if one or more of them is enabled."
692 msgstr ""
693
694 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
695 msgid "Exit"
696 msgstr ""
697
698 #: ../../../src/MenuConfig.cpp:333
699 msgid "Video"
700 msgstr ""
701
702 #: ../../../src/MenuConfig.cpp:334
148703 msgid "Audio"
149704 msgstr ""
150705
151 #: ../../../src/GameStateConfigBase.cpp:161
152 #: ../../../src/GameStateConfigDesktop.cpp:131
706 #: ../../../src/MenuConfig.cpp:335
153707 msgid "Interface"
154708 msgstr ""
155709
156 #: ../../../src/GameStateConfigBase.cpp:162
157 #: ../../../src/GameStateConfigDesktop.cpp:134
710 #: ../../../src/MenuConfig.cpp:336
711 msgid "Input"
712 msgstr ""
713
714 #: ../../../src/MenuConfig.cpp:337
715 msgid "Keybindings"
716 msgstr ""
717
718 #: ../../../src/MenuConfig.cpp:338
158719 msgid "Mods"
159720 msgstr ""
160721
161 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
722 #: ../../../src/MenuConfig.cpp:350
723 msgid "Paused"
724 msgstr ""
725
726 #: ../../../src/MenuConfig.cpp:353
727 msgid "Time Played"
728 msgstr ""
729
730 #: ../../../src/MenuConfig.cpp:359
731 msgid "Renderer"
732 msgstr ""
733
734 #: ../../../src/MenuConfig.cpp:360
735 msgid "Full Screen Mode"
736 msgstr ""
737
738 #: ../../../src/MenuConfig.cpp:361
739 msgid "Hardware surfaces"
740 msgstr ""
741
742 #: ../../../src/MenuConfig.cpp:362
743 msgid "V-Sync"
744 msgstr ""
745
746 #: ../../../src/MenuConfig.cpp:363
747 msgid "Texture Filtering"
748 msgstr ""
749
750 #: ../../../src/MenuConfig.cpp:364
751 msgid "DPI scaling"
752 msgstr ""
753
754 #: ../../../src/MenuConfig.cpp:365
755 msgid "Parallax Layers"
756 msgstr ""
757
758 #: ../../../src/MenuConfig.cpp:366
759 msgid "Allow changing gamma"
760 msgstr ""
761
762 #: ../../../src/MenuConfig.cpp:367
763 msgid "Gamma"
764 msgstr ""
765
766 #: ../../../src/MenuConfig.cpp:369
767 msgid "Sound Volume"
768 msgstr ""
769
770 #: ../../../src/MenuConfig.cpp:370
162771 msgid "Music Volume"
163772 msgstr ""
164773
165 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
166 msgid "Sound Volume"
167 msgstr ""
168
169 #: ../../../src/GameStateConfigBase.cpp:257
774 #: ../../../src/MenuConfig.cpp:372
170775 msgid "Language"
171776 msgstr ""
172777
173 #: ../../../src/GameStateConfigBase.cpp:266
778 #: ../../../src/MenuConfig.cpp:373
174779 msgid "Show FPS"
175780 msgstr ""
176781
177 #: ../../../src/GameStateConfigBase.cpp:270
782 #: ../../../src/MenuConfig.cpp:374
783 msgid "Hardware mouse cursor"
784 msgstr ""
785
786 #: ../../../src/MenuConfig.cpp:375
178787 msgid "Colorblind Mode"
179788 msgstr ""
180789
181 #: ../../../src/GameStateConfigBase.cpp:274
182 msgid "Hardware mouse cursor"
183 msgstr ""
184
185 #: ../../../src/GameStateConfigBase.cpp:278
790 #: ../../../src/MenuConfig.cpp:376
186791 msgid "Developer Mode"
187792 msgstr ""
188793
189 #: ../../../src/GameStateConfigBase.cpp:282
794 #: ../../../src/MenuConfig.cpp:377
190795 msgid "Subtitles"
191796 msgstr ""
192797
193 #: ../../../src/GameStateConfigBase.cpp:286
194 msgid "Active Mods"
195 msgstr ""
196
197 #: ../../../src/GameStateConfigBase.cpp:295
198 msgid "Available Mods"
199 msgstr ""
200
201 #: ../../../src/GameStateConfigBase.cpp:314
202 msgid "<< Disable"
203 msgstr ""
204
205 #: ../../../src/GameStateConfigBase.cpp:320
206 msgid "Enable >>"
207 msgstr ""
208
209 #: ../../../src/GameStateConfigBase.cpp:873
210 msgid "Version:"
211 msgstr ""
212
213 #: ../../../src/GameStateConfigBase.cpp:878
214 msgid "Game:"
215 msgstr ""
216
217 #: ../../../src/GameStateConfigBase.cpp:883
218 msgid "Engine version:"
219 msgstr ""
220
221 #: ../../../src/GameStateConfigBase.cpp:891
222 msgid "Requires mods:"
223 msgstr ""
224
225 #: ../../../src/GameStateConfigDesktop.cpp:83
226 #: ../../../src/GameStateConfigDesktop.cpp:751
227 msgid "Clear"
228 msgstr ""
229
230 #: ../../../src/GameStateConfigDesktop.cpp:83
231 #: ../../../src/GameStateConfigDesktop.cpp:749
232 msgid "Assign:"
233 msgstr ""
234
235 #: ../../../src/GameStateConfigDesktop.cpp:128
236 msgid "Video"
237 msgstr ""
238
239 #: ../../../src/GameStateConfigDesktop.cpp:132
240 msgid "Input"
241 msgstr ""
242
243 #: ../../../src/GameStateConfigDesktop.cpp:133
244 msgid "Keybindings"
245 msgstr ""
246
247 #: ../../../src/GameStateConfigDesktop.cpp:188
798 #: ../../../src/MenuConfig.cpp:378
799 msgid "Loot tooltip visibility"
800 msgstr ""
801
802 #: ../../../src/MenuConfig.cpp:379
803 msgid "Mini-map mode"
804 msgstr ""
805
806 #: ../../../src/MenuConfig.cpp:380
807 msgid "Always show stat bar labels"
808 msgstr ""
809
810 #: ../../../src/MenuConfig.cpp:381
811 msgid "Allow stat bar auto-hiding"
812 msgstr ""
813
814 #: ../../../src/MenuConfig.cpp:382
815 msgid "Show combat text"
816 msgstr ""
817
818 #: ../../../src/MenuConfig.cpp:383
819 msgid "Automatically equip items"
820 msgstr ""
821
822 #: ../../../src/MenuConfig.cpp:384
823 msgid "Show hidden entity markers"
824 msgstr ""
825
826 #: ../../../src/MenuConfig.cpp:385
827 msgid "Low health notification"
828 msgstr ""
829
830 #: ../../../src/MenuConfig.cpp:386
831 msgid "Low health threshold"
832 msgstr ""
833
834 #: ../../../src/MenuConfig.cpp:389
835 msgid "Joystick"
836 msgstr ""
837
838 #: ../../../src/MenuConfig.cpp:390
839 msgid "Move hero using mouse"
840 msgstr ""
841
842 #: ../../../src/MenuConfig.cpp:391
843 msgid "Mouse aim"
844 msgstr ""
845
846 #: ../../../src/MenuConfig.cpp:392
847 msgid "Do not use mouse"
848 msgstr ""
849
850 #: ../../../src/MenuConfig.cpp:393
851 msgid "Swap mouse movement button"
852 msgstr ""
853
854 #: ../../../src/MenuConfig.cpp:394
855 msgid "Attack with mouse movement"
856 msgstr ""
857
858 #: ../../../src/MenuConfig.cpp:395
859 msgid "Joystick Deadzone"
860 msgstr ""
861
862 #: ../../../src/MenuConfig.cpp:405
863 #, c-format
864 msgid "Primary binding: %s"
865 msgstr ""
866
867 #: ../../../src/MenuConfig.cpp:406
868 #, c-format
869 msgid "Alternate binding: %s"
870 msgstr ""
871
872 #: ../../../src/MenuConfig.cpp:407
873 #, c-format
874 msgid "Joystick binding: %s"
875 msgstr ""
876
877 #: ../../../src/MenuConfig.cpp:508
248878 msgid ""
249879 "Will try to store surfaces in video memory versus system memory. The effect "
250880 "this has on performance depends on the renderer."
251881 msgstr ""
252882
253 #: ../../../src/GameStateConfigDesktop.cpp:189
883 #: ../../../src/MenuConfig.cpp:509
254884 msgid ""
255885 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
256886 "windowed mode or input lag."
257887 msgstr ""
258888
259 #: ../../../src/GameStateConfigDesktop.cpp:190
889 #: ../../../src/MenuConfig.cpp:510
260890 msgid ""
261891 "When enabled, this uses the screen DPI in addition to the window dimensions "
262892 "to scale the rendering resolution. Otherwise, only the window dimensions are"
263893 " used."
264894 msgstr ""
265895
266 #: ../../../src/GameStateConfigDesktop.cpp:191
896 #: ../../../src/MenuConfig.cpp:511
267897 msgid ""
268898 "This enables parallax (non-tile) layers. Disabling this setting can improve "
269899 "performance in some cases."
270900 msgstr ""
271901
272 #: ../../../src/GameStateConfigDesktop.cpp:192
273 msgid "Experimental"
274 msgstr ""
275
276 #: ../../../src/GameStateConfigDesktop.cpp:193
277 msgid "For handheld devices"
278 msgstr ""
279
280 #: ../../../src/GameStateConfigDesktop.cpp:211
281 msgid "Renderer"
282 msgstr ""
283
284 #: ../../../src/GameStateConfigDesktop.cpp:227
285 msgid "Full Screen Mode"
286 msgstr ""
287
288 #: ../../../src/GameStateConfigDesktop.cpp:231
289 msgid "Move hero using mouse"
290 msgstr ""
291
292 #: ../../../src/GameStateConfigDesktop.cpp:235
293 msgid "Hardware surfaces"
294 msgstr ""
295
296 #: ../../../src/GameStateConfigDesktop.cpp:239
297 msgid "V-Sync"
298 msgstr ""
299
300 #: ../../../src/GameStateConfigDesktop.cpp:243
301 msgid "Texture Filtering"
302 msgstr ""
303
304 #: ../../../src/GameStateConfigDesktop.cpp:247
305 msgid "DPI scaling"
306 msgstr ""
307
308 #: ../../../src/GameStateConfigDesktop.cpp:251
309 msgid "Parallax Layers"
310 msgstr ""
311
312 #: ../../../src/GameStateConfigDesktop.cpp:255
313 msgid "Allow changing gamma"
314 msgstr ""
315
316 #: ../../../src/GameStateConfigDesktop.cpp:259
317 msgid "Gamma"
318 msgstr ""
319
320 #: ../../../src/GameStateConfigDesktop.cpp:263
321 msgid "Use joystick"
322 msgstr ""
323
324 #: ../../../src/GameStateConfigDesktop.cpp:267
325 msgid "Joystick"
326 msgstr ""
327
328 #: ../../../src/GameStateConfigDesktop.cpp:283
329 msgid "Mouse aim"
330 msgstr ""
331
332 #: ../../../src/GameStateConfigDesktop.cpp:287
333 msgid "Do not use mouse"
334 msgstr ""
335
336 #: ../../../src/GameStateConfigDesktop.cpp:291
337 msgid "Joystick Deadzone"
338 msgstr ""
339
340 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
341 msgid "Loading..."
342 msgstr ""
343
344 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
345 msgid "Delete Save"
346 msgstr ""
347
348 #: ../../../src/GameStateLoad.cpp:88
349 msgid "Delete this save?"
350 msgstr ""
351
352 #: ../../../src/GameStateLoad.cpp:90
353 msgid "Exit to Title"
354 msgstr ""
355
356 #: ../../../src/GameStateLoad.cpp:93
357 msgid "New Game"
358 msgstr ""
359
360 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
361 msgid "Choose a Slot"
362 msgstr ""
363
364 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
365 msgid "Enable a story mod to continue"
366 msgstr ""
367
368 #: ../../../src/GameStateLoad.cpp:589
369 msgid "Load Game"
370 msgstr ""
371
372 #: ../../../src/GameStateLoad.cpp:695
373 msgid "Entering game world..."
374 msgstr ""
375
376 #: ../../../src/GameStateLoad.cpp:698
377 msgid "Loading saved game..."
378 msgstr ""
379
380 #: ../../../src/GameStateLoad.cpp:731
381 msgid "Invalid save"
382 msgstr ""
383
384 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
385 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
386 #: ../../../src/MenuPowers.cpp:1542
387 #, c-format
388 msgid "Level %d"
389 msgstr ""
390
391 #: ../../../src/GameStateNew.cpp:68
392 msgid "Create"
393 msgstr ""
394
395 #: ../../../src/GameStateNew.cpp:76
396 msgid "Randomize"
397 msgstr ""
398
399 #: ../../../src/GameStateNew.cpp:92
400 msgid "Choose a Portrait"
401 msgstr ""
402
403 #: ../../../src/GameStateNew.cpp:96
404 msgid "Choose a Name"
405 msgstr ""
406
407 #: ../../../src/GameStateNew.cpp:100
408 msgid "Permadeath?"
409 msgstr ""
410
411 #: ../../../src/GameStateNew.cpp:104
412 msgid "Choose a Class"
413 msgstr ""
414
415 #: ../../../src/GameStateTitle.cpp:108
416 msgid "Play Game"
417 msgstr ""
418
419 #: ../../../src/GameStateTitle.cpp:111
420 msgid "Enable a core mod to continue"
421 msgstr ""
422
423 #: ../../../src/GameStateTitle.cpp:115
424 msgid "Configuration"
425 msgstr ""
426
427 #: ../../../src/GameStateTitle.cpp:118
428 msgid "Credits"
429 msgstr ""
430
431 #: ../../../src/GameStateTitle.cpp:121
432 msgid "Exit Game"
433 msgstr ""
434
435 #: ../../../src/InputState.cpp:402
436 msgid "Accept"
437 msgstr ""
438
439 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
440 msgid "Up"
441 msgstr ""
442
443 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
444 msgid "Down"
445 msgstr ""
446
447 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
448 msgid "Left"
449 msgstr ""
450
451 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
452 msgid "Right"
453 msgstr ""
454
455 #: ../../../src/InputState.cpp:407
456 msgid "Bar1"
457 msgstr ""
458
459 #: ../../../src/InputState.cpp:408
460 msgid "Bar2"
461 msgstr ""
462
463 #: ../../../src/InputState.cpp:409
464 msgid "Bar3"
465 msgstr ""
466
467 #: ../../../src/InputState.cpp:410
468 msgid "Bar4"
469 msgstr ""
470
471 #: ../../../src/InputState.cpp:411
472 msgid "Bar5"
473 msgstr ""
474
475 #: ../../../src/InputState.cpp:412
476 msgid "Bar6"
477 msgstr ""
478
479 #: ../../../src/InputState.cpp:413
480 msgid "Bar7"
481 msgstr ""
482
483 #: ../../../src/InputState.cpp:414
484 msgid "Bar8"
485 msgstr ""
486
487 #: ../../../src/InputState.cpp:415
488 msgid "Bar9"
489 msgstr ""
490
491 #: ../../../src/InputState.cpp:416
492 msgid "Bar0"
493 msgstr ""
494
495 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
496 #: ../../../src/MenuCharacter.cpp:54
497 msgid "Character"
498 msgstr ""
499
500 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
501 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
502 msgid "Inventory"
503 msgstr ""
504
505 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
506 #: ../../../src/MenuPowers.cpp:168
507 msgid "Powers"
508 msgstr ""
509
510 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
511 #: ../../../src/MenuLog.cpp:72
512 msgid "Log"
513 msgstr ""
514
515 #: ../../../src/InputState.cpp:421
516 msgid "Main1"
517 msgstr ""
518
519 #: ../../../src/InputState.cpp:422
520 msgid "Main2"
521 msgstr ""
522
523 #: ../../../src/InputState.cpp:423
524 msgid "Ctrl"
525 msgstr ""
526
527 #: ../../../src/InputState.cpp:424
528 msgid "Shift"
529 msgstr ""
530
531 #: ../../../src/InputState.cpp:425
532 msgid "Alt"
533 msgstr ""
534
535 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
536 msgid "Delete"
537 msgstr ""
538
539 #: ../../../src/InputState.cpp:427
540 msgid "ActionBar Accept"
541 msgstr ""
542
543 #: ../../../src/InputState.cpp:428
544 msgid "ActionBar Left"
545 msgstr ""
546
547 #: ../../../src/InputState.cpp:429
548 msgid "ActionBar Right"
549 msgstr ""
550
551 #: ../../../src/InputState.cpp:430
552 msgid "ActionBar Use"
553 msgstr ""
554
555 #: ../../../src/InputState.cpp:431
556 msgid "Developer Menu"
557 msgstr ""
558
559 #: ../../../src/InputState.cpp:433
560 msgid "Left Mouse"
561 msgstr ""
562
563 #: ../../../src/InputState.cpp:434
564 msgid "Middle Mouse"
565 msgstr ""
566
567 #: ../../../src/InputState.cpp:435
568 msgid "Right Mouse"
569 msgstr ""
570
571 #: ../../../src/InputState.cpp:436
572 msgid "Wheel Up"
573 msgstr ""
574
575 #: ../../../src/InputState.cpp:437
576 msgid "Wheel Down"
577 msgstr ""
578
579 #: ../../../src/InputState.cpp:438
580 msgid "Mouse X1"
581 msgstr ""
582
583 #: ../../../src/InputState.cpp:439
584 msgid "Mouse X2"
585 msgstr ""
586
587 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
588 msgid "Unknown Item"
589 msgstr ""
590
591 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
592 #, c-format
593 msgid "%d%% Speed"
594 msgstr ""
595
596 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
597 #, c-format
598 msgid "%d%% Attack Speed"
599 msgstr ""
600
601 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
602 #: ../../../src/MenuPowers.cpp:833
603 #, c-format
604 msgid "Resistance (%s)"
605 msgstr ""
606
607 #: ../../../src/ItemManager.cpp:684
608 #, c-format
609 msgid "Requires %s"
610 msgstr ""
611
612 #: ../../../src/ItemManager.cpp:733
613 msgid "Quest Item"
614 msgstr ""
615
616 #: ../../../src/ItemManager.cpp:760
617 #, c-format
618 msgid "Quality: %s"
619 msgstr ""
620
621 #: ../../../src/ItemManager.cpp:785
622 #, c-format
623 msgid "Absorb: %d-%d"
624 msgstr ""
625
626 #: ../../../src/ItemManager.cpp:787
627 #, c-format
628 msgid "Absorb: %d"
629 msgstr ""
630
631 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
632 #: ../../../src/MenuPowers.cpp:1134
633 #, c-format
634 msgid "Requires Level %d"
635 msgstr ""
636
637 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
638 #: ../../../src/MenuPowers.cpp:1125
639 #, c-format
640 msgid "Requires %s %d"
641 msgstr ""
642
643 #: ../../../src/ItemManager.cpp:849
644 #, c-format
645 msgid "Requires Class: %s"
646 msgstr ""
647
648 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
649 #, c-format
650 msgid "Buy Price: %d %s"
651 msgstr ""
652
653 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
654 #, c-format
655 msgid "Buy Price: %d %s each"
656 msgstr ""
657
658 #: ../../../src/ItemManager.cpp:886
659 #, c-format
660 msgid "Sell Price: %d %s"
661 msgstr ""
662
663 #: ../../../src/ItemManager.cpp:888
664 #, c-format
665 msgid "Sell Price: %d %s each"
666 msgstr ""
667
668 #: ../../../src/ItemManager.cpp:897
669 msgid "Set:"
670 msgstr ""
671
672 #: ../../../src/ItemManager.cpp:904
673 #, c-format
674 msgid "%d items:"
675 msgstr ""
676
677 #: ../../../src/ItemManager.cpp:917
678 #, c-format
679 msgid "Press [%s] to use"
680 msgstr ""
681
682 #: ../../../src/ItemManager.cpp:920
683 #, c-format
684 msgid "Press [%s] to read"
685 msgstr ""
686
687 #: ../../../src/MenuActionBar.cpp:87
688 msgid "Loot tooltip visibility"
689 msgstr ""
690
691 #: ../../../src/MenuActionBar.cpp:88
692 msgid "Mini-map mode"
693 msgstr ""
694
695 #: ../../../src/MenuActionBar.cpp:89
696 msgid "Always show stat bar labels"
697 msgstr ""
698
699 #: ../../../src/MenuActionBar.cpp:90
700 msgid "Show combat text"
701 msgstr ""
702
703 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
704 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
705 #, c-format
706 msgid "Hotkey: %s"
707 msgstr ""
708
709 #: ../../../src/MenuActionBar.cpp:474
710 #, c-format
711 msgid "Default. Temporarily show all loot tooltips with '%s'."
712 msgstr ""
713
714 #: ../../../src/MenuActionBar.cpp:476
715 #, c-format
716 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
717 msgstr ""
718
719 #: ../../../src/MenuActionBar.cpp:478
720 #, c-format
721 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
722 msgstr ""
723
724 #: ../../../src/MenuActionBar.cpp:482
725 msgid "Visible"
726 msgstr ""
727
728 #: ../../../src/MenuActionBar.cpp:484
729 msgid "Visible (2x zoom)"
730 msgstr ""
731
732 #: ../../../src/MenuActionBar.cpp:486
733 msgid "Hidden"
734 msgstr ""
735
736 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
737 msgid "Enabled"
738 msgstr ""
739
740 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
741 msgid "Disabled"
742 msgstr ""
743
744 #: ../../../src/MenuActionBar.cpp:657
745 msgid "Not enough MP."
746 msgstr ""
747
748 #: ../../../src/MenuActiveEffects.cpp:124
749 #, c-format
750 msgid "x%d"
751 msgstr ""
752
753 #: ../../../src/MenuActiveEffects.cpp:219
754 msgid "Remaining:"
755 msgstr ""
756
757 #: ../../../src/MenuActiveEffects.cpp:225
758 #, c-format
759 msgid "x%d stacks"
760 msgstr ""
761
762 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
763 msgid "Name"
764 msgstr ""
765
766 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
767 msgid "Level"
768 msgstr ""
769
770 #: ../../../src/MenuCharacter.cpp:310
771 #, c-format
772 msgid "%d unspent stat point"
773 msgstr ""
774
775 #: ../../../src/MenuCharacter.cpp:313
776 #, c-format
777 msgid "%d unspent stat points"
778 msgstr ""
779
780 #: ../../../src/MenuCharacter.cpp:355
781 #, c-format
782 msgid "Reduces the damage taken from \"%s\" elemental attacks."
783 msgstr ""
784
785 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
786 #, c-format
787 msgid "XP: %d"
788 msgstr ""
789
790 #: ../../../src/MenuCharacter.cpp:367
791 #, c-format
792 msgid "Next: %d"
793 msgstr ""
794
795 #: ../../../src/MenuCharacter.cpp:373
796 #, c-format
797 msgid "base (%d), bonus (%d)"
798 msgstr ""
799
800 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
801 msgid "Related stats:"
802 msgstr ""
803
804 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
805 #, c-format
806 msgid "Each level grants %d."
807 msgstr ""
808
809 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
810 #, c-format
811 msgid "Each point of %s grants %d."
902 #: ../../../src/MenuConfig.cpp:512
903 msgid ""
904 "Enables the below setting that controls the screen gamma level. The behavior"
905 " of the gamma setting can vary between platforms."
906 msgstr ""
907
908 #: ../../../src/MenuConfig.cpp:513
909 msgid ""
910 "Provides additional text for information that is primarily conveyed through "
911 "color."
912 msgstr ""
913
914 #: ../../../src/MenuConfig.cpp:514
915 msgid ""
916 "Some mods will automatically hide the stat bars when they are inactive. "
917 "Disabling this option will keep them displayed at all times."
918 msgstr ""
919
920 #: ../../../src/MenuConfig.cpp:515
921 msgid ""
922 "When enabled, empty equipment slots will be filled with applicable items "
923 "when they are obtained."
924 msgstr ""
925
926 #: ../../../src/MenuConfig.cpp:516
927 msgid ""
928 "Shows a marker above enemies, allies, and the player when they are obscured "
929 "by tall objects."
930 msgstr ""
931
932 #: ../../../src/MenuConfig.cpp:517
933 msgid ""
934 "This allows the game to be controlled entirely with the keyboard (or "
935 "joystick)."
936 msgstr ""
937
938 #: ../../../src/MenuConfig.cpp:518
939 msgid ""
940 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
941 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
942 "instead of 'Main1'."
943 msgstr ""
944
945 #: ../../../src/MenuConfig.cpp:519
946 msgid ""
947 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
948 "assigned to the movement button can be used by targeting an enemy. If this "
949 "setting is disabled, it is required to use 'Shift' to access the Power "
950 "assigned to the movement button."
951 msgstr ""
952
953 #: ../../../src/MenuConfig.cpp:520
954 msgid ""
955 "The player's attacks will be aimed in the direction of the mouse cursor when"
956 " this is enabled."
957 msgstr ""
958
959 #: ../../../src/MenuConfig.cpp:571
960 msgid "Active Mods"
961 msgstr ""
962
963 #: ../../../src/MenuConfig.cpp:580
964 msgid "Available Mods"
965 msgstr ""
966
967 #: ../../../src/MenuConfig.cpp:599
968 msgid "<< Disable"
969 msgstr ""
970
971 #: ../../../src/MenuConfig.cpp:605
972 msgid "Enable >>"
973 msgstr ""
974
975 #: ../../../src/MenuConfig.cpp:1436
976 msgid "Version:"
977 msgstr ""
978
979 #: ../../../src/MenuConfig.cpp:1441
980 msgid "Game:"
981 msgstr ""
982
983 #: ../../../src/MenuConfig.cpp:1446
984 msgid "Engine version:"
985 msgstr ""
986
987 #: ../../../src/MenuConfig.cpp:1454
988 msgid "Requires mods:"
989 msgstr ""
990
991 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
992 msgid "(none)"
993 msgstr ""
994
995 #: ../../../src/MenuConfig.cpp:1579
996 msgid "Save & Exit"
812997 msgstr ""
813998
814999 #: ../../../src/MenuDevConsole.cpp:63
9641149 msgid "HINT: Type help"
9651150 msgstr ""
9661151
967 #: ../../../src/MenuEnemy.cpp:138
1152 #: ../../../src/MenuEnemy.cpp:162
9681153 #, c-format
9691154 msgid "%s level %d"
9701155 msgstr ""
9711156
972 #: ../../../src/MenuEnemy.cpp:162
1157 #: ../../../src/MenuEnemy.cpp:186
9731158 msgid "Dead"
9741159 msgstr ""
9751160
976 #: ../../../src/MenuEnemy.cpp:164
1161 #: ../../../src/MenuEnemy.cpp:188
9771162 msgid "Destroyed"
9781163 msgstr ""
9791164
980 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
981 msgid "Paused"
982 msgstr ""
983
984 #: ../../../src/MenuExit.cpp:91
985 msgid "Save & Exit"
986 msgstr ""
987
988 #: ../../../src/MenuExit.cpp:92
989 msgid "Exit"
990 msgstr ""
991
992 #: ../../../src/MenuExit.cpp:96
993 msgid "Continue"
994 msgstr ""
995
996 #: ../../../src/MenuInventory.cpp:73
997 msgid "Automatically equip items"
998 msgstr ""
999
1000 #: ../../../src/MenuInventory.cpp:188
1165 #: ../../../src/MenuInventory.cpp:177
10011166 #, c-format
10021167 msgid "Lost %d%% of %s."
10031168 msgstr ""
10041169
1005 #: ../../../src/MenuInventory.cpp:195
1170 #: ../../../src/MenuInventory.cpp:184
10061171 #, c-format
10071172 msgid "Lost %d%% of total XP."
10081173 msgstr ""
10091174
1010 #: ../../../src/MenuInventory.cpp:200
1175 #: ../../../src/MenuInventory.cpp:189
10111176 #, c-format
10121177 msgid "Lost %d%% of current level XP."
10131178 msgstr ""
10141179
1015 #: ../../../src/MenuInventory.cpp:226
1180 #: ../../../src/MenuInventory.cpp:215
10161181 #, c-format
10171182 msgid "Lost %s."
10181183 msgstr ""
10191184
1020 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1185 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10211186 #, c-format
10221187 msgid "%d %s"
10231188 msgstr ""
10241189
1025 #: ../../../src/MenuInventory.cpp:317
1190 #: ../../../src/MenuInventory.cpp:300
10261191 msgid "Pick up item(s):"
10271192 msgstr ""
10281193
1029 #: ../../../src/MenuInventory.cpp:318
1194 #: ../../../src/MenuInventory.cpp:301
10301195 msgid "Use or equip item:"
10311196 msgstr ""
10321197
1033 #: ../../../src/MenuInventory.cpp:319
1198 #: ../../../src/MenuInventory.cpp:302
10341199 #, c-format
10351200 msgid "%s modifiers"
10361201 msgstr ""
10371202
1038 #: ../../../src/MenuInventory.cpp:320
1203 #: ../../../src/MenuInventory.cpp:303
10391204 msgid "Select a quantity of item:"
10401205 msgstr ""
10411206
1042 #: ../../../src/MenuInventory.cpp:323
1207 #: ../../../src/MenuInventory.cpp:306
10431208 msgid "Stash item stack:"
10441209 msgstr ""
10451210
1046 #: ../../../src/MenuInventory.cpp:325
1211 #: ../../../src/MenuInventory.cpp:308
10471212 msgid "Sell item stack:"
10481213 msgstr ""
10491214
1050 #: ../../../src/MenuInventory.cpp:592
1215 #: ../../../src/MenuInventory.cpp:574
10511216 msgid "You don't have enough of the required item."
10521217 msgstr ""
10531218
1054 #: ../../../src/MenuInventory.cpp:599
1219 #: ../../../src/MenuInventory.cpp:586
10551220 msgid "You can't use this item right now."
10561221 msgstr ""
10571222
1058 #: ../../../src/MenuInventory.cpp:611
1223 #: ../../../src/MenuInventory.cpp:598
10591224 msgid "This item can only be used from the action bar."
10601225 msgstr ""
10611226
1062 #: ../../../src/MenuInventory.cpp:729
1227 #: ../../../src/MenuInventory.cpp:716
10631228 msgid "Inventory is full."
10641229 msgstr ""
10651230
1066 #: ../../../src/MenuInventory.cpp:849
1231 #: ../../../src/MenuInventory.cpp:841
10671232 #, c-format
10681233 msgid "Not enough %s."
10691234 msgstr ""
10701235
1071 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1236 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
10721237 msgid "This item can not be sold."
10731238 msgstr ""
10741239
10801245 msgid "Quests"
10811246 msgstr ""
10821247
1083 #: ../../../src/MenuManager.cpp:286
1248 #: ../../../src/MenuManager.cpp:296
10841249 #, c-format
10851250 msgid "XP: %d/%d"
10861251 msgstr ""
10871252
1088 #: ../../../src/MenuManager.cpp:827
1253 #: ../../../src/MenuManager.cpp:854
10891254 msgid "This item can not be dropped."
10901255 msgstr ""
10911256
10931258 msgid "Enter amount:"
10941259 msgstr ""
10951260
1096 #: ../../../src/MenuPowers.cpp:787
1261 #: ../../../src/MenuPowers.cpp:786
10971262 msgid "Passive"
10981263 msgstr ""
10991264
1100 #: ../../../src/MenuPowers.cpp:792
1265 #: ../../../src/MenuPowers.cpp:791
11011266 #, c-format
11021267 msgid "Costs %d MP"
11031268 msgstr ""
11041269
1105 #: ../../../src/MenuPowers.cpp:796
1270 #: ../../../src/MenuPowers.cpp:795
11061271 #, c-format
11071272 msgid "Costs %d HP"
11081273 msgstr ""
11091274
1110 #: ../../../src/MenuPowers.cpp:801
1275 #: ../../../src/MenuPowers.cpp:800
11111276 msgid "Cooldown:"
11121277 msgstr ""
11131278
1114 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1279 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11151280 msgid "Damage per second"
11161281 msgstr ""
11171282
1118 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1283 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11191284 msgid "HP per second"
11201285 msgstr ""
11211286
1122 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1287 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11231288 msgid "MP per second"
11241289 msgstr ""
11251290
1126 #: ../../../src/MenuPowers.cpp:885
1291 #: ../../../src/MenuPowers.cpp:884
11271292 msgid "Immobilize"
11281293 msgstr ""
11291294
1130 #: ../../../src/MenuPowers.cpp:893
1295 #: ../../../src/MenuPowers.cpp:892
11311296 msgid "Immunity"
11321297 msgstr ""
11331298
1134 #: ../../../src/MenuPowers.cpp:896
1299 #: ../../../src/MenuPowers.cpp:895
11351300 msgid "Immunity to damage over time"
11361301 msgstr ""
11371302
1138 #: ../../../src/MenuPowers.cpp:899
1303 #: ../../../src/MenuPowers.cpp:898
11391304 msgid "Immunity to slow"
11401305 msgstr ""
11411306
1142 #: ../../../src/MenuPowers.cpp:902
1307 #: ../../../src/MenuPowers.cpp:901
11431308 msgid "Immunity to stun"
11441309 msgstr ""
11451310
1146 #: ../../../src/MenuPowers.cpp:905
1311 #: ../../../src/MenuPowers.cpp:904
11471312 msgid "Immunity to HP steal"
11481313 msgstr ""
11491314
1150 #: ../../../src/MenuPowers.cpp:908
1315 #: ../../../src/MenuPowers.cpp:907
11511316 msgid "Immunity to MP steal"
11521317 msgstr ""
11531318
1154 #: ../../../src/MenuPowers.cpp:911
1319 #: ../../../src/MenuPowers.cpp:910
11551320 msgid "Immunity to knockback"
11561321 msgstr ""
11571322
1158 #: ../../../src/MenuPowers.cpp:914
1323 #: ../../../src/MenuPowers.cpp:913
11591324 msgid "Immunity to damage reflection"
11601325 msgstr ""
11611326
1162 #: ../../../src/MenuPowers.cpp:917
1327 #: ../../../src/MenuPowers.cpp:916
11631328 msgid "Stun"
11641329 msgstr ""
11651330
1166 #: ../../../src/MenuPowers.cpp:920
1331 #: ../../../src/MenuPowers.cpp:919
11671332 msgid "Automatic revive on death"
11681333 msgstr ""
11691334
1170 #: ../../../src/MenuPowers.cpp:923
1335 #: ../../../src/MenuPowers.cpp:922
11711336 msgid "Convert"
11721337 msgstr ""
11731338
1174 #: ../../../src/MenuPowers.cpp:926
1339 #: ../../../src/MenuPowers.cpp:925
11751340 msgid "Fear"
11761341 msgstr ""
11771342
1178 #: ../../../src/MenuPowers.cpp:929
1343 #: ../../../src/MenuPowers.cpp:928
11791344 msgid "Lifespan"
11801345 msgstr ""
11811346
1182 #: ../../../src/MenuPowers.cpp:953
1347 #: ../../../src/MenuPowers.cpp:952
11831348 msgid "Magical Shield"
11841349 msgstr ""
11851350
1186 #: ../../../src/MenuPowers.cpp:982
1351 #: ../../../src/MenuPowers.cpp:981
11871352 msgid "Healing"
11881353 msgstr ""
11891354
1190 #: ../../../src/MenuPowers.cpp:985
1355 #: ../../../src/MenuPowers.cpp:984
11911356 msgid "Knockback"
11921357 msgstr ""
11931358
1194 #: ../../../src/MenuPowers.cpp:1010
1359 #: ../../../src/MenuPowers.cpp:1009
11951360 #, c-format
11961361 msgid "%d%% chance"
11971362 msgstr ""
11981363
1199 #: ../../../src/MenuPowers.cpp:1062
1364 #: ../../../src/MenuPowers.cpp:1061
12001365 msgid "Base Accuracy"
12011366 msgstr ""
12021367
1203 #: ../../../src/MenuPowers.cpp:1082
1368 #: ../../../src/MenuPowers.cpp:1081
12041369 msgid "Base Critical Chance"
12051370 msgstr ""
12061371
1207 #: ../../../src/MenuPowers.cpp:1090
1372 #: ../../../src/MenuPowers.cpp:1089
12081373 msgid "Ignores Absorbtion"
12091374 msgstr ""
12101375
1211 #: ../../../src/MenuPowers.cpp:1095
1376 #: ../../../src/MenuPowers.cpp:1094
12121377 msgid "Ignores Avoidance"
12131378 msgstr ""
12141379
1215 #: ../../../src/MenuPowers.cpp:1100
1380 #: ../../../src/MenuPowers.cpp:1099
12161381 #, c-format
12171382 msgid "%d%% Chance to crit slowed targets"
12181383 msgstr ""
12191384
1220 #: ../../../src/MenuPowers.cpp:1105
1385 #: ../../../src/MenuPowers.cpp:1104
12211386 #, c-format
12221387 msgid "Elemental Damage (%s)"
12231388 msgstr ""
12241389
1225 #: ../../../src/MenuPowers.cpp:1114
1390 #: ../../../src/MenuPowers.cpp:1113
12261391 #, c-format
12271392 msgid "Requires a %s"
12281393 msgstr ""
12291394
1230 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1395 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12311396 #, c-format
12321397 msgid "Requires Power: %s"
12331398 msgstr ""
12341399
1235 #: ../../../src/MenuPowers.cpp:1163
1400 #: ../../../src/MenuPowers.cpp:1162
12361401 msgid "Click to Unlock (uses 1 Skill Point)"
12371402 msgstr ""
12381403
1239 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1404 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12401405 msgid "Requires 1 Skill Point"
12411406 msgstr ""
12421407
1243 #: ../../../src/MenuPowers.cpp:1355
1408 #: ../../../src/MenuPowers.cpp:1354
12441409 #, c-format
12451410 msgid "%d unspent skill point"
12461411 msgstr ""
12471412
1248 #: ../../../src/MenuPowers.cpp:1358
1413 #: ../../../src/MenuPowers.cpp:1357
12491414 #, c-format
12501415 msgid "%d unspent skill points"
12511416 msgstr ""
12521417
1253 #: ../../../src/MenuPowers.cpp:1388
1418 #: ../../../src/MenuPowers.cpp:1387
12541419 msgid "Next Level:"
12551420 msgstr ""
12561421
1257 #: ../../../src/MenuStash.cpp:96
1258 msgid "Shared Stash"
1259 msgstr ""
1260
1261 #: ../../../src/MenuStash.cpp:209
1422 #: ../../../src/MenuStash.cpp:53
1423 msgid "Private"
1424 msgstr ""
1425
1426 #: ../../../src/MenuStash.cpp:55
1427 msgid "Shared"
1428 msgstr ""
1429
1430 #: ../../../src/MenuStash.cpp:103
1431 msgid "Stash"
1432 msgstr ""
1433
1434 #: ../../../src/MenuStash.cpp:258
12621435 msgid "Can not store quest items in the stash."
12631436 msgstr ""
12641437
1265 #: ../../../src/MenuStash.cpp:219
1438 #: ../../../src/MenuStash.cpp:263
1439 msgid "This item can not be stored in the stash."
1440 msgstr ""
1441
1442 #: ../../../src/MenuStash.cpp:268
1443 msgid "This item can not be stored in the private stash."
1444 msgstr ""
1445
1446 #: ../../../src/MenuStash.cpp:273
1447 msgid "This item can not be stored in the shared stash."
1448 msgstr ""
1449
1450 #: ../../../src/MenuStash.cpp:283
12661451 msgid "Stash is full."
12671452 msgstr ""
12681453
1269 #: ../../../src/MenuTalker.cpp:454
1454 #: ../../../src/MenuStash.cpp:340
1455 #, c-format
1456 msgid "Can not store item in stash: %s"
1457 msgstr ""
1458
1459 #: ../../../src/MenuTalker.cpp:447
1460 #, c-format
1461 msgid "<dialog node %d>"
1462 msgstr ""
1463
1464 #: ../../../src/MenuTalker.cpp:455
12701465 msgid "Trade"
12711466 msgstr ""
12721467
12741469 msgid "Buyback"
12751470 msgstr ""
12761471
1277 #: ../../../src/MenuVendor.cpp:279
1472 #: ../../../src/MenuVendor.cpp:281
12781473 msgid "Vendor"
12791474 msgstr ""
12801475
1281 #: ../../../src/PowerManager.cpp:1136
1476 #: ../../../src/PowerManager.cpp:1170
12821477 #, c-format
12831478 msgid "+%d Shield"
12841479 msgstr ""
12851480
1286 #: ../../../src/PowerManager.cpp:1392
1481 #: ../../../src/PowerManager.cpp:1426
12871482 msgid "You are already transformed, untransform first."
12881483 msgstr ""
12891484
1290 #: ../../../src/PowerManager.cpp:1404
1485 #: ../../../src/PowerManager.cpp:1438
12911486 msgid "Could not untransform at this position."
12921487 msgstr ""
12931488
12951490 msgid "Completed Quests"
12961491 msgstr ""
12971492
1298 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1493 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
12991494 msgid "Game saved."
13001495 msgstr ""
13011496
1302 #: ../../../src/SDLInputState.cpp:582
1497 #: ../../../src/SDLInputState.cpp:643
1498 msgid "BkSp"
1499 msgstr ""
1500
1501 #: ../../../src/SDLInputState.cpp:644
1502 msgid "Caps"
1503 msgstr ""
1504
1505 #: ../../../src/SDLInputState.cpp:645
1506 msgid "Del"
1507 msgstr ""
1508
1509 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1510 msgid "End"
1511 msgstr ""
1512
1513 #: ../../../src/SDLInputState.cpp:648
1514 msgid "Esc"
1515 msgstr ""
1516
1517 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1518 msgid "Home"
1519 msgstr ""
1520
1521 #: ../../../src/SDLInputState.cpp:650
1522 msgid "Ins"
1523 msgstr ""
1524
1525 #: ../../../src/SDLInputState.cpp:651
1526 msgid "LAlt"
1527 msgstr ""
1528
1529 #: ../../../src/SDLInputState.cpp:652
1530 msgid "LCtrl"
1531 msgstr ""
1532
1533 #: ../../../src/SDLInputState.cpp:654
1534 msgid "LShft"
1535 msgstr ""
1536
1537 #: ../../../src/SDLInputState.cpp:655
1538 msgid "Num"
1539 msgstr ""
1540
1541 #: ../../../src/SDLInputState.cpp:656
1542 msgid "PgDn"
1543 msgstr ""
1544
1545 #: ../../../src/SDLInputState.cpp:657
1546 msgid "PgUp"
1547 msgstr ""
1548
1549 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1550 msgid "Pause"
1551 msgstr ""
1552
1553 #: ../../../src/SDLInputState.cpp:659
1554 msgid "Print"
1555 msgstr ""
1556
1557 #: ../../../src/SDLInputState.cpp:660
1558 msgid "RAlt"
1559 msgstr ""
1560
1561 #: ../../../src/SDLInputState.cpp:661
1562 msgid "RCtrl"
1563 msgstr ""
1564
1565 #: ../../../src/SDLInputState.cpp:662
1566 msgid "Ret"
1567 msgstr ""
1568
1569 #: ../../../src/SDLInputState.cpp:664
1570 msgid "RShft"
1571 msgstr ""
1572
1573 #: ../../../src/SDLInputState.cpp:665
1574 msgid "SLock"
1575 msgstr ""
1576
1577 #: ../../../src/SDLInputState.cpp:666
1578 msgid "Spc"
1579 msgstr ""
1580
1581 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1582 msgid "Tab"
1583 msgstr ""
1584
1585 #: ../../../src/SDLInputState.cpp:673
13031586 msgid "Backspace"
13041587 msgstr ""
13051588
1306 #: ../../../src/SDLInputState.cpp:583
1589 #: ../../../src/SDLInputState.cpp:674
13071590 msgid "CapsLock"
13081591 msgstr ""
13091592
1310 #: ../../../src/SDLInputState.cpp:586
1311 msgid "End"
1312 msgstr ""
1313
1314 #: ../../../src/SDLInputState.cpp:587
1593 #: ../../../src/SDLInputState.cpp:678
13151594 msgid "Escape"
13161595 msgstr ""
13171596
1318 #: ../../../src/SDLInputState.cpp:588
1319 msgid "Home"
1320 msgstr ""
1321
1322 #: ../../../src/SDLInputState.cpp:589
1597 #: ../../../src/SDLInputState.cpp:680
13231598 msgid "Insert"
13241599 msgstr ""
13251600
1326 #: ../../../src/SDLInputState.cpp:590
1601 #: ../../../src/SDLInputState.cpp:681
13271602 msgid "Left Alt"
13281603 msgstr ""
13291604
1330 #: ../../../src/SDLInputState.cpp:591
1605 #: ../../../src/SDLInputState.cpp:682
13311606 msgid "Left Ctrl"
13321607 msgstr ""
13331608
1334 #: ../../../src/SDLInputState.cpp:593
1609 #: ../../../src/SDLInputState.cpp:684
13351610 msgid "Left Shift"
13361611 msgstr ""
13371612
1338 #: ../../../src/SDLInputState.cpp:594
1613 #: ../../../src/SDLInputState.cpp:685
13391614 msgid "NumLock"
13401615 msgstr ""
13411616
1342 #: ../../../src/SDLInputState.cpp:595
1617 #: ../../../src/SDLInputState.cpp:686
13431618 msgid "PageDown"
13441619 msgstr ""
13451620
1346 #: ../../../src/SDLInputState.cpp:596
1621 #: ../../../src/SDLInputState.cpp:687
13471622 msgid "PageUp"
13481623 msgstr ""
13491624
1350 #: ../../../src/SDLInputState.cpp:597
1351 msgid "Pause"
1352 msgstr ""
1353
1354 #: ../../../src/SDLInputState.cpp:598
1625 #: ../../../src/SDLInputState.cpp:689
13551626 msgid "PrintScreen"
13561627 msgstr ""
13571628
1358 #: ../../../src/SDLInputState.cpp:599
1629 #: ../../../src/SDLInputState.cpp:690
13591630 msgid "Right Alt"
13601631 msgstr ""
13611632
1362 #: ../../../src/SDLInputState.cpp:600
1633 #: ../../../src/SDLInputState.cpp:691
13631634 msgid "Right Ctrl"
13641635 msgstr ""
13651636
1366 #: ../../../src/SDLInputState.cpp:601
1637 #: ../../../src/SDLInputState.cpp:692
13671638 msgid "Return"
13681639 msgstr ""
13691640
1370 #: ../../../src/SDLInputState.cpp:603
1641 #: ../../../src/SDLInputState.cpp:694
13711642 msgid "Right Shift"
13721643 msgstr ""
13731644
1374 #: ../../../src/SDLInputState.cpp:604
1645 #: ../../../src/SDLInputState.cpp:695
13751646 msgid "ScrollLock"
13761647 msgstr ""
13771648
1378 #: ../../../src/SDLInputState.cpp:605
1649 #: ../../../src/SDLInputState.cpp:696
13791650 msgid "Space"
13801651 msgstr ""
13811652
1382 #: ../../../src/SDLInputState.cpp:606
1383 msgid "Tab"
1384 msgstr ""
1385
1386 #: ../../../src/SDLInputState.cpp:620
1653 #: ../../../src/SDLInputState.cpp:710
1654 #, c-format
1655 msgid "M%d"
1656 msgstr ""
1657
1658 #: ../../../src/SDLInputState.cpp:716
13871659 #, c-format
13881660 msgid "Mouse %d"
13891661 msgstr ""
13901662
1391 #: ../../../src/SDLInputState.cpp:628
1663 #: ../../../src/SDLInputState.cpp:726
1664 #, c-format
1665 msgid "JX%d-"
1666 msgstr ""
1667
1668 #: ../../../src/SDLInputState.cpp:728
13921669 #, c-format
13931670 msgid "Axis %d -"
13941671 msgstr ""
13951672
1396 #: ../../../src/SDLInputState.cpp:630
1673 #: ../../../src/SDLInputState.cpp:732
1674 #, c-format
1675 msgid "JX%d+"
1676 msgstr ""
1677
1678 #: ../../../src/SDLInputState.cpp:734
13971679 #, c-format
13981680 msgid "Axis %d +"
13991681 msgstr ""
14001682
1401 #: ../../../src/SDLInputState.cpp:633
1683 #: ../../../src/SDLInputState.cpp:739
1684 #, c-format
1685 msgid "JB%d"
1686 msgstr ""
1687
1688 #: ../../../src/SDLInputState.cpp:741
14021689 #, c-format
14031690 msgid "Button %d"
14041691 msgstr ""
14051692
1406 #: ../../../src/SDLInputState.cpp:637
1407 msgid "(none)"
1408 msgstr ""
1409
1410 #: ../../../src/SDLInputState.cpp:677
1693 #: ../../../src/SDLInputState.cpp:788
14111694 msgid "Touch control D-Pad"
14121695 msgstr ""
14131696
1414 #: ../../../src/SDLInputState.cpp:701
1697 #: ../../../src/SDLInputState.cpp:812
14151698 msgid "Touch control buttons"
14161699 msgstr ""
14171700
1418 #: ../../../src/SDLInputState.cpp:716
1701 #: ../../../src/SDLInputState.cpp:827
14191702 msgid "Tap"
14201703 msgstr ""
14211704
1422 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1423 #: ../../../src/SDLInputState.cpp:768
1705 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1706 #, c-format
1707 msgid "Can not bind: %s"
1708 msgstr ""
1709
1710 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1711 #: ../../../src/SDLInputState.cpp:901
14241712 #, c-format
14251713 msgid "'%s' is no longer bound to:"
14261714 msgstr ""
15831871 msgid "k"
15841872 msgstr ""
15851873
1586 #: ../../../src/Utils.cpp:580
1874 #: ../../../src/Utils.cpp:616
15871875 #, c-format
15881876 msgid "%s second"
15891877 msgstr ""
15901878
1591 #: ../../../src/Utils.cpp:583
1879 #: ../../../src/Utils.cpp:619
15921880 #, c-format
15931881 msgid "%s seconds"
15941882 msgstr ""
0 # SOME DESCRIPTIVE TITLE.
1 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
2 # This file is distributed under the same license as the PACKAGE package.
3 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4 #
5 # Translators:
6 # Justin Jacobs <jajdorkster@gmail.com>, 2019
7 #
8 #, fuzzy
9 msgid ""
10 msgstr ""
11 "Project-Id-Version: PACKAGE VERSION\n"
12 "Report-Msgid-Bugs-To: \n"
13 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
14 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
15 "Last-Translator: Justin Jacobs <jajdorkster@gmail.com>, 2019\n"
16 "Language-Team: Hungarian (https://www.transifex.com/flareorg/teams/84925/hu/)\n"
17 "MIME-Version: 1.0\n"
18 "Content-Type: text/plain; charset=UTF-8\n"
19 "Content-Transfer-Encoding: 8bit\n"
20 "Language: hu\n"
21 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
22
23 #: ../../../src/Avatar.cpp:387
24 msgid "Your health is low!"
25 msgstr ""
26
27 #: ../../../src/Avatar.cpp:419
28 #, c-format
29 msgid "Congratulations, you have reached level %d!"
30 msgstr "Gratulálunk, %d szintre léptél!"
31
32 #: ../../../src/Avatar.cpp:421
33 msgid "You may increase one or more attributes through the Character Menu."
34 msgstr ""
35
36 #: ../../../src/Avatar.cpp:425
37 msgid "You may unlock one or more abilities through the Powers Menu."
38 msgstr ""
39
40 #: ../../../src/Avatar.cpp:692
41 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
42 msgstr "Legyőztek. Vége a játéknak! ${INPUT_CONTINUE} a kilépéshez."
43
44 #: ../../../src/Avatar.cpp:698
45 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
46 msgstr "Legyőztek. ${INPUT_CONTINUE} a folytatáshoz."
47
48 #: ../../../src/Avatar.cpp:949
49 msgid "Transformation expired. You have been moved back to a safe place."
50 msgstr "A transzformáció elmúlt. Visszakerültél egy biztonságos helyre."
51
52 #: ../../../src/CampaignManager.cpp:153
53 #, c-format
54 msgid "%d %s removed."
55 msgstr "%d %s eltávolítva."
56
57 #: ../../../src/CampaignManager.cpp:165
58 #, c-format
59 msgid "%s x%d removed."
60 msgstr ""
61
62 #: ../../../src/CampaignManager.cpp:167
63 #, c-format
64 msgid "%s removed."
65 msgstr "%s eltávolítva."
66
67 #: ../../../src/CampaignManager.cpp:180
68 #, c-format
69 msgid "You receive %s."
70 msgstr "Kaptál: %s"
71
72 #: ../../../src/CampaignManager.cpp:182
73 #, c-format
74 msgid "You receive %s x%d."
75 msgstr "Kaptál: %s x%d"
76
77 #: ../../../src/CampaignManager.cpp:191
78 #, c-format
79 msgid "You receive %d %s."
80 msgstr "Kaptál: %d %s."
81
82 #: ../../../src/CampaignManager.cpp:200
83 #, c-format
84 msgid "You receive %d XP."
85 msgstr "Kaptál %d TP-t."
86
87 #: ../../../src/CampaignManager.cpp:206
88 msgid "HP restored."
89 msgstr "ÉP visszaállítva."
90
91 #: ../../../src/CampaignManager.cpp:210
92 msgid "MP restored."
93 msgstr "MP visszaállítva."
94
95 #: ../../../src/CampaignManager.cpp:215
96 msgid "HP and MP restored."
97 msgstr "ÉP és MP visszaállítva."
98
99 #: ../../../src/CampaignManager.cpp:219
100 msgid "Negative effects removed."
101 msgstr "Negatív hatások elmúltak."
102
103 #: ../../../src/CampaignManager.cpp:225
104 msgid "HP and MP restored, negative effects removed"
105 msgstr "ÉP és MP visszaállítva, negatív hatások elmúltak"
106
107 #: ../../../src/DeviceList.cpp:56
108 msgid ""
109 "SDL software renderer\n"
110 "\n"
111 "Often slower, but less likely to have issues."
112 msgstr ""
113 "SDL szoftver megjelenítő\n"
114 "Általában lassabb, de tutira működik."
115
116 #: ../../../src/DeviceList.cpp:59
117 msgid ""
118 "SDL hardware renderer\n"
119 "\n"
120 "The default renderer that is often faster than the SDL software renderer."
121 msgstr ""
122 "SDL hardver megjelenítő\n"
123 "Alapértelmezett, általában gyorsabb, mint a szoftveres."
124
125 #: ../../../src/EngineSettings.cpp:572
126 msgid "Adventurer"
127 msgstr "Kalandozó"
128
129 #: ../../../src/Entity.cpp:522
130 msgid "miss"
131 msgstr "elvétve"
132
133 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
134 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
135 #, c-format
136 msgid "+%d HP"
137 msgstr "+%d ÉP"
138
139 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
140 #: ../../../src/StatBlock.cpp:830
141 #, c-format
142 msgid "+%d MP"
143 msgstr ""
144
145 #: ../../../src/EventManager.cpp:782
146 msgid "Unknown destination"
147 msgstr "Ismeretlen célállomás"
148
149 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
150 msgid "Loading..."
151 msgstr "Betöltés..."
152
153 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
154 msgid "Delete Save"
155 msgstr "Állás törlése"
156
157 #: ../../../src/GameStateLoad.cpp:90
158 msgid "Delete this save?"
159 msgstr "Letöröljem ezt a mentést?"
160
161 #: ../../../src/GameStateLoad.cpp:92
162 msgid "Exit to Title"
163 msgstr "Vissza"
164
165 #: ../../../src/GameStateLoad.cpp:95
166 msgid "New Game"
167 msgstr "Új Játék"
168
169 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
170 msgid "Choose a Slot"
171 msgstr "Válassz rekeszt"
172
173 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
174 msgid "Enable a story mod to continue"
175 msgstr "Engedélyezz egy sztori mod-ot a folytatáshoz"
176
177 #: ../../../src/GameStateLoad.cpp:597
178 msgid "Load Game"
179 msgstr "Betöltés"
180
181 #: ../../../src/GameStateLoad.cpp:706
182 msgid "Entering game world..."
183 msgstr "Belépés a játék világába..."
184
185 #: ../../../src/GameStateLoad.cpp:709
186 msgid "Loading saved game..."
187 msgstr "Elmentett játék betöltése..."
188
189 #: ../../../src/GameStateLoad.cpp:742
190 msgid "Invalid save"
191 msgstr "Hibás mentés"
192
193 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
194 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
195 #: ../../../src/MenuPowers.cpp:1543
196 #, c-format
197 msgid "Level %d"
198 msgstr "%d. szint"
199
200 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
201 #: ../../../src/MenuConfig.cpp:244
202 msgid "Cancel"
203 msgstr "Mégsem"
204
205 #: ../../../src/GameStateNew.cpp:68
206 msgid "Create"
207 msgstr "Létrehoz"
208
209 #: ../../../src/GameStateNew.cpp:76
210 msgid "Randomize"
211 msgstr ""
212
213 #: ../../../src/GameStateNew.cpp:92
214 msgid "Choose a Portrait"
215 msgstr "Válassz arcot"
216
217 #: ../../../src/GameStateNew.cpp:96
218 msgid "Choose a Name"
219 msgstr "Válassz nevet"
220
221 #: ../../../src/GameStateNew.cpp:100
222 msgid "Permadeath?"
223 msgstr "Végleges halál?"
224
225 #: ../../../src/GameStateNew.cpp:104
226 msgid "Choose a Class"
227 msgstr "Válassz hivatást"
228
229 #: ../../../src/GameStateTitle.cpp:107
230 msgid "Play Game"
231 msgstr "Játék indítása"
232
233 #: ../../../src/GameStateTitle.cpp:110
234 msgid "Enable a core mod to continue"
235 msgstr "Engedélyezd a mag mod-ot a folytatáshoz"
236
237 #: ../../../src/GameStateTitle.cpp:114
238 msgid "Configuration"
239 msgstr "Konfiguráció"
240
241 #: ../../../src/GameStateTitle.cpp:117
242 msgid "Credits"
243 msgstr "Készítők"
244
245 #: ../../../src/GameStateTitle.cpp:120
246 msgid "Exit Game"
247 msgstr "Kilépés"
248
249 #: ../../../src/InputState.cpp:407
250 msgid "Accept"
251 msgstr "Elfogad"
252
253 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
254 #: ../../../src/SDLInputState.cpp:698
255 msgid "Up"
256 msgstr "Fel"
257
258 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
259 #: ../../../src/SDLInputState.cpp:676
260 msgid "Down"
261 msgstr "Le"
262
263 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
264 #: ../../../src/SDLInputState.cpp:683
265 msgid "Left"
266 msgstr "Balra"
267
268 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
269 #: ../../../src/SDLInputState.cpp:693
270 msgid "Right"
271 msgstr "Jobbra"
272
273 #: ../../../src/InputState.cpp:412
274 msgid "Bar1"
275 msgstr ""
276
277 #: ../../../src/InputState.cpp:413
278 msgid "Bar2"
279 msgstr ""
280
281 #: ../../../src/InputState.cpp:414
282 msgid "Bar3"
283 msgstr ""
284
285 #: ../../../src/InputState.cpp:415
286 msgid "Bar4"
287 msgstr ""
288
289 #: ../../../src/InputState.cpp:416
290 msgid "Bar5"
291 msgstr ""
292
293 #: ../../../src/InputState.cpp:417
294 msgid "Bar6"
295 msgstr ""
296
297 #: ../../../src/InputState.cpp:418
298 msgid "Bar7"
299 msgstr ""
300
301 #: ../../../src/InputState.cpp:419
302 msgid "Bar8"
303 msgstr ""
304
305 #: ../../../src/InputState.cpp:420
306 msgid "Bar9"
307 msgstr ""
308
309 #: ../../../src/InputState.cpp:421
310 msgid "Bar0"
311 msgstr ""
312
313 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
314 #: ../../../src/MenuCharacter.cpp:54
315 msgid "Character"
316 msgstr "Karakter"
317
318 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
319 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
320 msgid "Inventory"
321 msgstr "Felszerelés"
322
323 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
324 #: ../../../src/MenuPowers.cpp:167
325 msgid "Powers"
326 msgstr "Erők"
327
328 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
329 #: ../../../src/MenuLog.cpp:72
330 msgid "Log"
331 msgstr "Jegyzetek"
332
333 #: ../../../src/InputState.cpp:426
334 msgid "Main1"
335 msgstr "Támad1"
336
337 #: ../../../src/InputState.cpp:427
338 msgid "Main2"
339 msgstr "Támad2"
340
341 #: ../../../src/InputState.cpp:428
342 msgid "Ctrl"
343 msgstr ""
344
345 #: ../../../src/InputState.cpp:429
346 msgid "Shift"
347 msgstr ""
348
349 #: ../../../src/InputState.cpp:430
350 msgid "Alt"
351 msgstr ""
352
353 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
354 msgid "Delete"
355 msgstr "Törlés"
356
357 #: ../../../src/InputState.cpp:432
358 msgid "ActionBar Accept"
359 msgstr "AkcióSáv Elfogad"
360
361 #: ../../../src/InputState.cpp:433
362 msgid "ActionBar Left"
363 msgstr "Akciósáv Bal"
364
365 #: ../../../src/InputState.cpp:434
366 msgid "ActionBar Right"
367 msgstr "AkcióSáv Jobb"
368
369 #: ../../../src/InputState.cpp:435
370 msgid "ActionBar Use"
371 msgstr "AkcióSáv Használ"
372
373 #: ../../../src/InputState.cpp:436
374 msgid "Developer Menu"
375 msgstr "Fejlesztői Menü"
376
377 #: ../../../src/InputState.cpp:438
378 msgid "Left Mouse"
379 msgstr "Bal egér"
380
381 #: ../../../src/InputState.cpp:439
382 msgid "Middle Mouse"
383 msgstr "Középső egér"
384
385 #: ../../../src/InputState.cpp:440
386 msgid "Right Mouse"
387 msgstr "Jobb egér"
388
389 #: ../../../src/InputState.cpp:441
390 msgid "Wheel Up"
391 msgstr "Görgetés fel"
392
393 #: ../../../src/InputState.cpp:442
394 msgid "Wheel Down"
395 msgstr "Görgetés le"
396
397 #: ../../../src/InputState.cpp:443
398 msgid "Mouse X1"
399 msgstr "Egér X1"
400
401 #: ../../../src/InputState.cpp:444
402 msgid "Mouse X2"
403 msgstr "Egér X2"
404
405 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
406 msgid "Unknown Item"
407 msgstr "Ismeretlen tárgy"
408
409 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
410 #, c-format
411 msgid "%d%% Speed"
412 msgstr "%d%% sebesség"
413
414 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
415 #, c-format
416 msgid "%d%% Attack Speed"
417 msgstr "%d%% támadás sebesség"
418
419 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
420 #: ../../../src/MenuPowers.cpp:832
421 #, c-format
422 msgid "Resistance (%s)"
423 msgstr ""
424
425 #: ../../../src/ItemManager.cpp:714
426 #, c-format
427 msgid "Requires %s"
428 msgstr ""
429
430 #: ../../../src/ItemManager.cpp:763
431 msgid "Quest Item"
432 msgstr "Küldetéstárgy"
433
434 #: ../../../src/ItemManager.cpp:790
435 #, c-format
436 msgid "Quality: %s"
437 msgstr "Gyakoriság: %s"
438
439 #: ../../../src/ItemManager.cpp:815
440 #, c-format
441 msgid "Absorb: %d-%d"
442 msgstr "Felfog: %d-%d"
443
444 #: ../../../src/ItemManager.cpp:817
445 #, c-format
446 msgid "Absorb: %d"
447 msgstr "Felfog: %d"
448
449 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
450 #: ../../../src/MenuPowers.cpp:1133
451 #, c-format
452 msgid "Requires Level %d"
453 msgstr "%d szint kell hozzá"
454
455 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
456 #: ../../../src/MenuPowers.cpp:1124
457 #, c-format
458 msgid "Requires %s %d"
459 msgstr "%s %d kell hozzá"
460
461 #: ../../../src/ItemManager.cpp:879
462 #, c-format
463 msgid "Requires Class: %s"
464 msgstr "%s hivatás kell hozzá"
465
466 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
467 #, c-format
468 msgid "Buy Price: %d %s"
469 msgstr "Vételár: %d %s"
470
471 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
472 #, c-format
473 msgid "Buy Price: %d %s each"
474 msgstr "Vételár: %d %s per db"
475
476 #: ../../../src/ItemManager.cpp:916
477 #, c-format
478 msgid "Sell Price: %d %s"
479 msgstr "Eladási ár: %d %s"
480
481 #: ../../../src/ItemManager.cpp:918
482 #, c-format
483 msgid "Sell Price: %d %s each"
484 msgstr "Eladási ár: %d %s per db"
485
486 #: ../../../src/ItemManager.cpp:927
487 msgid "Set:"
488 msgstr "Gyűjtemény:"
489
490 #: ../../../src/ItemManager.cpp:934
491 #, c-format
492 msgid "%d items:"
493 msgstr "%d tárgy:"
494
495 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
496 #, c-format
497 msgid "Press [%s] to use"
498 msgstr "Üsd le a [%s]-t a használathoz"
499
500 #: ../../../src/ItemManager.cpp:951
501 #, c-format
502 msgid "Press [%s] to read"
503 msgstr "Üsd le a [%s]-t az elolvasáshoz"
504
505 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
506 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
507 #, c-format
508 msgid "Hotkey: %s"
509 msgstr "Gyorsgomb: %s"
510
511 #: ../../../src/MenuActionBar.cpp:599
512 msgid "Not enough MP."
513 msgstr ""
514
515 #: ../../../src/MenuActiveEffects.cpp:124
516 #, c-format
517 msgid "x%d"
518 msgstr ""
519
520 #: ../../../src/MenuActiveEffects.cpp:219
521 msgid "Remaining:"
522 msgstr "Visszavan:"
523
524 #: ../../../src/MenuActiveEffects.cpp:225
525 #, c-format
526 msgid "x%d stacks"
527 msgstr "x%d dugihely"
528
529 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
530 msgid "Name"
531 msgstr "Név"
532
533 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
534 msgid "Level"
535 msgstr "Szint"
536
537 #: ../../../src/MenuCharacter.cpp:310
538 #, c-format
539 msgid "%d unspent stat point"
540 msgstr ""
541
542 #: ../../../src/MenuCharacter.cpp:313
543 #, c-format
544 msgid "%d unspent stat points"
545 msgstr ""
546
547 #: ../../../src/MenuCharacter.cpp:355
548 #, c-format
549 msgid "Reduces the damage taken from \"%s\" elemental attacks."
550 msgstr ""
551
552 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
553 #, c-format
554 msgid "XP: %d"
555 msgstr "TP: %d"
556
557 #: ../../../src/MenuCharacter.cpp:367
558 #, c-format
559 msgid "Next: %d"
560 msgstr "Következő: %d"
561
562 #: ../../../src/MenuCharacter.cpp:373
563 #, c-format
564 msgid "base (%d), bonus (%d)"
565 msgstr "alap (%d), bónusz (%d)"
566
567 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
568 msgid "Related stats:"
569 msgstr "Kapcsolódó statisztika:"
570
571 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
572 #, c-format
573 msgid "Each level grants %d."
574 msgstr "Minden szint %d-t ad."
575
576 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
577 #, c-format
578 msgid "Each point of %s grants %d."
579 msgstr "Minden %s pont ad %d-t."
580
581 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
582 msgid "Clear"
583 msgstr "Törlés"
584
585 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
586 msgid "Assign:"
587 msgstr "Hozzáad:"
588
589 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
590 msgid "Defaults"
591 msgstr "Alapértelmezés"
592
593 #: ../../../src/MenuConfig.cpp:123
594 msgid "Reset ALL settings?"
595 msgstr "Minden beállítást visszaállítsak?"
596
597 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
598 msgid "OK"
599 msgstr ""
600
601 #: ../../../src/MenuConfig.cpp:246
602 msgid "Continue"
603 msgstr "Folytatás"
604
605 #: ../../../src/MenuConfig.cpp:248
606 msgid "Save Game"
607 msgstr ""
608
609 #: ../../../src/MenuConfig.cpp:291
610 msgid "Default"
611 msgstr ""
612
613 #: ../../../src/MenuConfig.cpp:291
614 msgid ""
615 "Show all loot tooltips, except for those that would be obscured by the "
616 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
617 msgstr ""
618
619 #: ../../../src/MenuConfig.cpp:292
620 msgid "Show all"
621 msgstr ""
622
623 #: ../../../src/MenuConfig.cpp:292
624 msgid ""
625 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
626 msgstr ""
627
628 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
629 msgid "Hidden"
630 msgstr ""
631
632 #: ../../../src/MenuConfig.cpp:293
633 msgid ""
634 "Always hide loot tooltips, except for when a piece of loot is hovered with "
635 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
636 msgstr ""
637
638 #: ../../../src/MenuConfig.cpp:296
639 msgid "Visible"
640 msgstr ""
641
642 #: ../../../src/MenuConfig.cpp:297
643 msgid "Visible (2x zoom)"
644 msgstr ""
645
646 #: ../../../src/MenuConfig.cpp:301
647 msgid ""
648 "Controls the type of warning to be activated when the player is below the "
649 "low health threshold."
650 msgstr ""
651
652 #: ../../../src/MenuConfig.cpp:302
653 msgid "- Display a message"
654 msgstr ""
655
656 #: ../../../src/MenuConfig.cpp:303
657 msgid "- Play a sound"
658 msgstr ""
659
660 #: ../../../src/MenuConfig.cpp:304
661 msgid "- Change the cursor"
662 msgstr ""
663
664 #: ../../../src/MenuConfig.cpp:306
665 msgid "Disabled"
666 msgstr ""
667
668 #: ../../../src/MenuConfig.cpp:307
669 msgid "All"
670 msgstr ""
671
672 #: ../../../src/MenuConfig.cpp:308
673 msgid "Message & Cursor"
674 msgstr ""
675
676 #: ../../../src/MenuConfig.cpp:309
677 msgid "Message & Sound"
678 msgstr ""
679
680 #: ../../../src/MenuConfig.cpp:310
681 msgid "Sound & Cursor"
682 msgstr ""
683
684 #: ../../../src/MenuConfig.cpp:311
685 msgid "Message"
686 msgstr ""
687
688 #: ../../../src/MenuConfig.cpp:312
689 msgid "Cursor"
690 msgstr ""
691
692 #: ../../../src/MenuConfig.cpp:313
693 msgid "Sound"
694 msgstr ""
695
696 #: ../../../src/MenuConfig.cpp:319
697 msgid ""
698 "When the player's health drops below the given threshold, the low health "
699 "notifications are triggered if one or more of them is enabled."
700 msgstr ""
701
702 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
703 msgid "Exit"
704 msgstr "Kilépés"
705
706 #: ../../../src/MenuConfig.cpp:333
707 msgid "Video"
708 msgstr "Videó"
709
710 #: ../../../src/MenuConfig.cpp:334
711 msgid "Audio"
712 msgstr "Hang"
713
714 #: ../../../src/MenuConfig.cpp:335
715 msgid "Interface"
716 msgstr "Felület"
717
718 #: ../../../src/MenuConfig.cpp:336
719 msgid "Input"
720 msgstr "Bemenet"
721
722 #: ../../../src/MenuConfig.cpp:337
723 msgid "Keybindings"
724 msgstr "Billentyűk"
725
726 #: ../../../src/MenuConfig.cpp:338
727 msgid "Mods"
728 msgstr "Modok"
729
730 #: ../../../src/MenuConfig.cpp:350
731 msgid "Paused"
732 msgstr "Megállítva"
733
734 #: ../../../src/MenuConfig.cpp:353
735 msgid "Time Played"
736 msgstr ""
737
738 #: ../../../src/MenuConfig.cpp:359
739 msgid "Renderer"
740 msgstr "Megjelenítő"
741
742 #: ../../../src/MenuConfig.cpp:360
743 msgid "Full Screen Mode"
744 msgstr "Teljes képernyő"
745
746 #: ../../../src/MenuConfig.cpp:361
747 msgid "Hardware surfaces"
748 msgstr "Hardveres felületek"
749
750 #: ../../../src/MenuConfig.cpp:362
751 msgid "V-Sync"
752 msgstr ""
753
754 #: ../../../src/MenuConfig.cpp:363
755 msgid "Texture Filtering"
756 msgstr "Textúra szűrő"
757
758 #: ../../../src/MenuConfig.cpp:364
759 msgid "DPI scaling"
760 msgstr "DPI skálázás"
761
762 #: ../../../src/MenuConfig.cpp:365
763 msgid "Parallax Layers"
764 msgstr ""
765
766 #: ../../../src/MenuConfig.cpp:366
767 msgid "Allow changing gamma"
768 msgstr "Gamma korrekció engedélyezés"
769
770 #: ../../../src/MenuConfig.cpp:367
771 msgid "Gamma"
772 msgstr ""
773
774 #: ../../../src/MenuConfig.cpp:369
775 msgid "Sound Volume"
776 msgstr "Effektek hangereje"
777
778 #: ../../../src/MenuConfig.cpp:370
779 msgid "Music Volume"
780 msgstr "Zene hangereje"
781
782 #: ../../../src/MenuConfig.cpp:372
783 msgid "Language"
784 msgstr "Nyelv"
785
786 #: ../../../src/MenuConfig.cpp:373
787 msgid "Show FPS"
788 msgstr "FPS mutatása"
789
790 #: ../../../src/MenuConfig.cpp:374
791 msgid "Hardware mouse cursor"
792 msgstr "Hardveres egérmutató"
793
794 #: ../../../src/MenuConfig.cpp:375
795 msgid "Colorblind Mode"
796 msgstr "Színvak mód"
797
798 #: ../../../src/MenuConfig.cpp:376
799 msgid "Developer Mode"
800 msgstr "Fejlesztői mód"
801
802 #: ../../../src/MenuConfig.cpp:377
803 msgid "Subtitles"
804 msgstr "Feliratok"
805
806 #: ../../../src/MenuConfig.cpp:378
807 msgid "Loot tooltip visibility"
808 msgstr ""
809
810 #: ../../../src/MenuConfig.cpp:379
811 msgid "Mini-map mode"
812 msgstr ""
813
814 #: ../../../src/MenuConfig.cpp:380
815 msgid "Always show stat bar labels"
816 msgstr "Mindig mutassa a státusz cimkéit"
817
818 #: ../../../src/MenuConfig.cpp:381
819 msgid "Allow stat bar auto-hiding"
820 msgstr ""
821
822 #: ../../../src/MenuConfig.cpp:382
823 msgid "Show combat text"
824 msgstr "Küzdelem kiírása szövegesen"
825
826 #: ../../../src/MenuConfig.cpp:383
827 msgid "Automatically equip items"
828 msgstr "Automatikusan használja a tárgyakat"
829
830 #: ../../../src/MenuConfig.cpp:384
831 msgid "Show hidden entity markers"
832 msgstr ""
833
834 #: ../../../src/MenuConfig.cpp:385
835 msgid "Low health notification"
836 msgstr ""
837
838 #: ../../../src/MenuConfig.cpp:386
839 msgid "Low health threshold"
840 msgstr ""
841
842 #: ../../../src/MenuConfig.cpp:389
843 msgid "Joystick"
844 msgstr "Botkormány"
845
846 #: ../../../src/MenuConfig.cpp:390
847 msgid "Move hero using mouse"
848 msgstr "Hős mozgatása egérrel"
849
850 #: ../../../src/MenuConfig.cpp:391
851 msgid "Mouse aim"
852 msgstr "Egérrel célzás"
853
854 #: ../../../src/MenuConfig.cpp:392
855 msgid "Do not use mouse"
856 msgstr "Ne használja az egeret"
857
858 #: ../../../src/MenuConfig.cpp:393
859 msgid "Swap mouse movement button"
860 msgstr ""
861
862 #: ../../../src/MenuConfig.cpp:394
863 msgid "Attack with mouse movement"
864 msgstr ""
865
866 #: ../../../src/MenuConfig.cpp:395
867 msgid "Joystick Deadzone"
868 msgstr "Botkormány holttér"
869
870 #: ../../../src/MenuConfig.cpp:405
871 #, c-format
872 msgid "Primary binding: %s"
873 msgstr ""
874
875 #: ../../../src/MenuConfig.cpp:406
876 #, c-format
877 msgid "Alternate binding: %s"
878 msgstr ""
879
880 #: ../../../src/MenuConfig.cpp:407
881 #, c-format
882 msgid "Joystick binding: %s"
883 msgstr ""
884
885 #: ../../../src/MenuConfig.cpp:508
886 msgid ""
887 "Will try to store surfaces in video memory versus system memory. The effect "
888 "this has on performance depends on the renderer."
889 msgstr ""
890 "A felületeket a videó memóriában próbálja tárolni a rendszermemória "
891 "helyett.A sebességnövekedés a megjelenítőtől is függ."
892
893 #: ../../../src/MenuConfig.cpp:509
894 msgid ""
895 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
896 "windowed mode or input lag."
897 msgstr ""
898 "Megakadályozza a villogást. Kapcsold ki, ha szaggat ablakosmódban vagy "
899 "lassan reagál a bemenetre."
900
901 #: ../../../src/MenuConfig.cpp:510
902 msgid ""
903 "When enabled, this uses the screen DPI in addition to the window dimensions "
904 "to scale the rendering resolution. Otherwise, only the window dimensions are"
905 " used."
906 msgstr ""
907 "Ha be van kapcsolva, a képernyő DPI-t is használja a felbontás mellé, hogy a"
908 " végleges megjelenítést kiszámolja. Máskülönben csak az ablak mérete számít."
909
910 #: ../../../src/MenuConfig.cpp:511
911 msgid ""
912 "This enables parallax (non-tile) layers. Disabling this setting can improve "
913 "performance in some cases."
914 msgstr ""
915
916 #: ../../../src/MenuConfig.cpp:512
917 msgid ""
918 "Enables the below setting that controls the screen gamma level. The behavior"
919 " of the gamma setting can vary between platforms."
920 msgstr ""
921
922 #: ../../../src/MenuConfig.cpp:513
923 msgid ""
924 "Provides additional text for information that is primarily conveyed through "
925 "color."
926 msgstr ""
927
928 #: ../../../src/MenuConfig.cpp:514
929 msgid ""
930 "Some mods will automatically hide the stat bars when they are inactive. "
931 "Disabling this option will keep them displayed at all times."
932 msgstr ""
933
934 #: ../../../src/MenuConfig.cpp:515
935 msgid ""
936 "When enabled, empty equipment slots will be filled with applicable items "
937 "when they are obtained."
938 msgstr ""
939
940 #: ../../../src/MenuConfig.cpp:516
941 msgid ""
942 "Shows a marker above enemies, allies, and the player when they are obscured "
943 "by tall objects."
944 msgstr ""
945
946 #: ../../../src/MenuConfig.cpp:517
947 msgid ""
948 "This allows the game to be controlled entirely with the keyboard (or "
949 "joystick)."
950 msgstr ""
951
952 #: ../../../src/MenuConfig.cpp:518
953 msgid ""
954 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
955 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
956 "instead of 'Main1'."
957 msgstr ""
958
959 #: ../../../src/MenuConfig.cpp:519
960 msgid ""
961 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
962 "assigned to the movement button can be used by targeting an enemy. If this "
963 "setting is disabled, it is required to use 'Shift' to access the Power "
964 "assigned to the movement button."
965 msgstr ""
966
967 #: ../../../src/MenuConfig.cpp:520
968 msgid ""
969 "The player's attacks will be aimed in the direction of the mouse cursor when"
970 " this is enabled."
971 msgstr ""
972
973 #: ../../../src/MenuConfig.cpp:571
974 msgid "Active Mods"
975 msgstr "Aktív modok"
976
977 #: ../../../src/MenuConfig.cpp:580
978 msgid "Available Mods"
979 msgstr "Rendelkezésreálló modok"
980
981 #: ../../../src/MenuConfig.cpp:599
982 msgid "<< Disable"
983 msgstr "<< Kikapcsol"
984
985 #: ../../../src/MenuConfig.cpp:605
986 msgid "Enable >>"
987 msgstr "Bekapcsol >>"
988
989 #: ../../../src/MenuConfig.cpp:1436
990 msgid "Version:"
991 msgstr "Verzió:"
992
993 #: ../../../src/MenuConfig.cpp:1441
994 msgid "Game:"
995 msgstr "Játék:"
996
997 #: ../../../src/MenuConfig.cpp:1446
998 msgid "Engine version:"
999 msgstr "Motor verzió:"
1000
1001 #: ../../../src/MenuConfig.cpp:1454
1002 msgid "Requires mods:"
1003 msgstr "Szükséges modok:"
1004
1005 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
1006 msgid "(none)"
1007 msgstr "(nincs)"
1008
1009 #: ../../../src/MenuConfig.cpp:1579
1010 msgid "Save & Exit"
1011 msgstr "Mentés, kilépés"
1012
1013 #: ../../../src/MenuDevConsole.cpp:63
1014 msgid "Execute"
1015 msgstr "Végrehajt"
1016
1017 #: ../../../src/MenuDevConsole.cpp:101 ../../../src/MenuDevConsole.cpp:151
1018 msgid "Developer Console"
1019 msgstr "Fejlesztői Konzol"
1020
1021 #: ../../../src/MenuDevConsole.cpp:141
1022 #, c-format
1023 msgid "Use '%s' to inspect with the cursor."
1024 msgstr "Használd a '%s'-t majd a kurzort a megvizsgáláshoz"
1025
1026 #: ../../../src/MenuDevConsole.cpp:146
1027 msgid "Arguments with spaces should be enclosed with double quotes. Example:"
1028 msgstr "A szóközöket tartalmazó paramétereket idézőjelbe kell tenni, pl:"
1029
1030 #: ../../../src/MenuDevConsole.cpp:147
1031 msgid "Type 'help' to get a list of commands."
1032 msgstr "A 'help'-re kilistázza a parancsokat."
1033
1034 #: ../../../src/MenuDevConsole.cpp:209 ../../../src/MenuDevConsole.cpp:213
1035 msgid "px"
1036 msgstr ""
1037
1038 #: ../../../src/MenuDevConsole.cpp:224
1039 msgid "Distance"
1040 msgstr "Távolság"
1041
1042 #: ../../../src/MenuDevConsole.cpp:239 ../../../src/MenuDevConsole.cpp:286
1043 msgid "Entity"
1044 msgstr "Entitás"
1045
1046 #: ../../../src/MenuDevConsole.cpp:261 ../../../src/MenuDevConsole.cpp:268
1047 msgid "none"
1048 msgstr "nincs"
1049
1050 #: ../../../src/MenuDevConsole.cpp:262 ../../../src/MenuDevConsole.cpp:264
1051 msgid "wall"
1052 msgstr "fal"
1053
1054 #: ../../../src/MenuDevConsole.cpp:263 ../../../src/MenuDevConsole.cpp:265
1055 msgid "short wall / pit"
1056 msgstr "rövid fal / verem"
1057
1058 #: ../../../src/MenuDevConsole.cpp:266
1059 msgid "entity"
1060 msgstr "entitás"
1061
1062 #: ../../../src/MenuDevConsole.cpp:267
1063 msgid "entity, ally"
1064 msgstr "entitás, barát"
1065
1066 #: ../../../src/MenuDevConsole.cpp:274
1067 msgid "Tile"
1068 msgstr ""
1069
1070 #: ../../../src/MenuDevConsole.cpp:360
1071 msgid "adds a power to the action bar"
1072 msgstr "hozzáad egy erőt az akció sávhoz"
1073
1074 #: ../../../src/MenuDevConsole.cpp:361
1075 msgid "turns on/off the display of the FPS counter"
1076 msgstr ""
1077
1078 #: ../../../src/MenuDevConsole.cpp:362
1079 msgid "turns on/off all of the HUD elements"
1080 msgstr "ki/bekapcsolja az összes infót"
1081
1082 #: ../../../src/MenuDevConsole.cpp:363
1083 msgid "turns on/off the developer hud"
1084 msgstr "ki/bekapcsolja a fejlesztői infókat"
1085
1086 #: ../../../src/MenuDevConsole.cpp:364
1087 msgid ""
1088 "Prints a list of powers that match a search term. No search term will list "
1089 "all items"
1090 msgstr "Kilistázza a keresésnek megfelelő erőket. Keresés nélkül az összeset."
1091
1092 #: ../../../src/MenuDevConsole.cpp:365
1093 msgid "Prints out all the map filenames located in the \"maps/\" directory."
1094 msgstr "Kilistázza a 'maps' mappában található térképeket."
1095
1096 #: ../../../src/MenuDevConsole.cpp:366
1097 msgid ""
1098 "Prints out the active campaign statuses that match a search term. No search "
1099 "term will list all active statuses"
1100 msgstr ""
1101 "Kilistázza a keresésnek megfelelő aktív kampány státuszokat. Keresés "
1102 "nélkülmindet"
1103
1104 #: ../../../src/MenuDevConsole.cpp:367
1105 msgid ""
1106 "Prints a list of items that match a search term. No search term will list "
1107 "all items"
1108 msgstr "Kilistázza a keresésnek megfelelő tárgyakat. Keresés nélkül mindet"
1109
1110 #: ../../../src/MenuDevConsole.cpp:368
1111 msgid ""
1112 "parses a series of event components and executes them as a single event"
1113 msgstr "kiértékel egy eseménysort, és egy egységes eseményként hajta végre"
1114
1115 #: ../../../src/MenuDevConsole.cpp:369
1116 msgid "clears the command history"
1117 msgstr "törli a parancssor történetet"
1118
1119 #: ../../../src/MenuDevConsole.cpp:370
1120 msgid "displays this text"
1121 msgstr "megjeleníti ezt"
1122
1123 #: ../../../src/MenuDevConsole.cpp:377
1124 msgid "Toggled the developer hud"
1125 msgstr "Fejlesztői infók kapcsolva"
1126
1127 #: ../../../src/MenuDevConsole.cpp:381
1128 msgid "Toggled the hud"
1129 msgstr "Infók kapcsolva"
1130
1131 #: ../../../src/MenuDevConsole.cpp:385
1132 msgid "Toggled the FPS counter"
1133 msgstr ""
1134
1135 #: ../../../src/MenuDevConsole.cpp:534
1136 msgid "ERROR: Incorrect number of arguments"
1137 msgstr "HIBA: hibás paraméterszám"
1138
1139 #: ../../../src/MenuDevConsole.cpp:536 ../../../src/MenuDevConsole.cpp:564
1140 msgid "HINT:"
1141 msgstr "TIPP:"
1142
1143 #: ../../../src/MenuDevConsole.cpp:536
1144 msgid "<id>"
1145 msgstr ""
1146
1147 #: ../../../src/MenuDevConsole.cpp:552
1148 #, c-format
1149 msgid "ERROR: '%s' is not a valid event key"
1150 msgstr "HIBA: '%s' nem egy eseménykulcs"
1151
1152 #: ../../../src/MenuDevConsole.cpp:562
1153 msgid "ERROR: Too few arguments"
1154 msgstr "HIBA: túl kevés paraméter"
1155
1156 #: ../../../src/MenuDevConsole.cpp:564
1157 msgid "<key>=<val> <key>=<val> ..."
1158 msgstr "<kulcs>=<érték> <kulcs>=<érték> ..."
1159
1160 #: ../../../src/MenuDevConsole.cpp:569
1161 msgid "ERROR: Unknown command"
1162 msgstr "HIBA: ismeretlen parancs"
1163
1164 #: ../../../src/MenuDevConsole.cpp:571
1165 msgid "HINT: Type help"
1166 msgstr "TIPP: használd a 'help'-et"
1167
1168 #: ../../../src/MenuEnemy.cpp:162
1169 #, c-format
1170 msgid "%s level %d"
1171 msgstr "%s %d. szint"
1172
1173 #: ../../../src/MenuEnemy.cpp:186
1174 msgid "Dead"
1175 msgstr "Halott"
1176
1177 #: ../../../src/MenuEnemy.cpp:188
1178 msgid "Destroyed"
1179 msgstr ""
1180
1181 #: ../../../src/MenuInventory.cpp:177
1182 #, c-format
1183 msgid "Lost %d%% of %s."
1184 msgstr "Elveszett %d%% a %s-ból."
1185
1186 #: ../../../src/MenuInventory.cpp:184
1187 #, c-format
1188 msgid "Lost %d%% of total XP."
1189 msgstr "Elveszett %d%% a teljes TP-ból."
1190
1191 #: ../../../src/MenuInventory.cpp:189
1192 #, c-format
1193 msgid "Lost %d%% of current level XP."
1194 msgstr "Elveszett %d%% a szinten gyűjtött TP-ból."
1195
1196 #: ../../../src/MenuInventory.cpp:215
1197 #, c-format
1198 msgid "Lost %s."
1199 msgstr "Elveszett %s."
1200
1201 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
1202 #, c-format
1203 msgid "%d %s"
1204 msgstr ""
1205
1206 #: ../../../src/MenuInventory.cpp:300
1207 msgid "Pick up item(s):"
1208 msgstr "Tárgyak felvétele:"
1209
1210 #: ../../../src/MenuInventory.cpp:301
1211 msgid "Use or equip item:"
1212 msgstr "Használd vagy hord:"
1213
1214 #: ../../../src/MenuInventory.cpp:302
1215 #, c-format
1216 msgid "%s modifiers"
1217 msgstr "%s módosító"
1218
1219 #: ../../../src/MenuInventory.cpp:303
1220 msgid "Select a quantity of item:"
1221 msgstr "Válassz mennyiséget:"
1222
1223 #: ../../../src/MenuInventory.cpp:306
1224 msgid "Stash item stack:"
1225 msgstr "Dugihelyre helyez:"
1226
1227 #: ../../../src/MenuInventory.cpp:308
1228 msgid "Sell item stack:"
1229 msgstr "Tárgy eladása:"
1230
1231 #: ../../../src/MenuInventory.cpp:574
1232 msgid "You don't have enough of the required item."
1233 msgstr "Nincs elegendő a szükséges tárgyból."
1234
1235 #: ../../../src/MenuInventory.cpp:586
1236 msgid "You can't use this item right now."
1237 msgstr "Most nem tudod ezt a tárgyat használni."
1238
1239 #: ../../../src/MenuInventory.cpp:598
1240 msgid "This item can only be used from the action bar."
1241 msgstr "Ezt csak az akció sávról használhatod."
1242
1243 #: ../../../src/MenuInventory.cpp:716
1244 msgid "Inventory is full."
1245 msgstr "Tele a hátizsák."
1246
1247 #: ../../../src/MenuInventory.cpp:841
1248 #, c-format
1249 msgid "Not enough %s."
1250 msgstr "Nincs elég %s."
1251
1252 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
1253 msgid "This item can not be sold."
1254 msgstr "Ezt nem lehet eladni."
1255
1256 #: ../../../src/MenuLog.cpp:91
1257 msgid "Notes"
1258 msgstr "Jegyzetek"
1259
1260 #: ../../../src/MenuLog.cpp:92
1261 msgid "Quests"
1262 msgstr "Küldetések"
1263
1264 #: ../../../src/MenuManager.cpp:296
1265 #, c-format
1266 msgid "XP: %d/%d"
1267 msgstr "TP: %d/%d"
1268
1269 #: ../../../src/MenuManager.cpp:854
1270 msgid "This item can not be dropped."
1271 msgstr "Ezt nem tudod lerakni."
1272
1273 #: ../../../src/MenuNumPicker.cpp:59
1274 msgid "Enter amount:"
1275 msgstr "Add meg a mennyiséget:"
1276
1277 #: ../../../src/MenuPowers.cpp:786
1278 msgid "Passive"
1279 msgstr "Passzív"
1280
1281 #: ../../../src/MenuPowers.cpp:791
1282 #, c-format
1283 msgid "Costs %d MP"
1284 msgstr "%d MP-be kerül"
1285
1286 #: ../../../src/MenuPowers.cpp:795
1287 #, c-format
1288 msgid "Costs %d HP"
1289 msgstr "%d ÉP-be kerül"
1290
1291 #: ../../../src/MenuPowers.cpp:800
1292 msgid "Cooldown:"
1293 msgstr "Lehűlés:"
1294
1295 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
1296 msgid "Damage per second"
1297 msgstr "Sebzés per másodperc"
1298
1299 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
1300 msgid "HP per second"
1301 msgstr "ÉP per másodperc"
1302
1303 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
1304 msgid "MP per second"
1305 msgstr "MP per másodperc"
1306
1307 #: ../../../src/MenuPowers.cpp:884
1308 msgid "Immobilize"
1309 msgstr "Megbénítás"
1310
1311 #: ../../../src/MenuPowers.cpp:892
1312 msgid "Immunity"
1313 msgstr "Immunitás"
1314
1315 #: ../../../src/MenuPowers.cpp:895
1316 msgid "Immunity to damage over time"
1317 msgstr "Idővel immunis a sebzésre"
1318
1319 #: ../../../src/MenuPowers.cpp:898
1320 msgid "Immunity to slow"
1321 msgstr "Immunis a lassításra"
1322
1323 #: ../../../src/MenuPowers.cpp:901
1324 msgid "Immunity to stun"
1325 msgstr "Immunis a bénításra"
1326
1327 #: ../../../src/MenuPowers.cpp:904
1328 msgid "Immunity to HP steal"
1329 msgstr "Immunis az ÉP lopásra"
1330
1331 #: ../../../src/MenuPowers.cpp:907
1332 msgid "Immunity to MP steal"
1333 msgstr "Immunis az MP lopásra"
1334
1335 #: ../../../src/MenuPowers.cpp:910
1336 msgid "Immunity to knockback"
1337 msgstr "Immunis a leütésre"
1338
1339 #: ../../../src/MenuPowers.cpp:913
1340 msgid "Immunity to damage reflection"
1341 msgstr "Immunis a sebzésvisszaküldésre"
1342
1343 #: ../../../src/MenuPowers.cpp:916
1344 msgid "Stun"
1345 msgstr "Bénítás"
1346
1347 #: ../../../src/MenuPowers.cpp:919
1348 msgid "Automatic revive on death"
1349 msgstr "Halál esetén visszahoz"
1350
1351 #: ../../../src/MenuPowers.cpp:922
1352 msgid "Convert"
1353 msgstr "Konvertálás"
1354
1355 #: ../../../src/MenuPowers.cpp:925
1356 msgid "Fear"
1357 msgstr "Félelem"
1358
1359 #: ../../../src/MenuPowers.cpp:928
1360 msgid "Lifespan"
1361 msgstr "Élettartam"
1362
1363 #: ../../../src/MenuPowers.cpp:952
1364 msgid "Magical Shield"
1365 msgstr "Mágikus pajzs"
1366
1367 #: ../../../src/MenuPowers.cpp:981
1368 msgid "Healing"
1369 msgstr "Gyógyítás"
1370
1371 #: ../../../src/MenuPowers.cpp:984
1372 msgid "Knockback"
1373 msgstr "Leütés"
1374
1375 #: ../../../src/MenuPowers.cpp:1009
1376 #, c-format
1377 msgid "%d%% chance"
1378 msgstr "%d%% esély"
1379
1380 #: ../../../src/MenuPowers.cpp:1061
1381 msgid "Base Accuracy"
1382 msgstr "Alap pontosság"
1383
1384 #: ../../../src/MenuPowers.cpp:1081
1385 msgid "Base Critical Chance"
1386 msgstr "Alap kritikus találat"
1387
1388 #: ../../../src/MenuPowers.cpp:1089
1389 msgid "Ignores Absorbtion"
1390 msgstr "Felfogást kivédi"
1391
1392 #: ../../../src/MenuPowers.cpp:1094
1393 msgid "Ignores Avoidance"
1394 msgstr "Kitérést kivédi"
1395
1396 #: ../../../src/MenuPowers.cpp:1099
1397 #, c-format
1398 msgid "%d%% Chance to crit slowed targets"
1399 msgstr "%d%% esély a kritikusra lassítottnál"
1400
1401 #: ../../../src/MenuPowers.cpp:1104
1402 #, c-format
1403 msgid "Elemental Damage (%s)"
1404 msgstr ""
1405
1406 #: ../../../src/MenuPowers.cpp:1113
1407 #, c-format
1408 msgid "Requires a %s"
1409 msgstr "%s kell hozzá"
1410
1411 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
1412 #, c-format
1413 msgid "Requires Power: %s"
1414 msgstr "%s erő kell hozzá"
1415
1416 #: ../../../src/MenuPowers.cpp:1162
1417 msgid "Click to Unlock (uses 1 Skill Point)"
1418 msgstr "Kattint a feloldáshoz (1 tulajdonság pontért)"
1419
1420 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
1421 msgid "Requires 1 Skill Point"
1422 msgstr "1 tulajdonság pont kell hozzá"
1423
1424 #: ../../../src/MenuPowers.cpp:1354
1425 #, c-format
1426 msgid "%d unspent skill point"
1427 msgstr ""
1428
1429 #: ../../../src/MenuPowers.cpp:1357
1430 #, c-format
1431 msgid "%d unspent skill points"
1432 msgstr ""
1433
1434 #: ../../../src/MenuPowers.cpp:1387
1435 msgid "Next Level:"
1436 msgstr "Következő szint:"
1437
1438 #: ../../../src/MenuStash.cpp:53
1439 msgid "Private"
1440 msgstr ""
1441
1442 #: ../../../src/MenuStash.cpp:55
1443 msgid "Shared"
1444 msgstr ""
1445
1446 #: ../../../src/MenuStash.cpp:103
1447 msgid "Stash"
1448 msgstr ""
1449
1450 #: ../../../src/MenuStash.cpp:258
1451 msgid "Can not store quest items in the stash."
1452 msgstr "Küldetés tárgyak nem rakhatók ide."
1453
1454 #: ../../../src/MenuStash.cpp:263
1455 msgid "This item can not be stored in the stash."
1456 msgstr ""
1457
1458 #: ../../../src/MenuStash.cpp:268
1459 msgid "This item can not be stored in the private stash."
1460 msgstr ""
1461
1462 #: ../../../src/MenuStash.cpp:273
1463 msgid "This item can not be stored in the shared stash."
1464 msgstr ""
1465
1466 #: ../../../src/MenuStash.cpp:283
1467 msgid "Stash is full."
1468 msgstr "Dugihely megtelt."
1469
1470 #: ../../../src/MenuStash.cpp:340
1471 #, c-format
1472 msgid "Can not store item in stash: %s"
1473 msgstr ""
1474
1475 #: ../../../src/MenuTalker.cpp:447
1476 #, c-format
1477 msgid "<dialog node %d>"
1478 msgstr ""
1479
1480 #: ../../../src/MenuTalker.cpp:455
1481 msgid "Trade"
1482 msgstr "Csere"
1483
1484 #: ../../../src/MenuVendor.cpp:58
1485 msgid "Buyback"
1486 msgstr "Visszavásárol"
1487
1488 #: ../../../src/MenuVendor.cpp:281
1489 msgid "Vendor"
1490 msgstr "Eladó"
1491
1492 #: ../../../src/PowerManager.cpp:1170
1493 #, c-format
1494 msgid "+%d Shield"
1495 msgstr "+%d pajzs"
1496
1497 #: ../../../src/PowerManager.cpp:1426
1498 msgid "You are already transformed, untransform first."
1499 msgstr "Már transzformáltál, változz vissza előbb."
1500
1501 #: ../../../src/PowerManager.cpp:1438
1502 msgid "Could not untransform at this position."
1503 msgstr "Itt nem lehet vissza változni."
1504
1505 #: ../../../src/QuestLog.cpp:234
1506 msgid "Completed Quests"
1507 msgstr ""
1508
1509 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
1510 msgid "Game saved."
1511 msgstr "Játék elmentve."
1512
1513 #: ../../../src/SDLInputState.cpp:643
1514 msgid "BkSp"
1515 msgstr ""
1516
1517 #: ../../../src/SDLInputState.cpp:644
1518 msgid "Caps"
1519 msgstr ""
1520
1521 #: ../../../src/SDLInputState.cpp:645
1522 msgid "Del"
1523 msgstr ""
1524
1525 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1526 msgid "End"
1527 msgstr "Vége"
1528
1529 #: ../../../src/SDLInputState.cpp:648
1530 msgid "Esc"
1531 msgstr ""
1532
1533 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1534 msgid "Home"
1535 msgstr "Eleje"
1536
1537 #: ../../../src/SDLInputState.cpp:650
1538 msgid "Ins"
1539 msgstr ""
1540
1541 #: ../../../src/SDLInputState.cpp:651
1542 msgid "LAlt"
1543 msgstr ""
1544
1545 #: ../../../src/SDLInputState.cpp:652
1546 msgid "LCtrl"
1547 msgstr ""
1548
1549 #: ../../../src/SDLInputState.cpp:654
1550 msgid "LShft"
1551 msgstr ""
1552
1553 #: ../../../src/SDLInputState.cpp:655
1554 msgid "Num"
1555 msgstr ""
1556
1557 #: ../../../src/SDLInputState.cpp:656
1558 msgid "PgDn"
1559 msgstr ""
1560
1561 #: ../../../src/SDLInputState.cpp:657
1562 msgid "PgUp"
1563 msgstr ""
1564
1565 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1566 msgid "Pause"
1567 msgstr "Állj"
1568
1569 #: ../../../src/SDLInputState.cpp:659
1570 msgid "Print"
1571 msgstr ""
1572
1573 #: ../../../src/SDLInputState.cpp:660
1574 msgid "RAlt"
1575 msgstr ""
1576
1577 #: ../../../src/SDLInputState.cpp:661
1578 msgid "RCtrl"
1579 msgstr ""
1580
1581 #: ../../../src/SDLInputState.cpp:662
1582 msgid "Ret"
1583 msgstr ""
1584
1585 #: ../../../src/SDLInputState.cpp:664
1586 msgid "RShft"
1587 msgstr ""
1588
1589 #: ../../../src/SDLInputState.cpp:665
1590 msgid "SLock"
1591 msgstr ""
1592
1593 #: ../../../src/SDLInputState.cpp:666
1594 msgid "Spc"
1595 msgstr ""
1596
1597 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1598 msgid "Tab"
1599 msgstr ""
1600
1601 #: ../../../src/SDLInputState.cpp:673
1602 msgid "Backspace"
1603 msgstr "Visszatörlés"
1604
1605 #: ../../../src/SDLInputState.cpp:674
1606 msgid "CapsLock"
1607 msgstr ""
1608
1609 #: ../../../src/SDLInputState.cpp:678
1610 msgid "Escape"
1611 msgstr ""
1612
1613 #: ../../../src/SDLInputState.cpp:680
1614 msgid "Insert"
1615 msgstr "Beszúr"
1616
1617 #: ../../../src/SDLInputState.cpp:681
1618 msgid "Left Alt"
1619 msgstr "Bal Alt"
1620
1621 #: ../../../src/SDLInputState.cpp:682
1622 msgid "Left Ctrl"
1623 msgstr "Bal Ctrl"
1624
1625 #: ../../../src/SDLInputState.cpp:684
1626 msgid "Left Shift"
1627 msgstr "Bal Shift"
1628
1629 #: ../../../src/SDLInputState.cpp:685
1630 msgid "NumLock"
1631 msgstr ""
1632
1633 #: ../../../src/SDLInputState.cpp:686
1634 msgid "PageDown"
1635 msgstr "LapozásLe"
1636
1637 #: ../../../src/SDLInputState.cpp:687
1638 msgid "PageUp"
1639 msgstr "LapozásFel"
1640
1641 #: ../../../src/SDLInputState.cpp:689
1642 msgid "PrintScreen"
1643 msgstr "Képernyőnyomtatás"
1644
1645 #: ../../../src/SDLInputState.cpp:690
1646 msgid "Right Alt"
1647 msgstr "Jobb Alt"
1648
1649 #: ../../../src/SDLInputState.cpp:691
1650 msgid "Right Ctrl"
1651 msgstr "Jobb Ctrl"
1652
1653 #: ../../../src/SDLInputState.cpp:692
1654 msgid "Return"
1655 msgstr "Kocsivissza"
1656
1657 #: ../../../src/SDLInputState.cpp:694
1658 msgid "Right Shift"
1659 msgstr "Jobb Shift"
1660
1661 #: ../../../src/SDLInputState.cpp:695
1662 msgid "ScrollLock"
1663 msgstr ""
1664
1665 #: ../../../src/SDLInputState.cpp:696
1666 msgid "Space"
1667 msgstr "Szóköz"
1668
1669 #: ../../../src/SDLInputState.cpp:710
1670 #, c-format
1671 msgid "M%d"
1672 msgstr ""
1673
1674 #: ../../../src/SDLInputState.cpp:716
1675 #, c-format
1676 msgid "Mouse %d"
1677 msgstr "Egér %d"
1678
1679 #: ../../../src/SDLInputState.cpp:726
1680 #, c-format
1681 msgid "JX%d-"
1682 msgstr ""
1683
1684 #: ../../../src/SDLInputState.cpp:728
1685 #, c-format
1686 msgid "Axis %d -"
1687 msgstr "Tengely %d -"
1688
1689 #: ../../../src/SDLInputState.cpp:732
1690 #, c-format
1691 msgid "JX%d+"
1692 msgstr ""
1693
1694 #: ../../../src/SDLInputState.cpp:734
1695 #, c-format
1696 msgid "Axis %d +"
1697 msgstr "Tengely %d +"
1698
1699 #: ../../../src/SDLInputState.cpp:739
1700 #, c-format
1701 msgid "JB%d"
1702 msgstr ""
1703
1704 #: ../../../src/SDLInputState.cpp:741
1705 #, c-format
1706 msgid "Button %d"
1707 msgstr "Gomb %d"
1708
1709 #: ../../../src/SDLInputState.cpp:788
1710 msgid "Touch control D-Pad"
1711 msgstr ""
1712
1713 #: ../../../src/SDLInputState.cpp:812
1714 msgid "Touch control buttons"
1715 msgstr ""
1716
1717 #: ../../../src/SDLInputState.cpp:827
1718 msgid "Tap"
1719 msgstr ""
1720
1721 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1722 #, c-format
1723 msgid "Can not bind: %s"
1724 msgstr ""
1725
1726 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1727 #: ../../../src/SDLInputState.cpp:901
1728 #, c-format
1729 msgid "'%s' is no longer bound to:"
1730 msgstr "'%s' nem kötődik ehhez: "
1731
1732 #: ../../../src/Stats.cpp:38
1733 msgid "Max HP"
1734 msgstr "Max ÉP"
1735
1736 #: ../../../src/Stats.cpp:39
1737 msgid "Total amount of HP."
1738 msgstr ""
1739
1740 #: ../../../src/Stats.cpp:43
1741 msgid "HP Regen"
1742 msgstr "ÉP gyógyulás"
1743
1744 #: ../../../src/Stats.cpp:44
1745 msgid "Ticks of HP regen per minute."
1746 msgstr "ÉP gyógyulás másodpercenként."
1747
1748 #: ../../../src/Stats.cpp:48
1749 msgid "Max MP"
1750 msgstr ""
1751
1752 #: ../../../src/Stats.cpp:49
1753 msgid "Total amount of MP."
1754 msgstr ""
1755
1756 #: ../../../src/Stats.cpp:53
1757 msgid "MP Regen"
1758 msgstr "MP töltés"
1759
1760 #: ../../../src/Stats.cpp:54
1761 msgid "Ticks of MP regen per minute."
1762 msgstr "MP töltés másodpercenként."
1763
1764 #: ../../../src/Stats.cpp:58
1765 msgid "Accuracy"
1766 msgstr "Pontosság"
1767
1768 #: ../../../src/Stats.cpp:59
1769 msgid ""
1770 "Accuracy rating. The enemy's Avoidance rating is subtracted from this value "
1771 "to calculate your likeliness to land a direct hit."
1772 msgstr ""
1773
1774 #: ../../../src/Stats.cpp:63
1775 msgid "Avoidance"
1776 msgstr "Kitérés"
1777
1778 #: ../../../src/Stats.cpp:64
1779 msgid ""
1780 "Avoidance rating. This value is subtracted from the enemy's Accuracy rating "
1781 "to calculate their likeliness to land a direct hit."
1782 msgstr ""
1783
1784 #: ../../../src/Stats.cpp:68
1785 msgid "Absorb Min"
1786 msgstr "Felfogás Min"
1787
1788 #: ../../../src/Stats.cpp:69 ../../../src/Stats.cpp:74
1789 msgid "Reduces the amount of damage taken."
1790 msgstr ""
1791
1792 #: ../../../src/Stats.cpp:73
1793 msgid "Absorb Max"
1794 msgstr "Felfogás Max"
1795
1796 #: ../../../src/Stats.cpp:78
1797 msgid "Critical Hit Chance"
1798 msgstr "Kritikus ütés esélye"
1799
1800 #: ../../../src/Stats.cpp:79
1801 msgid "Chance for an attack to do extra damage."
1802 msgstr ""
1803
1804 #: ../../../src/Stats.cpp:83
1805 msgid "Bonus XP"
1806 msgstr "Bónusz TP"
1807
1808 #: ../../../src/Stats.cpp:84
1809 msgid "Increases the XP gained per kill."
1810 msgstr "Növeli a TP-t minden győzelemnél."
1811
1812 #: ../../../src/Stats.cpp:88
1813 #, c-format
1814 msgid "Bonus %s"
1815 msgstr "Bónusz %s"
1816
1817 #: ../../../src/Stats.cpp:89
1818 #, c-format
1819 msgid "Increases the %s found per drop."
1820 msgstr "Növeli a %s-t találat esélyét lerakásnál."
1821
1822 #: ../../../src/Stats.cpp:93
1823 msgid "Item Find Chance"
1824 msgstr "Tárgytalálat esélye"
1825
1826 #: ../../../src/Stats.cpp:94
1827 msgid "Increases the chance that an enemy will drop an item."
1828 msgstr "Növeli az esélyét, hogy az ellenség elejt valamit."
1829
1830 #: ../../../src/Stats.cpp:98
1831 msgid "Stealth"
1832 msgstr "Lopakodás"
1833
1834 #: ../../../src/Stats.cpp:99
1835 msgid "Increases your ability to move undetected."
1836 msgstr "Növeli az esélyét, hogy ne vegyenek észre."
1837
1838 #: ../../../src/Stats.cpp:103
1839 msgid "Poise"
1840 msgstr "Tökösség"
1841
1842 #: ../../../src/Stats.cpp:104
1843 msgid "Reduces your chance of stumbling when hit."
1844 msgstr "Csökkenti az esélyét az ájulásnak ha eltalálnak."
1845
1846 #: ../../../src/Stats.cpp:108
1847 msgid "Missile Reflect Chance"
1848 msgstr "Lövedék elhárítás esélye"
1849
1850 #: ../../../src/Stats.cpp:109
1851 msgid "Increases your chance of reflecting missiles back at enemies."
1852 msgstr "Növeli az esélyét hogy visszaküldöd a lövedéket a támadóra."
1853
1854 #: ../../../src/Stats.cpp:113
1855 msgid "Damage Reflection"
1856 msgstr "Sebzés vissza"
1857
1858 #: ../../../src/Stats.cpp:114
1859 msgid "Deals a percentage of damage taken back to the attacker."
1860 msgstr "A sebzést adott százalékban a visszahárítja a támadóra."
1861
1862 #: ../../../src/Stats.cpp:118
1863 msgid "HP Steal"
1864 msgstr "ÉP lopás"
1865
1866 #: ../../../src/Stats.cpp:119
1867 msgid "Percentage of HP stolen per hit."
1868 msgstr "Ütésenként ellopott ÉP-k százalékban."
1869
1870 #: ../../../src/Stats.cpp:123
1871 msgid "MP Steal"
1872 msgstr "MP lopás"
1873
1874 #: ../../../src/Stats.cpp:124
1875 msgid "Percentage of MP stolen per hit."
1876 msgstr "Ütésenként ellopott MP-k százalékban."
1877
1878 #: ../../../src/Stats.cpp:128
1879 msgid "Base HP"
1880 msgstr "Alap ÉP"
1881
1882 #: ../../../src/Stats.cpp:133
1883 msgid "Base MP"
1884 msgstr "Alap MP"
1885
1886 #: ../../../src/Utils.cpp:346
1887 msgid "k"
1888 msgstr "k"
1889
1890 #: ../../../src/Utils.cpp:616
1891 #, c-format
1892 msgid "%s second"
1893 msgstr "%s másodperc"
1894
1895 #: ../../../src/Utils.cpp:619
1896 #, c-format
1897 msgid "%s seconds"
1898 msgstr "%s másodperc"
1899
1900 #: ../../../src/Version.cpp:139
1901 msgid "or newer"
1902 msgstr "vagy újabb"
1903
1904 #: ../../../src/Version.cpp:142
1905 msgid "or older"
1906 msgstr "vagy régebbi"
1212 msgstr ""
1313 "Project-Id-Version: PACKAGE VERSION\n"
1414 "Report-Msgid-Bugs-To: \n"
15 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
15 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1616 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1717 "Last-Translator: Fabio Loli, 2018\n"
1818 "Language-Team: Italian (https://www.transifex.com/flareorg/teams/84925/it/)\n"
2222 "Language: it\n"
2323 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
2424
25 #: ../../../src/Avatar.cpp:367
25 #: ../../../src/Avatar.cpp:387
26 msgid "Your health is low!"
27 msgstr ""
28
29 #: ../../../src/Avatar.cpp:419
2630 #, c-format
2731 msgid "Congratulations, you have reached level %d!"
2832 msgstr "Congratulazioni, hai raggiunto il livello %d!"
2933
30 #: ../../../src/Avatar.cpp:369
31 msgid "You may increase one attribute through the Character Menu."
32 msgstr "Puoi aumentare un attributo nel Menu Personaggio."
33
34 #: ../../../src/Avatar.cpp:583
34 #: ../../../src/Avatar.cpp:421
35 msgid "You may increase one or more attributes through the Character Menu."
36 msgstr ""
37
38 #: ../../../src/Avatar.cpp:425
39 msgid "You may unlock one or more abilities through the Powers Menu."
40 msgstr ""
41
42 #: ../../../src/Avatar.cpp:692
3543 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3644 msgstr ""
3745 "La morte ti ha raggiunto. Partita finita! Premi ${INPUT_CONTINUE} per "
3846 "tornare ai Titoli."
3947
40 #: ../../../src/Avatar.cpp:589
48 #: ../../../src/Avatar.cpp:698
4149 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
4250 msgstr "La morte ti ha raggiunto. Premi ${INPUT_CONTINUE} per continuare."
4351
44 #: ../../../src/Avatar.cpp:839
52 #: ../../../src/Avatar.cpp:949
4553 msgid "Transformation expired. You have been moved back to a safe place."
4654 msgstr "Trasformazione finita. Sei stato riportato in un luogo sicuro."
4755
5058 msgid "%d %s removed."
5159 msgstr "%d %s rimosso."
5260
53 #: ../../../src/CampaignManager.cpp:162
61 #: ../../../src/CampaignManager.cpp:165
62 #, c-format
63 msgid "%s x%d removed."
64 msgstr ""
65
66 #: ../../../src/CampaignManager.cpp:167
5467 #, c-format
5568 msgid "%s removed."
5669 msgstr "%s rimosso."
5770
58 #: ../../../src/CampaignManager.cpp:175
71 #: ../../../src/CampaignManager.cpp:180
5972 #, c-format
6073 msgid "You receive %s."
6174 msgstr "Ricevi %s."
6275
63 #: ../../../src/CampaignManager.cpp:177
76 #: ../../../src/CampaignManager.cpp:182
6477 #, c-format
6578 msgid "You receive %s x%d."
6679 msgstr "Ricevi %s x%d."
6780
68 #: ../../../src/CampaignManager.cpp:186
81 #: ../../../src/CampaignManager.cpp:191
6982 #, c-format
7083 msgid "You receive %d %s."
7184 msgstr "Ricevi %d %s."
7285
73 #: ../../../src/CampaignManager.cpp:195
86 #: ../../../src/CampaignManager.cpp:200
7487 #, c-format
7588 msgid "You receive %d XP."
7689 msgstr "Ricevi %d ESP."
7790
78 #: ../../../src/CampaignManager.cpp:201
91 #: ../../../src/CampaignManager.cpp:206
7992 msgid "HP restored."
8093 msgstr "Salute ripristinata."
8194
82 #: ../../../src/CampaignManager.cpp:205
95 #: ../../../src/CampaignManager.cpp:210
8396 msgid "MP restored."
8497 msgstr "Mana ripristinato."
8598
86 #: ../../../src/CampaignManager.cpp:210
99 #: ../../../src/CampaignManager.cpp:215
87100 msgid "HP and MP restored."
88101 msgstr "Salute e Mana ripristinati."
89102
90 #: ../../../src/CampaignManager.cpp:214
103 #: ../../../src/CampaignManager.cpp:219
91104 msgid "Negative effects removed."
92105 msgstr "Effetti negativi rimossi."
93106
94 #: ../../../src/CampaignManager.cpp:220
107 #: ../../../src/CampaignManager.cpp:225
95108 msgid "HP and MP restored, negative effects removed"
96109 msgstr "Salute e Mana ripristinati, effetti negativi rimossi"
97110
115128 "\n"
116129 "Il renderer di default, spesso più veloce del renderer software."
117130
118 #: ../../../src/EngineSettings.cpp:561
131 #: ../../../src/EngineSettings.cpp:572
119132 msgid "Adventurer"
120133 msgstr "Avventuriero"
121134
122 #: ../../../src/Entity.cpp:511
135 #: ../../../src/Entity.cpp:522
123136 msgid "miss"
124137 msgstr "mancato"
125138
126 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
127 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
139 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
140 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
128141 #, c-format
129142 msgid "+%d HP"
130143 msgstr "+%d Salute"
131144
132 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
133 #: ../../../src/StatBlock.cpp:822
145 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
146 #: ../../../src/StatBlock.cpp:830
134147 #, c-format
135148 msgid "+%d MP"
136149 msgstr "+%d Mana"
137150
138 #: ../../../src/EventManager.cpp:738
151 #: ../../../src/EventManager.cpp:782
139152 msgid "Unknown destination"
140153 msgstr "Destinazione sconosciuta"
141154
142 #: ../../../src/GameStateConfigBase.cpp:89
143 #: ../../../src/GameStateConfigBase.cpp:110
155 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
156 msgid "Loading..."
157 msgstr "Caricamento..."
158
159 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
160 msgid "Delete Save"
161 msgstr "Elimina salvataggio"
162
163 #: ../../../src/GameStateLoad.cpp:90
164 msgid "Delete this save?"
165 msgstr "Eliminare questo salvataggio?"
166
167 #: ../../../src/GameStateLoad.cpp:92
168 msgid "Exit to Title"
169 msgstr "Torna ai Titoli"
170
171 #: ../../../src/GameStateLoad.cpp:95
172 msgid "New Game"
173 msgstr "Nuova Partita"
174
175 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
176 msgid "Choose a Slot"
177 msgstr "Scegli Slot"
178
179 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
180 msgid "Enable a story mod to continue"
181 msgstr "Abilita una mod storia per continuare"
182
183 #: ../../../src/GameStateLoad.cpp:597
184 msgid "Load Game"
185 msgstr "Carica partita"
186
187 #: ../../../src/GameStateLoad.cpp:706
188 msgid "Entering game world..."
189 msgstr "Ingresso nel mondo di gioco..."
190
191 #: ../../../src/GameStateLoad.cpp:709
192 msgid "Loading saved game..."
193 msgstr "Caricamento partita..."
194
195 #: ../../../src/GameStateLoad.cpp:742
196 msgid "Invalid save"
197 msgstr "Salvataggio corrotto"
198
199 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
200 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
201 #: ../../../src/MenuPowers.cpp:1543
202 #, c-format
203 msgid "Level %d"
204 msgstr "Livello %d"
205
206 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
207 #: ../../../src/MenuConfig.cpp:244
208 msgid "Cancel"
209 msgstr "Annulla"
210
211 #: ../../../src/GameStateNew.cpp:68
212 msgid "Create"
213 msgstr "Crea"
214
215 #: ../../../src/GameStateNew.cpp:76
216 msgid "Randomize"
217 msgstr ""
218
219 #: ../../../src/GameStateNew.cpp:92
220 msgid "Choose a Portrait"
221 msgstr "Scegli un ritratto"
222
223 #: ../../../src/GameStateNew.cpp:96
224 msgid "Choose a Name"
225 msgstr "Scegli un nome"
226
227 #: ../../../src/GameStateNew.cpp:100
228 msgid "Permadeath?"
229 msgstr "Morte definitiva?"
230
231 #: ../../../src/GameStateNew.cpp:104
232 msgid "Choose a Class"
233 msgstr "Scegli una classe"
234
235 #: ../../../src/GameStateTitle.cpp:107
236 msgid "Play Game"
237 msgstr "Gioca"
238
239 #: ../../../src/GameStateTitle.cpp:110
240 msgid "Enable a core mod to continue"
241 msgstr "Abilitare una mod core per continuare"
242
243 #: ../../../src/GameStateTitle.cpp:114
244 msgid "Configuration"
245 msgstr "Impostazioni"
246
247 #: ../../../src/GameStateTitle.cpp:117
248 msgid "Credits"
249 msgstr "Riconoscimenti"
250
251 #: ../../../src/GameStateTitle.cpp:120
252 msgid "Exit Game"
253 msgstr "Esci dal gioco"
254
255 #: ../../../src/InputState.cpp:407
256 msgid "Accept"
257 msgstr "Accetta"
258
259 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
260 #: ../../../src/SDLInputState.cpp:698
261 msgid "Up"
262 msgstr "Su"
263
264 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
265 #: ../../../src/SDLInputState.cpp:676
266 msgid "Down"
267 msgstr "Giù"
268
269 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
270 #: ../../../src/SDLInputState.cpp:683
271 msgid "Left"
272 msgstr "Sinistra"
273
274 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
275 #: ../../../src/SDLInputState.cpp:693
276 msgid "Right"
277 msgstr "Destra"
278
279 #: ../../../src/InputState.cpp:412
280 msgid "Bar1"
281 msgstr "Barra1"
282
283 #: ../../../src/InputState.cpp:413
284 msgid "Bar2"
285 msgstr "Barra2"
286
287 #: ../../../src/InputState.cpp:414
288 msgid "Bar3"
289 msgstr "Barra3"
290
291 #: ../../../src/InputState.cpp:415
292 msgid "Bar4"
293 msgstr "Barra4"
294
295 #: ../../../src/InputState.cpp:416
296 msgid "Bar5"
297 msgstr "Barra5"
298
299 #: ../../../src/InputState.cpp:417
300 msgid "Bar6"
301 msgstr "Barra6"
302
303 #: ../../../src/InputState.cpp:418
304 msgid "Bar7"
305 msgstr "Barra7"
306
307 #: ../../../src/InputState.cpp:419
308 msgid "Bar8"
309 msgstr "Barra8"
310
311 #: ../../../src/InputState.cpp:420
312 msgid "Bar9"
313 msgstr "Barra9"
314
315 #: ../../../src/InputState.cpp:421
316 msgid "Bar0"
317 msgstr "Barra0"
318
319 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
320 #: ../../../src/MenuCharacter.cpp:54
321 msgid "Character"
322 msgstr "Personaggio"
323
324 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
325 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
326 msgid "Inventory"
327 msgstr "Inventario"
328
329 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
330 #: ../../../src/MenuPowers.cpp:167
331 msgid "Powers"
332 msgstr "Poteri"
333
334 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
335 #: ../../../src/MenuLog.cpp:72
336 msgid "Log"
337 msgstr "Diario"
338
339 #: ../../../src/InputState.cpp:426
340 msgid "Main1"
341 msgstr "Principale 1"
342
343 #: ../../../src/InputState.cpp:427
344 msgid "Main2"
345 msgstr "Principale 2"
346
347 #: ../../../src/InputState.cpp:428
348 msgid "Ctrl"
349 msgstr "Ctrl"
350
351 #: ../../../src/InputState.cpp:429
352 msgid "Shift"
353 msgstr "Shift"
354
355 #: ../../../src/InputState.cpp:430
356 msgid "Alt"
357 msgstr "Alt"
358
359 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
360 msgid "Delete"
361 msgstr "Cancella"
362
363 #: ../../../src/InputState.cpp:432
364 msgid "ActionBar Accept"
365 msgstr "ActionBar Accetta"
366
367 #: ../../../src/InputState.cpp:433
368 msgid "ActionBar Left"
369 msgstr "ActionBar Sinistra"
370
371 #: ../../../src/InputState.cpp:434
372 msgid "ActionBar Right"
373 msgstr "ActionBar Destra"
374
375 #: ../../../src/InputState.cpp:435
376 msgid "ActionBar Use"
377 msgstr "ActionBar Usa"
378
379 #: ../../../src/InputState.cpp:436
380 msgid "Developer Menu"
381 msgstr "Menu Sviluppatore"
382
383 #: ../../../src/InputState.cpp:438
384 msgid "Left Mouse"
385 msgstr "Mouse sinistro"
386
387 #: ../../../src/InputState.cpp:439
388 msgid "Middle Mouse"
389 msgstr "Mouse centrale"
390
391 #: ../../../src/InputState.cpp:440
392 msgid "Right Mouse"
393 msgstr "Mouse destro"
394
395 #: ../../../src/InputState.cpp:441
396 msgid "Wheel Up"
397 msgstr "Rotella in alto"
398
399 #: ../../../src/InputState.cpp:442
400 msgid "Wheel Down"
401 msgstr "Rotella in basso"
402
403 #: ../../../src/InputState.cpp:443
404 msgid "Mouse X1"
405 msgstr "Mouse X1"
406
407 #: ../../../src/InputState.cpp:444
408 msgid "Mouse X2"
409 msgstr "Mouse X2"
410
411 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
412 msgid "Unknown Item"
413 msgstr "Oggetto sconosciuto"
414
415 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
416 #, c-format
417 msgid "%d%% Speed"
418 msgstr "%d%% Velocità"
419
420 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
421 #, c-format
422 msgid "%d%% Attack Speed"
423 msgstr "%d%% Velocità di Attacco"
424
425 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
426 #: ../../../src/MenuPowers.cpp:832
427 #, c-format
428 msgid "Resistance (%s)"
429 msgstr ""
430
431 #: ../../../src/ItemManager.cpp:714
432 #, c-format
433 msgid "Requires %s"
434 msgstr ""
435
436 #: ../../../src/ItemManager.cpp:763
437 msgid "Quest Item"
438 msgstr "Oggetto della missione"
439
440 #: ../../../src/ItemManager.cpp:790
441 #, c-format
442 msgid "Quality: %s"
443 msgstr "Qualità: %s"
444
445 #: ../../../src/ItemManager.cpp:815
446 #, c-format
447 msgid "Absorb: %d-%d"
448 msgstr "Assorbimento: %d-%d"
449
450 #: ../../../src/ItemManager.cpp:817
451 #, c-format
452 msgid "Absorb: %d"
453 msgstr "Assorbimento: %d"
454
455 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
456 #: ../../../src/MenuPowers.cpp:1133
457 #, c-format
458 msgid "Requires Level %d"
459 msgstr "Richiede Livello %d"
460
461 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
462 #: ../../../src/MenuPowers.cpp:1124
463 #, c-format
464 msgid "Requires %s %d"
465 msgstr "Richiede %s %d"
466
467 #: ../../../src/ItemManager.cpp:879
468 #, c-format
469 msgid "Requires Class: %s"
470 msgstr "Richiede Classe %s"
471
472 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
473 #, c-format
474 msgid "Buy Price: %d %s"
475 msgstr "Prezzo d'acquisto: %d %s"
476
477 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
478 #, c-format
479 msgid "Buy Price: %d %s each"
480 msgstr "Prezzo d'acquisto: %d %s ciascuno"
481
482 #: ../../../src/ItemManager.cpp:916
483 #, c-format
484 msgid "Sell Price: %d %s"
485 msgstr "Prezzo di vendita: %d %s"
486
487 #: ../../../src/ItemManager.cpp:918
488 #, c-format
489 msgid "Sell Price: %d %s each"
490 msgstr "Prezzo di vendita: %d %s ciascuno"
491
492 #: ../../../src/ItemManager.cpp:927
493 msgid "Set:"
494 msgstr "Completo:"
495
496 #: ../../../src/ItemManager.cpp:934
497 #, c-format
498 msgid "%d items:"
499 msgstr "%d oggetti:"
500
501 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
502 #, c-format
503 msgid "Press [%s] to use"
504 msgstr "Premi [%s] per usare"
505
506 #: ../../../src/ItemManager.cpp:951
507 #, c-format
508 msgid "Press [%s] to read"
509 msgstr "Premi [%s] per leggere"
510
511 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
512 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
513 #, c-format
514 msgid "Hotkey: %s"
515 msgstr "Tasto rapido: %s"
516
517 #: ../../../src/MenuActionBar.cpp:599
518 msgid "Not enough MP."
519 msgstr ""
520
521 #: ../../../src/MenuActiveEffects.cpp:124
522 #, c-format
523 msgid "x%d"
524 msgstr "x%d"
525
526 #: ../../../src/MenuActiveEffects.cpp:219
527 msgid "Remaining:"
528 msgstr "Rimanenti:"
529
530 #: ../../../src/MenuActiveEffects.cpp:225
531 #, c-format
532 msgid "x%d stacks"
533 msgstr "x%d mucchi"
534
535 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
536 msgid "Name"
537 msgstr "Nome"
538
539 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
540 msgid "Level"
541 msgstr "Livello"
542
543 #: ../../../src/MenuCharacter.cpp:310
544 #, c-format
545 msgid "%d unspent stat point"
546 msgstr "%d punto statistiche non utilizzato"
547
548 #: ../../../src/MenuCharacter.cpp:313
549 #, c-format
550 msgid "%d unspent stat points"
551 msgstr "%d punti statistiche non utilizzati"
552
553 #: ../../../src/MenuCharacter.cpp:355
554 #, c-format
555 msgid "Reduces the damage taken from \"%s\" elemental attacks."
556 msgstr ""
557
558 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
559 #, c-format
560 msgid "XP: %d"
561 msgstr "ESP: %d"
562
563 #: ../../../src/MenuCharacter.cpp:367
564 #, c-format
565 msgid "Next: %d"
566 msgstr "Prossimo: %d"
567
568 #: ../../../src/MenuCharacter.cpp:373
569 #, c-format
570 msgid "base (%d), bonus (%d)"
571 msgstr "base (%d), bonus (%d)"
572
573 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
574 msgid "Related stats:"
575 msgstr "Statistiche associate:"
576
577 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
578 #, c-format
579 msgid "Each level grants %d."
580 msgstr "Ad ogni livello ottieni %d."
581
582 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
583 #, c-format
584 msgid "Each point of %s grants %d."
585 msgstr "Per ogni punto di %s ottieni %d."
586
587 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
588 msgid "Clear"
589 msgstr "Pulisci"
590
591 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
592 msgid "Assign:"
593 msgstr "Assegnazioni:"
594
595 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
144596 msgid "Defaults"
145597 msgstr "Predefiniti"
146598
147 #: ../../../src/GameStateConfigBase.cpp:89
599 #: ../../../src/MenuConfig.cpp:123
148600 msgid "Reset ALL settings?"
149601 msgstr "Resettare TUTTE le impostazioni?"
150602
151 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
603 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
152604 msgid "OK"
153605 msgstr "Ok"
154606
155 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
156 #: ../../../src/InputState.cpp:401
157 msgid "Cancel"
158 msgstr "Annulla"
159
160 #: ../../../src/GameStateConfigBase.cpp:160
161 #: ../../../src/GameStateConfigDesktop.cpp:130
607 #: ../../../src/MenuConfig.cpp:246
608 msgid "Continue"
609 msgstr ""
610
611 #: ../../../src/MenuConfig.cpp:248
612 msgid "Save Game"
613 msgstr ""
614
615 #: ../../../src/MenuConfig.cpp:291
616 msgid "Default"
617 msgstr ""
618
619 #: ../../../src/MenuConfig.cpp:291
620 msgid ""
621 "Show all loot tooltips, except for those that would be obscured by the "
622 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
623 msgstr ""
624
625 #: ../../../src/MenuConfig.cpp:292
626 msgid "Show all"
627 msgstr ""
628
629 #: ../../../src/MenuConfig.cpp:292
630 msgid ""
631 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
632 msgstr ""
633
634 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
635 msgid "Hidden"
636 msgstr ""
637
638 #: ../../../src/MenuConfig.cpp:293
639 msgid ""
640 "Always hide loot tooltips, except for when a piece of loot is hovered with "
641 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
642 msgstr ""
643
644 #: ../../../src/MenuConfig.cpp:296
645 msgid "Visible"
646 msgstr ""
647
648 #: ../../../src/MenuConfig.cpp:297
649 msgid "Visible (2x zoom)"
650 msgstr ""
651
652 #: ../../../src/MenuConfig.cpp:301
653 msgid ""
654 "Controls the type of warning to be activated when the player is below the "
655 "low health threshold."
656 msgstr ""
657
658 #: ../../../src/MenuConfig.cpp:302
659 msgid "- Display a message"
660 msgstr ""
661
662 #: ../../../src/MenuConfig.cpp:303
663 msgid "- Play a sound"
664 msgstr ""
665
666 #: ../../../src/MenuConfig.cpp:304
667 msgid "- Change the cursor"
668 msgstr ""
669
670 #: ../../../src/MenuConfig.cpp:306
671 msgid "Disabled"
672 msgstr ""
673
674 #: ../../../src/MenuConfig.cpp:307
675 msgid "All"
676 msgstr ""
677
678 #: ../../../src/MenuConfig.cpp:308
679 msgid "Message & Cursor"
680 msgstr ""
681
682 #: ../../../src/MenuConfig.cpp:309
683 msgid "Message & Sound"
684 msgstr ""
685
686 #: ../../../src/MenuConfig.cpp:310
687 msgid "Sound & Cursor"
688 msgstr ""
689
690 #: ../../../src/MenuConfig.cpp:311
691 msgid "Message"
692 msgstr ""
693
694 #: ../../../src/MenuConfig.cpp:312
695 msgid "Cursor"
696 msgstr ""
697
698 #: ../../../src/MenuConfig.cpp:313
699 msgid "Sound"
700 msgstr ""
701
702 #: ../../../src/MenuConfig.cpp:319
703 msgid ""
704 "When the player's health drops below the given threshold, the low health "
705 "notifications are triggered if one or more of them is enabled."
706 msgstr ""
707
708 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
709 msgid "Exit"
710 msgstr "Esci"
711
712 #: ../../../src/MenuConfig.cpp:333
713 msgid "Video"
714 msgstr "Video"
715
716 #: ../../../src/MenuConfig.cpp:334
162717 msgid "Audio"
163718 msgstr "Audio"
164719
165 #: ../../../src/GameStateConfigBase.cpp:161
166 #: ../../../src/GameStateConfigDesktop.cpp:131
720 #: ../../../src/MenuConfig.cpp:335
167721 msgid "Interface"
168722 msgstr "Interfaccia"
169723
170 #: ../../../src/GameStateConfigBase.cpp:162
171 #: ../../../src/GameStateConfigDesktop.cpp:134
724 #: ../../../src/MenuConfig.cpp:336
725 msgid "Input"
726 msgstr "Input"
727
728 #: ../../../src/MenuConfig.cpp:337
729 msgid "Keybindings"
730 msgstr "Scorciatoie da tastiera"
731
732 #: ../../../src/MenuConfig.cpp:338
172733 msgid "Mods"
173734 msgstr "Mod"
174735
175 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
736 #: ../../../src/MenuConfig.cpp:350
737 msgid "Paused"
738 msgstr "In pausa"
739
740 #: ../../../src/MenuConfig.cpp:353
741 msgid "Time Played"
742 msgstr ""
743
744 #: ../../../src/MenuConfig.cpp:359
745 msgid "Renderer"
746 msgstr "Renderer"
747
748 #: ../../../src/MenuConfig.cpp:360
749 msgid "Full Screen Mode"
750 msgstr "Modalità schermo intero"
751
752 #: ../../../src/MenuConfig.cpp:361
753 msgid "Hardware surfaces"
754 msgstr "Superfici solide"
755
756 #: ../../../src/MenuConfig.cpp:362
757 msgid "V-Sync"
758 msgstr "V-Sync"
759
760 #: ../../../src/MenuConfig.cpp:363
761 msgid "Texture Filtering"
762 msgstr "Filtro texture"
763
764 #: ../../../src/MenuConfig.cpp:364
765 msgid "DPI scaling"
766 msgstr "dimensione DPI"
767
768 #: ../../../src/MenuConfig.cpp:365
769 msgid "Parallax Layers"
770 msgstr ""
771
772 #: ../../../src/MenuConfig.cpp:366
773 msgid "Allow changing gamma"
774 msgstr "Permetti cambio di gamma"
775
776 #: ../../../src/MenuConfig.cpp:367
777 msgid "Gamma"
778 msgstr "Gamma"
779
780 #: ../../../src/MenuConfig.cpp:369
781 msgid "Sound Volume"
782 msgstr "Volume audio"
783
784 #: ../../../src/MenuConfig.cpp:370
176785 msgid "Music Volume"
177786 msgstr "Volume musica"
178787
179 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
180 msgid "Sound Volume"
181 msgstr "Volume audio"
182
183 #: ../../../src/GameStateConfigBase.cpp:257
788 #: ../../../src/MenuConfig.cpp:372
184789 msgid "Language"
185790 msgstr "Lingua"
186791
187 #: ../../../src/GameStateConfigBase.cpp:266
792 #: ../../../src/MenuConfig.cpp:373
188793 msgid "Show FPS"
189794 msgstr "Mostra FPS"
190795
191 #: ../../../src/GameStateConfigBase.cpp:270
796 #: ../../../src/MenuConfig.cpp:374
797 msgid "Hardware mouse cursor"
798 msgstr "Hardware cursore mouse"
799
800 #: ../../../src/MenuConfig.cpp:375
192801 msgid "Colorblind Mode"
193802 msgstr "Modalità per daltonici"
194803
195 #: ../../../src/GameStateConfigBase.cpp:274
196 msgid "Hardware mouse cursor"
197 msgstr "Hardware cursore mouse"
198
199 #: ../../../src/GameStateConfigBase.cpp:278
804 #: ../../../src/MenuConfig.cpp:376
200805 msgid "Developer Mode"
201806 msgstr "Modalità Sviluppatore"
202807
203 #: ../../../src/GameStateConfigBase.cpp:282
808 #: ../../../src/MenuConfig.cpp:377
204809 msgid "Subtitles"
205810 msgstr "Sottotitoli"
206811
207 #: ../../../src/GameStateConfigBase.cpp:286
208 msgid "Active Mods"
209 msgstr "Mod attive"
210
211 #: ../../../src/GameStateConfigBase.cpp:295
212 msgid "Available Mods"
213 msgstr "Mod disponibili"
214
215 #: ../../../src/GameStateConfigBase.cpp:314
216 msgid "<< Disable"
217 msgstr "<< Disabilita"
218
219 #: ../../../src/GameStateConfigBase.cpp:320
220 msgid "Enable >>"
221 msgstr "Abilita >>"
222
223 #: ../../../src/GameStateConfigBase.cpp:873
224 msgid "Version:"
225 msgstr "Versione:"
226
227 #: ../../../src/GameStateConfigBase.cpp:878
228 msgid "Game:"
229 msgstr "Gioco:"
230
231 #: ../../../src/GameStateConfigBase.cpp:883
232 msgid "Engine version:"
233 msgstr "Versione motore di gioco:"
234
235 #: ../../../src/GameStateConfigBase.cpp:891
236 msgid "Requires mods:"
237 msgstr "Richiede mod:"
238
239 #: ../../../src/GameStateConfigDesktop.cpp:83
240 #: ../../../src/GameStateConfigDesktop.cpp:751
241 msgid "Clear"
242 msgstr "Pulisci"
243
244 #: ../../../src/GameStateConfigDesktop.cpp:83
245 #: ../../../src/GameStateConfigDesktop.cpp:749
246 msgid "Assign:"
247 msgstr "Assegnazioni:"
248
249 #: ../../../src/GameStateConfigDesktop.cpp:128
250 msgid "Video"
251 msgstr "Video"
252
253 #: ../../../src/GameStateConfigDesktop.cpp:132
254 msgid "Input"
255 msgstr "Input"
256
257 #: ../../../src/GameStateConfigDesktop.cpp:133
258 msgid "Keybindings"
259 msgstr "Scorciatoie da tastiera"
260
261 #: ../../../src/GameStateConfigDesktop.cpp:188
812 #: ../../../src/MenuConfig.cpp:378
813 msgid "Loot tooltip visibility"
814 msgstr ""
815
816 #: ../../../src/MenuConfig.cpp:379
817 msgid "Mini-map mode"
818 msgstr ""
819
820 #: ../../../src/MenuConfig.cpp:380
821 msgid "Always show stat bar labels"
822 msgstr "Mostra sempre le etichette della barra"
823
824 #: ../../../src/MenuConfig.cpp:381
825 msgid "Allow stat bar auto-hiding"
826 msgstr ""
827
828 #: ../../../src/MenuConfig.cpp:382
829 msgid "Show combat text"
830 msgstr "Mostra testo combattimento"
831
832 #: ../../../src/MenuConfig.cpp:383
833 msgid "Automatically equip items"
834 msgstr "Equipaggia gli oggetti automaticamente"
835
836 #: ../../../src/MenuConfig.cpp:384
837 msgid "Show hidden entity markers"
838 msgstr ""
839
840 #: ../../../src/MenuConfig.cpp:385
841 msgid "Low health notification"
842 msgstr ""
843
844 #: ../../../src/MenuConfig.cpp:386
845 msgid "Low health threshold"
846 msgstr ""
847
848 #: ../../../src/MenuConfig.cpp:389
849 msgid "Joystick"
850 msgstr "Joystick"
851
852 #: ../../../src/MenuConfig.cpp:390
853 msgid "Move hero using mouse"
854 msgstr "Muovi Eroe tramite mouse"
855
856 #: ../../../src/MenuConfig.cpp:391
857 msgid "Mouse aim"
858 msgstr "Mira via mouse"
859
860 #: ../../../src/MenuConfig.cpp:392
861 msgid "Do not use mouse"
862 msgstr "Non usare il mouse"
863
864 #: ../../../src/MenuConfig.cpp:393
865 msgid "Swap mouse movement button"
866 msgstr ""
867
868 #: ../../../src/MenuConfig.cpp:394
869 msgid "Attack with mouse movement"
870 msgstr ""
871
872 #: ../../../src/MenuConfig.cpp:395
873 msgid "Joystick Deadzone"
874 msgstr "Zona neutra Joystick"
875
876 #: ../../../src/MenuConfig.cpp:405
877 #, c-format
878 msgid "Primary binding: %s"
879 msgstr ""
880
881 #: ../../../src/MenuConfig.cpp:406
882 #, c-format
883 msgid "Alternate binding: %s"
884 msgstr ""
885
886 #: ../../../src/MenuConfig.cpp:407
887 #, c-format
888 msgid "Joystick binding: %s"
889 msgstr ""
890
891 #: ../../../src/MenuConfig.cpp:508
262892 msgid ""
263893 "Will try to store surfaces in video memory versus system memory. The effect "
264894 "this has on performance depends on the renderer."
266896 "Cerca di caricare le superfici nella memoria video anziché in quella di "
267897 "sistema. L'effetto sulla performance dipende dalla scheda video."
268898
269 #: ../../../src/GameStateConfigDesktop.cpp:189
899 #: ../../../src/MenuConfig.cpp:509
270900 msgid ""
271901 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
272902 "windowed mode or input lag."
274904 "Previene il tearing dello schermo. Disabilita se sperimenti lo "
275905 "\"stuttering\" nel modo 'windowed' o un ritardo nell'input."
276906
277 #: ../../../src/GameStateConfigDesktop.cpp:190
907 #: ../../../src/MenuConfig.cpp:510
278908 msgid ""
279909 "When enabled, this uses the screen DPI in addition to the window dimensions "
280910 "to scale the rendering resolution. Otherwise, only the window dimensions are"
284914 "della finestra per modificare la risoluzione. Altrimenti, sono utilizzate "
285915 "solo le dimensioni della finestra."
286916
287 #: ../../../src/GameStateConfigDesktop.cpp:191
917 #: ../../../src/MenuConfig.cpp:511
288918 msgid ""
289919 "This enables parallax (non-tile) layers. Disabling this setting can improve "
290920 "performance in some cases."
291921 msgstr ""
292922
293 #: ../../../src/GameStateConfigDesktop.cpp:192
294 msgid "Experimental"
295 msgstr "Sperimentale"
296
297 #: ../../../src/GameStateConfigDesktop.cpp:193
298 msgid "For handheld devices"
299 msgstr "Per dispositivi tascabili"
300
301 #: ../../../src/GameStateConfigDesktop.cpp:211
302 msgid "Renderer"
303 msgstr "Renderer"
304
305 #: ../../../src/GameStateConfigDesktop.cpp:227
306 msgid "Full Screen Mode"
307 msgstr "Modalità schermo intero"
308
309 #: ../../../src/GameStateConfigDesktop.cpp:231
310 msgid "Move hero using mouse"
311 msgstr "Muovi Eroe tramite mouse"
312
313 #: ../../../src/GameStateConfigDesktop.cpp:235
314 msgid "Hardware surfaces"
315 msgstr "Superfici solide"
316
317 #: ../../../src/GameStateConfigDesktop.cpp:239
318 msgid "V-Sync"
319 msgstr "V-Sync"
320
321 #: ../../../src/GameStateConfigDesktop.cpp:243
322 msgid "Texture Filtering"
323 msgstr "Filtro texture"
324
325 #: ../../../src/GameStateConfigDesktop.cpp:247
326 msgid "DPI scaling"
327 msgstr "dimensione DPI"
328
329 #: ../../../src/GameStateConfigDesktop.cpp:251
330 msgid "Parallax Layers"
331 msgstr ""
332
333 #: ../../../src/GameStateConfigDesktop.cpp:255
334 msgid "Allow changing gamma"
335 msgstr "Permetti cambio di gamma"
336
337 #: ../../../src/GameStateConfigDesktop.cpp:259
338 msgid "Gamma"
339 msgstr "Gamma"
340
341 #: ../../../src/GameStateConfigDesktop.cpp:263
342 msgid "Use joystick"
343 msgstr "Usa joystick"
344
345 #: ../../../src/GameStateConfigDesktop.cpp:267
346 msgid "Joystick"
347 msgstr "Joystick"
348
349 #: ../../../src/GameStateConfigDesktop.cpp:283
350 msgid "Mouse aim"
351 msgstr "Mira via mouse"
352
353 #: ../../../src/GameStateConfigDesktop.cpp:287
354 msgid "Do not use mouse"
355 msgstr "Non usare il mouse"
356
357 #: ../../../src/GameStateConfigDesktop.cpp:291
358 msgid "Joystick Deadzone"
359 msgstr "Zona neutra Joystick"
360
361 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
362 msgid "Loading..."
363 msgstr "Caricamento..."
364
365 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
366 msgid "Delete Save"
367 msgstr "Elimina salvataggio"
368
369 #: ../../../src/GameStateLoad.cpp:88
370 msgid "Delete this save?"
371 msgstr "Eliminare questo salvataggio?"
372
373 #: ../../../src/GameStateLoad.cpp:90
374 msgid "Exit to Title"
375 msgstr "Torna ai Titoli"
376
377 #: ../../../src/GameStateLoad.cpp:93
378 msgid "New Game"
379 msgstr "Nuova Partita"
380
381 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
382 msgid "Choose a Slot"
383 msgstr "Scegli Slot"
384
385 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
386 msgid "Enable a story mod to continue"
387 msgstr "Abilita una mod storia per continuare"
388
389 #: ../../../src/GameStateLoad.cpp:589
390 msgid "Load Game"
391 msgstr "Carica partita"
392
393 #: ../../../src/GameStateLoad.cpp:695
394 msgid "Entering game world..."
395 msgstr "Ingresso nel mondo di gioco..."
396
397 #: ../../../src/GameStateLoad.cpp:698
398 msgid "Loading saved game..."
399 msgstr "Caricamento partita..."
400
401 #: ../../../src/GameStateLoad.cpp:731
402 msgid "Invalid save"
403 msgstr "Salvataggio corrotto"
404
405 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
406 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
407 #: ../../../src/MenuPowers.cpp:1542
408 #, c-format
409 msgid "Level %d"
410 msgstr "Livello %d"
411
412 #: ../../../src/GameStateNew.cpp:68
413 msgid "Create"
414 msgstr "Crea"
415
416 #: ../../../src/GameStateNew.cpp:76
417 msgid "Randomize"
418 msgstr ""
419
420 #: ../../../src/GameStateNew.cpp:92
421 msgid "Choose a Portrait"
422 msgstr "Scegli un ritratto"
423
424 #: ../../../src/GameStateNew.cpp:96
425 msgid "Choose a Name"
426 msgstr "Scegli un nome"
427
428 #: ../../../src/GameStateNew.cpp:100
429 msgid "Permadeath?"
430 msgstr "Morte definitiva?"
431
432 #: ../../../src/GameStateNew.cpp:104
433 msgid "Choose a Class"
434 msgstr "Scegli una classe"
435
436 #: ../../../src/GameStateTitle.cpp:108
437 msgid "Play Game"
438 msgstr "Gioca"
439
440 #: ../../../src/GameStateTitle.cpp:111
441 msgid "Enable a core mod to continue"
442 msgstr "Abilitare una mod core per continuare"
443
444 #: ../../../src/GameStateTitle.cpp:115
445 msgid "Configuration"
446 msgstr "Impostazioni"
447
448 #: ../../../src/GameStateTitle.cpp:118
449 msgid "Credits"
450 msgstr "Riconoscimenti"
451
452 #: ../../../src/GameStateTitle.cpp:121
453 msgid "Exit Game"
454 msgstr "Esci dal gioco"
455
456 #: ../../../src/InputState.cpp:402
457 msgid "Accept"
458 msgstr "Accetta"
459
460 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
461 msgid "Up"
462 msgstr "Su"
463
464 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
465 msgid "Down"
466 msgstr "Giù"
467
468 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
469 msgid "Left"
470 msgstr "Sinistra"
471
472 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
473 msgid "Right"
474 msgstr "Destra"
475
476 #: ../../../src/InputState.cpp:407
477 msgid "Bar1"
478 msgstr "Barra1"
479
480 #: ../../../src/InputState.cpp:408
481 msgid "Bar2"
482 msgstr "Barra2"
483
484 #: ../../../src/InputState.cpp:409
485 msgid "Bar3"
486 msgstr "Barra3"
487
488 #: ../../../src/InputState.cpp:410
489 msgid "Bar4"
490 msgstr "Barra4"
491
492 #: ../../../src/InputState.cpp:411
493 msgid "Bar5"
494 msgstr "Barra5"
495
496 #: ../../../src/InputState.cpp:412
497 msgid "Bar6"
498 msgstr "Barra6"
499
500 #: ../../../src/InputState.cpp:413
501 msgid "Bar7"
502 msgstr "Barra7"
503
504 #: ../../../src/InputState.cpp:414
505 msgid "Bar8"
506 msgstr "Barra8"
507
508 #: ../../../src/InputState.cpp:415
509 msgid "Bar9"
510 msgstr "Barra9"
511
512 #: ../../../src/InputState.cpp:416
513 msgid "Bar0"
514 msgstr "Barra0"
515
516 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
517 #: ../../../src/MenuCharacter.cpp:54
518 msgid "Character"
519 msgstr "Personaggio"
520
521 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
522 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
523 msgid "Inventory"
524 msgstr "Inventario"
525
526 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
527 #: ../../../src/MenuPowers.cpp:168
528 msgid "Powers"
529 msgstr "Poteri"
530
531 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
532 #: ../../../src/MenuLog.cpp:72
533 msgid "Log"
534 msgstr "Diario"
535
536 #: ../../../src/InputState.cpp:421
537 msgid "Main1"
538 msgstr "Principale 1"
539
540 #: ../../../src/InputState.cpp:422
541 msgid "Main2"
542 msgstr "Principale 2"
543
544 #: ../../../src/InputState.cpp:423
545 msgid "Ctrl"
546 msgstr "Ctrl"
547
548 #: ../../../src/InputState.cpp:424
549 msgid "Shift"
550 msgstr "Shift"
551
552 #: ../../../src/InputState.cpp:425
553 msgid "Alt"
554 msgstr "Alt"
555
556 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
557 msgid "Delete"
558 msgstr "Cancella"
559
560 #: ../../../src/InputState.cpp:427
561 msgid "ActionBar Accept"
562 msgstr "ActionBar Accetta"
563
564 #: ../../../src/InputState.cpp:428
565 msgid "ActionBar Left"
566 msgstr "ActionBar Sinistra"
567
568 #: ../../../src/InputState.cpp:429
569 msgid "ActionBar Right"
570 msgstr "ActionBar Destra"
571
572 #: ../../../src/InputState.cpp:430
573 msgid "ActionBar Use"
574 msgstr "ActionBar Usa"
575
576 #: ../../../src/InputState.cpp:431
577 msgid "Developer Menu"
578 msgstr "Menu Sviluppatore"
579
580 #: ../../../src/InputState.cpp:433
581 msgid "Left Mouse"
582 msgstr "Mouse sinistro"
583
584 #: ../../../src/InputState.cpp:434
585 msgid "Middle Mouse"
586 msgstr "Mouse centrale"
587
588 #: ../../../src/InputState.cpp:435
589 msgid "Right Mouse"
590 msgstr "Mouse destro"
591
592 #: ../../../src/InputState.cpp:436
593 msgid "Wheel Up"
594 msgstr "Rotella in alto"
595
596 #: ../../../src/InputState.cpp:437
597 msgid "Wheel Down"
598 msgstr "Rotella in basso"
599
600 #: ../../../src/InputState.cpp:438
601 msgid "Mouse X1"
602 msgstr "Mouse X1"
603
604 #: ../../../src/InputState.cpp:439
605 msgid "Mouse X2"
606 msgstr "Mouse X2"
607
608 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
609 msgid "Unknown Item"
610 msgstr "Oggetto sconosciuto"
611
612 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
613 #, c-format
614 msgid "%d%% Speed"
615 msgstr "%d%% Velocità"
616
617 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
618 #, c-format
619 msgid "%d%% Attack Speed"
620 msgstr "%d%% Velocità di Attacco"
621
622 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
623 #: ../../../src/MenuPowers.cpp:833
624 #, c-format
625 msgid "Resistance (%s)"
626 msgstr ""
627
628 #: ../../../src/ItemManager.cpp:684
629 #, c-format
630 msgid "Requires %s"
631 msgstr ""
632
633 #: ../../../src/ItemManager.cpp:733
634 msgid "Quest Item"
635 msgstr "Oggetto della missione"
636
637 #: ../../../src/ItemManager.cpp:760
638 #, c-format
639 msgid "Quality: %s"
640 msgstr "Qualità: %s"
641
642 #: ../../../src/ItemManager.cpp:785
643 #, c-format
644 msgid "Absorb: %d-%d"
645 msgstr "Assorbimento: %d-%d"
646
647 #: ../../../src/ItemManager.cpp:787
648 #, c-format
649 msgid "Absorb: %d"
650 msgstr "Assorbimento: %d"
651
652 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
653 #: ../../../src/MenuPowers.cpp:1134
654 #, c-format
655 msgid "Requires Level %d"
656 msgstr "Richiede Livello %d"
657
658 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
659 #: ../../../src/MenuPowers.cpp:1125
660 #, c-format
661 msgid "Requires %s %d"
662 msgstr "Richiede %s %d"
663
664 #: ../../../src/ItemManager.cpp:849
665 #, c-format
666 msgid "Requires Class: %s"
667 msgstr "Richiede Classe %s"
668
669 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
670 #, c-format
671 msgid "Buy Price: %d %s"
672 msgstr "Prezzo d'acquisto: %d %s"
673
674 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
675 #, c-format
676 msgid "Buy Price: %d %s each"
677 msgstr "Prezzo d'acquisto: %d %s ciascuno"
678
679 #: ../../../src/ItemManager.cpp:886
680 #, c-format
681 msgid "Sell Price: %d %s"
682 msgstr "Prezzo di vendita: %d %s"
683
684 #: ../../../src/ItemManager.cpp:888
685 #, c-format
686 msgid "Sell Price: %d %s each"
687 msgstr "Prezzo di vendita: %d %s ciascuno"
688
689 #: ../../../src/ItemManager.cpp:897
690 msgid "Set:"
691 msgstr "Completo:"
692
693 #: ../../../src/ItemManager.cpp:904
694 #, c-format
695 msgid "%d items:"
696 msgstr "%d oggetti:"
697
698 #: ../../../src/ItemManager.cpp:917
699 #, c-format
700 msgid "Press [%s] to use"
701 msgstr "Premi [%s] per usare"
702
703 #: ../../../src/ItemManager.cpp:920
704 #, c-format
705 msgid "Press [%s] to read"
706 msgstr "Premi [%s] per leggere"
707
708 #: ../../../src/MenuActionBar.cpp:87
709 msgid "Loot tooltip visibility"
710 msgstr ""
711
712 #: ../../../src/MenuActionBar.cpp:88
713 msgid "Mini-map mode"
714 msgstr ""
715
716 #: ../../../src/MenuActionBar.cpp:89
717 msgid "Always show stat bar labels"
718 msgstr "Mostra sempre le etichette della barra"
719
720 #: ../../../src/MenuActionBar.cpp:90
721 msgid "Show combat text"
722 msgstr "Mostra testo combattimento"
723
724 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
725 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
726 #, c-format
727 msgid "Hotkey: %s"
728 msgstr "Tasto rapido: %s"
729
730 #: ../../../src/MenuActionBar.cpp:474
731 #, c-format
732 msgid "Default. Temporarily show all loot tooltips with '%s'."
733 msgstr ""
734
735 #: ../../../src/MenuActionBar.cpp:476
736 #, c-format
737 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
738 msgstr ""
739
740 #: ../../../src/MenuActionBar.cpp:478
741 #, c-format
742 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
743 msgstr ""
744
745 #: ../../../src/MenuActionBar.cpp:482
746 msgid "Visible"
747 msgstr ""
748
749 #: ../../../src/MenuActionBar.cpp:484
750 msgid "Visible (2x zoom)"
751 msgstr ""
752
753 #: ../../../src/MenuActionBar.cpp:486
754 msgid "Hidden"
755 msgstr ""
756
757 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
758 msgid "Enabled"
759 msgstr ""
760
761 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
762 msgid "Disabled"
763 msgstr ""
764
765 #: ../../../src/MenuActionBar.cpp:657
766 msgid "Not enough MP."
767 msgstr ""
768
769 #: ../../../src/MenuActiveEffects.cpp:124
770 #, c-format
771 msgid "x%d"
772 msgstr "x%d"
773
774 #: ../../../src/MenuActiveEffects.cpp:219
775 msgid "Remaining:"
776 msgstr "Rimanenti:"
777
778 #: ../../../src/MenuActiveEffects.cpp:225
779 #, c-format
780 msgid "x%d stacks"
781 msgstr "x%d mucchi"
782
783 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
784 msgid "Name"
785 msgstr "Nome"
786
787 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
788 msgid "Level"
789 msgstr "Livello"
790
791 #: ../../../src/MenuCharacter.cpp:310
792 #, c-format
793 msgid "%d unspent stat point"
794 msgstr "%d punto statistiche non utilizzato"
795
796 #: ../../../src/MenuCharacter.cpp:313
797 #, c-format
798 msgid "%d unspent stat points"
799 msgstr "%d punti statistiche non utilizzati"
800
801 #: ../../../src/MenuCharacter.cpp:355
802 #, c-format
803 msgid "Reduces the damage taken from \"%s\" elemental attacks."
804 msgstr ""
805
806 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
807 #, c-format
808 msgid "XP: %d"
809 msgstr "ESP: %d"
810
811 #: ../../../src/MenuCharacter.cpp:367
812 #, c-format
813 msgid "Next: %d"
814 msgstr "Prossimo: %d"
815
816 #: ../../../src/MenuCharacter.cpp:373
817 #, c-format
818 msgid "base (%d), bonus (%d)"
819 msgstr "base (%d), bonus (%d)"
820
821 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
822 msgid "Related stats:"
823 msgstr "Statistiche associate:"
824
825 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
826 #, c-format
827 msgid "Each level grants %d."
828 msgstr "Ad ogni livello ottieni %d."
829
830 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
831 #, c-format
832 msgid "Each point of %s grants %d."
833 msgstr "Per ogni punto di %s ottieni %d."
923 #: ../../../src/MenuConfig.cpp:512
924 msgid ""
925 "Enables the below setting that controls the screen gamma level. The behavior"
926 " of the gamma setting can vary between platforms."
927 msgstr ""
928
929 #: ../../../src/MenuConfig.cpp:513
930 msgid ""
931 "Provides additional text for information that is primarily conveyed through "
932 "color."
933 msgstr ""
934
935 #: ../../../src/MenuConfig.cpp:514
936 msgid ""
937 "Some mods will automatically hide the stat bars when they are inactive. "
938 "Disabling this option will keep them displayed at all times."
939 msgstr ""
940
941 #: ../../../src/MenuConfig.cpp:515
942 msgid ""
943 "When enabled, empty equipment slots will be filled with applicable items "
944 "when they are obtained."
945 msgstr ""
946
947 #: ../../../src/MenuConfig.cpp:516
948 msgid ""
949 "Shows a marker above enemies, allies, and the player when they are obscured "
950 "by tall objects."
951 msgstr ""
952
953 #: ../../../src/MenuConfig.cpp:517
954 msgid ""
955 "This allows the game to be controlled entirely with the keyboard (or "
956 "joystick)."
957 msgstr ""
958
959 #: ../../../src/MenuConfig.cpp:518
960 msgid ""
961 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
962 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
963 "instead of 'Main1'."
964 msgstr ""
965
966 #: ../../../src/MenuConfig.cpp:519
967 msgid ""
968 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
969 "assigned to the movement button can be used by targeting an enemy. If this "
970 "setting is disabled, it is required to use 'Shift' to access the Power "
971 "assigned to the movement button."
972 msgstr ""
973
974 #: ../../../src/MenuConfig.cpp:520
975 msgid ""
976 "The player's attacks will be aimed in the direction of the mouse cursor when"
977 " this is enabled."
978 msgstr ""
979
980 #: ../../../src/MenuConfig.cpp:571
981 msgid "Active Mods"
982 msgstr "Mod attive"
983
984 #: ../../../src/MenuConfig.cpp:580
985 msgid "Available Mods"
986 msgstr "Mod disponibili"
987
988 #: ../../../src/MenuConfig.cpp:599
989 msgid "<< Disable"
990 msgstr "<< Disabilita"
991
992 #: ../../../src/MenuConfig.cpp:605
993 msgid "Enable >>"
994 msgstr "Abilita >>"
995
996 #: ../../../src/MenuConfig.cpp:1436
997 msgid "Version:"
998 msgstr "Versione:"
999
1000 #: ../../../src/MenuConfig.cpp:1441
1001 msgid "Game:"
1002 msgstr "Gioco:"
1003
1004 #: ../../../src/MenuConfig.cpp:1446
1005 msgid "Engine version:"
1006 msgstr "Versione motore di gioco:"
1007
1008 #: ../../../src/MenuConfig.cpp:1454
1009 msgid "Requires mods:"
1010 msgstr "Richiede mod:"
1011
1012 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
1013 msgid "(none)"
1014 msgstr "(nessuno)"
1015
1016 #: ../../../src/MenuConfig.cpp:1579
1017 msgid "Save & Exit"
1018 msgstr "Salva ed esci"
8341019
8351020 #: ../../../src/MenuDevConsole.cpp:63
8361021 msgid "Execute"
9971182 msgid "HINT: Type help"
9981183 msgstr "SUGGERIMENTO: Digita help"
9991184
1000 #: ../../../src/MenuEnemy.cpp:138
1185 #: ../../../src/MenuEnemy.cpp:162
10011186 #, c-format
10021187 msgid "%s level %d"
10031188 msgstr "%s livello %d"
10041189
1005 #: ../../../src/MenuEnemy.cpp:162
1190 #: ../../../src/MenuEnemy.cpp:186
10061191 msgid "Dead"
10071192 msgstr "Morto"
10081193
1009 #: ../../../src/MenuEnemy.cpp:164
1194 #: ../../../src/MenuEnemy.cpp:188
10101195 msgid "Destroyed"
10111196 msgstr "Distrutto"
10121197
1013 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
1014 msgid "Paused"
1015 msgstr "In pausa"
1016
1017 #: ../../../src/MenuExit.cpp:91
1018 msgid "Save & Exit"
1019 msgstr "Salva ed esci"
1020
1021 #: ../../../src/MenuExit.cpp:92
1022 msgid "Exit"
1023 msgstr "Esci"
1024
1025 #: ../../../src/MenuExit.cpp:96
1026 msgid "Continue"
1027 msgstr "Continua"
1028
1029 #: ../../../src/MenuInventory.cpp:73
1030 msgid "Automatically equip items"
1031 msgstr "Equipaggia gli oggetti automaticamente"
1032
1033 #: ../../../src/MenuInventory.cpp:188
1198 #: ../../../src/MenuInventory.cpp:177
10341199 #, c-format
10351200 msgid "Lost %d%% of %s."
10361201 msgstr "Hai perso il %d%% di %s."
10371202
1038 #: ../../../src/MenuInventory.cpp:195
1203 #: ../../../src/MenuInventory.cpp:184
10391204 #, c-format
10401205 msgid "Lost %d%% of total XP."
10411206 msgstr "Hai perso il %d%% di ESP totale."
10421207
1043 #: ../../../src/MenuInventory.cpp:200
1208 #: ../../../src/MenuInventory.cpp:189
10441209 #, c-format
10451210 msgid "Lost %d%% of current level XP."
10461211 msgstr "Hai perso il %d%% del livello ESP attuale."
10471212
1048 #: ../../../src/MenuInventory.cpp:226
1213 #: ../../../src/MenuInventory.cpp:215
10491214 #, c-format
10501215 msgid "Lost %s."
10511216 msgstr "Hai perso %s."
10521217
1053 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1218 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10541219 #, c-format
10551220 msgid "%d %s"
10561221 msgstr "%d %s"
10571222
1058 #: ../../../src/MenuInventory.cpp:317
1223 #: ../../../src/MenuInventory.cpp:300
10591224 msgid "Pick up item(s):"
10601225 msgstr "Raccogli oggetto/i:"
10611226
1062 #: ../../../src/MenuInventory.cpp:318
1227 #: ../../../src/MenuInventory.cpp:301
10631228 msgid "Use or equip item:"
10641229 msgstr "Usa o equipaggia oggetto:"
10651230
1066 #: ../../../src/MenuInventory.cpp:319
1231 #: ../../../src/MenuInventory.cpp:302
10671232 #, c-format
10681233 msgid "%s modifiers"
10691234 msgstr "%s modificatori"
10701235
1071 #: ../../../src/MenuInventory.cpp:320
1236 #: ../../../src/MenuInventory.cpp:303
10721237 msgid "Select a quantity of item:"
10731238 msgstr "Seleziona una quantità di oggetti:"
10741239
1075 #: ../../../src/MenuInventory.cpp:323
1240 #: ../../../src/MenuInventory.cpp:306
10761241 msgid "Stash item stack:"
10771242 msgstr "Accantona gruppo di oggetti:"
10781243
1079 #: ../../../src/MenuInventory.cpp:325
1244 #: ../../../src/MenuInventory.cpp:308
10801245 msgid "Sell item stack:"
10811246 msgstr "Vendi gruppo di oggetti:"
10821247
1083 #: ../../../src/MenuInventory.cpp:592
1248 #: ../../../src/MenuInventory.cpp:574
10841249 msgid "You don't have enough of the required item."
10851250 msgstr "Non ne hai a sufficienza."
10861251
1087 #: ../../../src/MenuInventory.cpp:599
1252 #: ../../../src/MenuInventory.cpp:586
10881253 msgid "You can't use this item right now."
10891254 msgstr "Adesso non puoi usare questo oggetto."
10901255
1091 #: ../../../src/MenuInventory.cpp:611
1256 #: ../../../src/MenuInventory.cpp:598
10921257 msgid "This item can only be used from the action bar."
10931258 msgstr "Questo elemento può essere usato solo dalla barra azioni."
10941259
1095 #: ../../../src/MenuInventory.cpp:729
1260 #: ../../../src/MenuInventory.cpp:716
10961261 msgid "Inventory is full."
10971262 msgstr "L'inventario è pieno."
10981263
1099 #: ../../../src/MenuInventory.cpp:849
1264 #: ../../../src/MenuInventory.cpp:841
11001265 #, c-format
11011266 msgid "Not enough %s."
11021267 msgstr "Non hai abbastanza %s."
11031268
1104 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1269 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
11051270 msgid "This item can not be sold."
11061271 msgstr "Questo oggetto non può essere venduto."
11071272
11131278 msgid "Quests"
11141279 msgstr "Missioni"
11151280
1116 #: ../../../src/MenuManager.cpp:286
1281 #: ../../../src/MenuManager.cpp:296
11171282 #, c-format
11181283 msgid "XP: %d/%d"
11191284 msgstr "ESP: %d/%d"
11201285
1121 #: ../../../src/MenuManager.cpp:827
1286 #: ../../../src/MenuManager.cpp:854
11221287 msgid "This item can not be dropped."
11231288 msgstr "Questo oggetto non può essere gettato via."
11241289
11261291 msgid "Enter amount:"
11271292 msgstr "Inserisci quantità:"
11281293
1129 #: ../../../src/MenuPowers.cpp:787
1294 #: ../../../src/MenuPowers.cpp:786
11301295 msgid "Passive"
11311296 msgstr "Passivo"
11321297
1133 #: ../../../src/MenuPowers.cpp:792
1298 #: ../../../src/MenuPowers.cpp:791
11341299 #, c-format
11351300 msgid "Costs %d MP"
11361301 msgstr "Costa %d Mana"
11371302
1138 #: ../../../src/MenuPowers.cpp:796
1303 #: ../../../src/MenuPowers.cpp:795
11391304 #, c-format
11401305 msgid "Costs %d HP"
11411306 msgstr "Costa %d Salute"
11421307
1143 #: ../../../src/MenuPowers.cpp:801
1308 #: ../../../src/MenuPowers.cpp:800
11441309 msgid "Cooldown:"
11451310 msgstr "Raffreddamento:"
11461311
1147 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1312 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11481313 msgid "Damage per second"
11491314 msgstr "Danno per secondo"
11501315
1151 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1316 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11521317 msgid "HP per second"
11531318 msgstr "Salute per secondo"
11541319
1155 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1320 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11561321 msgid "MP per second"
11571322 msgstr "Mana per secondo"
11581323
1159 #: ../../../src/MenuPowers.cpp:885
1324 #: ../../../src/MenuPowers.cpp:884
11601325 msgid "Immobilize"
11611326 msgstr "Immobilizzare"
11621327
1163 #: ../../../src/MenuPowers.cpp:893
1328 #: ../../../src/MenuPowers.cpp:892
11641329 msgid "Immunity"
11651330 msgstr "Immunità"
11661331
1167 #: ../../../src/MenuPowers.cpp:896
1332 #: ../../../src/MenuPowers.cpp:895
11681333 msgid "Immunity to damage over time"
11691334 msgstr "Immunità ai danni nel tempo"
11701335
1171 #: ../../../src/MenuPowers.cpp:899
1336 #: ../../../src/MenuPowers.cpp:898
11721337 msgid "Immunity to slow"
11731338 msgstr "Immunità al rallentamento"
11741339
1175 #: ../../../src/MenuPowers.cpp:902
1340 #: ../../../src/MenuPowers.cpp:901
11761341 msgid "Immunity to stun"
11771342 msgstr "Immunità allo stordimento"
11781343
1179 #: ../../../src/MenuPowers.cpp:905
1344 #: ../../../src/MenuPowers.cpp:904
11801345 msgid "Immunity to HP steal"
11811346 msgstr "Immunità al furto di Salute"
11821347
1183 #: ../../../src/MenuPowers.cpp:908
1348 #: ../../../src/MenuPowers.cpp:907
11841349 msgid "Immunity to MP steal"
11851350 msgstr "Immunità al furto di Mana"
11861351
1187 #: ../../../src/MenuPowers.cpp:911
1352 #: ../../../src/MenuPowers.cpp:910
11881353 msgid "Immunity to knockback"
11891354 msgstr "Immunità al colpo all'indietro"
11901355
1191 #: ../../../src/MenuPowers.cpp:914
1356 #: ../../../src/MenuPowers.cpp:913
11921357 msgid "Immunity to damage reflection"
11931358 msgstr "Immunità al danno riflesso"
11941359
1195 #: ../../../src/MenuPowers.cpp:917
1360 #: ../../../src/MenuPowers.cpp:916
11961361 msgid "Stun"
11971362 msgstr "Stordimento"
11981363
1199 #: ../../../src/MenuPowers.cpp:920
1364 #: ../../../src/MenuPowers.cpp:919
12001365 msgid "Automatic revive on death"
12011366 msgstr "Rivive automaticamente alla la morte"
12021367
1203 #: ../../../src/MenuPowers.cpp:923
1368 #: ../../../src/MenuPowers.cpp:922
12041369 msgid "Convert"
12051370 msgstr "Convertire"
12061371
1207 #: ../../../src/MenuPowers.cpp:926
1372 #: ../../../src/MenuPowers.cpp:925
12081373 msgid "Fear"
12091374 msgstr "Paura"
12101375
1211 #: ../../../src/MenuPowers.cpp:929
1376 #: ../../../src/MenuPowers.cpp:928
12121377 msgid "Lifespan"
12131378 msgstr "Durata della vita"
12141379
1215 #: ../../../src/MenuPowers.cpp:953
1380 #: ../../../src/MenuPowers.cpp:952
12161381 msgid "Magical Shield"
12171382 msgstr "Scudo Magico"
12181383
1219 #: ../../../src/MenuPowers.cpp:982
1384 #: ../../../src/MenuPowers.cpp:981
12201385 msgid "Healing"
12211386 msgstr "Guarigione"
12221387
1223 #: ../../../src/MenuPowers.cpp:985
1388 #: ../../../src/MenuPowers.cpp:984
12241389 msgid "Knockback"
12251390 msgstr "Contraccolpo"
12261391
1227 #: ../../../src/MenuPowers.cpp:1010
1392 #: ../../../src/MenuPowers.cpp:1009
12281393 #, c-format
12291394 msgid "%d%% chance"
12301395 msgstr "possibilità %d%%"
12311396
1232 #: ../../../src/MenuPowers.cpp:1062
1397 #: ../../../src/MenuPowers.cpp:1061
12331398 msgid "Base Accuracy"
12341399 msgstr "Precisione di Base"
12351400
1236 #: ../../../src/MenuPowers.cpp:1082
1401 #: ../../../src/MenuPowers.cpp:1081
12371402 msgid "Base Critical Chance"
12381403 msgstr "Possibilità di Colpo Critico di Base"
12391404
1240 #: ../../../src/MenuPowers.cpp:1090
1405 #: ../../../src/MenuPowers.cpp:1089
12411406 msgid "Ignores Absorbtion"
12421407 msgstr "Ignora l'assorbimento"
12431408
1244 #: ../../../src/MenuPowers.cpp:1095
1409 #: ../../../src/MenuPowers.cpp:1094
12451410 msgid "Ignores Avoidance"
12461411 msgstr "Ignora Schivata"
12471412
1248 #: ../../../src/MenuPowers.cpp:1100
1413 #: ../../../src/MenuPowers.cpp:1099
12491414 #, c-format
12501415 msgid "%d%% Chance to crit slowed targets"
12511416 msgstr "%d%% Possibilità di colpo critico sui bersagli rallentati"
12521417
1253 #: ../../../src/MenuPowers.cpp:1105
1418 #: ../../../src/MenuPowers.cpp:1104
12541419 #, c-format
12551420 msgid "Elemental Damage (%s)"
12561421 msgstr ""
12571422
1258 #: ../../../src/MenuPowers.cpp:1114
1423 #: ../../../src/MenuPowers.cpp:1113
12591424 #, c-format
12601425 msgid "Requires a %s"
12611426 msgstr "Richiede un %s"
12621427
1263 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1428 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12641429 #, c-format
12651430 msgid "Requires Power: %s"
12661431 msgstr "Richiede Potere: %s"
12671432
1268 #: ../../../src/MenuPowers.cpp:1163
1433 #: ../../../src/MenuPowers.cpp:1162
12691434 msgid "Click to Unlock (uses 1 Skill Point)"
12701435 msgstr "Clicca per sbloccare (usa 1 Punto Abilità)"
12711436
1272 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1437 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12731438 msgid "Requires 1 Skill Point"
12741439 msgstr "Richiede 1 Punto Abilità"
12751440
1276 #: ../../../src/MenuPowers.cpp:1355
1441 #: ../../../src/MenuPowers.cpp:1354
12771442 #, c-format
12781443 msgid "%d unspent skill point"
12791444 msgstr "%d punto abilità non utilizzato"
12801445
1281 #: ../../../src/MenuPowers.cpp:1358
1446 #: ../../../src/MenuPowers.cpp:1357
12821447 #, c-format
12831448 msgid "%d unspent skill points"
12841449 msgstr "%d punti abilità non utilizzati"
12851450
1286 #: ../../../src/MenuPowers.cpp:1388
1451 #: ../../../src/MenuPowers.cpp:1387
12871452 msgid "Next Level:"
12881453 msgstr "Prossimo livello:"
12891454
1290 #: ../../../src/MenuStash.cpp:96
1291 msgid "Shared Stash"
1292 msgstr "Scorta condivisa"
1293
1294 #: ../../../src/MenuStash.cpp:209
1455 #: ../../../src/MenuStash.cpp:53
1456 msgid "Private"
1457 msgstr ""
1458
1459 #: ../../../src/MenuStash.cpp:55
1460 msgid "Shared"
1461 msgstr ""
1462
1463 #: ../../../src/MenuStash.cpp:103
1464 msgid "Stash"
1465 msgstr ""
1466
1467 #: ../../../src/MenuStash.cpp:258
12951468 msgid "Can not store quest items in the stash."
12961469 msgstr "Impossibile memorizzare gli elementi della ricerca nello stash."
12971470
1298 #: ../../../src/MenuStash.cpp:219
1471 #: ../../../src/MenuStash.cpp:263
1472 msgid "This item can not be stored in the stash."
1473 msgstr ""
1474
1475 #: ../../../src/MenuStash.cpp:268
1476 msgid "This item can not be stored in the private stash."
1477 msgstr ""
1478
1479 #: ../../../src/MenuStash.cpp:273
1480 msgid "This item can not be stored in the shared stash."
1481 msgstr ""
1482
1483 #: ../../../src/MenuStash.cpp:283
12991484 msgid "Stash is full."
13001485 msgstr "L'inventario è pieno."
13011486
1302 #: ../../../src/MenuTalker.cpp:454
1487 #: ../../../src/MenuStash.cpp:340
1488 #, c-format
1489 msgid "Can not store item in stash: %s"
1490 msgstr ""
1491
1492 #: ../../../src/MenuTalker.cpp:447
1493 #, c-format
1494 msgid "<dialog node %d>"
1495 msgstr ""
1496
1497 #: ../../../src/MenuTalker.cpp:455
13031498 msgid "Trade"
13041499 msgstr "Commercio"
13051500
13071502 msgid "Buyback"
13081503 msgstr "Ricompra"
13091504
1310 #: ../../../src/MenuVendor.cpp:279
1505 #: ../../../src/MenuVendor.cpp:281
13111506 msgid "Vendor"
13121507 msgstr "Venditore"
13131508
1314 #: ../../../src/PowerManager.cpp:1136
1509 #: ../../../src/PowerManager.cpp:1170
13151510 #, c-format
13161511 msgid "+%d Shield"
13171512 msgstr "+%d Scudo"
13181513
1319 #: ../../../src/PowerManager.cpp:1392
1514 #: ../../../src/PowerManager.cpp:1426
13201515 msgid "You are already transformed, untransform first."
13211516 msgstr "Sei già trasformato, annulla trasformazione prima."
13221517
1323 #: ../../../src/PowerManager.cpp:1404
1518 #: ../../../src/PowerManager.cpp:1438
13241519 msgid "Could not untransform at this position."
13251520 msgstr "Impossibile detrasformarsi da questa posizione."
13261521
13281523 msgid "Completed Quests"
13291524 msgstr ""
13301525
1331 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1526 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13321527 msgid "Game saved."
13331528 msgstr "Partita salvata."
13341529
1335 #: ../../../src/SDLInputState.cpp:582
1530 #: ../../../src/SDLInputState.cpp:643
1531 msgid "BkSp"
1532 msgstr ""
1533
1534 #: ../../../src/SDLInputState.cpp:644
1535 msgid "Caps"
1536 msgstr ""
1537
1538 #: ../../../src/SDLInputState.cpp:645
1539 msgid "Del"
1540 msgstr ""
1541
1542 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1543 msgid "End"
1544 msgstr "Fine"
1545
1546 #: ../../../src/SDLInputState.cpp:648
1547 msgid "Esc"
1548 msgstr ""
1549
1550 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1551 msgid "Home"
1552 msgstr "Tasto Home"
1553
1554 #: ../../../src/SDLInputState.cpp:650
1555 msgid "Ins"
1556 msgstr ""
1557
1558 #: ../../../src/SDLInputState.cpp:651
1559 msgid "LAlt"
1560 msgstr ""
1561
1562 #: ../../../src/SDLInputState.cpp:652
1563 msgid "LCtrl"
1564 msgstr ""
1565
1566 #: ../../../src/SDLInputState.cpp:654
1567 msgid "LShft"
1568 msgstr ""
1569
1570 #: ../../../src/SDLInputState.cpp:655
1571 msgid "Num"
1572 msgstr ""
1573
1574 #: ../../../src/SDLInputState.cpp:656
1575 msgid "PgDn"
1576 msgstr ""
1577
1578 #: ../../../src/SDLInputState.cpp:657
1579 msgid "PgUp"
1580 msgstr ""
1581
1582 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1583 msgid "Pause"
1584 msgstr "Pausa"
1585
1586 #: ../../../src/SDLInputState.cpp:659
1587 msgid "Print"
1588 msgstr ""
1589
1590 #: ../../../src/SDLInputState.cpp:660
1591 msgid "RAlt"
1592 msgstr ""
1593
1594 #: ../../../src/SDLInputState.cpp:661
1595 msgid "RCtrl"
1596 msgstr ""
1597
1598 #: ../../../src/SDLInputState.cpp:662
1599 msgid "Ret"
1600 msgstr ""
1601
1602 #: ../../../src/SDLInputState.cpp:664
1603 msgid "RShft"
1604 msgstr ""
1605
1606 #: ../../../src/SDLInputState.cpp:665
1607 msgid "SLock"
1608 msgstr ""
1609
1610 #: ../../../src/SDLInputState.cpp:666
1611 msgid "Spc"
1612 msgstr ""
1613
1614 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1615 msgid "Tab"
1616 msgstr "Tasto di Tabulazione"
1617
1618 #: ../../../src/SDLInputState.cpp:673
13361619 msgid "Backspace"
13371620 msgstr "Backspace"
13381621
1339 #: ../../../src/SDLInputState.cpp:583
1622 #: ../../../src/SDLInputState.cpp:674
13401623 msgid "CapsLock"
13411624 msgstr "Blocco Maiuscole"
13421625
1343 #: ../../../src/SDLInputState.cpp:586
1344 msgid "End"
1345 msgstr "Fine"
1346
1347 #: ../../../src/SDLInputState.cpp:587
1626 #: ../../../src/SDLInputState.cpp:678
13481627 msgid "Escape"
13491628 msgstr "Esc"
13501629
1351 #: ../../../src/SDLInputState.cpp:588
1352 msgid "Home"
1353 msgstr "Tasto Home"
1354
1355 #: ../../../src/SDLInputState.cpp:589
1630 #: ../../../src/SDLInputState.cpp:680
13561631 msgid "Insert"
13571632 msgstr "Inserisci"
13581633
1359 #: ../../../src/SDLInputState.cpp:590
1634 #: ../../../src/SDLInputState.cpp:681
13601635 msgid "Left Alt"
13611636 msgstr "Alt sinistro"
13621637
1363 #: ../../../src/SDLInputState.cpp:591
1638 #: ../../../src/SDLInputState.cpp:682
13641639 msgid "Left Ctrl"
13651640 msgstr "Ctrl sinistro"
13661641
1367 #: ../../../src/SDLInputState.cpp:593
1642 #: ../../../src/SDLInputState.cpp:684
13681643 msgid "Left Shift"
13691644 msgstr "Shift sinistro"
13701645
1371 #: ../../../src/SDLInputState.cpp:594
1646 #: ../../../src/SDLInputState.cpp:685
13721647 msgid "NumLock"
13731648 msgstr "Blocco Tastiera Numerica"
13741649
1375 #: ../../../src/SDLInputState.cpp:595
1650 #: ../../../src/SDLInputState.cpp:686
13761651 msgid "PageDown"
13771652 msgstr "Pagina giù"
13781653
1379 #: ../../../src/SDLInputState.cpp:596
1654 #: ../../../src/SDLInputState.cpp:687
13801655 msgid "PageUp"
13811656 msgstr "Pagina su"
13821657
1383 #: ../../../src/SDLInputState.cpp:597
1384 msgid "Pause"
1385 msgstr "Pausa"
1386
1387 #: ../../../src/SDLInputState.cpp:598
1658 #: ../../../src/SDLInputState.cpp:689
13881659 msgid "PrintScreen"
13891660 msgstr "Stampa Schermo"
13901661
1391 #: ../../../src/SDLInputState.cpp:599
1662 #: ../../../src/SDLInputState.cpp:690
13921663 msgid "Right Alt"
13931664 msgstr "Alt destro"
13941665
1395 #: ../../../src/SDLInputState.cpp:600
1666 #: ../../../src/SDLInputState.cpp:691
13961667 msgid "Right Ctrl"
13971668 msgstr "Ctrl destro"
13981669
1399 #: ../../../src/SDLInputState.cpp:601
1670 #: ../../../src/SDLInputState.cpp:692
14001671 msgid "Return"
14011672 msgstr "Invio"
14021673
1403 #: ../../../src/SDLInputState.cpp:603
1674 #: ../../../src/SDLInputState.cpp:694
14041675 msgid "Right Shift"
14051676 msgstr "Shift destro"
14061677
1407 #: ../../../src/SDLInputState.cpp:604
1678 #: ../../../src/SDLInputState.cpp:695
14081679 msgid "ScrollLock"
14091680 msgstr "Blocco Scorrimento"
14101681
1411 #: ../../../src/SDLInputState.cpp:605
1682 #: ../../../src/SDLInputState.cpp:696
14121683 msgid "Space"
14131684 msgstr "Spazio"
14141685
1415 #: ../../../src/SDLInputState.cpp:606
1416 msgid "Tab"
1417 msgstr "Tasto di Tabulazione"
1418
1419 #: ../../../src/SDLInputState.cpp:620
1686 #: ../../../src/SDLInputState.cpp:710
1687 #, c-format
1688 msgid "M%d"
1689 msgstr ""
1690
1691 #: ../../../src/SDLInputState.cpp:716
14201692 #, c-format
14211693 msgid "Mouse %d"
14221694 msgstr "Mouse %d"
14231695
1424 #: ../../../src/SDLInputState.cpp:628
1696 #: ../../../src/SDLInputState.cpp:726
1697 #, c-format
1698 msgid "JX%d-"
1699 msgstr ""
1700
1701 #: ../../../src/SDLInputState.cpp:728
14251702 #, c-format
14261703 msgid "Axis %d -"
14271704 msgstr "Asse %d -"
14281705
1429 #: ../../../src/SDLInputState.cpp:630
1706 #: ../../../src/SDLInputState.cpp:732
1707 #, c-format
1708 msgid "JX%d+"
1709 msgstr ""
1710
1711 #: ../../../src/SDLInputState.cpp:734
14301712 #, c-format
14311713 msgid "Axis %d +"
14321714 msgstr "Asse %d +"
14331715
1434 #: ../../../src/SDLInputState.cpp:633
1716 #: ../../../src/SDLInputState.cpp:739
1717 #, c-format
1718 msgid "JB%d"
1719 msgstr ""
1720
1721 #: ../../../src/SDLInputState.cpp:741
14351722 #, c-format
14361723 msgid "Button %d"
14371724 msgstr "Tasto %d"
14381725
1439 #: ../../../src/SDLInputState.cpp:637
1440 msgid "(none)"
1441 msgstr "(nessuno)"
1442
1443 #: ../../../src/SDLInputState.cpp:677
1726 #: ../../../src/SDLInputState.cpp:788
14441727 msgid "Touch control D-Pad"
14451728 msgstr ""
14461729
1447 #: ../../../src/SDLInputState.cpp:701
1730 #: ../../../src/SDLInputState.cpp:812
14481731 msgid "Touch control buttons"
14491732 msgstr ""
14501733
1451 #: ../../../src/SDLInputState.cpp:716
1734 #: ../../../src/SDLInputState.cpp:827
14521735 msgid "Tap"
14531736 msgstr "Colpetto"
14541737
1455 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1456 #: ../../../src/SDLInputState.cpp:768
1738 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1739 #, c-format
1740 msgid "Can not bind: %s"
1741 msgstr ""
1742
1743 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1744 #: ../../../src/SDLInputState.cpp:901
14571745 #, c-format
14581746 msgid "'%s' is no longer bound to:"
14591747 msgstr "'%s' non è più collegato a:"
16161904 msgid "k"
16171905 msgstr "k"
16181906
1619 #: ../../../src/Utils.cpp:580
1907 #: ../../../src/Utils.cpp:616
16201908 #, c-format
16211909 msgid "%s second"
16221910 msgstr "%s secondo"
16231911
1624 #: ../../../src/Utils.cpp:583
1912 #: ../../../src/Utils.cpp:619
16251913 #, c-format
16261914 msgid "%s seconds"
16271915 msgstr "%s secondi"
44 #
55 # Translators:
66 # Justin Jacobs <jajdorkster@gmail.com>, 2018
7 # Ooyama Yosiyuki <qqke6wd9k@apricot.ocn.ne.jp>, 2019
78 #
89 #, fuzzy
910 msgid ""
1011 msgstr ""
1112 "Project-Id-Version: PACKAGE VERSION\n"
1213 "Report-Msgid-Bugs-To: \n"
13 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
14 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1415 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
15 "Last-Translator: Justin Jacobs <jajdorkster@gmail.com>, 2018\n"
16 "Last-Translator: Ooyama Yosiyuki <qqke6wd9k@apricot.ocn.ne.jp>, 2019\n"
1617 "Language-Team: Japanese (https://www.transifex.com/flareorg/teams/84925/ja/)\n"
1718 "MIME-Version: 1.0\n"
1819 "Content-Type: text/plain; charset=UTF-8\n"
2021 "Language: ja\n"
2122 "Plural-Forms: nplurals=1; plural=0;\n"
2223
23 #: ../../../src/Avatar.cpp:367
24 #: ../../../src/Avatar.cpp:387
25 msgid "Your health is low!"
26 msgstr "ヘルスが低いです!"
27
28 #: ../../../src/Avatar.cpp:419
2429 #, c-format
2530 msgid "Congratulations, you have reached level %d!"
2631 msgstr "おめでとう、 レベル %d に達している!"
2732
28 #: ../../../src/Avatar.cpp:369
29 msgid "You may increase one attribute through the Character Menu."
30 msgstr "キャラクターメニューを介して 1つの属性を高めることが可能です。"
31
32 #: ../../../src/Avatar.cpp:583
33 #: ../../../src/Avatar.cpp:421
34 msgid "You may increase one or more attributes through the Character Menu."
35 msgstr "メニューのキャラクターを通して属性を上げることができます。"
36
37 #: ../../../src/Avatar.cpp:425
38 msgid "You may unlock one or more abilities through the Powers Menu."
39 msgstr "メニューのパワーを通してアビリティー解放ができます。"
40
41 #: ../../../src/Avatar.cpp:692
3342 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3443 msgstr "あなたは負けてしまった。 ゲームオーバー! ${INPUT_CONTINUE} を押すと終了してタイトル画面に戻ります。"
3544
36 #: ../../../src/Avatar.cpp:589
45 #: ../../../src/Avatar.cpp:698
3746 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
3847 msgstr "あなたは負けてしまった。 ${INPUT_CONTINUE} を押して続行します。"
3948
40 #: ../../../src/Avatar.cpp:839
49 #: ../../../src/Avatar.cpp:949
4150 msgid "Transformation expired. You have been moved back to a safe place."
4251 msgstr ""
4352
4655 msgid "%d %s removed."
4756 msgstr "%d %s を失った。"
4857
49 #: ../../../src/CampaignManager.cpp:162
58 #: ../../../src/CampaignManager.cpp:165
59 #, c-format
60 msgid "%s x%d removed."
61 msgstr ""
62
63 #: ../../../src/CampaignManager.cpp:167
5064 #, c-format
5165 msgid "%s removed."
5266 msgstr "%s を失った。"
5367
54 #: ../../../src/CampaignManager.cpp:175
68 #: ../../../src/CampaignManager.cpp:180
5569 #, c-format
5670 msgid "You receive %s."
5771 msgstr "あなたは %s を入手する。"
5872
59 #: ../../../src/CampaignManager.cpp:177
73 #: ../../../src/CampaignManager.cpp:182
6074 #, c-format
6175 msgid "You receive %s x%d."
6276 msgstr "あなたは %s x %d を入手する。"
6377
64 #: ../../../src/CampaignManager.cpp:186
78 #: ../../../src/CampaignManager.cpp:191
6579 #, c-format
6680 msgid "You receive %d %s."
6781 msgstr "あなたは %d %s を入手する。"
6882
69 #: ../../../src/CampaignManager.cpp:195
83 #: ../../../src/CampaignManager.cpp:200
7084 #, c-format
7185 msgid "You receive %d XP."
7286 msgstr "あなたは %d XP を入手する。"
7387
74 #: ../../../src/CampaignManager.cpp:201
88 #: ../../../src/CampaignManager.cpp:206
7589 msgid "HP restored."
7690 msgstr "HP が回復した。"
7791
78 #: ../../../src/CampaignManager.cpp:205
92 #: ../../../src/CampaignManager.cpp:210
7993 msgid "MP restored."
8094 msgstr "MP が回復した。"
8195
82 #: ../../../src/CampaignManager.cpp:210
96 #: ../../../src/CampaignManager.cpp:215
8397 msgid "HP and MP restored."
8498 msgstr "HP と MP が回復した。"
8599
86 #: ../../../src/CampaignManager.cpp:214
100 #: ../../../src/CampaignManager.cpp:219
87101 msgid "Negative effects removed."
88102 msgstr "負の影響は排除"
89103
90 #: ../../../src/CampaignManager.cpp:220
104 #: ../../../src/CampaignManager.cpp:225
91105 msgid "HP and MP restored, negative effects removed"
92106 msgstr "HPとMPが回復、負の効果は除去"
93107
96110 "SDL software renderer\n"
97111 "\n"
98112 "Often slower, but less likely to have issues."
99 msgstr ""
113 msgstr "SDL ソフトウェアレンダラーはおそいですが、いくつかのトラブルを無くせるかもしれません。"
100114
101115 #: ../../../src/DeviceList.cpp:59
102116 msgid ""
103117 "SDL hardware renderer\n"
104118 "\n"
105119 "The default renderer that is often faster than the SDL software renderer."
106 msgstr ""
107
108 #: ../../../src/EngineSettings.cpp:561
120 msgstr "SDL ハードウェアレンダラーは標準設定であり、SDLソフトウェアレンダラーよりも速いでしょう。"
121
122 #: ../../../src/EngineSettings.cpp:572
109123 msgid "Adventurer"
110124 msgstr "冒険家"
111125
112 #: ../../../src/Entity.cpp:511
126 #: ../../../src/Entity.cpp:522
113127 msgid "miss"
114128 msgstr "ミス"
115129
116 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
117 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
130 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
131 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
118132 #, c-format
119133 msgid "+%d HP"
120134 msgstr "+%d HP"
121135
122 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
123 #: ../../../src/StatBlock.cpp:822
136 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
137 #: ../../../src/StatBlock.cpp:830
124138 #, c-format
125139 msgid "+%d MP"
126140 msgstr "+%d MP"
127141
128 #: ../../../src/EventManager.cpp:738
142 #: ../../../src/EventManager.cpp:782
129143 msgid "Unknown destination"
130144 msgstr "未知の目的地"
131145
132 #: ../../../src/GameStateConfigBase.cpp:89
133 #: ../../../src/GameStateConfigBase.cpp:110
146 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
147 msgid "Loading..."
148 msgstr "読み込み中..."
149
150 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
151 msgid "Delete Save"
152 msgstr "セーブデータを削除"
153
154 #: ../../../src/GameStateLoad.cpp:90
155 msgid "Delete this save?"
156 msgstr "このセーブデータを削除しますか?"
157
158 #: ../../../src/GameStateLoad.cpp:92
159 msgid "Exit to Title"
160 msgstr "タイトルに戻る"
161
162 #: ../../../src/GameStateLoad.cpp:95
163 msgid "New Game"
164 msgstr "新しいゲーム"
165
166 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
167 msgid "Choose a Slot"
168 msgstr "スロットを選択"
169
170 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
171 msgid "Enable a story mod to continue"
172 msgstr "話モッズを有効にして継続する"
173
174 #: ../../../src/GameStateLoad.cpp:597
175 msgid "Load Game"
176 msgstr "ゲームをロード"
177
178 #: ../../../src/GameStateLoad.cpp:706
179 msgid "Entering game world..."
180 msgstr "ゲームの世界に入ります..."
181
182 #: ../../../src/GameStateLoad.cpp:709
183 msgid "Loading saved game..."
184 msgstr "セーブデータをロードしています..."
185
186 #: ../../../src/GameStateLoad.cpp:742
187 msgid "Invalid save"
188 msgstr ""
189
190 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
191 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
192 #: ../../../src/MenuPowers.cpp:1543
193 #, c-format
194 msgid "Level %d"
195 msgstr "レベル %d"
196
197 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
198 #: ../../../src/MenuConfig.cpp:244
199 msgid "Cancel"
200 msgstr "キャンセル"
201
202 #: ../../../src/GameStateNew.cpp:68
203 msgid "Create"
204 msgstr "作る"
205
206 #: ../../../src/GameStateNew.cpp:76
207 msgid "Randomize"
208 msgstr "ランダム"
209
210 #: ../../../src/GameStateNew.cpp:92
211 msgid "Choose a Portrait"
212 msgstr "肖像を選択"
213
214 #: ../../../src/GameStateNew.cpp:96
215 msgid "Choose a Name"
216 msgstr "名前を選択"
217
218 #: ../../../src/GameStateNew.cpp:100
219 msgid "Permadeath?"
220 msgstr "永久に死亡させますか?"
221
222 #: ../../../src/GameStateNew.cpp:104
223 msgid "Choose a Class"
224 msgstr "クラスを選択"
225
226 #: ../../../src/GameStateTitle.cpp:107
227 msgid "Play Game"
228 msgstr "ゲームをプレイ"
229
230 #: ../../../src/GameStateTitle.cpp:110
231 msgid "Enable a core mod to continue"
232 msgstr "コアモッズを有効にして続行"
233
234 #: ../../../src/GameStateTitle.cpp:114
235 msgid "Configuration"
236 msgstr "設定"
237
238 #: ../../../src/GameStateTitle.cpp:117
239 msgid "Credits"
240 msgstr "クレジット"
241
242 #: ../../../src/GameStateTitle.cpp:120
243 msgid "Exit Game"
244 msgstr "ゲームを終了"
245
246 #: ../../../src/InputState.cpp:407
247 msgid "Accept"
248 msgstr "了解する"
249
250 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
251 #: ../../../src/SDLInputState.cpp:698
252 msgid "Up"
253 msgstr "上"
254
255 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
256 #: ../../../src/SDLInputState.cpp:676
257 msgid "Down"
258 msgstr "下"
259
260 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
261 #: ../../../src/SDLInputState.cpp:683
262 msgid "Left"
263 msgstr "左"
264
265 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
266 #: ../../../src/SDLInputState.cpp:693
267 msgid "Right"
268 msgstr "右"
269
270 #: ../../../src/InputState.cpp:412
271 msgid "Bar1"
272 msgstr "バー1"
273
274 #: ../../../src/InputState.cpp:413
275 msgid "Bar2"
276 msgstr "バー2"
277
278 #: ../../../src/InputState.cpp:414
279 msgid "Bar3"
280 msgstr "バー3"
281
282 #: ../../../src/InputState.cpp:415
283 msgid "Bar4"
284 msgstr "バー4"
285
286 #: ../../../src/InputState.cpp:416
287 msgid "Bar5"
288 msgstr "バー5"
289
290 #: ../../../src/InputState.cpp:417
291 msgid "Bar6"
292 msgstr "バー6"
293
294 #: ../../../src/InputState.cpp:418
295 msgid "Bar7"
296 msgstr "バー7"
297
298 #: ../../../src/InputState.cpp:419
299 msgid "Bar8"
300 msgstr "バー8"
301
302 #: ../../../src/InputState.cpp:420
303 msgid "Bar9"
304 msgstr "バー9"
305
306 #: ../../../src/InputState.cpp:421
307 msgid "Bar0"
308 msgstr "バー0"
309
310 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
311 #: ../../../src/MenuCharacter.cpp:54
312 msgid "Character"
313 msgstr "キャラクター"
314
315 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
316 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
317 msgid "Inventory"
318 msgstr "物品"
319
320 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
321 #: ../../../src/MenuPowers.cpp:167
322 msgid "Powers"
323 msgstr "能力"
324
325 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
326 #: ../../../src/MenuLog.cpp:72
327 msgid "Log"
328 msgstr "ログ"
329
330 #: ../../../src/InputState.cpp:426
331 msgid "Main1"
332 msgstr "メイン1"
333
334 #: ../../../src/InputState.cpp:427
335 msgid "Main2"
336 msgstr "メイン2"
337
338 #: ../../../src/InputState.cpp:428
339 msgid "Ctrl"
340 msgstr "Ctrl"
341
342 #: ../../../src/InputState.cpp:429
343 msgid "Shift"
344 msgstr "Shift"
345
346 #: ../../../src/InputState.cpp:430
347 msgid "Alt"
348 msgstr "Alt"
349
350 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
351 msgid "Delete"
352 msgstr "削除"
353
354 #: ../../../src/InputState.cpp:432
355 msgid "ActionBar Accept"
356 msgstr "アクションバー受入"
357
358 #: ../../../src/InputState.cpp:433
359 msgid "ActionBar Left"
360 msgstr "アクションバー左"
361
362 #: ../../../src/InputState.cpp:434
363 msgid "ActionBar Right"
364 msgstr "アクションバー右"
365
366 #: ../../../src/InputState.cpp:435
367 msgid "ActionBar Use"
368 msgstr "アクションバー使用"
369
370 #: ../../../src/InputState.cpp:436
371 msgid "Developer Menu"
372 msgstr ""
373
374 #: ../../../src/InputState.cpp:438
375 msgid "Left Mouse"
376 msgstr "左マウス"
377
378 #: ../../../src/InputState.cpp:439
379 msgid "Middle Mouse"
380 msgstr "中央マウス"
381
382 #: ../../../src/InputState.cpp:440
383 msgid "Right Mouse"
384 msgstr "右マウス"
385
386 #: ../../../src/InputState.cpp:441
387 msgid "Wheel Up"
388 msgstr "マウスホイール アップ"
389
390 #: ../../../src/InputState.cpp:442
391 msgid "Wheel Down"
392 msgstr "マウスホイール ダウン"
393
394 #: ../../../src/InputState.cpp:443
395 msgid "Mouse X1"
396 msgstr "マウス X1"
397
398 #: ../../../src/InputState.cpp:444
399 msgid "Mouse X2"
400 msgstr "マウス X2"
401
402 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
403 msgid "Unknown Item"
404 msgstr "不明なアイテム"
405
406 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
407 #, c-format
408 msgid "%d%% Speed"
409 msgstr "%d%% スピード"
410
411 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
412 #, c-format
413 msgid "%d%% Attack Speed"
414 msgstr "%d%% スピード"
415
416 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
417 #: ../../../src/MenuPowers.cpp:832
418 #, c-format
419 msgid "Resistance (%s)"
420 msgstr "抵抗(%s)"
421
422 #: ../../../src/ItemManager.cpp:714
423 #, c-format
424 msgid "Requires %s"
425 msgstr ""
426
427 #: ../../../src/ItemManager.cpp:763
428 msgid "Quest Item"
429 msgstr "クエスト品"
430
431 #: ../../../src/ItemManager.cpp:790
432 #, c-format
433 msgid "Quality: %s"
434 msgstr "品質: %s"
435
436 #: ../../../src/ItemManager.cpp:815
437 #, c-format
438 msgid "Absorb: %d-%d"
439 msgstr "吸収: %d-%d"
440
441 #: ../../../src/ItemManager.cpp:817
442 #, c-format
443 msgid "Absorb: %d"
444 msgstr "吸収: %d"
445
446 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
447 #: ../../../src/MenuPowers.cpp:1133
448 #, c-format
449 msgid "Requires Level %d"
450 msgstr "レベル %d が必要です"
451
452 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
453 #: ../../../src/MenuPowers.cpp:1124
454 #, c-format
455 msgid "Requires %s %d"
456 msgstr "%s %d が必要です"
457
458 #: ../../../src/ItemManager.cpp:879
459 #, c-format
460 msgid "Requires Class: %s"
461 msgstr "必要なクラス: %s"
462
463 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
464 #, c-format
465 msgid "Buy Price: %d %s"
466 msgstr "購入価格: %d %s"
467
468 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
469 #, c-format
470 msgid "Buy Price: %d %s each"
471 msgstr "購入価格: %d %s ひとつあたり"
472
473 #: ../../../src/ItemManager.cpp:916
474 #, c-format
475 msgid "Sell Price: %d %s"
476 msgstr "売却価格: %d %s"
477
478 #: ../../../src/ItemManager.cpp:918
479 #, c-format
480 msgid "Sell Price: %d %s each"
481 msgstr "売却価格: %d %s ひとつあたり"
482
483 #: ../../../src/ItemManager.cpp:927
484 msgid "Set:"
485 msgstr "組合わせ:"
486
487 #: ../../../src/ItemManager.cpp:934
488 #, c-format
489 msgid "%d items:"
490 msgstr "%d アイテム:"
491
492 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
493 #, c-format
494 msgid "Press [%s] to use"
495 msgstr "使用は[%s]"
496
497 #: ../../../src/ItemManager.cpp:951
498 #, c-format
499 msgid "Press [%s] to read"
500 msgstr ""
501
502 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
503 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
504 #, c-format
505 msgid "Hotkey: %s"
506 msgstr "ホットキー: %s"
507
508 #: ../../../src/MenuActionBar.cpp:599
509 msgid "Not enough MP."
510 msgstr ""
511
512 #: ../../../src/MenuActiveEffects.cpp:124
513 #, c-format
514 msgid "x%d"
515 msgstr ""
516
517 #: ../../../src/MenuActiveEffects.cpp:219
518 msgid "Remaining:"
519 msgstr "残り:"
520
521 #: ../../../src/MenuActiveEffects.cpp:225
522 #, c-format
523 msgid "x%d stacks"
524 msgstr ""
525
526 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
527 msgid "Name"
528 msgstr "名"
529
530 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
531 msgid "Level"
532 msgstr "レベル"
533
534 #: ../../../src/MenuCharacter.cpp:310
535 #, c-format
536 msgid "%d unspent stat point"
537 msgstr "statポイントが %d 未使用です"
538
539 #: ../../../src/MenuCharacter.cpp:313
540 #, c-format
541 msgid "%d unspent stat points"
542 msgstr "statポイントが %d 未使用です"
543
544 #: ../../../src/MenuCharacter.cpp:355
545 #, c-format
546 msgid "Reduces the damage taken from \"%s\" elemental attacks."
547 msgstr "%sエレメンタルの攻撃を受けたときのダメージを減らします。"
548
549 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
550 #, c-format
551 msgid "XP: %d"
552 msgstr "XP: %d"
553
554 #: ../../../src/MenuCharacter.cpp:367
555 #, c-format
556 msgid "Next: %d"
557 msgstr "次: %d"
558
559 #: ../../../src/MenuCharacter.cpp:373
560 #, c-format
561 msgid "base (%d), bonus (%d)"
562 msgstr "基本 (%d), ボーナス (%d)"
563
564 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
565 msgid "Related stats:"
566 msgstr "関連する統計:"
567
568 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
569 #, c-format
570 msgid "Each level grants %d."
571 msgstr "レベルごとに %d が付与されます。"
572
573 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
574 #, c-format
575 msgid "Each point of %s grants %d."
576 msgstr "%s の各点ごとに %d が付与されます。"
577
578 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
579 msgid "Clear"
580 msgstr "クリア"
581
582 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
583 msgid "Assign:"
584 msgstr "割り当て:"
585
586 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
134587 msgid "Defaults"
135588 msgstr "デフォルト"
136589
137 #: ../../../src/GameStateConfigBase.cpp:89
590 #: ../../../src/MenuConfig.cpp:123
138591 msgid "Reset ALL settings?"
139592 msgstr "すべての設定をリセット?"
140593
141 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
594 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
142595 msgid "OK"
143596 msgstr "オーケー"
144597
145 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
146 #: ../../../src/InputState.cpp:401
147 msgid "Cancel"
148 msgstr "キャンセル"
149
150 #: ../../../src/GameStateConfigBase.cpp:160
151 #: ../../../src/GameStateConfigDesktop.cpp:130
598 #: ../../../src/MenuConfig.cpp:246
599 msgid "Continue"
600 msgstr "続行"
601
602 #: ../../../src/MenuConfig.cpp:248
603 msgid "Save Game"
604 msgstr ""
605
606 #: ../../../src/MenuConfig.cpp:291
607 msgid "Default"
608 msgstr ""
609
610 #: ../../../src/MenuConfig.cpp:291
611 msgid ""
612 "Show all loot tooltips, except for those that would be obscured by the "
613 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
614 msgstr ""
615
616 #: ../../../src/MenuConfig.cpp:292
617 msgid "Show all"
618 msgstr ""
619
620 #: ../../../src/MenuConfig.cpp:292
621 msgid ""
622 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
623 msgstr ""
624
625 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
626 msgid "Hidden"
627 msgstr ""
628
629 #: ../../../src/MenuConfig.cpp:293
630 msgid ""
631 "Always hide loot tooltips, except for when a piece of loot is hovered with "
632 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
633 msgstr ""
634
635 #: ../../../src/MenuConfig.cpp:296
636 msgid "Visible"
637 msgstr ""
638
639 #: ../../../src/MenuConfig.cpp:297
640 msgid "Visible (2x zoom)"
641 msgstr ""
642
643 #: ../../../src/MenuConfig.cpp:301
644 msgid ""
645 "Controls the type of warning to be activated when the player is below the "
646 "low health threshold."
647 msgstr ""
648
649 #: ../../../src/MenuConfig.cpp:302
650 msgid "- Display a message"
651 msgstr ""
652
653 #: ../../../src/MenuConfig.cpp:303
654 msgid "- Play a sound"
655 msgstr ""
656
657 #: ../../../src/MenuConfig.cpp:304
658 msgid "- Change the cursor"
659 msgstr ""
660
661 #: ../../../src/MenuConfig.cpp:306
662 msgid "Disabled"
663 msgstr ""
664
665 #: ../../../src/MenuConfig.cpp:307
666 msgid "All"
667 msgstr ""
668
669 #: ../../../src/MenuConfig.cpp:308
670 msgid "Message & Cursor"
671 msgstr ""
672
673 #: ../../../src/MenuConfig.cpp:309
674 msgid "Message & Sound"
675 msgstr ""
676
677 #: ../../../src/MenuConfig.cpp:310
678 msgid "Sound & Cursor"
679 msgstr ""
680
681 #: ../../../src/MenuConfig.cpp:311
682 msgid "Message"
683 msgstr ""
684
685 #: ../../../src/MenuConfig.cpp:312
686 msgid "Cursor"
687 msgstr ""
688
689 #: ../../../src/MenuConfig.cpp:313
690 msgid "Sound"
691 msgstr ""
692
693 #: ../../../src/MenuConfig.cpp:319
694 msgid ""
695 "When the player's health drops below the given threshold, the low health "
696 "notifications are triggered if one or more of them is enabled."
697 msgstr ""
698
699 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
700 msgid "Exit"
701 msgstr "終了"
702
703 #: ../../../src/MenuConfig.cpp:333
704 msgid "Video"
705 msgstr "ビデオ"
706
707 #: ../../../src/MenuConfig.cpp:334
152708 msgid "Audio"
153709 msgstr "オーディオ"
154710
155 #: ../../../src/GameStateConfigBase.cpp:161
156 #: ../../../src/GameStateConfigDesktop.cpp:131
711 #: ../../../src/MenuConfig.cpp:335
157712 msgid "Interface"
158713 msgstr "インタフェース"
159714
160 #: ../../../src/GameStateConfigBase.cpp:162
161 #: ../../../src/GameStateConfigDesktop.cpp:134
715 #: ../../../src/MenuConfig.cpp:336
716 msgid "Input"
717 msgstr "入力"
718
719 #: ../../../src/MenuConfig.cpp:337
720 msgid "Keybindings"
721 msgstr "キー設定"
722
723 #: ../../../src/MenuConfig.cpp:338
162724 msgid "Mods"
163725 msgstr "モッズ"
164726
165 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
727 #: ../../../src/MenuConfig.cpp:350
728 msgid "Paused"
729 msgstr "ポーズ"
730
731 #: ../../../src/MenuConfig.cpp:353
732 msgid "Time Played"
733 msgstr "プレイ時間"
734
735 #: ../../../src/MenuConfig.cpp:359
736 msgid "Renderer"
737 msgstr ""
738
739 #: ../../../src/MenuConfig.cpp:360
740 msgid "Full Screen Mode"
741 msgstr "フルスクリーンモード"
742
743 #: ../../../src/MenuConfig.cpp:361
744 msgid "Hardware surfaces"
745 msgstr "ハードウェアサーフェス"
746
747 #: ../../../src/MenuConfig.cpp:362
748 msgid "V-Sync"
749 msgstr ""
750
751 #: ../../../src/MenuConfig.cpp:363
752 msgid "Texture Filtering"
753 msgstr ""
754
755 #: ../../../src/MenuConfig.cpp:364
756 msgid "DPI scaling"
757 msgstr ""
758
759 #: ../../../src/MenuConfig.cpp:365
760 msgid "Parallax Layers"
761 msgstr ""
762
763 #: ../../../src/MenuConfig.cpp:366
764 msgid "Allow changing gamma"
765 msgstr "ガンマの変更許可"
766
767 #: ../../../src/MenuConfig.cpp:367
768 msgid "Gamma"
769 msgstr "ガンマ"
770
771 #: ../../../src/MenuConfig.cpp:369
772 msgid "Sound Volume"
773 msgstr "効果音の音量"
774
775 #: ../../../src/MenuConfig.cpp:370
166776 msgid "Music Volume"
167777 msgstr "音楽の音量"
168778
169 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
170 msgid "Sound Volume"
171 msgstr "効果音の音量"
172
173 #: ../../../src/GameStateConfigBase.cpp:257
779 #: ../../../src/MenuConfig.cpp:372
174780 msgid "Language"
175781 msgstr "言語"
176782
177 #: ../../../src/GameStateConfigBase.cpp:266
783 #: ../../../src/MenuConfig.cpp:373
178784 msgid "Show FPS"
179785 msgstr "FPSを表示"
180786
181 #: ../../../src/GameStateConfigBase.cpp:270
787 #: ../../../src/MenuConfig.cpp:374
788 msgid "Hardware mouse cursor"
789 msgstr ""
790
791 #: ../../../src/MenuConfig.cpp:375
182792 msgid "Colorblind Mode"
183793 msgstr "色盲モード"
184794
185 #: ../../../src/GameStateConfigBase.cpp:274
186 msgid "Hardware mouse cursor"
187 msgstr ""
188
189 #: ../../../src/GameStateConfigBase.cpp:278
795 #: ../../../src/MenuConfig.cpp:376
190796 msgid "Developer Mode"
191797 msgstr ""
192798
193 #: ../../../src/GameStateConfigBase.cpp:282
799 #: ../../../src/MenuConfig.cpp:377
194800 msgid "Subtitles"
195801 msgstr "字幕"
196802
197 #: ../../../src/GameStateConfigBase.cpp:286
198 msgid "Active Mods"
199 msgstr "アクティブモッズ"
200
201 #: ../../../src/GameStateConfigBase.cpp:295
202 msgid "Available Mods"
203 msgstr "利用可能モッズ"
204
205 #: ../../../src/GameStateConfigBase.cpp:314
206 msgid "<< Disable"
207 msgstr "<< 無効"
208
209 #: ../../../src/GameStateConfigBase.cpp:320
210 msgid "Enable >>"
211 msgstr "有効 >>"
212
213 #: ../../../src/GameStateConfigBase.cpp:873
214 msgid "Version:"
215 msgstr ""
216
217 #: ../../../src/GameStateConfigBase.cpp:878
218 msgid "Game:"
219 msgstr "ゲーム:"
220
221 #: ../../../src/GameStateConfigBase.cpp:883
222 msgid "Engine version:"
223 msgstr "必要バージョン:"
224
225 #: ../../../src/GameStateConfigBase.cpp:891
226 msgid "Requires mods:"
227 msgstr "必要モッズ:"
228
229 #: ../../../src/GameStateConfigDesktop.cpp:83
230 #: ../../../src/GameStateConfigDesktop.cpp:751
231 msgid "Clear"
232 msgstr "クリア"
233
234 #: ../../../src/GameStateConfigDesktop.cpp:83
235 #: ../../../src/GameStateConfigDesktop.cpp:749
236 msgid "Assign:"
237 msgstr "割り当て:"
238
239 #: ../../../src/GameStateConfigDesktop.cpp:128
240 msgid "Video"
241 msgstr "ビデオ"
242
243 #: ../../../src/GameStateConfigDesktop.cpp:132
244 msgid "Input"
245 msgstr "入力"
246
247 #: ../../../src/GameStateConfigDesktop.cpp:133
248 msgid "Keybindings"
249 msgstr "キー設定"
250
251 #: ../../../src/GameStateConfigDesktop.cpp:188
803 #: ../../../src/MenuConfig.cpp:378
804 msgid "Loot tooltip visibility"
805 msgstr ""
806
807 #: ../../../src/MenuConfig.cpp:379
808 msgid "Mini-map mode"
809 msgstr ""
810
811 #: ../../../src/MenuConfig.cpp:380
812 msgid "Always show stat bar labels"
813 msgstr ""
814
815 #: ../../../src/MenuConfig.cpp:381
816 msgid "Allow stat bar auto-hiding"
817 msgstr ""
818
819 #: ../../../src/MenuConfig.cpp:382
820 msgid "Show combat text"
821 msgstr "戦闘のテキストを表示"
822
823 #: ../../../src/MenuConfig.cpp:383
824 msgid "Automatically equip items"
825 msgstr ""
826
827 #: ../../../src/MenuConfig.cpp:384
828 msgid "Show hidden entity markers"
829 msgstr ""
830
831 #: ../../../src/MenuConfig.cpp:385
832 msgid "Low health notification"
833 msgstr ""
834
835 #: ../../../src/MenuConfig.cpp:386
836 msgid "Low health threshold"
837 msgstr ""
838
839 #: ../../../src/MenuConfig.cpp:389
840 msgid "Joystick"
841 msgstr "ジョイスティック"
842
843 #: ../../../src/MenuConfig.cpp:390
844 msgid "Move hero using mouse"
845 msgstr "マウスでキャラクターを動かす"
846
847 #: ../../../src/MenuConfig.cpp:391
848 msgid "Mouse aim"
849 msgstr "マウスの狙い"
850
851 #: ../../../src/MenuConfig.cpp:392
852 msgid "Do not use mouse"
853 msgstr "マウスの不利用"
854
855 #: ../../../src/MenuConfig.cpp:393
856 msgid "Swap mouse movement button"
857 msgstr ""
858
859 #: ../../../src/MenuConfig.cpp:394
860 msgid "Attack with mouse movement"
861 msgstr ""
862
863 #: ../../../src/MenuConfig.cpp:395
864 msgid "Joystick Deadzone"
865 msgstr "Joystick Deadzone"
866
867 #: ../../../src/MenuConfig.cpp:405
868 #, c-format
869 msgid "Primary binding: %s"
870 msgstr ""
871
872 #: ../../../src/MenuConfig.cpp:406
873 #, c-format
874 msgid "Alternate binding: %s"
875 msgstr ""
876
877 #: ../../../src/MenuConfig.cpp:407
878 #, c-format
879 msgid "Joystick binding: %s"
880 msgstr ""
881
882 #: ../../../src/MenuConfig.cpp:508
252883 msgid ""
253884 "Will try to store surfaces in video memory versus system memory. The effect "
254885 "this has on performance depends on the renderer."
255886 msgstr ""
256887
257 #: ../../../src/GameStateConfigDesktop.cpp:189
888 #: ../../../src/MenuConfig.cpp:509
258889 msgid ""
259890 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
260891 "windowed mode or input lag."
261892 msgstr ""
262893
263 #: ../../../src/GameStateConfigDesktop.cpp:190
894 #: ../../../src/MenuConfig.cpp:510
264895 msgid ""
265896 "When enabled, this uses the screen DPI in addition to the window dimensions "
266897 "to scale the rendering resolution. Otherwise, only the window dimensions are"
267898 " used."
268899 msgstr ""
269900
270 #: ../../../src/GameStateConfigDesktop.cpp:191
901 #: ../../../src/MenuConfig.cpp:511
271902 msgid ""
272903 "This enables parallax (non-tile) layers. Disabling this setting can improve "
273904 "performance in some cases."
274905 msgstr ""
275906
276 #: ../../../src/GameStateConfigDesktop.cpp:192
277 msgid "Experimental"
278 msgstr "実験的"
279
280 #: ../../../src/GameStateConfigDesktop.cpp:193
281 msgid "For handheld devices"
282 msgstr "携帯電話モード"
283
284 #: ../../../src/GameStateConfigDesktop.cpp:211
285 msgid "Renderer"
286 msgstr ""
287
288 #: ../../../src/GameStateConfigDesktop.cpp:227
289 msgid "Full Screen Mode"
290 msgstr "フルスクリーンモード"
291
292 #: ../../../src/GameStateConfigDesktop.cpp:231
293 msgid "Move hero using mouse"
294 msgstr "マウスでキャラクターを動かす"
295
296 #: ../../../src/GameStateConfigDesktop.cpp:235
297 msgid "Hardware surfaces"
298 msgstr "ハードウェアサーフェス"
299
300 #: ../../../src/GameStateConfigDesktop.cpp:239
301 msgid "V-Sync"
302 msgstr ""
303
304 #: ../../../src/GameStateConfigDesktop.cpp:243
305 msgid "Texture Filtering"
306 msgstr ""
307
308 #: ../../../src/GameStateConfigDesktop.cpp:247
309 msgid "DPI scaling"
310 msgstr ""
311
312 #: ../../../src/GameStateConfigDesktop.cpp:251
313 msgid "Parallax Layers"
314 msgstr ""
315
316 #: ../../../src/GameStateConfigDesktop.cpp:255
317 msgid "Allow changing gamma"
318 msgstr "ガンマの変更許可"
319
320 #: ../../../src/GameStateConfigDesktop.cpp:259
321 msgid "Gamma"
322 msgstr "ガンマ"
323
324 #: ../../../src/GameStateConfigDesktop.cpp:263
325 msgid "Use joystick"
326 msgstr "ジョイスティックを使用する"
327
328 #: ../../../src/GameStateConfigDesktop.cpp:267
329 msgid "Joystick"
330 msgstr "ジョイスティック"
331
332 #: ../../../src/GameStateConfigDesktop.cpp:283
333 msgid "Mouse aim"
334 msgstr "マウスの狙い"
335
336 #: ../../../src/GameStateConfigDesktop.cpp:287
337 msgid "Do not use mouse"
338 msgstr "マウスの不利用"
339
340 #: ../../../src/GameStateConfigDesktop.cpp:291
341 msgid "Joystick Deadzone"
342 msgstr "Joystick Deadzone"
343
344 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
345 msgid "Loading..."
346 msgstr "読み込み中..."
347
348 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
349 msgid "Delete Save"
350 msgstr "セーブデータを削除"
351
352 #: ../../../src/GameStateLoad.cpp:88
353 msgid "Delete this save?"
354 msgstr "このセーブデータを削除しますか?"
355
356 #: ../../../src/GameStateLoad.cpp:90
357 msgid "Exit to Title"
358 msgstr "タイトルに戻る"
359
360 #: ../../../src/GameStateLoad.cpp:93
361 msgid "New Game"
362 msgstr "新しいゲーム"
363
364 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
365 msgid "Choose a Slot"
366 msgstr "スロットを選択"
367
368 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
369 msgid "Enable a story mod to continue"
370 msgstr "話モッズを有効にして継続する"
371
372 #: ../../../src/GameStateLoad.cpp:589
373 msgid "Load Game"
374 msgstr "ゲームをロード"
375
376 #: ../../../src/GameStateLoad.cpp:695
377 msgid "Entering game world..."
378 msgstr "ゲームの世界に入ります..."
379
380 #: ../../../src/GameStateLoad.cpp:698
381 msgid "Loading saved game..."
382 msgstr "セーブデータをロードしています..."
383
384 #: ../../../src/GameStateLoad.cpp:731
385 msgid "Invalid save"
386 msgstr ""
387
388 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
389 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
390 #: ../../../src/MenuPowers.cpp:1542
391 #, c-format
392 msgid "Level %d"
393 msgstr "レベル %d"
394
395 #: ../../../src/GameStateNew.cpp:68
396 msgid "Create"
397 msgstr "作る"
398
399 #: ../../../src/GameStateNew.cpp:76
400 msgid "Randomize"
401 msgstr ""
402
403 #: ../../../src/GameStateNew.cpp:92
404 msgid "Choose a Portrait"
405 msgstr "肖像を選択"
406
407 #: ../../../src/GameStateNew.cpp:96
408 msgid "Choose a Name"
409 msgstr "名前を選択"
410
411 #: ../../../src/GameStateNew.cpp:100
412 msgid "Permadeath?"
413 msgstr "永久に死亡させますか?"
414
415 #: ../../../src/GameStateNew.cpp:104
416 msgid "Choose a Class"
417 msgstr "クラスを選択"
418
419 #: ../../../src/GameStateTitle.cpp:108
420 msgid "Play Game"
421 msgstr "ゲームをプレイ"
422
423 #: ../../../src/GameStateTitle.cpp:111
424 msgid "Enable a core mod to continue"
425 msgstr "コアモッズを有効にして続行"
426
427 #: ../../../src/GameStateTitle.cpp:115
428 msgid "Configuration"
429 msgstr "設定"
430
431 #: ../../../src/GameStateTitle.cpp:118
432 msgid "Credits"
433 msgstr "クレジット"
434
435 #: ../../../src/GameStateTitle.cpp:121
436 msgid "Exit Game"
437 msgstr "ゲームを終了"
438
439 #: ../../../src/InputState.cpp:402
440 msgid "Accept"
441 msgstr "了解する"
442
443 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
444 msgid "Up"
445 msgstr "上"
446
447 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
448 msgid "Down"
449 msgstr "下"
450
451 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
452 msgid "Left"
453 msgstr "左"
454
455 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
456 msgid "Right"
457 msgstr "右"
458
459 #: ../../../src/InputState.cpp:407
460 msgid "Bar1"
461 msgstr "バー1"
462
463 #: ../../../src/InputState.cpp:408
464 msgid "Bar2"
465 msgstr "バー2"
466
467 #: ../../../src/InputState.cpp:409
468 msgid "Bar3"
469 msgstr "バー3"
470
471 #: ../../../src/InputState.cpp:410
472 msgid "Bar4"
473 msgstr "バー4"
474
475 #: ../../../src/InputState.cpp:411
476 msgid "Bar5"
477 msgstr "バー5"
478
479 #: ../../../src/InputState.cpp:412
480 msgid "Bar6"
481 msgstr "バー6"
482
483 #: ../../../src/InputState.cpp:413
484 msgid "Bar7"
485 msgstr "バー7"
486
487 #: ../../../src/InputState.cpp:414
488 msgid "Bar8"
489 msgstr "バー8"
490
491 #: ../../../src/InputState.cpp:415
492 msgid "Bar9"
493 msgstr "バー9"
494
495 #: ../../../src/InputState.cpp:416
496 msgid "Bar0"
497 msgstr "バー0"
498
499 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
500 #: ../../../src/MenuCharacter.cpp:54
501 msgid "Character"
502 msgstr "キャラクター"
503
504 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
505 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
506 msgid "Inventory"
507 msgstr "物品"
508
509 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
510 #: ../../../src/MenuPowers.cpp:168
511 msgid "Powers"
512 msgstr "能力"
513
514 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
515 #: ../../../src/MenuLog.cpp:72
516 msgid "Log"
517 msgstr "ログ"
518
519 #: ../../../src/InputState.cpp:421
520 msgid "Main1"
521 msgstr "メイン1"
522
523 #: ../../../src/InputState.cpp:422
524 msgid "Main2"
525 msgstr "メイン2"
526
527 #: ../../../src/InputState.cpp:423
528 msgid "Ctrl"
529 msgstr "Ctrl"
530
531 #: ../../../src/InputState.cpp:424
532 msgid "Shift"
533 msgstr "Shift"
534
535 #: ../../../src/InputState.cpp:425
536 msgid "Alt"
537 msgstr "Alt"
538
539 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
540 msgid "Delete"
541 msgstr "削除"
542
543 #: ../../../src/InputState.cpp:427
544 msgid "ActionBar Accept"
545 msgstr "アクションバー受入"
546
547 #: ../../../src/InputState.cpp:428
548 msgid "ActionBar Left"
549 msgstr "アクションバー左"
550
551 #: ../../../src/InputState.cpp:429
552 msgid "ActionBar Right"
553 msgstr "アクションバー右"
554
555 #: ../../../src/InputState.cpp:430
556 msgid "ActionBar Use"
557 msgstr "アクションバー使用"
558
559 #: ../../../src/InputState.cpp:431
560 msgid "Developer Menu"
561 msgstr ""
562
563 #: ../../../src/InputState.cpp:433
564 msgid "Left Mouse"
565 msgstr "左マウス"
566
567 #: ../../../src/InputState.cpp:434
568 msgid "Middle Mouse"
569 msgstr "中央マウス"
570
571 #: ../../../src/InputState.cpp:435
572 msgid "Right Mouse"
573 msgstr "右マウス"
574
575 #: ../../../src/InputState.cpp:436
576 msgid "Wheel Up"
577 msgstr "マウスホイール アップ"
578
579 #: ../../../src/InputState.cpp:437
580 msgid "Wheel Down"
581 msgstr "マウスホイール ダウン"
582
583 #: ../../../src/InputState.cpp:438
584 msgid "Mouse X1"
585 msgstr "マウス X1"
586
587 #: ../../../src/InputState.cpp:439
588 msgid "Mouse X2"
589 msgstr "マウス X2"
590
591 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
592 msgid "Unknown Item"
593 msgstr "不明なアイテム"
594
595 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
596 #, c-format
597 msgid "%d%% Speed"
598 msgstr "%d%% スピード"
599
600 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
601 #, c-format
602 msgid "%d%% Attack Speed"
603 msgstr "%d%% スピード"
604
605 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
606 #: ../../../src/MenuPowers.cpp:833
607 #, c-format
608 msgid "Resistance (%s)"
609 msgstr ""
610
611 #: ../../../src/ItemManager.cpp:684
612 #, c-format
613 msgid "Requires %s"
614 msgstr ""
615
616 #: ../../../src/ItemManager.cpp:733
617 msgid "Quest Item"
618 msgstr "クエスト品"
619
620 #: ../../../src/ItemManager.cpp:760
621 #, c-format
622 msgid "Quality: %s"
623 msgstr "品質: %s"
624
625 #: ../../../src/ItemManager.cpp:785
626 #, c-format
627 msgid "Absorb: %d-%d"
628 msgstr "吸収: %d-%d"
629
630 #: ../../../src/ItemManager.cpp:787
631 #, c-format
632 msgid "Absorb: %d"
633 msgstr "吸収: %d"
634
635 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
636 #: ../../../src/MenuPowers.cpp:1134
637 #, c-format
638 msgid "Requires Level %d"
639 msgstr "レベル %d が必要です"
640
641 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
642 #: ../../../src/MenuPowers.cpp:1125
643 #, c-format
644 msgid "Requires %s %d"
645 msgstr "%s %d が必要です"
646
647 #: ../../../src/ItemManager.cpp:849
648 #, c-format
649 msgid "Requires Class: %s"
650 msgstr "必要なクラス: %s"
651
652 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
653 #, c-format
654 msgid "Buy Price: %d %s"
655 msgstr "購入価格: %d %s"
656
657 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
658 #, c-format
659 msgid "Buy Price: %d %s each"
660 msgstr "購入価格: %d %s ひとつあたり"
661
662 #: ../../../src/ItemManager.cpp:886
663 #, c-format
664 msgid "Sell Price: %d %s"
665 msgstr "売却価格: %d %s"
666
667 #: ../../../src/ItemManager.cpp:888
668 #, c-format
669 msgid "Sell Price: %d %s each"
670 msgstr "売却価格: %d %s ひとつあたり"
671
672 #: ../../../src/ItemManager.cpp:897
673 msgid "Set:"
674 msgstr "組合わせ:"
675
676 #: ../../../src/ItemManager.cpp:904
677 #, c-format
678 msgid "%d items:"
679 msgstr "%d アイテム:"
680
681 #: ../../../src/ItemManager.cpp:917
682 #, c-format
683 msgid "Press [%s] to use"
684 msgstr ""
685
686 #: ../../../src/ItemManager.cpp:920
687 #, c-format
688 msgid "Press [%s] to read"
689 msgstr ""
690
691 #: ../../../src/MenuActionBar.cpp:87
692 msgid "Loot tooltip visibility"
693 msgstr ""
694
695 #: ../../../src/MenuActionBar.cpp:88
696 msgid "Mini-map mode"
697 msgstr ""
698
699 #: ../../../src/MenuActionBar.cpp:89
700 msgid "Always show stat bar labels"
701 msgstr ""
702
703 #: ../../../src/MenuActionBar.cpp:90
704 msgid "Show combat text"
705 msgstr "戦闘のテキストを表示"
706
707 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
708 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
709 #, c-format
710 msgid "Hotkey: %s"
711 msgstr "ホットキー: %s"
712
713 #: ../../../src/MenuActionBar.cpp:474
714 #, c-format
715 msgid "Default. Temporarily show all loot tooltips with '%s'."
716 msgstr ""
717
718 #: ../../../src/MenuActionBar.cpp:476
719 #, c-format
720 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
721 msgstr ""
722
723 #: ../../../src/MenuActionBar.cpp:478
724 #, c-format
725 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
726 msgstr ""
727
728 #: ../../../src/MenuActionBar.cpp:482
729 msgid "Visible"
730 msgstr ""
731
732 #: ../../../src/MenuActionBar.cpp:484
733 msgid "Visible (2x zoom)"
734 msgstr ""
735
736 #: ../../../src/MenuActionBar.cpp:486
737 msgid "Hidden"
738 msgstr ""
739
740 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
741 msgid "Enabled"
742 msgstr ""
743
744 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
745 msgid "Disabled"
746 msgstr ""
747
748 #: ../../../src/MenuActionBar.cpp:657
749 msgid "Not enough MP."
750 msgstr ""
751
752 #: ../../../src/MenuActiveEffects.cpp:124
753 #, c-format
754 msgid "x%d"
755 msgstr ""
756
757 #: ../../../src/MenuActiveEffects.cpp:219
758 msgid "Remaining:"
759 msgstr "残り:"
760
761 #: ../../../src/MenuActiveEffects.cpp:225
762 #, c-format
763 msgid "x%d stacks"
764 msgstr ""
765
766 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
767 msgid "Name"
768 msgstr "名"
769
770 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
771 msgid "Level"
772 msgstr "レベル"
773
774 #: ../../../src/MenuCharacter.cpp:310
775 #, c-format
776 msgid "%d unspent stat point"
777 msgstr ""
778
779 #: ../../../src/MenuCharacter.cpp:313
780 #, c-format
781 msgid "%d unspent stat points"
782 msgstr ""
783
784 #: ../../../src/MenuCharacter.cpp:355
785 #, c-format
786 msgid "Reduces the damage taken from \"%s\" elemental attacks."
787 msgstr ""
788
789 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
790 #, c-format
791 msgid "XP: %d"
792 msgstr "XP: %d"
793
794 #: ../../../src/MenuCharacter.cpp:367
795 #, c-format
796 msgid "Next: %d"
797 msgstr "次: %d"
798
799 #: ../../../src/MenuCharacter.cpp:373
800 #, c-format
801 msgid "base (%d), bonus (%d)"
802 msgstr "基本 (%d), ボーナス (%d)"
803
804 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
805 msgid "Related stats:"
806 msgstr "関連する統計:"
807
808 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
809 #, c-format
810 msgid "Each level grants %d."
811 msgstr "レベルごとに %d が付与されます。"
812
813 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
814 #, c-format
815 msgid "Each point of %s grants %d."
816 msgstr "%s の各点ごとに %d が付与されます。"
907 #: ../../../src/MenuConfig.cpp:512
908 msgid ""
909 "Enables the below setting that controls the screen gamma level. The behavior"
910 " of the gamma setting can vary between platforms."
911 msgstr ""
912
913 #: ../../../src/MenuConfig.cpp:513
914 msgid ""
915 "Provides additional text for information that is primarily conveyed through "
916 "color."
917 msgstr ""
918
919 #: ../../../src/MenuConfig.cpp:514
920 msgid ""
921 "Some mods will automatically hide the stat bars when they are inactive. "
922 "Disabling this option will keep them displayed at all times."
923 msgstr ""
924
925 #: ../../../src/MenuConfig.cpp:515
926 msgid ""
927 "When enabled, empty equipment slots will be filled with applicable items "
928 "when they are obtained."
929 msgstr ""
930
931 #: ../../../src/MenuConfig.cpp:516
932 msgid ""
933 "Shows a marker above enemies, allies, and the player when they are obscured "
934 "by tall objects."
935 msgstr ""
936
937 #: ../../../src/MenuConfig.cpp:517
938 msgid ""
939 "This allows the game to be controlled entirely with the keyboard (or "
940 "joystick)."
941 msgstr ""
942
943 #: ../../../src/MenuConfig.cpp:518
944 msgid ""
945 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
946 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
947 "instead of 'Main1'."
948 msgstr ""
949
950 #: ../../../src/MenuConfig.cpp:519
951 msgid ""
952 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
953 "assigned to the movement button can be used by targeting an enemy. If this "
954 "setting is disabled, it is required to use 'Shift' to access the Power "
955 "assigned to the movement button."
956 msgstr ""
957
958 #: ../../../src/MenuConfig.cpp:520
959 msgid ""
960 "The player's attacks will be aimed in the direction of the mouse cursor when"
961 " this is enabled."
962 msgstr ""
963
964 #: ../../../src/MenuConfig.cpp:571
965 msgid "Active Mods"
966 msgstr "アクティブモッズ"
967
968 #: ../../../src/MenuConfig.cpp:580
969 msgid "Available Mods"
970 msgstr "利用可能モッズ"
971
972 #: ../../../src/MenuConfig.cpp:599
973 msgid "<< Disable"
974 msgstr "<< 無効"
975
976 #: ../../../src/MenuConfig.cpp:605
977 msgid "Enable >>"
978 msgstr "有効 >>"
979
980 #: ../../../src/MenuConfig.cpp:1436
981 msgid "Version:"
982 msgstr ""
983
984 #: ../../../src/MenuConfig.cpp:1441
985 msgid "Game:"
986 msgstr "ゲーム:"
987
988 #: ../../../src/MenuConfig.cpp:1446
989 msgid "Engine version:"
990 msgstr "必要バージョン:"
991
992 #: ../../../src/MenuConfig.cpp:1454
993 msgid "Requires mods:"
994 msgstr "必要モッズ:"
995
996 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
997 msgid "(none)"
998 msgstr ""
999
1000 #: ../../../src/MenuConfig.cpp:1579
1001 msgid "Save & Exit"
1002 msgstr "セーブ & 終了"
8171003
8181004 #: ../../../src/MenuDevConsole.cpp:63
8191005 msgid "Execute"
9681154 msgid "HINT: Type help"
9691155 msgstr ""
9701156
971 #: ../../../src/MenuEnemy.cpp:138
1157 #: ../../../src/MenuEnemy.cpp:162
9721158 #, c-format
9731159 msgid "%s level %d"
9741160 msgstr "%s レベル %d"
9751161
976 #: ../../../src/MenuEnemy.cpp:162
1162 #: ../../../src/MenuEnemy.cpp:186
9771163 msgid "Dead"
9781164 msgstr "死亡"
9791165
980 #: ../../../src/MenuEnemy.cpp:164
1166 #: ../../../src/MenuEnemy.cpp:188
9811167 msgid "Destroyed"
982 msgstr ""
983
984 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
985 msgid "Paused"
986 msgstr "ポーズ"
987
988 #: ../../../src/MenuExit.cpp:91
989 msgid "Save & Exit"
990 msgstr "セーブ & 終了"
991
992 #: ../../../src/MenuExit.cpp:92
993 msgid "Exit"
994 msgstr "終了"
995
996 #: ../../../src/MenuExit.cpp:96
997 msgid "Continue"
998 msgstr "続行"
999
1000 #: ../../../src/MenuInventory.cpp:73
1001 msgid "Automatically equip items"
1002 msgstr ""
1003
1004 #: ../../../src/MenuInventory.cpp:188
1168 msgstr "破壊ずみ"
1169
1170 #: ../../../src/MenuInventory.cpp:177
10051171 #, c-format
10061172 msgid "Lost %d%% of %s."
10071173 msgstr "%s を %d%% 失った。"
10081174
1009 #: ../../../src/MenuInventory.cpp:195
1175 #: ../../../src/MenuInventory.cpp:184
10101176 #, c-format
10111177 msgid "Lost %d%% of total XP."
10121178 msgstr "合計XPを %d%% 失った。"
10131179
1014 #: ../../../src/MenuInventory.cpp:200
1180 #: ../../../src/MenuInventory.cpp:189
10151181 #, c-format
10161182 msgid "Lost %d%% of current level XP."
10171183 msgstr "現在レベルXPを %d%% 失った。"
10181184
1019 #: ../../../src/MenuInventory.cpp:226
1185 #: ../../../src/MenuInventory.cpp:215
10201186 #, c-format
10211187 msgid "Lost %s."
10221188 msgstr "%s を失った。"
10231189
1024 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1190 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10251191 #, c-format
10261192 msgid "%d %s"
10271193 msgstr "%d %s"
10281194
1029 #: ../../../src/MenuInventory.cpp:317
1195 #: ../../../src/MenuInventory.cpp:300
10301196 msgid "Pick up item(s):"
10311197 msgstr ""
10321198
1033 #: ../../../src/MenuInventory.cpp:318
1199 #: ../../../src/MenuInventory.cpp:301
10341200 msgid "Use or equip item:"
10351201 msgstr "使用または装備 (アイテム):"
10361202
1037 #: ../../../src/MenuInventory.cpp:319
1203 #: ../../../src/MenuInventory.cpp:302
10381204 #, c-format
10391205 msgid "%s modifiers"
10401206 msgstr ""
10411207
1042 #: ../../../src/MenuInventory.cpp:320
1208 #: ../../../src/MenuInventory.cpp:303
10431209 msgid "Select a quantity of item:"
10441210 msgstr "アイテム量の選択"
10451211
1046 #: ../../../src/MenuInventory.cpp:323
1212 #: ../../../src/MenuInventory.cpp:306
10471213 msgid "Stash item stack:"
10481214 msgstr "各アイテムのスタッシュ:"
10491215
1050 #: ../../../src/MenuInventory.cpp:325
1216 #: ../../../src/MenuInventory.cpp:308
10511217 msgid "Sell item stack:"
10521218 msgstr "各アイテムの売買:"
10531219
1054 #: ../../../src/MenuInventory.cpp:592
1220 #: ../../../src/MenuInventory.cpp:574
10551221 msgid "You don't have enough of the required item."
10561222 msgstr "必要なアイテムが充分ではない。"
10571223
1058 #: ../../../src/MenuInventory.cpp:599
1224 #: ../../../src/MenuInventory.cpp:586
10591225 msgid "You can't use this item right now."
10601226 msgstr ""
10611227
1062 #: ../../../src/MenuInventory.cpp:611
1228 #: ../../../src/MenuInventory.cpp:598
10631229 msgid "This item can only be used from the action bar."
10641230 msgstr "この項目は、アクションバーだけから使用することができます。"
10651231
1066 #: ../../../src/MenuInventory.cpp:729
1232 #: ../../../src/MenuInventory.cpp:716
10671233 msgid "Inventory is full."
10681234 msgstr "物品は満杯です。"
10691235
1070 #: ../../../src/MenuInventory.cpp:849
1236 #: ../../../src/MenuInventory.cpp:841
10711237 #, c-format
10721238 msgid "Not enough %s."
10731239 msgstr "%s が足りない。"
10741240
1075 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1241 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
10761242 msgid "This item can not be sold."
10771243 msgstr "このアイテムは売れない。"
10781244
10841250 msgid "Quests"
10851251 msgstr "クエスト"
10861252
1087 #: ../../../src/MenuManager.cpp:286
1253 #: ../../../src/MenuManager.cpp:296
10881254 #, c-format
10891255 msgid "XP: %d/%d"
10901256 msgstr "XP: %d/%d"
10911257
1092 #: ../../../src/MenuManager.cpp:827
1258 #: ../../../src/MenuManager.cpp:854
10931259 msgid "This item can not be dropped."
10941260 msgstr "このアイテムを すてることは、できない。"
10951261
10971263 msgid "Enter amount:"
10981264 msgstr "量の入力:"
10991265
1100 #: ../../../src/MenuPowers.cpp:787
1266 #: ../../../src/MenuPowers.cpp:786
11011267 msgid "Passive"
11021268 msgstr "パッシブ スキル"
11031269
1104 #: ../../../src/MenuPowers.cpp:792
1270 #: ../../../src/MenuPowers.cpp:791
11051271 #, c-format
11061272 msgid "Costs %d MP"
11071273 msgstr "費用は %d MP"
11081274
1109 #: ../../../src/MenuPowers.cpp:796
1275 #: ../../../src/MenuPowers.cpp:795
11101276 #, c-format
11111277 msgid "Costs %d HP"
11121278 msgstr "費用は %d HP"
11131279
1114 #: ../../../src/MenuPowers.cpp:801
1280 #: ../../../src/MenuPowers.cpp:800
11151281 msgid "Cooldown:"
11161282 msgstr "クールダウン:"
11171283
1118 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1284 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11191285 msgid "Damage per second"
11201286 msgstr "ダメージ毎秒"
11211287
1122 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1288 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11231289 msgid "HP per second"
11241290 msgstr "HP毎秒"
11251291
1126 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1292 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11271293 msgid "MP per second"
11281294 msgstr "MP毎秒"
11291295
1130 #: ../../../src/MenuPowers.cpp:885
1296 #: ../../../src/MenuPowers.cpp:884
11311297 msgid "Immobilize"
11321298 msgstr "動けなくする"
11331299
1134 #: ../../../src/MenuPowers.cpp:893
1300 #: ../../../src/MenuPowers.cpp:892
11351301 msgid "Immunity"
11361302 msgstr "まぬがれ"
11371303
1138 #: ../../../src/MenuPowers.cpp:896
1304 #: ../../../src/MenuPowers.cpp:895
11391305 msgid "Immunity to damage over time"
11401306 msgstr ""
11411307
1142 #: ../../../src/MenuPowers.cpp:899
1308 #: ../../../src/MenuPowers.cpp:898
11431309 msgid "Immunity to slow"
11441310 msgstr ""
11451311
1146 #: ../../../src/MenuPowers.cpp:902
1312 #: ../../../src/MenuPowers.cpp:901
11471313 msgid "Immunity to stun"
11481314 msgstr ""
11491315
1150 #: ../../../src/MenuPowers.cpp:905
1316 #: ../../../src/MenuPowers.cpp:904
11511317 msgid "Immunity to HP steal"
11521318 msgstr ""
11531319
1154 #: ../../../src/MenuPowers.cpp:908
1320 #: ../../../src/MenuPowers.cpp:907
11551321 msgid "Immunity to MP steal"
11561322 msgstr ""
11571323
1158 #: ../../../src/MenuPowers.cpp:911
1324 #: ../../../src/MenuPowers.cpp:910
11591325 msgid "Immunity to knockback"
11601326 msgstr ""
11611327
1162 #: ../../../src/MenuPowers.cpp:914
1328 #: ../../../src/MenuPowers.cpp:913
11631329 msgid "Immunity to damage reflection"
11641330 msgstr ""
11651331
1166 #: ../../../src/MenuPowers.cpp:917
1332 #: ../../../src/MenuPowers.cpp:916
11671333 msgid "Stun"
11681334 msgstr "スタン"
11691335
1170 #: ../../../src/MenuPowers.cpp:920
1336 #: ../../../src/MenuPowers.cpp:919
11711337 msgid "Automatic revive on death"
11721338 msgstr "死からの自動復帰"
11731339
1174 #: ../../../src/MenuPowers.cpp:923
1340 #: ../../../src/MenuPowers.cpp:922
11751341 msgid "Convert"
11761342 msgstr ""
11771343
1178 #: ../../../src/MenuPowers.cpp:926
1344 #: ../../../src/MenuPowers.cpp:925
11791345 msgid "Fear"
11801346 msgstr ""
11811347
1182 #: ../../../src/MenuPowers.cpp:929
1348 #: ../../../src/MenuPowers.cpp:928
11831349 msgid "Lifespan"
11841350 msgstr ""
11851351
1186 #: ../../../src/MenuPowers.cpp:953
1352 #: ../../../src/MenuPowers.cpp:952
11871353 msgid "Magical Shield"
11881354 msgstr "魔法シールド"
11891355
1190 #: ../../../src/MenuPowers.cpp:982
1356 #: ../../../src/MenuPowers.cpp:981
11911357 msgid "Healing"
11921358 msgstr "ヒーリング"
11931359
1194 #: ../../../src/MenuPowers.cpp:985
1360 #: ../../../src/MenuPowers.cpp:984
11951361 msgid "Knockback"
11961362 msgstr "はね返し"
11971363
1198 #: ../../../src/MenuPowers.cpp:1010
1364 #: ../../../src/MenuPowers.cpp:1009
11991365 #, c-format
12001366 msgid "%d%% chance"
12011367 msgstr ""
12021368
1203 #: ../../../src/MenuPowers.cpp:1062
1369 #: ../../../src/MenuPowers.cpp:1061
12041370 msgid "Base Accuracy"
12051371 msgstr "ベース精度"
12061372
1207 #: ../../../src/MenuPowers.cpp:1082
1373 #: ../../../src/MenuPowers.cpp:1081
12081374 msgid "Base Critical Chance"
12091375 msgstr "ベースのクリティカル機会"
12101376
1211 #: ../../../src/MenuPowers.cpp:1090
1377 #: ../../../src/MenuPowers.cpp:1089
12121378 msgid "Ignores Absorbtion"
12131379 msgstr "吸収を無視"
12141380
1215 #: ../../../src/MenuPowers.cpp:1095
1381 #: ../../../src/MenuPowers.cpp:1094
12161382 msgid "Ignores Avoidance"
12171383 msgstr "回避を無視"
12181384
1219 #: ../../../src/MenuPowers.cpp:1100
1385 #: ../../../src/MenuPowers.cpp:1099
12201386 #, c-format
12211387 msgid "%d%% Chance to crit slowed targets"
12221388 msgstr ""
12231389
1224 #: ../../../src/MenuPowers.cpp:1105
1390 #: ../../../src/MenuPowers.cpp:1104
12251391 #, c-format
12261392 msgid "Elemental Damage (%s)"
12271393 msgstr ""
12281394
1229 #: ../../../src/MenuPowers.cpp:1114
1395 #: ../../../src/MenuPowers.cpp:1113
12301396 #, c-format
12311397 msgid "Requires a %s"
12321398 msgstr "%s が必要です"
12331399
1234 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1400 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12351401 #, c-format
12361402 msgid "Requires Power: %s"
12371403 msgstr "必要な能力: %s"
12381404
1239 #: ../../../src/MenuPowers.cpp:1163
1405 #: ../../../src/MenuPowers.cpp:1162
12401406 msgid "Click to Unlock (uses 1 Skill Point)"
12411407 msgstr "クリックすると解放(スキルポイントを1消費)"
12421408
1243 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1409 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12441410 msgid "Requires 1 Skill Point"
12451411 msgstr "スキルポイント 1 個が 必要です"
12461412
1247 #: ../../../src/MenuPowers.cpp:1355
1413 #: ../../../src/MenuPowers.cpp:1354
12481414 #, c-format
12491415 msgid "%d unspent skill point"
1250 msgstr ""
1251
1252 #: ../../../src/MenuPowers.cpp:1358
1416 msgstr "skill ポイントが %d 未使用です"
1417
1418 #: ../../../src/MenuPowers.cpp:1357
12531419 #, c-format
12541420 msgid "%d unspent skill points"
1255 msgstr ""
1256
1257 #: ../../../src/MenuPowers.cpp:1388
1421 msgstr "skill ポイントが %d 未使用です"
1422
1423 #: ../../../src/MenuPowers.cpp:1387
12581424 msgid "Next Level:"
12591425 msgstr "次のレベル:"
12601426
1261 #: ../../../src/MenuStash.cpp:96
1262 msgid "Shared Stash"
1263 msgstr "共有スタッシュ"
1264
1265 #: ../../../src/MenuStash.cpp:209
1427 #: ../../../src/MenuStash.cpp:53
1428 msgid "Private"
1429 msgstr ""
1430
1431 #: ../../../src/MenuStash.cpp:55
1432 msgid "Shared"
1433 msgstr ""
1434
1435 #: ../../../src/MenuStash.cpp:103
1436 msgid "Stash"
1437 msgstr ""
1438
1439 #: ../../../src/MenuStash.cpp:258
12661440 msgid "Can not store quest items in the stash."
12671441 msgstr "クエスト品はスタッシュには保管できない。"
12681442
1269 #: ../../../src/MenuStash.cpp:219
1443 #: ../../../src/MenuStash.cpp:263
1444 msgid "This item can not be stored in the stash."
1445 msgstr ""
1446
1447 #: ../../../src/MenuStash.cpp:268
1448 msgid "This item can not be stored in the private stash."
1449 msgstr ""
1450
1451 #: ../../../src/MenuStash.cpp:273
1452 msgid "This item can not be stored in the shared stash."
1453 msgstr ""
1454
1455 #: ../../../src/MenuStash.cpp:283
12701456 msgid "Stash is full."
12711457 msgstr "スタッシュは満杯です。"
12721458
1273 #: ../../../src/MenuTalker.cpp:454
1459 #: ../../../src/MenuStash.cpp:340
1460 #, c-format
1461 msgid "Can not store item in stash: %s"
1462 msgstr ""
1463
1464 #: ../../../src/MenuTalker.cpp:447
1465 #, c-format
1466 msgid "<dialog node %d>"
1467 msgstr ""
1468
1469 #: ../../../src/MenuTalker.cpp:455
12741470 msgid "Trade"
12751471 msgstr "売買"
12761472
12781474 msgid "Buyback"
12791475 msgstr "買い戻し"
12801476
1281 #: ../../../src/MenuVendor.cpp:279
1477 #: ../../../src/MenuVendor.cpp:281
12821478 msgid "Vendor"
12831479 msgstr "売り手"
12841480
1285 #: ../../../src/PowerManager.cpp:1136
1481 #: ../../../src/PowerManager.cpp:1170
12861482 #, c-format
12871483 msgid "+%d Shield"
12881484 msgstr "+%d シールド"
12891485
1290 #: ../../../src/PowerManager.cpp:1392
1486 #: ../../../src/PowerManager.cpp:1426
12911487 msgid "You are already transformed, untransform first."
12921488 msgstr ""
12931489
1294 #: ../../../src/PowerManager.cpp:1404
1490 #: ../../../src/PowerManager.cpp:1438
12951491 msgid "Could not untransform at this position."
12961492 msgstr "この位置では、変身をとくことは、できない。"
12971493
12981494 #: ../../../src/QuestLog.cpp:234
12991495 msgid "Completed Quests"
1300 msgstr ""
1301
1302 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1496 msgstr "完了したクエスト"
1497
1498 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13031499 msgid "Game saved."
13041500 msgstr "ゲームをセーブしました。"
13051501
1306 #: ../../../src/SDLInputState.cpp:582
1502 #: ../../../src/SDLInputState.cpp:643
1503 msgid "BkSp"
1504 msgstr ""
1505
1506 #: ../../../src/SDLInputState.cpp:644
1507 msgid "Caps"
1508 msgstr ""
1509
1510 #: ../../../src/SDLInputState.cpp:645
1511 msgid "Del"
1512 msgstr ""
1513
1514 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1515 msgid "End"
1516 msgstr ""
1517
1518 #: ../../../src/SDLInputState.cpp:648
1519 msgid "Esc"
1520 msgstr ""
1521
1522 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1523 msgid "Home"
1524 msgstr ""
1525
1526 #: ../../../src/SDLInputState.cpp:650
1527 msgid "Ins"
1528 msgstr ""
1529
1530 #: ../../../src/SDLInputState.cpp:651
1531 msgid "LAlt"
1532 msgstr ""
1533
1534 #: ../../../src/SDLInputState.cpp:652
1535 msgid "LCtrl"
1536 msgstr ""
1537
1538 #: ../../../src/SDLInputState.cpp:654
1539 msgid "LShft"
1540 msgstr ""
1541
1542 #: ../../../src/SDLInputState.cpp:655
1543 msgid "Num"
1544 msgstr ""
1545
1546 #: ../../../src/SDLInputState.cpp:656
1547 msgid "PgDn"
1548 msgstr ""
1549
1550 #: ../../../src/SDLInputState.cpp:657
1551 msgid "PgUp"
1552 msgstr ""
1553
1554 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1555 msgid "Pause"
1556 msgstr ""
1557
1558 #: ../../../src/SDLInputState.cpp:659
1559 msgid "Print"
1560 msgstr ""
1561
1562 #: ../../../src/SDLInputState.cpp:660
1563 msgid "RAlt"
1564 msgstr ""
1565
1566 #: ../../../src/SDLInputState.cpp:661
1567 msgid "RCtrl"
1568 msgstr ""
1569
1570 #: ../../../src/SDLInputState.cpp:662
1571 msgid "Ret"
1572 msgstr ""
1573
1574 #: ../../../src/SDLInputState.cpp:664
1575 msgid "RShft"
1576 msgstr ""
1577
1578 #: ../../../src/SDLInputState.cpp:665
1579 msgid "SLock"
1580 msgstr ""
1581
1582 #: ../../../src/SDLInputState.cpp:666
1583 msgid "Spc"
1584 msgstr ""
1585
1586 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1587 msgid "Tab"
1588 msgstr ""
1589
1590 #: ../../../src/SDLInputState.cpp:673
13071591 msgid "Backspace"
13081592 msgstr ""
13091593
1310 #: ../../../src/SDLInputState.cpp:583
1594 #: ../../../src/SDLInputState.cpp:674
13111595 msgid "CapsLock"
13121596 msgstr ""
13131597
1314 #: ../../../src/SDLInputState.cpp:586
1315 msgid "End"
1316 msgstr ""
1317
1318 #: ../../../src/SDLInputState.cpp:587
1598 #: ../../../src/SDLInputState.cpp:678
13191599 msgid "Escape"
13201600 msgstr ""
13211601
1322 #: ../../../src/SDLInputState.cpp:588
1323 msgid "Home"
1324 msgstr ""
1325
1326 #: ../../../src/SDLInputState.cpp:589
1602 #: ../../../src/SDLInputState.cpp:680
13271603 msgid "Insert"
13281604 msgstr ""
13291605
1330 #: ../../../src/SDLInputState.cpp:590
1606 #: ../../../src/SDLInputState.cpp:681
13311607 msgid "Left Alt"
13321608 msgstr ""
13331609
1334 #: ../../../src/SDLInputState.cpp:591
1610 #: ../../../src/SDLInputState.cpp:682
13351611 msgid "Left Ctrl"
13361612 msgstr ""
13371613
1338 #: ../../../src/SDLInputState.cpp:593
1614 #: ../../../src/SDLInputState.cpp:684
13391615 msgid "Left Shift"
13401616 msgstr ""
13411617
1342 #: ../../../src/SDLInputState.cpp:594
1618 #: ../../../src/SDLInputState.cpp:685
13431619 msgid "NumLock"
13441620 msgstr ""
13451621
1346 #: ../../../src/SDLInputState.cpp:595
1622 #: ../../../src/SDLInputState.cpp:686
13471623 msgid "PageDown"
13481624 msgstr ""
13491625
1350 #: ../../../src/SDLInputState.cpp:596
1626 #: ../../../src/SDLInputState.cpp:687
13511627 msgid "PageUp"
13521628 msgstr ""
13531629
1354 #: ../../../src/SDLInputState.cpp:597
1355 msgid "Pause"
1356 msgstr ""
1357
1358 #: ../../../src/SDLInputState.cpp:598
1630 #: ../../../src/SDLInputState.cpp:689
13591631 msgid "PrintScreen"
13601632 msgstr ""
13611633
1362 #: ../../../src/SDLInputState.cpp:599
1634 #: ../../../src/SDLInputState.cpp:690
13631635 msgid "Right Alt"
13641636 msgstr ""
13651637
1366 #: ../../../src/SDLInputState.cpp:600
1638 #: ../../../src/SDLInputState.cpp:691
13671639 msgid "Right Ctrl"
13681640 msgstr ""
13691641
1370 #: ../../../src/SDLInputState.cpp:601
1642 #: ../../../src/SDLInputState.cpp:692
13711643 msgid "Return"
13721644 msgstr ""
13731645
1374 #: ../../../src/SDLInputState.cpp:603
1646 #: ../../../src/SDLInputState.cpp:694
13751647 msgid "Right Shift"
13761648 msgstr ""
13771649
1378 #: ../../../src/SDLInputState.cpp:604
1650 #: ../../../src/SDLInputState.cpp:695
13791651 msgid "ScrollLock"
13801652 msgstr ""
13811653
1382 #: ../../../src/SDLInputState.cpp:605
1654 #: ../../../src/SDLInputState.cpp:696
13831655 msgid "Space"
13841656 msgstr ""
13851657
1386 #: ../../../src/SDLInputState.cpp:606
1387 msgid "Tab"
1388 msgstr ""
1389
1390 #: ../../../src/SDLInputState.cpp:620
1658 #: ../../../src/SDLInputState.cpp:710
1659 #, c-format
1660 msgid "M%d"
1661 msgstr ""
1662
1663 #: ../../../src/SDLInputState.cpp:716
13911664 #, c-format
13921665 msgid "Mouse %d"
13931666 msgstr ""
13941667
1395 #: ../../../src/SDLInputState.cpp:628
1668 #: ../../../src/SDLInputState.cpp:726
1669 #, c-format
1670 msgid "JX%d-"
1671 msgstr ""
1672
1673 #: ../../../src/SDLInputState.cpp:728
13961674 #, c-format
13971675 msgid "Axis %d -"
13981676 msgstr ""
13991677
1400 #: ../../../src/SDLInputState.cpp:630
1678 #: ../../../src/SDLInputState.cpp:732
1679 #, c-format
1680 msgid "JX%d+"
1681 msgstr ""
1682
1683 #: ../../../src/SDLInputState.cpp:734
14011684 #, c-format
14021685 msgid "Axis %d +"
14031686 msgstr ""
14041687
1405 #: ../../../src/SDLInputState.cpp:633
1688 #: ../../../src/SDLInputState.cpp:739
1689 #, c-format
1690 msgid "JB%d"
1691 msgstr ""
1692
1693 #: ../../../src/SDLInputState.cpp:741
14061694 #, c-format
14071695 msgid "Button %d"
14081696 msgstr ""
14091697
1410 #: ../../../src/SDLInputState.cpp:637
1411 msgid "(none)"
1412 msgstr ""
1413
1414 #: ../../../src/SDLInputState.cpp:677
1698 #: ../../../src/SDLInputState.cpp:788
14151699 msgid "Touch control D-Pad"
14161700 msgstr ""
14171701
1418 #: ../../../src/SDLInputState.cpp:701
1702 #: ../../../src/SDLInputState.cpp:812
14191703 msgid "Touch control buttons"
14201704 msgstr ""
14211705
1422 #: ../../../src/SDLInputState.cpp:716
1706 #: ../../../src/SDLInputState.cpp:827
14231707 msgid "Tap"
14241708 msgstr ""
14251709
1426 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1427 #: ../../../src/SDLInputState.cpp:768
1710 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1711 #, c-format
1712 msgid "Can not bind: %s"
1713 msgstr ""
1714
1715 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1716 #: ../../../src/SDLInputState.cpp:901
14281717 #, c-format
14291718 msgid "'%s' is no longer bound to:"
14301719 msgstr ""
14351724
14361725 #: ../../../src/Stats.cpp:39
14371726 msgid "Total amount of HP."
1438 msgstr ""
1727 msgstr "HP の 上限 です。"
14391728
14401729 #: ../../../src/Stats.cpp:43
14411730 msgid "HP Regen"
14511740
14521741 #: ../../../src/Stats.cpp:49
14531742 msgid "Total amount of MP."
1454 msgstr ""
1743 msgstr "MP の 上限 です。"
14551744
14561745 #: ../../../src/Stats.cpp:53
14571746 msgid "MP Regen"
14871776
14881777 #: ../../../src/Stats.cpp:69 ../../../src/Stats.cpp:74
14891778 msgid "Reduces the amount of damage taken."
1490 msgstr ""
1779 msgstr "攻撃を受けたときの ダメージ が どんだけ へるか のポイント"
14911780
14921781 #: ../../../src/Stats.cpp:73
14931782 msgid "Absorb Max"
15871876 msgid "k"
15881877 msgstr "千"
15891878
1590 #: ../../../src/Utils.cpp:580
1879 #: ../../../src/Utils.cpp:616
15911880 #, c-format
15921881 msgid "%s second"
15931882 msgstr "%s 秒"
15941883
1595 #: ../../../src/Utils.cpp:583
1884 #: ../../../src/Utils.cpp:619
15961885 #, c-format
15971886 msgid "%s seconds"
15981887 msgstr "%s 秒"
0 # SOME DESCRIPTIVE TITLE.
1 # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
2 # This file is distributed under the same license as the PACKAGE package.
3 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4 #
5 # Translators:
6 # bnk159hair <bnk159hair@naver.com>, 2020
7 #
8 #, fuzzy
9 msgid ""
10 msgstr ""
11 "Project-Id-Version: PACKAGE VERSION\n"
12 "Report-Msgid-Bugs-To: \n"
13 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
14 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
15 "Last-Translator: bnk159hair <bnk159hair@naver.com>, 2020\n"
16 "Language-Team: Korean (https://www.transifex.com/flareorg/teams/84925/ko/)\n"
17 "MIME-Version: 1.0\n"
18 "Content-Type: text/plain; charset=UTF-8\n"
19 "Content-Transfer-Encoding: 8bit\n"
20 "Language: ko\n"
21 "Plural-Forms: nplurals=1; plural=0;\n"
22
23 #: ../../../src/Avatar.cpp:387
24 msgid "Your health is low!"
25 msgstr "체력이 낮습니다!"
26
27 #: ../../../src/Avatar.cpp:419
28 #, c-format
29 msgid "Congratulations, you have reached level %d!"
30 msgstr "축하합니다. 레벨이 %d로 올랐습니다!"
31
32 #: ../../../src/Avatar.cpp:421
33 msgid "You may increase one or more attributes through the Character Menu."
34 msgstr "캐릭터 메뉴를 통해 하나 이상의 속성을 증가시킬 수 있습니다."
35
36 #: ../../../src/Avatar.cpp:425
37 msgid "You may unlock one or more abilities through the Powers Menu."
38 msgstr "능력창을 통해서 하나 이상의 능력을 얻을 수 있습니다."
39
40 #: ../../../src/Avatar.cpp:692
41 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
42 msgstr "패배하였습니다! ${INPUT_CONTINUE} 타이틀로 돌아가기."
43
44 #: ../../../src/Avatar.cpp:698
45 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
46 msgstr "패배하였습니다. ${INPUT_CONTINUE} 계속하기."
47
48 #: ../../../src/Avatar.cpp:949
49 msgid "Transformation expired. You have been moved back to a safe place."
50 msgstr "변신이 끝났습니다. 안전한 장소로 이동되었습니다."
51
52 #: ../../../src/CampaignManager.cpp:153
53 #, c-format
54 msgid "%d %s removed."
55 msgstr "%d %s 제거되었습니다."
56
57 #: ../../../src/CampaignManager.cpp:165
58 #, c-format
59 msgid "%s x%d removed."
60 msgstr "%s x%d 제거되었습니다."
61
62 #: ../../../src/CampaignManager.cpp:167
63 #, c-format
64 msgid "%s removed."
65 msgstr "%s제거되었습니다. "
66
67 #: ../../../src/CampaignManager.cpp:180
68 #, c-format
69 msgid "You receive %s."
70 msgstr ""
71
72 #: ../../../src/CampaignManager.cpp:182
73 #, c-format
74 msgid "You receive %s x%d."
75 msgstr ""
76
77 #: ../../../src/CampaignManager.cpp:191
78 #, c-format
79 msgid "You receive %d %s."
80 msgstr ""
81
82 #: ../../../src/CampaignManager.cpp:200
83 #, c-format
84 msgid "You receive %d XP."
85 msgstr ""
86
87 #: ../../../src/CampaignManager.cpp:206
88 msgid "HP restored."
89 msgstr "체력이 회복되었습니다."
90
91 #: ../../../src/CampaignManager.cpp:210
92 msgid "MP restored."
93 msgstr "마나가 회복되었습니다."
94
95 #: ../../../src/CampaignManager.cpp:215
96 msgid "HP and MP restored."
97 msgstr "체력과 마나가 회복되었습니다."
98
99 #: ../../../src/CampaignManager.cpp:219
100 msgid "Negative effects removed."
101 msgstr "디버프 효과가 해제되었습니다."
102
103 #: ../../../src/CampaignManager.cpp:225
104 msgid "HP and MP restored, negative effects removed"
105 msgstr "체력과 마나가 회복되고, 디버프 효과가 해제되었습니다."
106
107 #: ../../../src/DeviceList.cpp:56
108 msgid ""
109 "SDL software renderer\n"
110 "\n"
111 "Often slower, but less likely to have issues."
112 msgstr ""
113
114 #: ../../../src/DeviceList.cpp:59
115 msgid ""
116 "SDL hardware renderer\n"
117 "\n"
118 "The default renderer that is often faster than the SDL software renderer."
119 msgstr ""
120
121 #: ../../../src/EngineSettings.cpp:572
122 msgid "Adventurer"
123 msgstr "모험가"
124
125 #: ../../../src/Entity.cpp:522
126 msgid "miss"
127 msgstr ""
128
129 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
130 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
131 #, c-format
132 msgid "+%d HP"
133 msgstr ""
134
135 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
136 #: ../../../src/StatBlock.cpp:830
137 #, c-format
138 msgid "+%d MP"
139 msgstr ""
140
141 #: ../../../src/EventManager.cpp:782
142 msgid "Unknown destination"
143 msgstr "알려지지 않은 장소"
144
145 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
146 msgid "Loading..."
147 msgstr "로딩중..."
148
149 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
150 msgid "Delete Save"
151 msgstr "세이브 삭제"
152
153 #: ../../../src/GameStateLoad.cpp:90
154 msgid "Delete this save?"
155 msgstr "현재 세이브가 삭제되었습니다."
156
157 #: ../../../src/GameStateLoad.cpp:92
158 msgid "Exit to Title"
159 msgstr "타이틀로 나가기"
160
161 #: ../../../src/GameStateLoad.cpp:95
162 msgid "New Game"
163 msgstr "게임 새로 시작하기"
164
165 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
166 msgid "Choose a Slot"
167 msgstr "슬롯 선택하기"
168
169 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
170 msgid "Enable a story mod to continue"
171 msgstr "계속하기 위해 스토리 모드 선택"
172
173 #: ../../../src/GameStateLoad.cpp:597
174 msgid "Load Game"
175 msgstr "게임 불러오기"
176
177 #: ../../../src/GameStateLoad.cpp:706
178 msgid "Entering game world..."
179 msgstr "게임 월드로 들어가는 중..."
180
181 #: ../../../src/GameStateLoad.cpp:709
182 msgid "Loading saved game..."
183 msgstr "저장된 게임 불러오는 중..."
184
185 #: ../../../src/GameStateLoad.cpp:742
186 msgid "Invalid save"
187 msgstr "손상된 세이브"
188
189 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
190 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
191 #: ../../../src/MenuPowers.cpp:1543
192 #, c-format
193 msgid "Level %d"
194 msgstr ""
195
196 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
197 #: ../../../src/MenuConfig.cpp:244
198 msgid "Cancel"
199 msgstr "취소"
200
201 #: ../../../src/GameStateNew.cpp:68
202 msgid "Create"
203 msgstr "생성"
204
205 #: ../../../src/GameStateNew.cpp:76
206 msgid "Randomize"
207 msgstr "랜덤"
208
209 #: ../../../src/GameStateNew.cpp:92
210 msgid "Choose a Portrait"
211 msgstr "프로필 이미지 선택"
212
213 #: ../../../src/GameStateNew.cpp:96
214 msgid "Choose a Name"
215 msgstr "이름 선택"
216
217 #: ../../../src/GameStateNew.cpp:100
218 msgid "Permadeath?"
219 msgstr "부활할 수 없는 죽음?"
220
221 #: ../../../src/GameStateNew.cpp:104
222 msgid "Choose a Class"
223 msgstr "직업을 선택하세요"
224
225 #: ../../../src/GameStateTitle.cpp:107
226 msgid "Play Game"
227 msgstr "게임 플레이"
228
229 #: ../../../src/GameStateTitle.cpp:110
230 msgid "Enable a core mod to continue"
231 msgstr "계속하기 위해 코어 모드 활성화"
232
233 #: ../../../src/GameStateTitle.cpp:114
234 msgid "Configuration"
235 msgstr "설정"
236
237 #: ../../../src/GameStateTitle.cpp:117
238 msgid "Credits"
239 msgstr "개발진"
240
241 #: ../../../src/GameStateTitle.cpp:120
242 msgid "Exit Game"
243 msgstr "게임 나가기"
244
245 #: ../../../src/InputState.cpp:407
246 msgid "Accept"
247 msgstr ""
248
249 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
250 #: ../../../src/SDLInputState.cpp:698
251 msgid "Up"
252 msgstr ""
253
254 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
255 #: ../../../src/SDLInputState.cpp:676
256 msgid "Down"
257 msgstr ""
258
259 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
260 #: ../../../src/SDLInputState.cpp:683
261 msgid "Left"
262 msgstr ""
263
264 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
265 #: ../../../src/SDLInputState.cpp:693
266 msgid "Right"
267 msgstr ""
268
269 #: ../../../src/InputState.cpp:412
270 msgid "Bar1"
271 msgstr ""
272
273 #: ../../../src/InputState.cpp:413
274 msgid "Bar2"
275 msgstr ""
276
277 #: ../../../src/InputState.cpp:414
278 msgid "Bar3"
279 msgstr ""
280
281 #: ../../../src/InputState.cpp:415
282 msgid "Bar4"
283 msgstr ""
284
285 #: ../../../src/InputState.cpp:416
286 msgid "Bar5"
287 msgstr ""
288
289 #: ../../../src/InputState.cpp:417
290 msgid "Bar6"
291 msgstr ""
292
293 #: ../../../src/InputState.cpp:418
294 msgid "Bar7"
295 msgstr ""
296
297 #: ../../../src/InputState.cpp:419
298 msgid "Bar8"
299 msgstr ""
300
301 #: ../../../src/InputState.cpp:420
302 msgid "Bar9"
303 msgstr ""
304
305 #: ../../../src/InputState.cpp:421
306 msgid "Bar0"
307 msgstr ""
308
309 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
310 #: ../../../src/MenuCharacter.cpp:54
311 msgid "Character"
312 msgstr ""
313
314 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
315 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
316 msgid "Inventory"
317 msgstr ""
318
319 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
320 #: ../../../src/MenuPowers.cpp:167
321 msgid "Powers"
322 msgstr ""
323
324 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
325 #: ../../../src/MenuLog.cpp:72
326 msgid "Log"
327 msgstr ""
328
329 #: ../../../src/InputState.cpp:426
330 msgid "Main1"
331 msgstr ""
332
333 #: ../../../src/InputState.cpp:427
334 msgid "Main2"
335 msgstr ""
336
337 #: ../../../src/InputState.cpp:428
338 msgid "Ctrl"
339 msgstr ""
340
341 #: ../../../src/InputState.cpp:429
342 msgid "Shift"
343 msgstr ""
344
345 #: ../../../src/InputState.cpp:430
346 msgid "Alt"
347 msgstr ""
348
349 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
350 msgid "Delete"
351 msgstr ""
352
353 #: ../../../src/InputState.cpp:432
354 msgid "ActionBar Accept"
355 msgstr ""
356
357 #: ../../../src/InputState.cpp:433
358 msgid "ActionBar Left"
359 msgstr ""
360
361 #: ../../../src/InputState.cpp:434
362 msgid "ActionBar Right"
363 msgstr ""
364
365 #: ../../../src/InputState.cpp:435
366 msgid "ActionBar Use"
367 msgstr ""
368
369 #: ../../../src/InputState.cpp:436
370 msgid "Developer Menu"
371 msgstr ""
372
373 #: ../../../src/InputState.cpp:438
374 msgid "Left Mouse"
375 msgstr ""
376
377 #: ../../../src/InputState.cpp:439
378 msgid "Middle Mouse"
379 msgstr ""
380
381 #: ../../../src/InputState.cpp:440
382 msgid "Right Mouse"
383 msgstr ""
384
385 #: ../../../src/InputState.cpp:441
386 msgid "Wheel Up"
387 msgstr ""
388
389 #: ../../../src/InputState.cpp:442
390 msgid "Wheel Down"
391 msgstr ""
392
393 #: ../../../src/InputState.cpp:443
394 msgid "Mouse X1"
395 msgstr ""
396
397 #: ../../../src/InputState.cpp:444
398 msgid "Mouse X2"
399 msgstr ""
400
401 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
402 msgid "Unknown Item"
403 msgstr ""
404
405 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
406 #, c-format
407 msgid "%d%% Speed"
408 msgstr ""
409
410 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
411 #, c-format
412 msgid "%d%% Attack Speed"
413 msgstr ""
414
415 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
416 #: ../../../src/MenuPowers.cpp:832
417 #, c-format
418 msgid "Resistance (%s)"
419 msgstr ""
420
421 #: ../../../src/ItemManager.cpp:714
422 #, c-format
423 msgid "Requires %s"
424 msgstr ""
425
426 #: ../../../src/ItemManager.cpp:763
427 msgid "Quest Item"
428 msgstr ""
429
430 #: ../../../src/ItemManager.cpp:790
431 #, c-format
432 msgid "Quality: %s"
433 msgstr ""
434
435 #: ../../../src/ItemManager.cpp:815
436 #, c-format
437 msgid "Absorb: %d-%d"
438 msgstr ""
439
440 #: ../../../src/ItemManager.cpp:817
441 #, c-format
442 msgid "Absorb: %d"
443 msgstr ""
444
445 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
446 #: ../../../src/MenuPowers.cpp:1133
447 #, c-format
448 msgid "Requires Level %d"
449 msgstr ""
450
451 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
452 #: ../../../src/MenuPowers.cpp:1124
453 #, c-format
454 msgid "Requires %s %d"
455 msgstr ""
456
457 #: ../../../src/ItemManager.cpp:879
458 #, c-format
459 msgid "Requires Class: %s"
460 msgstr ""
461
462 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
463 #, c-format
464 msgid "Buy Price: %d %s"
465 msgstr ""
466
467 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
468 #, c-format
469 msgid "Buy Price: %d %s each"
470 msgstr ""
471
472 #: ../../../src/ItemManager.cpp:916
473 #, c-format
474 msgid "Sell Price: %d %s"
475 msgstr ""
476
477 #: ../../../src/ItemManager.cpp:918
478 #, c-format
479 msgid "Sell Price: %d %s each"
480 msgstr ""
481
482 #: ../../../src/ItemManager.cpp:927
483 msgid "Set:"
484 msgstr ""
485
486 #: ../../../src/ItemManager.cpp:934
487 #, c-format
488 msgid "%d items:"
489 msgstr ""
490
491 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
492 #, c-format
493 msgid "Press [%s] to use"
494 msgstr ""
495
496 #: ../../../src/ItemManager.cpp:951
497 #, c-format
498 msgid "Press [%s] to read"
499 msgstr ""
500
501 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
502 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
503 #, c-format
504 msgid "Hotkey: %s"
505 msgstr ""
506
507 #: ../../../src/MenuActionBar.cpp:599
508 msgid "Not enough MP."
509 msgstr ""
510
511 #: ../../../src/MenuActiveEffects.cpp:124
512 #, c-format
513 msgid "x%d"
514 msgstr ""
515
516 #: ../../../src/MenuActiveEffects.cpp:219
517 msgid "Remaining:"
518 msgstr ""
519
520 #: ../../../src/MenuActiveEffects.cpp:225
521 #, c-format
522 msgid "x%d stacks"
523 msgstr ""
524
525 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
526 msgid "Name"
527 msgstr ""
528
529 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
530 msgid "Level"
531 msgstr ""
532
533 #: ../../../src/MenuCharacter.cpp:310
534 #, c-format
535 msgid "%d unspent stat point"
536 msgstr ""
537
538 #: ../../../src/MenuCharacter.cpp:313
539 #, c-format
540 msgid "%d unspent stat points"
541 msgstr ""
542
543 #: ../../../src/MenuCharacter.cpp:355
544 #, c-format
545 msgid "Reduces the damage taken from \"%s\" elemental attacks."
546 msgstr ""
547
548 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
549 #, c-format
550 msgid "XP: %d"
551 msgstr ""
552
553 #: ../../../src/MenuCharacter.cpp:367
554 #, c-format
555 msgid "Next: %d"
556 msgstr ""
557
558 #: ../../../src/MenuCharacter.cpp:373
559 #, c-format
560 msgid "base (%d), bonus (%d)"
561 msgstr ""
562
563 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
564 msgid "Related stats:"
565 msgstr ""
566
567 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
568 #, c-format
569 msgid "Each level grants %d."
570 msgstr ""
571
572 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
573 #, c-format
574 msgid "Each point of %s grants %d."
575 msgstr ""
576
577 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
578 msgid "Clear"
579 msgstr ""
580
581 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
582 msgid "Assign:"
583 msgstr ""
584
585 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
586 msgid "Defaults"
587 msgstr ""
588
589 #: ../../../src/MenuConfig.cpp:123
590 msgid "Reset ALL settings?"
591 msgstr ""
592
593 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
594 msgid "OK"
595 msgstr ""
596
597 #: ../../../src/MenuConfig.cpp:246
598 msgid "Continue"
599 msgstr ""
600
601 #: ../../../src/MenuConfig.cpp:248
602 msgid "Save Game"
603 msgstr ""
604
605 #: ../../../src/MenuConfig.cpp:291
606 msgid "Default"
607 msgstr ""
608
609 #: ../../../src/MenuConfig.cpp:291
610 msgid ""
611 "Show all loot tooltips, except for those that would be obscured by the "
612 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
613 msgstr ""
614
615 #: ../../../src/MenuConfig.cpp:292
616 msgid "Show all"
617 msgstr ""
618
619 #: ../../../src/MenuConfig.cpp:292
620 msgid ""
621 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
622 msgstr ""
623
624 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
625 msgid "Hidden"
626 msgstr ""
627
628 #: ../../../src/MenuConfig.cpp:293
629 msgid ""
630 "Always hide loot tooltips, except for when a piece of loot is hovered with "
631 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
632 msgstr ""
633
634 #: ../../../src/MenuConfig.cpp:296
635 msgid "Visible"
636 msgstr ""
637
638 #: ../../../src/MenuConfig.cpp:297
639 msgid "Visible (2x zoom)"
640 msgstr ""
641
642 #: ../../../src/MenuConfig.cpp:301
643 msgid ""
644 "Controls the type of warning to be activated when the player is below the "
645 "low health threshold."
646 msgstr ""
647
648 #: ../../../src/MenuConfig.cpp:302
649 msgid "- Display a message"
650 msgstr ""
651
652 #: ../../../src/MenuConfig.cpp:303
653 msgid "- Play a sound"
654 msgstr ""
655
656 #: ../../../src/MenuConfig.cpp:304
657 msgid "- Change the cursor"
658 msgstr ""
659
660 #: ../../../src/MenuConfig.cpp:306
661 msgid "Disabled"
662 msgstr ""
663
664 #: ../../../src/MenuConfig.cpp:307
665 msgid "All"
666 msgstr ""
667
668 #: ../../../src/MenuConfig.cpp:308
669 msgid "Message & Cursor"
670 msgstr ""
671
672 #: ../../../src/MenuConfig.cpp:309
673 msgid "Message & Sound"
674 msgstr ""
675
676 #: ../../../src/MenuConfig.cpp:310
677 msgid "Sound & Cursor"
678 msgstr ""
679
680 #: ../../../src/MenuConfig.cpp:311
681 msgid "Message"
682 msgstr ""
683
684 #: ../../../src/MenuConfig.cpp:312
685 msgid "Cursor"
686 msgstr ""
687
688 #: ../../../src/MenuConfig.cpp:313
689 msgid "Sound"
690 msgstr ""
691
692 #: ../../../src/MenuConfig.cpp:319
693 msgid ""
694 "When the player's health drops below the given threshold, the low health "
695 "notifications are triggered if one or more of them is enabled."
696 msgstr ""
697
698 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
699 msgid "Exit"
700 msgstr ""
701
702 #: ../../../src/MenuConfig.cpp:333
703 msgid "Video"
704 msgstr ""
705
706 #: ../../../src/MenuConfig.cpp:334
707 msgid "Audio"
708 msgstr ""
709
710 #: ../../../src/MenuConfig.cpp:335
711 msgid "Interface"
712 msgstr ""
713
714 #: ../../../src/MenuConfig.cpp:336
715 msgid "Input"
716 msgstr ""
717
718 #: ../../../src/MenuConfig.cpp:337
719 msgid "Keybindings"
720 msgstr ""
721
722 #: ../../../src/MenuConfig.cpp:338
723 msgid "Mods"
724 msgstr ""
725
726 #: ../../../src/MenuConfig.cpp:350
727 msgid "Paused"
728 msgstr ""
729
730 #: ../../../src/MenuConfig.cpp:353
731 msgid "Time Played"
732 msgstr ""
733
734 #: ../../../src/MenuConfig.cpp:359
735 msgid "Renderer"
736 msgstr ""
737
738 #: ../../../src/MenuConfig.cpp:360
739 msgid "Full Screen Mode"
740 msgstr ""
741
742 #: ../../../src/MenuConfig.cpp:361
743 msgid "Hardware surfaces"
744 msgstr ""
745
746 #: ../../../src/MenuConfig.cpp:362
747 msgid "V-Sync"
748 msgstr ""
749
750 #: ../../../src/MenuConfig.cpp:363
751 msgid "Texture Filtering"
752 msgstr ""
753
754 #: ../../../src/MenuConfig.cpp:364
755 msgid "DPI scaling"
756 msgstr ""
757
758 #: ../../../src/MenuConfig.cpp:365
759 msgid "Parallax Layers"
760 msgstr ""
761
762 #: ../../../src/MenuConfig.cpp:366
763 msgid "Allow changing gamma"
764 msgstr ""
765
766 #: ../../../src/MenuConfig.cpp:367
767 msgid "Gamma"
768 msgstr ""
769
770 #: ../../../src/MenuConfig.cpp:369
771 msgid "Sound Volume"
772 msgstr ""
773
774 #: ../../../src/MenuConfig.cpp:370
775 msgid "Music Volume"
776 msgstr ""
777
778 #: ../../../src/MenuConfig.cpp:372
779 msgid "Language"
780 msgstr ""
781
782 #: ../../../src/MenuConfig.cpp:373
783 msgid "Show FPS"
784 msgstr ""
785
786 #: ../../../src/MenuConfig.cpp:374
787 msgid "Hardware mouse cursor"
788 msgstr ""
789
790 #: ../../../src/MenuConfig.cpp:375
791 msgid "Colorblind Mode"
792 msgstr ""
793
794 #: ../../../src/MenuConfig.cpp:376
795 msgid "Developer Mode"
796 msgstr ""
797
798 #: ../../../src/MenuConfig.cpp:377
799 msgid "Subtitles"
800 msgstr ""
801
802 #: ../../../src/MenuConfig.cpp:378
803 msgid "Loot tooltip visibility"
804 msgstr ""
805
806 #: ../../../src/MenuConfig.cpp:379
807 msgid "Mini-map mode"
808 msgstr ""
809
810 #: ../../../src/MenuConfig.cpp:380
811 msgid "Always show stat bar labels"
812 msgstr ""
813
814 #: ../../../src/MenuConfig.cpp:381
815 msgid "Allow stat bar auto-hiding"
816 msgstr ""
817
818 #: ../../../src/MenuConfig.cpp:382
819 msgid "Show combat text"
820 msgstr ""
821
822 #: ../../../src/MenuConfig.cpp:383
823 msgid "Automatically equip items"
824 msgstr ""
825
826 #: ../../../src/MenuConfig.cpp:384
827 msgid "Show hidden entity markers"
828 msgstr ""
829
830 #: ../../../src/MenuConfig.cpp:385
831 msgid "Low health notification"
832 msgstr ""
833
834 #: ../../../src/MenuConfig.cpp:386
835 msgid "Low health threshold"
836 msgstr ""
837
838 #: ../../../src/MenuConfig.cpp:389
839 msgid "Joystick"
840 msgstr ""
841
842 #: ../../../src/MenuConfig.cpp:390
843 msgid "Move hero using mouse"
844 msgstr ""
845
846 #: ../../../src/MenuConfig.cpp:391
847 msgid "Mouse aim"
848 msgstr ""
849
850 #: ../../../src/MenuConfig.cpp:392
851 msgid "Do not use mouse"
852 msgstr ""
853
854 #: ../../../src/MenuConfig.cpp:393
855 msgid "Swap mouse movement button"
856 msgstr ""
857
858 #: ../../../src/MenuConfig.cpp:394
859 msgid "Attack with mouse movement"
860 msgstr ""
861
862 #: ../../../src/MenuConfig.cpp:395
863 msgid "Joystick Deadzone"
864 msgstr ""
865
866 #: ../../../src/MenuConfig.cpp:405
867 #, c-format
868 msgid "Primary binding: %s"
869 msgstr ""
870
871 #: ../../../src/MenuConfig.cpp:406
872 #, c-format
873 msgid "Alternate binding: %s"
874 msgstr ""
875
876 #: ../../../src/MenuConfig.cpp:407
877 #, c-format
878 msgid "Joystick binding: %s"
879 msgstr ""
880
881 #: ../../../src/MenuConfig.cpp:508
882 msgid ""
883 "Will try to store surfaces in video memory versus system memory. The effect "
884 "this has on performance depends on the renderer."
885 msgstr ""
886
887 #: ../../../src/MenuConfig.cpp:509
888 msgid ""
889 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
890 "windowed mode or input lag."
891 msgstr ""
892
893 #: ../../../src/MenuConfig.cpp:510
894 msgid ""
895 "When enabled, this uses the screen DPI in addition to the window dimensions "
896 "to scale the rendering resolution. Otherwise, only the window dimensions are"
897 " used."
898 msgstr ""
899
900 #: ../../../src/MenuConfig.cpp:511
901 msgid ""
902 "This enables parallax (non-tile) layers. Disabling this setting can improve "
903 "performance in some cases."
904 msgstr ""
905
906 #: ../../../src/MenuConfig.cpp:512
907 msgid ""
908 "Enables the below setting that controls the screen gamma level. The behavior"
909 " of the gamma setting can vary between platforms."
910 msgstr ""
911
912 #: ../../../src/MenuConfig.cpp:513
913 msgid ""
914 "Provides additional text for information that is primarily conveyed through "
915 "color."
916 msgstr ""
917
918 #: ../../../src/MenuConfig.cpp:514
919 msgid ""
920 "Some mods will automatically hide the stat bars when they are inactive. "
921 "Disabling this option will keep them displayed at all times."
922 msgstr ""
923
924 #: ../../../src/MenuConfig.cpp:515
925 msgid ""
926 "When enabled, empty equipment slots will be filled with applicable items "
927 "when they are obtained."
928 msgstr ""
929
930 #: ../../../src/MenuConfig.cpp:516
931 msgid ""
932 "Shows a marker above enemies, allies, and the player when they are obscured "
933 "by tall objects."
934 msgstr ""
935
936 #: ../../../src/MenuConfig.cpp:517
937 msgid ""
938 "This allows the game to be controlled entirely with the keyboard (or "
939 "joystick)."
940 msgstr ""
941
942 #: ../../../src/MenuConfig.cpp:518
943 msgid ""
944 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
945 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
946 "instead of 'Main1'."
947 msgstr ""
948
949 #: ../../../src/MenuConfig.cpp:519
950 msgid ""
951 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
952 "assigned to the movement button can be used by targeting an enemy. If this "
953 "setting is disabled, it is required to use 'Shift' to access the Power "
954 "assigned to the movement button."
955 msgstr ""
956
957 #: ../../../src/MenuConfig.cpp:520
958 msgid ""
959 "The player's attacks will be aimed in the direction of the mouse cursor when"
960 " this is enabled."
961 msgstr ""
962
963 #: ../../../src/MenuConfig.cpp:571
964 msgid "Active Mods"
965 msgstr ""
966
967 #: ../../../src/MenuConfig.cpp:580
968 msgid "Available Mods"
969 msgstr ""
970
971 #: ../../../src/MenuConfig.cpp:599
972 msgid "<< Disable"
973 msgstr ""
974
975 #: ../../../src/MenuConfig.cpp:605
976 msgid "Enable >>"
977 msgstr ""
978
979 #: ../../../src/MenuConfig.cpp:1436
980 msgid "Version:"
981 msgstr ""
982
983 #: ../../../src/MenuConfig.cpp:1441
984 msgid "Game:"
985 msgstr ""
986
987 #: ../../../src/MenuConfig.cpp:1446
988 msgid "Engine version:"
989 msgstr ""
990
991 #: ../../../src/MenuConfig.cpp:1454
992 msgid "Requires mods:"
993 msgstr ""
994
995 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
996 msgid "(none)"
997 msgstr ""
998
999 #: ../../../src/MenuConfig.cpp:1579
1000 msgid "Save & Exit"
1001 msgstr ""
1002
1003 #: ../../../src/MenuDevConsole.cpp:63
1004 msgid "Execute"
1005 msgstr ""
1006
1007 #: ../../../src/MenuDevConsole.cpp:101 ../../../src/MenuDevConsole.cpp:151
1008 msgid "Developer Console"
1009 msgstr ""
1010
1011 #: ../../../src/MenuDevConsole.cpp:141
1012 #, c-format
1013 msgid "Use '%s' to inspect with the cursor."
1014 msgstr ""
1015
1016 #: ../../../src/MenuDevConsole.cpp:146
1017 msgid "Arguments with spaces should be enclosed with double quotes. Example:"
1018 msgstr ""
1019
1020 #: ../../../src/MenuDevConsole.cpp:147
1021 msgid "Type 'help' to get a list of commands."
1022 msgstr ""
1023
1024 #: ../../../src/MenuDevConsole.cpp:209 ../../../src/MenuDevConsole.cpp:213
1025 msgid "px"
1026 msgstr ""
1027
1028 #: ../../../src/MenuDevConsole.cpp:224
1029 msgid "Distance"
1030 msgstr ""
1031
1032 #: ../../../src/MenuDevConsole.cpp:239 ../../../src/MenuDevConsole.cpp:286
1033 msgid "Entity"
1034 msgstr ""
1035
1036 #: ../../../src/MenuDevConsole.cpp:261 ../../../src/MenuDevConsole.cpp:268
1037 msgid "none"
1038 msgstr ""
1039
1040 #: ../../../src/MenuDevConsole.cpp:262 ../../../src/MenuDevConsole.cpp:264
1041 msgid "wall"
1042 msgstr ""
1043
1044 #: ../../../src/MenuDevConsole.cpp:263 ../../../src/MenuDevConsole.cpp:265
1045 msgid "short wall / pit"
1046 msgstr ""
1047
1048 #: ../../../src/MenuDevConsole.cpp:266
1049 msgid "entity"
1050 msgstr ""
1051
1052 #: ../../../src/MenuDevConsole.cpp:267
1053 msgid "entity, ally"
1054 msgstr ""
1055
1056 #: ../../../src/MenuDevConsole.cpp:274
1057 msgid "Tile"
1058 msgstr ""
1059
1060 #: ../../../src/MenuDevConsole.cpp:360
1061 msgid "adds a power to the action bar"
1062 msgstr ""
1063
1064 #: ../../../src/MenuDevConsole.cpp:361
1065 msgid "turns on/off the display of the FPS counter"
1066 msgstr ""
1067
1068 #: ../../../src/MenuDevConsole.cpp:362
1069 msgid "turns on/off all of the HUD elements"
1070 msgstr ""
1071
1072 #: ../../../src/MenuDevConsole.cpp:363
1073 msgid "turns on/off the developer hud"
1074 msgstr ""
1075
1076 #: ../../../src/MenuDevConsole.cpp:364
1077 msgid ""
1078 "Prints a list of powers that match a search term. No search term will list "
1079 "all items"
1080 msgstr ""
1081
1082 #: ../../../src/MenuDevConsole.cpp:365
1083 msgid "Prints out all the map filenames located in the \"maps/\" directory."
1084 msgstr ""
1085
1086 #: ../../../src/MenuDevConsole.cpp:366
1087 msgid ""
1088 "Prints out the active campaign statuses that match a search term. No search "
1089 "term will list all active statuses"
1090 msgstr ""
1091
1092 #: ../../../src/MenuDevConsole.cpp:367
1093 msgid ""
1094 "Prints a list of items that match a search term. No search term will list "
1095 "all items"
1096 msgstr ""
1097
1098 #: ../../../src/MenuDevConsole.cpp:368
1099 msgid ""
1100 "parses a series of event components and executes them as a single event"
1101 msgstr ""
1102
1103 #: ../../../src/MenuDevConsole.cpp:369
1104 msgid "clears the command history"
1105 msgstr ""
1106
1107 #: ../../../src/MenuDevConsole.cpp:370
1108 msgid "displays this text"
1109 msgstr ""
1110
1111 #: ../../../src/MenuDevConsole.cpp:377
1112 msgid "Toggled the developer hud"
1113 msgstr ""
1114
1115 #: ../../../src/MenuDevConsole.cpp:381
1116 msgid "Toggled the hud"
1117 msgstr ""
1118
1119 #: ../../../src/MenuDevConsole.cpp:385
1120 msgid "Toggled the FPS counter"
1121 msgstr ""
1122
1123 #: ../../../src/MenuDevConsole.cpp:534
1124 msgid "ERROR: Incorrect number of arguments"
1125 msgstr ""
1126
1127 #: ../../../src/MenuDevConsole.cpp:536 ../../../src/MenuDevConsole.cpp:564
1128 msgid "HINT:"
1129 msgstr ""
1130
1131 #: ../../../src/MenuDevConsole.cpp:536
1132 msgid "<id>"
1133 msgstr ""
1134
1135 #: ../../../src/MenuDevConsole.cpp:552
1136 #, c-format
1137 msgid "ERROR: '%s' is not a valid event key"
1138 msgstr ""
1139
1140 #: ../../../src/MenuDevConsole.cpp:562
1141 msgid "ERROR: Too few arguments"
1142 msgstr ""
1143
1144 #: ../../../src/MenuDevConsole.cpp:564
1145 msgid "<key>=<val> <key>=<val> ..."
1146 msgstr ""
1147
1148 #: ../../../src/MenuDevConsole.cpp:569
1149 msgid "ERROR: Unknown command"
1150 msgstr ""
1151
1152 #: ../../../src/MenuDevConsole.cpp:571
1153 msgid "HINT: Type help"
1154 msgstr ""
1155
1156 #: ../../../src/MenuEnemy.cpp:162
1157 #, c-format
1158 msgid "%s level %d"
1159 msgstr ""
1160
1161 #: ../../../src/MenuEnemy.cpp:186
1162 msgid "Dead"
1163 msgstr ""
1164
1165 #: ../../../src/MenuEnemy.cpp:188
1166 msgid "Destroyed"
1167 msgstr ""
1168
1169 #: ../../../src/MenuInventory.cpp:177
1170 #, c-format
1171 msgid "Lost %d%% of %s."
1172 msgstr ""
1173
1174 #: ../../../src/MenuInventory.cpp:184
1175 #, c-format
1176 msgid "Lost %d%% of total XP."
1177 msgstr ""
1178
1179 #: ../../../src/MenuInventory.cpp:189
1180 #, c-format
1181 msgid "Lost %d%% of current level XP."
1182 msgstr ""
1183
1184 #: ../../../src/MenuInventory.cpp:215
1185 #, c-format
1186 msgid "Lost %s."
1187 msgstr ""
1188
1189 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
1190 #, c-format
1191 msgid "%d %s"
1192 msgstr ""
1193
1194 #: ../../../src/MenuInventory.cpp:300
1195 msgid "Pick up item(s):"
1196 msgstr ""
1197
1198 #: ../../../src/MenuInventory.cpp:301
1199 msgid "Use or equip item:"
1200 msgstr ""
1201
1202 #: ../../../src/MenuInventory.cpp:302
1203 #, c-format
1204 msgid "%s modifiers"
1205 msgstr ""
1206
1207 #: ../../../src/MenuInventory.cpp:303
1208 msgid "Select a quantity of item:"
1209 msgstr ""
1210
1211 #: ../../../src/MenuInventory.cpp:306
1212 msgid "Stash item stack:"
1213 msgstr ""
1214
1215 #: ../../../src/MenuInventory.cpp:308
1216 msgid "Sell item stack:"
1217 msgstr ""
1218
1219 #: ../../../src/MenuInventory.cpp:574
1220 msgid "You don't have enough of the required item."
1221 msgstr ""
1222
1223 #: ../../../src/MenuInventory.cpp:586
1224 msgid "You can't use this item right now."
1225 msgstr ""
1226
1227 #: ../../../src/MenuInventory.cpp:598
1228 msgid "This item can only be used from the action bar."
1229 msgstr ""
1230
1231 #: ../../../src/MenuInventory.cpp:716
1232 msgid "Inventory is full."
1233 msgstr ""
1234
1235 #: ../../../src/MenuInventory.cpp:841
1236 #, c-format
1237 msgid "Not enough %s."
1238 msgstr ""
1239
1240 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
1241 msgid "This item can not be sold."
1242 msgstr ""
1243
1244 #: ../../../src/MenuLog.cpp:91
1245 msgid "Notes"
1246 msgstr ""
1247
1248 #: ../../../src/MenuLog.cpp:92
1249 msgid "Quests"
1250 msgstr ""
1251
1252 #: ../../../src/MenuManager.cpp:296
1253 #, c-format
1254 msgid "XP: %d/%d"
1255 msgstr ""
1256
1257 #: ../../../src/MenuManager.cpp:854
1258 msgid "This item can not be dropped."
1259 msgstr ""
1260
1261 #: ../../../src/MenuNumPicker.cpp:59
1262 msgid "Enter amount:"
1263 msgstr ""
1264
1265 #: ../../../src/MenuPowers.cpp:786
1266 msgid "Passive"
1267 msgstr ""
1268
1269 #: ../../../src/MenuPowers.cpp:791
1270 #, c-format
1271 msgid "Costs %d MP"
1272 msgstr ""
1273
1274 #: ../../../src/MenuPowers.cpp:795
1275 #, c-format
1276 msgid "Costs %d HP"
1277 msgstr ""
1278
1279 #: ../../../src/MenuPowers.cpp:800
1280 msgid "Cooldown:"
1281 msgstr ""
1282
1283 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
1284 msgid "Damage per second"
1285 msgstr ""
1286
1287 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
1288 msgid "HP per second"
1289 msgstr ""
1290
1291 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
1292 msgid "MP per second"
1293 msgstr ""
1294
1295 #: ../../../src/MenuPowers.cpp:884
1296 msgid "Immobilize"
1297 msgstr ""
1298
1299 #: ../../../src/MenuPowers.cpp:892
1300 msgid "Immunity"
1301 msgstr ""
1302
1303 #: ../../../src/MenuPowers.cpp:895
1304 msgid "Immunity to damage over time"
1305 msgstr ""
1306
1307 #: ../../../src/MenuPowers.cpp:898
1308 msgid "Immunity to slow"
1309 msgstr ""
1310
1311 #: ../../../src/MenuPowers.cpp:901
1312 msgid "Immunity to stun"
1313 msgstr ""
1314
1315 #: ../../../src/MenuPowers.cpp:904
1316 msgid "Immunity to HP steal"
1317 msgstr ""
1318
1319 #: ../../../src/MenuPowers.cpp:907
1320 msgid "Immunity to MP steal"
1321 msgstr ""
1322
1323 #: ../../../src/MenuPowers.cpp:910
1324 msgid "Immunity to knockback"
1325 msgstr ""
1326
1327 #: ../../../src/MenuPowers.cpp:913
1328 msgid "Immunity to damage reflection"
1329 msgstr ""
1330
1331 #: ../../../src/MenuPowers.cpp:916
1332 msgid "Stun"
1333 msgstr ""
1334
1335 #: ../../../src/MenuPowers.cpp:919
1336 msgid "Automatic revive on death"
1337 msgstr ""
1338
1339 #: ../../../src/MenuPowers.cpp:922
1340 msgid "Convert"
1341 msgstr ""
1342
1343 #: ../../../src/MenuPowers.cpp:925
1344 msgid "Fear"
1345 msgstr ""
1346
1347 #: ../../../src/MenuPowers.cpp:928
1348 msgid "Lifespan"
1349 msgstr ""
1350
1351 #: ../../../src/MenuPowers.cpp:952
1352 msgid "Magical Shield"
1353 msgstr ""
1354
1355 #: ../../../src/MenuPowers.cpp:981
1356 msgid "Healing"
1357 msgstr ""
1358
1359 #: ../../../src/MenuPowers.cpp:984
1360 msgid "Knockback"
1361 msgstr ""
1362
1363 #: ../../../src/MenuPowers.cpp:1009
1364 #, c-format
1365 msgid "%d%% chance"
1366 msgstr ""
1367
1368 #: ../../../src/MenuPowers.cpp:1061
1369 msgid "Base Accuracy"
1370 msgstr ""
1371
1372 #: ../../../src/MenuPowers.cpp:1081
1373 msgid "Base Critical Chance"
1374 msgstr ""
1375
1376 #: ../../../src/MenuPowers.cpp:1089
1377 msgid "Ignores Absorbtion"
1378 msgstr ""
1379
1380 #: ../../../src/MenuPowers.cpp:1094
1381 msgid "Ignores Avoidance"
1382 msgstr ""
1383
1384 #: ../../../src/MenuPowers.cpp:1099
1385 #, c-format
1386 msgid "%d%% Chance to crit slowed targets"
1387 msgstr ""
1388
1389 #: ../../../src/MenuPowers.cpp:1104
1390 #, c-format
1391 msgid "Elemental Damage (%s)"
1392 msgstr ""
1393
1394 #: ../../../src/MenuPowers.cpp:1113
1395 #, c-format
1396 msgid "Requires a %s"
1397 msgstr ""
1398
1399 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
1400 #, c-format
1401 msgid "Requires Power: %s"
1402 msgstr ""
1403
1404 #: ../../../src/MenuPowers.cpp:1162
1405 msgid "Click to Unlock (uses 1 Skill Point)"
1406 msgstr ""
1407
1408 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
1409 msgid "Requires 1 Skill Point"
1410 msgstr ""
1411
1412 #: ../../../src/MenuPowers.cpp:1354
1413 #, c-format
1414 msgid "%d unspent skill point"
1415 msgstr ""
1416
1417 #: ../../../src/MenuPowers.cpp:1357
1418 #, c-format
1419 msgid "%d unspent skill points"
1420 msgstr ""
1421
1422 #: ../../../src/MenuPowers.cpp:1387
1423 msgid "Next Level:"
1424 msgstr ""
1425
1426 #: ../../../src/MenuStash.cpp:53
1427 msgid "Private"
1428 msgstr ""
1429
1430 #: ../../../src/MenuStash.cpp:55
1431 msgid "Shared"
1432 msgstr ""
1433
1434 #: ../../../src/MenuStash.cpp:103
1435 msgid "Stash"
1436 msgstr ""
1437
1438 #: ../../../src/MenuStash.cpp:258
1439 msgid "Can not store quest items in the stash."
1440 msgstr ""
1441
1442 #: ../../../src/MenuStash.cpp:263
1443 msgid "This item can not be stored in the stash."
1444 msgstr ""
1445
1446 #: ../../../src/MenuStash.cpp:268
1447 msgid "This item can not be stored in the private stash."
1448 msgstr ""
1449
1450 #: ../../../src/MenuStash.cpp:273
1451 msgid "This item can not be stored in the shared stash."
1452 msgstr ""
1453
1454 #: ../../../src/MenuStash.cpp:283
1455 msgid "Stash is full."
1456 msgstr ""
1457
1458 #: ../../../src/MenuStash.cpp:340
1459 #, c-format
1460 msgid "Can not store item in stash: %s"
1461 msgstr ""
1462
1463 #: ../../../src/MenuTalker.cpp:447
1464 #, c-format
1465 msgid "<dialog node %d>"
1466 msgstr ""
1467
1468 #: ../../../src/MenuTalker.cpp:455
1469 msgid "Trade"
1470 msgstr ""
1471
1472 #: ../../../src/MenuVendor.cpp:58
1473 msgid "Buyback"
1474 msgstr ""
1475
1476 #: ../../../src/MenuVendor.cpp:281
1477 msgid "Vendor"
1478 msgstr ""
1479
1480 #: ../../../src/PowerManager.cpp:1170
1481 #, c-format
1482 msgid "+%d Shield"
1483 msgstr ""
1484
1485 #: ../../../src/PowerManager.cpp:1426
1486 msgid "You are already transformed, untransform first."
1487 msgstr ""
1488
1489 #: ../../../src/PowerManager.cpp:1438
1490 msgid "Could not untransform at this position."
1491 msgstr ""
1492
1493 #: ../../../src/QuestLog.cpp:234
1494 msgid "Completed Quests"
1495 msgstr ""
1496
1497 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
1498 msgid "Game saved."
1499 msgstr ""
1500
1501 #: ../../../src/SDLInputState.cpp:643
1502 msgid "BkSp"
1503 msgstr ""
1504
1505 #: ../../../src/SDLInputState.cpp:644
1506 msgid "Caps"
1507 msgstr ""
1508
1509 #: ../../../src/SDLInputState.cpp:645
1510 msgid "Del"
1511 msgstr ""
1512
1513 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1514 msgid "End"
1515 msgstr ""
1516
1517 #: ../../../src/SDLInputState.cpp:648
1518 msgid "Esc"
1519 msgstr ""
1520
1521 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1522 msgid "Home"
1523 msgstr ""
1524
1525 #: ../../../src/SDLInputState.cpp:650
1526 msgid "Ins"
1527 msgstr ""
1528
1529 #: ../../../src/SDLInputState.cpp:651
1530 msgid "LAlt"
1531 msgstr ""
1532
1533 #: ../../../src/SDLInputState.cpp:652
1534 msgid "LCtrl"
1535 msgstr ""
1536
1537 #: ../../../src/SDLInputState.cpp:654
1538 msgid "LShft"
1539 msgstr ""
1540
1541 #: ../../../src/SDLInputState.cpp:655
1542 msgid "Num"
1543 msgstr ""
1544
1545 #: ../../../src/SDLInputState.cpp:656
1546 msgid "PgDn"
1547 msgstr ""
1548
1549 #: ../../../src/SDLInputState.cpp:657
1550 msgid "PgUp"
1551 msgstr ""
1552
1553 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1554 msgid "Pause"
1555 msgstr ""
1556
1557 #: ../../../src/SDLInputState.cpp:659
1558 msgid "Print"
1559 msgstr ""
1560
1561 #: ../../../src/SDLInputState.cpp:660
1562 msgid "RAlt"
1563 msgstr ""
1564
1565 #: ../../../src/SDLInputState.cpp:661
1566 msgid "RCtrl"
1567 msgstr ""
1568
1569 #: ../../../src/SDLInputState.cpp:662
1570 msgid "Ret"
1571 msgstr ""
1572
1573 #: ../../../src/SDLInputState.cpp:664
1574 msgid "RShft"
1575 msgstr ""
1576
1577 #: ../../../src/SDLInputState.cpp:665
1578 msgid "SLock"
1579 msgstr ""
1580
1581 #: ../../../src/SDLInputState.cpp:666
1582 msgid "Spc"
1583 msgstr ""
1584
1585 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1586 msgid "Tab"
1587 msgstr ""
1588
1589 #: ../../../src/SDLInputState.cpp:673
1590 msgid "Backspace"
1591 msgstr ""
1592
1593 #: ../../../src/SDLInputState.cpp:674
1594 msgid "CapsLock"
1595 msgstr ""
1596
1597 #: ../../../src/SDLInputState.cpp:678
1598 msgid "Escape"
1599 msgstr ""
1600
1601 #: ../../../src/SDLInputState.cpp:680
1602 msgid "Insert"
1603 msgstr ""
1604
1605 #: ../../../src/SDLInputState.cpp:681
1606 msgid "Left Alt"
1607 msgstr ""
1608
1609 #: ../../../src/SDLInputState.cpp:682
1610 msgid "Left Ctrl"
1611 msgstr ""
1612
1613 #: ../../../src/SDLInputState.cpp:684
1614 msgid "Left Shift"
1615 msgstr ""
1616
1617 #: ../../../src/SDLInputState.cpp:685
1618 msgid "NumLock"
1619 msgstr ""
1620
1621 #: ../../../src/SDLInputState.cpp:686
1622 msgid "PageDown"
1623 msgstr ""
1624
1625 #: ../../../src/SDLInputState.cpp:687
1626 msgid "PageUp"
1627 msgstr ""
1628
1629 #: ../../../src/SDLInputState.cpp:689
1630 msgid "PrintScreen"
1631 msgstr ""
1632
1633 #: ../../../src/SDLInputState.cpp:690
1634 msgid "Right Alt"
1635 msgstr ""
1636
1637 #: ../../../src/SDLInputState.cpp:691
1638 msgid "Right Ctrl"
1639 msgstr ""
1640
1641 #: ../../../src/SDLInputState.cpp:692
1642 msgid "Return"
1643 msgstr ""
1644
1645 #: ../../../src/SDLInputState.cpp:694
1646 msgid "Right Shift"
1647 msgstr ""
1648
1649 #: ../../../src/SDLInputState.cpp:695
1650 msgid "ScrollLock"
1651 msgstr ""
1652
1653 #: ../../../src/SDLInputState.cpp:696
1654 msgid "Space"
1655 msgstr ""
1656
1657 #: ../../../src/SDLInputState.cpp:710
1658 #, c-format
1659 msgid "M%d"
1660 msgstr ""
1661
1662 #: ../../../src/SDLInputState.cpp:716
1663 #, c-format
1664 msgid "Mouse %d"
1665 msgstr ""
1666
1667 #: ../../../src/SDLInputState.cpp:726
1668 #, c-format
1669 msgid "JX%d-"
1670 msgstr ""
1671
1672 #: ../../../src/SDLInputState.cpp:728
1673 #, c-format
1674 msgid "Axis %d -"
1675 msgstr ""
1676
1677 #: ../../../src/SDLInputState.cpp:732
1678 #, c-format
1679 msgid "JX%d+"
1680 msgstr ""
1681
1682 #: ../../../src/SDLInputState.cpp:734
1683 #, c-format
1684 msgid "Axis %d +"
1685 msgstr ""
1686
1687 #: ../../../src/SDLInputState.cpp:739
1688 #, c-format
1689 msgid "JB%d"
1690 msgstr ""
1691
1692 #: ../../../src/SDLInputState.cpp:741
1693 #, c-format
1694 msgid "Button %d"
1695 msgstr ""
1696
1697 #: ../../../src/SDLInputState.cpp:788
1698 msgid "Touch control D-Pad"
1699 msgstr ""
1700
1701 #: ../../../src/SDLInputState.cpp:812
1702 msgid "Touch control buttons"
1703 msgstr ""
1704
1705 #: ../../../src/SDLInputState.cpp:827
1706 msgid "Tap"
1707 msgstr ""
1708
1709 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1710 #, c-format
1711 msgid "Can not bind: %s"
1712 msgstr ""
1713
1714 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1715 #: ../../../src/SDLInputState.cpp:901
1716 #, c-format
1717 msgid "'%s' is no longer bound to:"
1718 msgstr ""
1719
1720 #: ../../../src/Stats.cpp:38
1721 msgid "Max HP"
1722 msgstr ""
1723
1724 #: ../../../src/Stats.cpp:39
1725 msgid "Total amount of HP."
1726 msgstr ""
1727
1728 #: ../../../src/Stats.cpp:43
1729 msgid "HP Regen"
1730 msgstr ""
1731
1732 #: ../../../src/Stats.cpp:44
1733 msgid "Ticks of HP regen per minute."
1734 msgstr ""
1735
1736 #: ../../../src/Stats.cpp:48
1737 msgid "Max MP"
1738 msgstr ""
1739
1740 #: ../../../src/Stats.cpp:49
1741 msgid "Total amount of MP."
1742 msgstr ""
1743
1744 #: ../../../src/Stats.cpp:53
1745 msgid "MP Regen"
1746 msgstr ""
1747
1748 #: ../../../src/Stats.cpp:54
1749 msgid "Ticks of MP regen per minute."
1750 msgstr ""
1751
1752 #: ../../../src/Stats.cpp:58
1753 msgid "Accuracy"
1754 msgstr ""
1755
1756 #: ../../../src/Stats.cpp:59
1757 msgid ""
1758 "Accuracy rating. The enemy's Avoidance rating is subtracted from this value "
1759 "to calculate your likeliness to land a direct hit."
1760 msgstr ""
1761
1762 #: ../../../src/Stats.cpp:63
1763 msgid "Avoidance"
1764 msgstr ""
1765
1766 #: ../../../src/Stats.cpp:64
1767 msgid ""
1768 "Avoidance rating. This value is subtracted from the enemy's Accuracy rating "
1769 "to calculate their likeliness to land a direct hit."
1770 msgstr ""
1771
1772 #: ../../../src/Stats.cpp:68
1773 msgid "Absorb Min"
1774 msgstr ""
1775
1776 #: ../../../src/Stats.cpp:69 ../../../src/Stats.cpp:74
1777 msgid "Reduces the amount of damage taken."
1778 msgstr ""
1779
1780 #: ../../../src/Stats.cpp:73
1781 msgid "Absorb Max"
1782 msgstr ""
1783
1784 #: ../../../src/Stats.cpp:78
1785 msgid "Critical Hit Chance"
1786 msgstr ""
1787
1788 #: ../../../src/Stats.cpp:79
1789 msgid "Chance for an attack to do extra damage."
1790 msgstr ""
1791
1792 #: ../../../src/Stats.cpp:83
1793 msgid "Bonus XP"
1794 msgstr ""
1795
1796 #: ../../../src/Stats.cpp:84
1797 msgid "Increases the XP gained per kill."
1798 msgstr ""
1799
1800 #: ../../../src/Stats.cpp:88
1801 #, c-format
1802 msgid "Bonus %s"
1803 msgstr ""
1804
1805 #: ../../../src/Stats.cpp:89
1806 #, c-format
1807 msgid "Increases the %s found per drop."
1808 msgstr ""
1809
1810 #: ../../../src/Stats.cpp:93
1811 msgid "Item Find Chance"
1812 msgstr ""
1813
1814 #: ../../../src/Stats.cpp:94
1815 msgid "Increases the chance that an enemy will drop an item."
1816 msgstr ""
1817
1818 #: ../../../src/Stats.cpp:98
1819 msgid "Stealth"
1820 msgstr ""
1821
1822 #: ../../../src/Stats.cpp:99
1823 msgid "Increases your ability to move undetected."
1824 msgstr ""
1825
1826 #: ../../../src/Stats.cpp:103
1827 msgid "Poise"
1828 msgstr ""
1829
1830 #: ../../../src/Stats.cpp:104
1831 msgid "Reduces your chance of stumbling when hit."
1832 msgstr ""
1833
1834 #: ../../../src/Stats.cpp:108
1835 msgid "Missile Reflect Chance"
1836 msgstr ""
1837
1838 #: ../../../src/Stats.cpp:109
1839 msgid "Increases your chance of reflecting missiles back at enemies."
1840 msgstr ""
1841
1842 #: ../../../src/Stats.cpp:113
1843 msgid "Damage Reflection"
1844 msgstr ""
1845
1846 #: ../../../src/Stats.cpp:114
1847 msgid "Deals a percentage of damage taken back to the attacker."
1848 msgstr ""
1849
1850 #: ../../../src/Stats.cpp:118
1851 msgid "HP Steal"
1852 msgstr ""
1853
1854 #: ../../../src/Stats.cpp:119
1855 msgid "Percentage of HP stolen per hit."
1856 msgstr ""
1857
1858 #: ../../../src/Stats.cpp:123
1859 msgid "MP Steal"
1860 msgstr ""
1861
1862 #: ../../../src/Stats.cpp:124
1863 msgid "Percentage of MP stolen per hit."
1864 msgstr ""
1865
1866 #: ../../../src/Stats.cpp:128
1867 msgid "Base HP"
1868 msgstr ""
1869
1870 #: ../../../src/Stats.cpp:133
1871 msgid "Base MP"
1872 msgstr ""
1873
1874 #: ../../../src/Utils.cpp:346
1875 msgid "k"
1876 msgstr ""
1877
1878 #: ../../../src/Utils.cpp:616
1879 #, c-format
1880 msgid "%s second"
1881 msgstr ""
1882
1883 #: ../../../src/Utils.cpp:619
1884 #, c-format
1885 msgid "%s seconds"
1886 msgstr ""
1887
1888 #: ../../../src/Version.cpp:139
1889 msgid "or newer"
1890 msgstr ""
1891
1892 #: ../../../src/Version.cpp:142
1893 msgid "or older"
1894 msgstr ""
44 #
55 # Translators:
66 # Justin Jacobs <jajdorkster@gmail.com>, 2018
7 # Elias Nykrem <bloodaxeNOR@protonmail.com>, 2019
78 #
89 #, fuzzy
910 msgid ""
1011 msgstr ""
1112 "Project-Id-Version: PACKAGE VERSION\n"
1213 "Report-Msgid-Bugs-To: \n"
13 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
14 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1415 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
15 "Last-Translator: Justin Jacobs <jajdorkster@gmail.com>, 2018\n"
16 "Last-Translator: Elias Nykrem <bloodaxeNOR@protonmail.com>, 2019\n"
1617 "Language-Team: Norwegian Bokmål (https://www.transifex.com/flareorg/teams/84925/nb/)\n"
1718 "MIME-Version: 1.0\n"
1819 "Content-Type: text/plain; charset=UTF-8\n"
2021 "Language: nb\n"
2122 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
2223
23 #: ../../../src/Avatar.cpp:367
24 #: ../../../src/Avatar.cpp:387
25 msgid "Your health is low!"
26 msgstr "Helsen din er lav!"
27
28 #: ../../../src/Avatar.cpp:419
2429 #, c-format
2530 msgid "Congratulations, you have reached level %d!"
2631 msgstr "Gratulerer, du har nådd nivå %d!"
2732
28 #: ../../../src/Avatar.cpp:369
29 msgid "You may increase one attribute through the Character Menu."
30 msgstr ""
31
32 #: ../../../src/Avatar.cpp:583
33 #: ../../../src/Avatar.cpp:421
34 msgid "You may increase one or more attributes through the Character Menu."
35 msgstr "Du kan øke en eller flere egenskaper gjennom Karaktermenyen."
36
37 #: ../../../src/Avatar.cpp:425
38 msgid "You may unlock one or more abilities through the Powers Menu."
39 msgstr "Du kan øke en eller flere ferdigheter gjennom Evnemenyen."
40
41 #: ../../../src/Avatar.cpp:692
3342 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3443 msgstr ""
3544 "Du har blitt beseiret. Spillet er slutt! Trykk ${INPUT_CONTINUE} for å gå "
3645 "til hovedmenyen."
3746
38 #: ../../../src/Avatar.cpp:589
47 #: ../../../src/Avatar.cpp:698
3948 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
4049 msgstr "Du har blitt beseiret. Trykk ${INPUT_CONTINUE} for å fortsette."
4150
42 #: ../../../src/Avatar.cpp:839
51 #: ../../../src/Avatar.cpp:949
4352 msgid "Transformation expired. You have been moved back to a safe place."
44 msgstr ""
53 msgstr "Forvandling utgått. Du har blitt flyttet tilbake til et trygt sted."
4554
4655 #: ../../../src/CampaignManager.cpp:153
4756 #, c-format
4857 msgid "%d %s removed."
4958 msgstr "%d %s fjernet."
5059
51 #: ../../../src/CampaignManager.cpp:162
60 #: ../../../src/CampaignManager.cpp:165
61 #, c-format
62 msgid "%s x%d removed."
63 msgstr ""
64
65 #: ../../../src/CampaignManager.cpp:167
5266 #, c-format
5367 msgid "%s removed."
5468 msgstr "%s fjernet."
5569
56 #: ../../../src/CampaignManager.cpp:175
70 #: ../../../src/CampaignManager.cpp:180
5771 #, c-format
5872 msgid "You receive %s."
5973 msgstr "Du mottar %s."
6074
61 #: ../../../src/CampaignManager.cpp:177
75 #: ../../../src/CampaignManager.cpp:182
6276 #, c-format
6377 msgid "You receive %s x%d."
6478 msgstr "Du mottar %s x%d."
6579
66 #: ../../../src/CampaignManager.cpp:186
80 #: ../../../src/CampaignManager.cpp:191
6781 #, c-format
6882 msgid "You receive %d %s."
6983 msgstr "Du mottar %s x%d."
7084
71 #: ../../../src/CampaignManager.cpp:195
85 #: ../../../src/CampaignManager.cpp:200
7286 #, c-format
7387 msgid "You receive %d XP."
74 msgstr ""
75
76 #: ../../../src/CampaignManager.cpp:201
88 msgstr "Du mottar %d EP."
89
90 #: ../../../src/CampaignManager.cpp:206
7791 msgid "HP restored."
78 msgstr ""
79
80 #: ../../../src/CampaignManager.cpp:205
92 msgstr "HP gjenopprettet."
93
94 #: ../../../src/CampaignManager.cpp:210
8195 msgid "MP restored."
82 msgstr ""
83
84 #: ../../../src/CampaignManager.cpp:210
96 msgstr "MP gjenopprettet."
97
98 #: ../../../src/CampaignManager.cpp:215
8599 msgid "HP and MP restored."
86 msgstr ""
87
88 #: ../../../src/CampaignManager.cpp:214
100 msgstr "HP og MP gjenopprettet."
101
102 #: ../../../src/CampaignManager.cpp:219
89103 msgid "Negative effects removed."
90104 msgstr "Negative effekter fjernet."
91105
92 #: ../../../src/CampaignManager.cpp:220
106 #: ../../../src/CampaignManager.cpp:225
93107 msgid "HP and MP restored, negative effects removed"
94 msgstr ""
108 msgstr "HP og MP gjenopprettet, og negative effekter fjernet"
95109
96110 #: ../../../src/DeviceList.cpp:56
97111 msgid ""
99113 "\n"
100114 "Often slower, but less likely to have issues."
101115 msgstr ""
116 "SDL programvare rendering\n"
117 "\n"
118 "Ofte tregere, men mindre sannsynlighet for problemer."
102119
103120 #: ../../../src/DeviceList.cpp:59
104121 msgid ""
106123 "\n"
107124 "The default renderer that is often faster than the SDL software renderer."
108125 msgstr ""
109
110 #: ../../../src/EngineSettings.cpp:561
126 "SDL maskinvare rendering\n"
127 "\n"
128 "Standard renderingsmetode som ofte er raskere en SDL programvare rendering."
129
130 #: ../../../src/EngineSettings.cpp:572
111131 msgid "Adventurer"
112132 msgstr "Eventyrer"
113133
114 #: ../../../src/Entity.cpp:511
134 #: ../../../src/Entity.cpp:522
115135 msgid "miss"
116136 msgstr "bom"
117137
118 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
119 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
138 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
139 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
120140 #, c-format
121141 msgid "+%d HP"
122 msgstr ""
123
124 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
125 #: ../../../src/StatBlock.cpp:822
142 msgstr "+%d HP"
143
144 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
145 #: ../../../src/StatBlock.cpp:830
126146 #, c-format
127147 msgid "+%d MP"
128 msgstr ""
129
130 #: ../../../src/EventManager.cpp:738
148 msgstr "+%d MP"
149
150 #: ../../../src/EventManager.cpp:782
131151 msgid "Unknown destination"
132152 msgstr "Ukjent destinasjon"
133153
134 #: ../../../src/GameStateConfigBase.cpp:89
135 #: ../../../src/GameStateConfigBase.cpp:110
154 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
155 msgid "Loading..."
156 msgstr "Laster..."
157
158 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
159 msgid "Delete Save"
160 msgstr "Slett lagret spill"
161
162 #: ../../../src/GameStateLoad.cpp:90
163 msgid "Delete this save?"
164 msgstr "Slett dette spillet?"
165
166 #: ../../../src/GameStateLoad.cpp:92
167 msgid "Exit to Title"
168 msgstr "Avslutt til hovedmeny"
169
170 #: ../../../src/GameStateLoad.cpp:95
171 msgid "New Game"
172 msgstr "Nytt spill"
173
174 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
175 msgid "Choose a Slot"
176 msgstr "Velg en plass"
177
178 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
179 msgid "Enable a story mod to continue"
180 msgstr "Aktiver en historie tilleggspakke for å fortsette"
181
182 #: ../../../src/GameStateLoad.cpp:597
183 msgid "Load Game"
184 msgstr "Last spill"
185
186 #: ../../../src/GameStateLoad.cpp:706
187 msgid "Entering game world..."
188 msgstr "Åpner spillverden..."
189
190 #: ../../../src/GameStateLoad.cpp:709
191 msgid "Loading saved game..."
192 msgstr "Laster lagret spill..."
193
194 #: ../../../src/GameStateLoad.cpp:742
195 msgid "Invalid save"
196 msgstr "Ugyldig spill"
197
198 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
199 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
200 #: ../../../src/MenuPowers.cpp:1543
201 #, c-format
202 msgid "Level %d"
203 msgstr "Nivå %d"
204
205 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
206 #: ../../../src/MenuConfig.cpp:244
207 msgid "Cancel"
208 msgstr "Avbryt"
209
210 #: ../../../src/GameStateNew.cpp:68
211 msgid "Create"
212 msgstr "Opprett"
213
214 #: ../../../src/GameStateNew.cpp:76
215 msgid "Randomize"
216 msgstr "Tilfeldiggjør"
217
218 #: ../../../src/GameStateNew.cpp:92
219 msgid "Choose a Portrait"
220 msgstr "Velg et portrett"
221
222 #: ../../../src/GameStateNew.cpp:96
223 msgid "Choose a Name"
224 msgstr "Velg et navn"
225
226 #: ../../../src/GameStateNew.cpp:100
227 msgid "Permadeath?"
228 msgstr "Permanent død?"
229
230 #: ../../../src/GameStateNew.cpp:104
231 msgid "Choose a Class"
232 msgstr "Velg en klasse"
233
234 #: ../../../src/GameStateTitle.cpp:107
235 msgid "Play Game"
236 msgstr "Start spill"
237
238 #: ../../../src/GameStateTitle.cpp:110
239 msgid "Enable a core mod to continue"
240 msgstr "Aktiver en kjerne tilleggspakke for å fortsette"
241
242 #: ../../../src/GameStateTitle.cpp:114
243 msgid "Configuration"
244 msgstr "Innstillinger"
245
246 #: ../../../src/GameStateTitle.cpp:117
247 msgid "Credits"
248 msgstr "Takk til"
249
250 #: ../../../src/GameStateTitle.cpp:120
251 msgid "Exit Game"
252 msgstr "Avslutt spill"
253
254 #: ../../../src/InputState.cpp:407
255 msgid "Accept"
256 msgstr "Godta"
257
258 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
259 #: ../../../src/SDLInputState.cpp:698
260 msgid "Up"
261 msgstr "Opp"
262
263 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
264 #: ../../../src/SDLInputState.cpp:676
265 msgid "Down"
266 msgstr "Ned"
267
268 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
269 #: ../../../src/SDLInputState.cpp:683
270 msgid "Left"
271 msgstr "Venstre"
272
273 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
274 #: ../../../src/SDLInputState.cpp:693
275 msgid "Right"
276 msgstr "Høyre"
277
278 #: ../../../src/InputState.cpp:412
279 msgid "Bar1"
280 msgstr "Felt1 "
281
282 #: ../../../src/InputState.cpp:413
283 msgid "Bar2"
284 msgstr "Felt2"
285
286 #: ../../../src/InputState.cpp:414
287 msgid "Bar3"
288 msgstr "Felt3"
289
290 #: ../../../src/InputState.cpp:415
291 msgid "Bar4"
292 msgstr "Felt4"
293
294 #: ../../../src/InputState.cpp:416
295 msgid "Bar5"
296 msgstr "Felt5"
297
298 #: ../../../src/InputState.cpp:417
299 msgid "Bar6"
300 msgstr "Felt6"
301
302 #: ../../../src/InputState.cpp:418
303 msgid "Bar7"
304 msgstr "Felt7"
305
306 #: ../../../src/InputState.cpp:419
307 msgid "Bar8"
308 msgstr "Felt8"
309
310 #: ../../../src/InputState.cpp:420
311 msgid "Bar9"
312 msgstr "Felt9"
313
314 #: ../../../src/InputState.cpp:421
315 msgid "Bar0"
316 msgstr "Felt0"
317
318 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
319 #: ../../../src/MenuCharacter.cpp:54
320 msgid "Character"
321 msgstr "Karakter"
322
323 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
324 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
325 msgid "Inventory"
326 msgstr "Inventar"
327
328 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
329 #: ../../../src/MenuPowers.cpp:167
330 msgid "Powers"
331 msgstr "Evner"
332
333 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
334 #: ../../../src/MenuLog.cpp:72
335 msgid "Log"
336 msgstr "Logg"
337
338 #: ../../../src/InputState.cpp:426
339 msgid "Main1"
340 msgstr "Hoved1"
341
342 #: ../../../src/InputState.cpp:427
343 msgid "Main2"
344 msgstr "Hoved2"
345
346 #: ../../../src/InputState.cpp:428
347 msgid "Ctrl"
348 msgstr "Ctrl"
349
350 #: ../../../src/InputState.cpp:429
351 msgid "Shift"
352 msgstr "Shift"
353
354 #: ../../../src/InputState.cpp:430
355 msgid "Alt"
356 msgstr "Alt"
357
358 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
359 msgid "Delete"
360 msgstr "Delete"
361
362 #: ../../../src/InputState.cpp:432
363 msgid "ActionBar Accept"
364 msgstr "Handlingsfelt Aksepter"
365
366 #: ../../../src/InputState.cpp:433
367 msgid "ActionBar Left"
368 msgstr "Handlingsfelt Venstre"
369
370 #: ../../../src/InputState.cpp:434
371 msgid "ActionBar Right"
372 msgstr "Handlingsfelt Høyre"
373
374 #: ../../../src/InputState.cpp:435
375 msgid "ActionBar Use"
376 msgstr "Handlingsfelt Bruk"
377
378 #: ../../../src/InputState.cpp:436
379 msgid "Developer Menu"
380 msgstr "Utviklermeny"
381
382 #: ../../../src/InputState.cpp:438
383 msgid "Left Mouse"
384 msgstr "Venstre Museknapp"
385
386 #: ../../../src/InputState.cpp:439
387 msgid "Middle Mouse"
388 msgstr "Musehjul Knapp"
389
390 #: ../../../src/InputState.cpp:440
391 msgid "Right Mouse"
392 msgstr "Høyre Museknapp"
393
394 #: ../../../src/InputState.cpp:441
395 msgid "Wheel Up"
396 msgstr "Hjul Opp"
397
398 #: ../../../src/InputState.cpp:442
399 msgid "Wheel Down"
400 msgstr "Hjul Ned"
401
402 #: ../../../src/InputState.cpp:443
403 msgid "Mouse X1"
404 msgstr "Mus X1"
405
406 #: ../../../src/InputState.cpp:444
407 msgid "Mouse X2"
408 msgstr "Mus X2"
409
410 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
411 msgid "Unknown Item"
412 msgstr "Ukjent gjenstand"
413
414 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
415 #, c-format
416 msgid "%d%% Speed"
417 msgstr "%d%% Hastighet"
418
419 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
420 #, c-format
421 msgid "%d%% Attack Speed"
422 msgstr "%d%% Angrepshastighet"
423
424 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
425 #: ../../../src/MenuPowers.cpp:832
426 #, c-format
427 msgid "Resistance (%s)"
428 msgstr "Motstandsdyktighet (%s)"
429
430 #: ../../../src/ItemManager.cpp:714
431 #, c-format
432 msgid "Requires %s"
433 msgstr "Krever %s"
434
435 #: ../../../src/ItemManager.cpp:763
436 msgid "Quest Item"
437 msgstr "Oppdragsgjenstand"
438
439 #: ../../../src/ItemManager.cpp:790
440 #, c-format
441 msgid "Quality: %s"
442 msgstr "Kvalitet: %s"
443
444 #: ../../../src/ItemManager.cpp:815
445 #, c-format
446 msgid "Absorb: %d-%d"
447 msgstr "Absorberer: %d-%d"
448
449 #: ../../../src/ItemManager.cpp:817
450 #, c-format
451 msgid "Absorb: %d"
452 msgstr "Absorberer: %d"
453
454 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
455 #: ../../../src/MenuPowers.cpp:1133
456 #, c-format
457 msgid "Requires Level %d"
458 msgstr "Krever nivå %d"
459
460 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
461 #: ../../../src/MenuPowers.cpp:1124
462 #, c-format
463 msgid "Requires %s %d"
464 msgstr "Krever %s %d"
465
466 #: ../../../src/ItemManager.cpp:879
467 #, c-format
468 msgid "Requires Class: %s"
469 msgstr "Krever klasse: %s"
470
471 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
472 #, c-format
473 msgid "Buy Price: %d %s"
474 msgstr "Kjøp for: %d %s"
475
476 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
477 #, c-format
478 msgid "Buy Price: %d %s each"
479 msgstr "Kjøp for: %d %s hver"
480
481 #: ../../../src/ItemManager.cpp:916
482 #, c-format
483 msgid "Sell Price: %d %s"
484 msgstr "Selg for: %d %s"
485
486 #: ../../../src/ItemManager.cpp:918
487 #, c-format
488 msgid "Sell Price: %d %s each"
489 msgstr "Selg for: %d %s hver"
490
491 #: ../../../src/ItemManager.cpp:927
492 msgid "Set:"
493 msgstr "Still:"
494
495 #: ../../../src/ItemManager.cpp:934
496 #, c-format
497 msgid "%d items:"
498 msgstr "%d gjenstander:"
499
500 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
501 #, c-format
502 msgid "Press [%s] to use"
503 msgstr "Trykk [%s] for å bruke"
504
505 #: ../../../src/ItemManager.cpp:951
506 #, c-format
507 msgid "Press [%s] to read"
508 msgstr "Trykk [%s] for å lese"
509
510 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
511 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
512 #, c-format
513 msgid "Hotkey: %s"
514 msgstr "Hurtigtast: %s"
515
516 #: ../../../src/MenuActionBar.cpp:599
517 msgid "Not enough MP."
518 msgstr "Ikke nok MP."
519
520 #: ../../../src/MenuActiveEffects.cpp:124
521 #, c-format
522 msgid "x%d"
523 msgstr "x%d"
524
525 #: ../../../src/MenuActiveEffects.cpp:219
526 msgid "Remaining:"
527 msgstr "Ubrukte:"
528
529 #: ../../../src/MenuActiveEffects.cpp:225
530 #, c-format
531 msgid "x%d stacks"
532 msgstr "x%d stabler"
533
534 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
535 msgid "Name"
536 msgstr "Navn"
537
538 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
539 msgid "Level"
540 msgstr "Nivå"
541
542 #: ../../../src/MenuCharacter.cpp:310
543 #, c-format
544 msgid "%d unspent stat point"
545 msgstr "%d ubrukt ferdighetspoeng"
546
547 #: ../../../src/MenuCharacter.cpp:313
548 #, c-format
549 msgid "%d unspent stat points"
550 msgstr "%dubrukte ferdighetspoeng"
551
552 #: ../../../src/MenuCharacter.cpp:355
553 #, c-format
554 msgid "Reduces the damage taken from \"%s\" elemental attacks."
555 msgstr "Minsker skade tatt fra \"%s\" elementangrep."
556
557 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
558 #, c-format
559 msgid "XP: %d"
560 msgstr "EP: %d"
561
562 #: ../../../src/MenuCharacter.cpp:367
563 #, c-format
564 msgid "Next: %d"
565 msgstr "Neste: %d"
566
567 #: ../../../src/MenuCharacter.cpp:373
568 #, c-format
569 msgid "base (%d), bonus (%d)"
570 msgstr "base (%d), bonus (%d)"
571
572 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
573 msgid "Related stats:"
574 msgstr "Relaterte ferdigheter:"
575
576 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
577 #, c-format
578 msgid "Each level grants %d."
579 msgstr "Hvert nivå bevilger %d."
580
581 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
582 #, c-format
583 msgid "Each point of %s grants %d."
584 msgstr "Hvert poeng i %s bevilger %d."
585
586 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
587 msgid "Clear"
588 msgstr "Nullstill"
589
590 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
591 msgid "Assign:"
592 msgstr "Tildel:"
593
594 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
136595 msgid "Defaults"
137596 msgstr "Standard"
138597
139 #: ../../../src/GameStateConfigBase.cpp:89
598 #: ../../../src/MenuConfig.cpp:123
140599 msgid "Reset ALL settings?"
141600 msgstr "Still tilbake ALLE innstillinger?"
142601
143 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
602 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
144603 msgid "OK"
145604 msgstr "Ok"
146605
147 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
148 #: ../../../src/InputState.cpp:401
149 msgid "Cancel"
150 msgstr "Avbryt"
151
152 #: ../../../src/GameStateConfigBase.cpp:160
153 #: ../../../src/GameStateConfigDesktop.cpp:130
606 #: ../../../src/MenuConfig.cpp:246
607 msgid "Continue"
608 msgstr "Fortsett"
609
610 #: ../../../src/MenuConfig.cpp:248
611 msgid "Save Game"
612 msgstr ""
613
614 #: ../../../src/MenuConfig.cpp:291
615 msgid "Default"
616 msgstr "Standard"
617
618 #: ../../../src/MenuConfig.cpp:291
619 msgid ""
620 "Show all loot tooltips, except for those that would be obscured by the "
621 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
622 msgstr ""
623 "Vis alle verktøytips for gods, bortsett fra de som ville være tildekt av "
624 "spilleren eller en fiende. Midlertidig vis alle verktøytips for gods med "
625 "'Alt'."
626
627 #: ../../../src/MenuConfig.cpp:292
628 msgid "Show all"
629 msgstr "Vis alt"
630
631 #: ../../../src/MenuConfig.cpp:292
632 msgid ""
633 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
634 msgstr ""
635 "Alltid vis verktøytips for gods. Midlertidig skjul alle verktøytips for gods"
636 " med 'Alt'."
637
638 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
639 msgid "Hidden"
640 msgstr "Skjult"
641
642 #: ../../../src/MenuConfig.cpp:293
643 msgid ""
644 "Always hide loot tooltips, except for when a piece of loot is hovered with "
645 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
646 msgstr ""
647 "Skjul alltid verktøytips for gods, bortsett fra når du holder musepekeren "
648 "over godset. Midlertidig vis alle verktøytips for gods med 'Alt'."
649
650 #: ../../../src/MenuConfig.cpp:296
651 msgid "Visible"
652 msgstr "Synlig"
653
654 #: ../../../src/MenuConfig.cpp:297
655 msgid "Visible (2x zoom)"
656 msgstr "Synlig (2x forstørring)"
657
658 #: ../../../src/MenuConfig.cpp:301
659 msgid ""
660 "Controls the type of warning to be activated when the player is below the "
661 "low health threshold."
662 msgstr ""
663 "Kontrollerer typen advarsler som aktiveres når spillerens helse havner under"
664 " minimumsterskelen for helse."
665
666 #: ../../../src/MenuConfig.cpp:302
667 msgid "- Display a message"
668 msgstr "- Vis en beskjed"
669
670 #: ../../../src/MenuConfig.cpp:303
671 msgid "- Play a sound"
672 msgstr "- Spill av en lyd"
673
674 #: ../../../src/MenuConfig.cpp:304
675 msgid "- Change the cursor"
676 msgstr "- Endre musepekeren"
677
678 #: ../../../src/MenuConfig.cpp:306
679 msgid "Disabled"
680 msgstr "Deaktivert"
681
682 #: ../../../src/MenuConfig.cpp:307
683 msgid "All"
684 msgstr "Alt"
685
686 #: ../../../src/MenuConfig.cpp:308
687 msgid "Message & Cursor"
688 msgstr "Melding og musepeker"
689
690 #: ../../../src/MenuConfig.cpp:309
691 msgid "Message & Sound"
692 msgstr "Melding og lyd"
693
694 #: ../../../src/MenuConfig.cpp:310
695 msgid "Sound & Cursor"
696 msgstr "Lyd og musepeker"
697
698 #: ../../../src/MenuConfig.cpp:311
699 msgid "Message"
700 msgstr "Melding"
701
702 #: ../../../src/MenuConfig.cpp:312
703 msgid "Cursor"
704 msgstr "Musepeker"
705
706 #: ../../../src/MenuConfig.cpp:313
707 msgid "Sound"
708 msgstr "Lyd"
709
710 #: ../../../src/MenuConfig.cpp:319
711 msgid ""
712 "When the player's health drops below the given threshold, the low health "
713 "notifications are triggered if one or more of them is enabled."
714 msgstr ""
715 "Når spillerens helse faller under den oppførte terskelen, vises minimums "
716 "helsebeskjedene dersom en eller flere av de er aktivert."
717
718 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
719 msgid "Exit"
720 msgstr "Avslutt"
721
722 #: ../../../src/MenuConfig.cpp:333
723 msgid "Video"
724 msgstr "Video"
725
726 #: ../../../src/MenuConfig.cpp:334
154727 msgid "Audio"
155728 msgstr "Lyd"
156729
157 #: ../../../src/GameStateConfigBase.cpp:161
158 #: ../../../src/GameStateConfigDesktop.cpp:131
730 #: ../../../src/MenuConfig.cpp:335
159731 msgid "Interface"
160732 msgstr "Grensesnitt"
161733
162 #: ../../../src/GameStateConfigBase.cpp:162
163 #: ../../../src/GameStateConfigDesktop.cpp:134
734 #: ../../../src/MenuConfig.cpp:336
735 msgid "Input"
736 msgstr "Inndata"
737
738 #: ../../../src/MenuConfig.cpp:337
739 msgid "Keybindings"
740 msgstr "Hurtigtaster"
741
742 #: ../../../src/MenuConfig.cpp:338
164743 msgid "Mods"
165 msgstr ""
166
167 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
744 msgstr "Tilleggspakker"
745
746 #: ../../../src/MenuConfig.cpp:350
747 msgid "Paused"
748 msgstr "Pauset"
749
750 #: ../../../src/MenuConfig.cpp:353
751 msgid "Time Played"
752 msgstr "Tid spilt"
753
754 #: ../../../src/MenuConfig.cpp:359
755 msgid "Renderer"
756 msgstr "Rendering"
757
758 #: ../../../src/MenuConfig.cpp:360
759 msgid "Full Screen Mode"
760 msgstr "Fullskjerm"
761
762 #: ../../../src/MenuConfig.cpp:361
763 msgid "Hardware surfaces"
764 msgstr "Maskinvare flater"
765
766 #: ../../../src/MenuConfig.cpp:362
767 msgid "V-Sync"
768 msgstr "Vertikal Synkronisering"
769
770 #: ../../../src/MenuConfig.cpp:363
771 msgid "Texture Filtering"
772 msgstr "Teksturfiltrering"
773
774 #: ../../../src/MenuConfig.cpp:364
775 msgid "DPI scaling"
776 msgstr "DPI skalering"
777
778 #: ../../../src/MenuConfig.cpp:365
779 msgid "Parallax Layers"
780 msgstr "Parallakse lag"
781
782 #: ../../../src/MenuConfig.cpp:366
783 msgid "Allow changing gamma"
784 msgstr "Tillat endring av lysstyrke"
785
786 #: ../../../src/MenuConfig.cpp:367
787 msgid "Gamma"
788 msgstr "Lysstyrke"
789
790 #: ../../../src/MenuConfig.cpp:369
791 msgid "Sound Volume"
792 msgstr "Lydvolum"
793
794 #: ../../../src/MenuConfig.cpp:370
168795 msgid "Music Volume"
169796 msgstr "Musikkvolum"
170797
171 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
172 msgid "Sound Volume"
173 msgstr "Lydvolum"
174
175 #: ../../../src/GameStateConfigBase.cpp:257
798 #: ../../../src/MenuConfig.cpp:372
176799 msgid "Language"
177800 msgstr "Språk"
178801
179 #: ../../../src/GameStateConfigBase.cpp:266
802 #: ../../../src/MenuConfig.cpp:373
180803 msgid "Show FPS"
181 msgstr ""
182
183 #: ../../../src/GameStateConfigBase.cpp:270
804 msgstr "Vis bildefrekvens"
805
806 #: ../../../src/MenuConfig.cpp:374
807 msgid "Hardware mouse cursor"
808 msgstr "Maskinvare musepeker"
809
810 #: ../../../src/MenuConfig.cpp:375
184811 msgid "Colorblind Mode"
185812 msgstr "Modus for fargeblinde"
186813
187 #: ../../../src/GameStateConfigBase.cpp:274
188 msgid "Hardware mouse cursor"
189 msgstr ""
190
191 #: ../../../src/GameStateConfigBase.cpp:278
814 #: ../../../src/MenuConfig.cpp:376
192815 msgid "Developer Mode"
193816 msgstr "Utviklermodus"
194817
195 #: ../../../src/GameStateConfigBase.cpp:282
818 #: ../../../src/MenuConfig.cpp:377
196819 msgid "Subtitles"
197820 msgstr "Undertekster"
198821
199 #: ../../../src/GameStateConfigBase.cpp:286
200 msgid "Active Mods"
201 msgstr ""
202
203 #: ../../../src/GameStateConfigBase.cpp:295
204 msgid "Available Mods"
205 msgstr ""
206
207 #: ../../../src/GameStateConfigBase.cpp:314
208 msgid "<< Disable"
209 msgstr "<< Deaktiver"
210
211 #: ../../../src/GameStateConfigBase.cpp:320
212 msgid "Enable >>"
213 msgstr "Aktiver >>"
214
215 #: ../../../src/GameStateConfigBase.cpp:873
216 msgid "Version:"
217 msgstr ""
218
219 #: ../../../src/GameStateConfigBase.cpp:878
220 msgid "Game:"
221 msgstr ""
222
223 #: ../../../src/GameStateConfigBase.cpp:883
224 msgid "Engine version:"
225 msgstr ""
226
227 #: ../../../src/GameStateConfigBase.cpp:891
228 msgid "Requires mods:"
229 msgstr ""
230
231 #: ../../../src/GameStateConfigDesktop.cpp:83
232 #: ../../../src/GameStateConfigDesktop.cpp:751
233 msgid "Clear"
234 msgstr "Nullstill"
235
236 #: ../../../src/GameStateConfigDesktop.cpp:83
237 #: ../../../src/GameStateConfigDesktop.cpp:749
238 msgid "Assign:"
239 msgstr ""
240
241 #: ../../../src/GameStateConfigDesktop.cpp:128
242 msgid "Video"
243 msgstr "Video"
244
245 #: ../../../src/GameStateConfigDesktop.cpp:132
246 msgid "Input"
247 msgstr ""
248
249 #: ../../../src/GameStateConfigDesktop.cpp:133
250 msgid "Keybindings"
251 msgstr "Hurtigtaster"
252
253 #: ../../../src/GameStateConfigDesktop.cpp:188
822 #: ../../../src/MenuConfig.cpp:378
823 msgid "Loot tooltip visibility"
824 msgstr "Synlighet for gods verktøytips"
825
826 #: ../../../src/MenuConfig.cpp:379
827 msgid "Mini-map mode"
828 msgstr "Miniatyrkart modus"
829
830 #: ../../../src/MenuConfig.cpp:380
831 msgid "Always show stat bar labels"
832 msgstr "Vis alltid etiketter for ferdigheter"
833
834 #: ../../../src/MenuConfig.cpp:381
835 msgid "Allow stat bar auto-hiding"
836 msgstr "Tillat automatisk skjuling av ferdighetsfelt"
837
838 #: ../../../src/MenuConfig.cpp:382
839 msgid "Show combat text"
840 msgstr "Vis tekst i kamp"
841
842 #: ../../../src/MenuConfig.cpp:383
843 msgid "Automatically equip items"
844 msgstr "Automatisk utruste gjenstander"
845
846 #: ../../../src/MenuConfig.cpp:384
847 msgid "Show hidden entity markers"
848 msgstr "Vis skjulte enhetsmarkører "
849
850 #: ../../../src/MenuConfig.cpp:385
851 msgid "Low health notification"
852 msgstr "lav helsevarsel"
853
854 #: ../../../src/MenuConfig.cpp:386
855 msgid "Low health threshold"
856 msgstr "Minimum helseterskel"
857
858 #: ../../../src/MenuConfig.cpp:389
859 msgid "Joystick"
860 msgstr "Joystick"
861
862 #: ../../../src/MenuConfig.cpp:390
863 msgid "Move hero using mouse"
864 msgstr "Flytt helten med musepeker"
865
866 #: ../../../src/MenuConfig.cpp:391
867 msgid "Mouse aim"
868 msgstr "Sikte med musepekeren"
869
870 #: ../../../src/MenuConfig.cpp:392
871 msgid "Do not use mouse"
872 msgstr "Ikke bruk mus"
873
874 #: ../../../src/MenuConfig.cpp:393
875 msgid "Swap mouse movement button"
876 msgstr "Endre knapp for musebevegelse"
877
878 #: ../../../src/MenuConfig.cpp:394
879 msgid "Attack with mouse movement"
880 msgstr "Angrip med musebevegelse"
881
882 #: ../../../src/MenuConfig.cpp:395
883 msgid "Joystick Deadzone"
884 msgstr "Joystick dødsone"
885
886 #: ../../../src/MenuConfig.cpp:405
887 #, c-format
888 msgid "Primary binding: %s"
889 msgstr "Primær binding: %s"
890
891 #: ../../../src/MenuConfig.cpp:406
892 #, c-format
893 msgid "Alternate binding: %s"
894 msgstr "Alternativ binding: %s"
895
896 #: ../../../src/MenuConfig.cpp:407
897 #, c-format
898 msgid "Joystick binding: %s"
899 msgstr "Joystick binding: %s"
900
901 #: ../../../src/MenuConfig.cpp:508
254902 msgid ""
255903 "Will try to store surfaces in video memory versus system memory. The effect "
256904 "this has on performance depends on the renderer."
257905 msgstr ""
258
259 #: ../../../src/GameStateConfigDesktop.cpp:189
906 "Vil prøve å lagre flatene i videominne kontra systemminne. Effekten dette "
907 "har på ytelsen kommer an på renderingen"
908
909 #: ../../../src/MenuConfig.cpp:509
260910 msgid ""
261911 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
262912 "windowed mode or input lag."
263913 msgstr ""
264
265 #: ../../../src/GameStateConfigDesktop.cpp:190
914 "Forhindrer skjermrift. Deaktiver hvis du opplever \"hakking\" i vindu modus "
915 "eller inndata forsinkelse. "
916
917 #: ../../../src/MenuConfig.cpp:510
266918 msgid ""
267919 "When enabled, this uses the screen DPI in addition to the window dimensions "
268920 "to scale the rendering resolution. Otherwise, only the window dimensions are"
269921 " used."
270922 msgstr ""
271
272 #: ../../../src/GameStateConfigDesktop.cpp:191
923 "Når aktivert, brukes skjerm DPI-en i tillegg til vindusdimensjonene for å "
924 "skalere renderings oppløsningen. Ellers, blir bare vindusdimensjonene brukt."
925
926 #: ../../../src/MenuConfig.cpp:511
273927 msgid ""
274928 "This enables parallax (non-tile) layers. Disabling this setting can improve "
275929 "performance in some cases."
276930 msgstr ""
277
278 #: ../../../src/GameStateConfigDesktop.cpp:192
279 msgid "Experimental"
280 msgstr "Eksperimentell"
281
282 #: ../../../src/GameStateConfigDesktop.cpp:193
283 msgid "For handheld devices"
284 msgstr "For håndholdte enheter"
285
286 #: ../../../src/GameStateConfigDesktop.cpp:211
287 msgid "Renderer"
288 msgstr ""
289
290 #: ../../../src/GameStateConfigDesktop.cpp:227
291 msgid "Full Screen Mode"
292 msgstr "Fullskjerm"
293
294 #: ../../../src/GameStateConfigDesktop.cpp:231
295 msgid "Move hero using mouse"
296 msgstr "Flytt helten med musepeker"
297
298 #: ../../../src/GameStateConfigDesktop.cpp:235
299 msgid "Hardware surfaces"
300 msgstr ""
301
302 #: ../../../src/GameStateConfigDesktop.cpp:239
303 msgid "V-Sync"
304 msgstr ""
305
306 #: ../../../src/GameStateConfigDesktop.cpp:243
307 msgid "Texture Filtering"
308 msgstr "Teksturfiltrering"
309
310 #: ../../../src/GameStateConfigDesktop.cpp:247
311 msgid "DPI scaling"
312 msgstr ""
313
314 #: ../../../src/GameStateConfigDesktop.cpp:251
315 msgid "Parallax Layers"
316 msgstr ""
317
318 #: ../../../src/GameStateConfigDesktop.cpp:255
319 msgid "Allow changing gamma"
320 msgstr "Tillat endring av lysstyrke"
321
322 #: ../../../src/GameStateConfigDesktop.cpp:259
323 msgid "Gamma"
324 msgstr "Lysstyrke"
325
326 #: ../../../src/GameStateConfigDesktop.cpp:263
327 msgid "Use joystick"
328 msgstr "Bruk joystick"
329
330 #: ../../../src/GameStateConfigDesktop.cpp:267
331 msgid "Joystick"
332 msgstr "Joystick"
333
334 #: ../../../src/GameStateConfigDesktop.cpp:283
335 msgid "Mouse aim"
336 msgstr "Sikte med musepekeren"
337
338 #: ../../../src/GameStateConfigDesktop.cpp:287
339 msgid "Do not use mouse"
340 msgstr "Ikke bruk mus"
341
342 #: ../../../src/GameStateConfigDesktop.cpp:291
343 msgid "Joystick Deadzone"
344 msgstr "Joystick dødsone"
345
346 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
347 msgid "Loading..."
348 msgstr "Laster..."
349
350 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
351 msgid "Delete Save"
352 msgstr "Slett lagret spill"
353
354 #: ../../../src/GameStateLoad.cpp:88
355 msgid "Delete this save?"
356 msgstr "Slett dette spillet?"
357
358 #: ../../../src/GameStateLoad.cpp:90
359 msgid "Exit to Title"
360 msgstr "Avslutt til hovedmeny"
361
362 #: ../../../src/GameStateLoad.cpp:93
363 msgid "New Game"
364 msgstr "Nytt spill"
365
366 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
367 msgid "Choose a Slot"
368 msgstr "Velg en plass"
369
370 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
371 msgid "Enable a story mod to continue"
372 msgstr ""
373
374 #: ../../../src/GameStateLoad.cpp:589
375 msgid "Load Game"
376 msgstr "Last spill"
377
378 #: ../../../src/GameStateLoad.cpp:695
379 msgid "Entering game world..."
380 msgstr "Åpner spillverden..."
381
382 #: ../../../src/GameStateLoad.cpp:698
383 msgid "Loading saved game..."
384 msgstr "Laster lagret spill..."
385
386 #: ../../../src/GameStateLoad.cpp:731
387 msgid "Invalid save"
388 msgstr ""
389
390 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
391 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
392 #: ../../../src/MenuPowers.cpp:1542
393 #, c-format
394 msgid "Level %d"
395 msgstr "Nivå %d"
396
397 #: ../../../src/GameStateNew.cpp:68
398 msgid "Create"
399 msgstr "Opprett"
400
401 #: ../../../src/GameStateNew.cpp:76
402 msgid "Randomize"
403 msgstr ""
404
405 #: ../../../src/GameStateNew.cpp:92
406 msgid "Choose a Portrait"
407 msgstr "Velg et portrett"
408
409 #: ../../../src/GameStateNew.cpp:96
410 msgid "Choose a Name"
411 msgstr "Velg et navn"
412
413 #: ../../../src/GameStateNew.cpp:100
414 msgid "Permadeath?"
415 msgstr "Permanent død?"
416
417 #: ../../../src/GameStateNew.cpp:104
418 msgid "Choose a Class"
419 msgstr "Velg en klasse"
420
421 #: ../../../src/GameStateTitle.cpp:108
422 msgid "Play Game"
423 msgstr "Start spill"
424
425 #: ../../../src/GameStateTitle.cpp:111
426 msgid "Enable a core mod to continue"
427 msgstr ""
428
429 #: ../../../src/GameStateTitle.cpp:115
430 msgid "Configuration"
431 msgstr "Innstillinger"
432
433 #: ../../../src/GameStateTitle.cpp:118
434 msgid "Credits"
435 msgstr ""
436
437 #: ../../../src/GameStateTitle.cpp:121
438 msgid "Exit Game"
439 msgstr "Avslutt spill"
440
441 #: ../../../src/InputState.cpp:402
442 msgid "Accept"
443 msgstr "Godta"
444
445 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
446 msgid "Up"
447 msgstr "Opp"
448
449 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
450 msgid "Down"
451 msgstr "Ned"
452
453 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
454 msgid "Left"
455 msgstr "Venstre"
456
457 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
458 msgid "Right"
459 msgstr "Høyre"
460
461 #: ../../../src/InputState.cpp:407
462 msgid "Bar1"
463 msgstr ""
464
465 #: ../../../src/InputState.cpp:408
466 msgid "Bar2"
467 msgstr ""
468
469 #: ../../../src/InputState.cpp:409
470 msgid "Bar3"
471 msgstr ""
472
473 #: ../../../src/InputState.cpp:410
474 msgid "Bar4"
475 msgstr ""
476
477 #: ../../../src/InputState.cpp:411
478 msgid "Bar5"
479 msgstr ""
480
481 #: ../../../src/InputState.cpp:412
482 msgid "Bar6"
483 msgstr ""
484
485 #: ../../../src/InputState.cpp:413
486 msgid "Bar7"
487 msgstr ""
488
489 #: ../../../src/InputState.cpp:414
490 msgid "Bar8"
491 msgstr ""
492
493 #: ../../../src/InputState.cpp:415
494 msgid "Bar9"
495 msgstr ""
496
497 #: ../../../src/InputState.cpp:416
498 msgid "Bar0"
499 msgstr ""
500
501 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
502 #: ../../../src/MenuCharacter.cpp:54
503 msgid "Character"
504 msgstr "Karakter"
505
506 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
507 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
508 msgid "Inventory"
509 msgstr ""
510
511 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
512 #: ../../../src/MenuPowers.cpp:168
513 msgid "Powers"
514 msgstr "Krefter"
515
516 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
517 #: ../../../src/MenuLog.cpp:72
518 msgid "Log"
519 msgstr "Logg"
520
521 #: ../../../src/InputState.cpp:421
522 msgid "Main1"
523 msgstr "Hoved1"
524
525 #: ../../../src/InputState.cpp:422
526 msgid "Main2"
527 msgstr "Hoved2"
528
529 #: ../../../src/InputState.cpp:423
530 msgid "Ctrl"
531 msgstr "Ctrl"
532
533 #: ../../../src/InputState.cpp:424
534 msgid "Shift"
535 msgstr "Shift"
536
537 #: ../../../src/InputState.cpp:425
538 msgid "Alt"
539 msgstr "Alt"
540
541 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
542 msgid "Delete"
543 msgstr "Delete"
544
545 #: ../../../src/InputState.cpp:427
546 msgid "ActionBar Accept"
547 msgstr ""
548
549 #: ../../../src/InputState.cpp:428
550 msgid "ActionBar Left"
551 msgstr ""
552
553 #: ../../../src/InputState.cpp:429
554 msgid "ActionBar Right"
555 msgstr ""
556
557 #: ../../../src/InputState.cpp:430
558 msgid "ActionBar Use"
559 msgstr ""
560
561 #: ../../../src/InputState.cpp:431
562 msgid "Developer Menu"
563 msgstr "Utviklermeny"
564
565 #: ../../../src/InputState.cpp:433
566 msgid "Left Mouse"
567 msgstr ""
568
569 #: ../../../src/InputState.cpp:434
570 msgid "Middle Mouse"
571 msgstr ""
572
573 #: ../../../src/InputState.cpp:435
574 msgid "Right Mouse"
575 msgstr ""
576
577 #: ../../../src/InputState.cpp:436
578 msgid "Wheel Up"
579 msgstr "Hjul Opp"
580
581 #: ../../../src/InputState.cpp:437
582 msgid "Wheel Down"
583 msgstr "Hjul Ned"
584
585 #: ../../../src/InputState.cpp:438
586 msgid "Mouse X1"
587 msgstr ""
588
589 #: ../../../src/InputState.cpp:439
590 msgid "Mouse X2"
591 msgstr ""
592
593 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
594 msgid "Unknown Item"
595 msgstr "Ukjent gjenstand"
596
597 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
598 #, c-format
599 msgid "%d%% Speed"
600 msgstr "%d%% Hastighet"
601
602 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
603 #, c-format
604 msgid "%d%% Attack Speed"
605 msgstr "%d%% Angrepshastighet"
606
607 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
608 #: ../../../src/MenuPowers.cpp:833
609 #, c-format
610 msgid "Resistance (%s)"
611 msgstr ""
612
613 #: ../../../src/ItemManager.cpp:684
614 #, c-format
615 msgid "Requires %s"
616 msgstr ""
617
618 #: ../../../src/ItemManager.cpp:733
619 msgid "Quest Item"
620 msgstr ""
621
622 #: ../../../src/ItemManager.cpp:760
623 #, c-format
624 msgid "Quality: %s"
625 msgstr "Kvalitet: %s"
626
627 #: ../../../src/ItemManager.cpp:785
628 #, c-format
629 msgid "Absorb: %d-%d"
630 msgstr "Absorberer: %d-%d"
631
632 #: ../../../src/ItemManager.cpp:787
633 #, c-format
634 msgid "Absorb: %d"
635 msgstr "Absorberer: %d"
636
637 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
638 #: ../../../src/MenuPowers.cpp:1134
639 #, c-format
640 msgid "Requires Level %d"
641 msgstr "Krever nivå %d"
642
643 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
644 #: ../../../src/MenuPowers.cpp:1125
645 #, c-format
646 msgid "Requires %s %d"
647 msgstr "Krever %s %d"
648
649 #: ../../../src/ItemManager.cpp:849
650 #, c-format
651 msgid "Requires Class: %s"
652 msgstr "Krever klasse: %s"
653
654 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
655 #, c-format
656 msgid "Buy Price: %d %s"
657 msgstr "Kjøp for: %d %s"
658
659 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
660 #, c-format
661 msgid "Buy Price: %d %s each"
662 msgstr "Kjøp for: %d %s hver"
663
664 #: ../../../src/ItemManager.cpp:886
665 #, c-format
666 msgid "Sell Price: %d %s"
667 msgstr "Selg for: %d %s"
668
669 #: ../../../src/ItemManager.cpp:888
670 #, c-format
671 msgid "Sell Price: %d %s each"
672 msgstr "Selg for: %d %s hver"
673
674 #: ../../../src/ItemManager.cpp:897
675 msgid "Set:"
676 msgstr ""
677
678 #: ../../../src/ItemManager.cpp:904
679 #, c-format
680 msgid "%d items:"
681 msgstr ""
682
683 #: ../../../src/ItemManager.cpp:917
684 #, c-format
685 msgid "Press [%s] to use"
686 msgstr ""
687
688 #: ../../../src/ItemManager.cpp:920
689 #, c-format
690 msgid "Press [%s] to read"
691 msgstr ""
692
693 #: ../../../src/MenuActionBar.cpp:87
694 msgid "Loot tooltip visibility"
695 msgstr ""
696
697 #: ../../../src/MenuActionBar.cpp:88
698 msgid "Mini-map mode"
699 msgstr ""
700
701 #: ../../../src/MenuActionBar.cpp:89
702 msgid "Always show stat bar labels"
703 msgstr ""
704
705 #: ../../../src/MenuActionBar.cpp:90
706 msgid "Show combat text"
707 msgstr "Vis tekst i kamp"
708
709 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
710 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
711 #, c-format
712 msgid "Hotkey: %s"
713 msgstr "Hurtigtast: %s"
714
715 #: ../../../src/MenuActionBar.cpp:474
716 #, c-format
717 msgid "Default. Temporarily show all loot tooltips with '%s'."
718 msgstr ""
719
720 #: ../../../src/MenuActionBar.cpp:476
721 #, c-format
722 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
723 msgstr ""
724
725 #: ../../../src/MenuActionBar.cpp:478
726 #, c-format
727 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
728 msgstr ""
729
730 #: ../../../src/MenuActionBar.cpp:482
731 msgid "Visible"
732 msgstr ""
733
734 #: ../../../src/MenuActionBar.cpp:484
735 msgid "Visible (2x zoom)"
736 msgstr ""
737
738 #: ../../../src/MenuActionBar.cpp:486
739 msgid "Hidden"
740 msgstr ""
741
742 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
743 msgid "Enabled"
744 msgstr ""
745
746 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
747 msgid "Disabled"
748 msgstr ""
749
750 #: ../../../src/MenuActionBar.cpp:657
751 msgid "Not enough MP."
752 msgstr ""
753
754 #: ../../../src/MenuActiveEffects.cpp:124
755 #, c-format
756 msgid "x%d"
757 msgstr ""
758
759 #: ../../../src/MenuActiveEffects.cpp:219
760 msgid "Remaining:"
761 msgstr "Ubrukte:"
762
763 #: ../../../src/MenuActiveEffects.cpp:225
764 #, c-format
765 msgid "x%d stacks"
766 msgstr ""
767
768 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
769 msgid "Name"
770 msgstr "Navn"
771
772 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
773 msgid "Level"
774 msgstr "Nivå"
775
776 #: ../../../src/MenuCharacter.cpp:310
777 #, c-format
778 msgid "%d unspent stat point"
779 msgstr ""
780
781 #: ../../../src/MenuCharacter.cpp:313
782 #, c-format
783 msgid "%d unspent stat points"
784 msgstr ""
785
786 #: ../../../src/MenuCharacter.cpp:355
787 #, c-format
788 msgid "Reduces the damage taken from \"%s\" elemental attacks."
789 msgstr ""
790
791 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
792 #, c-format
793 msgid "XP: %d"
794 msgstr ""
795
796 #: ../../../src/MenuCharacter.cpp:367
797 #, c-format
798 msgid "Next: %d"
799 msgstr "Neste: %d"
800
801 #: ../../../src/MenuCharacter.cpp:373
802 #, c-format
803 msgid "base (%d), bonus (%d)"
804 msgstr ""
805
806 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
807 msgid "Related stats:"
808 msgstr ""
809
810 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
811 #, c-format
812 msgid "Each level grants %d."
813 msgstr ""
814
815 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
816 #, c-format
817 msgid "Each point of %s grants %d."
818 msgstr ""
931 "Dette aktiverer parallakse (ikke-flis) lag. Å deaktivere denne innstillingen"
932 " kan forbedre ytelsen i enkelte tilfeller."
933
934 #: ../../../src/MenuConfig.cpp:512
935 msgid ""
936 "Enables the below setting that controls the screen gamma level. The behavior"
937 " of the gamma setting can vary between platforms."
938 msgstr ""
939 "Aktiverer innstillingen under som justerer skjermens gamma nivå. "
940 "Innstillingens oppførsel kan variere mellom ulike plattformer."
941
942 #: ../../../src/MenuConfig.cpp:513
943 msgid ""
944 "Provides additional text for information that is primarily conveyed through "
945 "color."
946 msgstr ""
947 "Tilbyr tilleggsinformasjon gjennom tekst som ellers hovedsakelig "
948 "kommuniseres gjennom farge."
949
950 #: ../../../src/MenuConfig.cpp:514
951 msgid ""
952 "Some mods will automatically hide the stat bars when they are inactive. "
953 "Disabling this option will keep them displayed at all times."
954 msgstr ""
955 "Noen tilleggspakker vil automatisk skjule ferdighetsfelt når de er inaktive. \n"
956 "Deaktivering av dette valget vil alltid holde dem synlige"
957
958 #: ../../../src/MenuConfig.cpp:515
959 msgid ""
960 "When enabled, empty equipment slots will be filled with applicable items "
961 "when they are obtained."
962 msgstr ""
963 "Når aktivert, vil tomme verktøyrom fylles med aktuelle gjenstander når de "
964 "anskaffes."
965
966 #: ../../../src/MenuConfig.cpp:516
967 msgid ""
968 "Shows a marker above enemies, allies, and the player when they are obscured "
969 "by tall objects."
970 msgstr ""
971 "Vis en markør over fiender, allierte og spilleren når de er tildekt bak høye"
972 " objekter."
973
974 #: ../../../src/MenuConfig.cpp:517
975 msgid ""
976 "This allows the game to be controlled entirely with the keyboard (or "
977 "joystick)."
978 msgstr ""
979 "Dette tillater spillet å bli kontrollert fullhent med tastaturet (eller en "
980 "joystick)."
981
982 #: ../../../src/MenuConfig.cpp:518
983 msgid ""
984 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
985 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
986 "instead of 'Main1'."
987 msgstr ""
988 "Når 'Flytt helten med musepeker' er aktivert, vil denne instillingen "
989 "kontrolere om 'Hoved1' eller 'Hoved2' brukes for å flytte helten. Dersom "
990 "aktivert, vil 'Hoved2' flytte helten i stedet for 'Hoved1'."
991
992 #: ../../../src/MenuConfig.cpp:519
993 msgid ""
994 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
995 "assigned to the movement button can be used by targeting an enemy. If this "
996 "setting is disabled, it is required to use 'Shift' to access the Power "
997 "assigned to the movement button."
998 msgstr ""
999 "Når 'Flytt helten med musepeker' er aktivert, vil denne innstillingen "
1000 "kontrollere om Evnen som er bundet til bevegelsesknappen kan brukes ved å "
1001 "sikte seg inn på en fiende. Dersom denne innstillingen er deaktivert, kreves"
1002 " det at man bruker 'Shift' for å benytte Evner som er bundet til "
1003 "bevegelsesknappen."
1004
1005 #: ../../../src/MenuConfig.cpp:520
1006 msgid ""
1007 "The player's attacks will be aimed in the direction of the mouse cursor when"
1008 " this is enabled."
1009 msgstr ""
1010 "Spillerens angrep vil siktes i retning av musepekeren dersom dette er "
1011 "aktivert."
1012
1013 #: ../../../src/MenuConfig.cpp:571
1014 msgid "Active Mods"
1015 msgstr "Aktive tilleggspakker"
1016
1017 #: ../../../src/MenuConfig.cpp:580
1018 msgid "Available Mods"
1019 msgstr "Tilgjengelige tilleggspakker"
1020
1021 #: ../../../src/MenuConfig.cpp:599
1022 msgid "<< Disable"
1023 msgstr "<< Deaktiver"
1024
1025 #: ../../../src/MenuConfig.cpp:605
1026 msgid "Enable >>"
1027 msgstr "Aktiver >>"
1028
1029 #: ../../../src/MenuConfig.cpp:1436
1030 msgid "Version:"
1031 msgstr "Versjon:"
1032
1033 #: ../../../src/MenuConfig.cpp:1441
1034 msgid "Game:"
1035 msgstr "Spill:"
1036
1037 #: ../../../src/MenuConfig.cpp:1446
1038 msgid "Engine version:"
1039 msgstr "Spillmotor versjon:"
1040
1041 #: ../../../src/MenuConfig.cpp:1454
1042 msgid "Requires mods:"
1043 msgstr "Krever følgende tilleggspakker:"
1044
1045 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
1046 msgid "(none)"
1047 msgstr "(ingen)"
1048
1049 #: ../../../src/MenuConfig.cpp:1579
1050 msgid "Save & Exit"
1051 msgstr "Lagre og avslutt"
8191052
8201053 #: ../../../src/MenuDevConsole.cpp:63
8211054 msgid "Execute"
8281061 #: ../../../src/MenuDevConsole.cpp:141
8291062 #, c-format
8301063 msgid "Use '%s' to inspect with the cursor."
831 msgstr ""
1064 msgstr "Bruk '%s' for å utforske med musepekeren."
8321065
8331066 #: ../../../src/MenuDevConsole.cpp:146
8341067 msgid "Arguments with spaces should be enclosed with double quotes. Example:"
835 msgstr ""
1068 msgstr "Argumenter med mellomrom skal innrammes med hermetegn. Eksempel:"
8361069
8371070 #: ../../../src/MenuDevConsole.cpp:147
8381071 msgid "Type 'help' to get a list of commands."
839 msgstr ""
1072 msgstr "Skriv 'help' for å motta en liste over tilgjengelige kommandoer."
8401073
8411074 #: ../../../src/MenuDevConsole.cpp:209 ../../../src/MenuDevConsole.cpp:213
8421075 msgid "px"
843 msgstr ""
1076 msgstr "px"
8441077
8451078 #: ../../../src/MenuDevConsole.cpp:224
8461079 msgid "Distance"
847 msgstr ""
1080 msgstr "Distanse"
8481081
8491082 #: ../../../src/MenuDevConsole.cpp:239 ../../../src/MenuDevConsole.cpp:286
8501083 msgid "Entity"
851 msgstr ""
1084 msgstr "Enhet"
8521085
8531086 #: ../../../src/MenuDevConsole.cpp:261 ../../../src/MenuDevConsole.cpp:268
8541087 msgid "none"
855 msgstr ""
1088 msgstr "ingen"
8561089
8571090 #: ../../../src/MenuDevConsole.cpp:262 ../../../src/MenuDevConsole.cpp:264
8581091 msgid "wall"
859 msgstr ""
1092 msgstr "vegg"
8601093
8611094 #: ../../../src/MenuDevConsole.cpp:263 ../../../src/MenuDevConsole.cpp:265
8621095 msgid "short wall / pit"
863 msgstr ""
1096 msgstr "kort vegg / grop"
8641097
8651098 #: ../../../src/MenuDevConsole.cpp:266
8661099 msgid "entity"
867 msgstr ""
1100 msgstr "enhet"
8681101
8691102 #: ../../../src/MenuDevConsole.cpp:267
8701103 msgid "entity, ally"
871 msgstr ""
1104 msgstr "enhet, alliert"
8721105
8731106 #: ../../../src/MenuDevConsole.cpp:274
8741107 msgid "Tile"
875 msgstr ""
1108 msgstr "Flis"
8761109
8771110 #: ../../../src/MenuDevConsole.cpp:360
8781111 msgid "adds a power to the action bar"
879 msgstr ""
1112 msgstr "legger til en evne i handlingsfeltet"
8801113
8811114 #: ../../../src/MenuDevConsole.cpp:361
8821115 msgid "turns on/off the display of the FPS counter"
883 msgstr ""
1116 msgstr "Skru på/av visningen av FPS telleren"
8841117
8851118 #: ../../../src/MenuDevConsole.cpp:362
8861119 msgid "turns on/off all of the HUD elements"
887 msgstr ""
1120 msgstr "Skru på/av alle HUD elementer"
8881121
8891122 #: ../../../src/MenuDevConsole.cpp:363
8901123 msgid "turns on/off the developer hud"
891 msgstr ""
1124 msgstr "slår på/av utvikler HUD"
8921125
8931126 #: ../../../src/MenuDevConsole.cpp:364
8941127 msgid ""
9271160
9281161 #: ../../../src/MenuDevConsole.cpp:377
9291162 msgid "Toggled the developer hud"
930 msgstr ""
1163 msgstr "Slo på/av utvikler HUD"
9311164
9321165 #: ../../../src/MenuDevConsole.cpp:381
9331166 msgid "Toggled the hud"
934 msgstr ""
1167 msgstr "Slo på/av HUD"
9351168
9361169 #: ../../../src/MenuDevConsole.cpp:385
9371170 msgid "Toggled the FPS counter"
938 msgstr ""
1171 msgstr "Slo på/av FPS teller"
9391172
9401173 #: ../../../src/MenuDevConsole.cpp:534
9411174 msgid "ERROR: Incorrect number of arguments"
9431176
9441177 #: ../../../src/MenuDevConsole.cpp:536 ../../../src/MenuDevConsole.cpp:564
9451178 msgid "HINT:"
946 msgstr ""
1179 msgstr "HINT:"
9471180
9481181 #: ../../../src/MenuDevConsole.cpp:536
9491182 msgid "<id>"
950 msgstr ""
1183 msgstr "<id>"
9511184
9521185 #: ../../../src/MenuDevConsole.cpp:552
9531186 #, c-format
9541187 msgid "ERROR: '%s' is not a valid event key"
955 msgstr ""
1188 msgstr "FEIL: '%s' er ikke en gyldig eventknapp"
9561189
9571190 #: ../../../src/MenuDevConsole.cpp:562
9581191 msgid "ERROR: Too few arguments"
9601193
9611194 #: ../../../src/MenuDevConsole.cpp:564
9621195 msgid "<key>=<val> <key>=<val> ..."
963 msgstr ""
1196 msgstr "<key>=<val> <key>=<val> ..."
9641197
9651198 #: ../../../src/MenuDevConsole.cpp:569
9661199 msgid "ERROR: Unknown command"
9701203 msgid "HINT: Type help"
9711204 msgstr "HINT: Skriv help"
9721205
973 #: ../../../src/MenuEnemy.cpp:138
1206 #: ../../../src/MenuEnemy.cpp:162
9741207 #, c-format
9751208 msgid "%s level %d"
9761209 msgstr "%s nivå %d"
9771210
978 #: ../../../src/MenuEnemy.cpp:162
1211 #: ../../../src/MenuEnemy.cpp:186
9791212 msgid "Dead"
9801213 msgstr "Død"
9811214
982 #: ../../../src/MenuEnemy.cpp:164
1215 #: ../../../src/MenuEnemy.cpp:188
9831216 msgid "Destroyed"
984 msgstr ""
985
986 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
987 msgid "Paused"
988 msgstr "Pauset"
989
990 #: ../../../src/MenuExit.cpp:91
991 msgid "Save & Exit"
992 msgstr "Lagre og avslutt"
993
994 #: ../../../src/MenuExit.cpp:92
995 msgid "Exit"
996 msgstr "Avslutt"
997
998 #: ../../../src/MenuExit.cpp:96
999 msgid "Continue"
1000 msgstr "Fortsett"
1001
1002 #: ../../../src/MenuInventory.cpp:73
1003 msgid "Automatically equip items"
1004 msgstr ""
1005
1006 #: ../../../src/MenuInventory.cpp:188
1217 msgstr "Tilintetgjort"
1218
1219 #: ../../../src/MenuInventory.cpp:177
10071220 #, c-format
10081221 msgid "Lost %d%% of %s."
1009 msgstr ""
1010
1011 #: ../../../src/MenuInventory.cpp:195
1222 msgstr "Mistet %d%% av %s."
1223
1224 #: ../../../src/MenuInventory.cpp:184
10121225 #, c-format
10131226 msgid "Lost %d%% of total XP."
1014 msgstr ""
1015
1016 #: ../../../src/MenuInventory.cpp:200
1227 msgstr "Mistet %d%% av total EP."
1228
1229 #: ../../../src/MenuInventory.cpp:189
10171230 #, c-format
10181231 msgid "Lost %d%% of current level XP."
1019 msgstr ""
1020
1021 #: ../../../src/MenuInventory.cpp:226
1232 msgstr "Mistet %d%% av det nåværende nivåets EP."
1233
1234 #: ../../../src/MenuInventory.cpp:215
10221235 #, c-format
10231236 msgid "Lost %s."
10241237 msgstr "Mistet %s."
10251238
1026 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1239 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10271240 #, c-format
10281241 msgid "%d %s"
10291242 msgstr "%d %s"
10301243
1031 #: ../../../src/MenuInventory.cpp:317
1244 #: ../../../src/MenuInventory.cpp:300
10321245 msgid "Pick up item(s):"
10331246 msgstr "Plukk opp gjenstand(er):"
10341247
1035 #: ../../../src/MenuInventory.cpp:318
1248 #: ../../../src/MenuInventory.cpp:301
10361249 msgid "Use or equip item:"
1037 msgstr ""
1038
1039 #: ../../../src/MenuInventory.cpp:319
1250 msgstr "Benytt eller bruk gjenstand:"
1251
1252 #: ../../../src/MenuInventory.cpp:302
10401253 #, c-format
10411254 msgid "%s modifiers"
1042 msgstr ""
1043
1044 #: ../../../src/MenuInventory.cpp:320
1255 msgstr "%s modifikatorer"
1256
1257 #: ../../../src/MenuInventory.cpp:303
10451258 msgid "Select a quantity of item:"
1046 msgstr "Velg et antall:"
1047
1048 #: ../../../src/MenuInventory.cpp:323
1259 msgstr "Velg et antall av gjenstandene:"
1260
1261 #: ../../../src/MenuInventory.cpp:306
10491262 msgid "Stash item stack:"
1050 msgstr ""
1051
1052 #: ../../../src/MenuInventory.cpp:325
1263 msgstr "Lagre gjenstandsstabel:"
1264
1265 #: ../../../src/MenuInventory.cpp:308
10531266 msgid "Sell item stack:"
1054 msgstr ""
1055
1056 #: ../../../src/MenuInventory.cpp:592
1267 msgstr "Selg gjenstandsstabel:"
1268
1269 #: ../../../src/MenuInventory.cpp:574
10571270 msgid "You don't have enough of the required item."
1058 msgstr ""
1059
1060 #: ../../../src/MenuInventory.cpp:599
1271 msgstr "Du har ikke nok av den påkrevde gjenstanden. "
1272
1273 #: ../../../src/MenuInventory.cpp:586
10611274 msgid "You can't use this item right now."
1062 msgstr ""
1063
1064 #: ../../../src/MenuInventory.cpp:611
1275 msgstr "Du kan ikke bruke denne gjenstanden akkurat nå."
1276
1277 #: ../../../src/MenuInventory.cpp:598
10651278 msgid "This item can only be used from the action bar."
1066 msgstr ""
1067
1068 #: ../../../src/MenuInventory.cpp:729
1279 msgstr "Denne gjenstanden kan bare brukes fra handlingsfeltet."
1280
1281 #: ../../../src/MenuInventory.cpp:716
10691282 msgid "Inventory is full."
10701283 msgstr "Du har ikke plass til flere gjenstander."
10711284
1072 #: ../../../src/MenuInventory.cpp:849
1285 #: ../../../src/MenuInventory.cpp:841
10731286 #, c-format
10741287 msgid "Not enough %s."
10751288 msgstr "Ikke nok %s."
10761289
1077 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1290 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
10781291 msgid "This item can not be sold."
10791292 msgstr "Du kan ikke selge denne gjenstanden."
10801293
10861299 msgid "Quests"
10871300 msgstr "Oppdrag"
10881301
1089 #: ../../../src/MenuManager.cpp:286
1302 #: ../../../src/MenuManager.cpp:296
10901303 #, c-format
10911304 msgid "XP: %d/%d"
1092 msgstr ""
1093
1094 #: ../../../src/MenuManager.cpp:827
1305 msgstr "EP: %d/%d"
1306
1307 #: ../../../src/MenuManager.cpp:854
10951308 msgid "This item can not be dropped."
1096 msgstr ""
1309 msgstr "Denne gjenstanden kan ikke slippes."
10971310
10981311 #: ../../../src/MenuNumPicker.cpp:59
10991312 msgid "Enter amount:"
1100 msgstr ""
1101
1102 #: ../../../src/MenuPowers.cpp:787
1313 msgstr "Oppgi mengd:"
1314
1315 #: ../../../src/MenuPowers.cpp:786
11031316 msgid "Passive"
1104 msgstr ""
1105
1106 #: ../../../src/MenuPowers.cpp:792
1317 msgstr "Passiv"
1318
1319 #: ../../../src/MenuPowers.cpp:791
11071320 #, c-format
11081321 msgid "Costs %d MP"
1109 msgstr ""
1110
1111 #: ../../../src/MenuPowers.cpp:796
1322 msgstr "Koster %d MP"
1323
1324 #: ../../../src/MenuPowers.cpp:795
11121325 #, c-format
11131326 msgid "Costs %d HP"
1114 msgstr ""
1115
1116 #: ../../../src/MenuPowers.cpp:801
1327 msgstr "Koster %d HP"
1328
1329 #: ../../../src/MenuPowers.cpp:800
11171330 msgid "Cooldown:"
1118 msgstr ""
1119
1120 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1331 msgstr "Nedkjøling:"
1332
1333 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11211334 msgid "Damage per second"
11221335 msgstr "Skade per sekund"
11231336
1124 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1337 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11251338 msgid "HP per second"
1126 msgstr ""
1127
1128 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1339 msgstr "HP per sekund"
1340
1341 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11291342 msgid "MP per second"
1130 msgstr ""
1131
1132 #: ../../../src/MenuPowers.cpp:885
1343 msgstr "MP per sekund"
1344
1345 #: ../../../src/MenuPowers.cpp:884
11331346 msgid "Immobilize"
1134 msgstr ""
1135
1136 #: ../../../src/MenuPowers.cpp:893
1347 msgstr "Immobilisere"
1348
1349 #: ../../../src/MenuPowers.cpp:892
11371350 msgid "Immunity"
11381351 msgstr "Immunitet"
11391352
1140 #: ../../../src/MenuPowers.cpp:896
1353 #: ../../../src/MenuPowers.cpp:895
11411354 msgid "Immunity to damage over time"
11421355 msgstr "Immun mot skade over tid"
11431356
1144 #: ../../../src/MenuPowers.cpp:899
1357 #: ../../../src/MenuPowers.cpp:898
11451358 msgid "Immunity to slow"
1146 msgstr ""
1147
1148 #: ../../../src/MenuPowers.cpp:902
1359 msgstr "Immunitet mot hastighetsredusering"
1360
1361 #: ../../../src/MenuPowers.cpp:901
11491362 msgid "Immunity to stun"
1150 msgstr ""
1151
1152 #: ../../../src/MenuPowers.cpp:905
1363 msgstr "Immunitet mot lamslåing"
1364
1365 #: ../../../src/MenuPowers.cpp:904
11531366 msgid "Immunity to HP steal"
1154 msgstr ""
1155
1156 #: ../../../src/MenuPowers.cpp:908
1367 msgstr "Immunitet mot HP-stjeling"
1368
1369 #: ../../../src/MenuPowers.cpp:907
11571370 msgid "Immunity to MP steal"
1158 msgstr ""
1159
1160 #: ../../../src/MenuPowers.cpp:911
1371 msgstr "Immunitet mot MP-stjeling"
1372
1373 #: ../../../src/MenuPowers.cpp:910
11611374 msgid "Immunity to knockback"
1162 msgstr ""
1163
1164 #: ../../../src/MenuPowers.cpp:914
1375 msgstr "Immunitet mot tilbakeslag"
1376
1377 #: ../../../src/MenuPowers.cpp:913
11651378 msgid "Immunity to damage reflection"
1166 msgstr ""
1167
1168 #: ../../../src/MenuPowers.cpp:917
1379 msgstr "Immunitet mot skaderefleksjon"
1380
1381 #: ../../../src/MenuPowers.cpp:916
11691382 msgid "Stun"
1170 msgstr ""
1171
1172 #: ../../../src/MenuPowers.cpp:920
1383 msgstr "Lamslå"
1384
1385 #: ../../../src/MenuPowers.cpp:919
11731386 msgid "Automatic revive on death"
1174 msgstr ""
1175
1176 #: ../../../src/MenuPowers.cpp:923
1387 msgstr "Gjenoppliv automatisk ved død"
1388
1389 #: ../../../src/MenuPowers.cpp:922
11771390 msgid "Convert"
1178 msgstr ""
1179
1180 #: ../../../src/MenuPowers.cpp:926
1391 msgstr "Konverter"
1392
1393 #: ../../../src/MenuPowers.cpp:925
11811394 msgid "Fear"
11821395 msgstr "Frykt"
11831396
1184 #: ../../../src/MenuPowers.cpp:929
1397 #: ../../../src/MenuPowers.cpp:928
11851398 msgid "Lifespan"
1186 msgstr ""
1187
1188 #: ../../../src/MenuPowers.cpp:953
1399 msgstr "Levetid"
1400
1401 #: ../../../src/MenuPowers.cpp:952
11891402 msgid "Magical Shield"
11901403 msgstr "Magisk skjold"
11911404
1192 #: ../../../src/MenuPowers.cpp:982
1405 #: ../../../src/MenuPowers.cpp:981
11931406 msgid "Healing"
1194 msgstr ""
1195
1196 #: ../../../src/MenuPowers.cpp:985
1407 msgstr "Helbreding"
1408
1409 #: ../../../src/MenuPowers.cpp:984
11971410 msgid "Knockback"
1198 msgstr ""
1199
1200 #: ../../../src/MenuPowers.cpp:1010
1411 msgstr "Tilbakeslag"
1412
1413 #: ../../../src/MenuPowers.cpp:1009
12011414 #, c-format
12021415 msgid "%d%% chance"
12031416 msgstr "%d%% sjanse"
12041417
1205 #: ../../../src/MenuPowers.cpp:1062
1418 #: ../../../src/MenuPowers.cpp:1061
12061419 msgid "Base Accuracy"
1207 msgstr ""
1208
1209 #: ../../../src/MenuPowers.cpp:1082
1420 msgstr "Kjerne Treffsikkerhet"
1421
1422 #: ../../../src/MenuPowers.cpp:1081
12101423 msgid "Base Critical Chance"
1211 msgstr ""
1212
1213 #: ../../../src/MenuPowers.cpp:1090
1424 msgstr "Kjerne Kritisk Sjanse"
1425
1426 #: ../../../src/MenuPowers.cpp:1089
12141427 msgid "Ignores Absorbtion"
1215 msgstr ""
1216
1217 #: ../../../src/MenuPowers.cpp:1095
1428 msgstr "Ignorerer Absorbering "
1429
1430 #: ../../../src/MenuPowers.cpp:1094
12181431 msgid "Ignores Avoidance"
1219 msgstr ""
1220
1221 #: ../../../src/MenuPowers.cpp:1100
1432 msgstr "Ignorerer Unnvikelse"
1433
1434 #: ../../../src/MenuPowers.cpp:1099
12221435 #, c-format
12231436 msgid "%d%% Chance to crit slowed targets"
1224 msgstr ""
1225
1226 #: ../../../src/MenuPowers.cpp:1105
1437 msgstr "%d%% Sjanse for å kritisk skade hastighetsreduserte mål"
1438
1439 #: ../../../src/MenuPowers.cpp:1104
12271440 #, c-format
12281441 msgid "Elemental Damage (%s)"
1229 msgstr ""
1230
1231 #: ../../../src/MenuPowers.cpp:1114
1442 msgstr "Element Skade (%s)"
1443
1444 #: ../../../src/MenuPowers.cpp:1113
12321445 #, c-format
12331446 msgid "Requires a %s"
12341447 msgstr "Krever en %s"
12351448
1236 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1449 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12371450 #, c-format
12381451 msgid "Requires Power: %s"
1239 msgstr ""
1240
1241 #: ../../../src/MenuPowers.cpp:1163
1452 msgstr "Krever Evne: %s"
1453
1454 #: ../../../src/MenuPowers.cpp:1162
12421455 msgid "Click to Unlock (uses 1 Skill Point)"
1243 msgstr ""
1244
1245 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1456 msgstr "Klikk for å låse opp (bruker 1 evnepoeng)"
1457
1458 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12461459 msgid "Requires 1 Skill Point"
1247 msgstr ""
1248
1249 #: ../../../src/MenuPowers.cpp:1355
1460 msgstr "Krever 1 evnepoeng"
1461
1462 #: ../../../src/MenuPowers.cpp:1354
12501463 #, c-format
12511464 msgid "%d unspent skill point"
1252 msgstr ""
1253
1254 #: ../../../src/MenuPowers.cpp:1358
1465 msgstr "%d ubrukt evnepoeng"
1466
1467 #: ../../../src/MenuPowers.cpp:1357
12551468 #, c-format
12561469 msgid "%d unspent skill points"
1257 msgstr ""
1258
1259 #: ../../../src/MenuPowers.cpp:1388
1470 msgstr "%d ubrukte evnepoeng"
1471
1472 #: ../../../src/MenuPowers.cpp:1387
12601473 msgid "Next Level:"
12611474 msgstr "Neste nivå:"
12621475
1263 #: ../../../src/MenuStash.cpp:96
1264 msgid "Shared Stash"
1265 msgstr "Delt kiste"
1266
1267 #: ../../../src/MenuStash.cpp:209
1476 #: ../../../src/MenuStash.cpp:53
1477 msgid "Private"
1478 msgstr "Privat"
1479
1480 #: ../../../src/MenuStash.cpp:55
1481 msgid "Shared"
1482 msgstr "Delt"
1483
1484 #: ../../../src/MenuStash.cpp:103
1485 msgid "Stash"
1486 msgstr "Lager"
1487
1488 #: ../../../src/MenuStash.cpp:258
12681489 msgid "Can not store quest items in the stash."
1269 msgstr ""
1270
1271 #: ../../../src/MenuStash.cpp:219
1490 msgstr "Kan ikke lagre oppdragsgjenstander i lageret."
1491
1492 #: ../../../src/MenuStash.cpp:263
1493 msgid "This item can not be stored in the stash."
1494 msgstr "Denne gjenstanden kan ikke oppbevares i lageret. "
1495
1496 #: ../../../src/MenuStash.cpp:268
1497 msgid "This item can not be stored in the private stash."
1498 msgstr "Denne gjenstanden kan ikke oppbevares i privatlageret."
1499
1500 #: ../../../src/MenuStash.cpp:273
1501 msgid "This item can not be stored in the shared stash."
1502 msgstr "Denne gjenstanden kan ikke oppbevares i det delte lageret."
1503
1504 #: ../../../src/MenuStash.cpp:283
12721505 msgid "Stash is full."
1273 msgstr "Kisten er full."
1274
1275 #: ../../../src/MenuTalker.cpp:454
1506 msgstr "Lageret er fullt."
1507
1508 #: ../../../src/MenuStash.cpp:340
1509 #, c-format
1510 msgid "Can not store item in stash: %s"
1511 msgstr "Kan ikke oppbevare gjenstander i lageret: %s"
1512
1513 #: ../../../src/MenuTalker.cpp:447
1514 #, c-format
1515 msgid "<dialog node %d>"
1516 msgstr "<dialog node %d>"
1517
1518 #: ../../../src/MenuTalker.cpp:455
12761519 msgid "Trade"
12771520 msgstr "Handle"
12781521
12791522 #: ../../../src/MenuVendor.cpp:58
12801523 msgid "Buyback"
1281 msgstr ""
1282
1283 #: ../../../src/MenuVendor.cpp:279
1524 msgstr "Kjøp tilbake"
1525
1526 #: ../../../src/MenuVendor.cpp:281
12841527 msgid "Vendor"
1285 msgstr ""
1286
1287 #: ../../../src/PowerManager.cpp:1136
1528 msgstr "Selger"
1529
1530 #: ../../../src/PowerManager.cpp:1170
12881531 #, c-format
12891532 msgid "+%d Shield"
12901533 msgstr "+%d Skjold"
12911534
1292 #: ../../../src/PowerManager.cpp:1392
1535 #: ../../../src/PowerManager.cpp:1426
12931536 msgid "You are already transformed, untransform first."
1294 msgstr ""
1295
1296 #: ../../../src/PowerManager.cpp:1404
1537 msgstr "Du er allerede forvandlet, forvandle deg tilbake først."
1538
1539 #: ../../../src/PowerManager.cpp:1438
12971540 msgid "Could not untransform at this position."
1298 msgstr ""
1541 msgstr "Kunne ikke forvandle tilbake på denne posisjonen."
12991542
13001543 #: ../../../src/QuestLog.cpp:234
13011544 msgid "Completed Quests"
1302 msgstr ""
1303
1304 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1545 msgstr "Fullførte Oppdrag"
1546
1547 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13051548 msgid "Game saved."
13061549 msgstr "Spill lagret."
13071550
1308 #: ../../../src/SDLInputState.cpp:582
1551 #: ../../../src/SDLInputState.cpp:643
1552 msgid "BkSp"
1553 msgstr ""
1554
1555 #: ../../../src/SDLInputState.cpp:644
1556 msgid "Caps"
1557 msgstr ""
1558
1559 #: ../../../src/SDLInputState.cpp:645
1560 msgid "Del"
1561 msgstr ""
1562
1563 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1564 msgid "End"
1565 msgstr "End"
1566
1567 #: ../../../src/SDLInputState.cpp:648
1568 msgid "Esc"
1569 msgstr ""
1570
1571 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1572 msgid "Home"
1573 msgstr "Hjem"
1574
1575 #: ../../../src/SDLInputState.cpp:650
1576 msgid "Ins"
1577 msgstr ""
1578
1579 #: ../../../src/SDLInputState.cpp:651
1580 msgid "LAlt"
1581 msgstr ""
1582
1583 #: ../../../src/SDLInputState.cpp:652
1584 msgid "LCtrl"
1585 msgstr ""
1586
1587 #: ../../../src/SDLInputState.cpp:654
1588 msgid "LShft"
1589 msgstr ""
1590
1591 #: ../../../src/SDLInputState.cpp:655
1592 msgid "Num"
1593 msgstr ""
1594
1595 #: ../../../src/SDLInputState.cpp:656
1596 msgid "PgDn"
1597 msgstr ""
1598
1599 #: ../../../src/SDLInputState.cpp:657
1600 msgid "PgUp"
1601 msgstr ""
1602
1603 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1604 msgid "Pause"
1605 msgstr "Pause"
1606
1607 #: ../../../src/SDLInputState.cpp:659
1608 msgid "Print"
1609 msgstr ""
1610
1611 #: ../../../src/SDLInputState.cpp:660
1612 msgid "RAlt"
1613 msgstr ""
1614
1615 #: ../../../src/SDLInputState.cpp:661
1616 msgid "RCtrl"
1617 msgstr ""
1618
1619 #: ../../../src/SDLInputState.cpp:662
1620 msgid "Ret"
1621 msgstr ""
1622
1623 #: ../../../src/SDLInputState.cpp:664
1624 msgid "RShft"
1625 msgstr ""
1626
1627 #: ../../../src/SDLInputState.cpp:665
1628 msgid "SLock"
1629 msgstr ""
1630
1631 #: ../../../src/SDLInputState.cpp:666
1632 msgid "Spc"
1633 msgstr ""
1634
1635 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1636 msgid "Tab"
1637 msgstr "Tab"
1638
1639 #: ../../../src/SDLInputState.cpp:673
13091640 msgid "Backspace"
1310 msgstr ""
1311
1312 #: ../../../src/SDLInputState.cpp:583
1641 msgstr "Tilbaketast"
1642
1643 #: ../../../src/SDLInputState.cpp:674
13131644 msgid "CapsLock"
1314 msgstr ""
1315
1316 #: ../../../src/SDLInputState.cpp:586
1317 msgid "End"
1318 msgstr ""
1319
1320 #: ../../../src/SDLInputState.cpp:587
1645 msgstr "CapsLock"
1646
1647 #: ../../../src/SDLInputState.cpp:678
13211648 msgid "Escape"
1322 msgstr ""
1323
1324 #: ../../../src/SDLInputState.cpp:588
1325 msgid "Home"
1326 msgstr ""
1327
1328 #: ../../../src/SDLInputState.cpp:589
1649 msgstr "Escape"
1650
1651 #: ../../../src/SDLInputState.cpp:680
13291652 msgid "Insert"
1330 msgstr ""
1331
1332 #: ../../../src/SDLInputState.cpp:590
1653 msgstr "Insert"
1654
1655 #: ../../../src/SDLInputState.cpp:681
13331656 msgid "Left Alt"
1334 msgstr ""
1335
1336 #: ../../../src/SDLInputState.cpp:591
1657 msgstr "Venstre Alt"
1658
1659 #: ../../../src/SDLInputState.cpp:682
13371660 msgid "Left Ctrl"
1338 msgstr ""
1339
1340 #: ../../../src/SDLInputState.cpp:593
1661 msgstr "Venstre Ctrl"
1662
1663 #: ../../../src/SDLInputState.cpp:684
13411664 msgid "Left Shift"
1342 msgstr ""
1343
1344 #: ../../../src/SDLInputState.cpp:594
1665 msgstr "Venstre Shift"
1666
1667 #: ../../../src/SDLInputState.cpp:685
13451668 msgid "NumLock"
1346 msgstr ""
1347
1348 #: ../../../src/SDLInputState.cpp:595
1669 msgstr "NumLock"
1670
1671 #: ../../../src/SDLInputState.cpp:686
13491672 msgid "PageDown"
1350 msgstr ""
1351
1352 #: ../../../src/SDLInputState.cpp:596
1673 msgstr "PageDown"
1674
1675 #: ../../../src/SDLInputState.cpp:687
13531676 msgid "PageUp"
1354 msgstr ""
1355
1356 #: ../../../src/SDLInputState.cpp:597
1357 msgid "Pause"
1358 msgstr ""
1359
1360 #: ../../../src/SDLInputState.cpp:598
1677 msgstr "PageUp"
1678
1679 #: ../../../src/SDLInputState.cpp:689
13611680 msgid "PrintScreen"
1362 msgstr ""
1363
1364 #: ../../../src/SDLInputState.cpp:599
1681 msgstr "PrintScreen"
1682
1683 #: ../../../src/SDLInputState.cpp:690
13651684 msgid "Right Alt"
1366 msgstr ""
1367
1368 #: ../../../src/SDLInputState.cpp:600
1685 msgstr "Høyre Alt"
1686
1687 #: ../../../src/SDLInputState.cpp:691
13691688 msgid "Right Ctrl"
1370 msgstr ""
1371
1372 #: ../../../src/SDLInputState.cpp:601
1689 msgstr "Høyre Ctrl"
1690
1691 #: ../../../src/SDLInputState.cpp:692
13731692 msgid "Return"
1374 msgstr ""
1375
1376 #: ../../../src/SDLInputState.cpp:603
1693 msgstr "Return"
1694
1695 #: ../../../src/SDLInputState.cpp:694
13771696 msgid "Right Shift"
1378 msgstr ""
1379
1380 #: ../../../src/SDLInputState.cpp:604
1697 msgstr "Høyre Shift"
1698
1699 #: ../../../src/SDLInputState.cpp:695
13811700 msgid "ScrollLock"
1382 msgstr ""
1383
1384 #: ../../../src/SDLInputState.cpp:605
1701 msgstr "ScrollLock"
1702
1703 #: ../../../src/SDLInputState.cpp:696
13851704 msgid "Space"
1386 msgstr ""
1387
1388 #: ../../../src/SDLInputState.cpp:606
1389 msgid "Tab"
1390 msgstr ""
1391
1392 #: ../../../src/SDLInputState.cpp:620
1705 msgstr "Mellomrom"
1706
1707 #: ../../../src/SDLInputState.cpp:710
1708 #, c-format
1709 msgid "M%d"
1710 msgstr ""
1711
1712 #: ../../../src/SDLInputState.cpp:716
13931713 #, c-format
13941714 msgid "Mouse %d"
13951715 msgstr "Mus %d"
13961716
1397 #: ../../../src/SDLInputState.cpp:628
1717 #: ../../../src/SDLInputState.cpp:726
1718 #, c-format
1719 msgid "JX%d-"
1720 msgstr ""
1721
1722 #: ../../../src/SDLInputState.cpp:728
13981723 #, c-format
13991724 msgid "Axis %d -"
1400 msgstr ""
1401
1402 #: ../../../src/SDLInputState.cpp:630
1725 msgstr "Akse %d -"
1726
1727 #: ../../../src/SDLInputState.cpp:732
1728 #, c-format
1729 msgid "JX%d+"
1730 msgstr ""
1731
1732 #: ../../../src/SDLInputState.cpp:734
14031733 #, c-format
14041734 msgid "Axis %d +"
1405 msgstr ""
1406
1407 #: ../../../src/SDLInputState.cpp:633
1735 msgstr "Akse %d +"
1736
1737 #: ../../../src/SDLInputState.cpp:739
1738 #, c-format
1739 msgid "JB%d"
1740 msgstr ""
1741
1742 #: ../../../src/SDLInputState.cpp:741
14081743 #, c-format
14091744 msgid "Button %d"
14101745 msgstr "Knapp %d"
14111746
1412 #: ../../../src/SDLInputState.cpp:637
1413 msgid "(none)"
1414 msgstr "(ingen)"
1415
1416 #: ../../../src/SDLInputState.cpp:677
1747 #: ../../../src/SDLInputState.cpp:788
14171748 msgid "Touch control D-Pad"
1418 msgstr ""
1419
1420 #: ../../../src/SDLInputState.cpp:701
1749 msgstr "Berøringskontroller D-Pad"
1750
1751 #: ../../../src/SDLInputState.cpp:812
14211752 msgid "Touch control buttons"
1422 msgstr ""
1423
1424 #: ../../../src/SDLInputState.cpp:716
1753 msgstr "Berøringskontroller knapper"
1754
1755 #: ../../../src/SDLInputState.cpp:827
14251756 msgid "Tap"
1426 msgstr ""
1427
1428 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1429 #: ../../../src/SDLInputState.cpp:768
1757 msgstr "Kort trykk"
1758
1759 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1760 #, c-format
1761 msgid "Can not bind: %s"
1762 msgstr "Kan ikke binde: %s"
1763
1764 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1765 #: ../../../src/SDLInputState.cpp:901
14301766 #, c-format
14311767 msgid "'%s' is no longer bound to:"
1432 msgstr ""
1768 msgstr "'%s' er ikke lenger bundet til:"
14331769
14341770 #: ../../../src/Stats.cpp:38
14351771 msgid "Max HP"
1436 msgstr ""
1772 msgstr "Maks HP"
14371773
14381774 #: ../../../src/Stats.cpp:39
14391775 msgid "Total amount of HP."
1440 msgstr ""
1776 msgstr "Total mengde HP"
14411777
14421778 #: ../../../src/Stats.cpp:43
14431779 msgid "HP Regen"
1444 msgstr ""
1780 msgstr "HP Regen"
14451781
14461782 #: ../../../src/Stats.cpp:44
14471783 msgid "Ticks of HP regen per minute."
1448 msgstr ""
1784 msgstr "Tikkende HP-regenerering per minutt. "
14491785
14501786 #: ../../../src/Stats.cpp:48
14511787 msgid "Max MP"
1452 msgstr ""
1788 msgstr "Maks MP"
14531789
14541790 #: ../../../src/Stats.cpp:49
14551791 msgid "Total amount of MP."
1456 msgstr ""
1792 msgstr "Total mengde MP."
14571793
14581794 #: ../../../src/Stats.cpp:53
14591795 msgid "MP Regen"
1460 msgstr ""
1796 msgstr "MP regenerering"
14611797
14621798 #: ../../../src/Stats.cpp:54
14631799 msgid "Ticks of MP regen per minute."
1464 msgstr ""
1800 msgstr "Tikkende MP-regenerering per minutt. "
14651801
14661802 #: ../../../src/Stats.cpp:58
14671803 msgid "Accuracy"
14721808 "Accuracy rating. The enemy's Avoidance rating is subtracted from this value "
14731809 "to calculate your likeliness to land a direct hit."
14741810 msgstr ""
1811 "Treffsikkerhet rangering. Fiendens Unnvikelse rangering trekkes fra denne "
1812 "verdien for å kalkulere sannsynligheten for å lande et direkte treff."
14751813
14761814 #: ../../../src/Stats.cpp:63
14771815 msgid "Avoidance"
1478 msgstr ""
1816 msgstr "Unnvikelse"
14791817
14801818 #: ../../../src/Stats.cpp:64
14811819 msgid ""
14821820 "Avoidance rating. This value is subtracted from the enemy's Accuracy rating "
14831821 "to calculate their likeliness to land a direct hit."
14841822 msgstr ""
1823 "Unnvikelse rangering. Denne verdien trekkes fra fiendens treffsikkerhet "
1824 "rangering for å kalkulere sannsynligheten for å lande et direkte treff."
14851825
14861826 #: ../../../src/Stats.cpp:68
14871827 msgid "Absorb Min"
1488 msgstr ""
1828 msgstr "Absorbering Min"
14891829
14901830 #: ../../../src/Stats.cpp:69 ../../../src/Stats.cpp:74
14911831 msgid "Reduces the amount of damage taken."
1492 msgstr ""
1832 msgstr "Reduserer mengden mottatt skade."
14931833
14941834 #: ../../../src/Stats.cpp:73
14951835 msgid "Absorb Max"
1496 msgstr ""
1836 msgstr "Absorbering Maks"
14971837
14981838 #: ../../../src/Stats.cpp:78
14991839 msgid "Critical Hit Chance"
15011841
15021842 #: ../../../src/Stats.cpp:79
15031843 msgid "Chance for an attack to do extra damage."
1504 msgstr ""
1844 msgstr "Sjanse for at et angrep gjør ekstra skade."
15051845
15061846 #: ../../../src/Stats.cpp:83
15071847 msgid "Bonus XP"
1508 msgstr ""
1848 msgstr "Bonus EP"
15091849
15101850 #: ../../../src/Stats.cpp:84
15111851 msgid "Increases the XP gained per kill."
1512 msgstr ""
1852 msgstr "Øker EP-en mottatt per drap."
15131853
15141854 #: ../../../src/Stats.cpp:88
15151855 #, c-format
15191859 #: ../../../src/Stats.cpp:89
15201860 #, c-format
15211861 msgid "Increases the %s found per drop."
1522 msgstr ""
1862 msgstr "Øker %s funnet per slipp."
15231863
15241864 #: ../../../src/Stats.cpp:93
15251865 msgid "Item Find Chance"
1526 msgstr ""
1866 msgstr "Gjenstand Finnersjanse"
15271867
15281868 #: ../../../src/Stats.cpp:94
15291869 msgid "Increases the chance that an enemy will drop an item."
1530 msgstr ""
1870 msgstr "Øker sjansen for at en fiende vil slippe en gjenstand."
15311871
15321872 #: ../../../src/Stats.cpp:98
15331873 msgid "Stealth"
1534 msgstr ""
1874 msgstr "Snik"
15351875
15361876 #: ../../../src/Stats.cpp:99
15371877 msgid "Increases your ability to move undetected."
1538 msgstr ""
1878 msgstr "Øker evnen din til å bevege deg uoppdaget."
15391879
15401880 #: ../../../src/Stats.cpp:103
15411881 msgid "Poise"
1542 msgstr ""
1882 msgstr "Kroppsholdning"
15431883
15441884 #: ../../../src/Stats.cpp:104
15451885 msgid "Reduces your chance of stumbling when hit."
15471887
15481888 #: ../../../src/Stats.cpp:108
15491889 msgid "Missile Reflect Chance"
1550 msgstr ""
1890 msgstr "Sjanse for Prosjektiltrfleksjon"
15511891
15521892 #: ../../../src/Stats.cpp:109
15531893 msgid "Increases your chance of reflecting missiles back at enemies."
1554 msgstr ""
1894 msgstr "Øker sjansen din for å reflektere prosjektiler tilbake på fienden."
15551895
15561896 #: ../../../src/Stats.cpp:113
15571897 msgid "Damage Reflection"
1558 msgstr ""
1898 msgstr "Skade Refleksjon"
15591899
15601900 #: ../../../src/Stats.cpp:114
15611901 msgid "Deals a percentage of damage taken back to the attacker."
1562 msgstr ""
1902 msgstr "Reflekterer en prosentandel av mottatt skade tilbake på angriperen."
15631903
15641904 #: ../../../src/Stats.cpp:118
15651905 msgid "HP Steal"
1566 msgstr ""
1906 msgstr "HP Stjeling"
15671907
15681908 #: ../../../src/Stats.cpp:119
15691909 msgid "Percentage of HP stolen per hit."
1570 msgstr ""
1910 msgstr "Prosentandel av HP stjålet per slag."
15711911
15721912 #: ../../../src/Stats.cpp:123
15731913 msgid "MP Steal"
1574 msgstr ""
1914 msgstr "MP stjeling"
15751915
15761916 #: ../../../src/Stats.cpp:124
15771917 msgid "Percentage of MP stolen per hit."
1578 msgstr ""
1918 msgstr "Prosentandel av MP stjålet per slag."
15791919
15801920 #: ../../../src/Stats.cpp:128
15811921 msgid "Base HP"
1582 msgstr ""
1922 msgstr "Kjerne HP"
15831923
15841924 #: ../../../src/Stats.cpp:133
15851925 msgid "Base MP"
1586 msgstr ""
1926 msgstr "Kjerne MP"
15871927
15881928 #: ../../../src/Utils.cpp:346
15891929 msgid "k"
1590 msgstr ""
1591
1592 #: ../../../src/Utils.cpp:580
1930 msgstr "k"
1931
1932 #: ../../../src/Utils.cpp:616
15931933 #, c-format
15941934 msgid "%s second"
15951935 msgstr "%s sekund"
15961936
1597 #: ../../../src/Utils.cpp:583
1937 #: ../../../src/Utils.cpp:619
15981938 #, c-format
15991939 msgid "%s seconds"
16001940 msgstr "%s sekunder"
16011941
16021942 #: ../../../src/Version.cpp:139
16031943 msgid "or newer"
1604 msgstr ""
1944 msgstr "eller nyere"
16051945
16061946 #: ../../../src/Version.cpp:142
16071947 msgid "or older"
1608 msgstr ""
1948 msgstr "eller eldre"
1010 msgstr ""
1111 "Project-Id-Version: PACKAGE VERSION\n"
1212 "Report-Msgid-Bugs-To: \n"
13 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
13 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1414 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1515 "Last-Translator: Justin Jacobs <jajdorkster@gmail.com>, 2018\n"
1616 "Language-Team: Dutch (https://www.transifex.com/flareorg/teams/84925/nl/)\n"
2020 "Language: nl\n"
2121 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
2222
23 #: ../../../src/Avatar.cpp:367
23 #: ../../../src/Avatar.cpp:387
24 msgid "Your health is low!"
25 msgstr ""
26
27 #: ../../../src/Avatar.cpp:419
2428 #, c-format
2529 msgid "Congratulations, you have reached level %d!"
2630 msgstr "Gefeliciteerd, je hebt niveau %d bereikt!"
2731
28 #: ../../../src/Avatar.cpp:369
29 msgid "You may increase one attribute through the Character Menu."
30 msgstr "Je kunt één eigenschap in het karakter menu verhogen."
31
32 #: ../../../src/Avatar.cpp:583
32 #: ../../../src/Avatar.cpp:421
33 msgid "You may increase one or more attributes through the Character Menu."
34 msgstr ""
35
36 #: ../../../src/Avatar.cpp:425
37 msgid "You may unlock one or more abilities through the Powers Menu."
38 msgstr ""
39
40 #: ../../../src/Avatar.cpp:692
3341 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3442 msgstr ""
3543
36 #: ../../../src/Avatar.cpp:589
44 #: ../../../src/Avatar.cpp:698
3745 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
3846 msgstr ""
3947
40 #: ../../../src/Avatar.cpp:839
48 #: ../../../src/Avatar.cpp:949
4149 msgid "Transformation expired. You have been moved back to a safe place."
4250 msgstr ""
4351
4654 msgid "%d %s removed."
4755 msgstr ""
4856
49 #: ../../../src/CampaignManager.cpp:162
57 #: ../../../src/CampaignManager.cpp:165
58 #, c-format
59 msgid "%s x%d removed."
60 msgstr ""
61
62 #: ../../../src/CampaignManager.cpp:167
5063 #, c-format
5164 msgid "%s removed."
5265 msgstr ""
5366
54 #: ../../../src/CampaignManager.cpp:175
67 #: ../../../src/CampaignManager.cpp:180
5568 #, c-format
5669 msgid "You receive %s."
5770 msgstr "Je ontvangt %s."
5871
59 #: ../../../src/CampaignManager.cpp:177
72 #: ../../../src/CampaignManager.cpp:182
6073 #, c-format
6174 msgid "You receive %s x%d."
6275 msgstr "Je ontvangt %s x%d."
6376
64 #: ../../../src/CampaignManager.cpp:186
77 #: ../../../src/CampaignManager.cpp:191
6578 #, c-format
6679 msgid "You receive %d %s."
6780 msgstr ""
6881
69 #: ../../../src/CampaignManager.cpp:195
82 #: ../../../src/CampaignManager.cpp:200
7083 #, c-format
7184 msgid "You receive %d XP."
7285 msgstr "Je ontvangt %d EP."
7386
74 #: ../../../src/CampaignManager.cpp:201
87 #: ../../../src/CampaignManager.cpp:206
7588 msgid "HP restored."
7689 msgstr ""
7790
78 #: ../../../src/CampaignManager.cpp:205
91 #: ../../../src/CampaignManager.cpp:210
7992 msgid "MP restored."
8093 msgstr ""
8194
82 #: ../../../src/CampaignManager.cpp:210
95 #: ../../../src/CampaignManager.cpp:215
8396 msgid "HP and MP restored."
8497 msgstr ""
8598
86 #: ../../../src/CampaignManager.cpp:214
99 #: ../../../src/CampaignManager.cpp:219
87100 msgid "Negative effects removed."
88101 msgstr ""
89102
90 #: ../../../src/CampaignManager.cpp:220
103 #: ../../../src/CampaignManager.cpp:225
91104 msgid "HP and MP restored, negative effects removed"
92105 msgstr ""
93106
105118 "The default renderer that is often faster than the SDL software renderer."
106119 msgstr ""
107120
108 #: ../../../src/EngineSettings.cpp:561
121 #: ../../../src/EngineSettings.cpp:572
109122 msgid "Adventurer"
110123 msgstr "Avonturier"
111124
112 #: ../../../src/Entity.cpp:511
125 #: ../../../src/Entity.cpp:522
113126 msgid "miss"
114127 msgstr ""
115128
116 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
117 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
129 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
130 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
118131 #, c-format
119132 msgid "+%d HP"
120133 msgstr ""
121134
122 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
123 #: ../../../src/StatBlock.cpp:822
135 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
136 #: ../../../src/StatBlock.cpp:830
124137 #, c-format
125138 msgid "+%d MP"
126139 msgstr ""
127140
128 #: ../../../src/EventManager.cpp:738
141 #: ../../../src/EventManager.cpp:782
129142 msgid "Unknown destination"
130143 msgstr "Onbekende bestemming"
131144
132 #: ../../../src/GameStateConfigBase.cpp:89
133 #: ../../../src/GameStateConfigBase.cpp:110
145 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
146 msgid "Loading..."
147 msgstr ""
148
149 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
150 msgid "Delete Save"
151 msgstr "Spel verwijderen"
152
153 #: ../../../src/GameStateLoad.cpp:90
154 msgid "Delete this save?"
155 msgstr "Dit spel werkelijk verwijderen?"
156
157 #: ../../../src/GameStateLoad.cpp:92
158 msgid "Exit to Title"
159 msgstr "Terug naar het menu"
160
161 #: ../../../src/GameStateLoad.cpp:95
162 msgid "New Game"
163 msgstr "New Spel"
164
165 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
166 msgid "Choose a Slot"
167 msgstr "Kies een Slot"
168
169 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
170 msgid "Enable a story mod to continue"
171 msgstr ""
172
173 #: ../../../src/GameStateLoad.cpp:597
174 msgid "Load Game"
175 msgstr "Spel Laden"
176
177 #: ../../../src/GameStateLoad.cpp:706
178 msgid "Entering game world..."
179 msgstr "Betreden spelwereld..."
180
181 #: ../../../src/GameStateLoad.cpp:709
182 msgid "Loading saved game..."
183 msgstr "Laden opgeslagen spel..."
184
185 #: ../../../src/GameStateLoad.cpp:742
186 msgid "Invalid save"
187 msgstr ""
188
189 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
190 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
191 #: ../../../src/MenuPowers.cpp:1543
192 #, c-format
193 msgid "Level %d"
194 msgstr "Niveau %d"
195
196 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
197 #: ../../../src/MenuConfig.cpp:244
198 msgid "Cancel"
199 msgstr "Annuleren"
200
201 #: ../../../src/GameStateNew.cpp:68
202 msgid "Create"
203 msgstr ""
204
205 #: ../../../src/GameStateNew.cpp:76
206 msgid "Randomize"
207 msgstr ""
208
209 #: ../../../src/GameStateNew.cpp:92
210 msgid "Choose a Portrait"
211 msgstr "Kies een Portret"
212
213 #: ../../../src/GameStateNew.cpp:96
214 msgid "Choose a Name"
215 msgstr "Kies een Naam"
216
217 #: ../../../src/GameStateNew.cpp:100
218 msgid "Permadeath?"
219 msgstr "Permanente dood?"
220
221 #: ../../../src/GameStateNew.cpp:104
222 msgid "Choose a Class"
223 msgstr ""
224
225 #: ../../../src/GameStateTitle.cpp:107
226 msgid "Play Game"
227 msgstr "Spel Spelen"
228
229 #: ../../../src/GameStateTitle.cpp:110
230 msgid "Enable a core mod to continue"
231 msgstr ""
232
233 #: ../../../src/GameStateTitle.cpp:114
234 msgid "Configuration"
235 msgstr "Instellingen"
236
237 #: ../../../src/GameStateTitle.cpp:117
238 msgid "Credits"
239 msgstr ""
240
241 #: ../../../src/GameStateTitle.cpp:120
242 msgid "Exit Game"
243 msgstr "Spel Stoppen"
244
245 #: ../../../src/InputState.cpp:407
246 msgid "Accept"
247 msgstr ""
248
249 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
250 #: ../../../src/SDLInputState.cpp:698
251 msgid "Up"
252 msgstr ""
253
254 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
255 #: ../../../src/SDLInputState.cpp:676
256 msgid "Down"
257 msgstr ""
258
259 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
260 #: ../../../src/SDLInputState.cpp:683
261 msgid "Left"
262 msgstr ""
263
264 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
265 #: ../../../src/SDLInputState.cpp:693
266 msgid "Right"
267 msgstr ""
268
269 #: ../../../src/InputState.cpp:412
270 msgid "Bar1"
271 msgstr ""
272
273 #: ../../../src/InputState.cpp:413
274 msgid "Bar2"
275 msgstr ""
276
277 #: ../../../src/InputState.cpp:414
278 msgid "Bar3"
279 msgstr ""
280
281 #: ../../../src/InputState.cpp:415
282 msgid "Bar4"
283 msgstr ""
284
285 #: ../../../src/InputState.cpp:416
286 msgid "Bar5"
287 msgstr ""
288
289 #: ../../../src/InputState.cpp:417
290 msgid "Bar6"
291 msgstr ""
292
293 #: ../../../src/InputState.cpp:418
294 msgid "Bar7"
295 msgstr ""
296
297 #: ../../../src/InputState.cpp:419
298 msgid "Bar8"
299 msgstr ""
300
301 #: ../../../src/InputState.cpp:420
302 msgid "Bar9"
303 msgstr ""
304
305 #: ../../../src/InputState.cpp:421
306 msgid "Bar0"
307 msgstr ""
308
309 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
310 #: ../../../src/MenuCharacter.cpp:54
311 msgid "Character"
312 msgstr "Karakter"
313
314 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
315 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
316 msgid "Inventory"
317 msgstr "Voorraad"
318
319 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
320 #: ../../../src/MenuPowers.cpp:167
321 msgid "Powers"
322 msgstr "Vaardigheden"
323
324 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
325 #: ../../../src/MenuLog.cpp:72
326 msgid "Log"
327 msgstr "Log"
328
329 #: ../../../src/InputState.cpp:426
330 msgid "Main1"
331 msgstr ""
332
333 #: ../../../src/InputState.cpp:427
334 msgid "Main2"
335 msgstr ""
336
337 #: ../../../src/InputState.cpp:428
338 msgid "Ctrl"
339 msgstr ""
340
341 #: ../../../src/InputState.cpp:429
342 msgid "Shift"
343 msgstr ""
344
345 #: ../../../src/InputState.cpp:430
346 msgid "Alt"
347 msgstr ""
348
349 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
350 msgid "Delete"
351 msgstr ""
352
353 #: ../../../src/InputState.cpp:432
354 msgid "ActionBar Accept"
355 msgstr ""
356
357 #: ../../../src/InputState.cpp:433
358 msgid "ActionBar Left"
359 msgstr ""
360
361 #: ../../../src/InputState.cpp:434
362 msgid "ActionBar Right"
363 msgstr ""
364
365 #: ../../../src/InputState.cpp:435
366 msgid "ActionBar Use"
367 msgstr ""
368
369 #: ../../../src/InputState.cpp:436
370 msgid "Developer Menu"
371 msgstr ""
372
373 #: ../../../src/InputState.cpp:438
374 msgid "Left Mouse"
375 msgstr ""
376
377 #: ../../../src/InputState.cpp:439
378 msgid "Middle Mouse"
379 msgstr ""
380
381 #: ../../../src/InputState.cpp:440
382 msgid "Right Mouse"
383 msgstr ""
384
385 #: ../../../src/InputState.cpp:441
386 msgid "Wheel Up"
387 msgstr ""
388
389 #: ../../../src/InputState.cpp:442
390 msgid "Wheel Down"
391 msgstr ""
392
393 #: ../../../src/InputState.cpp:443
394 msgid "Mouse X1"
395 msgstr ""
396
397 #: ../../../src/InputState.cpp:444
398 msgid "Mouse X2"
399 msgstr ""
400
401 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
402 msgid "Unknown Item"
403 msgstr ""
404
405 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
406 #, c-format
407 msgid "%d%% Speed"
408 msgstr ""
409
410 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
411 #, c-format
412 msgid "%d%% Attack Speed"
413 msgstr ""
414
415 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
416 #: ../../../src/MenuPowers.cpp:832
417 #, c-format
418 msgid "Resistance (%s)"
419 msgstr ""
420
421 #: ../../../src/ItemManager.cpp:714
422 #, c-format
423 msgid "Requires %s"
424 msgstr ""
425
426 #: ../../../src/ItemManager.cpp:763
427 msgid "Quest Item"
428 msgstr "Opdracht gerelateerd artikel"
429
430 #: ../../../src/ItemManager.cpp:790
431 #, c-format
432 msgid "Quality: %s"
433 msgstr ""
434
435 #: ../../../src/ItemManager.cpp:815
436 #, c-format
437 msgid "Absorb: %d-%d"
438 msgstr "Absorbtie: %d-%d"
439
440 #: ../../../src/ItemManager.cpp:817
441 #, c-format
442 msgid "Absorb: %d"
443 msgstr "Absorbtie: %d"
444
445 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
446 #: ../../../src/MenuPowers.cpp:1133
447 #, c-format
448 msgid "Requires Level %d"
449 msgstr ""
450
451 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
452 #: ../../../src/MenuPowers.cpp:1124
453 #, c-format
454 msgid "Requires %s %d"
455 msgstr ""
456
457 #: ../../../src/ItemManager.cpp:879
458 #, c-format
459 msgid "Requires Class: %s"
460 msgstr ""
461
462 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
463 #, c-format
464 msgid "Buy Price: %d %s"
465 msgstr ""
466
467 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
468 #, c-format
469 msgid "Buy Price: %d %s each"
470 msgstr ""
471
472 #: ../../../src/ItemManager.cpp:916
473 #, c-format
474 msgid "Sell Price: %d %s"
475 msgstr ""
476
477 #: ../../../src/ItemManager.cpp:918
478 #, c-format
479 msgid "Sell Price: %d %s each"
480 msgstr ""
481
482 #: ../../../src/ItemManager.cpp:927
483 msgid "Set:"
484 msgstr ""
485
486 #: ../../../src/ItemManager.cpp:934
487 #, c-format
488 msgid "%d items:"
489 msgstr ""
490
491 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
492 #, c-format
493 msgid "Press [%s] to use"
494 msgstr ""
495
496 #: ../../../src/ItemManager.cpp:951
497 #, c-format
498 msgid "Press [%s] to read"
499 msgstr ""
500
501 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
502 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
503 #, c-format
504 msgid "Hotkey: %s"
505 msgstr ""
506
507 #: ../../../src/MenuActionBar.cpp:599
508 msgid "Not enough MP."
509 msgstr ""
510
511 #: ../../../src/MenuActiveEffects.cpp:124
512 #, c-format
513 msgid "x%d"
514 msgstr ""
515
516 #: ../../../src/MenuActiveEffects.cpp:219
517 msgid "Remaining:"
518 msgstr ""
519
520 #: ../../../src/MenuActiveEffects.cpp:225
521 #, c-format
522 msgid "x%d stacks"
523 msgstr ""
524
525 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
526 msgid "Name"
527 msgstr "Naam"
528
529 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
530 msgid "Level"
531 msgstr "Niveau"
532
533 #: ../../../src/MenuCharacter.cpp:310
534 #, c-format
535 msgid "%d unspent stat point"
536 msgstr ""
537
538 #: ../../../src/MenuCharacter.cpp:313
539 #, c-format
540 msgid "%d unspent stat points"
541 msgstr ""
542
543 #: ../../../src/MenuCharacter.cpp:355
544 #, c-format
545 msgid "Reduces the damage taken from \"%s\" elemental attacks."
546 msgstr ""
547
548 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
549 #, c-format
550 msgid "XP: %d"
551 msgstr "EP: %d"
552
553 #: ../../../src/MenuCharacter.cpp:367
554 #, c-format
555 msgid "Next: %d"
556 msgstr "Volgende: %d"
557
558 #: ../../../src/MenuCharacter.cpp:373
559 #, c-format
560 msgid "base (%d), bonus (%d)"
561 msgstr "basis (%d), bonus (%d)"
562
563 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
564 msgid "Related stats:"
565 msgstr ""
566
567 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
568 #, c-format
569 msgid "Each level grants %d."
570 msgstr ""
571
572 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
573 #, c-format
574 msgid "Each point of %s grants %d."
575 msgstr ""
576
577 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
578 msgid "Clear"
579 msgstr ""
580
581 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
582 msgid "Assign:"
583 msgstr ""
584
585 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
134586 msgid "Defaults"
135587 msgstr "Standaardwaarden"
136588
137 #: ../../../src/GameStateConfigBase.cpp:89
589 #: ../../../src/MenuConfig.cpp:123
138590 msgid "Reset ALL settings?"
139591 msgstr ""
140592
141 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
593 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
142594 msgid "OK"
143595 msgstr ""
144596
145 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
146 #: ../../../src/InputState.cpp:401
147 msgid "Cancel"
148 msgstr "Annuleren"
149
150 #: ../../../src/GameStateConfigBase.cpp:160
151 #: ../../../src/GameStateConfigDesktop.cpp:130
597 #: ../../../src/MenuConfig.cpp:246
598 msgid "Continue"
599 msgstr ""
600
601 #: ../../../src/MenuConfig.cpp:248
602 msgid "Save Game"
603 msgstr ""
604
605 #: ../../../src/MenuConfig.cpp:291
606 msgid "Default"
607 msgstr ""
608
609 #: ../../../src/MenuConfig.cpp:291
610 msgid ""
611 "Show all loot tooltips, except for those that would be obscured by the "
612 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
613 msgstr ""
614
615 #: ../../../src/MenuConfig.cpp:292
616 msgid "Show all"
617 msgstr ""
618
619 #: ../../../src/MenuConfig.cpp:292
620 msgid ""
621 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
622 msgstr ""
623
624 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
625 msgid "Hidden"
626 msgstr ""
627
628 #: ../../../src/MenuConfig.cpp:293
629 msgid ""
630 "Always hide loot tooltips, except for when a piece of loot is hovered with "
631 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
632 msgstr ""
633
634 #: ../../../src/MenuConfig.cpp:296
635 msgid "Visible"
636 msgstr ""
637
638 #: ../../../src/MenuConfig.cpp:297
639 msgid "Visible (2x zoom)"
640 msgstr ""
641
642 #: ../../../src/MenuConfig.cpp:301
643 msgid ""
644 "Controls the type of warning to be activated when the player is below the "
645 "low health threshold."
646 msgstr ""
647
648 #: ../../../src/MenuConfig.cpp:302
649 msgid "- Display a message"
650 msgstr ""
651
652 #: ../../../src/MenuConfig.cpp:303
653 msgid "- Play a sound"
654 msgstr ""
655
656 #: ../../../src/MenuConfig.cpp:304
657 msgid "- Change the cursor"
658 msgstr ""
659
660 #: ../../../src/MenuConfig.cpp:306
661 msgid "Disabled"
662 msgstr ""
663
664 #: ../../../src/MenuConfig.cpp:307
665 msgid "All"
666 msgstr ""
667
668 #: ../../../src/MenuConfig.cpp:308
669 msgid "Message & Cursor"
670 msgstr ""
671
672 #: ../../../src/MenuConfig.cpp:309
673 msgid "Message & Sound"
674 msgstr ""
675
676 #: ../../../src/MenuConfig.cpp:310
677 msgid "Sound & Cursor"
678 msgstr ""
679
680 #: ../../../src/MenuConfig.cpp:311
681 msgid "Message"
682 msgstr ""
683
684 #: ../../../src/MenuConfig.cpp:312
685 msgid "Cursor"
686 msgstr ""
687
688 #: ../../../src/MenuConfig.cpp:313
689 msgid "Sound"
690 msgstr ""
691
692 #: ../../../src/MenuConfig.cpp:319
693 msgid ""
694 "When the player's health drops below the given threshold, the low health "
695 "notifications are triggered if one or more of them is enabled."
696 msgstr ""
697
698 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
699 msgid "Exit"
700 msgstr "Stoppen"
701
702 #: ../../../src/MenuConfig.cpp:333
703 msgid "Video"
704 msgstr "Video"
705
706 #: ../../../src/MenuConfig.cpp:334
152707 msgid "Audio"
153708 msgstr "Audio"
154709
155 #: ../../../src/GameStateConfigBase.cpp:161
156 #: ../../../src/GameStateConfigDesktop.cpp:131
710 #: ../../../src/MenuConfig.cpp:335
157711 msgid "Interface"
158712 msgstr "Omgeving"
159713
160 #: ../../../src/GameStateConfigBase.cpp:162
161 #: ../../../src/GameStateConfigDesktop.cpp:134
714 #: ../../../src/MenuConfig.cpp:336
715 msgid "Input"
716 msgstr "Invoer"
717
718 #: ../../../src/MenuConfig.cpp:337
719 msgid "Keybindings"
720 msgstr "Sneltoetsen"
721
722 #: ../../../src/MenuConfig.cpp:338
162723 msgid "Mods"
163724 msgstr "Mods"
164725
165 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
726 #: ../../../src/MenuConfig.cpp:350
727 msgid "Paused"
728 msgstr ""
729
730 #: ../../../src/MenuConfig.cpp:353
731 msgid "Time Played"
732 msgstr ""
733
734 #: ../../../src/MenuConfig.cpp:359
735 msgid "Renderer"
736 msgstr ""
737
738 #: ../../../src/MenuConfig.cpp:360
739 msgid "Full Screen Mode"
740 msgstr "Volledig scherm"
741
742 #: ../../../src/MenuConfig.cpp:361
743 msgid "Hardware surfaces"
744 msgstr "Hardware oppervlakken"
745
746 #: ../../../src/MenuConfig.cpp:362
747 msgid "V-Sync"
748 msgstr ""
749
750 #: ../../../src/MenuConfig.cpp:363
751 msgid "Texture Filtering"
752 msgstr ""
753
754 #: ../../../src/MenuConfig.cpp:364
755 msgid "DPI scaling"
756 msgstr ""
757
758 #: ../../../src/MenuConfig.cpp:365
759 msgid "Parallax Layers"
760 msgstr ""
761
762 #: ../../../src/MenuConfig.cpp:366
763 msgid "Allow changing gamma"
764 msgstr ""
765
766 #: ../../../src/MenuConfig.cpp:367
767 msgid "Gamma"
768 msgstr "Gammacorrectie"
769
770 #: ../../../src/MenuConfig.cpp:369
771 msgid "Sound Volume"
772 msgstr "Geluidsvolume"
773
774 #: ../../../src/MenuConfig.cpp:370
166775 msgid "Music Volume"
167776 msgstr "Muziekvolume"
168777
169 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
170 msgid "Sound Volume"
171 msgstr "Geluidsvolume"
172
173 #: ../../../src/GameStateConfigBase.cpp:257
778 #: ../../../src/MenuConfig.cpp:372
174779 msgid "Language"
175780 msgstr "Taal"
176781
177 #: ../../../src/GameStateConfigBase.cpp:266
782 #: ../../../src/MenuConfig.cpp:373
178783 msgid "Show FPS"
179784 msgstr ""
180785
181 #: ../../../src/GameStateConfigBase.cpp:270
786 #: ../../../src/MenuConfig.cpp:374
787 msgid "Hardware mouse cursor"
788 msgstr ""
789
790 #: ../../../src/MenuConfig.cpp:375
182791 msgid "Colorblind Mode"
183792 msgstr ""
184793
185 #: ../../../src/GameStateConfigBase.cpp:274
186 msgid "Hardware mouse cursor"
187 msgstr ""
188
189 #: ../../../src/GameStateConfigBase.cpp:278
794 #: ../../../src/MenuConfig.cpp:376
190795 msgid "Developer Mode"
191796 msgstr ""
192797
193 #: ../../../src/GameStateConfigBase.cpp:282
798 #: ../../../src/MenuConfig.cpp:377
194799 msgid "Subtitles"
195800 msgstr ""
196801
197 #: ../../../src/GameStateConfigBase.cpp:286
198 msgid "Active Mods"
199 msgstr "Actieve Mods"
200
201 #: ../../../src/GameStateConfigBase.cpp:295
202 msgid "Available Mods"
203 msgstr ""
204
205 #: ../../../src/GameStateConfigBase.cpp:314
206 msgid "<< Disable"
207 msgstr ""
208
209 #: ../../../src/GameStateConfigBase.cpp:320
210 msgid "Enable >>"
211 msgstr ""
212
213 #: ../../../src/GameStateConfigBase.cpp:873
214 msgid "Version:"
215 msgstr ""
216
217 #: ../../../src/GameStateConfigBase.cpp:878
218 msgid "Game:"
219 msgstr ""
220
221 #: ../../../src/GameStateConfigBase.cpp:883
222 msgid "Engine version:"
223 msgstr ""
224
225 #: ../../../src/GameStateConfigBase.cpp:891
226 msgid "Requires mods:"
227 msgstr ""
228
229 #: ../../../src/GameStateConfigDesktop.cpp:83
230 #: ../../../src/GameStateConfigDesktop.cpp:751
231 msgid "Clear"
232 msgstr ""
233
234 #: ../../../src/GameStateConfigDesktop.cpp:83
235 #: ../../../src/GameStateConfigDesktop.cpp:749
236 msgid "Assign:"
237 msgstr ""
238
239 #: ../../../src/GameStateConfigDesktop.cpp:128
240 msgid "Video"
241 msgstr "Video"
242
243 #: ../../../src/GameStateConfigDesktop.cpp:132
244 msgid "Input"
245 msgstr "Invoer"
246
247 #: ../../../src/GameStateConfigDesktop.cpp:133
248 msgid "Keybindings"
249 msgstr "Sneltoetsen"
250
251 #: ../../../src/GameStateConfigDesktop.cpp:188
802 #: ../../../src/MenuConfig.cpp:378
803 msgid "Loot tooltip visibility"
804 msgstr ""
805
806 #: ../../../src/MenuConfig.cpp:379
807 msgid "Mini-map mode"
808 msgstr ""
809
810 #: ../../../src/MenuConfig.cpp:380
811 msgid "Always show stat bar labels"
812 msgstr ""
813
814 #: ../../../src/MenuConfig.cpp:381
815 msgid "Allow stat bar auto-hiding"
816 msgstr ""
817
818 #: ../../../src/MenuConfig.cpp:382
819 msgid "Show combat text"
820 msgstr "Laat strijdtekst zien"
821
822 #: ../../../src/MenuConfig.cpp:383
823 msgid "Automatically equip items"
824 msgstr ""
825
826 #: ../../../src/MenuConfig.cpp:384
827 msgid "Show hidden entity markers"
828 msgstr ""
829
830 #: ../../../src/MenuConfig.cpp:385
831 msgid "Low health notification"
832 msgstr ""
833
834 #: ../../../src/MenuConfig.cpp:386
835 msgid "Low health threshold"
836 msgstr ""
837
838 #: ../../../src/MenuConfig.cpp:389
839 msgid "Joystick"
840 msgstr "Joystick"
841
842 #: ../../../src/MenuConfig.cpp:390
843 msgid "Move hero using mouse"
844 msgstr "Muisbesturing"
845
846 #: ../../../src/MenuConfig.cpp:391
847 msgid "Mouse aim"
848 msgstr ""
849
850 #: ../../../src/MenuConfig.cpp:392
851 msgid "Do not use mouse"
852 msgstr ""
853
854 #: ../../../src/MenuConfig.cpp:393
855 msgid "Swap mouse movement button"
856 msgstr ""
857
858 #: ../../../src/MenuConfig.cpp:394
859 msgid "Attack with mouse movement"
860 msgstr ""
861
862 #: ../../../src/MenuConfig.cpp:395
863 msgid "Joystick Deadzone"
864 msgstr ""
865
866 #: ../../../src/MenuConfig.cpp:405
867 #, c-format
868 msgid "Primary binding: %s"
869 msgstr ""
870
871 #: ../../../src/MenuConfig.cpp:406
872 #, c-format
873 msgid "Alternate binding: %s"
874 msgstr ""
875
876 #: ../../../src/MenuConfig.cpp:407
877 #, c-format
878 msgid "Joystick binding: %s"
879 msgstr ""
880
881 #: ../../../src/MenuConfig.cpp:508
252882 msgid ""
253883 "Will try to store surfaces in video memory versus system memory. The effect "
254884 "this has on performance depends on the renderer."
255885 msgstr ""
256886
257 #: ../../../src/GameStateConfigDesktop.cpp:189
887 #: ../../../src/MenuConfig.cpp:509
258888 msgid ""
259889 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
260890 "windowed mode or input lag."
261891 msgstr ""
262892
263 #: ../../../src/GameStateConfigDesktop.cpp:190
893 #: ../../../src/MenuConfig.cpp:510
264894 msgid ""
265895 "When enabled, this uses the screen DPI in addition to the window dimensions "
266896 "to scale the rendering resolution. Otherwise, only the window dimensions are"
267897 " used."
268898 msgstr ""
269899
270 #: ../../../src/GameStateConfigDesktop.cpp:191
900 #: ../../../src/MenuConfig.cpp:511
271901 msgid ""
272902 "This enables parallax (non-tile) layers. Disabling this setting can improve "
273903 "performance in some cases."
274904 msgstr ""
275905
276 #: ../../../src/GameStateConfigDesktop.cpp:192
277 msgid "Experimental"
278 msgstr ""
279
280 #: ../../../src/GameStateConfigDesktop.cpp:193
281 msgid "For handheld devices"
282 msgstr ""
283
284 #: ../../../src/GameStateConfigDesktop.cpp:211
285 msgid "Renderer"
286 msgstr ""
287
288 #: ../../../src/GameStateConfigDesktop.cpp:227
289 msgid "Full Screen Mode"
290 msgstr "Volledig scherm"
291
292 #: ../../../src/GameStateConfigDesktop.cpp:231
293 msgid "Move hero using mouse"
294 msgstr "Muisbesturing"
295
296 #: ../../../src/GameStateConfigDesktop.cpp:235
297 msgid "Hardware surfaces"
298 msgstr "Hardware oppervlakken"
299
300 #: ../../../src/GameStateConfigDesktop.cpp:239
301 msgid "V-Sync"
302 msgstr ""
303
304 #: ../../../src/GameStateConfigDesktop.cpp:243
305 msgid "Texture Filtering"
306 msgstr ""
307
308 #: ../../../src/GameStateConfigDesktop.cpp:247
309 msgid "DPI scaling"
310 msgstr ""
311
312 #: ../../../src/GameStateConfigDesktop.cpp:251
313 msgid "Parallax Layers"
314 msgstr ""
315
316 #: ../../../src/GameStateConfigDesktop.cpp:255
317 msgid "Allow changing gamma"
318 msgstr ""
319
320 #: ../../../src/GameStateConfigDesktop.cpp:259
321 msgid "Gamma"
322 msgstr "Gammacorrectie"
323
324 #: ../../../src/GameStateConfigDesktop.cpp:263
325 msgid "Use joystick"
326 msgstr "Gebruik de Joystick"
327
328 #: ../../../src/GameStateConfigDesktop.cpp:267
329 msgid "Joystick"
330 msgstr "Joystick"
331
332 #: ../../../src/GameStateConfigDesktop.cpp:283
333 msgid "Mouse aim"
334 msgstr ""
335
336 #: ../../../src/GameStateConfigDesktop.cpp:287
337 msgid "Do not use mouse"
338 msgstr ""
339
340 #: ../../../src/GameStateConfigDesktop.cpp:291
341 msgid "Joystick Deadzone"
342 msgstr ""
343
344 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
345 msgid "Loading..."
346 msgstr ""
347
348 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
349 msgid "Delete Save"
350 msgstr "Spel verwijderen"
351
352 #: ../../../src/GameStateLoad.cpp:88
353 msgid "Delete this save?"
354 msgstr "Dit spel werkelijk verwijderen?"
355
356 #: ../../../src/GameStateLoad.cpp:90
357 msgid "Exit to Title"
358 msgstr "Terug naar het menu"
359
360 #: ../../../src/GameStateLoad.cpp:93
361 msgid "New Game"
362 msgstr "New Spel"
363
364 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
365 msgid "Choose a Slot"
366 msgstr "Kies een Slot"
367
368 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
369 msgid "Enable a story mod to continue"
370 msgstr ""
371
372 #: ../../../src/GameStateLoad.cpp:589
373 msgid "Load Game"
374 msgstr "Spel Laden"
375
376 #: ../../../src/GameStateLoad.cpp:695
377 msgid "Entering game world..."
378 msgstr "Betreden spelwereld..."
379
380 #: ../../../src/GameStateLoad.cpp:698
381 msgid "Loading saved game..."
382 msgstr "Laden opgeslagen spel..."
383
384 #: ../../../src/GameStateLoad.cpp:731
385 msgid "Invalid save"
386 msgstr ""
387
388 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
389 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
390 #: ../../../src/MenuPowers.cpp:1542
391 #, c-format
392 msgid "Level %d"
393 msgstr "Niveau %d"
394
395 #: ../../../src/GameStateNew.cpp:68
396 msgid "Create"
397 msgstr ""
398
399 #: ../../../src/GameStateNew.cpp:76
400 msgid "Randomize"
401 msgstr ""
402
403 #: ../../../src/GameStateNew.cpp:92
404 msgid "Choose a Portrait"
405 msgstr "Kies een Portret"
406
407 #: ../../../src/GameStateNew.cpp:96
408 msgid "Choose a Name"
409 msgstr "Kies een Naam"
410
411 #: ../../../src/GameStateNew.cpp:100
412 msgid "Permadeath?"
413 msgstr "Permanente dood?"
414
415 #: ../../../src/GameStateNew.cpp:104
416 msgid "Choose a Class"
417 msgstr ""
418
419 #: ../../../src/GameStateTitle.cpp:108
420 msgid "Play Game"
421 msgstr "Spel Spelen"
422
423 #: ../../../src/GameStateTitle.cpp:111
424 msgid "Enable a core mod to continue"
425 msgstr ""
426
427 #: ../../../src/GameStateTitle.cpp:115
428 msgid "Configuration"
429 msgstr "Instellingen"
430
431 #: ../../../src/GameStateTitle.cpp:118
432 msgid "Credits"
433 msgstr ""
434
435 #: ../../../src/GameStateTitle.cpp:121
436 msgid "Exit Game"
437 msgstr "Spel Stoppen"
438
439 #: ../../../src/InputState.cpp:402
440 msgid "Accept"
441 msgstr ""
442
443 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
444 msgid "Up"
445 msgstr ""
446
447 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
448 msgid "Down"
449 msgstr ""
450
451 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
452 msgid "Left"
453 msgstr ""
454
455 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
456 msgid "Right"
457 msgstr ""
458
459 #: ../../../src/InputState.cpp:407
460 msgid "Bar1"
461 msgstr ""
462
463 #: ../../../src/InputState.cpp:408
464 msgid "Bar2"
465 msgstr ""
466
467 #: ../../../src/InputState.cpp:409
468 msgid "Bar3"
469 msgstr ""
470
471 #: ../../../src/InputState.cpp:410
472 msgid "Bar4"
473 msgstr ""
474
475 #: ../../../src/InputState.cpp:411
476 msgid "Bar5"
477 msgstr ""
478
479 #: ../../../src/InputState.cpp:412
480 msgid "Bar6"
481 msgstr ""
482
483 #: ../../../src/InputState.cpp:413
484 msgid "Bar7"
485 msgstr ""
486
487 #: ../../../src/InputState.cpp:414
488 msgid "Bar8"
489 msgstr ""
490
491 #: ../../../src/InputState.cpp:415
492 msgid "Bar9"
493 msgstr ""
494
495 #: ../../../src/InputState.cpp:416
496 msgid "Bar0"
497 msgstr ""
498
499 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
500 #: ../../../src/MenuCharacter.cpp:54
501 msgid "Character"
502 msgstr "Karakter"
503
504 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
505 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
506 msgid "Inventory"
507 msgstr "Voorraad"
508
509 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
510 #: ../../../src/MenuPowers.cpp:168
511 msgid "Powers"
512 msgstr "Vaardigheden"
513
514 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
515 #: ../../../src/MenuLog.cpp:72
516 msgid "Log"
517 msgstr "Log"
518
519 #: ../../../src/InputState.cpp:421
520 msgid "Main1"
521 msgstr ""
522
523 #: ../../../src/InputState.cpp:422
524 msgid "Main2"
525 msgstr ""
526
527 #: ../../../src/InputState.cpp:423
528 msgid "Ctrl"
529 msgstr ""
530
531 #: ../../../src/InputState.cpp:424
532 msgid "Shift"
533 msgstr ""
534
535 #: ../../../src/InputState.cpp:425
536 msgid "Alt"
537 msgstr ""
538
539 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
540 msgid "Delete"
541 msgstr ""
542
543 #: ../../../src/InputState.cpp:427
544 msgid "ActionBar Accept"
545 msgstr ""
546
547 #: ../../../src/InputState.cpp:428
548 msgid "ActionBar Left"
549 msgstr ""
550
551 #: ../../../src/InputState.cpp:429
552 msgid "ActionBar Right"
553 msgstr ""
554
555 #: ../../../src/InputState.cpp:430
556 msgid "ActionBar Use"
557 msgstr ""
558
559 #: ../../../src/InputState.cpp:431
560 msgid "Developer Menu"
561 msgstr ""
562
563 #: ../../../src/InputState.cpp:433
564 msgid "Left Mouse"
565 msgstr ""
566
567 #: ../../../src/InputState.cpp:434
568 msgid "Middle Mouse"
569 msgstr ""
570
571 #: ../../../src/InputState.cpp:435
572 msgid "Right Mouse"
573 msgstr ""
574
575 #: ../../../src/InputState.cpp:436
576 msgid "Wheel Up"
577 msgstr ""
578
579 #: ../../../src/InputState.cpp:437
580 msgid "Wheel Down"
581 msgstr ""
582
583 #: ../../../src/InputState.cpp:438
584 msgid "Mouse X1"
585 msgstr ""
586
587 #: ../../../src/InputState.cpp:439
588 msgid "Mouse X2"
589 msgstr ""
590
591 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
592 msgid "Unknown Item"
593 msgstr ""
594
595 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
596 #, c-format
597 msgid "%d%% Speed"
598 msgstr ""
599
600 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
601 #, c-format
602 msgid "%d%% Attack Speed"
603 msgstr ""
604
605 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
606 #: ../../../src/MenuPowers.cpp:833
607 #, c-format
608 msgid "Resistance (%s)"
609 msgstr ""
610
611 #: ../../../src/ItemManager.cpp:684
612 #, c-format
613 msgid "Requires %s"
614 msgstr ""
615
616 #: ../../../src/ItemManager.cpp:733
617 msgid "Quest Item"
618 msgstr "Opdracht gerelateerd artikel"
619
620 #: ../../../src/ItemManager.cpp:760
621 #, c-format
622 msgid "Quality: %s"
623 msgstr ""
624
625 #: ../../../src/ItemManager.cpp:785
626 #, c-format
627 msgid "Absorb: %d-%d"
628 msgstr "Absorbtie: %d-%d"
629
630 #: ../../../src/ItemManager.cpp:787
631 #, c-format
632 msgid "Absorb: %d"
633 msgstr "Absorbtie: %d"
634
635 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
636 #: ../../../src/MenuPowers.cpp:1134
637 #, c-format
638 msgid "Requires Level %d"
639 msgstr ""
640
641 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
642 #: ../../../src/MenuPowers.cpp:1125
643 #, c-format
644 msgid "Requires %s %d"
645 msgstr ""
646
647 #: ../../../src/ItemManager.cpp:849
648 #, c-format
649 msgid "Requires Class: %s"
650 msgstr ""
651
652 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
653 #, c-format
654 msgid "Buy Price: %d %s"
655 msgstr ""
656
657 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
658 #, c-format
659 msgid "Buy Price: %d %s each"
660 msgstr ""
661
662 #: ../../../src/ItemManager.cpp:886
663 #, c-format
664 msgid "Sell Price: %d %s"
665 msgstr ""
666
667 #: ../../../src/ItemManager.cpp:888
668 #, c-format
669 msgid "Sell Price: %d %s each"
670 msgstr ""
671
672 #: ../../../src/ItemManager.cpp:897
673 msgid "Set:"
674 msgstr ""
675
676 #: ../../../src/ItemManager.cpp:904
677 #, c-format
678 msgid "%d items:"
679 msgstr ""
680
681 #: ../../../src/ItemManager.cpp:917
682 #, c-format
683 msgid "Press [%s] to use"
684 msgstr ""
685
686 #: ../../../src/ItemManager.cpp:920
687 #, c-format
688 msgid "Press [%s] to read"
689 msgstr ""
690
691 #: ../../../src/MenuActionBar.cpp:87
692 msgid "Loot tooltip visibility"
693 msgstr ""
694
695 #: ../../../src/MenuActionBar.cpp:88
696 msgid "Mini-map mode"
697 msgstr ""
698
699 #: ../../../src/MenuActionBar.cpp:89
700 msgid "Always show stat bar labels"
701 msgstr ""
702
703 #: ../../../src/MenuActionBar.cpp:90
704 msgid "Show combat text"
705 msgstr "Laat strijdtekst zien"
706
707 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
708 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
709 #, c-format
710 msgid "Hotkey: %s"
711 msgstr ""
712
713 #: ../../../src/MenuActionBar.cpp:474
714 #, c-format
715 msgid "Default. Temporarily show all loot tooltips with '%s'."
716 msgstr ""
717
718 #: ../../../src/MenuActionBar.cpp:476
719 #, c-format
720 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
721 msgstr ""
722
723 #: ../../../src/MenuActionBar.cpp:478
724 #, c-format
725 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
726 msgstr ""
727
728 #: ../../../src/MenuActionBar.cpp:482
729 msgid "Visible"
730 msgstr ""
731
732 #: ../../../src/MenuActionBar.cpp:484
733 msgid "Visible (2x zoom)"
734 msgstr ""
735
736 #: ../../../src/MenuActionBar.cpp:486
737 msgid "Hidden"
738 msgstr ""
739
740 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
741 msgid "Enabled"
742 msgstr ""
743
744 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
745 msgid "Disabled"
746 msgstr ""
747
748 #: ../../../src/MenuActionBar.cpp:657
749 msgid "Not enough MP."
750 msgstr ""
751
752 #: ../../../src/MenuActiveEffects.cpp:124
753 #, c-format
754 msgid "x%d"
755 msgstr ""
756
757 #: ../../../src/MenuActiveEffects.cpp:219
758 msgid "Remaining:"
759 msgstr ""
760
761 #: ../../../src/MenuActiveEffects.cpp:225
762 #, c-format
763 msgid "x%d stacks"
764 msgstr ""
765
766 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
767 msgid "Name"
768 msgstr "Naam"
769
770 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
771 msgid "Level"
772 msgstr "Niveau"
773
774 #: ../../../src/MenuCharacter.cpp:310
775 #, c-format
776 msgid "%d unspent stat point"
777 msgstr ""
778
779 #: ../../../src/MenuCharacter.cpp:313
780 #, c-format
781 msgid "%d unspent stat points"
782 msgstr ""
783
784 #: ../../../src/MenuCharacter.cpp:355
785 #, c-format
786 msgid "Reduces the damage taken from \"%s\" elemental attacks."
787 msgstr ""
788
789 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
790 #, c-format
791 msgid "XP: %d"
792 msgstr "EP: %d"
793
794 #: ../../../src/MenuCharacter.cpp:367
795 #, c-format
796 msgid "Next: %d"
797 msgstr "Volgende: %d"
798
799 #: ../../../src/MenuCharacter.cpp:373
800 #, c-format
801 msgid "base (%d), bonus (%d)"
802 msgstr "basis (%d), bonus (%d)"
803
804 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
805 msgid "Related stats:"
806 msgstr ""
807
808 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
809 #, c-format
810 msgid "Each level grants %d."
811 msgstr ""
812
813 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
814 #, c-format
815 msgid "Each point of %s grants %d."
906 #: ../../../src/MenuConfig.cpp:512
907 msgid ""
908 "Enables the below setting that controls the screen gamma level. The behavior"
909 " of the gamma setting can vary between platforms."
910 msgstr ""
911
912 #: ../../../src/MenuConfig.cpp:513
913 msgid ""
914 "Provides additional text for information that is primarily conveyed through "
915 "color."
916 msgstr ""
917
918 #: ../../../src/MenuConfig.cpp:514
919 msgid ""
920 "Some mods will automatically hide the stat bars when they are inactive. "
921 "Disabling this option will keep them displayed at all times."
922 msgstr ""
923
924 #: ../../../src/MenuConfig.cpp:515
925 msgid ""
926 "When enabled, empty equipment slots will be filled with applicable items "
927 "when they are obtained."
928 msgstr ""
929
930 #: ../../../src/MenuConfig.cpp:516
931 msgid ""
932 "Shows a marker above enemies, allies, and the player when they are obscured "
933 "by tall objects."
934 msgstr ""
935
936 #: ../../../src/MenuConfig.cpp:517
937 msgid ""
938 "This allows the game to be controlled entirely with the keyboard (or "
939 "joystick)."
940 msgstr ""
941
942 #: ../../../src/MenuConfig.cpp:518
943 msgid ""
944 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
945 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
946 "instead of 'Main1'."
947 msgstr ""
948
949 #: ../../../src/MenuConfig.cpp:519
950 msgid ""
951 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
952 "assigned to the movement button can be used by targeting an enemy. If this "
953 "setting is disabled, it is required to use 'Shift' to access the Power "
954 "assigned to the movement button."
955 msgstr ""
956
957 #: ../../../src/MenuConfig.cpp:520
958 msgid ""
959 "The player's attacks will be aimed in the direction of the mouse cursor when"
960 " this is enabled."
961 msgstr ""
962
963 #: ../../../src/MenuConfig.cpp:571
964 msgid "Active Mods"
965 msgstr "Actieve Mods"
966
967 #: ../../../src/MenuConfig.cpp:580
968 msgid "Available Mods"
969 msgstr ""
970
971 #: ../../../src/MenuConfig.cpp:599
972 msgid "<< Disable"
973 msgstr ""
974
975 #: ../../../src/MenuConfig.cpp:605
976 msgid "Enable >>"
977 msgstr ""
978
979 #: ../../../src/MenuConfig.cpp:1436
980 msgid "Version:"
981 msgstr ""
982
983 #: ../../../src/MenuConfig.cpp:1441
984 msgid "Game:"
985 msgstr ""
986
987 #: ../../../src/MenuConfig.cpp:1446
988 msgid "Engine version:"
989 msgstr ""
990
991 #: ../../../src/MenuConfig.cpp:1454
992 msgid "Requires mods:"
993 msgstr ""
994
995 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
996 msgid "(none)"
997 msgstr ""
998
999 #: ../../../src/MenuConfig.cpp:1579
1000 msgid "Save & Exit"
8161001 msgstr ""
8171002
8181003 #: ../../../src/MenuDevConsole.cpp:63
9681153 msgid "HINT: Type help"
9691154 msgstr ""
9701155
971 #: ../../../src/MenuEnemy.cpp:138
1156 #: ../../../src/MenuEnemy.cpp:162
9721157 #, c-format
9731158 msgid "%s level %d"
9741159 msgstr "%s niveau %d"
9751160
976 #: ../../../src/MenuEnemy.cpp:162
1161 #: ../../../src/MenuEnemy.cpp:186
9771162 msgid "Dead"
9781163 msgstr "Dood"
9791164
980 #: ../../../src/MenuEnemy.cpp:164
1165 #: ../../../src/MenuEnemy.cpp:188
9811166 msgid "Destroyed"
9821167 msgstr ""
9831168
984 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
985 msgid "Paused"
986 msgstr ""
987
988 #: ../../../src/MenuExit.cpp:91
989 msgid "Save & Exit"
990 msgstr ""
991
992 #: ../../../src/MenuExit.cpp:92
993 msgid "Exit"
994 msgstr "Stoppen"
995
996 #: ../../../src/MenuExit.cpp:96
997 msgid "Continue"
998 msgstr ""
999
1000 #: ../../../src/MenuInventory.cpp:73
1001 msgid "Automatically equip items"
1002 msgstr ""
1003
1004 #: ../../../src/MenuInventory.cpp:188
1169 #: ../../../src/MenuInventory.cpp:177
10051170 #, c-format
10061171 msgid "Lost %d%% of %s."
10071172 msgstr ""
10081173
1009 #: ../../../src/MenuInventory.cpp:195
1174 #: ../../../src/MenuInventory.cpp:184
10101175 #, c-format
10111176 msgid "Lost %d%% of total XP."
10121177 msgstr ""
10131178
1014 #: ../../../src/MenuInventory.cpp:200
1179 #: ../../../src/MenuInventory.cpp:189
10151180 #, c-format
10161181 msgid "Lost %d%% of current level XP."
10171182 msgstr ""
10181183
1019 #: ../../../src/MenuInventory.cpp:226
1184 #: ../../../src/MenuInventory.cpp:215
10201185 #, c-format
10211186 msgid "Lost %s."
10221187 msgstr ""
10231188
1024 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1189 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10251190 #, c-format
10261191 msgid "%d %s"
10271192 msgstr ""
10281193
1029 #: ../../../src/MenuInventory.cpp:317
1194 #: ../../../src/MenuInventory.cpp:300
10301195 msgid "Pick up item(s):"
10311196 msgstr ""
10321197
1033 #: ../../../src/MenuInventory.cpp:318
1198 #: ../../../src/MenuInventory.cpp:301
10341199 msgid "Use or equip item:"
10351200 msgstr ""
10361201
1037 #: ../../../src/MenuInventory.cpp:319
1202 #: ../../../src/MenuInventory.cpp:302
10381203 #, c-format
10391204 msgid "%s modifiers"
10401205 msgstr ""
10411206
1042 #: ../../../src/MenuInventory.cpp:320
1207 #: ../../../src/MenuInventory.cpp:303
10431208 msgid "Select a quantity of item:"
10441209 msgstr ""
10451210
1046 #: ../../../src/MenuInventory.cpp:323
1211 #: ../../../src/MenuInventory.cpp:306
10471212 msgid "Stash item stack:"
10481213 msgstr ""
10491214
1050 #: ../../../src/MenuInventory.cpp:325
1215 #: ../../../src/MenuInventory.cpp:308
10511216 msgid "Sell item stack:"
10521217 msgstr ""
10531218
1054 #: ../../../src/MenuInventory.cpp:592
1219 #: ../../../src/MenuInventory.cpp:574
10551220 msgid "You don't have enough of the required item."
10561221 msgstr ""
10571222
1058 #: ../../../src/MenuInventory.cpp:599
1223 #: ../../../src/MenuInventory.cpp:586
10591224 msgid "You can't use this item right now."
10601225 msgstr ""
10611226
1062 #: ../../../src/MenuInventory.cpp:611
1227 #: ../../../src/MenuInventory.cpp:598
10631228 msgid "This item can only be used from the action bar."
10641229 msgstr "Dit artikel kan alleen vanaf de actiebalk gebruikt worden."
10651230
1066 #: ../../../src/MenuInventory.cpp:729
1231 #: ../../../src/MenuInventory.cpp:716
10671232 msgid "Inventory is full."
10681233 msgstr "Geen ruimte meer."
10691234
1070 #: ../../../src/MenuInventory.cpp:849
1235 #: ../../../src/MenuInventory.cpp:841
10711236 #, c-format
10721237 msgid "Not enough %s."
10731238 msgstr ""
10741239
1075 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1240 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
10761241 msgid "This item can not be sold."
10771242 msgstr ""
10781243
10841249 msgid "Quests"
10851250 msgstr "Opdrachten"
10861251
1087 #: ../../../src/MenuManager.cpp:286
1252 #: ../../../src/MenuManager.cpp:296
10881253 #, c-format
10891254 msgid "XP: %d/%d"
10901255 msgstr "EP: %d/%d"
10911256
1092 #: ../../../src/MenuManager.cpp:827
1257 #: ../../../src/MenuManager.cpp:854
10931258 msgid "This item can not be dropped."
10941259 msgstr ""
10951260
10971262 msgid "Enter amount:"
10981263 msgstr ""
10991264
1100 #: ../../../src/MenuPowers.cpp:787
1265 #: ../../../src/MenuPowers.cpp:786
11011266 msgid "Passive"
11021267 msgstr ""
11031268
1104 #: ../../../src/MenuPowers.cpp:792
1269 #: ../../../src/MenuPowers.cpp:791
11051270 #, c-format
11061271 msgid "Costs %d MP"
11071272 msgstr "Kost %d MP"
11081273
1109 #: ../../../src/MenuPowers.cpp:796
1274 #: ../../../src/MenuPowers.cpp:795
11101275 #, c-format
11111276 msgid "Costs %d HP"
11121277 msgstr ""
11131278
1114 #: ../../../src/MenuPowers.cpp:801
1279 #: ../../../src/MenuPowers.cpp:800
11151280 msgid "Cooldown:"
11161281 msgstr ""
11171282
1118 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1283 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11191284 msgid "Damage per second"
11201285 msgstr ""
11211286
1122 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1287 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11231288 msgid "HP per second"
11241289 msgstr ""
11251290
1126 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1291 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11271292 msgid "MP per second"
11281293 msgstr ""
11291294
1130 #: ../../../src/MenuPowers.cpp:885
1295 #: ../../../src/MenuPowers.cpp:884
11311296 msgid "Immobilize"
11321297 msgstr ""
11331298
1134 #: ../../../src/MenuPowers.cpp:893
1299 #: ../../../src/MenuPowers.cpp:892
11351300 msgid "Immunity"
11361301 msgstr ""
11371302
1138 #: ../../../src/MenuPowers.cpp:896
1303 #: ../../../src/MenuPowers.cpp:895
11391304 msgid "Immunity to damage over time"
11401305 msgstr ""
11411306
1142 #: ../../../src/MenuPowers.cpp:899
1307 #: ../../../src/MenuPowers.cpp:898
11431308 msgid "Immunity to slow"
11441309 msgstr ""
11451310
1146 #: ../../../src/MenuPowers.cpp:902
1311 #: ../../../src/MenuPowers.cpp:901
11471312 msgid "Immunity to stun"
11481313 msgstr ""
11491314
1150 #: ../../../src/MenuPowers.cpp:905
1315 #: ../../../src/MenuPowers.cpp:904
11511316 msgid "Immunity to HP steal"
11521317 msgstr ""
11531318
1154 #: ../../../src/MenuPowers.cpp:908
1319 #: ../../../src/MenuPowers.cpp:907
11551320 msgid "Immunity to MP steal"
11561321 msgstr ""
11571322
1158 #: ../../../src/MenuPowers.cpp:911
1323 #: ../../../src/MenuPowers.cpp:910
11591324 msgid "Immunity to knockback"
11601325 msgstr ""
11611326
1162 #: ../../../src/MenuPowers.cpp:914
1327 #: ../../../src/MenuPowers.cpp:913
11631328 msgid "Immunity to damage reflection"
11641329 msgstr ""
11651330
1166 #: ../../../src/MenuPowers.cpp:917
1331 #: ../../../src/MenuPowers.cpp:916
11671332 msgid "Stun"
11681333 msgstr ""
11691334
1170 #: ../../../src/MenuPowers.cpp:920
1335 #: ../../../src/MenuPowers.cpp:919
11711336 msgid "Automatic revive on death"
11721337 msgstr ""
11731338
1174 #: ../../../src/MenuPowers.cpp:923
1339 #: ../../../src/MenuPowers.cpp:922
11751340 msgid "Convert"
11761341 msgstr ""
11771342
1178 #: ../../../src/MenuPowers.cpp:926
1343 #: ../../../src/MenuPowers.cpp:925
11791344 msgid "Fear"
11801345 msgstr ""
11811346
1182 #: ../../../src/MenuPowers.cpp:929
1347 #: ../../../src/MenuPowers.cpp:928
11831348 msgid "Lifespan"
11841349 msgstr ""
11851350
1186 #: ../../../src/MenuPowers.cpp:953
1351 #: ../../../src/MenuPowers.cpp:952
11871352 msgid "Magical Shield"
11881353 msgstr ""
11891354
1190 #: ../../../src/MenuPowers.cpp:982
1355 #: ../../../src/MenuPowers.cpp:981
11911356 msgid "Healing"
11921357 msgstr ""
11931358
1194 #: ../../../src/MenuPowers.cpp:985
1359 #: ../../../src/MenuPowers.cpp:984
11951360 msgid "Knockback"
11961361 msgstr ""
11971362
1198 #: ../../../src/MenuPowers.cpp:1010
1363 #: ../../../src/MenuPowers.cpp:1009
11991364 #, c-format
12001365 msgid "%d%% chance"
12011366 msgstr ""
12021367
1203 #: ../../../src/MenuPowers.cpp:1062
1368 #: ../../../src/MenuPowers.cpp:1061
12041369 msgid "Base Accuracy"
12051370 msgstr ""
12061371
1207 #: ../../../src/MenuPowers.cpp:1082
1372 #: ../../../src/MenuPowers.cpp:1081
12081373 msgid "Base Critical Chance"
12091374 msgstr ""
12101375
1211 #: ../../../src/MenuPowers.cpp:1090
1376 #: ../../../src/MenuPowers.cpp:1089
12121377 msgid "Ignores Absorbtion"
12131378 msgstr ""
12141379
1215 #: ../../../src/MenuPowers.cpp:1095
1380 #: ../../../src/MenuPowers.cpp:1094
12161381 msgid "Ignores Avoidance"
12171382 msgstr ""
12181383
1219 #: ../../../src/MenuPowers.cpp:1100
1384 #: ../../../src/MenuPowers.cpp:1099
12201385 #, c-format
12211386 msgid "%d%% Chance to crit slowed targets"
12221387 msgstr ""
12231388
1224 #: ../../../src/MenuPowers.cpp:1105
1389 #: ../../../src/MenuPowers.cpp:1104
12251390 #, c-format
12261391 msgid "Elemental Damage (%s)"
12271392 msgstr ""
12281393
1229 #: ../../../src/MenuPowers.cpp:1114
1394 #: ../../../src/MenuPowers.cpp:1113
12301395 #, c-format
12311396 msgid "Requires a %s"
12321397 msgstr ""
12331398
1234 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1399 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12351400 #, c-format
12361401 msgid "Requires Power: %s"
12371402 msgstr ""
12381403
1239 #: ../../../src/MenuPowers.cpp:1163
1404 #: ../../../src/MenuPowers.cpp:1162
12401405 msgid "Click to Unlock (uses 1 Skill Point)"
12411406 msgstr ""
12421407
1243 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1408 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12441409 msgid "Requires 1 Skill Point"
12451410 msgstr ""
12461411
1247 #: ../../../src/MenuPowers.cpp:1355
1412 #: ../../../src/MenuPowers.cpp:1354
12481413 #, c-format
12491414 msgid "%d unspent skill point"
12501415 msgstr ""
12511416
1252 #: ../../../src/MenuPowers.cpp:1358
1417 #: ../../../src/MenuPowers.cpp:1357
12531418 #, c-format
12541419 msgid "%d unspent skill points"
12551420 msgstr ""
12561421
1257 #: ../../../src/MenuPowers.cpp:1388
1422 #: ../../../src/MenuPowers.cpp:1387
12581423 msgid "Next Level:"
12591424 msgstr ""
12601425
1261 #: ../../../src/MenuStash.cpp:96
1262 msgid "Shared Stash"
1263 msgstr ""
1264
1265 #: ../../../src/MenuStash.cpp:209
1426 #: ../../../src/MenuStash.cpp:53
1427 msgid "Private"
1428 msgstr ""
1429
1430 #: ../../../src/MenuStash.cpp:55
1431 msgid "Shared"
1432 msgstr ""
1433
1434 #: ../../../src/MenuStash.cpp:103
1435 msgid "Stash"
1436 msgstr ""
1437
1438 #: ../../../src/MenuStash.cpp:258
12661439 msgid "Can not store quest items in the stash."
12671440 msgstr ""
12681441
1269 #: ../../../src/MenuStash.cpp:219
1442 #: ../../../src/MenuStash.cpp:263
1443 msgid "This item can not be stored in the stash."
1444 msgstr ""
1445
1446 #: ../../../src/MenuStash.cpp:268
1447 msgid "This item can not be stored in the private stash."
1448 msgstr ""
1449
1450 #: ../../../src/MenuStash.cpp:273
1451 msgid "This item can not be stored in the shared stash."
1452 msgstr ""
1453
1454 #: ../../../src/MenuStash.cpp:283
12701455 msgid "Stash is full."
12711456 msgstr ""
12721457
1273 #: ../../../src/MenuTalker.cpp:454
1458 #: ../../../src/MenuStash.cpp:340
1459 #, c-format
1460 msgid "Can not store item in stash: %s"
1461 msgstr ""
1462
1463 #: ../../../src/MenuTalker.cpp:447
1464 #, c-format
1465 msgid "<dialog node %d>"
1466 msgstr ""
1467
1468 #: ../../../src/MenuTalker.cpp:455
12741469 msgid "Trade"
12751470 msgstr "Handelen"
12761471
12781473 msgid "Buyback"
12791474 msgstr ""
12801475
1281 #: ../../../src/MenuVendor.cpp:279
1476 #: ../../../src/MenuVendor.cpp:281
12821477 msgid "Vendor"
12831478 msgstr "Verkoper"
12841479
1285 #: ../../../src/PowerManager.cpp:1136
1480 #: ../../../src/PowerManager.cpp:1170
12861481 #, c-format
12871482 msgid "+%d Shield"
12881483 msgstr ""
12891484
1290 #: ../../../src/PowerManager.cpp:1392
1485 #: ../../../src/PowerManager.cpp:1426
12911486 msgid "You are already transformed, untransform first."
12921487 msgstr ""
12931488
1294 #: ../../../src/PowerManager.cpp:1404
1489 #: ../../../src/PowerManager.cpp:1438
12951490 msgid "Could not untransform at this position."
12961491 msgstr ""
12971492
12991494 msgid "Completed Quests"
13001495 msgstr ""
13011496
1302 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1497 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13031498 msgid "Game saved."
13041499 msgstr ""
13051500
1306 #: ../../../src/SDLInputState.cpp:582
1501 #: ../../../src/SDLInputState.cpp:643
1502 msgid "BkSp"
1503 msgstr ""
1504
1505 #: ../../../src/SDLInputState.cpp:644
1506 msgid "Caps"
1507 msgstr ""
1508
1509 #: ../../../src/SDLInputState.cpp:645
1510 msgid "Del"
1511 msgstr ""
1512
1513 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1514 msgid "End"
1515 msgstr ""
1516
1517 #: ../../../src/SDLInputState.cpp:648
1518 msgid "Esc"
1519 msgstr ""
1520
1521 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1522 msgid "Home"
1523 msgstr ""
1524
1525 #: ../../../src/SDLInputState.cpp:650
1526 msgid "Ins"
1527 msgstr ""
1528
1529 #: ../../../src/SDLInputState.cpp:651
1530 msgid "LAlt"
1531 msgstr ""
1532
1533 #: ../../../src/SDLInputState.cpp:652
1534 msgid "LCtrl"
1535 msgstr ""
1536
1537 #: ../../../src/SDLInputState.cpp:654
1538 msgid "LShft"
1539 msgstr ""
1540
1541 #: ../../../src/SDLInputState.cpp:655
1542 msgid "Num"
1543 msgstr ""
1544
1545 #: ../../../src/SDLInputState.cpp:656
1546 msgid "PgDn"
1547 msgstr ""
1548
1549 #: ../../../src/SDLInputState.cpp:657
1550 msgid "PgUp"
1551 msgstr ""
1552
1553 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1554 msgid "Pause"
1555 msgstr ""
1556
1557 #: ../../../src/SDLInputState.cpp:659
1558 msgid "Print"
1559 msgstr ""
1560
1561 #: ../../../src/SDLInputState.cpp:660
1562 msgid "RAlt"
1563 msgstr ""
1564
1565 #: ../../../src/SDLInputState.cpp:661
1566 msgid "RCtrl"
1567 msgstr ""
1568
1569 #: ../../../src/SDLInputState.cpp:662
1570 msgid "Ret"
1571 msgstr ""
1572
1573 #: ../../../src/SDLInputState.cpp:664
1574 msgid "RShft"
1575 msgstr ""
1576
1577 #: ../../../src/SDLInputState.cpp:665
1578 msgid "SLock"
1579 msgstr ""
1580
1581 #: ../../../src/SDLInputState.cpp:666
1582 msgid "Spc"
1583 msgstr ""
1584
1585 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1586 msgid "Tab"
1587 msgstr ""
1588
1589 #: ../../../src/SDLInputState.cpp:673
13071590 msgid "Backspace"
13081591 msgstr ""
13091592
1310 #: ../../../src/SDLInputState.cpp:583
1593 #: ../../../src/SDLInputState.cpp:674
13111594 msgid "CapsLock"
13121595 msgstr ""
13131596
1314 #: ../../../src/SDLInputState.cpp:586
1315 msgid "End"
1316 msgstr ""
1317
1318 #: ../../../src/SDLInputState.cpp:587
1597 #: ../../../src/SDLInputState.cpp:678
13191598 msgid "Escape"
13201599 msgstr ""
13211600
1322 #: ../../../src/SDLInputState.cpp:588
1323 msgid "Home"
1324 msgstr ""
1325
1326 #: ../../../src/SDLInputState.cpp:589
1601 #: ../../../src/SDLInputState.cpp:680
13271602 msgid "Insert"
13281603 msgstr ""
13291604
1330 #: ../../../src/SDLInputState.cpp:590
1605 #: ../../../src/SDLInputState.cpp:681
13311606 msgid "Left Alt"
13321607 msgstr ""
13331608
1334 #: ../../../src/SDLInputState.cpp:591
1609 #: ../../../src/SDLInputState.cpp:682
13351610 msgid "Left Ctrl"
13361611 msgstr ""
13371612
1338 #: ../../../src/SDLInputState.cpp:593
1613 #: ../../../src/SDLInputState.cpp:684
13391614 msgid "Left Shift"
13401615 msgstr ""
13411616
1342 #: ../../../src/SDLInputState.cpp:594
1617 #: ../../../src/SDLInputState.cpp:685
13431618 msgid "NumLock"
13441619 msgstr ""
13451620
1346 #: ../../../src/SDLInputState.cpp:595
1621 #: ../../../src/SDLInputState.cpp:686
13471622 msgid "PageDown"
13481623 msgstr ""
13491624
1350 #: ../../../src/SDLInputState.cpp:596
1625 #: ../../../src/SDLInputState.cpp:687
13511626 msgid "PageUp"
13521627 msgstr ""
13531628
1354 #: ../../../src/SDLInputState.cpp:597
1355 msgid "Pause"
1356 msgstr ""
1357
1358 #: ../../../src/SDLInputState.cpp:598
1629 #: ../../../src/SDLInputState.cpp:689
13591630 msgid "PrintScreen"
13601631 msgstr ""
13611632
1362 #: ../../../src/SDLInputState.cpp:599
1633 #: ../../../src/SDLInputState.cpp:690
13631634 msgid "Right Alt"
13641635 msgstr ""
13651636
1366 #: ../../../src/SDLInputState.cpp:600
1637 #: ../../../src/SDLInputState.cpp:691
13671638 msgid "Right Ctrl"
13681639 msgstr ""
13691640
1370 #: ../../../src/SDLInputState.cpp:601
1641 #: ../../../src/SDLInputState.cpp:692
13711642 msgid "Return"
13721643 msgstr ""
13731644
1374 #: ../../../src/SDLInputState.cpp:603
1645 #: ../../../src/SDLInputState.cpp:694
13751646 msgid "Right Shift"
13761647 msgstr ""
13771648
1378 #: ../../../src/SDLInputState.cpp:604
1649 #: ../../../src/SDLInputState.cpp:695
13791650 msgid "ScrollLock"
13801651 msgstr ""
13811652
1382 #: ../../../src/SDLInputState.cpp:605
1653 #: ../../../src/SDLInputState.cpp:696
13831654 msgid "Space"
13841655 msgstr ""
13851656
1386 #: ../../../src/SDLInputState.cpp:606
1387 msgid "Tab"
1388 msgstr ""
1389
1390 #: ../../../src/SDLInputState.cpp:620
1657 #: ../../../src/SDLInputState.cpp:710
1658 #, c-format
1659 msgid "M%d"
1660 msgstr ""
1661
1662 #: ../../../src/SDLInputState.cpp:716
13911663 #, c-format
13921664 msgid "Mouse %d"
13931665 msgstr ""
13941666
1395 #: ../../../src/SDLInputState.cpp:628
1667 #: ../../../src/SDLInputState.cpp:726
1668 #, c-format
1669 msgid "JX%d-"
1670 msgstr ""
1671
1672 #: ../../../src/SDLInputState.cpp:728
13961673 #, c-format
13971674 msgid "Axis %d -"
13981675 msgstr ""
13991676
1400 #: ../../../src/SDLInputState.cpp:630
1677 #: ../../../src/SDLInputState.cpp:732
1678 #, c-format
1679 msgid "JX%d+"
1680 msgstr ""
1681
1682 #: ../../../src/SDLInputState.cpp:734
14011683 #, c-format
14021684 msgid "Axis %d +"
14031685 msgstr ""
14041686
1405 #: ../../../src/SDLInputState.cpp:633
1687 #: ../../../src/SDLInputState.cpp:739
1688 #, c-format
1689 msgid "JB%d"
1690 msgstr ""
1691
1692 #: ../../../src/SDLInputState.cpp:741
14061693 #, c-format
14071694 msgid "Button %d"
14081695 msgstr ""
14091696
1410 #: ../../../src/SDLInputState.cpp:637
1411 msgid "(none)"
1412 msgstr ""
1413
1414 #: ../../../src/SDLInputState.cpp:677
1697 #: ../../../src/SDLInputState.cpp:788
14151698 msgid "Touch control D-Pad"
14161699 msgstr ""
14171700
1418 #: ../../../src/SDLInputState.cpp:701
1701 #: ../../../src/SDLInputState.cpp:812
14191702 msgid "Touch control buttons"
14201703 msgstr ""
14211704
1422 #: ../../../src/SDLInputState.cpp:716
1705 #: ../../../src/SDLInputState.cpp:827
14231706 msgid "Tap"
14241707 msgstr ""
14251708
1426 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1427 #: ../../../src/SDLInputState.cpp:768
1709 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1710 #, c-format
1711 msgid "Can not bind: %s"
1712 msgstr ""
1713
1714 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1715 #: ../../../src/SDLInputState.cpp:901
14281716 #, c-format
14291717 msgid "'%s' is no longer bound to:"
14301718 msgstr ""
15871875 msgid "k"
15881876 msgstr ""
15891877
1590 #: ../../../src/Utils.cpp:580
1878 #: ../../../src/Utils.cpp:616
15911879 #, c-format
15921880 msgid "%s second"
15931881 msgstr ""
15941882
1595 #: ../../../src/Utils.cpp:583
1883 #: ../../../src/Utils.cpp:619
15961884 #, c-format
15971885 msgid "%s seconds"
15981886 msgstr ""
33 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
44 #
55 # Translators:
6 # Justin Jacobs <jajdorkster@gmail.com>, 2018
6 # Justin Jacobs <jajdorkster@gmail.com>, 2019
7 # Błażej Pęksyk <b.peksyk@gmail.com>, 2020
78 #
89 #, fuzzy
910 msgid ""
1011 msgstr ""
1112 "Project-Id-Version: PACKAGE VERSION\n"
1213 "Report-Msgid-Bugs-To: \n"
13 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
14 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1415 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
15 "Last-Translator: Justin Jacobs <jajdorkster@gmail.com>, 2018\n"
16 "Last-Translator: Błażej Pęksyk <b.peksyk@gmail.com>, 2020\n"
1617 "Language-Team: Polish (https://www.transifex.com/flareorg/teams/84925/pl/)\n"
1718 "MIME-Version: 1.0\n"
1819 "Content-Type: text/plain; charset=UTF-8\n"
2021 "Language: pl\n"
2122 "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
2223
23 #: ../../../src/Avatar.cpp:367
24 #: ../../../src/Avatar.cpp:387
25 msgid "Your health is low!"
26 msgstr ""
27
28 #: ../../../src/Avatar.cpp:419
2429 #, c-format
2530 msgid "Congratulations, you have reached level %d!"
2631 msgstr "Gratulacje, twoja postać osiągnęła %d poziom!"
2732
28 #: ../../../src/Avatar.cpp:369
29 msgid "You may increase one attribute through the Character Menu."
30 msgstr "Możesz zwiększyć jeden ze swoich atrybutów w Menu Postaci."
31
32 #: ../../../src/Avatar.cpp:583
33 #: ../../../src/Avatar.cpp:421
34 msgid "You may increase one or more attributes through the Character Menu."
35 msgstr "Możesz zwiększyć jeden lub kilka ze swoich atrybutów w Menu Postaci."
36
37 #: ../../../src/Avatar.cpp:425
38 msgid "You may unlock one or more abilities through the Powers Menu."
39 msgstr "Możesz zwiększyć jedną lub kilka ze swoich zdolności w Menu Mocy."
40
41 #: ../../../src/Avatar.cpp:692
3342 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3443 msgstr ""
3544 "Pokonano Cię. Koniec gry! ${INPUT_CONTINUE} spowoduje powrót do Menu "
3645 "Głównego."
3746
38 #: ../../../src/Avatar.cpp:589
47 #: ../../../src/Avatar.cpp:698
3948 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
4049 msgstr ""
4150 "Pokonano Cię. ${INPUT_CONTINUE} sprawi, że odrodzisz się w ostatnim punkcie "
4251 "kontrolnym."
4352
44 #: ../../../src/Avatar.cpp:839
53 #: ../../../src/Avatar.cpp:949
4554 msgid "Transformation expired. You have been moved back to a safe place."
4655 msgstr "Transformacja minęła. Przeniesiono Cię w bezpieczne miejsce."
4756
5059 msgid "%d %s removed."
5160 msgstr "Usunięto %d %s."
5261
53 #: ../../../src/CampaignManager.cpp:162
62 #: ../../../src/CampaignManager.cpp:165
63 #, c-format
64 msgid "%s x%d removed."
65 msgstr "Usunięto %dx %s."
66
67 #: ../../../src/CampaignManager.cpp:167
5468 #, c-format
5569 msgid "%s removed."
5670 msgstr "Usunięto %s."
5771
58 #: ../../../src/CampaignManager.cpp:175
72 #: ../../../src/CampaignManager.cpp:180
5973 #, c-format
6074 msgid "You receive %s."
6175 msgstr "Otrzymujesz przedmiot %s."
6276
63 #: ../../../src/CampaignManager.cpp:177
77 #: ../../../src/CampaignManager.cpp:182
6478 #, c-format
6579 msgid "You receive %s x%d."
6680 msgstr "Otrzymujesz %s x%d."
6781
68 #: ../../../src/CampaignManager.cpp:186
82 #: ../../../src/CampaignManager.cpp:191
6983 #, c-format
7084 msgid "You receive %d %s."
7185 msgstr "Otrzymujesz %d %s."
7286
73 #: ../../../src/CampaignManager.cpp:195
87 #: ../../../src/CampaignManager.cpp:200
7488 #, c-format
7589 msgid "You receive %d XP."
7690 msgstr "Otrzymujesz %d PD."
7791
78 #: ../../../src/CampaignManager.cpp:201
92 #: ../../../src/CampaignManager.cpp:206
7993 msgid "HP restored."
8094 msgstr "PŻ odnowione."
8195
82 #: ../../../src/CampaignManager.cpp:205
96 #: ../../../src/CampaignManager.cpp:210
8397 msgid "MP restored."
8498 msgstr "PM odnowione."
8599
86 #: ../../../src/CampaignManager.cpp:210
100 #: ../../../src/CampaignManager.cpp:215
87101 msgid "HP and MP restored."
88102 msgstr "PŻ i PM odnowione."
89103
90 #: ../../../src/CampaignManager.cpp:214
104 #: ../../../src/CampaignManager.cpp:219
91105 msgid "Negative effects removed."
92106 msgstr "Negatywne efekty usunięte."
93107
94 #: ../../../src/CampaignManager.cpp:220
108 #: ../../../src/CampaignManager.cpp:225
95109 msgid "HP and MP restored, negative effects removed"
96110 msgstr "PŻ i PM odnowione, negatywne efekty usunięte."
97111
115129 "\n"
116130 "Domyślny renderer, który zwykle jest szybszy niż programowy renderer SDL."
117131
118 #: ../../../src/EngineSettings.cpp:561
132 #: ../../../src/EngineSettings.cpp:572
119133 msgid "Adventurer"
120134 msgstr "Poszukiwacz przygód"
121135
122 #: ../../../src/Entity.cpp:511
136 #: ../../../src/Entity.cpp:522
123137 msgid "miss"
124138 msgstr "pudło"
125139
126 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
127 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
140 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
141 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
128142 #, c-format
129143 msgid "+%d HP"
130144 msgstr "+%d PŻ"
131145
132 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
133 #: ../../../src/StatBlock.cpp:822
146 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
147 #: ../../../src/StatBlock.cpp:830
134148 #, c-format
135149 msgid "+%d MP"
136150 msgstr "+%d PM"
137151
138 #: ../../../src/EventManager.cpp:738
152 #: ../../../src/EventManager.cpp:782
139153 msgid "Unknown destination"
140154 msgstr "Cel nieznany"
141155
142 #: ../../../src/GameStateConfigBase.cpp:89
143 #: ../../../src/GameStateConfigBase.cpp:110
156 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
157 msgid "Loading..."
158 msgstr "Wczytywanie..."
159
160 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
161 msgid "Delete Save"
162 msgstr "Usuń zapis"
163
164 #: ../../../src/GameStateLoad.cpp:90
165 msgid "Delete this save?"
166 msgstr "Usunąć ten zapis?"
167
168 #: ../../../src/GameStateLoad.cpp:92
169 msgid "Exit to Title"
170 msgstr "Wyjdź do Menu"
171
172 #: ../../../src/GameStateLoad.cpp:95
173 msgid "New Game"
174 msgstr "Nowa Gra"
175
176 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
177 msgid "Choose a Slot"
178 msgstr "Wybierz stan gry"
179
180 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
181 msgid "Enable a story mod to continue"
182 msgstr "Włącz mod fabularny, by kontynuować"
183
184 #: ../../../src/GameStateLoad.cpp:597
185 msgid "Load Game"
186 msgstr "Wczytaj Grę"
187
188 #: ../../../src/GameStateLoad.cpp:706
189 msgid "Entering game world..."
190 msgstr "Wkraczanie do świata gry..."
191
192 #: ../../../src/GameStateLoad.cpp:709
193 msgid "Loading saved game..."
194 msgstr "Wczytywanie stanu gry..."
195
196 #: ../../../src/GameStateLoad.cpp:742
197 msgid "Invalid save"
198 msgstr "Nieprawidłowy zapis"
199
200 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
201 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
202 #: ../../../src/MenuPowers.cpp:1543
203 #, c-format
204 msgid "Level %d"
205 msgstr "Poziom %d"
206
207 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
208 #: ../../../src/MenuConfig.cpp:244
209 msgid "Cancel"
210 msgstr "Anuluj"
211
212 #: ../../../src/GameStateNew.cpp:68
213 msgid "Create"
214 msgstr "Stwórz"
215
216 #: ../../../src/GameStateNew.cpp:76
217 msgid "Randomize"
218 msgstr "Losuj"
219
220 #: ../../../src/GameStateNew.cpp:92
221 msgid "Choose a Portrait"
222 msgstr "Wybierz potret"
223
224 #: ../../../src/GameStateNew.cpp:96
225 msgid "Choose a Name"
226 msgstr "Wybierz Imię"
227
228 #: ../../../src/GameStateNew.cpp:100
229 msgid "Permadeath?"
230 msgstr "Tryb hardkorowy?"
231
232 #: ../../../src/GameStateNew.cpp:104
233 msgid "Choose a Class"
234 msgstr "Wybierz klasę postaci"
235
236 #: ../../../src/GameStateTitle.cpp:107
237 msgid "Play Game"
238 msgstr "Zacznij grę"
239
240 #: ../../../src/GameStateTitle.cpp:110
241 msgid "Enable a core mod to continue"
242 msgstr "Włącz mod główny, aby kontynuować"
243
244 #: ../../../src/GameStateTitle.cpp:114
245 msgid "Configuration"
246 msgstr "Konfiguracja"
247
248 #: ../../../src/GameStateTitle.cpp:117
249 msgid "Credits"
250 msgstr "Lista płac"
251
252 #: ../../../src/GameStateTitle.cpp:120
253 msgid "Exit Game"
254 msgstr "Wyjdź z Gry"
255
256 #: ../../../src/InputState.cpp:407
257 msgid "Accept"
258 msgstr "Akceptuj"
259
260 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
261 #: ../../../src/SDLInputState.cpp:698
262 msgid "Up"
263 msgstr "Góra"
264
265 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
266 #: ../../../src/SDLInputState.cpp:676
267 msgid "Down"
268 msgstr "Dół"
269
270 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
271 #: ../../../src/SDLInputState.cpp:683
272 msgid "Left"
273 msgstr "Lewo"
274
275 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
276 #: ../../../src/SDLInputState.cpp:693
277 msgid "Right"
278 msgstr "Prawo"
279
280 #: ../../../src/InputState.cpp:412
281 msgid "Bar1"
282 msgstr "Pas1"
283
284 #: ../../../src/InputState.cpp:413
285 msgid "Bar2"
286 msgstr "Pas2"
287
288 #: ../../../src/InputState.cpp:414
289 msgid "Bar3"
290 msgstr "Pas3"
291
292 #: ../../../src/InputState.cpp:415
293 msgid "Bar4"
294 msgstr "Pas4"
295
296 #: ../../../src/InputState.cpp:416
297 msgid "Bar5"
298 msgstr "Pas5"
299
300 #: ../../../src/InputState.cpp:417
301 msgid "Bar6"
302 msgstr "Pas6"
303
304 #: ../../../src/InputState.cpp:418
305 msgid "Bar7"
306 msgstr "Pas7"
307
308 #: ../../../src/InputState.cpp:419
309 msgid "Bar8"
310 msgstr "Pas8"
311
312 #: ../../../src/InputState.cpp:420
313 msgid "Bar9"
314 msgstr "Pas9"
315
316 #: ../../../src/InputState.cpp:421
317 msgid "Bar0"
318 msgstr "Pas0"
319
320 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
321 #: ../../../src/MenuCharacter.cpp:54
322 msgid "Character"
323 msgstr "Postać"
324
325 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
326 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
327 msgid "Inventory"
328 msgstr "Ekwipunek"
329
330 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
331 #: ../../../src/MenuPowers.cpp:167
332 msgid "Powers"
333 msgstr "Moce"
334
335 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
336 #: ../../../src/MenuLog.cpp:72
337 msgid "Log"
338 msgstr "Dziennik"
339
340 #: ../../../src/InputState.cpp:426
341 msgid "Main1"
342 msgstr "Główny1"
343
344 #: ../../../src/InputState.cpp:427
345 msgid "Main2"
346 msgstr "Główny2"
347
348 #: ../../../src/InputState.cpp:428
349 msgid "Ctrl"
350 msgstr "Ctrl"
351
352 #: ../../../src/InputState.cpp:429
353 msgid "Shift"
354 msgstr "Shift"
355
356 #: ../../../src/InputState.cpp:430
357 msgid "Alt"
358 msgstr "Alt"
359
360 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
361 msgid "Delete"
362 msgstr "Delete"
363
364 #: ../../../src/InputState.cpp:432
365 msgid "ActionBar Accept"
366 msgstr "Wybór elementu na Pasku Akcji"
367
368 #: ../../../src/InputState.cpp:433
369 msgid "ActionBar Left"
370 msgstr "Kursor na Pasku Akcji w lewo"
371
372 #: ../../../src/InputState.cpp:434
373 msgid "ActionBar Right"
374 msgstr "Kursor na Pasku Akcji w prawo"
375
376 #: ../../../src/InputState.cpp:435
377 msgid "ActionBar Use"
378 msgstr "Użycie elementu na Pasku Akcji"
379
380 #: ../../../src/InputState.cpp:436
381 msgid "Developer Menu"
382 msgstr "Menu deweloperskie"
383
384 #: ../../../src/InputState.cpp:438
385 msgid "Left Mouse"
386 msgstr "Lewy przycisk myszy"
387
388 #: ../../../src/InputState.cpp:439
389 msgid "Middle Mouse"
390 msgstr "Środkowy przycisk myszy"
391
392 #: ../../../src/InputState.cpp:440
393 msgid "Right Mouse"
394 msgstr "Prawy przycisk myszy"
395
396 #: ../../../src/InputState.cpp:441
397 msgid "Wheel Up"
398 msgstr "Kółko w górę"
399
400 #: ../../../src/InputState.cpp:442
401 msgid "Wheel Down"
402 msgstr "Kółko w dół"
403
404 #: ../../../src/InputState.cpp:443
405 msgid "Mouse X1"
406 msgstr "Przycisk myszy X1"
407
408 #: ../../../src/InputState.cpp:444
409 msgid "Mouse X2"
410 msgstr "Przycisk myszy X2"
411
412 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
413 msgid "Unknown Item"
414 msgstr "Nieznany przedmiot"
415
416 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
417 #, c-format
418 msgid "%d%% Speed"
419 msgstr "%d%% Szybkość Ruchu"
420
421 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
422 #, c-format
423 msgid "%d%% Attack Speed"
424 msgstr "%d%% Szybkość Ataku"
425
426 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
427 #: ../../../src/MenuPowers.cpp:832
428 #, c-format
429 msgid "Resistance (%s)"
430 msgstr "Odporność (%s)"
431
432 #: ../../../src/ItemManager.cpp:714
433 #, c-format
434 msgid "Requires %s"
435 msgstr "Wymaga %s"
436
437 #: ../../../src/ItemManager.cpp:763
438 msgid "Quest Item"
439 msgstr "Przedmiot związany z zadaniem"
440
441 #: ../../../src/ItemManager.cpp:790
442 #, c-format
443 msgid "Quality: %s"
444 msgstr "Jakość: %s"
445
446 #: ../../../src/ItemManager.cpp:815
447 #, c-format
448 msgid "Absorb: %d-%d"
449 msgstr "Absorbcja: %d-%d"
450
451 #: ../../../src/ItemManager.cpp:817
452 #, c-format
453 msgid "Absorb: %d"
454 msgstr "Absorbcja: %d"
455
456 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
457 #: ../../../src/MenuPowers.cpp:1133
458 #, c-format
459 msgid "Requires Level %d"
460 msgstr "Wymaga %d poziomu"
461
462 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
463 #: ../../../src/MenuPowers.cpp:1124
464 #, c-format
465 msgid "Requires %s %d"
466 msgstr "Wymaga: %s %d"
467
468 #: ../../../src/ItemManager.cpp:879
469 #, c-format
470 msgid "Requires Class: %s"
471 msgstr "Wymagana Klasa: %s"
472
473 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
474 #, c-format
475 msgid "Buy Price: %d %s"
476 msgstr "Cena kupna: %d %s"
477
478 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
479 #, c-format
480 msgid "Buy Price: %d %s each"
481 msgstr "Cena kupna: %d %s za sztukę"
482
483 #: ../../../src/ItemManager.cpp:916
484 #, c-format
485 msgid "Sell Price: %d %s"
486 msgstr "Wartość sprzedaży: %d %s"
487
488 #: ../../../src/ItemManager.cpp:918
489 #, c-format
490 msgid "Sell Price: %d %s each"
491 msgstr "Wartość sprzedaży: %d %s za sztukę"
492
493 #: ../../../src/ItemManager.cpp:927
494 msgid "Set:"
495 msgstr "Zestaw:"
496
497 #: ../../../src/ItemManager.cpp:934
498 #, c-format
499 msgid "%d items:"
500 msgstr "%d przedmioty:"
501
502 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
503 #, c-format
504 msgid "Press [%s] to use"
505 msgstr "Wciśnij [%s] aby użyć"
506
507 #: ../../../src/ItemManager.cpp:951
508 #, c-format
509 msgid "Press [%s] to read"
510 msgstr "Wciśnij [%s] aby przeczytać"
511
512 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
513 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
514 #, c-format
515 msgid "Hotkey: %s"
516 msgstr "Klawisz skrótu: %s"
517
518 #: ../../../src/MenuActionBar.cpp:599
519 msgid "Not enough MP."
520 msgstr "Za mało PM."
521
522 #: ../../../src/MenuActiveEffects.cpp:124
523 #, c-format
524 msgid "x%d"
525 msgstr "x%d"
526
527 #: ../../../src/MenuActiveEffects.cpp:219
528 msgid "Remaining:"
529 msgstr "Pozostało:"
530
531 #: ../../../src/MenuActiveEffects.cpp:225
532 #, c-format
533 msgid "x%d stacks"
534 msgstr "x%d sztuk"
535
536 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
537 msgid "Name"
538 msgstr "Imię"
539
540 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
541 msgid "Level"
542 msgstr "Poziom"
543
544 #: ../../../src/MenuCharacter.cpp:310
545 #, c-format
546 msgid "%d unspent stat point"
547 msgstr "%d niewydany punkt statystyk"
548
549 #: ../../../src/MenuCharacter.cpp:313
550 #, c-format
551 msgid "%d unspent stat points"
552 msgstr "%d niewydane punkty statystyk"
553
554 #: ../../../src/MenuCharacter.cpp:355
555 #, c-format
556 msgid "Reduces the damage taken from \"%s\" elemental attacks."
557 msgstr "Zmniejsza obrażenia otrzymywane od ataków żywiołu \"%s\"."
558
559 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
560 #, c-format
561 msgid "XP: %d"
562 msgstr "Obecne PD: %d"
563
564 #: ../../../src/MenuCharacter.cpp:367
565 #, c-format
566 msgid "Next: %d"
567 msgstr "Do następnego poziomu: %d PD"
568
569 #: ../../../src/MenuCharacter.cpp:373
570 #, c-format
571 msgid "base (%d), bonus (%d)"
572 msgstr "Podstawa (%d), dodatkowo (%d)"
573
574 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
575 msgid "Related stats:"
576 msgstr "Powiązane statystyki:"
577
578 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
579 #, c-format
580 msgid "Each level grants %d."
581 msgstr "Każdy poziom zapewnia %d punktów."
582
583 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
584 #, c-format
585 msgid "Each point of %s grants %d."
586 msgstr "Każdy punkt atrybutu %s dodaje %d punktów."
587
588 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
589 msgid "Clear"
590 msgstr "Wyczyść"
591
592 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
593 msgid "Assign:"
594 msgstr "Przypisz:"
595
596 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
144597 msgid "Defaults"
145598 msgstr "Domyślne"
146599
147 #: ../../../src/GameStateConfigBase.cpp:89
600 #: ../../../src/MenuConfig.cpp:123
148601 msgid "Reset ALL settings?"
149602 msgstr "Zresetować WSZYSTKIE ustawienia?"
150603
151 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
604 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
152605 msgid "OK"
153606 msgstr "OK"
154607
155 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
156 #: ../../../src/InputState.cpp:401
157 msgid "Cancel"
158 msgstr "Anuluj"
159
160 #: ../../../src/GameStateConfigBase.cpp:160
161 #: ../../../src/GameStateConfigDesktop.cpp:130
608 #: ../../../src/MenuConfig.cpp:246
609 msgid "Continue"
610 msgstr "Kontynuuj"
611
612 #: ../../../src/MenuConfig.cpp:248
613 msgid "Save Game"
614 msgstr "Zapisz Grę"
615
616 #: ../../../src/MenuConfig.cpp:291
617 msgid "Default"
618 msgstr "Domyślne"
619
620 #: ../../../src/MenuConfig.cpp:291
621 msgid ""
622 "Show all loot tooltips, except for those that would be obscured by the "
623 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
624 msgstr ""
625 "Wyświetla podpisy wszystkich łupów, za wyjątkiem tych zasłoniętych przez "
626 "gracza bądź wroga. Tymczasowo ukryj podpisy klawiszem 'Alt'."
627
628 #: ../../../src/MenuConfig.cpp:292
629 msgid "Show all"
630 msgstr "Pokaż wszystkie"
631
632 #: ../../../src/MenuConfig.cpp:292
633 msgid ""
634 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
635 msgstr ""
636 "Zawsze wyświetla podpisy łupów. Tymczasowo ukryj podpisy klawiszem 'Alt'."
637
638 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
639 msgid "Hidden"
640 msgstr "Ukryta"
641
642 #: ../../../src/MenuConfig.cpp:293
643 msgid ""
644 "Always hide loot tooltips, except for when a piece of loot is hovered with "
645 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
646 msgstr ""
647 "Zawsze ukrywaj podpisy łupów, poza tymi, na których znajduje się kursor "
648 "myszt. Tymczasowo pokaż podpisy wszystkich łupów klawiszem 'Alt'."
649
650 #: ../../../src/MenuConfig.cpp:296
651 msgid "Visible"
652 msgstr "Widoczna"
653
654 #: ../../../src/MenuConfig.cpp:297
655 msgid "Visible (2x zoom)"
656 msgstr "Widoczna (powiększenie x2)"
657
658 #: ../../../src/MenuConfig.cpp:301
659 msgid ""
660 "Controls the type of warning to be activated when the player is below the "
661 "low health threshold."
662 msgstr ""
663
664 #: ../../../src/MenuConfig.cpp:302
665 msgid "- Display a message"
666 msgstr ""
667
668 #: ../../../src/MenuConfig.cpp:303
669 msgid "- Play a sound"
670 msgstr ""
671
672 #: ../../../src/MenuConfig.cpp:304
673 msgid "- Change the cursor"
674 msgstr ""
675
676 #: ../../../src/MenuConfig.cpp:306
677 msgid "Disabled"
678 msgstr ""
679
680 #: ../../../src/MenuConfig.cpp:307
681 msgid "All"
682 msgstr ""
683
684 #: ../../../src/MenuConfig.cpp:308
685 msgid "Message & Cursor"
686 msgstr ""
687
688 #: ../../../src/MenuConfig.cpp:309
689 msgid "Message & Sound"
690 msgstr ""
691
692 #: ../../../src/MenuConfig.cpp:310
693 msgid "Sound & Cursor"
694 msgstr ""
695
696 #: ../../../src/MenuConfig.cpp:311
697 msgid "Message"
698 msgstr ""
699
700 #: ../../../src/MenuConfig.cpp:312
701 msgid "Cursor"
702 msgstr "Kursor"
703
704 #: ../../../src/MenuConfig.cpp:313
705 msgid "Sound"
706 msgstr ""
707
708 #: ../../../src/MenuConfig.cpp:319
709 msgid ""
710 "When the player's health drops below the given threshold, the low health "
711 "notifications are triggered if one or more of them is enabled."
712 msgstr ""
713
714 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
715 msgid "Exit"
716 msgstr "Wyjdź"
717
718 #: ../../../src/MenuConfig.cpp:333
719 msgid "Video"
720 msgstr "Grafika"
721
722 #: ../../../src/MenuConfig.cpp:334
162723 msgid "Audio"
163724 msgstr "Dźwięk"
164725
165 #: ../../../src/GameStateConfigBase.cpp:161
166 #: ../../../src/GameStateConfigDesktop.cpp:131
726 #: ../../../src/MenuConfig.cpp:335
167727 msgid "Interface"
168728 msgstr "Interfejs"
169729
170 #: ../../../src/GameStateConfigBase.cpp:162
171 #: ../../../src/GameStateConfigDesktop.cpp:134
730 #: ../../../src/MenuConfig.cpp:336
731 msgid "Input"
732 msgstr "Kontrolery"
733
734 #: ../../../src/MenuConfig.cpp:337
735 msgid "Keybindings"
736 msgstr "Klawiszologia"
737
738 #: ../../../src/MenuConfig.cpp:338
172739 msgid "Mods"
173740 msgstr "Mody"
174741
175 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
742 #: ../../../src/MenuConfig.cpp:350
743 msgid "Paused"
744 msgstr "Pauza"
745
746 #: ../../../src/MenuConfig.cpp:353
747 msgid "Time Played"
748 msgstr "Czas spędzony w grze"
749
750 #: ../../../src/MenuConfig.cpp:359
751 msgid "Renderer"
752 msgstr "Renderer"
753
754 #: ../../../src/MenuConfig.cpp:360
755 msgid "Full Screen Mode"
756 msgstr "Pełny ekran"
757
758 #: ../../../src/MenuConfig.cpp:361
759 msgid "Hardware surfaces"
760 msgstr "Generowanie sprzętowe"
761
762 #: ../../../src/MenuConfig.cpp:362
763 msgid "V-Sync"
764 msgstr "V-Sync"
765
766 #: ../../../src/MenuConfig.cpp:363
767 msgid "Texture Filtering"
768 msgstr "Filtrowanie tekstur"
769
770 #: ../../../src/MenuConfig.cpp:364
771 msgid "DPI scaling"
772 msgstr "Skalowanie DPI"
773
774 #: ../../../src/MenuConfig.cpp:365
775 msgid "Parallax Layers"
776 msgstr "Warstwy paralaksowe"
777
778 #: ../../../src/MenuConfig.cpp:366
779 msgid "Allow changing gamma"
780 msgstr "Zezwól na zmianę jasności"
781
782 #: ../../../src/MenuConfig.cpp:367
783 msgid "Gamma"
784 msgstr "Jasność"
785
786 #: ../../../src/MenuConfig.cpp:369
787 msgid "Sound Volume"
788 msgstr "Głośność efektów"
789
790 #: ../../../src/MenuConfig.cpp:370
176791 msgid "Music Volume"
177792 msgstr "Głośność muzyki"
178793
179 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
180 msgid "Sound Volume"
181 msgstr "Głośność efektów"
182
183 #: ../../../src/GameStateConfigBase.cpp:257
794 #: ../../../src/MenuConfig.cpp:372
184795 msgid "Language"
185796 msgstr "Język"
186797
187 #: ../../../src/GameStateConfigBase.cpp:266
798 #: ../../../src/MenuConfig.cpp:373
188799 msgid "Show FPS"
189800 msgstr "Pokaż klatki na sekundę"
190801
191 #: ../../../src/GameStateConfigBase.cpp:270
192 msgid "Colorblind Mode"
193 msgstr "Minimalizacja kolorów"
194
195 #: ../../../src/GameStateConfigBase.cpp:274
802 #: ../../../src/MenuConfig.cpp:374
196803 msgid "Hardware mouse cursor"
197804 msgstr "Sprzętowy kursor myszy"
198805
199 #: ../../../src/GameStateConfigBase.cpp:278
806 #: ../../../src/MenuConfig.cpp:375
807 msgid "Colorblind Mode"
808 msgstr "Wyświetlanie opisów kolorów"
809
810 #: ../../../src/MenuConfig.cpp:376
200811 msgid "Developer Mode"
201812 msgstr "Tryb deweloperski"
202813
203 #: ../../../src/GameStateConfigBase.cpp:282
814 #: ../../../src/MenuConfig.cpp:377
204815 msgid "Subtitles"
205816 msgstr "Napisy"
206817
207 #: ../../../src/GameStateConfigBase.cpp:286
208 msgid "Active Mods"
209 msgstr "Aktywne mody"
210
211 #: ../../../src/GameStateConfigBase.cpp:295
212 msgid "Available Mods"
213 msgstr "Dostępne mody"
214
215 #: ../../../src/GameStateConfigBase.cpp:314
216 msgid "<< Disable"
217 msgstr "<< Wyłącz"
218
219 #: ../../../src/GameStateConfigBase.cpp:320
220 msgid "Enable >>"
221 msgstr "Włącz >>"
222
223 #: ../../../src/GameStateConfigBase.cpp:873
224 msgid "Version:"
225 msgstr "Wersja:"
226
227 #: ../../../src/GameStateConfigBase.cpp:878
228 msgid "Game:"
229 msgstr "Gra:"
230
231 #: ../../../src/GameStateConfigBase.cpp:883
232 msgid "Engine version:"
233 msgstr "Wersja silnika:"
234
235 #: ../../../src/GameStateConfigBase.cpp:891
236 msgid "Requires mods:"
237 msgstr "Wymaga modów:"
238
239 #: ../../../src/GameStateConfigDesktop.cpp:83
240 #: ../../../src/GameStateConfigDesktop.cpp:751
241 msgid "Clear"
242 msgstr "Wyczyść"
243
244 #: ../../../src/GameStateConfigDesktop.cpp:83
245 #: ../../../src/GameStateConfigDesktop.cpp:749
246 msgid "Assign:"
247 msgstr "Przypisz:"
248
249 #: ../../../src/GameStateConfigDesktop.cpp:128
250 msgid "Video"
251 msgstr "Grafika"
252
253 #: ../../../src/GameStateConfigDesktop.cpp:132
254 msgid "Input"
255 msgstr "Kontrolery"
256
257 #: ../../../src/GameStateConfigDesktop.cpp:133
258 msgid "Keybindings"
259 msgstr "Klawiszologia"
260
261 #: ../../../src/GameStateConfigDesktop.cpp:188
818 #: ../../../src/MenuConfig.cpp:378
819 msgid "Loot tooltip visibility"
820 msgstr "Widoczność podpisów łupów"
821
822 #: ../../../src/MenuConfig.cpp:379
823 msgid "Mini-map mode"
824 msgstr "Tryb minimapy"
825
826 #: ../../../src/MenuConfig.cpp:380
827 msgid "Always show stat bar labels"
828 msgstr "Pokazuj podpisy na paskach"
829
830 #: ../../../src/MenuConfig.cpp:381
831 msgid "Allow stat bar auto-hiding"
832 msgstr "Zezwól na automatyczne ukrywanie pasków stanu"
833
834 #: ../../../src/MenuConfig.cpp:382
835 msgid "Show combat text"
836 msgstr "Pokaż tekst podczas walki"
837
838 #: ../../../src/MenuConfig.cpp:383
839 msgid "Automatically equip items"
840 msgstr "Automatycznie załóż ekwipunek"
841
842 #: ../../../src/MenuConfig.cpp:384
843 msgid "Show hidden entity markers"
844 msgstr "Wyświetl znaczniki ukrytych bytów"
845
846 #: ../../../src/MenuConfig.cpp:385
847 msgid "Low health notification"
848 msgstr ""
849
850 #: ../../../src/MenuConfig.cpp:386
851 msgid "Low health threshold"
852 msgstr ""
853
854 #: ../../../src/MenuConfig.cpp:389
855 msgid "Joystick"
856 msgstr "Joystick"
857
858 #: ../../../src/MenuConfig.cpp:390
859 msgid "Move hero using mouse"
860 msgstr "Poruszaj się używając myszki"
861
862 #: ../../../src/MenuConfig.cpp:391
863 msgid "Mouse aim"
864 msgstr "Celowanie myszką"
865
866 #: ../../../src/MenuConfig.cpp:392
867 msgid "Do not use mouse"
868 msgstr "Nie używaj myszy"
869
870 #: ../../../src/MenuConfig.cpp:393
871 msgid "Swap mouse movement button"
872 msgstr "Zamień przyciski ruchu na myszce"
873
874 #: ../../../src/MenuConfig.cpp:394
875 msgid "Attack with mouse movement"
876 msgstr "Atakuj podczas ruchu myszką"
877
878 #: ../../../src/MenuConfig.cpp:395
879 msgid "Joystick Deadzone"
880 msgstr "Martwa strefa Joystick-a"
881
882 #: ../../../src/MenuConfig.cpp:405
883 #, c-format
884 msgid "Primary binding: %s"
885 msgstr "Klawisz główny: %s"
886
887 #: ../../../src/MenuConfig.cpp:406
888 #, c-format
889 msgid "Alternate binding: %s"
890 msgstr "Klawisz alternatywny: %s"
891
892 #: ../../../src/MenuConfig.cpp:407
893 #, c-format
894 msgid "Joystick binding: %s"
895 msgstr "Przycisk na joysticku: %s"
896
897 #: ../../../src/MenuConfig.cpp:508
262898 msgid ""
263899 "Will try to store surfaces in video memory versus system memory. The effect "
264900 "this has on performance depends on the renderer."
265901 msgstr ""
266
267 #: ../../../src/GameStateConfigDesktop.cpp:189
902 "Funkcja będzie próbowała przechowywać powierzchnie w pamięci karty "
903 "graficznej zamiast systemowej. Jej wydajność zależy od renderera"
904
905 #: ../../../src/MenuConfig.cpp:509
268906 msgid ""
269907 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
270908 "windowed mode or input lag."
271909 msgstr ""
272
273 #: ../../../src/GameStateConfigDesktop.cpp:190
910 "Zapobiega rozchodzeniu się obrazu. Wyłącz, jeśli doświadczasz "
911 "\"przycinania\\ w trybie okienkowym bądź opóźnienia w wykonywaniu akcji."
912
913 #: ../../../src/MenuConfig.cpp:510
274914 msgid ""
275915 "When enabled, this uses the screen DPI in addition to the window dimensions "
276916 "to scale the rendering resolution. Otherwise, only the window dimensions are"
277917 " used."
278918 msgstr ""
279
280 #: ../../../src/GameStateConfigDesktop.cpp:191
919 "Po włączeniu, ta funkcja bierze pod uwagę rozdzielczość ekranu podczas "
920 "skalowania renderowanego obrazu do rozmiaru okna. W przeciwnym wypadku brany"
921 " pod uwagę jest wyłącznie rozmiar okna."
922
923 #: ../../../src/MenuConfig.cpp:511
281924 msgid ""
282925 "This enables parallax (non-tile) layers. Disabling this setting can improve "
283926 "performance in some cases."
284927 msgstr ""
285
286 #: ../../../src/GameStateConfigDesktop.cpp:192
287 msgid "Experimental"
288 msgstr "Eksperymentalne"
289
290 #: ../../../src/GameStateConfigDesktop.cpp:193
291 msgid "For handheld devices"
292 msgstr "Dla urządzeń przenośnych"
293
294 #: ../../../src/GameStateConfigDesktop.cpp:211
295 msgid "Renderer"
296 msgstr "Renderer"
297
298 #: ../../../src/GameStateConfigDesktop.cpp:227
299 msgid "Full Screen Mode"
300 msgstr "Pełny ekran"
301
302 #: ../../../src/GameStateConfigDesktop.cpp:231
303 msgid "Move hero using mouse"
304 msgstr "Poruszaj się używając myszki"
305
306 #: ../../../src/GameStateConfigDesktop.cpp:235
307 msgid "Hardware surfaces"
308 msgstr "Generowanie sprzętowe"
309
310 #: ../../../src/GameStateConfigDesktop.cpp:239
311 msgid "V-Sync"
312 msgstr "V-Sync"
313
314 #: ../../../src/GameStateConfigDesktop.cpp:243
315 msgid "Texture Filtering"
316 msgstr "Filtrowanie tekstur"
317
318 #: ../../../src/GameStateConfigDesktop.cpp:247
319 msgid "DPI scaling"
320 msgstr ""
321
322 #: ../../../src/GameStateConfigDesktop.cpp:251
323 msgid "Parallax Layers"
324 msgstr ""
325
326 #: ../../../src/GameStateConfigDesktop.cpp:255
327 msgid "Allow changing gamma"
328 msgstr "Zezwól na zmianę jasności"
329
330 #: ../../../src/GameStateConfigDesktop.cpp:259
331 msgid "Gamma"
332 msgstr "Jasność"
333
334 #: ../../../src/GameStateConfigDesktop.cpp:263
335 msgid "Use joystick"
336 msgstr "Użyj joysticka"
337
338 #: ../../../src/GameStateConfigDesktop.cpp:267
339 msgid "Joystick"
340 msgstr "Joystick"
341
342 #: ../../../src/GameStateConfigDesktop.cpp:283
343 msgid "Mouse aim"
344 msgstr "Celowanie myszką"
345
346 #: ../../../src/GameStateConfigDesktop.cpp:287
347 msgid "Do not use mouse"
348 msgstr "Nie używaj myszy"
349
350 #: ../../../src/GameStateConfigDesktop.cpp:291
351 msgid "Joystick Deadzone"
352 msgstr "Martwa strefa Joystick-a"
353
354 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
355 msgid "Loading..."
356 msgstr "Wczytywanie..."
357
358 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
359 msgid "Delete Save"
360 msgstr "Usuń zapis"
361
362 #: ../../../src/GameStateLoad.cpp:88
363 msgid "Delete this save?"
364 msgstr "Usunąć ten zapis?"
365
366 #: ../../../src/GameStateLoad.cpp:90
367 msgid "Exit to Title"
368 msgstr "Wyjdź do Menu"
369
370 #: ../../../src/GameStateLoad.cpp:93
371 msgid "New Game"
372 msgstr "Nowa Gra"
373
374 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
375 msgid "Choose a Slot"
376 msgstr "Wybierz stan gry"
377
378 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
379 msgid "Enable a story mod to continue"
380 msgstr "Włącz mod fabularny, by kontynuować"
381
382 #: ../../../src/GameStateLoad.cpp:589
383 msgid "Load Game"
384 msgstr "Wczytaj Grę"
385
386 #: ../../../src/GameStateLoad.cpp:695
387 msgid "Entering game world..."
388 msgstr "Wkraczanie do świata gry..."
389
390 #: ../../../src/GameStateLoad.cpp:698
391 msgid "Loading saved game..."
392 msgstr "Wczytywanie stanu gry..."
393
394 #: ../../../src/GameStateLoad.cpp:731
395 msgid "Invalid save"
396 msgstr "Nieprawidłowy zapis"
397
398 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
399 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
400 #: ../../../src/MenuPowers.cpp:1542
401 #, c-format
402 msgid "Level %d"
403 msgstr "Poziom %d"
404
405 #: ../../../src/GameStateNew.cpp:68
406 msgid "Create"
407 msgstr "Stwórz"
408
409 #: ../../../src/GameStateNew.cpp:76
410 msgid "Randomize"
411 msgstr ""
412
413 #: ../../../src/GameStateNew.cpp:92
414 msgid "Choose a Portrait"
415 msgstr "Wybierz potret"
416
417 #: ../../../src/GameStateNew.cpp:96
418 msgid "Choose a Name"
419 msgstr "Wybierz Imię"
420
421 #: ../../../src/GameStateNew.cpp:100
422 msgid "Permadeath?"
423 msgstr "Tryb hardkorowy?"
424
425 #: ../../../src/GameStateNew.cpp:104
426 msgid "Choose a Class"
427 msgstr "Wybierz klasę postaci"
428
429 #: ../../../src/GameStateTitle.cpp:108
430 msgid "Play Game"
431 msgstr "Zacznij grę"
432
433 #: ../../../src/GameStateTitle.cpp:111
434 msgid "Enable a core mod to continue"
435 msgstr "Włącz mod główny, aby kontynuować"
436
437 #: ../../../src/GameStateTitle.cpp:115
438 msgid "Configuration"
439 msgstr "Konfiguracja"
440
441 #: ../../../src/GameStateTitle.cpp:118
442 msgid "Credits"
443 msgstr "Lista płac"
444
445 #: ../../../src/GameStateTitle.cpp:121
446 msgid "Exit Game"
447 msgstr "Wyjdź z Gry"
448
449 #: ../../../src/InputState.cpp:402
450 msgid "Accept"
451 msgstr "Akceptuj"
452
453 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
454 msgid "Up"
455 msgstr "Góra"
456
457 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
458 msgid "Down"
459 msgstr "Dół"
460
461 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
462 msgid "Left"
463 msgstr "Lewo"
464
465 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
466 msgid "Right"
467 msgstr "Prawo"
468
469 #: ../../../src/InputState.cpp:407
470 msgid "Bar1"
471 msgstr "Pas1"
472
473 #: ../../../src/InputState.cpp:408
474 msgid "Bar2"
475 msgstr "Pas2"
476
477 #: ../../../src/InputState.cpp:409
478 msgid "Bar3"
479 msgstr "Pas3"
480
481 #: ../../../src/InputState.cpp:410
482 msgid "Bar4"
483 msgstr "Pas4"
484
485 #: ../../../src/InputState.cpp:411
486 msgid "Bar5"
487 msgstr "Pas5"
488
489 #: ../../../src/InputState.cpp:412
490 msgid "Bar6"
491 msgstr "Pas6"
492
493 #: ../../../src/InputState.cpp:413
494 msgid "Bar7"
495 msgstr "Pas7"
496
497 #: ../../../src/InputState.cpp:414
498 msgid "Bar8"
499 msgstr "Pas8"
500
501 #: ../../../src/InputState.cpp:415
502 msgid "Bar9"
503 msgstr "Pas9"
504
505 #: ../../../src/InputState.cpp:416
506 msgid "Bar0"
507 msgstr "Pas0"
508
509 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
510 #: ../../../src/MenuCharacter.cpp:54
511 msgid "Character"
512 msgstr "Postać"
513
514 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
515 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
516 msgid "Inventory"
517 msgstr "Ekwipunek"
518
519 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
520 #: ../../../src/MenuPowers.cpp:168
521 msgid "Powers"
522 msgstr "Moce"
523
524 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
525 #: ../../../src/MenuLog.cpp:72
526 msgid "Log"
527 msgstr "Dziennik"
528
529 #: ../../../src/InputState.cpp:421
530 msgid "Main1"
531 msgstr "Główny1"
532
533 #: ../../../src/InputState.cpp:422
534 msgid "Main2"
535 msgstr "Główny2"
536
537 #: ../../../src/InputState.cpp:423
538 msgid "Ctrl"
539 msgstr "Ctrl"
540
541 #: ../../../src/InputState.cpp:424
542 msgid "Shift"
543 msgstr "Shift"
544
545 #: ../../../src/InputState.cpp:425
546 msgid "Alt"
547 msgstr "Alt"
548
549 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
550 msgid "Delete"
551 msgstr "Delete"
552
553 #: ../../../src/InputState.cpp:427
554 msgid "ActionBar Accept"
555 msgstr "Wybór elementu na Pasku Akcji"
556
557 #: ../../../src/InputState.cpp:428
558 msgid "ActionBar Left"
559 msgstr "Kursor na Pasku Akcji w lewo"
560
561 #: ../../../src/InputState.cpp:429
562 msgid "ActionBar Right"
563 msgstr "Kursor na Pasku Akcji w prawo"
564
565 #: ../../../src/InputState.cpp:430
566 msgid "ActionBar Use"
567 msgstr "Użycie elementu na Pasku Akcji"
568
569 #: ../../../src/InputState.cpp:431
570 msgid "Developer Menu"
571 msgstr "Menu deweloperskie"
572
573 #: ../../../src/InputState.cpp:433
574 msgid "Left Mouse"
575 msgstr "Lewy przycisk myszy"
576
577 #: ../../../src/InputState.cpp:434
578 msgid "Middle Mouse"
579 msgstr "Środkowy przycisk myszy"
580
581 #: ../../../src/InputState.cpp:435
582 msgid "Right Mouse"
583 msgstr "Prawy przycisk myszy"
584
585 #: ../../../src/InputState.cpp:436
586 msgid "Wheel Up"
587 msgstr "Kółko w górę"
588
589 #: ../../../src/InputState.cpp:437
590 msgid "Wheel Down"
591 msgstr "Kółko w dół"
592
593 #: ../../../src/InputState.cpp:438
594 msgid "Mouse X1"
595 msgstr "Przycisk myszy X1"
596
597 #: ../../../src/InputState.cpp:439
598 msgid "Mouse X2"
599 msgstr "Przycisk myszy X2"
600
601 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
602 msgid "Unknown Item"
603 msgstr "Nieznany przedmiot"
604
605 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
606 #, c-format
607 msgid "%d%% Speed"
608 msgstr "%d%% Szybkość Ruchu"
609
610 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
611 #, c-format
612 msgid "%d%% Attack Speed"
613 msgstr "%d%% Szybkość Ataku"
614
615 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
616 #: ../../../src/MenuPowers.cpp:833
617 #, c-format
618 msgid "Resistance (%s)"
619 msgstr ""
620
621 #: ../../../src/ItemManager.cpp:684
622 #, c-format
623 msgid "Requires %s"
624 msgstr ""
625
626 #: ../../../src/ItemManager.cpp:733
627 msgid "Quest Item"
628 msgstr "Przedmiot związany z zadaniem"
629
630 #: ../../../src/ItemManager.cpp:760
631 #, c-format
632 msgid "Quality: %s"
633 msgstr "Jakość: %s"
634
635 #: ../../../src/ItemManager.cpp:785
636 #, c-format
637 msgid "Absorb: %d-%d"
638 msgstr "Absorbcja: %d-%d"
639
640 #: ../../../src/ItemManager.cpp:787
641 #, c-format
642 msgid "Absorb: %d"
643 msgstr "Absorbcja: %d"
644
645 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
646 #: ../../../src/MenuPowers.cpp:1134
647 #, c-format
648 msgid "Requires Level %d"
649 msgstr "Wymaga %d poziomu"
650
651 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
652 #: ../../../src/MenuPowers.cpp:1125
653 #, c-format
654 msgid "Requires %s %d"
655 msgstr "Wymaga: %s %d"
656
657 #: ../../../src/ItemManager.cpp:849
658 #, c-format
659 msgid "Requires Class: %s"
660 msgstr "Wymagana Klasa: %s"
661
662 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
663 #, c-format
664 msgid "Buy Price: %d %s"
665 msgstr "Cena kupna: %d %s"
666
667 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
668 #, c-format
669 msgid "Buy Price: %d %s each"
670 msgstr "Cena kupna: %d %s za sztukę"
671
672 #: ../../../src/ItemManager.cpp:886
673 #, c-format
674 msgid "Sell Price: %d %s"
675 msgstr "Wartość sprzedaży: %d %s"
676
677 #: ../../../src/ItemManager.cpp:888
678 #, c-format
679 msgid "Sell Price: %d %s each"
680 msgstr "Wartość sprzedaży: %d %s za sztukę"
681
682 #: ../../../src/ItemManager.cpp:897
683 msgid "Set:"
684 msgstr "Zestaw:"
685
686 #: ../../../src/ItemManager.cpp:904
687 #, c-format
688 msgid "%d items:"
689 msgstr "%d przedmioty:"
690
691 #: ../../../src/ItemManager.cpp:917
692 #, c-format
693 msgid "Press [%s] to use"
694 msgstr "Wciśnij [%s] aby użyć"
695
696 #: ../../../src/ItemManager.cpp:920
697 #, c-format
698 msgid "Press [%s] to read"
699 msgstr "Wciśnij [%s] aby przeczytać"
700
701 #: ../../../src/MenuActionBar.cpp:87
702 msgid "Loot tooltip visibility"
703 msgstr ""
704
705 #: ../../../src/MenuActionBar.cpp:88
706 msgid "Mini-map mode"
707 msgstr ""
708
709 #: ../../../src/MenuActionBar.cpp:89
710 msgid "Always show stat bar labels"
711 msgstr "Pokazuj podpisy na paskach"
712
713 #: ../../../src/MenuActionBar.cpp:90
714 msgid "Show combat text"
715 msgstr "Pokaż tekst podczas walki"
716
717 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
718 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
719 #, c-format
720 msgid "Hotkey: %s"
721 msgstr "Klawisz skrótu: %s"
722
723 #: ../../../src/MenuActionBar.cpp:474
724 #, c-format
725 msgid "Default. Temporarily show all loot tooltips with '%s'."
726 msgstr ""
727
728 #: ../../../src/MenuActionBar.cpp:476
729 #, c-format
730 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
731 msgstr ""
732
733 #: ../../../src/MenuActionBar.cpp:478
734 #, c-format
735 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
736 msgstr ""
737
738 #: ../../../src/MenuActionBar.cpp:482
739 msgid "Visible"
740 msgstr ""
741
742 #: ../../../src/MenuActionBar.cpp:484
743 msgid "Visible (2x zoom)"
744 msgstr ""
745
746 #: ../../../src/MenuActionBar.cpp:486
747 msgid "Hidden"
748 msgstr ""
749
750 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
751 msgid "Enabled"
752 msgstr ""
753
754 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
755 msgid "Disabled"
756 msgstr ""
757
758 #: ../../../src/MenuActionBar.cpp:657
759 msgid "Not enough MP."
760 msgstr ""
761
762 #: ../../../src/MenuActiveEffects.cpp:124
763 #, c-format
764 msgid "x%d"
765 msgstr "x%d"
766
767 #: ../../../src/MenuActiveEffects.cpp:219
768 msgid "Remaining:"
769 msgstr "Pozostało:"
770
771 #: ../../../src/MenuActiveEffects.cpp:225
772 #, c-format
773 msgid "x%d stacks"
774 msgstr "x%d sztuk"
775
776 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
777 msgid "Name"
778 msgstr "Imię"
779
780 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
781 msgid "Level"
782 msgstr "Poziom"
783
784 #: ../../../src/MenuCharacter.cpp:310
785 #, c-format
786 msgid "%d unspent stat point"
787 msgstr ""
788
789 #: ../../../src/MenuCharacter.cpp:313
790 #, c-format
791 msgid "%d unspent stat points"
792 msgstr ""
793
794 #: ../../../src/MenuCharacter.cpp:355
795 #, c-format
796 msgid "Reduces the damage taken from \"%s\" elemental attacks."
797 msgstr ""
798
799 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
800 #, c-format
801 msgid "XP: %d"
802 msgstr "Obecne PD: %d"
803
804 #: ../../../src/MenuCharacter.cpp:367
805 #, c-format
806 msgid "Next: %d"
807 msgstr "Do następnego poziomu: %d PD"
808
809 #: ../../../src/MenuCharacter.cpp:373
810 #, c-format
811 msgid "base (%d), bonus (%d)"
812 msgstr "Podstawa (%d), dodatkowo (%d)"
813
814 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
815 msgid "Related stats:"
816 msgstr "Powiązane statystyki:"
817
818 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
819 #, c-format
820 msgid "Each level grants %d."
821 msgstr "Każdy poziom zapewnia %d punktów."
822
823 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
824 #, c-format
825 msgid "Each point of %s grants %d."
826 msgstr "Każdy punkt atrybutu %s dodaje %d punktów."
928 "Włącza paralaksowe warstwy (nie zawierające podłoża). Wyłączenie tej opcji "
929 "może poprawić wydajność w niektórych przypadkach."
930
931 #: ../../../src/MenuConfig.cpp:512
932 msgid ""
933 "Enables the below setting that controls the screen gamma level. The behavior"
934 " of the gamma setting can vary between platforms."
935 msgstr ""
936 "Odblokowuje poniższą opcję ręcznego ustawienia poziomu gammy. Zachowanie tej"
937 " funkcji może się różnić w zależności od platformy."
938
939 #: ../../../src/MenuConfig.cpp:513
940 msgid ""
941 "Provides additional text for information that is primarily conveyed through "
942 "color."
943 msgstr ""
944 "Wyświetla dodatkową informację, która jest przeważnie przekazywana przez "
945 "kolor."
946
947 #: ../../../src/MenuConfig.cpp:514
948 msgid ""
949 "Some mods will automatically hide the stat bars when they are inactive. "
950 "Disabling this option will keep them displayed at all times."
951 msgstr ""
952 "Niektóre mody będą automatycznie ukrywały paski stanu w czasie "
953 "nieaktywności. Wyłączenie tej opcji spowoduje wyświetlanie ich przez cały "
954 "czas."
955
956 #: ../../../src/MenuConfig.cpp:515
957 msgid ""
958 "When enabled, empty equipment slots will be filled with applicable items "
959 "when they are obtained."
960 msgstr ""
961 "Włączenie tej opcji spowoduje automatyczne zapełnianie pustych miejsc na "
962 "ekwipunek odpowiednimi przedmiotami po ich zdobyciu."
963
964 #: ../../../src/MenuConfig.cpp:516
965 msgid ""
966 "Shows a marker above enemies, allies, and the player when they are obscured "
967 "by tall objects."
968 msgstr ""
969 "Pokazuje znacznik nad przeciwnikami, sojusznikami i graczem, gdy są "
970 "zasłonięci przez wysokie obiekty."
971
972 #: ../../../src/MenuConfig.cpp:517
973 msgid ""
974 "This allows the game to be controlled entirely with the keyboard (or "
975 "joystick)."
976 msgstr ""
977 "Pozwala na sterowanie w grze wyłącznie przy pomocy klawiatury (bądź "
978 "joysticka)."
979
980 #: ../../../src/MenuConfig.cpp:518
981 msgid ""
982 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
983 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
984 "instead of 'Main1'."
985 msgstr ""
986 "Jeśli opcja 'Poruszaj się używając myszki' jest aktywna, to ustawienie "
987 "przypisuje funkcje do przycisków myszy. Po aktywowaniu tej opcji, 'Prawy "
988 "przycisk myszy' będzie używany do poruszania się zamiast 'Lewego przycisku "
989 "myszy'."
990
991 #: ../../../src/MenuConfig.cpp:519
992 msgid ""
993 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
994 "assigned to the movement button can be used by targeting an enemy. If this "
995 "setting is disabled, it is required to use 'Shift' to access the Power "
996 "assigned to the movement button."
997 msgstr ""
998 "Jeśli opcja 'Poruszaj się używając myszki' jest aktywna, to ustawienie "
999 "sprawdza, czy moc przypisana do przycisku ruchu może zostać użyta po "
1000 "nakierowaniu na wroga. Jeśli ta opcja jest wyłączona, należy użyć 'Shift', "
1001 "żeby móc użyć mocy przypisanej do przycisku ruchu."
1002
1003 #: ../../../src/MenuConfig.cpp:520
1004 msgid ""
1005 "The player's attacks will be aimed in the direction of the mouse cursor when"
1006 " this is enabled."
1007 msgstr ""
1008 "Po aktywowaniu tej opcji, Ataki gracza będą kierowane w stronę kursora "
1009 "myszy."
1010
1011 #: ../../../src/MenuConfig.cpp:571
1012 msgid "Active Mods"
1013 msgstr "Aktywne mody"
1014
1015 #: ../../../src/MenuConfig.cpp:580
1016 msgid "Available Mods"
1017 msgstr "Dostępne mody"
1018
1019 #: ../../../src/MenuConfig.cpp:599
1020 msgid "<< Disable"
1021 msgstr "<< Wyłącz"
1022
1023 #: ../../../src/MenuConfig.cpp:605
1024 msgid "Enable >>"
1025 msgstr "Włącz >>"
1026
1027 #: ../../../src/MenuConfig.cpp:1436
1028 msgid "Version:"
1029 msgstr "Wersja:"
1030
1031 #: ../../../src/MenuConfig.cpp:1441
1032 msgid "Game:"
1033 msgstr "Gra:"
1034
1035 #: ../../../src/MenuConfig.cpp:1446
1036 msgid "Engine version:"
1037 msgstr "Wersja silnika:"
1038
1039 #: ../../../src/MenuConfig.cpp:1454
1040 msgid "Requires mods:"
1041 msgstr "Wymaga modów:"
1042
1043 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
1044 msgid "(none)"
1045 msgstr "(brak)"
1046
1047 #: ../../../src/MenuConfig.cpp:1579
1048 msgid "Save & Exit"
1049 msgstr "Zapisz i wyjdź"
8271050
8281051 #: ../../../src/MenuDevConsole.cpp:63
8291052 msgid "Execute"
8361059 #: ../../../src/MenuDevConsole.cpp:141
8371060 #, c-format
8381061 msgid "Use '%s' to inspect with the cursor."
839 msgstr ""
1062 msgstr "Użyj '%s', aby zbadać kursorem myszy."
8401063
8411064 #: ../../../src/MenuDevConsole.cpp:146
8421065 msgid "Arguments with spaces should be enclosed with double quotes. Example:"
8491072
8501073 #: ../../../src/MenuDevConsole.cpp:209 ../../../src/MenuDevConsole.cpp:213
8511074 msgid "px"
852 msgstr ""
1075 msgstr "px"
8531076
8541077 #: ../../../src/MenuDevConsole.cpp:224
8551078 msgid "Distance"
856 msgstr ""
1079 msgstr "Dystans"
8571080
8581081 #: ../../../src/MenuDevConsole.cpp:239 ../../../src/MenuDevConsole.cpp:286
8591082 msgid "Entity"
860 msgstr ""
1083 msgstr "Byt"
8611084
8621085 #: ../../../src/MenuDevConsole.cpp:261 ../../../src/MenuDevConsole.cpp:268
8631086 msgid "none"
864 msgstr ""
1087 msgstr "nic"
8651088
8661089 #: ../../../src/MenuDevConsole.cpp:262 ../../../src/MenuDevConsole.cpp:264
8671090 msgid "wall"
868 msgstr ""
1091 msgstr "ściana"
8691092
8701093 #: ../../../src/MenuDevConsole.cpp:263 ../../../src/MenuDevConsole.cpp:265
8711094 msgid "short wall / pit"
872 msgstr ""
1095 msgstr "krótka ściana / otchłań"
8731096
8741097 #: ../../../src/MenuDevConsole.cpp:266
8751098 msgid "entity"
876 msgstr ""
1099 msgstr "byt"
8771100
8781101 #: ../../../src/MenuDevConsole.cpp:267
8791102 msgid "entity, ally"
880 msgstr ""
1103 msgstr "byt, sojusznik"
8811104
8821105 #: ../../../src/MenuDevConsole.cpp:274
8831106 msgid "Tile"
884 msgstr ""
1107 msgstr "Podłoże"
8851108
8861109 #: ../../../src/MenuDevConsole.cpp:360
8871110 msgid "adds a power to the action bar"
8891112
8901113 #: ../../../src/MenuDevConsole.cpp:361
8911114 msgid "turns on/off the display of the FPS counter"
892 msgstr ""
1115 msgstr "włącza/wyłącza wyświetlanie licznika klatek na sekundę"
8931116
8941117 #: ../../../src/MenuDevConsole.cpp:362
8951118 msgid "turns on/off all of the HUD elements"
9501173
9511174 #: ../../../src/MenuDevConsole.cpp:385
9521175 msgid "Toggled the FPS counter"
953 msgstr ""
1176 msgstr "Włączono licznik klatek na sekundę"
9541177
9551178 #: ../../../src/MenuDevConsole.cpp:534
9561179 msgid "ERROR: Incorrect number of arguments"
9851208 msgid "HINT: Type help"
9861209 msgstr "WSKAZÓWKA: Wpisz help"
9871210
988 #: ../../../src/MenuEnemy.cpp:138
1211 #: ../../../src/MenuEnemy.cpp:162
9891212 #, c-format
9901213 msgid "%s level %d"
9911214 msgstr "%s poziom %d"
9921215
993 #: ../../../src/MenuEnemy.cpp:162
1216 #: ../../../src/MenuEnemy.cpp:186
9941217 msgid "Dead"
9951218 msgstr "Nie żyje"
9961219
997 #: ../../../src/MenuEnemy.cpp:164
1220 #: ../../../src/MenuEnemy.cpp:188
9981221 msgid "Destroyed"
999 msgstr ""
1000
1001 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
1002 msgid "Paused"
1003 msgstr "Pauza"
1004
1005 #: ../../../src/MenuExit.cpp:91
1006 msgid "Save & Exit"
1007 msgstr "Zapisz i wyjdź"
1008
1009 #: ../../../src/MenuExit.cpp:92
1010 msgid "Exit"
1011 msgstr "Wyjdź"
1012
1013 #: ../../../src/MenuExit.cpp:96
1014 msgid "Continue"
1015 msgstr "Kontynuuj"
1016
1017 #: ../../../src/MenuInventory.cpp:73
1018 msgid "Automatically equip items"
1019 msgstr "Automatycznie załóż ekwipunek"
1020
1021 #: ../../../src/MenuInventory.cpp:188
1222 msgstr "Zniszczony"
1223
1224 #: ../../../src/MenuInventory.cpp:177
10221225 #, c-format
10231226 msgid "Lost %d%% of %s."
10241227 msgstr "Utracono %d%% %s."
10251228
1026 #: ../../../src/MenuInventory.cpp:195
1229 #: ../../../src/MenuInventory.cpp:184
10271230 #, c-format
10281231 msgid "Lost %d%% of total XP."
10291232 msgstr "Utracono %d%% PD."
10301233
1031 #: ../../../src/MenuInventory.cpp:200
1234 #: ../../../src/MenuInventory.cpp:189
10321235 #, c-format
10331236 msgid "Lost %d%% of current level XP."
10341237 msgstr "Utracono %d%% PD z obecnego poziomu doświadczenia."
10351238
1036 #: ../../../src/MenuInventory.cpp:226
1239 #: ../../../src/MenuInventory.cpp:215
10371240 #, c-format
10381241 msgid "Lost %s."
10391242 msgstr "Utracono %s."
10401243
1041 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1244 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10421245 #, c-format
10431246 msgid "%d %s"
10441247 msgstr "%d %s"
10451248
1046 #: ../../../src/MenuInventory.cpp:317
1249 #: ../../../src/MenuInventory.cpp:300
10471250 msgid "Pick up item(s):"
10481251 msgstr "Podnieś przedmiot(y):"
10491252
1050 #: ../../../src/MenuInventory.cpp:318
1253 #: ../../../src/MenuInventory.cpp:301
10511254 msgid "Use or equip item:"
10521255 msgstr "Użyj bądź załóż przedmiot:"
10531256
1054 #: ../../../src/MenuInventory.cpp:319
1257 #: ../../../src/MenuInventory.cpp:302
10551258 #, c-format
10561259 msgid "%s modifiers"
10571260 msgstr "Modyfikatory dla %s:"
10581261
1059 #: ../../../src/MenuInventory.cpp:320
1262 #: ../../../src/MenuInventory.cpp:303
10601263 msgid "Select a quantity of item:"
10611264 msgstr "Rozdziel przedmioty:"
10621265
1063 #: ../../../src/MenuInventory.cpp:323
1266 #: ../../../src/MenuInventory.cpp:306
10641267 msgid "Stash item stack:"
10651268 msgstr "Ilość przedmiotów w skrytce:"
10661269
1067 #: ../../../src/MenuInventory.cpp:325
1270 #: ../../../src/MenuInventory.cpp:308
10681271 msgid "Sell item stack:"
10691272 msgstr "Sprzedaj przedmiot:"
10701273
1071 #: ../../../src/MenuInventory.cpp:592
1274 #: ../../../src/MenuInventory.cpp:574
10721275 msgid "You don't have enough of the required item."
10731276 msgstr "Nie masz wystarczająco wymaganych przedmiotów."
10741277
1075 #: ../../../src/MenuInventory.cpp:599
1278 #: ../../../src/MenuInventory.cpp:586
10761279 msgid "You can't use this item right now."
10771280 msgstr "Nie możesz użyć tego przedmiotu w tej chwili."
10781281
1079 #: ../../../src/MenuInventory.cpp:611
1282 #: ../../../src/MenuInventory.cpp:598
10801283 msgid "This item can only be used from the action bar."
10811284 msgstr "Ten przedmiot może być użyty jedynie z paska akcji."
10821285
1083 #: ../../../src/MenuInventory.cpp:729
1286 #: ../../../src/MenuInventory.cpp:716
10841287 msgid "Inventory is full."
10851288 msgstr "Ekwipunek jest pełny."
10861289
1087 #: ../../../src/MenuInventory.cpp:849
1290 #: ../../../src/MenuInventory.cpp:841
10881291 #, c-format
10891292 msgid "Not enough %s."
10901293 msgstr "Za mało %s."
10911294
1092 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1295 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
10931296 msgid "This item can not be sold."
10941297 msgstr "Tego przedmiotu nie można sprzedać."
10951298
11011304 msgid "Quests"
11021305 msgstr "Zadania"
11031306
1104 #: ../../../src/MenuManager.cpp:286
1307 #: ../../../src/MenuManager.cpp:296
11051308 #, c-format
11061309 msgid "XP: %d/%d"
11071310 msgstr "PD: %d/%d"
11081311
1109 #: ../../../src/MenuManager.cpp:827
1312 #: ../../../src/MenuManager.cpp:854
11101313 msgid "This item can not be dropped."
11111314 msgstr "Tego przedmiotu nie można upuścić."
11121315
11141317 msgid "Enter amount:"
11151318 msgstr "Podaj ilość:"
11161319
1117 #: ../../../src/MenuPowers.cpp:787
1320 #: ../../../src/MenuPowers.cpp:786
11181321 msgid "Passive"
11191322 msgstr "Pasywna"
11201323
1121 #: ../../../src/MenuPowers.cpp:792
1324 #: ../../../src/MenuPowers.cpp:791
11221325 #, c-format
11231326 msgid "Costs %d MP"
11241327 msgstr "Koszt: %d PM"
11251328
1126 #: ../../../src/MenuPowers.cpp:796
1329 #: ../../../src/MenuPowers.cpp:795
11271330 #, c-format
11281331 msgid "Costs %d HP"
11291332 msgstr "Koszt: %d PŻ"
11301333
1131 #: ../../../src/MenuPowers.cpp:801
1334 #: ../../../src/MenuPowers.cpp:800
11321335 msgid "Cooldown:"
11331336 msgstr "Odnowienie:"
11341337
1135 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1338 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11361339 msgid "Damage per second"
11371340 msgstr "Obrażenia na sekundę"
11381341
1139 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1342 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11401343 msgid "HP per second"
11411344 msgstr "PŻ na sekundę"
11421345
1143 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1346 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11441347 msgid "MP per second"
11451348 msgstr "PM na sekundę"
11461349
1147 #: ../../../src/MenuPowers.cpp:885
1350 #: ../../../src/MenuPowers.cpp:884
11481351 msgid "Immobilize"
11491352 msgstr "Unieruchomienie"
11501353
1151 #: ../../../src/MenuPowers.cpp:893
1354 #: ../../../src/MenuPowers.cpp:892
11521355 msgid "Immunity"
11531356 msgstr "Niewrażliwość"
11541357
1155 #: ../../../src/MenuPowers.cpp:896
1358 #: ../../../src/MenuPowers.cpp:895
11561359 msgid "Immunity to damage over time"
11571360 msgstr "Niewrażliwość na krwawienie"
11581361
1159 #: ../../../src/MenuPowers.cpp:899
1362 #: ../../../src/MenuPowers.cpp:898
11601363 msgid "Immunity to slow"
11611364 msgstr "Niewrażliwość na spowolnienie"
11621365
1163 #: ../../../src/MenuPowers.cpp:902
1366 #: ../../../src/MenuPowers.cpp:901
11641367 msgid "Immunity to stun"
11651368 msgstr "Niewrażliwość na ogłuszenie"
11661369
1167 #: ../../../src/MenuPowers.cpp:905
1370 #: ../../../src/MenuPowers.cpp:904
11681371 msgid "Immunity to HP steal"
11691372 msgstr "Niewrażliwość na kradzież PŻ"
11701373
1171 #: ../../../src/MenuPowers.cpp:908
1374 #: ../../../src/MenuPowers.cpp:907
11721375 msgid "Immunity to MP steal"
11731376 msgstr "Niewrażliwość na kradzież PM"
11741377
1175 #: ../../../src/MenuPowers.cpp:911
1378 #: ../../../src/MenuPowers.cpp:910
11761379 msgid "Immunity to knockback"
11771380 msgstr "Niewrażliwość na odrzucenie"
11781381
1179 #: ../../../src/MenuPowers.cpp:914
1382 #: ../../../src/MenuPowers.cpp:913
11801383 msgid "Immunity to damage reflection"
11811384 msgstr "Niewrażliwość na odbicie obrażeń"
11821385
1183 #: ../../../src/MenuPowers.cpp:917
1386 #: ../../../src/MenuPowers.cpp:916
11841387 msgid "Stun"
11851388 msgstr "Ogłuszenie"
11861389
1187 #: ../../../src/MenuPowers.cpp:920
1390 #: ../../../src/MenuPowers.cpp:919
11881391 msgid "Automatic revive on death"
11891392 msgstr "Automatyczne ożywienie po śmierci"
11901393
1191 #: ../../../src/MenuPowers.cpp:923
1394 #: ../../../src/MenuPowers.cpp:922
11921395 msgid "Convert"
11931396 msgstr "Nawrócenie"
11941397
1195 #: ../../../src/MenuPowers.cpp:926
1398 #: ../../../src/MenuPowers.cpp:925
11961399 msgid "Fear"
11971400 msgstr "Strach"
11981401
1199 #: ../../../src/MenuPowers.cpp:929
1402 #: ../../../src/MenuPowers.cpp:928
12001403 msgid "Lifespan"
12011404 msgstr "Żywotność"
12021405
1203 #: ../../../src/MenuPowers.cpp:953
1406 #: ../../../src/MenuPowers.cpp:952
12041407 msgid "Magical Shield"
12051408 msgstr "Magiczna Tarcza"
12061409
1207 #: ../../../src/MenuPowers.cpp:982
1410 #: ../../../src/MenuPowers.cpp:981
12081411 msgid "Healing"
12091412 msgstr "Leczenie"
12101413
1211 #: ../../../src/MenuPowers.cpp:985
1414 #: ../../../src/MenuPowers.cpp:984
12121415 msgid "Knockback"
12131416 msgstr "Odrzucenie"
12141417
1215 #: ../../../src/MenuPowers.cpp:1010
1418 #: ../../../src/MenuPowers.cpp:1009
12161419 #, c-format
12171420 msgid "%d%% chance"
12181421 msgstr "%d%% szansy"
12191422
1220 #: ../../../src/MenuPowers.cpp:1062
1423 #: ../../../src/MenuPowers.cpp:1061
12211424 msgid "Base Accuracy"
12221425 msgstr "Bazowa celność"
12231426
1224 #: ../../../src/MenuPowers.cpp:1082
1427 #: ../../../src/MenuPowers.cpp:1081
12251428 msgid "Base Critical Chance"
12261429 msgstr "Bazowa Szansa na Trafienie Krytyczne"
12271430
1228 #: ../../../src/MenuPowers.cpp:1090
1431 #: ../../../src/MenuPowers.cpp:1089
12291432 msgid "Ignores Absorbtion"
12301433 msgstr "Ignoruje Absorbcję"
12311434
1232 #: ../../../src/MenuPowers.cpp:1095
1435 #: ../../../src/MenuPowers.cpp:1094
12331436 msgid "Ignores Avoidance"
12341437 msgstr "Ignoruje szansę na unik"
12351438
1236 #: ../../../src/MenuPowers.cpp:1100
1439 #: ../../../src/MenuPowers.cpp:1099
12371440 #, c-format
12381441 msgid "%d%% Chance to crit slowed targets"
12391442 msgstr "%d%% Szansa na trafienie krytyczne spowolnionych celów"
12401443
1241 #: ../../../src/MenuPowers.cpp:1105
1444 #: ../../../src/MenuPowers.cpp:1104
12421445 #, c-format
12431446 msgid "Elemental Damage (%s)"
1244 msgstr ""
1245
1246 #: ../../../src/MenuPowers.cpp:1114
1447 msgstr "Obrażenia od żywiołu (%s)"
1448
1449 #: ../../../src/MenuPowers.cpp:1113
12471450 #, c-format
12481451 msgid "Requires a %s"
12491452 msgstr "Wymaga %s"
12501453
1251 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1454 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12521455 #, c-format
12531456 msgid "Requires Power: %s"
12541457 msgstr "Wymagana Moc: %s"
12551458
1256 #: ../../../src/MenuPowers.cpp:1163
1459 #: ../../../src/MenuPowers.cpp:1162
12571460 msgid "Click to Unlock (uses 1 Skill Point)"
12581461 msgstr "Kliknij by odblokować (potrzebuje 1 Punktu Umiejętności)"
12591462
1260 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1463 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12611464 msgid "Requires 1 Skill Point"
12621465 msgstr "Wymaga 1 Punktu Umiejętności"
12631466
1264 #: ../../../src/MenuPowers.cpp:1355
1467 #: ../../../src/MenuPowers.cpp:1354
12651468 #, c-format
12661469 msgid "%d unspent skill point"
1267 msgstr ""
1268
1269 #: ../../../src/MenuPowers.cpp:1358
1470 msgstr "%d niewydany punkt umiejętności"
1471
1472 #: ../../../src/MenuPowers.cpp:1357
12701473 #, c-format
12711474 msgid "%d unspent skill points"
1272 msgstr ""
1273
1274 #: ../../../src/MenuPowers.cpp:1388
1475 msgstr "%d niewydane punkty umiejętności"
1476
1477 #: ../../../src/MenuPowers.cpp:1387
12751478 msgid "Next Level:"
12761479 msgstr "Następny poziom:"
12771480
1278 #: ../../../src/MenuStash.cpp:96
1279 msgid "Shared Stash"
1280 msgstr "Wspólna Skrytka"
1281
1282 #: ../../../src/MenuStash.cpp:209
1481 #: ../../../src/MenuStash.cpp:53
1482 msgid "Private"
1483 msgstr ""
1484
1485 #: ../../../src/MenuStash.cpp:55
1486 msgid "Shared"
1487 msgstr ""
1488
1489 #: ../../../src/MenuStash.cpp:103
1490 msgid "Stash"
1491 msgstr "Skrytka"
1492
1493 #: ../../../src/MenuStash.cpp:258
12831494 msgid "Can not store quest items in the stash."
12841495 msgstr "Nie można schować do skrytki przedmiotu związanego z zadaniem."
12851496
1286 #: ../../../src/MenuStash.cpp:219
1497 #: ../../../src/MenuStash.cpp:263
1498 msgid "This item can not be stored in the stash."
1499 msgstr "Ten przedmiot nie może zostać umieszczony w skrytce."
1500
1501 #: ../../../src/MenuStash.cpp:268
1502 msgid "This item can not be stored in the private stash."
1503 msgstr "Ten przedmiot nie może zostać umieszczony w prywatnej skrytce."
1504
1505 #: ../../../src/MenuStash.cpp:273
1506 msgid "This item can not be stored in the shared stash."
1507 msgstr "Ten przedmiot nie może zostać umieszczony we współdzielonej skrytce."
1508
1509 #: ../../../src/MenuStash.cpp:283
12871510 msgid "Stash is full."
12881511 msgstr "Skrytka jest pełna."
12891512
1290 #: ../../../src/MenuTalker.cpp:454
1513 #: ../../../src/MenuStash.cpp:340
1514 #, c-format
1515 msgid "Can not store item in stash: %s"
1516 msgstr "Nie można umieścić przedmiotu w skrytce: %s"
1517
1518 #: ../../../src/MenuTalker.cpp:447
1519 #, c-format
1520 msgid "<dialog node %d>"
1521 msgstr "<wierzchołek dialogu %d>"
1522
1523 #: ../../../src/MenuTalker.cpp:455
12911524 msgid "Trade"
12921525 msgstr "Handel"
12931526
12951528 msgid "Buyback"
12961529 msgstr "Odkup"
12971530
1298 #: ../../../src/MenuVendor.cpp:279
1531 #: ../../../src/MenuVendor.cpp:281
12991532 msgid "Vendor"
13001533 msgstr "Sprzedawca"
13011534
1302 #: ../../../src/PowerManager.cpp:1136
1535 #: ../../../src/PowerManager.cpp:1170
13031536 #, c-format
13041537 msgid "+%d Shield"
13051538 msgstr "+%d Osłony"
13061539
1307 #: ../../../src/PowerManager.cpp:1392
1540 #: ../../../src/PowerManager.cpp:1426
13081541 msgid "You are already transformed, untransform first."
13091542 msgstr "Już jesteś po transformacji, wpierw cofnij transformację."
13101543
1311 #: ../../../src/PowerManager.cpp:1404
1544 #: ../../../src/PowerManager.cpp:1438
13121545 msgid "Could not untransform at this position."
13131546 msgstr "Nie można cofnąć transformacji w tym miejscu."
13141547
13151548 #: ../../../src/QuestLog.cpp:234
13161549 msgid "Completed Quests"
1317 msgstr ""
1318
1319 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1550 msgstr "Ukończone zadania"
1551
1552 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13201553 msgid "Game saved."
13211554 msgstr "Gra zapisana."
13221555
1323 #: ../../../src/SDLInputState.cpp:582
1556 #: ../../../src/SDLInputState.cpp:643
1557 msgid "BkSp"
1558 msgstr ""
1559
1560 #: ../../../src/SDLInputState.cpp:644
1561 msgid "Caps"
1562 msgstr ""
1563
1564 #: ../../../src/SDLInputState.cpp:645
1565 msgid "Del"
1566 msgstr ""
1567
1568 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1569 msgid "End"
1570 msgstr "End"
1571
1572 #: ../../../src/SDLInputState.cpp:648
1573 msgid "Esc"
1574 msgstr ""
1575
1576 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1577 msgid "Home"
1578 msgstr "Home"
1579
1580 #: ../../../src/SDLInputState.cpp:650
1581 msgid "Ins"
1582 msgstr ""
1583
1584 #: ../../../src/SDLInputState.cpp:651
1585 msgid "LAlt"
1586 msgstr ""
1587
1588 #: ../../../src/SDLInputState.cpp:652
1589 msgid "LCtrl"
1590 msgstr ""
1591
1592 #: ../../../src/SDLInputState.cpp:654
1593 msgid "LShft"
1594 msgstr ""
1595
1596 #: ../../../src/SDLInputState.cpp:655
1597 msgid "Num"
1598 msgstr ""
1599
1600 #: ../../../src/SDLInputState.cpp:656
1601 msgid "PgDn"
1602 msgstr ""
1603
1604 #: ../../../src/SDLInputState.cpp:657
1605 msgid "PgUp"
1606 msgstr ""
1607
1608 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1609 msgid "Pause"
1610 msgstr "Pause"
1611
1612 #: ../../../src/SDLInputState.cpp:659
1613 msgid "Print"
1614 msgstr ""
1615
1616 #: ../../../src/SDLInputState.cpp:660
1617 msgid "RAlt"
1618 msgstr ""
1619
1620 #: ../../../src/SDLInputState.cpp:661
1621 msgid "RCtrl"
1622 msgstr ""
1623
1624 #: ../../../src/SDLInputState.cpp:662
1625 msgid "Ret"
1626 msgstr ""
1627
1628 #: ../../../src/SDLInputState.cpp:664
1629 msgid "RShft"
1630 msgstr ""
1631
1632 #: ../../../src/SDLInputState.cpp:665
1633 msgid "SLock"
1634 msgstr ""
1635
1636 #: ../../../src/SDLInputState.cpp:666
1637 msgid "Spc"
1638 msgstr ""
1639
1640 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1641 msgid "Tab"
1642 msgstr "Tab"
1643
1644 #: ../../../src/SDLInputState.cpp:673
13241645 msgid "Backspace"
13251646 msgstr "Backspace"
13261647
1327 #: ../../../src/SDLInputState.cpp:583
1648 #: ../../../src/SDLInputState.cpp:674
13281649 msgid "CapsLock"
13291650 msgstr "CapsLock"
13301651
1331 #: ../../../src/SDLInputState.cpp:586
1332 msgid "End"
1333 msgstr "End"
1334
1335 #: ../../../src/SDLInputState.cpp:587
1652 #: ../../../src/SDLInputState.cpp:678
13361653 msgid "Escape"
13371654 msgstr "Escape"
13381655
1339 #: ../../../src/SDLInputState.cpp:588
1340 msgid "Home"
1341 msgstr "Home"
1342
1343 #: ../../../src/SDLInputState.cpp:589
1656 #: ../../../src/SDLInputState.cpp:680
13441657 msgid "Insert"
13451658 msgstr "Insert"
13461659
1347 #: ../../../src/SDLInputState.cpp:590
1660 #: ../../../src/SDLInputState.cpp:681
13481661 msgid "Left Alt"
13491662 msgstr "Lewy Alt"
13501663
1351 #: ../../../src/SDLInputState.cpp:591
1664 #: ../../../src/SDLInputState.cpp:682
13521665 msgid "Left Ctrl"
13531666 msgstr "Lewy Ctrl"
13541667
1355 #: ../../../src/SDLInputState.cpp:593
1668 #: ../../../src/SDLInputState.cpp:684
13561669 msgid "Left Shift"
13571670 msgstr "Lewy Shift"
13581671
1359 #: ../../../src/SDLInputState.cpp:594
1672 #: ../../../src/SDLInputState.cpp:685
13601673 msgid "NumLock"
13611674 msgstr "NumLock"
13621675
1363 #: ../../../src/SDLInputState.cpp:595
1676 #: ../../../src/SDLInputState.cpp:686
13641677 msgid "PageDown"
13651678 msgstr "PageDown"
13661679
1367 #: ../../../src/SDLInputState.cpp:596
1680 #: ../../../src/SDLInputState.cpp:687
13681681 msgid "PageUp"
13691682 msgstr "PageUp"
13701683
1371 #: ../../../src/SDLInputState.cpp:597
1372 msgid "Pause"
1373 msgstr "Pause"
1374
1375 #: ../../../src/SDLInputState.cpp:598
1684 #: ../../../src/SDLInputState.cpp:689
13761685 msgid "PrintScreen"
13771686 msgstr "PrintScreen"
13781687
1379 #: ../../../src/SDLInputState.cpp:599
1688 #: ../../../src/SDLInputState.cpp:690
13801689 msgid "Right Alt"
13811690 msgstr "Prawy Alt"
13821691
1383 #: ../../../src/SDLInputState.cpp:600
1692 #: ../../../src/SDLInputState.cpp:691
13841693 msgid "Right Ctrl"
13851694 msgstr "Prawy Ctrl"
13861695
1387 #: ../../../src/SDLInputState.cpp:601
1696 #: ../../../src/SDLInputState.cpp:692
13881697 msgid "Return"
13891698 msgstr "Return"
13901699
1391 #: ../../../src/SDLInputState.cpp:603
1700 #: ../../../src/SDLInputState.cpp:694
13921701 msgid "Right Shift"
13931702 msgstr "Prawy Shift"
13941703
1395 #: ../../../src/SDLInputState.cpp:604
1704 #: ../../../src/SDLInputState.cpp:695
13961705 msgid "ScrollLock"
13971706 msgstr "ScrollLock"
13981707
1399 #: ../../../src/SDLInputState.cpp:605
1708 #: ../../../src/SDLInputState.cpp:696
14001709 msgid "Space"
14011710 msgstr "Space"
14021711
1403 #: ../../../src/SDLInputState.cpp:606
1404 msgid "Tab"
1405 msgstr "Tab"
1406
1407 #: ../../../src/SDLInputState.cpp:620
1712 #: ../../../src/SDLInputState.cpp:710
1713 #, c-format
1714 msgid "M%d"
1715 msgstr ""
1716
1717 #: ../../../src/SDLInputState.cpp:716
14081718 #, c-format
14091719 msgid "Mouse %d"
14101720 msgstr "Przycisk myszy %d"
14111721
1412 #: ../../../src/SDLInputState.cpp:628
1722 #: ../../../src/SDLInputState.cpp:726
1723 #, c-format
1724 msgid "JX%d-"
1725 msgstr ""
1726
1727 #: ../../../src/SDLInputState.cpp:728
14131728 #, c-format
14141729 msgid "Axis %d -"
14151730 msgstr "Oś %d -"
14161731
1417 #: ../../../src/SDLInputState.cpp:630
1732 #: ../../../src/SDLInputState.cpp:732
1733 #, c-format
1734 msgid "JX%d+"
1735 msgstr ""
1736
1737 #: ../../../src/SDLInputState.cpp:734
14181738 #, c-format
14191739 msgid "Axis %d +"
14201740 msgstr "Oś %d +"
14211741
1422 #: ../../../src/SDLInputState.cpp:633
1742 #: ../../../src/SDLInputState.cpp:739
1743 #, c-format
1744 msgid "JB%d"
1745 msgstr ""
1746
1747 #: ../../../src/SDLInputState.cpp:741
14231748 #, c-format
14241749 msgid "Button %d"
14251750 msgstr "Klawisz %d"
14261751
1427 #: ../../../src/SDLInputState.cpp:637
1428 msgid "(none)"
1429 msgstr "(brak)"
1430
1431 #: ../../../src/SDLInputState.cpp:677
1752 #: ../../../src/SDLInputState.cpp:788
14321753 msgid "Touch control D-Pad"
1433 msgstr ""
1434
1435 #: ../../../src/SDLInputState.cpp:701
1754 msgstr "Dotykowy krzyżak ruchu"
1755
1756 #: ../../../src/SDLInputState.cpp:812
14361757 msgid "Touch control buttons"
1437 msgstr ""
1438
1439 #: ../../../src/SDLInputState.cpp:716
1758 msgstr "Dotykowe przyciski akcji"
1759
1760 #: ../../../src/SDLInputState.cpp:827
14401761 msgid "Tap"
14411762 msgstr "Tapnięcie"
14421763
1443 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1444 #: ../../../src/SDLInputState.cpp:768
1764 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1765 #, c-format
1766 msgid "Can not bind: %s"
1767 msgstr "Nie można przypisać: %s"
1768
1769 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1770 #: ../../../src/SDLInputState.cpp:901
14451771 #, c-format
14461772 msgid "'%s' is no longer bound to:"
14471773 msgstr "'%s' już nie jest przypisany do:"
14521778
14531779 #: ../../../src/Stats.cpp:39
14541780 msgid "Total amount of HP."
1455 msgstr ""
1781 msgstr "Suma PŻ."
14561782
14571783 #: ../../../src/Stats.cpp:43
14581784 msgid "HP Regen"
14681794
14691795 #: ../../../src/Stats.cpp:49
14701796 msgid "Total amount of MP."
1471 msgstr ""
1797 msgstr "Suma PM."
14721798
14731799 #: ../../../src/Stats.cpp:53
14741800 msgid "MP Regen"
14871813 "Accuracy rating. The enemy's Avoidance rating is subtracted from this value "
14881814 "to calculate your likeliness to land a direct hit."
14891815 msgstr ""
1816 "Wartość celności. Wartość Uniku wroga jest odejmowana od tej wartości, aby "
1817 "wyliczyć prawdopodobieństwo wyprowadzenia celnego ciosu."
14901818
14911819 #: ../../../src/Stats.cpp:63
14921820 msgid "Avoidance"
14971825 "Avoidance rating. This value is subtracted from the enemy's Accuracy rating "
14981826 "to calculate their likeliness to land a direct hit."
14991827 msgstr ""
1828 "Wartość uniku. Ta wartość jest odejmowana od wartości Celności wroga, aby "
1829 "wyliczyć prawdopodobieństwo otrzymania od niego celnego ciosu."
15001830
15011831 #: ../../../src/Stats.cpp:68
15021832 msgid "Absorb Min"
15041834
15051835 #: ../../../src/Stats.cpp:69 ../../../src/Stats.cpp:74
15061836 msgid "Reduces the amount of damage taken."
1507 msgstr ""
1837 msgstr "Zmniejsza otrzymywane obrażenia o podaną liczbę."
15081838
15091839 #: ../../../src/Stats.cpp:73
15101840 msgid "Absorb Max"
15161846
15171847 #: ../../../src/Stats.cpp:79
15181848 msgid "Chance for an attack to do extra damage."
1519 msgstr ""
1849 msgstr "Szansa na zadanie dodatkowych obrażeń podczas ataku."
15201850
15211851 #: ../../../src/Stats.cpp:83
15221852 msgid "Bonus XP"
16041934 msgid "k"
16051935 msgstr "k"
16061936
1607 #: ../../../src/Utils.cpp:580
1937 #: ../../../src/Utils.cpp:616
16081938 #, c-format
16091939 msgid "%s second"
16101940 msgstr "%s sekunda"
16111941
1612 #: ../../../src/Utils.cpp:583
1942 #: ../../../src/Utils.cpp:619
16131943 #, c-format
16141944 msgid "%s seconds"
16151945 msgstr "%s sekund"
77 msgstr ""
88 "Project-Id-Version: PACKAGE VERSION\n"
99 "Report-Msgid-Bugs-To: \n"
10 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
10 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1111 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1212 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1313 "Language-Team: LANGUAGE <LL@li.org>\n"
1616 "Content-Type: text/plain; charset=UTF-8\n"
1717 "Content-Transfer-Encoding: 8bit\n"
1818
19 #: ../../../src/Avatar.cpp:367
19 #: ../../../src/Avatar.cpp:387
20 msgid "Your health is low!"
21 msgstr ""
22
23 #: ../../../src/Avatar.cpp:419
2024 #, c-format
2125 msgid "Congratulations, you have reached level %d!"
2226 msgstr ""
2327
24 #: ../../../src/Avatar.cpp:369
25 msgid "You may increase one attribute through the Character Menu."
26 msgstr ""
27
28 #: ../../../src/Avatar.cpp:583
28 #: ../../../src/Avatar.cpp:421
29 msgid "You may increase one or more attributes through the Character Menu."
30 msgstr ""
31
32 #: ../../../src/Avatar.cpp:425
33 msgid "You may unlock one or more abilities through the Powers Menu."
34 msgstr ""
35
36 #: ../../../src/Avatar.cpp:692
2937 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3038 msgstr ""
3139
32 #: ../../../src/Avatar.cpp:589
40 #: ../../../src/Avatar.cpp:698
3341 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
3442 msgstr ""
3543
36 #: ../../../src/Avatar.cpp:839
44 #: ../../../src/Avatar.cpp:949
3745 msgid "Transformation expired. You have been moved back to a safe place."
3846 msgstr ""
3947
4250 msgid "%d %s removed."
4351 msgstr ""
4452
45 #: ../../../src/CampaignManager.cpp:162
53 #: ../../../src/CampaignManager.cpp:165
54 #, c-format
55 msgid "%s x%d removed."
56 msgstr ""
57
58 #: ../../../src/CampaignManager.cpp:167
4659 #, c-format
4760 msgid "%s removed."
4861 msgstr ""
4962
50 #: ../../../src/CampaignManager.cpp:175
63 #: ../../../src/CampaignManager.cpp:180
5164 #, c-format
5265 msgid "You receive %s."
5366 msgstr ""
5467
55 #: ../../../src/CampaignManager.cpp:177
68 #: ../../../src/CampaignManager.cpp:182
5669 #, c-format
5770 msgid "You receive %s x%d."
5871 msgstr ""
5972
60 #: ../../../src/CampaignManager.cpp:186
73 #: ../../../src/CampaignManager.cpp:191
6174 #, c-format
6275 msgid "You receive %d %s."
6376 msgstr ""
6477
65 #: ../../../src/CampaignManager.cpp:195
78 #: ../../../src/CampaignManager.cpp:200
6679 #, c-format
6780 msgid "You receive %d XP."
6881 msgstr ""
6982
70 #: ../../../src/CampaignManager.cpp:201
83 #: ../../../src/CampaignManager.cpp:206
7184 msgid "HP restored."
7285 msgstr ""
7386
74 #: ../../../src/CampaignManager.cpp:205
87 #: ../../../src/CampaignManager.cpp:210
7588 msgid "MP restored."
7689 msgstr ""
7790
78 #: ../../../src/CampaignManager.cpp:210
91 #: ../../../src/CampaignManager.cpp:215
7992 msgid "HP and MP restored."
8093 msgstr ""
8194
82 #: ../../../src/CampaignManager.cpp:214
95 #: ../../../src/CampaignManager.cpp:219
8396 msgid "Negative effects removed."
8497 msgstr ""
8598
86 #: ../../../src/CampaignManager.cpp:220
99 #: ../../../src/CampaignManager.cpp:225
87100 msgid "HP and MP restored, negative effects removed"
88101 msgstr ""
89102
101114 "The default renderer that is often faster than the SDL software renderer."
102115 msgstr ""
103116
104 #: ../../../src/EngineSettings.cpp:561
117 #: ../../../src/EngineSettings.cpp:572
105118 msgid "Adventurer"
106119 msgstr ""
107120
108 #: ../../../src/Entity.cpp:511
121 #: ../../../src/Entity.cpp:522
109122 msgid "miss"
110123 msgstr ""
111124
112 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
113 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
125 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
126 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
114127 #, c-format
115128 msgid "+%d HP"
116129 msgstr ""
117130
118 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
119 #: ../../../src/StatBlock.cpp:822
131 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
132 #: ../../../src/StatBlock.cpp:830
120133 #, c-format
121134 msgid "+%d MP"
122135 msgstr ""
123136
124 #: ../../../src/EventManager.cpp:738
137 #: ../../../src/EventManager.cpp:782
125138 msgid "Unknown destination"
126139 msgstr ""
127140
128 #: ../../../src/GameStateConfigBase.cpp:89
129 #: ../../../src/GameStateConfigBase.cpp:110
141 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
142 msgid "Loading..."
143 msgstr ""
144
145 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
146 msgid "Delete Save"
147 msgstr ""
148
149 #: ../../../src/GameStateLoad.cpp:90
150 msgid "Delete this save?"
151 msgstr ""
152
153 #: ../../../src/GameStateLoad.cpp:92
154 msgid "Exit to Title"
155 msgstr ""
156
157 #: ../../../src/GameStateLoad.cpp:95
158 msgid "New Game"
159 msgstr ""
160
161 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
162 msgid "Choose a Slot"
163 msgstr ""
164
165 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
166 msgid "Enable a story mod to continue"
167 msgstr ""
168
169 #: ../../../src/GameStateLoad.cpp:597
170 msgid "Load Game"
171 msgstr ""
172
173 #: ../../../src/GameStateLoad.cpp:706
174 msgid "Entering game world..."
175 msgstr ""
176
177 #: ../../../src/GameStateLoad.cpp:709
178 msgid "Loading saved game..."
179 msgstr ""
180
181 #: ../../../src/GameStateLoad.cpp:742
182 msgid "Invalid save"
183 msgstr ""
184
185 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
186 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
187 #: ../../../src/MenuPowers.cpp:1543
188 #, c-format
189 msgid "Level %d"
190 msgstr ""
191
192 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
193 #: ../../../src/MenuConfig.cpp:244
194 msgid "Cancel"
195 msgstr ""
196
197 #: ../../../src/GameStateNew.cpp:68
198 msgid "Create"
199 msgstr ""
200
201 #: ../../../src/GameStateNew.cpp:76
202 msgid "Randomize"
203 msgstr ""
204
205 #: ../../../src/GameStateNew.cpp:92
206 msgid "Choose a Portrait"
207 msgstr ""
208
209 #: ../../../src/GameStateNew.cpp:96
210 msgid "Choose a Name"
211 msgstr ""
212
213 #: ../../../src/GameStateNew.cpp:100
214 msgid "Permadeath?"
215 msgstr ""
216
217 #: ../../../src/GameStateNew.cpp:104
218 msgid "Choose a Class"
219 msgstr ""
220
221 #: ../../../src/GameStateTitle.cpp:107
222 msgid "Play Game"
223 msgstr ""
224
225 #: ../../../src/GameStateTitle.cpp:110
226 msgid "Enable a core mod to continue"
227 msgstr ""
228
229 #: ../../../src/GameStateTitle.cpp:114
230 msgid "Configuration"
231 msgstr ""
232
233 #: ../../../src/GameStateTitle.cpp:117
234 msgid "Credits"
235 msgstr ""
236
237 #: ../../../src/GameStateTitle.cpp:120
238 msgid "Exit Game"
239 msgstr ""
240
241 #: ../../../src/InputState.cpp:407
242 msgid "Accept"
243 msgstr ""
244
245 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
246 #: ../../../src/SDLInputState.cpp:698
247 msgid "Up"
248 msgstr ""
249
250 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
251 #: ../../../src/SDLInputState.cpp:676
252 msgid "Down"
253 msgstr ""
254
255 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
256 #: ../../../src/SDLInputState.cpp:683
257 msgid "Left"
258 msgstr ""
259
260 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
261 #: ../../../src/SDLInputState.cpp:693
262 msgid "Right"
263 msgstr ""
264
265 #: ../../../src/InputState.cpp:412
266 msgid "Bar1"
267 msgstr ""
268
269 #: ../../../src/InputState.cpp:413
270 msgid "Bar2"
271 msgstr ""
272
273 #: ../../../src/InputState.cpp:414
274 msgid "Bar3"
275 msgstr ""
276
277 #: ../../../src/InputState.cpp:415
278 msgid "Bar4"
279 msgstr ""
280
281 #: ../../../src/InputState.cpp:416
282 msgid "Bar5"
283 msgstr ""
284
285 #: ../../../src/InputState.cpp:417
286 msgid "Bar6"
287 msgstr ""
288
289 #: ../../../src/InputState.cpp:418
290 msgid "Bar7"
291 msgstr ""
292
293 #: ../../../src/InputState.cpp:419
294 msgid "Bar8"
295 msgstr ""
296
297 #: ../../../src/InputState.cpp:420
298 msgid "Bar9"
299 msgstr ""
300
301 #: ../../../src/InputState.cpp:421
302 msgid "Bar0"
303 msgstr ""
304
305 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
306 #: ../../../src/MenuCharacter.cpp:54
307 msgid "Character"
308 msgstr ""
309
310 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
311 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
312 msgid "Inventory"
313 msgstr ""
314
315 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
316 #: ../../../src/MenuPowers.cpp:167
317 msgid "Powers"
318 msgstr ""
319
320 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
321 #: ../../../src/MenuLog.cpp:72
322 msgid "Log"
323 msgstr ""
324
325 #: ../../../src/InputState.cpp:426
326 msgid "Main1"
327 msgstr ""
328
329 #: ../../../src/InputState.cpp:427
330 msgid "Main2"
331 msgstr ""
332
333 #: ../../../src/InputState.cpp:428
334 msgid "Ctrl"
335 msgstr ""
336
337 #: ../../../src/InputState.cpp:429
338 msgid "Shift"
339 msgstr ""
340
341 #: ../../../src/InputState.cpp:430
342 msgid "Alt"
343 msgstr ""
344
345 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
346 msgid "Delete"
347 msgstr ""
348
349 #: ../../../src/InputState.cpp:432
350 msgid "ActionBar Accept"
351 msgstr ""
352
353 #: ../../../src/InputState.cpp:433
354 msgid "ActionBar Left"
355 msgstr ""
356
357 #: ../../../src/InputState.cpp:434
358 msgid "ActionBar Right"
359 msgstr ""
360
361 #: ../../../src/InputState.cpp:435
362 msgid "ActionBar Use"
363 msgstr ""
364
365 #: ../../../src/InputState.cpp:436
366 msgid "Developer Menu"
367 msgstr ""
368
369 #: ../../../src/InputState.cpp:438
370 msgid "Left Mouse"
371 msgstr ""
372
373 #: ../../../src/InputState.cpp:439
374 msgid "Middle Mouse"
375 msgstr ""
376
377 #: ../../../src/InputState.cpp:440
378 msgid "Right Mouse"
379 msgstr ""
380
381 #: ../../../src/InputState.cpp:441
382 msgid "Wheel Up"
383 msgstr ""
384
385 #: ../../../src/InputState.cpp:442
386 msgid "Wheel Down"
387 msgstr ""
388
389 #: ../../../src/InputState.cpp:443
390 msgid "Mouse X1"
391 msgstr ""
392
393 #: ../../../src/InputState.cpp:444
394 msgid "Mouse X2"
395 msgstr ""
396
397 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
398 msgid "Unknown Item"
399 msgstr ""
400
401 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
402 #, c-format
403 msgid "%d%% Speed"
404 msgstr ""
405
406 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
407 #, c-format
408 msgid "%d%% Attack Speed"
409 msgstr ""
410
411 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
412 #: ../../../src/MenuPowers.cpp:832
413 #, c-format
414 msgid "Resistance (%s)"
415 msgstr ""
416
417 #: ../../../src/ItemManager.cpp:714
418 #, c-format
419 msgid "Requires %s"
420 msgstr ""
421
422 #: ../../../src/ItemManager.cpp:763
423 msgid "Quest Item"
424 msgstr ""
425
426 #: ../../../src/ItemManager.cpp:790
427 #, c-format
428 msgid "Quality: %s"
429 msgstr ""
430
431 #: ../../../src/ItemManager.cpp:815
432 #, c-format
433 msgid "Absorb: %d-%d"
434 msgstr ""
435
436 #: ../../../src/ItemManager.cpp:817
437 #, c-format
438 msgid "Absorb: %d"
439 msgstr ""
440
441 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
442 #: ../../../src/MenuPowers.cpp:1133
443 #, c-format
444 msgid "Requires Level %d"
445 msgstr ""
446
447 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
448 #: ../../../src/MenuPowers.cpp:1124
449 #, c-format
450 msgid "Requires %s %d"
451 msgstr ""
452
453 #: ../../../src/ItemManager.cpp:879
454 #, c-format
455 msgid "Requires Class: %s"
456 msgstr ""
457
458 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
459 #, c-format
460 msgid "Buy Price: %d %s"
461 msgstr ""
462
463 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
464 #, c-format
465 msgid "Buy Price: %d %s each"
466 msgstr ""
467
468 #: ../../../src/ItemManager.cpp:916
469 #, c-format
470 msgid "Sell Price: %d %s"
471 msgstr ""
472
473 #: ../../../src/ItemManager.cpp:918
474 #, c-format
475 msgid "Sell Price: %d %s each"
476 msgstr ""
477
478 #: ../../../src/ItemManager.cpp:927
479 msgid "Set:"
480 msgstr ""
481
482 #: ../../../src/ItemManager.cpp:934
483 #, c-format
484 msgid "%d items:"
485 msgstr ""
486
487 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
488 #, c-format
489 msgid "Press [%s] to use"
490 msgstr ""
491
492 #: ../../../src/ItemManager.cpp:951
493 #, c-format
494 msgid "Press [%s] to read"
495 msgstr ""
496
497 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
498 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
499 #, c-format
500 msgid "Hotkey: %s"
501 msgstr ""
502
503 #: ../../../src/MenuActionBar.cpp:599
504 msgid "Not enough MP."
505 msgstr ""
506
507 #: ../../../src/MenuActiveEffects.cpp:124
508 #, c-format
509 msgid "x%d"
510 msgstr ""
511
512 #: ../../../src/MenuActiveEffects.cpp:219
513 msgid "Remaining:"
514 msgstr ""
515
516 #: ../../../src/MenuActiveEffects.cpp:225
517 #, c-format
518 msgid "x%d stacks"
519 msgstr ""
520
521 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
522 msgid "Name"
523 msgstr ""
524
525 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
526 msgid "Level"
527 msgstr ""
528
529 #: ../../../src/MenuCharacter.cpp:310
530 #, c-format
531 msgid "%d unspent stat point"
532 msgstr ""
533
534 #: ../../../src/MenuCharacter.cpp:313
535 #, c-format
536 msgid "%d unspent stat points"
537 msgstr ""
538
539 #: ../../../src/MenuCharacter.cpp:355
540 #, c-format
541 msgid "Reduces the damage taken from \"%s\" elemental attacks."
542 msgstr ""
543
544 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
545 #, c-format
546 msgid "XP: %d"
547 msgstr ""
548
549 #: ../../../src/MenuCharacter.cpp:367
550 #, c-format
551 msgid "Next: %d"
552 msgstr ""
553
554 #: ../../../src/MenuCharacter.cpp:373
555 #, c-format
556 msgid "base (%d), bonus (%d)"
557 msgstr ""
558
559 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
560 msgid "Related stats:"
561 msgstr ""
562
563 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
564 #, c-format
565 msgid "Each level grants %d."
566 msgstr ""
567
568 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
569 #, c-format
570 msgid "Each point of %s grants %d."
571 msgstr ""
572
573 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
574 msgid "Clear"
575 msgstr ""
576
577 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
578 msgid "Assign:"
579 msgstr ""
580
581 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
130582 msgid "Defaults"
131583 msgstr ""
132584
133 #: ../../../src/GameStateConfigBase.cpp:89
585 #: ../../../src/MenuConfig.cpp:123
134586 msgid "Reset ALL settings?"
135587 msgstr ""
136588
137 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
589 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
138590 msgid "OK"
139591 msgstr ""
140592
141 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
142 #: ../../../src/InputState.cpp:401
143 msgid "Cancel"
144 msgstr ""
145
146 #: ../../../src/GameStateConfigBase.cpp:160
147 #: ../../../src/GameStateConfigDesktop.cpp:130
593 #: ../../../src/MenuConfig.cpp:246
594 msgid "Continue"
595 msgstr ""
596
597 #: ../../../src/MenuConfig.cpp:248
598 msgid "Save Game"
599 msgstr ""
600
601 #: ../../../src/MenuConfig.cpp:291
602 msgid "Default"
603 msgstr ""
604
605 #: ../../../src/MenuConfig.cpp:291
606 msgid ""
607 "Show all loot tooltips, except for those that would be obscured by the "
608 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
609 msgstr ""
610
611 #: ../../../src/MenuConfig.cpp:292
612 msgid "Show all"
613 msgstr ""
614
615 #: ../../../src/MenuConfig.cpp:292
616 msgid ""
617 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
618 msgstr ""
619
620 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
621 msgid "Hidden"
622 msgstr ""
623
624 #: ../../../src/MenuConfig.cpp:293
625 msgid ""
626 "Always hide loot tooltips, except for when a piece of loot is hovered with "
627 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
628 msgstr ""
629
630 #: ../../../src/MenuConfig.cpp:296
631 msgid "Visible"
632 msgstr ""
633
634 #: ../../../src/MenuConfig.cpp:297
635 msgid "Visible (2x zoom)"
636 msgstr ""
637
638 #: ../../../src/MenuConfig.cpp:301
639 msgid ""
640 "Controls the type of warning to be activated when the player is below the "
641 "low health threshold."
642 msgstr ""
643
644 #: ../../../src/MenuConfig.cpp:302
645 msgid "- Display a message"
646 msgstr ""
647
648 #: ../../../src/MenuConfig.cpp:303
649 msgid "- Play a sound"
650 msgstr ""
651
652 #: ../../../src/MenuConfig.cpp:304
653 msgid "- Change the cursor"
654 msgstr ""
655
656 #: ../../../src/MenuConfig.cpp:306
657 msgid "Disabled"
658 msgstr ""
659
660 #: ../../../src/MenuConfig.cpp:307
661 msgid "All"
662 msgstr ""
663
664 #: ../../../src/MenuConfig.cpp:308
665 msgid "Message & Cursor"
666 msgstr ""
667
668 #: ../../../src/MenuConfig.cpp:309
669 msgid "Message & Sound"
670 msgstr ""
671
672 #: ../../../src/MenuConfig.cpp:310
673 msgid "Sound & Cursor"
674 msgstr ""
675
676 #: ../../../src/MenuConfig.cpp:311
677 msgid "Message"
678 msgstr ""
679
680 #: ../../../src/MenuConfig.cpp:312
681 msgid "Cursor"
682 msgstr ""
683
684 #: ../../../src/MenuConfig.cpp:313
685 msgid "Sound"
686 msgstr ""
687
688 #: ../../../src/MenuConfig.cpp:319
689 msgid ""
690 "When the player's health drops below the given threshold, the low health "
691 "notifications are triggered if one or more of them is enabled."
692 msgstr ""
693
694 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
695 msgid "Exit"
696 msgstr ""
697
698 #: ../../../src/MenuConfig.cpp:333
699 msgid "Video"
700 msgstr ""
701
702 #: ../../../src/MenuConfig.cpp:334
148703 msgid "Audio"
149704 msgstr ""
150705
151 #: ../../../src/GameStateConfigBase.cpp:161
152 #: ../../../src/GameStateConfigDesktop.cpp:131
706 #: ../../../src/MenuConfig.cpp:335
153707 msgid "Interface"
154708 msgstr ""
155709
156 #: ../../../src/GameStateConfigBase.cpp:162
157 #: ../../../src/GameStateConfigDesktop.cpp:134
710 #: ../../../src/MenuConfig.cpp:336
711 msgid "Input"
712 msgstr ""
713
714 #: ../../../src/MenuConfig.cpp:337
715 msgid "Keybindings"
716 msgstr ""
717
718 #: ../../../src/MenuConfig.cpp:338
158719 msgid "Mods"
159720 msgstr ""
160721
161 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
722 #: ../../../src/MenuConfig.cpp:350
723 msgid "Paused"
724 msgstr ""
725
726 #: ../../../src/MenuConfig.cpp:353
727 msgid "Time Played"
728 msgstr ""
729
730 #: ../../../src/MenuConfig.cpp:359
731 msgid "Renderer"
732 msgstr ""
733
734 #: ../../../src/MenuConfig.cpp:360
735 msgid "Full Screen Mode"
736 msgstr ""
737
738 #: ../../../src/MenuConfig.cpp:361
739 msgid "Hardware surfaces"
740 msgstr ""
741
742 #: ../../../src/MenuConfig.cpp:362
743 msgid "V-Sync"
744 msgstr ""
745
746 #: ../../../src/MenuConfig.cpp:363
747 msgid "Texture Filtering"
748 msgstr ""
749
750 #: ../../../src/MenuConfig.cpp:364
751 msgid "DPI scaling"
752 msgstr ""
753
754 #: ../../../src/MenuConfig.cpp:365
755 msgid "Parallax Layers"
756 msgstr ""
757
758 #: ../../../src/MenuConfig.cpp:366
759 msgid "Allow changing gamma"
760 msgstr ""
761
762 #: ../../../src/MenuConfig.cpp:367
763 msgid "Gamma"
764 msgstr ""
765
766 #: ../../../src/MenuConfig.cpp:369
767 msgid "Sound Volume"
768 msgstr ""
769
770 #: ../../../src/MenuConfig.cpp:370
162771 msgid "Music Volume"
163772 msgstr ""
164773
165 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
166 msgid "Sound Volume"
167 msgstr ""
168
169 #: ../../../src/GameStateConfigBase.cpp:257
774 #: ../../../src/MenuConfig.cpp:372
170775 msgid "Language"
171776 msgstr ""
172777
173 #: ../../../src/GameStateConfigBase.cpp:266
778 #: ../../../src/MenuConfig.cpp:373
174779 msgid "Show FPS"
175780 msgstr ""
176781
177 #: ../../../src/GameStateConfigBase.cpp:270
782 #: ../../../src/MenuConfig.cpp:374
783 msgid "Hardware mouse cursor"
784 msgstr ""
785
786 #: ../../../src/MenuConfig.cpp:375
178787 msgid "Colorblind Mode"
179788 msgstr ""
180789
181 #: ../../../src/GameStateConfigBase.cpp:274
182 msgid "Hardware mouse cursor"
183 msgstr ""
184
185 #: ../../../src/GameStateConfigBase.cpp:278
790 #: ../../../src/MenuConfig.cpp:376
186791 msgid "Developer Mode"
187792 msgstr ""
188793
189 #: ../../../src/GameStateConfigBase.cpp:282
794 #: ../../../src/MenuConfig.cpp:377
190795 msgid "Subtitles"
191796 msgstr ""
192797
193 #: ../../../src/GameStateConfigBase.cpp:286
194 msgid "Active Mods"
195 msgstr ""
196
197 #: ../../../src/GameStateConfigBase.cpp:295
198 msgid "Available Mods"
199 msgstr ""
200
201 #: ../../../src/GameStateConfigBase.cpp:314
202 msgid "<< Disable"
203 msgstr ""
204
205 #: ../../../src/GameStateConfigBase.cpp:320
206 msgid "Enable >>"
207 msgstr ""
208
209 #: ../../../src/GameStateConfigBase.cpp:873
210 msgid "Version:"
211 msgstr ""
212
213 #: ../../../src/GameStateConfigBase.cpp:878
214 msgid "Game:"
215 msgstr ""
216
217 #: ../../../src/GameStateConfigBase.cpp:883
218 msgid "Engine version:"
219 msgstr ""
220
221 #: ../../../src/GameStateConfigBase.cpp:891
222 msgid "Requires mods:"
223 msgstr ""
224
225 #: ../../../src/GameStateConfigDesktop.cpp:83
226 #: ../../../src/GameStateConfigDesktop.cpp:751
227 msgid "Clear"
228 msgstr ""
229
230 #: ../../../src/GameStateConfigDesktop.cpp:83
231 #: ../../../src/GameStateConfigDesktop.cpp:749
232 msgid "Assign:"
233 msgstr ""
234
235 #: ../../../src/GameStateConfigDesktop.cpp:128
236 msgid "Video"
237 msgstr ""
238
239 #: ../../../src/GameStateConfigDesktop.cpp:132
240 msgid "Input"
241 msgstr ""
242
243 #: ../../../src/GameStateConfigDesktop.cpp:133
244 msgid "Keybindings"
245 msgstr ""
246
247 #: ../../../src/GameStateConfigDesktop.cpp:188
798 #: ../../../src/MenuConfig.cpp:378
799 msgid "Loot tooltip visibility"
800 msgstr ""
801
802 #: ../../../src/MenuConfig.cpp:379
803 msgid "Mini-map mode"
804 msgstr ""
805
806 #: ../../../src/MenuConfig.cpp:380
807 msgid "Always show stat bar labels"
808 msgstr ""
809
810 #: ../../../src/MenuConfig.cpp:381
811 msgid "Allow stat bar auto-hiding"
812 msgstr ""
813
814 #: ../../../src/MenuConfig.cpp:382
815 msgid "Show combat text"
816 msgstr ""
817
818 #: ../../../src/MenuConfig.cpp:383
819 msgid "Automatically equip items"
820 msgstr ""
821
822 #: ../../../src/MenuConfig.cpp:384
823 msgid "Show hidden entity markers"
824 msgstr ""
825
826 #: ../../../src/MenuConfig.cpp:385
827 msgid "Low health notification"
828 msgstr ""
829
830 #: ../../../src/MenuConfig.cpp:386
831 msgid "Low health threshold"
832 msgstr ""
833
834 #: ../../../src/MenuConfig.cpp:389
835 msgid "Joystick"
836 msgstr ""
837
838 #: ../../../src/MenuConfig.cpp:390
839 msgid "Move hero using mouse"
840 msgstr ""
841
842 #: ../../../src/MenuConfig.cpp:391
843 msgid "Mouse aim"
844 msgstr ""
845
846 #: ../../../src/MenuConfig.cpp:392
847 msgid "Do not use mouse"
848 msgstr ""
849
850 #: ../../../src/MenuConfig.cpp:393
851 msgid "Swap mouse movement button"
852 msgstr ""
853
854 #: ../../../src/MenuConfig.cpp:394
855 msgid "Attack with mouse movement"
856 msgstr ""
857
858 #: ../../../src/MenuConfig.cpp:395
859 msgid "Joystick Deadzone"
860 msgstr ""
861
862 #: ../../../src/MenuConfig.cpp:405
863 #, c-format
864 msgid "Primary binding: %s"
865 msgstr ""
866
867 #: ../../../src/MenuConfig.cpp:406
868 #, c-format
869 msgid "Alternate binding: %s"
870 msgstr ""
871
872 #: ../../../src/MenuConfig.cpp:407
873 #, c-format
874 msgid "Joystick binding: %s"
875 msgstr ""
876
877 #: ../../../src/MenuConfig.cpp:508
248878 msgid ""
249879 "Will try to store surfaces in video memory versus system memory. The effect "
250880 "this has on performance depends on the renderer."
251881 msgstr ""
252882
253 #: ../../../src/GameStateConfigDesktop.cpp:189
883 #: ../../../src/MenuConfig.cpp:509
254884 msgid ""
255885 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
256886 "windowed mode or input lag."
257887 msgstr ""
258888
259 #: ../../../src/GameStateConfigDesktop.cpp:190
889 #: ../../../src/MenuConfig.cpp:510
260890 msgid ""
261891 "When enabled, this uses the screen DPI in addition to the window dimensions "
262892 "to scale the rendering resolution. Otherwise, only the window dimensions are "
263893 "used."
264894 msgstr ""
265895
266 #: ../../../src/GameStateConfigDesktop.cpp:191
896 #: ../../../src/MenuConfig.cpp:511
267897 msgid ""
268898 "This enables parallax (non-tile) layers. Disabling this setting can improve "
269899 "performance in some cases."
270900 msgstr ""
271901
272 #: ../../../src/GameStateConfigDesktop.cpp:192
273 msgid "Experimental"
274 msgstr ""
275
276 #: ../../../src/GameStateConfigDesktop.cpp:193
277 msgid "For handheld devices"
278 msgstr ""
279
280 #: ../../../src/GameStateConfigDesktop.cpp:211
281 msgid "Renderer"
282 msgstr ""
283
284 #: ../../../src/GameStateConfigDesktop.cpp:227
285 msgid "Full Screen Mode"
286 msgstr ""
287
288 #: ../../../src/GameStateConfigDesktop.cpp:231
289 msgid "Move hero using mouse"
290 msgstr ""
291
292 #: ../../../src/GameStateConfigDesktop.cpp:235
293 msgid "Hardware surfaces"
294 msgstr ""
295
296 #: ../../../src/GameStateConfigDesktop.cpp:239
297 msgid "V-Sync"
298 msgstr ""
299
300 #: ../../../src/GameStateConfigDesktop.cpp:243
301 msgid "Texture Filtering"
302 msgstr ""
303
304 #: ../../../src/GameStateConfigDesktop.cpp:247
305 msgid "DPI scaling"
306 msgstr ""
307
308 #: ../../../src/GameStateConfigDesktop.cpp:251
309 msgid "Parallax Layers"
310 msgstr ""
311
312 #: ../../../src/GameStateConfigDesktop.cpp:255
313 msgid "Allow changing gamma"
314 msgstr ""
315
316 #: ../../../src/GameStateConfigDesktop.cpp:259
317 msgid "Gamma"
318 msgstr ""
319
320 #: ../../../src/GameStateConfigDesktop.cpp:263
321 msgid "Use joystick"
322 msgstr ""
323
324 #: ../../../src/GameStateConfigDesktop.cpp:267
325 msgid "Joystick"
326 msgstr ""
327
328 #: ../../../src/GameStateConfigDesktop.cpp:283
329 msgid "Mouse aim"
330 msgstr ""
331
332 #: ../../../src/GameStateConfigDesktop.cpp:287
333 msgid "Do not use mouse"
334 msgstr ""
335
336 #: ../../../src/GameStateConfigDesktop.cpp:291
337 msgid "Joystick Deadzone"
338 msgstr ""
339
340 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
341 msgid "Loading..."
342 msgstr ""
343
344 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
345 msgid "Delete Save"
346 msgstr ""
347
348 #: ../../../src/GameStateLoad.cpp:88
349 msgid "Delete this save?"
350 msgstr ""
351
352 #: ../../../src/GameStateLoad.cpp:90
353 msgid "Exit to Title"
354 msgstr ""
355
356 #: ../../../src/GameStateLoad.cpp:93
357 msgid "New Game"
358 msgstr ""
359
360 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
361 msgid "Choose a Slot"
362 msgstr ""
363
364 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
365 msgid "Enable a story mod to continue"
366 msgstr ""
367
368 #: ../../../src/GameStateLoad.cpp:589
369 msgid "Load Game"
370 msgstr ""
371
372 #: ../../../src/GameStateLoad.cpp:695
373 msgid "Entering game world..."
374 msgstr ""
375
376 #: ../../../src/GameStateLoad.cpp:698
377 msgid "Loading saved game..."
378 msgstr ""
379
380 #: ../../../src/GameStateLoad.cpp:731
381 msgid "Invalid save"
382 msgstr ""
383
384 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
385 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
386 #: ../../../src/MenuPowers.cpp:1542
387 #, c-format
388 msgid "Level %d"
389 msgstr ""
390
391 #: ../../../src/GameStateNew.cpp:68
392 msgid "Create"
393 msgstr ""
394
395 #: ../../../src/GameStateNew.cpp:76
396 msgid "Randomize"
397 msgstr ""
398
399 #: ../../../src/GameStateNew.cpp:92
400 msgid "Choose a Portrait"
401 msgstr ""
402
403 #: ../../../src/GameStateNew.cpp:96
404 msgid "Choose a Name"
405 msgstr ""
406
407 #: ../../../src/GameStateNew.cpp:100
408 msgid "Permadeath?"
409 msgstr ""
410
411 #: ../../../src/GameStateNew.cpp:104
412 msgid "Choose a Class"
413 msgstr ""
414
415 #: ../../../src/GameStateTitle.cpp:108
416 msgid "Play Game"
417 msgstr ""
418
419 #: ../../../src/GameStateTitle.cpp:111
420 msgid "Enable a core mod to continue"
421 msgstr ""
422
423 #: ../../../src/GameStateTitle.cpp:115
424 msgid "Configuration"
425 msgstr ""
426
427 #: ../../../src/GameStateTitle.cpp:118
428 msgid "Credits"
429 msgstr ""
430
431 #: ../../../src/GameStateTitle.cpp:121
432 msgid "Exit Game"
433 msgstr ""
434
435 #: ../../../src/InputState.cpp:402
436 msgid "Accept"
437 msgstr ""
438
439 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
440 msgid "Up"
441 msgstr ""
442
443 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
444 msgid "Down"
445 msgstr ""
446
447 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
448 msgid "Left"
449 msgstr ""
450
451 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
452 msgid "Right"
453 msgstr ""
454
455 #: ../../../src/InputState.cpp:407
456 msgid "Bar1"
457 msgstr ""
458
459 #: ../../../src/InputState.cpp:408
460 msgid "Bar2"
461 msgstr ""
462
463 #: ../../../src/InputState.cpp:409
464 msgid "Bar3"
465 msgstr ""
466
467 #: ../../../src/InputState.cpp:410
468 msgid "Bar4"
469 msgstr ""
470
471 #: ../../../src/InputState.cpp:411
472 msgid "Bar5"
473 msgstr ""
474
475 #: ../../../src/InputState.cpp:412
476 msgid "Bar6"
477 msgstr ""
478
479 #: ../../../src/InputState.cpp:413
480 msgid "Bar7"
481 msgstr ""
482
483 #: ../../../src/InputState.cpp:414
484 msgid "Bar8"
485 msgstr ""
486
487 #: ../../../src/InputState.cpp:415
488 msgid "Bar9"
489 msgstr ""
490
491 #: ../../../src/InputState.cpp:416
492 msgid "Bar0"
493 msgstr ""
494
495 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
496 #: ../../../src/MenuCharacter.cpp:54
497 msgid "Character"
498 msgstr ""
499
500 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
501 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
502 msgid "Inventory"
503 msgstr ""
504
505 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
506 #: ../../../src/MenuPowers.cpp:168
507 msgid "Powers"
508 msgstr ""
509
510 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
511 #: ../../../src/MenuLog.cpp:72
512 msgid "Log"
513 msgstr ""
514
515 #: ../../../src/InputState.cpp:421
516 msgid "Main1"
517 msgstr ""
518
519 #: ../../../src/InputState.cpp:422
520 msgid "Main2"
521 msgstr ""
522
523 #: ../../../src/InputState.cpp:423
524 msgid "Ctrl"
525 msgstr ""
526
527 #: ../../../src/InputState.cpp:424
528 msgid "Shift"
529 msgstr ""
530
531 #: ../../../src/InputState.cpp:425
532 msgid "Alt"
533 msgstr ""
534
535 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
536 msgid "Delete"
537 msgstr ""
538
539 #: ../../../src/InputState.cpp:427
540 msgid "ActionBar Accept"
541 msgstr ""
542
543 #: ../../../src/InputState.cpp:428
544 msgid "ActionBar Left"
545 msgstr ""
546
547 #: ../../../src/InputState.cpp:429
548 msgid "ActionBar Right"
549 msgstr ""
550
551 #: ../../../src/InputState.cpp:430
552 msgid "ActionBar Use"
553 msgstr ""
554
555 #: ../../../src/InputState.cpp:431
556 msgid "Developer Menu"
557 msgstr ""
558
559 #: ../../../src/InputState.cpp:433
560 msgid "Left Mouse"
561 msgstr ""
562
563 #: ../../../src/InputState.cpp:434
564 msgid "Middle Mouse"
565 msgstr ""
566
567 #: ../../../src/InputState.cpp:435
568 msgid "Right Mouse"
569 msgstr ""
570
571 #: ../../../src/InputState.cpp:436
572 msgid "Wheel Up"
573 msgstr ""
574
575 #: ../../../src/InputState.cpp:437
576 msgid "Wheel Down"
577 msgstr ""
578
579 #: ../../../src/InputState.cpp:438
580 msgid "Mouse X1"
581 msgstr ""
582
583 #: ../../../src/InputState.cpp:439
584 msgid "Mouse X2"
585 msgstr ""
586
587 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
588 msgid "Unknown Item"
589 msgstr ""
590
591 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
592 #, c-format
593 msgid "%d%% Speed"
594 msgstr ""
595
596 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
597 #, c-format
598 msgid "%d%% Attack Speed"
599 msgstr ""
600
601 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
602 #: ../../../src/MenuPowers.cpp:833
603 #, c-format
604 msgid "Resistance (%s)"
605 msgstr ""
606
607 #: ../../../src/ItemManager.cpp:684
608 #, c-format
609 msgid "Requires %s"
610 msgstr ""
611
612 #: ../../../src/ItemManager.cpp:733
613 msgid "Quest Item"
614 msgstr ""
615
616 #: ../../../src/ItemManager.cpp:760
617 #, c-format
618 msgid "Quality: %s"
619 msgstr ""
620
621 #: ../../../src/ItemManager.cpp:785
622 #, c-format
623 msgid "Absorb: %d-%d"
624 msgstr ""
625
626 #: ../../../src/ItemManager.cpp:787
627 #, c-format
628 msgid "Absorb: %d"
629 msgstr ""
630
631 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
632 #: ../../../src/MenuPowers.cpp:1134
633 #, c-format
634 msgid "Requires Level %d"
635 msgstr ""
636
637 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
638 #: ../../../src/MenuPowers.cpp:1125
639 #, c-format
640 msgid "Requires %s %d"
641 msgstr ""
642
643 #: ../../../src/ItemManager.cpp:849
644 #, c-format
645 msgid "Requires Class: %s"
646 msgstr ""
647
648 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
649 #, c-format
650 msgid "Buy Price: %d %s"
651 msgstr ""
652
653 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
654 #, c-format
655 msgid "Buy Price: %d %s each"
656 msgstr ""
657
658 #: ../../../src/ItemManager.cpp:886
659 #, c-format
660 msgid "Sell Price: %d %s"
661 msgstr ""
662
663 #: ../../../src/ItemManager.cpp:888
664 #, c-format
665 msgid "Sell Price: %d %s each"
666 msgstr ""
667
668 #: ../../../src/ItemManager.cpp:897
669 msgid "Set:"
670 msgstr ""
671
672 #: ../../../src/ItemManager.cpp:904
673 #, c-format
674 msgid "%d items:"
675 msgstr ""
676
677 #: ../../../src/ItemManager.cpp:917
678 #, c-format
679 msgid "Press [%s] to use"
680 msgstr ""
681
682 #: ../../../src/ItemManager.cpp:920
683 #, c-format
684 msgid "Press [%s] to read"
685 msgstr ""
686
687 #: ../../../src/MenuActionBar.cpp:87
688 msgid "Loot tooltip visibility"
689 msgstr ""
690
691 #: ../../../src/MenuActionBar.cpp:88
692 msgid "Mini-map mode"
693 msgstr ""
694
695 #: ../../../src/MenuActionBar.cpp:89
696 msgid "Always show stat bar labels"
697 msgstr ""
698
699 #: ../../../src/MenuActionBar.cpp:90
700 msgid "Show combat text"
701 msgstr ""
702
703 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
704 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
705 #, c-format
706 msgid "Hotkey: %s"
707 msgstr ""
708
709 #: ../../../src/MenuActionBar.cpp:474
710 #, c-format
711 msgid "Default. Temporarily show all loot tooltips with '%s'."
712 msgstr ""
713
714 #: ../../../src/MenuActionBar.cpp:476
715 #, c-format
716 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
717 msgstr ""
718
719 #: ../../../src/MenuActionBar.cpp:478
720 #, c-format
721 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
722 msgstr ""
723
724 #: ../../../src/MenuActionBar.cpp:482
725 msgid "Visible"
726 msgstr ""
727
728 #: ../../../src/MenuActionBar.cpp:484
729 msgid "Visible (2x zoom)"
730 msgstr ""
731
732 #: ../../../src/MenuActionBar.cpp:486
733 msgid "Hidden"
734 msgstr ""
735
736 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
737 msgid "Enabled"
738 msgstr ""
739
740 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
741 msgid "Disabled"
742 msgstr ""
743
744 #: ../../../src/MenuActionBar.cpp:657
745 msgid "Not enough MP."
746 msgstr ""
747
748 #: ../../../src/MenuActiveEffects.cpp:124
749 #, c-format
750 msgid "x%d"
751 msgstr ""
752
753 #: ../../../src/MenuActiveEffects.cpp:219
754 msgid "Remaining:"
755 msgstr ""
756
757 #: ../../../src/MenuActiveEffects.cpp:225
758 #, c-format
759 msgid "x%d stacks"
760 msgstr ""
761
762 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
763 msgid "Name"
764 msgstr ""
765
766 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
767 msgid "Level"
768 msgstr ""
769
770 #: ../../../src/MenuCharacter.cpp:310
771 #, c-format
772 msgid "%d unspent stat point"
773 msgstr ""
774
775 #: ../../../src/MenuCharacter.cpp:313
776 #, c-format
777 msgid "%d unspent stat points"
778 msgstr ""
779
780 #: ../../../src/MenuCharacter.cpp:355
781 #, c-format
782 msgid "Reduces the damage taken from \"%s\" elemental attacks."
783 msgstr ""
784
785 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
786 #, c-format
787 msgid "XP: %d"
788 msgstr ""
789
790 #: ../../../src/MenuCharacter.cpp:367
791 #, c-format
792 msgid "Next: %d"
793 msgstr ""
794
795 #: ../../../src/MenuCharacter.cpp:373
796 #, c-format
797 msgid "base (%d), bonus (%d)"
798 msgstr ""
799
800 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
801 msgid "Related stats:"
802 msgstr ""
803
804 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
805 #, c-format
806 msgid "Each level grants %d."
807 msgstr ""
808
809 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
810 #, c-format
811 msgid "Each point of %s grants %d."
902 #: ../../../src/MenuConfig.cpp:512
903 msgid ""
904 "Enables the below setting that controls the screen gamma level. The behavior "
905 "of the gamma setting can vary between platforms."
906 msgstr ""
907
908 #: ../../../src/MenuConfig.cpp:513
909 msgid ""
910 "Provides additional text for information that is primarily conveyed through "
911 "color."
912 msgstr ""
913
914 #: ../../../src/MenuConfig.cpp:514
915 msgid ""
916 "Some mods will automatically hide the stat bars when they are inactive. "
917 "Disabling this option will keep them displayed at all times."
918 msgstr ""
919
920 #: ../../../src/MenuConfig.cpp:515
921 msgid ""
922 "When enabled, empty equipment slots will be filled with applicable items "
923 "when they are obtained."
924 msgstr ""
925
926 #: ../../../src/MenuConfig.cpp:516
927 msgid ""
928 "Shows a marker above enemies, allies, and the player when they are obscured "
929 "by tall objects."
930 msgstr ""
931
932 #: ../../../src/MenuConfig.cpp:517
933 msgid ""
934 "This allows the game to be controlled entirely with the keyboard (or "
935 "joystick)."
936 msgstr ""
937
938 #: ../../../src/MenuConfig.cpp:518
939 msgid ""
940 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or "
941 "'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
942 "instead of 'Main1'."
943 msgstr ""
944
945 #: ../../../src/MenuConfig.cpp:519
946 msgid ""
947 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
948 "assigned to the movement button can be used by targeting an enemy. If this "
949 "setting is disabled, it is required to use 'Shift' to access the Power "
950 "assigned to the movement button."
951 msgstr ""
952
953 #: ../../../src/MenuConfig.cpp:520
954 msgid ""
955 "The player's attacks will be aimed in the direction of the mouse cursor when "
956 "this is enabled."
957 msgstr ""
958
959 #: ../../../src/MenuConfig.cpp:571
960 msgid "Active Mods"
961 msgstr ""
962
963 #: ../../../src/MenuConfig.cpp:580
964 msgid "Available Mods"
965 msgstr ""
966
967 #: ../../../src/MenuConfig.cpp:599
968 msgid "<< Disable"
969 msgstr ""
970
971 #: ../../../src/MenuConfig.cpp:605
972 msgid "Enable >>"
973 msgstr ""
974
975 #: ../../../src/MenuConfig.cpp:1436
976 msgid "Version:"
977 msgstr ""
978
979 #: ../../../src/MenuConfig.cpp:1441
980 msgid "Game:"
981 msgstr ""
982
983 #: ../../../src/MenuConfig.cpp:1446
984 msgid "Engine version:"
985 msgstr ""
986
987 #: ../../../src/MenuConfig.cpp:1454
988 msgid "Requires mods:"
989 msgstr ""
990
991 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
992 msgid "(none)"
993 msgstr ""
994
995 #: ../../../src/MenuConfig.cpp:1579
996 msgid "Save & Exit"
812997 msgstr ""
813998
814999 #: ../../../src/MenuDevConsole.cpp:63
9631148 msgid "HINT: Type help"
9641149 msgstr ""
9651150
966 #: ../../../src/MenuEnemy.cpp:138
1151 #: ../../../src/MenuEnemy.cpp:162
9671152 #, c-format
9681153 msgid "%s level %d"
9691154 msgstr ""
9701155
971 #: ../../../src/MenuEnemy.cpp:162
1156 #: ../../../src/MenuEnemy.cpp:186
9721157 msgid "Dead"
9731158 msgstr ""
9741159
975 #: ../../../src/MenuEnemy.cpp:164
1160 #: ../../../src/MenuEnemy.cpp:188
9761161 msgid "Destroyed"
9771162 msgstr ""
9781163
979 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
980 msgid "Paused"
981 msgstr ""
982
983 #: ../../../src/MenuExit.cpp:91
984 msgid "Save & Exit"
985 msgstr ""
986
987 #: ../../../src/MenuExit.cpp:92
988 msgid "Exit"
989 msgstr ""
990
991 #: ../../../src/MenuExit.cpp:96
992 msgid "Continue"
993 msgstr ""
994
995 #: ../../../src/MenuInventory.cpp:73
996 msgid "Automatically equip items"
997 msgstr ""
998
999 #: ../../../src/MenuInventory.cpp:188
1164 #: ../../../src/MenuInventory.cpp:177
10001165 #, c-format
10011166 msgid "Lost %d%% of %s."
10021167 msgstr ""
10031168
1004 #: ../../../src/MenuInventory.cpp:195
1169 #: ../../../src/MenuInventory.cpp:184
10051170 #, c-format
10061171 msgid "Lost %d%% of total XP."
10071172 msgstr ""
10081173
1009 #: ../../../src/MenuInventory.cpp:200
1174 #: ../../../src/MenuInventory.cpp:189
10101175 #, c-format
10111176 msgid "Lost %d%% of current level XP."
10121177 msgstr ""
10131178
1014 #: ../../../src/MenuInventory.cpp:226
1179 #: ../../../src/MenuInventory.cpp:215
10151180 #, c-format
10161181 msgid "Lost %s."
10171182 msgstr ""
10181183
1019 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1184 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10201185 #, c-format
10211186 msgid "%d %s"
10221187 msgstr ""
10231188
1024 #: ../../../src/MenuInventory.cpp:317
1189 #: ../../../src/MenuInventory.cpp:300
10251190 msgid "Pick up item(s):"
10261191 msgstr ""
10271192
1028 #: ../../../src/MenuInventory.cpp:318
1193 #: ../../../src/MenuInventory.cpp:301
10291194 msgid "Use or equip item:"
10301195 msgstr ""
10311196
1032 #: ../../../src/MenuInventory.cpp:319
1197 #: ../../../src/MenuInventory.cpp:302
10331198 #, c-format
10341199 msgid "%s modifiers"
10351200 msgstr ""
10361201
1037 #: ../../../src/MenuInventory.cpp:320
1202 #: ../../../src/MenuInventory.cpp:303
10381203 msgid "Select a quantity of item:"
10391204 msgstr ""
10401205
1041 #: ../../../src/MenuInventory.cpp:323
1206 #: ../../../src/MenuInventory.cpp:306
10421207 msgid "Stash item stack:"
10431208 msgstr ""
10441209
1045 #: ../../../src/MenuInventory.cpp:325
1210 #: ../../../src/MenuInventory.cpp:308
10461211 msgid "Sell item stack:"
10471212 msgstr ""
10481213
1049 #: ../../../src/MenuInventory.cpp:592
1214 #: ../../../src/MenuInventory.cpp:574
10501215 msgid "You don't have enough of the required item."
10511216 msgstr ""
10521217
1053 #: ../../../src/MenuInventory.cpp:599
1218 #: ../../../src/MenuInventory.cpp:586
10541219 msgid "You can't use this item right now."
10551220 msgstr ""
10561221
1057 #: ../../../src/MenuInventory.cpp:611
1222 #: ../../../src/MenuInventory.cpp:598
10581223 msgid "This item can only be used from the action bar."
10591224 msgstr ""
10601225
1061 #: ../../../src/MenuInventory.cpp:729
1226 #: ../../../src/MenuInventory.cpp:716
10621227 msgid "Inventory is full."
10631228 msgstr ""
10641229
1065 #: ../../../src/MenuInventory.cpp:849
1230 #: ../../../src/MenuInventory.cpp:841
10661231 #, c-format
10671232 msgid "Not enough %s."
10681233 msgstr ""
10691234
1070 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1235 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
10711236 msgid "This item can not be sold."
10721237 msgstr ""
10731238
10791244 msgid "Quests"
10801245 msgstr ""
10811246
1082 #: ../../../src/MenuManager.cpp:286
1247 #: ../../../src/MenuManager.cpp:296
10831248 #, c-format
10841249 msgid "XP: %d/%d"
10851250 msgstr ""
10861251
1087 #: ../../../src/MenuManager.cpp:827
1252 #: ../../../src/MenuManager.cpp:854
10881253 msgid "This item can not be dropped."
10891254 msgstr ""
10901255
10921257 msgid "Enter amount:"
10931258 msgstr ""
10941259
1095 #: ../../../src/MenuPowers.cpp:787
1260 #: ../../../src/MenuPowers.cpp:786
10961261 msgid "Passive"
10971262 msgstr ""
10981263
1099 #: ../../../src/MenuPowers.cpp:792
1264 #: ../../../src/MenuPowers.cpp:791
11001265 #, c-format
11011266 msgid "Costs %d MP"
11021267 msgstr ""
11031268
1104 #: ../../../src/MenuPowers.cpp:796
1269 #: ../../../src/MenuPowers.cpp:795
11051270 #, c-format
11061271 msgid "Costs %d HP"
11071272 msgstr ""
11081273
1109 #: ../../../src/MenuPowers.cpp:801
1274 #: ../../../src/MenuPowers.cpp:800
11101275 msgid "Cooldown:"
11111276 msgstr ""
11121277
1113 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1278 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11141279 msgid "Damage per second"
11151280 msgstr ""
11161281
1117 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1282 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11181283 msgid "HP per second"
11191284 msgstr ""
11201285
1121 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1286 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11221287 msgid "MP per second"
11231288 msgstr ""
11241289
1125 #: ../../../src/MenuPowers.cpp:885
1290 #: ../../../src/MenuPowers.cpp:884
11261291 msgid "Immobilize"
11271292 msgstr ""
11281293
1129 #: ../../../src/MenuPowers.cpp:893
1294 #: ../../../src/MenuPowers.cpp:892
11301295 msgid "Immunity"
11311296 msgstr ""
11321297
1133 #: ../../../src/MenuPowers.cpp:896
1298 #: ../../../src/MenuPowers.cpp:895
11341299 msgid "Immunity to damage over time"
11351300 msgstr ""
11361301
1137 #: ../../../src/MenuPowers.cpp:899
1302 #: ../../../src/MenuPowers.cpp:898
11381303 msgid "Immunity to slow"
11391304 msgstr ""
11401305
1141 #: ../../../src/MenuPowers.cpp:902
1306 #: ../../../src/MenuPowers.cpp:901
11421307 msgid "Immunity to stun"
11431308 msgstr ""
11441309
1145 #: ../../../src/MenuPowers.cpp:905
1310 #: ../../../src/MenuPowers.cpp:904
11461311 msgid "Immunity to HP steal"
11471312 msgstr ""
11481313
1149 #: ../../../src/MenuPowers.cpp:908
1314 #: ../../../src/MenuPowers.cpp:907
11501315 msgid "Immunity to MP steal"
11511316 msgstr ""
11521317
1153 #: ../../../src/MenuPowers.cpp:911
1318 #: ../../../src/MenuPowers.cpp:910
11541319 msgid "Immunity to knockback"
11551320 msgstr ""
11561321
1157 #: ../../../src/MenuPowers.cpp:914
1322 #: ../../../src/MenuPowers.cpp:913
11581323 msgid "Immunity to damage reflection"
11591324 msgstr ""
11601325
1161 #: ../../../src/MenuPowers.cpp:917
1326 #: ../../../src/MenuPowers.cpp:916
11621327 msgid "Stun"
11631328 msgstr ""
11641329
1165 #: ../../../src/MenuPowers.cpp:920
1330 #: ../../../src/MenuPowers.cpp:919
11661331 msgid "Automatic revive on death"
11671332 msgstr ""
11681333
1169 #: ../../../src/MenuPowers.cpp:923
1334 #: ../../../src/MenuPowers.cpp:922
11701335 msgid "Convert"
11711336 msgstr ""
11721337
1173 #: ../../../src/MenuPowers.cpp:926
1338 #: ../../../src/MenuPowers.cpp:925
11741339 msgid "Fear"
11751340 msgstr ""
11761341
1177 #: ../../../src/MenuPowers.cpp:929
1342 #: ../../../src/MenuPowers.cpp:928
11781343 msgid "Lifespan"
11791344 msgstr ""
11801345
1181 #: ../../../src/MenuPowers.cpp:953
1346 #: ../../../src/MenuPowers.cpp:952
11821347 msgid "Magical Shield"
11831348 msgstr ""
11841349
1185 #: ../../../src/MenuPowers.cpp:982
1350 #: ../../../src/MenuPowers.cpp:981
11861351 msgid "Healing"
11871352 msgstr ""
11881353
1189 #: ../../../src/MenuPowers.cpp:985
1354 #: ../../../src/MenuPowers.cpp:984
11901355 msgid "Knockback"
11911356 msgstr ""
11921357
1193 #: ../../../src/MenuPowers.cpp:1010
1358 #: ../../../src/MenuPowers.cpp:1009
11941359 #, c-format
11951360 msgid "%d%% chance"
11961361 msgstr ""
11971362
1198 #: ../../../src/MenuPowers.cpp:1062
1363 #: ../../../src/MenuPowers.cpp:1061
11991364 msgid "Base Accuracy"
12001365 msgstr ""
12011366
1202 #: ../../../src/MenuPowers.cpp:1082
1367 #: ../../../src/MenuPowers.cpp:1081
12031368 msgid "Base Critical Chance"
12041369 msgstr ""
12051370
1206 #: ../../../src/MenuPowers.cpp:1090
1371 #: ../../../src/MenuPowers.cpp:1089
12071372 msgid "Ignores Absorbtion"
12081373 msgstr ""
12091374
1210 #: ../../../src/MenuPowers.cpp:1095
1375 #: ../../../src/MenuPowers.cpp:1094
12111376 msgid "Ignores Avoidance"
12121377 msgstr ""
12131378
1214 #: ../../../src/MenuPowers.cpp:1100
1379 #: ../../../src/MenuPowers.cpp:1099
12151380 #, c-format
12161381 msgid "%d%% Chance to crit slowed targets"
12171382 msgstr ""
12181383
1219 #: ../../../src/MenuPowers.cpp:1105
1384 #: ../../../src/MenuPowers.cpp:1104
12201385 #, c-format
12211386 msgid "Elemental Damage (%s)"
12221387 msgstr ""
12231388
1224 #: ../../../src/MenuPowers.cpp:1114
1389 #: ../../../src/MenuPowers.cpp:1113
12251390 #, c-format
12261391 msgid "Requires a %s"
12271392 msgstr ""
12281393
1229 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1394 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12301395 #, c-format
12311396 msgid "Requires Power: %s"
12321397 msgstr ""
12331398
1234 #: ../../../src/MenuPowers.cpp:1163
1399 #: ../../../src/MenuPowers.cpp:1162
12351400 msgid "Click to Unlock (uses 1 Skill Point)"
12361401 msgstr ""
12371402
1238 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1403 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12391404 msgid "Requires 1 Skill Point"
12401405 msgstr ""
12411406
1242 #: ../../../src/MenuPowers.cpp:1355
1407 #: ../../../src/MenuPowers.cpp:1354
12431408 #, c-format
12441409 msgid "%d unspent skill point"
12451410 msgstr ""
12461411
1247 #: ../../../src/MenuPowers.cpp:1358
1412 #: ../../../src/MenuPowers.cpp:1357
12481413 #, c-format
12491414 msgid "%d unspent skill points"
12501415 msgstr ""
12511416
1252 #: ../../../src/MenuPowers.cpp:1388
1417 #: ../../../src/MenuPowers.cpp:1387
12531418 msgid "Next Level:"
12541419 msgstr ""
12551420
1256 #: ../../../src/MenuStash.cpp:96
1257 msgid "Shared Stash"
1258 msgstr ""
1259
1260 #: ../../../src/MenuStash.cpp:209
1421 #: ../../../src/MenuStash.cpp:53
1422 msgid "Private"
1423 msgstr ""
1424
1425 #: ../../../src/MenuStash.cpp:55
1426 msgid "Shared"
1427 msgstr ""
1428
1429 #: ../../../src/MenuStash.cpp:103
1430 msgid "Stash"
1431 msgstr ""
1432
1433 #: ../../../src/MenuStash.cpp:258
12611434 msgid "Can not store quest items in the stash."
12621435 msgstr ""
12631436
1264 #: ../../../src/MenuStash.cpp:219
1437 #: ../../../src/MenuStash.cpp:263
1438 msgid "This item can not be stored in the stash."
1439 msgstr ""
1440
1441 #: ../../../src/MenuStash.cpp:268
1442 msgid "This item can not be stored in the private stash."
1443 msgstr ""
1444
1445 #: ../../../src/MenuStash.cpp:273
1446 msgid "This item can not be stored in the shared stash."
1447 msgstr ""
1448
1449 #: ../../../src/MenuStash.cpp:283
12651450 msgid "Stash is full."
12661451 msgstr ""
12671452
1268 #: ../../../src/MenuTalker.cpp:454
1453 #: ../../../src/MenuStash.cpp:340
1454 #, c-format
1455 msgid "Can not store item in stash: %s"
1456 msgstr ""
1457
1458 #: ../../../src/MenuTalker.cpp:447
1459 #, c-format
1460 msgid "<dialog node %d>"
1461 msgstr ""
1462
1463 #: ../../../src/MenuTalker.cpp:455
12691464 msgid "Trade"
12701465 msgstr ""
12711466
12731468 msgid "Buyback"
12741469 msgstr ""
12751470
1276 #: ../../../src/MenuVendor.cpp:279
1471 #: ../../../src/MenuVendor.cpp:281
12771472 msgid "Vendor"
12781473 msgstr ""
12791474
1280 #: ../../../src/PowerManager.cpp:1136
1475 #: ../../../src/PowerManager.cpp:1170
12811476 #, c-format
12821477 msgid "+%d Shield"
12831478 msgstr ""
12841479
1285 #: ../../../src/PowerManager.cpp:1392
1480 #: ../../../src/PowerManager.cpp:1426
12861481 msgid "You are already transformed, untransform first."
12871482 msgstr ""
12881483
1289 #: ../../../src/PowerManager.cpp:1404
1484 #: ../../../src/PowerManager.cpp:1438
12901485 msgid "Could not untransform at this position."
12911486 msgstr ""
12921487
12941489 msgid "Completed Quests"
12951490 msgstr ""
12961491
1297 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1492 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
12981493 msgid "Game saved."
12991494 msgstr ""
13001495
1301 #: ../../../src/SDLInputState.cpp:582
1496 #: ../../../src/SDLInputState.cpp:643
1497 msgid "BkSp"
1498 msgstr ""
1499
1500 #: ../../../src/SDLInputState.cpp:644
1501 msgid "Caps"
1502 msgstr ""
1503
1504 #: ../../../src/SDLInputState.cpp:645
1505 msgid "Del"
1506 msgstr ""
1507
1508 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1509 msgid "End"
1510 msgstr ""
1511
1512 #: ../../../src/SDLInputState.cpp:648
1513 msgid "Esc"
1514 msgstr ""
1515
1516 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1517 msgid "Home"
1518 msgstr ""
1519
1520 #: ../../../src/SDLInputState.cpp:650
1521 msgid "Ins"
1522 msgstr ""
1523
1524 #: ../../../src/SDLInputState.cpp:651
1525 msgid "LAlt"
1526 msgstr ""
1527
1528 #: ../../../src/SDLInputState.cpp:652
1529 msgid "LCtrl"
1530 msgstr ""
1531
1532 #: ../../../src/SDLInputState.cpp:654
1533 msgid "LShft"
1534 msgstr ""
1535
1536 #: ../../../src/SDLInputState.cpp:655
1537 msgid "Num"
1538 msgstr ""
1539
1540 #: ../../../src/SDLInputState.cpp:656
1541 msgid "PgDn"
1542 msgstr ""
1543
1544 #: ../../../src/SDLInputState.cpp:657
1545 msgid "PgUp"
1546 msgstr ""
1547
1548 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1549 msgid "Pause"
1550 msgstr ""
1551
1552 #: ../../../src/SDLInputState.cpp:659
1553 msgid "Print"
1554 msgstr ""
1555
1556 #: ../../../src/SDLInputState.cpp:660
1557 msgid "RAlt"
1558 msgstr ""
1559
1560 #: ../../../src/SDLInputState.cpp:661
1561 msgid "RCtrl"
1562 msgstr ""
1563
1564 #: ../../../src/SDLInputState.cpp:662
1565 msgid "Ret"
1566 msgstr ""
1567
1568 #: ../../../src/SDLInputState.cpp:664
1569 msgid "RShft"
1570 msgstr ""
1571
1572 #: ../../../src/SDLInputState.cpp:665
1573 msgid "SLock"
1574 msgstr ""
1575
1576 #: ../../../src/SDLInputState.cpp:666
1577 msgid "Spc"
1578 msgstr ""
1579
1580 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1581 msgid "Tab"
1582 msgstr ""
1583
1584 #: ../../../src/SDLInputState.cpp:673
13021585 msgid "Backspace"
13031586 msgstr ""
13041587
1305 #: ../../../src/SDLInputState.cpp:583
1588 #: ../../../src/SDLInputState.cpp:674
13061589 msgid "CapsLock"
13071590 msgstr ""
13081591
1309 #: ../../../src/SDLInputState.cpp:586
1310 msgid "End"
1311 msgstr ""
1312
1313 #: ../../../src/SDLInputState.cpp:587
1592 #: ../../../src/SDLInputState.cpp:678
13141593 msgid "Escape"
13151594 msgstr ""
13161595
1317 #: ../../../src/SDLInputState.cpp:588
1318 msgid "Home"
1319 msgstr ""
1320
1321 #: ../../../src/SDLInputState.cpp:589
1596 #: ../../../src/SDLInputState.cpp:680
13221597 msgid "Insert"
13231598 msgstr ""
13241599
1325 #: ../../../src/SDLInputState.cpp:590
1600 #: ../../../src/SDLInputState.cpp:681
13261601 msgid "Left Alt"
13271602 msgstr ""
13281603
1329 #: ../../../src/SDLInputState.cpp:591
1604 #: ../../../src/SDLInputState.cpp:682
13301605 msgid "Left Ctrl"
13311606 msgstr ""
13321607
1333 #: ../../../src/SDLInputState.cpp:593
1608 #: ../../../src/SDLInputState.cpp:684
13341609 msgid "Left Shift"
13351610 msgstr ""
13361611
1337 #: ../../../src/SDLInputState.cpp:594
1612 #: ../../../src/SDLInputState.cpp:685
13381613 msgid "NumLock"
13391614 msgstr ""
13401615
1341 #: ../../../src/SDLInputState.cpp:595
1616 #: ../../../src/SDLInputState.cpp:686
13421617 msgid "PageDown"
13431618 msgstr ""
13441619
1345 #: ../../../src/SDLInputState.cpp:596
1620 #: ../../../src/SDLInputState.cpp:687
13461621 msgid "PageUp"
13471622 msgstr ""
13481623
1349 #: ../../../src/SDLInputState.cpp:597
1350 msgid "Pause"
1351 msgstr ""
1352
1353 #: ../../../src/SDLInputState.cpp:598
1624 #: ../../../src/SDLInputState.cpp:689
13541625 msgid "PrintScreen"
13551626 msgstr ""
13561627
1357 #: ../../../src/SDLInputState.cpp:599
1628 #: ../../../src/SDLInputState.cpp:690
13581629 msgid "Right Alt"
13591630 msgstr ""
13601631
1361 #: ../../../src/SDLInputState.cpp:600
1632 #: ../../../src/SDLInputState.cpp:691
13621633 msgid "Right Ctrl"
13631634 msgstr ""
13641635
1365 #: ../../../src/SDLInputState.cpp:601
1636 #: ../../../src/SDLInputState.cpp:692
13661637 msgid "Return"
13671638 msgstr ""
13681639
1369 #: ../../../src/SDLInputState.cpp:603
1640 #: ../../../src/SDLInputState.cpp:694
13701641 msgid "Right Shift"
13711642 msgstr ""
13721643
1373 #: ../../../src/SDLInputState.cpp:604
1644 #: ../../../src/SDLInputState.cpp:695
13741645 msgid "ScrollLock"
13751646 msgstr ""
13761647
1377 #: ../../../src/SDLInputState.cpp:605
1648 #: ../../../src/SDLInputState.cpp:696
13781649 msgid "Space"
13791650 msgstr ""
13801651
1381 #: ../../../src/SDLInputState.cpp:606
1382 msgid "Tab"
1383 msgstr ""
1384
1385 #: ../../../src/SDLInputState.cpp:620
1652 #: ../../../src/SDLInputState.cpp:710
1653 #, c-format
1654 msgid "M%d"
1655 msgstr ""
1656
1657 #: ../../../src/SDLInputState.cpp:716
13861658 #, c-format
13871659 msgid "Mouse %d"
13881660 msgstr ""
13891661
1390 #: ../../../src/SDLInputState.cpp:628
1662 #: ../../../src/SDLInputState.cpp:726
1663 #, c-format
1664 msgid "JX%d-"
1665 msgstr ""
1666
1667 #: ../../../src/SDLInputState.cpp:728
13911668 #, c-format
13921669 msgid "Axis %d -"
13931670 msgstr ""
13941671
1395 #: ../../../src/SDLInputState.cpp:630
1672 #: ../../../src/SDLInputState.cpp:732
1673 #, c-format
1674 msgid "JX%d+"
1675 msgstr ""
1676
1677 #: ../../../src/SDLInputState.cpp:734
13961678 #, c-format
13971679 msgid "Axis %d +"
13981680 msgstr ""
13991681
1400 #: ../../../src/SDLInputState.cpp:633
1682 #: ../../../src/SDLInputState.cpp:739
1683 #, c-format
1684 msgid "JB%d"
1685 msgstr ""
1686
1687 #: ../../../src/SDLInputState.cpp:741
14011688 #, c-format
14021689 msgid "Button %d"
14031690 msgstr ""
14041691
1405 #: ../../../src/SDLInputState.cpp:637
1406 msgid "(none)"
1407 msgstr ""
1408
1409 #: ../../../src/SDLInputState.cpp:677
1692 #: ../../../src/SDLInputState.cpp:788
14101693 msgid "Touch control D-Pad"
14111694 msgstr ""
14121695
1413 #: ../../../src/SDLInputState.cpp:701
1696 #: ../../../src/SDLInputState.cpp:812
14141697 msgid "Touch control buttons"
14151698 msgstr ""
14161699
1417 #: ../../../src/SDLInputState.cpp:716
1700 #: ../../../src/SDLInputState.cpp:827
14181701 msgid "Tap"
14191702 msgstr ""
14201703
1421 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1422 #: ../../../src/SDLInputState.cpp:768
1704 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1705 #, c-format
1706 msgid "Can not bind: %s"
1707 msgstr ""
1708
1709 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1710 #: ../../../src/SDLInputState.cpp:901
14231711 #, c-format
14241712 msgid "'%s' is no longer bound to:"
14251713 msgstr ""
15821870 msgid "k"
15831871 msgstr ""
15841872
1585 #: ../../../src/Utils.cpp:580
1873 #: ../../../src/Utils.cpp:616
15861874 #, c-format
15871875 msgid "%s second"
15881876 msgstr ""
15891877
1590 #: ../../../src/Utils.cpp:583
1878 #: ../../../src/Utils.cpp:619
15911879 #, c-format
15921880 msgid "%s seconds"
15931881 msgstr ""
44 #
55 # Translators:
66 # Justin Jacobs <jajdorkster@gmail.com>, 2018
7 # Rui <xymarior@yandex.com>, 2018
7 # Rui <xymarior@yandex.com>, 2019
88 #
99 #, fuzzy
1010 msgid ""
1111 msgstr ""
1212 "Project-Id-Version: PACKAGE VERSION\n"
1313 "Report-Msgid-Bugs-To: \n"
14 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
14 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1515 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
16 "Last-Translator: Rui <xymarior@yandex.com>, 2018\n"
16 "Last-Translator: Rui <xymarior@yandex.com>, 2019\n"
1717 "Language-Team: Portuguese (https://www.transifex.com/flareorg/teams/84925/pt/)\n"
1818 "MIME-Version: 1.0\n"
1919 "Content-Type: text/plain; charset=UTF-8\n"
2121 "Language: pt\n"
2222 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
2323
24 #: ../../../src/Avatar.cpp:367
24 #: ../../../src/Avatar.cpp:387
25 msgid "Your health is low!"
26 msgstr "Tens pouca vida!"
27
28 #: ../../../src/Avatar.cpp:419
2529 #, c-format
2630 msgid "Congratulations, you have reached level %d!"
2731 msgstr "Parabéns, alcançaste o nível %d!"
2832
29 #: ../../../src/Avatar.cpp:369
30 msgid "You may increase one attribute through the Character Menu."
31 msgstr "Podes aumentar um atributo através do Menu de Personagem."
32
33 #: ../../../src/Avatar.cpp:583
33 #: ../../../src/Avatar.cpp:421
34 msgid "You may increase one or more attributes through the Character Menu."
35 msgstr "Podes aumentar um ou mais atributos através do menu Personagem."
36
37 #: ../../../src/Avatar.cpp:425
38 msgid "You may unlock one or more abilities through the Powers Menu."
39 msgstr "Podes desbloquear uma ou mais habilidades através do menu Poderes."
40
41 #: ../../../src/Avatar.cpp:692
3442 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3543 msgstr ""
3644 "Perdeste. Fim do jogo! Pressiona a tecla ${INPUT_CONTINUE} para sair para o "
3745 "ecrã principal."
3846
39 #: ../../../src/Avatar.cpp:589
47 #: ../../../src/Avatar.cpp:698
4048 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
4149 msgstr "Perdeste. Pressiona a tecla ${INPUT_CONTINUE} para continuar."
4250
43 #: ../../../src/Avatar.cpp:839
51 #: ../../../src/Avatar.cpp:949
4452 msgid "Transformation expired. You have been moved back to a safe place."
4553 msgstr "A transformação expirou. Foste transferido para um local seguro."
4654
4957 msgid "%d %s removed."
5058 msgstr "%d %s removido(a)."
5159
52 #: ../../../src/CampaignManager.cpp:162
60 #: ../../../src/CampaignManager.cpp:165
61 #, c-format
62 msgid "%s x%d removed."
63 msgstr ""
64
65 #: ../../../src/CampaignManager.cpp:167
5366 #, c-format
5467 msgid "%s removed."
5568 msgstr "%s removido(a)."
5669
57 #: ../../../src/CampaignManager.cpp:175
70 #: ../../../src/CampaignManager.cpp:180
5871 #, c-format
5972 msgid "You receive %s."
6073 msgstr "Recebes %s."
6174
62 #: ../../../src/CampaignManager.cpp:177
75 #: ../../../src/CampaignManager.cpp:182
6376 #, c-format
6477 msgid "You receive %s x%d."
6578 msgstr "Recebes %s x%d."
6679
67 #: ../../../src/CampaignManager.cpp:186
80 #: ../../../src/CampaignManager.cpp:191
6881 #, c-format
6982 msgid "You receive %d %s."
7083 msgstr "Recebes %d %s."
7184
72 #: ../../../src/CampaignManager.cpp:195
85 #: ../../../src/CampaignManager.cpp:200
7386 #, c-format
7487 msgid "You receive %d XP."
7588 msgstr "Recebes %d XP."
7689
77 #: ../../../src/CampaignManager.cpp:201
90 #: ../../../src/CampaignManager.cpp:206
7891 msgid "HP restored."
7992 msgstr "PV restaurado."
8093
81 #: ../../../src/CampaignManager.cpp:205
94 #: ../../../src/CampaignManager.cpp:210
8295 msgid "MP restored."
8396 msgstr "Mana restaurada."
8497
85 #: ../../../src/CampaignManager.cpp:210
98 #: ../../../src/CampaignManager.cpp:215
8699 msgid "HP and MP restored."
87100 msgstr "PV e Mana restaurados."
88101
89 #: ../../../src/CampaignManager.cpp:214
102 #: ../../../src/CampaignManager.cpp:219
90103 msgid "Negative effects removed."
91104 msgstr "Efeitos negativos removidos."
92105
93 #: ../../../src/CampaignManager.cpp:220
106 #: ../../../src/CampaignManager.cpp:225
94107 msgid "HP and MP restored, negative effects removed"
95108 msgstr "PV e Mana restaurados, efeitos negativos removidos."
96109
114127 "\n"
115128 "O renderizador padrão que é geralmente mais rápido que o rederizador por software SDL."
116129
117 #: ../../../src/EngineSettings.cpp:561
130 #: ../../../src/EngineSettings.cpp:572
118131 msgid "Adventurer"
119132 msgstr "Aventureiro"
120133
121 #: ../../../src/Entity.cpp:511
134 #: ../../../src/Entity.cpp:522
122135 msgid "miss"
123136 msgstr "errou"
124137
125 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
126 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
138 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
139 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
127140 #, c-format
128141 msgid "+%d HP"
129142 msgstr "+%d PV"
130143
131 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
132 #: ../../../src/StatBlock.cpp:822
144 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
145 #: ../../../src/StatBlock.cpp:830
133146 #, c-format
134147 msgid "+%d MP"
135148 msgstr "+%d Mana"
136149
137 #: ../../../src/EventManager.cpp:738
150 #: ../../../src/EventManager.cpp:782
138151 msgid "Unknown destination"
139152 msgstr "Destino desconhecido"
140153
141 #: ../../../src/GameStateConfigBase.cpp:89
142 #: ../../../src/GameStateConfigBase.cpp:110
154 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
155 msgid "Loading..."
156 msgstr "A carregar..."
157
158 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
159 msgid "Delete Save"
160 msgstr "Eliminar Jogo"
161
162 #: ../../../src/GameStateLoad.cpp:90
163 msgid "Delete this save?"
164 msgstr "Eliminar este jogo gravado?"
165
166 #: ../../../src/GameStateLoad.cpp:92
167 msgid "Exit to Title"
168 msgstr "Sair para o Título"
169
170 #: ../../../src/GameStateLoad.cpp:95
171 msgid "New Game"
172 msgstr "Novo Jogo"
173
174 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
175 msgid "Choose a Slot"
176 msgstr "Escolher Compartimento"
177
178 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
179 msgid "Enable a story mod to continue"
180 msgstr "Ativa um mod de campanha para continuar"
181
182 #: ../../../src/GameStateLoad.cpp:597
183 msgid "Load Game"
184 msgstr "Carregar Jogo"
185
186 #: ../../../src/GameStateLoad.cpp:706
187 msgid "Entering game world..."
188 msgstr "A entrar no mundo do jogo..."
189
190 #: ../../../src/GameStateLoad.cpp:709
191 msgid "Loading saved game..."
192 msgstr "A carregar o jogo gravado..."
193
194 #: ../../../src/GameStateLoad.cpp:742
195 msgid "Invalid save"
196 msgstr "Gravação inválida"
197
198 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
199 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
200 #: ../../../src/MenuPowers.cpp:1543
201 #, c-format
202 msgid "Level %d"
203 msgstr "Nível %d"
204
205 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
206 #: ../../../src/MenuConfig.cpp:244
207 msgid "Cancel"
208 msgstr "Cancelar"
209
210 #: ../../../src/GameStateNew.cpp:68
211 msgid "Create"
212 msgstr "Criar"
213
214 #: ../../../src/GameStateNew.cpp:76
215 msgid "Randomize"
216 msgstr "Aleatório"
217
218 #: ../../../src/GameStateNew.cpp:92
219 msgid "Choose a Portrait"
220 msgstr "Escolhe um Retrato"
221
222 #: ../../../src/GameStateNew.cpp:96
223 msgid "Choose a Name"
224 msgstr "Escolhe um Nome"
225
226 #: ../../../src/GameStateNew.cpp:100
227 msgid "Permadeath?"
228 msgstr "Morte Permanente?"
229
230 #: ../../../src/GameStateNew.cpp:104
231 msgid "Choose a Class"
232 msgstr "Escolhe uma Classe"
233
234 #: ../../../src/GameStateTitle.cpp:107
235 msgid "Play Game"
236 msgstr "Jogar"
237
238 #: ../../../src/GameStateTitle.cpp:110
239 msgid "Enable a core mod to continue"
240 msgstr "Ativa o mod do núcleo para continuar"
241
242 #: ../../../src/GameStateTitle.cpp:114
243 msgid "Configuration"
244 msgstr "Configuração"
245
246 #: ../../../src/GameStateTitle.cpp:117
247 msgid "Credits"
248 msgstr "Créditos"
249
250 #: ../../../src/GameStateTitle.cpp:120
251 msgid "Exit Game"
252 msgstr "Sair do Jogo"
253
254 #: ../../../src/InputState.cpp:407
255 msgid "Accept"
256 msgstr "Aceitar"
257
258 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
259 #: ../../../src/SDLInputState.cpp:698
260 msgid "Up"
261 msgstr "Cima"
262
263 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
264 #: ../../../src/SDLInputState.cpp:676
265 msgid "Down"
266 msgstr "Baixo"
267
268 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
269 #: ../../../src/SDLInputState.cpp:683
270 msgid "Left"
271 msgstr "Esquerda"
272
273 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
274 #: ../../../src/SDLInputState.cpp:693
275 msgid "Right"
276 msgstr "Direita"
277
278 #: ../../../src/InputState.cpp:412
279 msgid "Bar1"
280 msgstr "Barra1"
281
282 #: ../../../src/InputState.cpp:413
283 msgid "Bar2"
284 msgstr "Barra2"
285
286 #: ../../../src/InputState.cpp:414
287 msgid "Bar3"
288 msgstr "Barra3"
289
290 #: ../../../src/InputState.cpp:415
291 msgid "Bar4"
292 msgstr "Barra4"
293
294 #: ../../../src/InputState.cpp:416
295 msgid "Bar5"
296 msgstr "Barra5"
297
298 #: ../../../src/InputState.cpp:417
299 msgid "Bar6"
300 msgstr "Barra6"
301
302 #: ../../../src/InputState.cpp:418
303 msgid "Bar7"
304 msgstr "Barra7"
305
306 #: ../../../src/InputState.cpp:419
307 msgid "Bar8"
308 msgstr "Barra8"
309
310 #: ../../../src/InputState.cpp:420
311 msgid "Bar9"
312 msgstr "Barra9"
313
314 #: ../../../src/InputState.cpp:421
315 msgid "Bar0"
316 msgstr "Barra0"
317
318 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
319 #: ../../../src/MenuCharacter.cpp:54
320 msgid "Character"
321 msgstr "Personagem"
322
323 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
324 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
325 msgid "Inventory"
326 msgstr "Inventário"
327
328 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
329 #: ../../../src/MenuPowers.cpp:167
330 msgid "Powers"
331 msgstr "Poderes"
332
333 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
334 #: ../../../src/MenuLog.cpp:72
335 msgid "Log"
336 msgstr "Diário"
337
338 #: ../../../src/InputState.cpp:426
339 msgid "Main1"
340 msgstr "Principal1"
341
342 #: ../../../src/InputState.cpp:427
343 msgid "Main2"
344 msgstr "Principal2"
345
346 #: ../../../src/InputState.cpp:428
347 msgid "Ctrl"
348 msgstr "Ctrl"
349
350 #: ../../../src/InputState.cpp:429
351 msgid "Shift"
352 msgstr "Shift"
353
354 #: ../../../src/InputState.cpp:430
355 msgid "Alt"
356 msgstr "Alt"
357
358 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
359 msgid "Delete"
360 msgstr "Remover"
361
362 #: ../../../src/InputState.cpp:432
363 msgid "ActionBar Accept"
364 msgstr "Barra de Ação Aceitar"
365
366 #: ../../../src/InputState.cpp:433
367 msgid "ActionBar Left"
368 msgstr "Barra de Ação Esquerda"
369
370 #: ../../../src/InputState.cpp:434
371 msgid "ActionBar Right"
372 msgstr "Barra de Ação Direita"
373
374 #: ../../../src/InputState.cpp:435
375 msgid "ActionBar Use"
376 msgstr "Barra de Ação Usar"
377
378 #: ../../../src/InputState.cpp:436
379 msgid "Developer Menu"
380 msgstr "Menu Programador"
381
382 #: ../../../src/InputState.cpp:438
383 msgid "Left Mouse"
384 msgstr "Botão Esq. Rato"
385
386 #: ../../../src/InputState.cpp:439
387 msgid "Middle Mouse"
388 msgstr "Botão Meio Rato"
389
390 #: ../../../src/InputState.cpp:440
391 msgid "Right Mouse"
392 msgstr "Botão Dir. Rato"
393
394 #: ../../../src/InputState.cpp:441
395 msgid "Wheel Up"
396 msgstr "Roda p/Cima"
397
398 #: ../../../src/InputState.cpp:442
399 msgid "Wheel Down"
400 msgstr "Roda p/Baixo"
401
402 #: ../../../src/InputState.cpp:443
403 msgid "Mouse X1"
404 msgstr "Rato X1"
405
406 #: ../../../src/InputState.cpp:444
407 msgid "Mouse X2"
408 msgstr "Rato X2"
409
410 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
411 msgid "Unknown Item"
412 msgstr "Item Desconhecido"
413
414 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
415 #, c-format
416 msgid "%d%% Speed"
417 msgstr "%d%% Velocidade"
418
419 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
420 #, c-format
421 msgid "%d%% Attack Speed"
422 msgstr "%d%% Velocidade de Ataque"
423
424 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
425 #: ../../../src/MenuPowers.cpp:832
426 #, c-format
427 msgid "Resistance (%s)"
428 msgstr "Resistência (%s)"
429
430 #: ../../../src/ItemManager.cpp:714
431 #, c-format
432 msgid "Requires %s"
433 msgstr "Necessita de %s"
434
435 #: ../../../src/ItemManager.cpp:763
436 msgid "Quest Item"
437 msgstr "Item de Missão"
438
439 #: ../../../src/ItemManager.cpp:790
440 #, c-format
441 msgid "Quality: %s"
442 msgstr "Qualidade: %s"
443
444 #: ../../../src/ItemManager.cpp:815
445 #, c-format
446 msgid "Absorb: %d-%d"
447 msgstr "Absorve: %d-%d"
448
449 #: ../../../src/ItemManager.cpp:817
450 #, c-format
451 msgid "Absorb: %d"
452 msgstr "Absorve: %d"
453
454 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
455 #: ../../../src/MenuPowers.cpp:1133
456 #, c-format
457 msgid "Requires Level %d"
458 msgstr "Requer Nível %d"
459
460 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
461 #: ../../../src/MenuPowers.cpp:1124
462 #, c-format
463 msgid "Requires %s %d"
464 msgstr "Necessita %s %d"
465
466 #: ../../../src/ItemManager.cpp:879
467 #, c-format
468 msgid "Requires Class: %s"
469 msgstr "Necessita da Classe: %s"
470
471 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
472 #, c-format
473 msgid "Buy Price: %d %s"
474 msgstr "Preço de Compra: %d %s"
475
476 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
477 #, c-format
478 msgid "Buy Price: %d %s each"
479 msgstr "Preço de Compra: %d %s cada"
480
481 #: ../../../src/ItemManager.cpp:916
482 #, c-format
483 msgid "Sell Price: %d %s"
484 msgstr "Preço de Venda: %d %s"
485
486 #: ../../../src/ItemManager.cpp:918
487 #, c-format
488 msgid "Sell Price: %d %s each"
489 msgstr "Preço de Venda: %d %s cada"
490
491 #: ../../../src/ItemManager.cpp:927
492 msgid "Set:"
493 msgstr "Conjunto:"
494
495 #: ../../../src/ItemManager.cpp:934
496 #, c-format
497 msgid "%d items:"
498 msgstr "%d itens:"
499
500 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
501 #, c-format
502 msgid "Press [%s] to use"
503 msgstr "Pressionar [%s] para usar"
504
505 #: ../../../src/ItemManager.cpp:951
506 #, c-format
507 msgid "Press [%s] to read"
508 msgstr "Pressionar [%s] para ler"
509
510 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
511 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
512 #, c-format
513 msgid "Hotkey: %s"
514 msgstr "Atalho: %s"
515
516 #: ../../../src/MenuActionBar.cpp:599
517 msgid "Not enough MP."
518 msgstr "Sem mana suficiente."
519
520 #: ../../../src/MenuActiveEffects.cpp:124
521 #, c-format
522 msgid "x%d"
523 msgstr "x%d"
524
525 #: ../../../src/MenuActiveEffects.cpp:219
526 msgid "Remaining:"
527 msgstr "Restante:"
528
529 #: ../../../src/MenuActiveEffects.cpp:225
530 #, c-format
531 msgid "x%d stacks"
532 msgstr "x%d pilhas"
533
534 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
535 msgid "Name"
536 msgstr "Nome"
537
538 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
539 msgid "Level"
540 msgstr "Nível"
541
542 #: ../../../src/MenuCharacter.cpp:310
543 #, c-format
544 msgid "%d unspent stat point"
545 msgstr "%d ponto não utilizado"
546
547 #: ../../../src/MenuCharacter.cpp:313
548 #, c-format
549 msgid "%d unspent stat points"
550 msgstr "%d pontos não utilizados"
551
552 #: ../../../src/MenuCharacter.cpp:355
553 #, c-format
554 msgid "Reduces the damage taken from \"%s\" elemental attacks."
555 msgstr "Reduz o dano recebido de \"%s\" ataques elementais."
556
557 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
558 #, c-format
559 msgid "XP: %d"
560 msgstr "EXP: %d"
561
562 #: ../../../src/MenuCharacter.cpp:367
563 #, c-format
564 msgid "Next: %d"
565 msgstr "Próximo: %d"
566
567 #: ../../../src/MenuCharacter.cpp:373
568 #, c-format
569 msgid "base (%d), bonus (%d)"
570 msgstr "base (%d), bónus (%d)"
571
572 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
573 msgid "Related stats:"
574 msgstr "Estatísticas relacionadas:"
575
576 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
577 #, c-format
578 msgid "Each level grants %d."
579 msgstr "Cada nível garante %d."
580
581 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
582 #, c-format
583 msgid "Each point of %s grants %d."
584 msgstr "Cada ponto de %s dá %d."
585
586 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
587 msgid "Clear"
588 msgstr "Limpar"
589
590 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
591 msgid "Assign:"
592 msgstr "Atribuir:"
593
594 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
143595 msgid "Defaults"
144596 msgstr "Repor"
145597
146 #: ../../../src/GameStateConfigBase.cpp:89
598 #: ../../../src/MenuConfig.cpp:123
147599 msgid "Reset ALL settings?"
148600 msgstr "Repor TODAS as configurações de origem?"
149601
150 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
602 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
151603 msgid "OK"
152604 msgstr "OK"
153605
154 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
155 #: ../../../src/InputState.cpp:401
156 msgid "Cancel"
157 msgstr "Cancelar"
158
159 #: ../../../src/GameStateConfigBase.cpp:160
160 #: ../../../src/GameStateConfigDesktop.cpp:130
606 #: ../../../src/MenuConfig.cpp:246
607 msgid "Continue"
608 msgstr "Continuar"
609
610 #: ../../../src/MenuConfig.cpp:248
611 msgid "Save Game"
612 msgstr ""
613
614 #: ../../../src/MenuConfig.cpp:291
615 msgid "Default"
616 msgstr "Padrão"
617
618 #: ../../../src/MenuConfig.cpp:291
619 msgid ""
620 "Show all loot tooltips, except for those that would be obscured by the "
621 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
622 msgstr ""
623 "Mostrar todas as legendas de pilhagem, exceto aquelas que sejam ocultadas "
624 "pelo jogador ou por um inimigo. Pode-se ver todas as legendas de pilhagens "
625 "temporariamente com a tecla 'Alt'."
626
627 #: ../../../src/MenuConfig.cpp:292
628 msgid "Show all"
629 msgstr "Mostrar tudo"
630
631 #: ../../../src/MenuConfig.cpp:292
632 msgid ""
633 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
634 msgstr ""
635 "Mostrar sempre as legendas de pilhagens. Pode-se ocultar todas as legendas "
636 "de pilhagens temporariamente com a tecla 'Alt'."
637
638 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
639 msgid "Hidden"
640 msgstr "Oculto"
641
642 #: ../../../src/MenuConfig.cpp:293
643 msgid ""
644 "Always hide loot tooltips, except for when a piece of loot is hovered with "
645 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
646 msgstr ""
647 "Mostrar sempre as legendas das pilhagens, exceto quando o cursor passar por "
648 "cima delas. Pode-se ver todas as legendas de pilhagens temporariamente com a"
649 " tecla 'Alt'."
650
651 #: ../../../src/MenuConfig.cpp:296
652 msgid "Visible"
653 msgstr "Visível"
654
655 #: ../../../src/MenuConfig.cpp:297
656 msgid "Visible (2x zoom)"
657 msgstr "Visível (2x zoom)"
658
659 #: ../../../src/MenuConfig.cpp:301
660 msgid ""
661 "Controls the type of warning to be activated when the player is below the "
662 "low health threshold."
663 msgstr ""
664 "Controla o tipo de aviso a ser ativado quando o jogador tem a vida abaixo do"
665 " limiar."
666
667 #: ../../../src/MenuConfig.cpp:302
668 msgid "- Display a message"
669 msgstr "- Mostrar uma mensagem"
670
671 #: ../../../src/MenuConfig.cpp:303
672 msgid "- Play a sound"
673 msgstr "- Reproduzir um som"
674
675 #: ../../../src/MenuConfig.cpp:304
676 msgid "- Change the cursor"
677 msgstr "- Alterar o cursor"
678
679 #: ../../../src/MenuConfig.cpp:306
680 msgid "Disabled"
681 msgstr "Desativado"
682
683 #: ../../../src/MenuConfig.cpp:307
684 msgid "All"
685 msgstr "Tudo"
686
687 #: ../../../src/MenuConfig.cpp:308
688 msgid "Message & Cursor"
689 msgstr "Mensagem e cursor"
690
691 #: ../../../src/MenuConfig.cpp:309
692 msgid "Message & Sound"
693 msgstr "Mensagem e som"
694
695 #: ../../../src/MenuConfig.cpp:310
696 msgid "Sound & Cursor"
697 msgstr "Som e cursor"
698
699 #: ../../../src/MenuConfig.cpp:311
700 msgid "Message"
701 msgstr "Mensagem"
702
703 #: ../../../src/MenuConfig.cpp:312
704 msgid "Cursor"
705 msgstr "Cursor"
706
707 #: ../../../src/MenuConfig.cpp:313
708 msgid "Sound"
709 msgstr "Som"
710
711 #: ../../../src/MenuConfig.cpp:319
712 msgid ""
713 "When the player's health drops below the given threshold, the low health "
714 "notifications are triggered if one or more of them is enabled."
715 msgstr ""
716 "Quando a vida do jogador desce abaixo do limiar definido, são ativadas as "
717 "notificações de pouca vida se uma ou mais notificações estiverem ativadas."
718
719 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
720 msgid "Exit"
721 msgstr "Sair"
722
723 #: ../../../src/MenuConfig.cpp:333
724 msgid "Video"
725 msgstr "Vídeo"
726
727 #: ../../../src/MenuConfig.cpp:334
161728 msgid "Audio"
162729 msgstr "Áudio"
163730
164 #: ../../../src/GameStateConfigBase.cpp:161
165 #: ../../../src/GameStateConfigDesktop.cpp:131
731 #: ../../../src/MenuConfig.cpp:335
166732 msgid "Interface"
167733 msgstr "Interface"
168734
169 #: ../../../src/GameStateConfigBase.cpp:162
170 #: ../../../src/GameStateConfigDesktop.cpp:134
735 #: ../../../src/MenuConfig.cpp:336
736 msgid "Input"
737 msgstr "Entrada"
738
739 #: ../../../src/MenuConfig.cpp:337
740 msgid "Keybindings"
741 msgstr "Teclas de atalho"
742
743 #: ../../../src/MenuConfig.cpp:338
171744 msgid "Mods"
172745 msgstr "Mods"
173746
174 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
747 #: ../../../src/MenuConfig.cpp:350
748 msgid "Paused"
749 msgstr "Pausado"
750
751 #: ../../../src/MenuConfig.cpp:353
752 msgid "Time Played"
753 msgstr "Tempo Jogado"
754
755 #: ../../../src/MenuConfig.cpp:359
756 msgid "Renderer"
757 msgstr "Renderizador"
758
759 #: ../../../src/MenuConfig.cpp:360
760 msgid "Full Screen Mode"
761 msgstr "Modo ecrã cheio"
762
763 #: ../../../src/MenuConfig.cpp:361
764 msgid "Hardware surfaces"
765 msgstr "Superfícies de hardware"
766
767 #: ../../../src/MenuConfig.cpp:362
768 msgid "V-Sync"
769 msgstr "Sincronização vertical"
770
771 #: ../../../src/MenuConfig.cpp:363
772 msgid "Texture Filtering"
773 msgstr "Filtro de textura"
774
775 #: ../../../src/MenuConfig.cpp:364
776 msgid "DPI scaling"
777 msgstr "Escalonamento por DPI"
778
779 #: ../../../src/MenuConfig.cpp:365
780 msgid "Parallax Layers"
781 msgstr "Camadas de Paralaxe"
782
783 #: ../../../src/MenuConfig.cpp:366
784 msgid "Allow changing gamma"
785 msgstr "Permitir a mudança de gama"
786
787 #: ../../../src/MenuConfig.cpp:367
788 msgid "Gamma"
789 msgstr "Gama"
790
791 #: ../../../src/MenuConfig.cpp:369
792 msgid "Sound Volume"
793 msgstr "Volume do som"
794
795 #: ../../../src/MenuConfig.cpp:370
175796 msgid "Music Volume"
176797 msgstr "Volume da música"
177798
178 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
179 msgid "Sound Volume"
180 msgstr "Volume do som"
181
182 #: ../../../src/GameStateConfigBase.cpp:257
799 #: ../../../src/MenuConfig.cpp:372
183800 msgid "Language"
184801 msgstr "Idioma"
185802
186 #: ../../../src/GameStateConfigBase.cpp:266
803 #: ../../../src/MenuConfig.cpp:373
187804 msgid "Show FPS"
188805 msgstr "Mostrar FPS"
189806
190 #: ../../../src/GameStateConfigBase.cpp:270
807 #: ../../../src/MenuConfig.cpp:374
808 msgid "Hardware mouse cursor"
809 msgstr "Renderizar cursor do rato por hardware"
810
811 #: ../../../src/MenuConfig.cpp:375
191812 msgid "Colorblind Mode"
192813 msgstr "Modo daltónico"
193814
194 #: ../../../src/GameStateConfigBase.cpp:274
195 msgid "Hardware mouse cursor"
196 msgstr "Renderizar cursor do rato por hardware"
197
198 #: ../../../src/GameStateConfigBase.cpp:278
815 #: ../../../src/MenuConfig.cpp:376
199816 msgid "Developer Mode"
200817 msgstr "Modo programador"
201818
202 #: ../../../src/GameStateConfigBase.cpp:282
819 #: ../../../src/MenuConfig.cpp:377
203820 msgid "Subtitles"
204821 msgstr "Subtítulos"
205822
206 #: ../../../src/GameStateConfigBase.cpp:286
207 msgid "Active Mods"
208 msgstr "Mods ativos"
209
210 #: ../../../src/GameStateConfigBase.cpp:295
211 msgid "Available Mods"
212 msgstr "Mods disponíveis"
213
214 #: ../../../src/GameStateConfigBase.cpp:314
215 msgid "<< Disable"
216 msgstr "<< Desativar"
217
218 #: ../../../src/GameStateConfigBase.cpp:320
219 msgid "Enable >>"
220 msgstr "Ativar >>"
221
222 #: ../../../src/GameStateConfigBase.cpp:873
223 msgid "Version:"
224 msgstr "Versão:"
225
226 #: ../../../src/GameStateConfigBase.cpp:878
227 msgid "Game:"
228 msgstr "Jogo:"
229
230 #: ../../../src/GameStateConfigBase.cpp:883
231 msgid "Engine version:"
232 msgstr "Versão do motor:"
233
234 #: ../../../src/GameStateConfigBase.cpp:891
235 msgid "Requires mods:"
236 msgstr "Necessita dos mods:"
237
238 #: ../../../src/GameStateConfigDesktop.cpp:83
239 #: ../../../src/GameStateConfigDesktop.cpp:751
240 msgid "Clear"
241 msgstr "Limpar"
242
243 #: ../../../src/GameStateConfigDesktop.cpp:83
244 #: ../../../src/GameStateConfigDesktop.cpp:749
245 msgid "Assign:"
246 msgstr "Atribuir:"
247
248 #: ../../../src/GameStateConfigDesktop.cpp:128
249 msgid "Video"
250 msgstr "Vídeo"
251
252 #: ../../../src/GameStateConfigDesktop.cpp:132
253 msgid "Input"
254 msgstr "Entrada"
255
256 #: ../../../src/GameStateConfigDesktop.cpp:133
257 msgid "Keybindings"
258 msgstr "Teclas de atalho"
259
260 #: ../../../src/GameStateConfigDesktop.cpp:188
823 #: ../../../src/MenuConfig.cpp:378
824 msgid "Loot tooltip visibility"
825 msgstr "Visibilidade das legendas da pilhagem"
826
827 #: ../../../src/MenuConfig.cpp:379
828 msgid "Mini-map mode"
829 msgstr "Modo mini-mapa"
830
831 #: ../../../src/MenuConfig.cpp:380
832 msgid "Always show stat bar labels"
833 msgstr "Mostrar sempre etiquetas na barra de estatísticas"
834
835 #: ../../../src/MenuConfig.cpp:381
836 msgid "Allow stat bar auto-hiding"
837 msgstr "Permitir ocultar automaticamente a barra de estatísticas"
838
839 #: ../../../src/MenuConfig.cpp:382
840 msgid "Show combat text"
841 msgstr "Mostrar texto de combate"
842
843 #: ../../../src/MenuConfig.cpp:383
844 msgid "Automatically equip items"
845 msgstr "Equipar itens automaticamente"
846
847 #: ../../../src/MenuConfig.cpp:384
848 msgid "Show hidden entity markers"
849 msgstr "Mostrar marcadores de entidades ocultas"
850
851 #: ../../../src/MenuConfig.cpp:385
852 msgid "Low health notification"
853 msgstr "Notificação de pouca vida"
854
855 #: ../../../src/MenuConfig.cpp:386
856 msgid "Low health threshold"
857 msgstr "Limiar de pouca vida"
858
859 #: ../../../src/MenuConfig.cpp:389
860 msgid "Joystick"
861 msgstr "Joystick"
862
863 #: ../../../src/MenuConfig.cpp:390
864 msgid "Move hero using mouse"
865 msgstr "Mover herói utilizando o rato"
866
867 #: ../../../src/MenuConfig.cpp:391
868 msgid "Mouse aim"
869 msgstr "Fazer mira com o rato"
870
871 #: ../../../src/MenuConfig.cpp:392
872 msgid "Do not use mouse"
873 msgstr "Não usar rato"
874
875 #: ../../../src/MenuConfig.cpp:393
876 msgid "Swap mouse movement button"
877 msgstr "Trocar botão de movimento do rato"
878
879 #: ../../../src/MenuConfig.cpp:394
880 msgid "Attack with mouse movement"
881 msgstr "Atacar com o movimento do rato"
882
883 #: ../../../src/MenuConfig.cpp:395
884 msgid "Joystick Deadzone"
885 msgstr "Zona morta do joystick"
886
887 #: ../../../src/MenuConfig.cpp:405
888 #, c-format
889 msgid "Primary binding: %s"
890 msgstr "Atalho principal: %s"
891
892 #: ../../../src/MenuConfig.cpp:406
893 #, c-format
894 msgid "Alternate binding: %s"
895 msgstr "Atalho alternativo: %s"
896
897 #: ../../../src/MenuConfig.cpp:407
898 #, c-format
899 msgid "Joystick binding: %s"
900 msgstr "Atalho do joystick: %s"
901
902 #: ../../../src/MenuConfig.cpp:508
261903 msgid ""
262904 "Will try to store surfaces in video memory versus system memory. The effect "
263905 "this has on performance depends on the renderer."
265907 "Tentar armazenar as superfícies na memória de vídeo e não na memória do "
266908 "sistema. O efeito que terá no desempenho depende do renderizador."
267909
268 #: ../../../src/GameStateConfigDesktop.cpp:189
910 #: ../../../src/MenuConfig.cpp:509
269911 msgid ""
270912 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
271913 "windowed mode or input lag."
273915 "Evita o desfazamento vertical no ecrã. Desativar se ocorrerem atrasos no "
274916 "modo janela ou atraso na imagem."
275917
276 #: ../../../src/GameStateConfigDesktop.cpp:190
918 #: ../../../src/MenuConfig.cpp:510
277919 msgid ""
278920 "When enabled, this uses the screen DPI in addition to the window dimensions "
279921 "to scale the rendering resolution. Otherwise, only the window dimensions are"
283925 "resolução de renderização. Caso contrário, serão utilizadas apenas as "
284926 "dimensões da janela."
285927
286 #: ../../../src/GameStateConfigDesktop.cpp:191
928 #: ../../../src/MenuConfig.cpp:511
287929 msgid ""
288930 "This enables parallax (non-tile) layers. Disabling this setting can improve "
289931 "performance in some cases."
291933 "Isto ativa as camadas paralaxe (não-telas). Desativar isto pode melhorar a "
292934 "performance em alguns casos."
293935
294 #: ../../../src/GameStateConfigDesktop.cpp:192
295 msgid "Experimental"
296 msgstr "Experimental"
297
298 #: ../../../src/GameStateConfigDesktop.cpp:193
299 msgid "For handheld devices"
300 msgstr "Para dispositivos portáteis"
301
302 #: ../../../src/GameStateConfigDesktop.cpp:211
303 msgid "Renderer"
304 msgstr "Renderizador"
305
306 #: ../../../src/GameStateConfigDesktop.cpp:227
307 msgid "Full Screen Mode"
308 msgstr "Modo ecrã cheio"
309
310 #: ../../../src/GameStateConfigDesktop.cpp:231
311 msgid "Move hero using mouse"
312 msgstr "Mover herói utilizando o rato"
313
314 #: ../../../src/GameStateConfigDesktop.cpp:235
315 msgid "Hardware surfaces"
316 msgstr "Superfícies de hardware"
317
318 #: ../../../src/GameStateConfigDesktop.cpp:239
319 msgid "V-Sync"
320 msgstr "Sincronização vertical"
321
322 #: ../../../src/GameStateConfigDesktop.cpp:243
323 msgid "Texture Filtering"
324 msgstr "Filtro de textura"
325
326 #: ../../../src/GameStateConfigDesktop.cpp:247
327 msgid "DPI scaling"
328 msgstr "Escalonamento por DPI"
329
330 #: ../../../src/GameStateConfigDesktop.cpp:251
331 msgid "Parallax Layers"
332 msgstr "Camadas de Paralaxe"
333
334 #: ../../../src/GameStateConfigDesktop.cpp:255
335 msgid "Allow changing gamma"
336 msgstr "Permitir a mudança de gama"
337
338 #: ../../../src/GameStateConfigDesktop.cpp:259
339 msgid "Gamma"
340 msgstr "Gama"
341
342 #: ../../../src/GameStateConfigDesktop.cpp:263
343 msgid "Use joystick"
344 msgstr "Usar joystick"
345
346 #: ../../../src/GameStateConfigDesktop.cpp:267
347 msgid "Joystick"
348 msgstr "Joystick"
349
350 #: ../../../src/GameStateConfigDesktop.cpp:283
351 msgid "Mouse aim"
352 msgstr "Fazer mira com o rato"
353
354 #: ../../../src/GameStateConfigDesktop.cpp:287
355 msgid "Do not use mouse"
356 msgstr "Não usar rato"
357
358 #: ../../../src/GameStateConfigDesktop.cpp:291
359 msgid "Joystick Deadzone"
360 msgstr "Zona morta do joystick"
361
362 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
363 msgid "Loading..."
364 msgstr "A carregar..."
365
366 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
367 msgid "Delete Save"
368 msgstr "Eliminar Jogo"
369
370 #: ../../../src/GameStateLoad.cpp:88
371 msgid "Delete this save?"
372 msgstr "Eliminar este jogo gravado?"
373
374 #: ../../../src/GameStateLoad.cpp:90
375 msgid "Exit to Title"
376 msgstr "Sair para o Título"
377
378 #: ../../../src/GameStateLoad.cpp:93
379 msgid "New Game"
380 msgstr "Novo Jogo"
381
382 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
383 msgid "Choose a Slot"
384 msgstr "Escolhe o Espaço"
385
386 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
387 msgid "Enable a story mod to continue"
388 msgstr "Ativa um mod de campanha para continuar"
389
390 #: ../../../src/GameStateLoad.cpp:589
391 msgid "Load Game"
392 msgstr "Carregar Jogo"
393
394 #: ../../../src/GameStateLoad.cpp:695
395 msgid "Entering game world..."
396 msgstr "A entrar no mundo do jogo..."
397
398 #: ../../../src/GameStateLoad.cpp:698
399 msgid "Loading saved game..."
400 msgstr "A carregar o jogo gravado..."
401
402 #: ../../../src/GameStateLoad.cpp:731
403 msgid "Invalid save"
404 msgstr "Gravação inválida"
405
406 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
407 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
408 #: ../../../src/MenuPowers.cpp:1542
409 #, c-format
410 msgid "Level %d"
411 msgstr "Nível %d"
412
413 #: ../../../src/GameStateNew.cpp:68
414 msgid "Create"
415 msgstr "Criar"
416
417 #: ../../../src/GameStateNew.cpp:76
418 msgid "Randomize"
419 msgstr "Aleatório"
420
421 #: ../../../src/GameStateNew.cpp:92
422 msgid "Choose a Portrait"
423 msgstr "Escolhe um Retrato"
424
425 #: ../../../src/GameStateNew.cpp:96
426 msgid "Choose a Name"
427 msgstr "Escolhe um Nome"
428
429 #: ../../../src/GameStateNew.cpp:100
430 msgid "Permadeath?"
431 msgstr "Morte Permanente?"
432
433 #: ../../../src/GameStateNew.cpp:104
434 msgid "Choose a Class"
435 msgstr "Escolhe uma Classe"
436
437 #: ../../../src/GameStateTitle.cpp:108
438 msgid "Play Game"
439 msgstr "Jogar"
440
441 #: ../../../src/GameStateTitle.cpp:111
442 msgid "Enable a core mod to continue"
443 msgstr "Ativa o mod do núcleo para continuar"
444
445 #: ../../../src/GameStateTitle.cpp:115
446 msgid "Configuration"
447 msgstr "Configuração"
448
449 #: ../../../src/GameStateTitle.cpp:118
450 msgid "Credits"
451 msgstr "Créditos"
452
453 #: ../../../src/GameStateTitle.cpp:121
454 msgid "Exit Game"
455 msgstr "Sair do Jogo"
456
457 #: ../../../src/InputState.cpp:402
458 msgid "Accept"
459 msgstr "Aceitar"
460
461 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
462 msgid "Up"
463 msgstr "Cima"
464
465 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
466 msgid "Down"
467 msgstr "Baixo"
468
469 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
470 msgid "Left"
471 msgstr "Esquerda"
472
473 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
474 msgid "Right"
475 msgstr "Direita"
476
477 #: ../../../src/InputState.cpp:407
478 msgid "Bar1"
479 msgstr "Barra1"
480
481 #: ../../../src/InputState.cpp:408
482 msgid "Bar2"
483 msgstr "Barra2"
484
485 #: ../../../src/InputState.cpp:409
486 msgid "Bar3"
487 msgstr "Barra3"
488
489 #: ../../../src/InputState.cpp:410
490 msgid "Bar4"
491 msgstr "Barra4"
492
493 #: ../../../src/InputState.cpp:411
494 msgid "Bar5"
495 msgstr "Barra5"
496
497 #: ../../../src/InputState.cpp:412
498 msgid "Bar6"
499 msgstr "Barra6"
500
501 #: ../../../src/InputState.cpp:413
502 msgid "Bar7"
503 msgstr "Barra7"
504
505 #: ../../../src/InputState.cpp:414
506 msgid "Bar8"
507 msgstr "Barra8"
508
509 #: ../../../src/InputState.cpp:415
510 msgid "Bar9"
511 msgstr "Barra9"
512
513 #: ../../../src/InputState.cpp:416
514 msgid "Bar0"
515 msgstr "Barra0"
516
517 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
518 #: ../../../src/MenuCharacter.cpp:54
519 msgid "Character"
520 msgstr "Personagem"
521
522 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
523 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
524 msgid "Inventory"
525 msgstr "Inventário"
526
527 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
528 #: ../../../src/MenuPowers.cpp:168
529 msgid "Powers"
530 msgstr "Poderes"
531
532 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
533 #: ../../../src/MenuLog.cpp:72
534 msgid "Log"
535 msgstr "Diário"
536
537 #: ../../../src/InputState.cpp:421
538 msgid "Main1"
539 msgstr "Principal1"
540
541 #: ../../../src/InputState.cpp:422
542 msgid "Main2"
543 msgstr "Principal2"
544
545 #: ../../../src/InputState.cpp:423
546 msgid "Ctrl"
547 msgstr "Ctrl"
548
549 #: ../../../src/InputState.cpp:424
550 msgid "Shift"
551 msgstr "Shift"
552
553 #: ../../../src/InputState.cpp:425
554 msgid "Alt"
555 msgstr "Alt"
556
557 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
558 msgid "Delete"
559 msgstr "Remover"
560
561 #: ../../../src/InputState.cpp:427
562 msgid "ActionBar Accept"
563 msgstr "Barra de Ação Aceitar"
564
565 #: ../../../src/InputState.cpp:428
566 msgid "ActionBar Left"
567 msgstr "Barra de Ação Esquerda"
568
569 #: ../../../src/InputState.cpp:429
570 msgid "ActionBar Right"
571 msgstr "Barra de Ação Direita"
572
573 #: ../../../src/InputState.cpp:430
574 msgid "ActionBar Use"
575 msgstr "Barra de Ação Usar"
576
577 #: ../../../src/InputState.cpp:431
578 msgid "Developer Menu"
579 msgstr "Menu Programador"
580
581 #: ../../../src/InputState.cpp:433
582 msgid "Left Mouse"
583 msgstr "Botão Esq. Rato"
584
585 #: ../../../src/InputState.cpp:434
586 msgid "Middle Mouse"
587 msgstr "Botão Meio Rato"
588
589 #: ../../../src/InputState.cpp:435
590 msgid "Right Mouse"
591 msgstr "Botão Dir. Rato"
592
593 #: ../../../src/InputState.cpp:436
594 msgid "Wheel Up"
595 msgstr "Roda p/Cima"
596
597 #: ../../../src/InputState.cpp:437
598 msgid "Wheel Down"
599 msgstr "Roda p/Baixo"
600
601 #: ../../../src/InputState.cpp:438
602 msgid "Mouse X1"
603 msgstr "Rato X1"
604
605 #: ../../../src/InputState.cpp:439
606 msgid "Mouse X2"
607 msgstr "Rato X2"
608
609 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
610 msgid "Unknown Item"
611 msgstr "Item Desconhecido"
612
613 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
614 #, c-format
615 msgid "%d%% Speed"
616 msgstr "%d%% Velocidade"
617
618 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
619 #, c-format
620 msgid "%d%% Attack Speed"
621 msgstr "%d%% Velocidade de Ataque"
622
623 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
624 #: ../../../src/MenuPowers.cpp:833
625 #, c-format
626 msgid "Resistance (%s)"
627 msgstr "Resistência (%s)"
628
629 #: ../../../src/ItemManager.cpp:684
630 #, c-format
631 msgid "Requires %s"
632 msgstr "Necessita de %s"
633
634 #: ../../../src/ItemManager.cpp:733
635 msgid "Quest Item"
636 msgstr "Item de Missão"
637
638 #: ../../../src/ItemManager.cpp:760
639 #, c-format
640 msgid "Quality: %s"
641 msgstr "Qualidade: %s"
642
643 #: ../../../src/ItemManager.cpp:785
644 #, c-format
645 msgid "Absorb: %d-%d"
646 msgstr "Absorve: %d-%d"
647
648 #: ../../../src/ItemManager.cpp:787
649 #, c-format
650 msgid "Absorb: %d"
651 msgstr "Absorve: %d"
652
653 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
654 #: ../../../src/MenuPowers.cpp:1134
655 #, c-format
656 msgid "Requires Level %d"
657 msgstr "Requer Nível %d"
658
659 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
660 #: ../../../src/MenuPowers.cpp:1125
661 #, c-format
662 msgid "Requires %s %d"
663 msgstr "Necessita %s %d"
664
665 #: ../../../src/ItemManager.cpp:849
666 #, c-format
667 msgid "Requires Class: %s"
668 msgstr "Necessita da Classe: %s"
669
670 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
671 #, c-format
672 msgid "Buy Price: %d %s"
673 msgstr "Preço de Compra: %d %s"
674
675 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
676 #, c-format
677 msgid "Buy Price: %d %s each"
678 msgstr "Preço de Compra: %d %s cada"
679
680 #: ../../../src/ItemManager.cpp:886
681 #, c-format
682 msgid "Sell Price: %d %s"
683 msgstr "Preço de Venda: %d %s"
684
685 #: ../../../src/ItemManager.cpp:888
686 #, c-format
687 msgid "Sell Price: %d %s each"
688 msgstr "Preço de Venda: %d %s cada"
689
690 #: ../../../src/ItemManager.cpp:897
691 msgid "Set:"
692 msgstr "Conjunto:"
693
694 #: ../../../src/ItemManager.cpp:904
695 #, c-format
696 msgid "%d items:"
697 msgstr "%d itens:"
698
699 #: ../../../src/ItemManager.cpp:917
700 #, c-format
701 msgid "Press [%s] to use"
702 msgstr "Pressionar [%s] para usar"
703
704 #: ../../../src/ItemManager.cpp:920
705 #, c-format
706 msgid "Press [%s] to read"
707 msgstr "Pressionar [%s] para ler"
708
709 #: ../../../src/MenuActionBar.cpp:87
710 msgid "Loot tooltip visibility"
711 msgstr "Visibilidade das legendas dos saques"
712
713 #: ../../../src/MenuActionBar.cpp:88
714 msgid "Mini-map mode"
715 msgstr "Modo mini-mapa"
716
717 #: ../../../src/MenuActionBar.cpp:89
718 msgid "Always show stat bar labels"
719 msgstr "Mostrar sempre etiquetas na barra de estatísticas"
720
721 #: ../../../src/MenuActionBar.cpp:90
722 msgid "Show combat text"
723 msgstr "Mostrar texto de combate"
724
725 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
726 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
727 #, c-format
728 msgid "Hotkey: %s"
729 msgstr "Atalho: %s"
730
731 #: ../../../src/MenuActionBar.cpp:474
732 #, c-format
733 msgid "Default. Temporarily show all loot tooltips with '%s'."
734 msgstr ""
735 "Padrão. Mostrar temporariamente todas as legendas dos saques com '%s'."
736
737 #: ../../../src/MenuActionBar.cpp:476
738 #, c-format
739 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
740 msgstr ""
741 "Mostrar tudo. Ocultar temporariamente todas as legendas dos saques com '%s'."
742
743 #: ../../../src/MenuActionBar.cpp:478
744 #, c-format
745 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
746 msgstr ""
747 "Ocultar tudo. Mostrar temporariamente todas as legendas dos saques com '%s'."
748
749 #: ../../../src/MenuActionBar.cpp:482
750 msgid "Visible"
751 msgstr "Visível"
752
753 #: ../../../src/MenuActionBar.cpp:484
754 msgid "Visible (2x zoom)"
755 msgstr "Visível (2x zoom)"
756
757 #: ../../../src/MenuActionBar.cpp:486
758 msgid "Hidden"
759 msgstr "Oculto"
760
761 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
762 msgid "Enabled"
763 msgstr "Ativado"
764
765 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
766 msgid "Disabled"
767 msgstr "Desativado"
768
769 #: ../../../src/MenuActionBar.cpp:657
770 msgid "Not enough MP."
771 msgstr "Sem mana suficiente."
772
773 #: ../../../src/MenuActiveEffects.cpp:124
774 #, c-format
775 msgid "x%d"
776 msgstr "x%d"
777
778 #: ../../../src/MenuActiveEffects.cpp:219
779 msgid "Remaining:"
780 msgstr "Restante:"
781
782 #: ../../../src/MenuActiveEffects.cpp:225
783 #, c-format
784 msgid "x%d stacks"
785 msgstr "x%d pilhas"
786
787 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
788 msgid "Name"
789 msgstr "Nome"
790
791 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
792 msgid "Level"
793 msgstr "Nível"
794
795 #: ../../../src/MenuCharacter.cpp:310
796 #, c-format
797 msgid "%d unspent stat point"
798 msgstr "%d ponto não utilizado"
799
800 #: ../../../src/MenuCharacter.cpp:313
801 #, c-format
802 msgid "%d unspent stat points"
803 msgstr "%d pontos não utilizados"
804
805 #: ../../../src/MenuCharacter.cpp:355
806 #, c-format
807 msgid "Reduces the damage taken from \"%s\" elemental attacks."
808 msgstr "Reduz o dano recebido de \"%s\" ataques elementais."
809
810 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
811 #, c-format
812 msgid "XP: %d"
813 msgstr "EXP: %d"
814
815 #: ../../../src/MenuCharacter.cpp:367
816 #, c-format
817 msgid "Next: %d"
818 msgstr "Próximo: %d"
819
820 #: ../../../src/MenuCharacter.cpp:373
821 #, c-format
822 msgid "base (%d), bonus (%d)"
823 msgstr "base (%d), bónus (%d)"
824
825 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
826 msgid "Related stats:"
827 msgstr "Estatísticas relacionadas:"
828
829 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
830 #, c-format
831 msgid "Each level grants %d."
832 msgstr "Cada nível garante %d."
833
834 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
835 #, c-format
836 msgid "Each point of %s grants %d."
837 msgstr "Cada ponto de %s dá %d."
936 #: ../../../src/MenuConfig.cpp:512
937 msgid ""
938 "Enables the below setting that controls the screen gamma level. The behavior"
939 " of the gamma setting can vary between platforms."
940 msgstr ""
941 "Permite a configuração abaixo que controla o gama do ecrã. O comportamento "
942 "da configuração do gama pode variar em plataformas diferentes."
943
944 #: ../../../src/MenuConfig.cpp:513
945 msgid ""
946 "Provides additional text for information that is primarily conveyed through "
947 "color."
948 msgstr ""
949 "Fornece texto adicional para informação que é transmitida através da cor."
950
951 #: ../../../src/MenuConfig.cpp:514
952 msgid ""
953 "Some mods will automatically hide the stat bars when they are inactive. "
954 "Disabling this option will keep them displayed at all times."
955 msgstr ""
956 "Alguns mods escondem automaticamente a barra de estatísticas quando estas "
957 "estão inativas. Desativando esta opção, a barra de estatísticas estará "
958 "sempre visível."
959
960 #: ../../../src/MenuConfig.cpp:515
961 msgid ""
962 "When enabled, empty equipment slots will be filled with applicable items "
963 "when they are obtained."
964 msgstr ""
965 "Quando ativado, os compartimentos vagos do equipamento serão preenchidos com"
966 " itens aplicáveis quando estes são obtidos."
967
968 #: ../../../src/MenuConfig.cpp:516
969 msgid ""
970 "Shows a marker above enemies, allies, and the player when they are obscured "
971 "by tall objects."
972 msgstr ""
973 "Mostrar um marcador por cima dos inimigos, aliados e o jogador quando "
974 "estiverem ocultados por objetos altos."
975
976 #: ../../../src/MenuConfig.cpp:517
977 msgid ""
978 "This allows the game to be controlled entirely with the keyboard (or "
979 "joystick)."
980 msgstr ""
981 "Isto permite que o jogo seja controlado inteiramente com o teclado (ou "
982 "joystick)."
983
984 #: ../../../src/MenuConfig.cpp:518
985 msgid ""
986 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
987 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
988 "instead of 'Main1'."
989 msgstr ""
990 "Quando a opção 'Mover herói utilizando o rato' está ativa, esta configuração"
991 " controla se o 'Principal1' ou 'Principal2' é utilizado para mover o herói. "
992 "Se ativado, o 'Principal2' irá mover o herói em vez do 'Principal1'."
993
994 #: ../../../src/MenuConfig.cpp:519
995 msgid ""
996 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
997 "assigned to the movement button can be used by targeting an enemy. If this "
998 "setting is disabled, it is required to use 'Shift' to access the Power "
999 "assigned to the movement button."
1000 msgstr ""
1001 "Quando a opção 'Mover herói utilizando o rato' está ativada, esta "
1002 "configuração controla se a potência atribuída ao botão de movimento pode ser"
1003 " utilizada ao colocar em mira um inimigo. Se esta opção estiver desativada, "
1004 "é necessário usar a tecla 'Shift' para aceder à potência atribuída ao botão "
1005 "de movimento."
1006
1007 #: ../../../src/MenuConfig.cpp:520
1008 msgid ""
1009 "The player's attacks will be aimed in the direction of the mouse cursor when"
1010 " this is enabled."
1011 msgstr ""
1012 "Os ataques do jogador serão direcionados na direção do cursor do rato quando"
1013 " isto está ativo."
1014
1015 #: ../../../src/MenuConfig.cpp:571
1016 msgid "Active Mods"
1017 msgstr "Mods ativos"
1018
1019 #: ../../../src/MenuConfig.cpp:580
1020 msgid "Available Mods"
1021 msgstr "Mods disponíveis"
1022
1023 #: ../../../src/MenuConfig.cpp:599
1024 msgid "<< Disable"
1025 msgstr "<< Desativar"
1026
1027 #: ../../../src/MenuConfig.cpp:605
1028 msgid "Enable >>"
1029 msgstr "Ativar >>"
1030
1031 #: ../../../src/MenuConfig.cpp:1436
1032 msgid "Version:"
1033 msgstr "Versão:"
1034
1035 #: ../../../src/MenuConfig.cpp:1441
1036 msgid "Game:"
1037 msgstr "Jogo:"
1038
1039 #: ../../../src/MenuConfig.cpp:1446
1040 msgid "Engine version:"
1041 msgstr "Versão do motor:"
1042
1043 #: ../../../src/MenuConfig.cpp:1454
1044 msgid "Requires mods:"
1045 msgstr "Necessita dos mods:"
1046
1047 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
1048 msgid "(none)"
1049 msgstr "(nenhum)"
1050
1051 #: ../../../src/MenuConfig.cpp:1579
1052 msgid "Save & Exit"
1053 msgstr "Gravar e Sair"
8381054
8391055 #: ../../../src/MenuDevConsole.cpp:63
8401056 msgid "Execute"
9981214 msgid "HINT: Type help"
9991215 msgstr "DICA: escreve help"
10001216
1001 #: ../../../src/MenuEnemy.cpp:138
1217 #: ../../../src/MenuEnemy.cpp:162
10021218 #, c-format
10031219 msgid "%s level %d"
10041220 msgstr "%s nível %d"
10051221
1006 #: ../../../src/MenuEnemy.cpp:162
1222 #: ../../../src/MenuEnemy.cpp:186
10071223 msgid "Dead"
10081224 msgstr "Morto"
10091225
1010 #: ../../../src/MenuEnemy.cpp:164
1226 #: ../../../src/MenuEnemy.cpp:188
10111227 msgid "Destroyed"
10121228 msgstr "Destruído"
10131229
1014 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
1015 msgid "Paused"
1016 msgstr "Pausado"
1017
1018 #: ../../../src/MenuExit.cpp:91
1019 msgid "Save & Exit"
1020 msgstr "Gravar e Sair"
1021
1022 #: ../../../src/MenuExit.cpp:92
1023 msgid "Exit"
1024 msgstr "Sair"
1025
1026 #: ../../../src/MenuExit.cpp:96
1027 msgid "Continue"
1028 msgstr "Continuar"
1029
1030 #: ../../../src/MenuInventory.cpp:73
1031 msgid "Automatically equip items"
1032 msgstr "Equipar itens automaticamente"
1033
1034 #: ../../../src/MenuInventory.cpp:188
1230 #: ../../../src/MenuInventory.cpp:177
10351231 #, c-format
10361232 msgid "Lost %d%% of %s."
10371233 msgstr "Perdeste %d%% de %s."
10381234
1039 #: ../../../src/MenuInventory.cpp:195
1235 #: ../../../src/MenuInventory.cpp:184
10401236 #, c-format
10411237 msgid "Lost %d%% of total XP."
10421238 msgstr "Perdeste %d%% de um total de EXP."
10431239
1044 #: ../../../src/MenuInventory.cpp:200
1240 #: ../../../src/MenuInventory.cpp:189
10451241 #, c-format
10461242 msgid "Lost %d%% of current level XP."
10471243 msgstr "Perdeste %d%% no nível atual de EXP."
10481244
1049 #: ../../../src/MenuInventory.cpp:226
1245 #: ../../../src/MenuInventory.cpp:215
10501246 #, c-format
10511247 msgid "Lost %s."
10521248 msgstr "Perdeste %s."
10531249
1054 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1250 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10551251 #, c-format
10561252 msgid "%d %s"
10571253 msgstr "%d %s"
10581254
1059 #: ../../../src/MenuInventory.cpp:317
1255 #: ../../../src/MenuInventory.cpp:300
10601256 msgid "Pick up item(s):"
10611257 msgstr "Apanhar itens:"
10621258
1063 #: ../../../src/MenuInventory.cpp:318
1259 #: ../../../src/MenuInventory.cpp:301
10641260 msgid "Use or equip item:"
10651261 msgstr "Usar ou equipar item:"
10661262
1067 #: ../../../src/MenuInventory.cpp:319
1263 #: ../../../src/MenuInventory.cpp:302
10681264 #, c-format
10691265 msgid "%s modifiers"
10701266 msgstr "%s modificadores"
10711267
1072 #: ../../../src/MenuInventory.cpp:320
1268 #: ../../../src/MenuInventory.cpp:303
10731269 msgid "Select a quantity of item:"
10741270 msgstr "Escolher quantidade de um item:"
10751271
1076 #: ../../../src/MenuInventory.cpp:323
1272 #: ../../../src/MenuInventory.cpp:306
10771273 msgid "Stash item stack:"
10781274 msgstr "Pilha de item no baú:"
10791275
1080 #: ../../../src/MenuInventory.cpp:325
1276 #: ../../../src/MenuInventory.cpp:308
10811277 msgid "Sell item stack:"
10821278 msgstr "Vender pilha de itens:"
10831279
1084 #: ../../../src/MenuInventory.cpp:592
1280 #: ../../../src/MenuInventory.cpp:574
10851281 msgid "You don't have enough of the required item."
10861282 msgstr "Não tens que chegue do item necessário."
10871283
1088 #: ../../../src/MenuInventory.cpp:599
1284 #: ../../../src/MenuInventory.cpp:586
10891285 msgid "You can't use this item right now."
10901286 msgstr "Não podes usar este item agora."
10911287
1092 #: ../../../src/MenuInventory.cpp:611
1288 #: ../../../src/MenuInventory.cpp:598
10931289 msgid "This item can only be used from the action bar."
10941290 msgstr "Este item pode ser usado apenas a partir da barra de ação."
10951291
1096 #: ../../../src/MenuInventory.cpp:729
1292 #: ../../../src/MenuInventory.cpp:716
10971293 msgid "Inventory is full."
10981294 msgstr "O inventário está cheio."
10991295
1100 #: ../../../src/MenuInventory.cpp:849
1296 #: ../../../src/MenuInventory.cpp:841
11011297 #, c-format
11021298 msgid "Not enough %s."
11031299 msgstr "Sem %s suficientes."
11041300
1105 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1301 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
11061302 msgid "This item can not be sold."
11071303 msgstr "Este item não pode ser vendido."
11081304
11141310 msgid "Quests"
11151311 msgstr "Missões"
11161312
1117 #: ../../../src/MenuManager.cpp:286
1313 #: ../../../src/MenuManager.cpp:296
11181314 #, c-format
11191315 msgid "XP: %d/%d"
11201316 msgstr "EXP: %d/%d"
11211317
1122 #: ../../../src/MenuManager.cpp:827
1318 #: ../../../src/MenuManager.cpp:854
11231319 msgid "This item can not be dropped."
11241320 msgstr "Este item não pode ser deitado fora."
11251321
11271323 msgid "Enter amount:"
11281324 msgstr "Introduz a quantidade:"
11291325
1130 #: ../../../src/MenuPowers.cpp:787
1326 #: ../../../src/MenuPowers.cpp:786
11311327 msgid "Passive"
11321328 msgstr "Passivo"
11331329
1134 #: ../../../src/MenuPowers.cpp:792
1330 #: ../../../src/MenuPowers.cpp:791
11351331 #, c-format
11361332 msgid "Costs %d MP"
11371333 msgstr "Custa %d Mana"
11381334
1139 #: ../../../src/MenuPowers.cpp:796
1335 #: ../../../src/MenuPowers.cpp:795
11401336 #, c-format
11411337 msgid "Costs %d HP"
11421338 msgstr "Custa %d PV"
11431339
1144 #: ../../../src/MenuPowers.cpp:801
1340 #: ../../../src/MenuPowers.cpp:800
11451341 msgid "Cooldown:"
11461342 msgstr "Esfriar:"
11471343
1148 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1344 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11491345 msgid "Damage per second"
11501346 msgstr "Dano por segundo"
11511347
1152 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1348 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11531349 msgid "HP per second"
11541350 msgstr "PV por segundo"
11551351
1156 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1352 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11571353 msgid "MP per second"
11581354 msgstr "Mana por segundo"
11591355
1160 #: ../../../src/MenuPowers.cpp:885
1356 #: ../../../src/MenuPowers.cpp:884
11611357 msgid "Immobilize"
11621358 msgstr "Imobilizar"
11631359
1164 #: ../../../src/MenuPowers.cpp:893
1360 #: ../../../src/MenuPowers.cpp:892
11651361 msgid "Immunity"
11661362 msgstr "Imunidade"
11671363
1168 #: ../../../src/MenuPowers.cpp:896
1364 #: ../../../src/MenuPowers.cpp:895
11691365 msgid "Immunity to damage over time"
11701366 msgstr "Imunidade a danos a longo prazo"
11711367
1172 #: ../../../src/MenuPowers.cpp:899
1368 #: ../../../src/MenuPowers.cpp:898
11731369 msgid "Immunity to slow"
11741370 msgstr "Imunidade à lentidão"
11751371
1176 #: ../../../src/MenuPowers.cpp:902
1372 #: ../../../src/MenuPowers.cpp:901
11771373 msgid "Immunity to stun"
11781374 msgstr "Imunidade ao atordoamento"
11791375
1180 #: ../../../src/MenuPowers.cpp:905
1376 #: ../../../src/MenuPowers.cpp:904
11811377 msgid "Immunity to HP steal"
11821378 msgstr "Imunidade ao roubo de PV"
11831379
1184 #: ../../../src/MenuPowers.cpp:908
1380 #: ../../../src/MenuPowers.cpp:907
11851381 msgid "Immunity to MP steal"
11861382 msgstr "Imunidade a roubo de Mana"
11871383
1188 #: ../../../src/MenuPowers.cpp:911
1384 #: ../../../src/MenuPowers.cpp:910
11891385 msgid "Immunity to knockback"
11901386 msgstr "Imunidade aos coices"
11911387
1192 #: ../../../src/MenuPowers.cpp:914
1388 #: ../../../src/MenuPowers.cpp:913
11931389 msgid "Immunity to damage reflection"
11941390 msgstr "Imunidade a reflexão de danos"
11951391
1196 #: ../../../src/MenuPowers.cpp:917
1392 #: ../../../src/MenuPowers.cpp:916
11971393 msgid "Stun"
11981394 msgstr "Atordoar"
11991395
1200 #: ../../../src/MenuPowers.cpp:920
1396 #: ../../../src/MenuPowers.cpp:919
12011397 msgid "Automatic revive on death"
12021398 msgstr "Ressuscitar automaticamente ao morrer"
12031399
1204 #: ../../../src/MenuPowers.cpp:923
1400 #: ../../../src/MenuPowers.cpp:922
12051401 msgid "Convert"
12061402 msgstr "Converter"
12071403
1208 #: ../../../src/MenuPowers.cpp:926
1404 #: ../../../src/MenuPowers.cpp:925
12091405 msgid "Fear"
12101406 msgstr "Medo"
12111407
1212 #: ../../../src/MenuPowers.cpp:929
1408 #: ../../../src/MenuPowers.cpp:928
12131409 msgid "Lifespan"
12141410 msgstr "Vida útil"
12151411
1216 #: ../../../src/MenuPowers.cpp:953
1412 #: ../../../src/MenuPowers.cpp:952
12171413 msgid "Magical Shield"
12181414 msgstr "Escudo Mágico"
12191415
1220 #: ../../../src/MenuPowers.cpp:982
1416 #: ../../../src/MenuPowers.cpp:981
12211417 msgid "Healing"
12221418 msgstr "Cura"
12231419
1224 #: ../../../src/MenuPowers.cpp:985
1420 #: ../../../src/MenuPowers.cpp:984
12251421 msgid "Knockback"
12261422 msgstr "Coice"
12271423
1228 #: ../../../src/MenuPowers.cpp:1010
1424 #: ../../../src/MenuPowers.cpp:1009
12291425 #, c-format
12301426 msgid "%d%% chance"
12311427 msgstr "%d%% chance"
12321428
1233 #: ../../../src/MenuPowers.cpp:1062
1429 #: ../../../src/MenuPowers.cpp:1061
12341430 msgid "Base Accuracy"
12351431 msgstr "Precisão Básica"
12361432
1237 #: ../../../src/MenuPowers.cpp:1082
1433 #: ../../../src/MenuPowers.cpp:1081
12381434 msgid "Base Critical Chance"
12391435 msgstr "Chance Crítica Base"
12401436
1241 #: ../../../src/MenuPowers.cpp:1090
1437 #: ../../../src/MenuPowers.cpp:1089
12421438 msgid "Ignores Absorbtion"
12431439 msgstr "Ignora Absorção"
12441440
1245 #: ../../../src/MenuPowers.cpp:1095
1441 #: ../../../src/MenuPowers.cpp:1094
12461442 msgid "Ignores Avoidance"
12471443 msgstr "Ignora Esquivar"
12481444
1249 #: ../../../src/MenuPowers.cpp:1100
1445 #: ../../../src/MenuPowers.cpp:1099
12501446 #, c-format
12511447 msgid "%d%% Chance to crit slowed targets"
12521448 msgstr "%d%% chance de acerto crítico em alvos tornados lentos"
12531449
1254 #: ../../../src/MenuPowers.cpp:1105
1450 #: ../../../src/MenuPowers.cpp:1104
12551451 #, c-format
12561452 msgid "Elemental Damage (%s)"
12571453 msgstr "Dano Elemental (%s)"
12581454
1259 #: ../../../src/MenuPowers.cpp:1114
1455 #: ../../../src/MenuPowers.cpp:1113
12601456 #, c-format
12611457 msgid "Requires a %s"
12621458 msgstr "Requer um %s"
12631459
1264 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1460 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12651461 #, c-format
12661462 msgid "Requires Power: %s"
12671463 msgstr "Requer Poder: %s"
12681464
1269 #: ../../../src/MenuPowers.cpp:1163
1465 #: ../../../src/MenuPowers.cpp:1162
12701466 msgid "Click to Unlock (uses 1 Skill Point)"
12711467 msgstr "Clica para desbloquear (utiliza 1 Ponto de Habilidade)"
12721468
1273 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1469 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12741470 msgid "Requires 1 Skill Point"
12751471 msgstr "Requer 1 Ponto de Habilidade"
12761472
1277 #: ../../../src/MenuPowers.cpp:1355
1473 #: ../../../src/MenuPowers.cpp:1354
12781474 #, c-format
12791475 msgid "%d unspent skill point"
12801476 msgstr "%d ponto de habilidade não utilizado"
12811477
1282 #: ../../../src/MenuPowers.cpp:1358
1478 #: ../../../src/MenuPowers.cpp:1357
12831479 #, c-format
12841480 msgid "%d unspent skill points"
12851481 msgstr "%d pontos de habilidade não utilizados"
12861482
1287 #: ../../../src/MenuPowers.cpp:1388
1483 #: ../../../src/MenuPowers.cpp:1387
12881484 msgid "Next Level:"
12891485 msgstr "Próximo Nível:"
12901486
1291 #: ../../../src/MenuStash.cpp:96
1292 msgid "Shared Stash"
1293 msgstr "Baú Compartilhado"
1294
1295 #: ../../../src/MenuStash.cpp:209
1487 #: ../../../src/MenuStash.cpp:53
1488 msgid "Private"
1489 msgstr ""
1490
1491 #: ../../../src/MenuStash.cpp:55
1492 msgid "Shared"
1493 msgstr ""
1494
1495 #: ../../../src/MenuStash.cpp:103
1496 msgid "Stash"
1497 msgstr ""
1498
1499 #: ../../../src/MenuStash.cpp:258
12961500 msgid "Can not store quest items in the stash."
12971501 msgstr "Não é possível armazenar itens no baú."
12981502
1299 #: ../../../src/MenuStash.cpp:219
1503 #: ../../../src/MenuStash.cpp:263
1504 msgid "This item can not be stored in the stash."
1505 msgstr "Este item não pode ser guardado no baú."
1506
1507 #: ../../../src/MenuStash.cpp:268
1508 msgid "This item can not be stored in the private stash."
1509 msgstr ""
1510
1511 #: ../../../src/MenuStash.cpp:273
1512 msgid "This item can not be stored in the shared stash."
1513 msgstr ""
1514
1515 #: ../../../src/MenuStash.cpp:283
13001516 msgid "Stash is full."
13011517 msgstr "O baú está cheio."
13021518
1303 #: ../../../src/MenuTalker.cpp:454
1519 #: ../../../src/MenuStash.cpp:340
1520 #, c-format
1521 msgid "Can not store item in stash: %s"
1522 msgstr "Não é possível guardar os itens no baú: %s"
1523
1524 #: ../../../src/MenuTalker.cpp:447
1525 #, c-format
1526 msgid "<dialog node %d>"
1527 msgstr "<nó de diálogo %d>"
1528
1529 #: ../../../src/MenuTalker.cpp:455
13041530 msgid "Trade"
13051531 msgstr "Comércio"
13061532
13081534 msgid "Buyback"
13091535 msgstr "Recompra"
13101536
1311 #: ../../../src/MenuVendor.cpp:279
1537 #: ../../../src/MenuVendor.cpp:281
13121538 msgid "Vendor"
13131539 msgstr "Vendedor"
13141540
1315 #: ../../../src/PowerManager.cpp:1136
1541 #: ../../../src/PowerManager.cpp:1170
13161542 #, c-format
13171543 msgid "+%d Shield"
13181544 msgstr "Escudo +%d"
13191545
1320 #: ../../../src/PowerManager.cpp:1392
1546 #: ../../../src/PowerManager.cpp:1426
13211547 msgid "You are already transformed, untransform first."
13221548 msgstr "Já estás transformado, destransforma-te primeiro."
13231549
1324 #: ../../../src/PowerManager.cpp:1404
1550 #: ../../../src/PowerManager.cpp:1438
13251551 msgid "Could not untransform at this position."
13261552 msgstr "Não foi possível desfazer a transformação nesta posição."
13271553
13291555 msgid "Completed Quests"
13301556 msgstr "Missões Concluídas"
13311557
1332 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1558 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13331559 msgid "Game saved."
13341560 msgstr "Jogo gravado."
13351561
1336 #: ../../../src/SDLInputState.cpp:582
1562 #: ../../../src/SDLInputState.cpp:643
1563 msgid "BkSp"
1564 msgstr ""
1565
1566 #: ../../../src/SDLInputState.cpp:644
1567 msgid "Caps"
1568 msgstr ""
1569
1570 #: ../../../src/SDLInputState.cpp:645
1571 msgid "Del"
1572 msgstr ""
1573
1574 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1575 msgid "End"
1576 msgstr "End"
1577
1578 #: ../../../src/SDLInputState.cpp:648
1579 msgid "Esc"
1580 msgstr ""
1581
1582 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1583 msgid "Home"
1584 msgstr "Home"
1585
1586 #: ../../../src/SDLInputState.cpp:650
1587 msgid "Ins"
1588 msgstr ""
1589
1590 #: ../../../src/SDLInputState.cpp:651
1591 msgid "LAlt"
1592 msgstr ""
1593
1594 #: ../../../src/SDLInputState.cpp:652
1595 msgid "LCtrl"
1596 msgstr ""
1597
1598 #: ../../../src/SDLInputState.cpp:654
1599 msgid "LShft"
1600 msgstr ""
1601
1602 #: ../../../src/SDLInputState.cpp:655
1603 msgid "Num"
1604 msgstr ""
1605
1606 #: ../../../src/SDLInputState.cpp:656
1607 msgid "PgDn"
1608 msgstr ""
1609
1610 #: ../../../src/SDLInputState.cpp:657
1611 msgid "PgUp"
1612 msgstr ""
1613
1614 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1615 msgid "Pause"
1616 msgstr "Pause"
1617
1618 #: ../../../src/SDLInputState.cpp:659
1619 msgid "Print"
1620 msgstr ""
1621
1622 #: ../../../src/SDLInputState.cpp:660
1623 msgid "RAlt"
1624 msgstr ""
1625
1626 #: ../../../src/SDLInputState.cpp:661
1627 msgid "RCtrl"
1628 msgstr ""
1629
1630 #: ../../../src/SDLInputState.cpp:662
1631 msgid "Ret"
1632 msgstr ""
1633
1634 #: ../../../src/SDLInputState.cpp:664
1635 msgid "RShft"
1636 msgstr ""
1637
1638 #: ../../../src/SDLInputState.cpp:665
1639 msgid "SLock"
1640 msgstr ""
1641
1642 #: ../../../src/SDLInputState.cpp:666
1643 msgid "Spc"
1644 msgstr ""
1645
1646 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1647 msgid "Tab"
1648 msgstr "Tab"
1649
1650 #: ../../../src/SDLInputState.cpp:673
13371651 msgid "Backspace"
13381652 msgstr "Retroceder"
13391653
1340 #: ../../../src/SDLInputState.cpp:583
1654 #: ../../../src/SDLInputState.cpp:674
13411655 msgid "CapsLock"
13421656 msgstr "Tecla de Maiúsculas"
13431657
1344 #: ../../../src/SDLInputState.cpp:586
1345 msgid "End"
1346 msgstr "End"
1347
1348 #: ../../../src/SDLInputState.cpp:587
1658 #: ../../../src/SDLInputState.cpp:678
13491659 msgid "Escape"
13501660 msgstr "Escape"
13511661
1352 #: ../../../src/SDLInputState.cpp:588
1353 msgid "Home"
1354 msgstr "Home"
1355
1356 #: ../../../src/SDLInputState.cpp:589
1662 #: ../../../src/SDLInputState.cpp:680
13571663 msgid "Insert"
13581664 msgstr "Insert"
13591665
1360 #: ../../../src/SDLInputState.cpp:590
1666 #: ../../../src/SDLInputState.cpp:681
13611667 msgid "Left Alt"
13621668 msgstr "Alt Esquerdo"
13631669
1364 #: ../../../src/SDLInputState.cpp:591
1670 #: ../../../src/SDLInputState.cpp:682
13651671 msgid "Left Ctrl"
13661672 msgstr "Ctrl Esquerdo"
13671673
1368 #: ../../../src/SDLInputState.cpp:593
1674 #: ../../../src/SDLInputState.cpp:684
13691675 msgid "Left Shift"
13701676 msgstr "Shift Esquerdo"
13711677
1372 #: ../../../src/SDLInputState.cpp:594
1678 #: ../../../src/SDLInputState.cpp:685
13731679 msgid "NumLock"
13741680 msgstr "NumLock"
13751681
1376 #: ../../../src/SDLInputState.cpp:595
1682 #: ../../../src/SDLInputState.cpp:686
13771683 msgid "PageDown"
13781684 msgstr "PageDown"
13791685
1380 #: ../../../src/SDLInputState.cpp:596
1686 #: ../../../src/SDLInputState.cpp:687
13811687 msgid "PageUp"
13821688 msgstr "PageUp"
13831689
1384 #: ../../../src/SDLInputState.cpp:597
1385 msgid "Pause"
1386 msgstr "Pause"
1387
1388 #: ../../../src/SDLInputState.cpp:598
1690 #: ../../../src/SDLInputState.cpp:689
13891691 msgid "PrintScreen"
13901692 msgstr "PrintScreen"
13911693
1392 #: ../../../src/SDLInputState.cpp:599
1694 #: ../../../src/SDLInputState.cpp:690
13931695 msgid "Right Alt"
13941696 msgstr "Alt Direito"
13951697
1396 #: ../../../src/SDLInputState.cpp:600
1698 #: ../../../src/SDLInputState.cpp:691
13971699 msgid "Right Ctrl"
13981700 msgstr "Ctrl Direito"
13991701
1400 #: ../../../src/SDLInputState.cpp:601
1702 #: ../../../src/SDLInputState.cpp:692
14011703 msgid "Return"
14021704 msgstr "Enter"
14031705
1404 #: ../../../src/SDLInputState.cpp:603
1706 #: ../../../src/SDLInputState.cpp:694
14051707 msgid "Right Shift"
14061708 msgstr "Shift Direito"
14071709
1408 #: ../../../src/SDLInputState.cpp:604
1710 #: ../../../src/SDLInputState.cpp:695
14091711 msgid "ScrollLock"
14101712 msgstr "ScrollLock"
14111713
1412 #: ../../../src/SDLInputState.cpp:605
1714 #: ../../../src/SDLInputState.cpp:696
14131715 msgid "Space"
14141716 msgstr "Espaço"
14151717
1416 #: ../../../src/SDLInputState.cpp:606
1417 msgid "Tab"
1418 msgstr "Tab"
1419
1420 #: ../../../src/SDLInputState.cpp:620
1718 #: ../../../src/SDLInputState.cpp:710
1719 #, c-format
1720 msgid "M%d"
1721 msgstr ""
1722
1723 #: ../../../src/SDLInputState.cpp:716
14211724 #, c-format
14221725 msgid "Mouse %d"
14231726 msgstr "Rato %d"
14241727
1425 #: ../../../src/SDLInputState.cpp:628
1728 #: ../../../src/SDLInputState.cpp:726
1729 #, c-format
1730 msgid "JX%d-"
1731 msgstr ""
1732
1733 #: ../../../src/SDLInputState.cpp:728
14261734 #, c-format
14271735 msgid "Axis %d -"
14281736 msgstr "Eixo %d -"
14291737
1430 #: ../../../src/SDLInputState.cpp:630
1738 #: ../../../src/SDLInputState.cpp:732
1739 #, c-format
1740 msgid "JX%d+"
1741 msgstr ""
1742
1743 #: ../../../src/SDLInputState.cpp:734
14311744 #, c-format
14321745 msgid "Axis %d +"
14331746 msgstr "Eixo %d +"
14341747
1435 #: ../../../src/SDLInputState.cpp:633
1748 #: ../../../src/SDLInputState.cpp:739
1749 #, c-format
1750 msgid "JB%d"
1751 msgstr ""
1752
1753 #: ../../../src/SDLInputState.cpp:741
14361754 #, c-format
14371755 msgid "Button %d"
14381756 msgstr "Botão %d"
14391757
1440 #: ../../../src/SDLInputState.cpp:637
1441 msgid "(none)"
1442 msgstr "(nenhum)"
1443
1444 #: ../../../src/SDLInputState.cpp:677
1758 #: ../../../src/SDLInputState.cpp:788
14451759 msgid "Touch control D-Pad"
14461760 msgstr "D-Pad sensível ao toque"
14471761
1448 #: ../../../src/SDLInputState.cpp:701
1762 #: ../../../src/SDLInputState.cpp:812
14491763 msgid "Touch control buttons"
14501764 msgstr "Botões sensíveis ao toque"
14511765
1452 #: ../../../src/SDLInputState.cpp:716
1766 #: ../../../src/SDLInputState.cpp:827
14531767 msgid "Tap"
14541768 msgstr "Toque"
14551769
1456 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1457 #: ../../../src/SDLInputState.cpp:768
1770 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1771 #, c-format
1772 msgid "Can not bind: %s"
1773 msgstr "Não é possível associar: %s"
1774
1775 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1776 #: ../../../src/SDLInputState.cpp:901
14581777 #, c-format
14591778 msgid "'%s' is no longer bound to:"
14601779 msgstr "'%s' já não está associado a:"
16211940 msgid "k"
16221941 msgstr "m"
16231942
1624 #: ../../../src/Utils.cpp:580
1943 #: ../../../src/Utils.cpp:616
16251944 #, c-format
16261945 msgid "%s second"
16271946 msgstr "%s segundo"
16281947
1629 #: ../../../src/Utils.cpp:583
1948 #: ../../../src/Utils.cpp:619
16301949 #, c-format
16311950 msgid "%s seconds"
16321951 msgstr "%s segundos"
44 #
55 # Translators:
66 # Vicente Monteiro, 2018
7 # Rui <xymarior@yandex.com>, 2018
7 # Rui <xymarior@yandex.com>, 2019
88 #
99 #, fuzzy
1010 msgid ""
1111 msgstr ""
1212 "Project-Id-Version: PACKAGE VERSION\n"
1313 "Report-Msgid-Bugs-To: \n"
14 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
14 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1515 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
16 "Last-Translator: Rui <xymarior@yandex.com>, 2018\n"
16 "Last-Translator: Rui <xymarior@yandex.com>, 2019\n"
1717 "Language-Team: Portuguese (Brazil) (https://www.transifex.com/flareorg/teams/84925/pt_BR/)\n"
1818 "MIME-Version: 1.0\n"
1919 "Content-Type: text/plain; charset=UTF-8\n"
2121 "Language: pt_BR\n"
2222 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
2323
24 #: ../../../src/Avatar.cpp:367
24 #: ../../../src/Avatar.cpp:387
25 msgid "Your health is low!"
26 msgstr ""
27
28 #: ../../../src/Avatar.cpp:419
2529 #, c-format
2630 msgid "Congratulations, you have reached level %d!"
2731 msgstr "Parabéns, você atingiu o nível %d!"
2832
29 #: ../../../src/Avatar.cpp:369
30 msgid "You may increase one attribute through the Character Menu."
31 msgstr "Você pode aumentar um atributo através do menu do Personagem."
32
33 #: ../../../src/Avatar.cpp:583
33 #: ../../../src/Avatar.cpp:421
34 msgid "You may increase one or more attributes through the Character Menu."
35 msgstr ""
36
37 #: ../../../src/Avatar.cpp:425
38 msgid "You may unlock one or more abilities through the Powers Menu."
39 msgstr ""
40
41 #: ../../../src/Avatar.cpp:692
3442 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3543 msgstr ""
3644 "Você foi derrotado. Fim do Jogo! ${INPUT_CONTINUE} para voltar a tela "
3745 "principal."
3846
39 #: ../../../src/Avatar.cpp:589
47 #: ../../../src/Avatar.cpp:698
4048 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
4149 msgstr "Você foi derrotado. ${INPUT_CONTINUE} para continuar."
4250
43 #: ../../../src/Avatar.cpp:839
51 #: ../../../src/Avatar.cpp:949
4452 msgid "Transformation expired. You have been moved back to a safe place."
4553 msgstr "Transformação expirada. Você foi transferido a um lugar seguro."
4654
4957 msgid "%d %s removed."
5058 msgstr "%d %s removido."
5159
52 #: ../../../src/CampaignManager.cpp:162
60 #: ../../../src/CampaignManager.cpp:165
61 #, c-format
62 msgid "%s x%d removed."
63 msgstr ""
64
65 #: ../../../src/CampaignManager.cpp:167
5366 #, c-format
5467 msgid "%s removed."
5568 msgstr "%s removido."
5669
57 #: ../../../src/CampaignManager.cpp:175
70 #: ../../../src/CampaignManager.cpp:180
5871 #, c-format
5972 msgid "You receive %s."
6073 msgstr "Você recebeu %s."
6174
62 #: ../../../src/CampaignManager.cpp:177
75 #: ../../../src/CampaignManager.cpp:182
6376 #, c-format
6477 msgid "You receive %s x%d."
6578 msgstr "Você recebeu %s x%d."
6679
67 #: ../../../src/CampaignManager.cpp:186
80 #: ../../../src/CampaignManager.cpp:191
6881 #, c-format
6982 msgid "You receive %d %s."
7083 msgstr "Você recebeu %d %s."
7184
72 #: ../../../src/CampaignManager.cpp:195
85 #: ../../../src/CampaignManager.cpp:200
7386 #, c-format
7487 msgid "You receive %d XP."
7588 msgstr "Você recebeu %d XP."
7689
77 #: ../../../src/CampaignManager.cpp:201
90 #: ../../../src/CampaignManager.cpp:206
7891 msgid "HP restored."
7992 msgstr "HP restaurado."
8093
81 #: ../../../src/CampaignManager.cpp:205
94 #: ../../../src/CampaignManager.cpp:210
8295 msgid "MP restored."
8396 msgstr "MP restaurado."
8497
85 #: ../../../src/CampaignManager.cpp:210
98 #: ../../../src/CampaignManager.cpp:215
8699 msgid "HP and MP restored."
87100 msgstr "HP e MP restaurados."
88101
89 #: ../../../src/CampaignManager.cpp:214
102 #: ../../../src/CampaignManager.cpp:219
90103 msgid "Negative effects removed."
91104 msgstr "Efeitos negativos removidos."
92105
93 #: ../../../src/CampaignManager.cpp:220
106 #: ../../../src/CampaignManager.cpp:225
94107 msgid "HP and MP restored, negative effects removed"
95108 msgstr "HP e MP restaurados, efeitos negativos removidos"
96109
114127 "\n"
115128 "O renderizador padrão, geralmente mais rápido que o renderizador SDL software."
116129
117 #: ../../../src/EngineSettings.cpp:561
130 #: ../../../src/EngineSettings.cpp:572
118131 msgid "Adventurer"
119132 msgstr "Aventureiro"
120133
121 #: ../../../src/Entity.cpp:511
134 #: ../../../src/Entity.cpp:522
122135 msgid "miss"
123136 msgstr "errou"
124137
125 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
126 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
138 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
139 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
127140 #, c-format
128141 msgid "+%d HP"
129142 msgstr "+%d HP"
130143
131 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
132 #: ../../../src/StatBlock.cpp:822
144 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
145 #: ../../../src/StatBlock.cpp:830
133146 #, c-format
134147 msgid "+%d MP"
135148 msgstr "+%d MP"
136149
137 #: ../../../src/EventManager.cpp:738
150 #: ../../../src/EventManager.cpp:782
138151 msgid "Unknown destination"
139152 msgstr "Destino desconhecido"
140153
141 #: ../../../src/GameStateConfigBase.cpp:89
142 #: ../../../src/GameStateConfigBase.cpp:110
154 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
155 msgid "Loading..."
156 msgstr "Carregando..."
157
158 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
159 msgid "Delete Save"
160 msgstr "Excluir"
161
162 #: ../../../src/GameStateLoad.cpp:90
163 msgid "Delete this save?"
164 msgstr "Excluir jogo salvo?"
165
166 #: ../../../src/GameStateLoad.cpp:92
167 msgid "Exit to Title"
168 msgstr "Voltar"
169
170 #: ../../../src/GameStateLoad.cpp:95
171 msgid "New Game"
172 msgstr "Novo"
173
174 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
175 msgid "Choose a Slot"
176 msgstr "Selecione um espaço"
177
178 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
179 msgid "Enable a story mod to continue"
180 msgstr "Ative o mod de campanha para continuar"
181
182 #: ../../../src/GameStateLoad.cpp:597
183 msgid "Load Game"
184 msgstr "Continuar"
185
186 #: ../../../src/GameStateLoad.cpp:706
187 msgid "Entering game world..."
188 msgstr "Entrando no mundo do jogo..."
189
190 #: ../../../src/GameStateLoad.cpp:709
191 msgid "Loading saved game..."
192 msgstr "Carregando jogo salvo..."
193
194 #: ../../../src/GameStateLoad.cpp:742
195 msgid "Invalid save"
196 msgstr "Jogo salvo inválido"
197
198 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
199 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
200 #: ../../../src/MenuPowers.cpp:1543
201 #, c-format
202 msgid "Level %d"
203 msgstr "Nível %d"
204
205 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
206 #: ../../../src/MenuConfig.cpp:244
207 msgid "Cancel"
208 msgstr "Cancelar"
209
210 #: ../../../src/GameStateNew.cpp:68
211 msgid "Create"
212 msgstr "Criar"
213
214 #: ../../../src/GameStateNew.cpp:76
215 msgid "Randomize"
216 msgstr "Aleatória"
217
218 #: ../../../src/GameStateNew.cpp:92
219 msgid "Choose a Portrait"
220 msgstr "Escolha um retrato"
221
222 #: ../../../src/GameStateNew.cpp:96
223 msgid "Choose a Name"
224 msgstr "Digite um nome"
225
226 #: ../../../src/GameStateNew.cpp:100
227 msgid "Permadeath?"
228 msgstr "Morte permanente?"
229
230 #: ../../../src/GameStateNew.cpp:104
231 msgid "Choose a Class"
232 msgstr "Escolha uma classe"
233
234 #: ../../../src/GameStateTitle.cpp:107
235 msgid "Play Game"
236 msgstr "Jogar"
237
238 #: ../../../src/GameStateTitle.cpp:110
239 msgid "Enable a core mod to continue"
240 msgstr "Ative o mod core para continuar"
241
242 #: ../../../src/GameStateTitle.cpp:114
243 msgid "Configuration"
244 msgstr "Opções "
245
246 #: ../../../src/GameStateTitle.cpp:117
247 msgid "Credits"
248 msgstr "Sobre"
249
250 #: ../../../src/GameStateTitle.cpp:120
251 msgid "Exit Game"
252 msgstr "Sair"
253
254 #: ../../../src/InputState.cpp:407
255 msgid "Accept"
256 msgstr "Aceitar"
257
258 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
259 #: ../../../src/SDLInputState.cpp:698
260 msgid "Up"
261 msgstr "Cima"
262
263 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
264 #: ../../../src/SDLInputState.cpp:676
265 msgid "Down"
266 msgstr "Baixo"
267
268 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
269 #: ../../../src/SDLInputState.cpp:683
270 msgid "Left"
271 msgstr "Esquerda"
272
273 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
274 #: ../../../src/SDLInputState.cpp:693
275 msgid "Right"
276 msgstr "Direita"
277
278 #: ../../../src/InputState.cpp:412
279 msgid "Bar1"
280 msgstr "Barra1"
281
282 #: ../../../src/InputState.cpp:413
283 msgid "Bar2"
284 msgstr "Barra2"
285
286 #: ../../../src/InputState.cpp:414
287 msgid "Bar3"
288 msgstr "Barra3"
289
290 #: ../../../src/InputState.cpp:415
291 msgid "Bar4"
292 msgstr "Barra4"
293
294 #: ../../../src/InputState.cpp:416
295 msgid "Bar5"
296 msgstr "Barra5"
297
298 #: ../../../src/InputState.cpp:417
299 msgid "Bar6"
300 msgstr "Barra6"
301
302 #: ../../../src/InputState.cpp:418
303 msgid "Bar7"
304 msgstr "Barra7"
305
306 #: ../../../src/InputState.cpp:419
307 msgid "Bar8"
308 msgstr "Barra8"
309
310 #: ../../../src/InputState.cpp:420
311 msgid "Bar9"
312 msgstr "Barra9"
313
314 #: ../../../src/InputState.cpp:421
315 msgid "Bar0"
316 msgstr "Barra0"
317
318 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
319 #: ../../../src/MenuCharacter.cpp:54
320 msgid "Character"
321 msgstr "Personagem"
322
323 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
324 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
325 msgid "Inventory"
326 msgstr "Inventario"
327
328 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
329 #: ../../../src/MenuPowers.cpp:167
330 msgid "Powers"
331 msgstr "Poderes"
332
333 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
334 #: ../../../src/MenuLog.cpp:72
335 msgid "Log"
336 msgstr "Diário"
337
338 #: ../../../src/InputState.cpp:426
339 msgid "Main1"
340 msgstr "Principal1"
341
342 #: ../../../src/InputState.cpp:427
343 msgid "Main2"
344 msgstr "Principal2"
345
346 #: ../../../src/InputState.cpp:428
347 msgid "Ctrl"
348 msgstr "Ctrl"
349
350 #: ../../../src/InputState.cpp:429
351 msgid "Shift"
352 msgstr "Shift"
353
354 #: ../../../src/InputState.cpp:430
355 msgid "Alt"
356 msgstr "Alt"
357
358 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
359 msgid "Delete"
360 msgstr "Delete"
361
362 #: ../../../src/InputState.cpp:432
363 msgid "ActionBar Accept"
364 msgstr "Barra de Ação Aceitar"
365
366 #: ../../../src/InputState.cpp:433
367 msgid "ActionBar Left"
368 msgstr "Barra de Ação Esquerda"
369
370 #: ../../../src/InputState.cpp:434
371 msgid "ActionBar Right"
372 msgstr "Barra de Ação Direita"
373
374 #: ../../../src/InputState.cpp:435
375 msgid "ActionBar Use"
376 msgstr "Barra de Ação Usar"
377
378 #: ../../../src/InputState.cpp:436
379 msgid "Developer Menu"
380 msgstr "Menu do desenvolvedor"
381
382 #: ../../../src/InputState.cpp:438
383 msgid "Left Mouse"
384 msgstr "Mouse esq."
385
386 #: ../../../src/InputState.cpp:439
387 msgid "Middle Mouse"
388 msgstr "Mouse do Meio"
389
390 #: ../../../src/InputState.cpp:440
391 msgid "Right Mouse"
392 msgstr "Mouse dir."
393
394 #: ../../../src/InputState.cpp:441
395 msgid "Wheel Up"
396 msgstr "Roda para Cima"
397
398 #: ../../../src/InputState.cpp:442
399 msgid "Wheel Down"
400 msgstr "Roda para Baixo"
401
402 #: ../../../src/InputState.cpp:443
403 msgid "Mouse X1"
404 msgstr "Mouse X1"
405
406 #: ../../../src/InputState.cpp:444
407 msgid "Mouse X2"
408 msgstr "Mouse X2"
409
410 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
411 msgid "Unknown Item"
412 msgstr "Item Desconhecido"
413
414 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
415 #, c-format
416 msgid "%d%% Speed"
417 msgstr "%d%% Velocidade"
418
419 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
420 #, c-format
421 msgid "%d%% Attack Speed"
422 msgstr "%d%% Velocidade de Ataque"
423
424 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
425 #: ../../../src/MenuPowers.cpp:832
426 #, c-format
427 msgid "Resistance (%s)"
428 msgstr "Resistência (%s)"
429
430 #: ../../../src/ItemManager.cpp:714
431 #, c-format
432 msgid "Requires %s"
433 msgstr "Necessário %s"
434
435 #: ../../../src/ItemManager.cpp:763
436 msgid "Quest Item"
437 msgstr "Item de Missão"
438
439 #: ../../../src/ItemManager.cpp:790
440 #, c-format
441 msgid "Quality: %s"
442 msgstr "Quantidade: %s"
443
444 #: ../../../src/ItemManager.cpp:815
445 #, c-format
446 msgid "Absorb: %d-%d"
447 msgstr "Absorver: %d-%d"
448
449 #: ../../../src/ItemManager.cpp:817
450 #, c-format
451 msgid "Absorb: %d"
452 msgstr "Absorver: %d"
453
454 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
455 #: ../../../src/MenuPowers.cpp:1133
456 #, c-format
457 msgid "Requires Level %d"
458 msgstr "Nível Necessário %d"
459
460 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
461 #: ../../../src/MenuPowers.cpp:1124
462 #, c-format
463 msgid "Requires %s %d"
464 msgstr "Necessário %s %d"
465
466 #: ../../../src/ItemManager.cpp:879
467 #, c-format
468 msgid "Requires Class: %s"
469 msgstr "Classe Necessária : %s"
470
471 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
472 #, c-format
473 msgid "Buy Price: %d %s"
474 msgstr "Preço de Compra: %d %s"
475
476 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
477 #, c-format
478 msgid "Buy Price: %d %s each"
479 msgstr "Preço de Compra: %d %s cada"
480
481 #: ../../../src/ItemManager.cpp:916
482 #, c-format
483 msgid "Sell Price: %d %s"
484 msgstr "Preço de Venda: %d %s"
485
486 #: ../../../src/ItemManager.cpp:918
487 #, c-format
488 msgid "Sell Price: %d %s each"
489 msgstr "Preço de Venda: %d %s cada"
490
491 #: ../../../src/ItemManager.cpp:927
492 msgid "Set:"
493 msgstr "Conjunto:"
494
495 #: ../../../src/ItemManager.cpp:934
496 #, c-format
497 msgid "%d items:"
498 msgstr "%d Items:"
499
500 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
501 #, c-format
502 msgid "Press [%s] to use"
503 msgstr "Pressione [%s] para usar"
504
505 #: ../../../src/ItemManager.cpp:951
506 #, c-format
507 msgid "Press [%s] to read"
508 msgstr "Pressione [%s] para ler"
509
510 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
511 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
512 #, c-format
513 msgid "Hotkey: %s"
514 msgstr "Atalho: %s"
515
516 #: ../../../src/MenuActionBar.cpp:599
517 msgid "Not enough MP."
518 msgstr "MP insuficiente."
519
520 #: ../../../src/MenuActiveEffects.cpp:124
521 #, c-format
522 msgid "x%d"
523 msgstr "x%d"
524
525 #: ../../../src/MenuActiveEffects.cpp:219
526 msgid "Remaining:"
527 msgstr "Restante:"
528
529 #: ../../../src/MenuActiveEffects.cpp:225
530 #, c-format
531 msgid "x%d stacks"
532 msgstr "x%d pilhas"
533
534 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
535 msgid "Name"
536 msgstr "Nome"
537
538 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
539 msgid "Level"
540 msgstr "Nível"
541
542 #: ../../../src/MenuCharacter.cpp:310
543 #, c-format
544 msgid "%d unspent stat point"
545 msgstr "%d ponto não utilizados"
546
547 #: ../../../src/MenuCharacter.cpp:313
548 #, c-format
549 msgid "%d unspent stat points"
550 msgstr "%d pontos não utilizados"
551
552 #: ../../../src/MenuCharacter.cpp:355
553 #, c-format
554 msgid "Reduces the damage taken from \"%s\" elemental attacks."
555 msgstr "Reduz o dano recebido de \"%s\" ataques elementais."
556
557 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
558 #, c-format
559 msgid "XP: %d"
560 msgstr "XP: %d"
561
562 #: ../../../src/MenuCharacter.cpp:367
563 #, c-format
564 msgid "Next: %d"
565 msgstr "Próximo: %d"
566
567 #: ../../../src/MenuCharacter.cpp:373
568 #, c-format
569 msgid "base (%d), bonus (%d)"
570 msgstr "básico (%d), bônus (%d)"
571
572 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
573 msgid "Related stats:"
574 msgstr "Estatísticas:"
575
576 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
577 #, c-format
578 msgid "Each level grants %d."
579 msgstr "Cada nível concede %d."
580
581 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
582 #, c-format
583 msgid "Each point of %s grants %d."
584 msgstr "Cada ponto de %s concede %d."
585
586 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
587 msgid "Clear"
588 msgstr "Limpar"
589
590 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
591 msgid "Assign:"
592 msgstr "Atribuir:"
593
594 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
143595 msgid "Defaults"
144596 msgstr "Padrões"
145597
146 #: ../../../src/GameStateConfigBase.cpp:89
598 #: ../../../src/MenuConfig.cpp:123
147599 msgid "Reset ALL settings?"
148600 msgstr "Restaurar padrões?"
149601
150 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
602 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
151603 msgid "OK"
152604 msgstr "OK"
153605
154 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
155 #: ../../../src/InputState.cpp:401
156 msgid "Cancel"
157 msgstr "Cancelar"
158
159 #: ../../../src/GameStateConfigBase.cpp:160
160 #: ../../../src/GameStateConfigDesktop.cpp:130
606 #: ../../../src/MenuConfig.cpp:246
607 msgid "Continue"
608 msgstr "Continuar"
609
610 #: ../../../src/MenuConfig.cpp:248
611 msgid "Save Game"
612 msgstr ""
613
614 #: ../../../src/MenuConfig.cpp:291
615 msgid "Default"
616 msgstr ""
617
618 #: ../../../src/MenuConfig.cpp:291
619 msgid ""
620 "Show all loot tooltips, except for those that would be obscured by the "
621 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
622 msgstr ""
623
624 #: ../../../src/MenuConfig.cpp:292
625 msgid "Show all"
626 msgstr ""
627
628 #: ../../../src/MenuConfig.cpp:292
629 msgid ""
630 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
631 msgstr ""
632
633 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
634 msgid "Hidden"
635 msgstr ""
636
637 #: ../../../src/MenuConfig.cpp:293
638 msgid ""
639 "Always hide loot tooltips, except for when a piece of loot is hovered with "
640 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
641 msgstr ""
642
643 #: ../../../src/MenuConfig.cpp:296
644 msgid "Visible"
645 msgstr ""
646
647 #: ../../../src/MenuConfig.cpp:297
648 msgid "Visible (2x zoom)"
649 msgstr ""
650
651 #: ../../../src/MenuConfig.cpp:301
652 msgid ""
653 "Controls the type of warning to be activated when the player is below the "
654 "low health threshold."
655 msgstr ""
656
657 #: ../../../src/MenuConfig.cpp:302
658 msgid "- Display a message"
659 msgstr ""
660
661 #: ../../../src/MenuConfig.cpp:303
662 msgid "- Play a sound"
663 msgstr ""
664
665 #: ../../../src/MenuConfig.cpp:304
666 msgid "- Change the cursor"
667 msgstr ""
668
669 #: ../../../src/MenuConfig.cpp:306
670 msgid "Disabled"
671 msgstr ""
672
673 #: ../../../src/MenuConfig.cpp:307
674 msgid "All"
675 msgstr ""
676
677 #: ../../../src/MenuConfig.cpp:308
678 msgid "Message & Cursor"
679 msgstr ""
680
681 #: ../../../src/MenuConfig.cpp:309
682 msgid "Message & Sound"
683 msgstr ""
684
685 #: ../../../src/MenuConfig.cpp:310
686 msgid "Sound & Cursor"
687 msgstr ""
688
689 #: ../../../src/MenuConfig.cpp:311
690 msgid "Message"
691 msgstr ""
692
693 #: ../../../src/MenuConfig.cpp:312
694 msgid "Cursor"
695 msgstr ""
696
697 #: ../../../src/MenuConfig.cpp:313
698 msgid "Sound"
699 msgstr ""
700
701 #: ../../../src/MenuConfig.cpp:319
702 msgid ""
703 "When the player's health drops below the given threshold, the low health "
704 "notifications are triggered if one or more of them is enabled."
705 msgstr ""
706
707 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
708 msgid "Exit"
709 msgstr "Sair"
710
711 #: ../../../src/MenuConfig.cpp:333
712 msgid "Video"
713 msgstr "Video"
714
715 #: ../../../src/MenuConfig.cpp:334
161716 msgid "Audio"
162717 msgstr "Áudio"
163718
164 #: ../../../src/GameStateConfigBase.cpp:161
165 #: ../../../src/GameStateConfigDesktop.cpp:131
719 #: ../../../src/MenuConfig.cpp:335
166720 msgid "Interface"
167721 msgstr "Interface"
168722
169 #: ../../../src/GameStateConfigBase.cpp:162
170 #: ../../../src/GameStateConfigDesktop.cpp:134
723 #: ../../../src/MenuConfig.cpp:336
724 msgid "Input"
725 msgstr "Entrada"
726
727 #: ../../../src/MenuConfig.cpp:337
728 msgid "Keybindings"
729 msgstr "Teclas de Atalho"
730
731 #: ../../../src/MenuConfig.cpp:338
171732 msgid "Mods"
172733 msgstr "Mods"
173734
174 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
735 #: ../../../src/MenuConfig.cpp:350
736 msgid "Paused"
737 msgstr "Interrompido"
738
739 #: ../../../src/MenuConfig.cpp:353
740 msgid "Time Played"
741 msgstr ""
742
743 #: ../../../src/MenuConfig.cpp:359
744 msgid "Renderer"
745 msgstr "Renderizador"
746
747 #: ../../../src/MenuConfig.cpp:360
748 msgid "Full Screen Mode"
749 msgstr "Tela Cheia"
750
751 #: ../../../src/MenuConfig.cpp:361
752 msgid "Hardware surfaces"
753 msgstr "Superfícies por Hardware"
754
755 #: ../../../src/MenuConfig.cpp:362
756 msgid "V-Sync"
757 msgstr "V-Sync"
758
759 #: ../../../src/MenuConfig.cpp:363
760 msgid "Texture Filtering"
761 msgstr "Filtragem"
762
763 #: ../../../src/MenuConfig.cpp:364
764 msgid "DPI scaling"
765 msgstr "DPI scaling"
766
767 #: ../../../src/MenuConfig.cpp:365
768 msgid "Parallax Layers"
769 msgstr ""
770
771 #: ../../../src/MenuConfig.cpp:366
772 msgid "Allow changing gamma"
773 msgstr "Alterar gamma"
774
775 #: ../../../src/MenuConfig.cpp:367
776 msgid "Gamma"
777 msgstr "Gamma"
778
779 #: ../../../src/MenuConfig.cpp:369
780 msgid "Sound Volume"
781 msgstr "Volume dos efeitos"
782
783 #: ../../../src/MenuConfig.cpp:370
175784 msgid "Music Volume"
176785 msgstr "Volume das músicas"
177786
178 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
179 msgid "Sound Volume"
180 msgstr "Volume dos efeitos"
181
182 #: ../../../src/GameStateConfigBase.cpp:257
787 #: ../../../src/MenuConfig.cpp:372
183788 msgid "Language"
184789 msgstr "Idioma"
185790
186 #: ../../../src/GameStateConfigBase.cpp:266
791 #: ../../../src/MenuConfig.cpp:373
187792 msgid "Show FPS"
188793 msgstr "Exibir quadros por segundo"
189794
190 #: ../../../src/GameStateConfigBase.cpp:270
795 #: ../../../src/MenuConfig.cpp:374
796 msgid "Hardware mouse cursor"
797 msgstr "Renderizar cursor do mouse por hardware"
798
799 #: ../../../src/MenuConfig.cpp:375
191800 msgid "Colorblind Mode"
192801 msgstr "Modo daltônico"
193802
194 #: ../../../src/GameStateConfigBase.cpp:274
195 msgid "Hardware mouse cursor"
196 msgstr "Renderizar cursor do mouse por hardware"
197
198 #: ../../../src/GameStateConfigBase.cpp:278
803 #: ../../../src/MenuConfig.cpp:376
199804 msgid "Developer Mode"
200805 msgstr "Modo desenvolvedor"
201806
202 #: ../../../src/GameStateConfigBase.cpp:282
807 #: ../../../src/MenuConfig.cpp:377
203808 msgid "Subtitles"
204809 msgstr "Legenda"
205810
206 #: ../../../src/GameStateConfigBase.cpp:286
207 msgid "Active Mods"
208 msgstr "Mods Ativos"
209
210 #: ../../../src/GameStateConfigBase.cpp:295
211 msgid "Available Mods"
212 msgstr "Mods Disponíveis"
213
214 #: ../../../src/GameStateConfigBase.cpp:314
215 msgid "<< Disable"
216 msgstr "<< Desabilitar"
217
218 #: ../../../src/GameStateConfigBase.cpp:320
219 msgid "Enable >>"
220 msgstr "Habilitar >>"
221
222 #: ../../../src/GameStateConfigBase.cpp:873
223 msgid "Version:"
224 msgstr "Versão:"
225
226 #: ../../../src/GameStateConfigBase.cpp:878
227 msgid "Game:"
228 msgstr "Jogo:"
229
230 #: ../../../src/GameStateConfigBase.cpp:883
231 msgid "Engine version:"
232 msgstr "Versão do motor:"
233
234 #: ../../../src/GameStateConfigBase.cpp:891
235 msgid "Requires mods:"
236 msgstr "Mods necessários:"
237
238 #: ../../../src/GameStateConfigDesktop.cpp:83
239 #: ../../../src/GameStateConfigDesktop.cpp:751
240 msgid "Clear"
241 msgstr "Limpar"
242
243 #: ../../../src/GameStateConfigDesktop.cpp:83
244 #: ../../../src/GameStateConfigDesktop.cpp:749
245 msgid "Assign:"
246 msgstr "Atribuir:"
247
248 #: ../../../src/GameStateConfigDesktop.cpp:128
249 msgid "Video"
250 msgstr "Video"
251
252 #: ../../../src/GameStateConfigDesktop.cpp:132
253 msgid "Input"
254 msgstr "Entrada"
255
256 #: ../../../src/GameStateConfigDesktop.cpp:133
257 msgid "Keybindings"
258 msgstr "Teclas de Atalho"
259
260 #: ../../../src/GameStateConfigDesktop.cpp:188
811 #: ../../../src/MenuConfig.cpp:378
812 msgid "Loot tooltip visibility"
813 msgstr ""
814
815 #: ../../../src/MenuConfig.cpp:379
816 msgid "Mini-map mode"
817 msgstr ""
818
819 #: ../../../src/MenuConfig.cpp:380
820 msgid "Always show stat bar labels"
821 msgstr "Exibir rótulos na barra de status"
822
823 #: ../../../src/MenuConfig.cpp:381
824 msgid "Allow stat bar auto-hiding"
825 msgstr ""
826
827 #: ../../../src/MenuConfig.cpp:382
828 msgid "Show combat text"
829 msgstr "Exibir rótulos de combate"
830
831 #: ../../../src/MenuConfig.cpp:383
832 msgid "Automatically equip items"
833 msgstr "Equipar itens automaticamente"
834
835 #: ../../../src/MenuConfig.cpp:384
836 msgid "Show hidden entity markers"
837 msgstr ""
838
839 #: ../../../src/MenuConfig.cpp:385
840 msgid "Low health notification"
841 msgstr ""
842
843 #: ../../../src/MenuConfig.cpp:386
844 msgid "Low health threshold"
845 msgstr ""
846
847 #: ../../../src/MenuConfig.cpp:389
848 msgid "Joystick"
849 msgstr "Controlador"
850
851 #: ../../../src/MenuConfig.cpp:390
852 msgid "Move hero using mouse"
853 msgstr "Mover o personagem utilizando o mouse"
854
855 #: ../../../src/MenuConfig.cpp:391
856 msgid "Mouse aim"
857 msgstr "Mirar com mouse"
858
859 #: ../../../src/MenuConfig.cpp:392
860 msgid "Do not use mouse"
861 msgstr "Não utilizar o mouse"
862
863 #: ../../../src/MenuConfig.cpp:393
864 msgid "Swap mouse movement button"
865 msgstr ""
866
867 #: ../../../src/MenuConfig.cpp:394
868 msgid "Attack with mouse movement"
869 msgstr ""
870
871 #: ../../../src/MenuConfig.cpp:395
872 msgid "Joystick Deadzone"
873 msgstr "Zona inoperante do controlador"
874
875 #: ../../../src/MenuConfig.cpp:405
876 #, c-format
877 msgid "Primary binding: %s"
878 msgstr ""
879
880 #: ../../../src/MenuConfig.cpp:406
881 #, c-format
882 msgid "Alternate binding: %s"
883 msgstr ""
884
885 #: ../../../src/MenuConfig.cpp:407
886 #, c-format
887 msgid "Joystick binding: %s"
888 msgstr ""
889
890 #: ../../../src/MenuConfig.cpp:508
261891 msgid ""
262892 "Will try to store surfaces in video memory versus system memory. The effect "
263893 "this has on performance depends on the renderer."
265895 "Tentar armazenar superfícies na memória de vídeo e não na memória do "
266896 "sistema. O efeito que isso terá no desempenho depende do renderizador."
267897
268 #: ../../../src/GameStateConfigDesktop.cpp:189
898 #: ../../../src/MenuConfig.cpp:509
269899 msgid ""
270900 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
271901 "windowed mode or input lag."
273903 "Evita o \"tearing\" da tela. Desative se você tiver engasgos no modo janela "
274904 "ou atraso nos controles."
275905
276 #: ../../../src/GameStateConfigDesktop.cpp:190
906 #: ../../../src/MenuConfig.cpp:510
277907 msgid ""
278908 "When enabled, this uses the screen DPI in addition to the window dimensions "
279909 "to scale the rendering resolution. Otherwise, only the window dimensions are"
283913 " de renderização. Caso contrário, apenas as dimensões da janela serão "
284914 "usadas."
285915
286 #: ../../../src/GameStateConfigDesktop.cpp:191
916 #: ../../../src/MenuConfig.cpp:511
287917 msgid ""
288918 "This enables parallax (non-tile) layers. Disabling this setting can improve "
289919 "performance in some cases."
290920 msgstr ""
291921
292 #: ../../../src/GameStateConfigDesktop.cpp:192
293 msgid "Experimental"
294 msgstr "Experimental"
295
296 #: ../../../src/GameStateConfigDesktop.cpp:193
297 msgid "For handheld devices"
298 msgstr "Para dispositivos portáteis"
299
300 #: ../../../src/GameStateConfigDesktop.cpp:211
301 msgid "Renderer"
302 msgstr "Renderizador"
303
304 #: ../../../src/GameStateConfigDesktop.cpp:227
305 msgid "Full Screen Mode"
306 msgstr "Tela Cheia"
307
308 #: ../../../src/GameStateConfigDesktop.cpp:231
309 msgid "Move hero using mouse"
310 msgstr "Mover o personagem utilizando o mouse"
311
312 #: ../../../src/GameStateConfigDesktop.cpp:235
313 msgid "Hardware surfaces"
314 msgstr "Superfícies por Hardware"
315
316 #: ../../../src/GameStateConfigDesktop.cpp:239
317 msgid "V-Sync"
318 msgstr "V-Sync"
319
320 #: ../../../src/GameStateConfigDesktop.cpp:243
321 msgid "Texture Filtering"
322 msgstr "Filtragem"
323
324 #: ../../../src/GameStateConfigDesktop.cpp:247
325 msgid "DPI scaling"
326 msgstr "DPI scaling"
327
328 #: ../../../src/GameStateConfigDesktop.cpp:251
329 msgid "Parallax Layers"
330 msgstr ""
331
332 #: ../../../src/GameStateConfigDesktop.cpp:255
333 msgid "Allow changing gamma"
334 msgstr "Alterar gamma"
335
336 #: ../../../src/GameStateConfigDesktop.cpp:259
337 msgid "Gamma"
338 msgstr "Gamma"
339
340 #: ../../../src/GameStateConfigDesktop.cpp:263
341 msgid "Use joystick"
342 msgstr "Usar controlador"
343
344 #: ../../../src/GameStateConfigDesktop.cpp:267
345 msgid "Joystick"
346 msgstr "Controlador"
347
348 #: ../../../src/GameStateConfigDesktop.cpp:283
349 msgid "Mouse aim"
350 msgstr "Mirar com mouse"
351
352 #: ../../../src/GameStateConfigDesktop.cpp:287
353 msgid "Do not use mouse"
354 msgstr "Não utilizar o mouse"
355
356 #: ../../../src/GameStateConfigDesktop.cpp:291
357 msgid "Joystick Deadzone"
358 msgstr "Zona inoperante do controlador"
359
360 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
361 msgid "Loading..."
362 msgstr "Carregando..."
363
364 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
365 msgid "Delete Save"
366 msgstr "Excluir"
367
368 #: ../../../src/GameStateLoad.cpp:88
369 msgid "Delete this save?"
370 msgstr "Excluir jogo salvo?"
371
372 #: ../../../src/GameStateLoad.cpp:90
373 msgid "Exit to Title"
374 msgstr "Voltar"
375
376 #: ../../../src/GameStateLoad.cpp:93
377 msgid "New Game"
378 msgstr "Novo"
379
380 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
381 msgid "Choose a Slot"
382 msgstr "Selecione um espaço"
383
384 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
385 msgid "Enable a story mod to continue"
386 msgstr "Ative o mod de campanha para continuar"
387
388 #: ../../../src/GameStateLoad.cpp:589
389 msgid "Load Game"
390 msgstr "Continuar"
391
392 #: ../../../src/GameStateLoad.cpp:695
393 msgid "Entering game world..."
394 msgstr "Entrando no mundo do jogo..."
395
396 #: ../../../src/GameStateLoad.cpp:698
397 msgid "Loading saved game..."
398 msgstr "Carregando jogo salvo..."
399
400 #: ../../../src/GameStateLoad.cpp:731
401 msgid "Invalid save"
402 msgstr "Jogo salvo inválido"
403
404 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
405 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
406 #: ../../../src/MenuPowers.cpp:1542
407 #, c-format
408 msgid "Level %d"
409 msgstr "Nível %d"
410
411 #: ../../../src/GameStateNew.cpp:68
412 msgid "Create"
413 msgstr "Criar"
414
415 #: ../../../src/GameStateNew.cpp:76
416 msgid "Randomize"
417 msgstr "Aleatória"
418
419 #: ../../../src/GameStateNew.cpp:92
420 msgid "Choose a Portrait"
421 msgstr "Escolha um retrato"
422
423 #: ../../../src/GameStateNew.cpp:96
424 msgid "Choose a Name"
425 msgstr "Digite um nome"
426
427 #: ../../../src/GameStateNew.cpp:100
428 msgid "Permadeath?"
429 msgstr "Morte permanente?"
430
431 #: ../../../src/GameStateNew.cpp:104
432 msgid "Choose a Class"
433 msgstr "Escolha uma classe"
434
435 #: ../../../src/GameStateTitle.cpp:108
436 msgid "Play Game"
437 msgstr "Jogar"
438
439 #: ../../../src/GameStateTitle.cpp:111
440 msgid "Enable a core mod to continue"
441 msgstr "Ative o mod core para continuar"
442
443 #: ../../../src/GameStateTitle.cpp:115
444 msgid "Configuration"
445 msgstr "Opções "
446
447 #: ../../../src/GameStateTitle.cpp:118
448 msgid "Credits"
449 msgstr "Sobre"
450
451 #: ../../../src/GameStateTitle.cpp:121
452 msgid "Exit Game"
453 msgstr "Sair"
454
455 #: ../../../src/InputState.cpp:402
456 msgid "Accept"
457 msgstr "Aceitar"
458
459 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
460 msgid "Up"
461 msgstr "Cima"
462
463 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
464 msgid "Down"
465 msgstr "Baixo"
466
467 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
468 msgid "Left"
469 msgstr "Esquerda"
470
471 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
472 msgid "Right"
473 msgstr "Direita"
474
475 #: ../../../src/InputState.cpp:407
476 msgid "Bar1"
477 msgstr "Barra1"
478
479 #: ../../../src/InputState.cpp:408
480 msgid "Bar2"
481 msgstr "Barra2"
482
483 #: ../../../src/InputState.cpp:409
484 msgid "Bar3"
485 msgstr "Barra3"
486
487 #: ../../../src/InputState.cpp:410
488 msgid "Bar4"
489 msgstr "Barra4"
490
491 #: ../../../src/InputState.cpp:411
492 msgid "Bar5"
493 msgstr "Barra5"
494
495 #: ../../../src/InputState.cpp:412
496 msgid "Bar6"
497 msgstr "Barra6"
498
499 #: ../../../src/InputState.cpp:413
500 msgid "Bar7"
501 msgstr "Barra7"
502
503 #: ../../../src/InputState.cpp:414
504 msgid "Bar8"
505 msgstr "Barra8"
506
507 #: ../../../src/InputState.cpp:415
508 msgid "Bar9"
509 msgstr "Barra9"
510
511 #: ../../../src/InputState.cpp:416
512 msgid "Bar0"
513 msgstr "Barra0"
514
515 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
516 #: ../../../src/MenuCharacter.cpp:54
517 msgid "Character"
518 msgstr "Personagem"
519
520 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
521 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
522 msgid "Inventory"
523 msgstr "Inventario"
524
525 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
526 #: ../../../src/MenuPowers.cpp:168
527 msgid "Powers"
528 msgstr "Poderes"
529
530 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
531 #: ../../../src/MenuLog.cpp:72
532 msgid "Log"
533 msgstr "Diário"
534
535 #: ../../../src/InputState.cpp:421
536 msgid "Main1"
537 msgstr "Principal1"
538
539 #: ../../../src/InputState.cpp:422
540 msgid "Main2"
541 msgstr "Principal2"
542
543 #: ../../../src/InputState.cpp:423
544 msgid "Ctrl"
545 msgstr "Ctrl"
546
547 #: ../../../src/InputState.cpp:424
548 msgid "Shift"
549 msgstr "Shift"
550
551 #: ../../../src/InputState.cpp:425
552 msgid "Alt"
553 msgstr "Alt"
554
555 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
556 msgid "Delete"
557 msgstr "Delete"
558
559 #: ../../../src/InputState.cpp:427
560 msgid "ActionBar Accept"
561 msgstr "Barra de Ação Aceitar"
562
563 #: ../../../src/InputState.cpp:428
564 msgid "ActionBar Left"
565 msgstr "Barra de Ação Esquerda"
566
567 #: ../../../src/InputState.cpp:429
568 msgid "ActionBar Right"
569 msgstr "Barra de Ação Direita"
570
571 #: ../../../src/InputState.cpp:430
572 msgid "ActionBar Use"
573 msgstr "Barra de Ação Usar"
574
575 #: ../../../src/InputState.cpp:431
576 msgid "Developer Menu"
577 msgstr "Menu do desenvolvedor"
578
579 #: ../../../src/InputState.cpp:433
580 msgid "Left Mouse"
581 msgstr "Mouse esq."
582
583 #: ../../../src/InputState.cpp:434
584 msgid "Middle Mouse"
585 msgstr "Mouse do Meio"
586
587 #: ../../../src/InputState.cpp:435
588 msgid "Right Mouse"
589 msgstr "Mouse dir."
590
591 #: ../../../src/InputState.cpp:436
592 msgid "Wheel Up"
593 msgstr "Roda para Cima"
594
595 #: ../../../src/InputState.cpp:437
596 msgid "Wheel Down"
597 msgstr "Roda para Baixo"
598
599 #: ../../../src/InputState.cpp:438
600 msgid "Mouse X1"
601 msgstr "Mouse X1"
602
603 #: ../../../src/InputState.cpp:439
604 msgid "Mouse X2"
605 msgstr "Mouse X2"
606
607 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
608 msgid "Unknown Item"
609 msgstr "Item Desconhecido"
610
611 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
612 #, c-format
613 msgid "%d%% Speed"
614 msgstr "%d%% Velocidade"
615
616 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
617 #, c-format
618 msgid "%d%% Attack Speed"
619 msgstr "%d%% Velocidade de Ataque"
620
621 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
622 #: ../../../src/MenuPowers.cpp:833
623 #, c-format
624 msgid "Resistance (%s)"
625 msgstr "Resistência (%s)"
626
627 #: ../../../src/ItemManager.cpp:684
628 #, c-format
629 msgid "Requires %s"
630 msgstr "Necessário %s"
631
632 #: ../../../src/ItemManager.cpp:733
633 msgid "Quest Item"
634 msgstr "Item de Missão"
635
636 #: ../../../src/ItemManager.cpp:760
637 #, c-format
638 msgid "Quality: %s"
639 msgstr "Quantidade: %s"
640
641 #: ../../../src/ItemManager.cpp:785
642 #, c-format
643 msgid "Absorb: %d-%d"
644 msgstr "Absorver: %d-%d"
645
646 #: ../../../src/ItemManager.cpp:787
647 #, c-format
648 msgid "Absorb: %d"
649 msgstr "Absorver: %d"
650
651 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
652 #: ../../../src/MenuPowers.cpp:1134
653 #, c-format
654 msgid "Requires Level %d"
655 msgstr "Nível Necessário %d"
656
657 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
658 #: ../../../src/MenuPowers.cpp:1125
659 #, c-format
660 msgid "Requires %s %d"
661 msgstr "Necessário %s %d"
662
663 #: ../../../src/ItemManager.cpp:849
664 #, c-format
665 msgid "Requires Class: %s"
666 msgstr "Classe Necessária : %s"
667
668 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
669 #, c-format
670 msgid "Buy Price: %d %s"
671 msgstr "Preço de Compra: %d %s"
672
673 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
674 #, c-format
675 msgid "Buy Price: %d %s each"
676 msgstr "Preço de Compra: %d %s cada"
677
678 #: ../../../src/ItemManager.cpp:886
679 #, c-format
680 msgid "Sell Price: %d %s"
681 msgstr "Preço de Venda: %d %s"
682
683 #: ../../../src/ItemManager.cpp:888
684 #, c-format
685 msgid "Sell Price: %d %s each"
686 msgstr "Preço de Venda: %d %s cada"
687
688 #: ../../../src/ItemManager.cpp:897
689 msgid "Set:"
690 msgstr "Conjunto:"
691
692 #: ../../../src/ItemManager.cpp:904
693 #, c-format
694 msgid "%d items:"
695 msgstr "%d Items:"
696
697 #: ../../../src/ItemManager.cpp:917
698 #, c-format
699 msgid "Press [%s] to use"
700 msgstr "Pressione [%s] para usar"
701
702 #: ../../../src/ItemManager.cpp:920
703 #, c-format
704 msgid "Press [%s] to read"
705 msgstr "Pressione [%s] para ler"
706
707 #: ../../../src/MenuActionBar.cpp:87
708 msgid "Loot tooltip visibility"
709 msgstr ""
710
711 #: ../../../src/MenuActionBar.cpp:88
712 msgid "Mini-map mode"
713 msgstr ""
714
715 #: ../../../src/MenuActionBar.cpp:89
716 msgid "Always show stat bar labels"
717 msgstr "Exibir rótulos na barra de status"
718
719 #: ../../../src/MenuActionBar.cpp:90
720 msgid "Show combat text"
721 msgstr "Exibir rótulos de combate"
722
723 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
724 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
725 #, c-format
726 msgid "Hotkey: %s"
727 msgstr "Atalho: %s"
728
729 #: ../../../src/MenuActionBar.cpp:474
730 #, c-format
731 msgid "Default. Temporarily show all loot tooltips with '%s'."
732 msgstr ""
733
734 #: ../../../src/MenuActionBar.cpp:476
735 #, c-format
736 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
737 msgstr ""
738
739 #: ../../../src/MenuActionBar.cpp:478
740 #, c-format
741 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
742 msgstr ""
743
744 #: ../../../src/MenuActionBar.cpp:482
745 msgid "Visible"
746 msgstr ""
747
748 #: ../../../src/MenuActionBar.cpp:484
749 msgid "Visible (2x zoom)"
750 msgstr ""
751
752 #: ../../../src/MenuActionBar.cpp:486
753 msgid "Hidden"
754 msgstr ""
755
756 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
757 msgid "Enabled"
758 msgstr ""
759
760 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
761 msgid "Disabled"
762 msgstr ""
763
764 #: ../../../src/MenuActionBar.cpp:657
765 msgid "Not enough MP."
766 msgstr "MP insuficiente."
767
768 #: ../../../src/MenuActiveEffects.cpp:124
769 #, c-format
770 msgid "x%d"
771 msgstr "x%d"
772
773 #: ../../../src/MenuActiveEffects.cpp:219
774 msgid "Remaining:"
775 msgstr "Restante:"
776
777 #: ../../../src/MenuActiveEffects.cpp:225
778 #, c-format
779 msgid "x%d stacks"
780 msgstr "x%d pilhas"
781
782 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
783 msgid "Name"
784 msgstr "Nome"
785
786 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
787 msgid "Level"
788 msgstr "Nível"
789
790 #: ../../../src/MenuCharacter.cpp:310
791 #, c-format
792 msgid "%d unspent stat point"
793 msgstr "%d ponto não utilizados"
794
795 #: ../../../src/MenuCharacter.cpp:313
796 #, c-format
797 msgid "%d unspent stat points"
798 msgstr "%d pontos não utilizados"
799
800 #: ../../../src/MenuCharacter.cpp:355
801 #, c-format
802 msgid "Reduces the damage taken from \"%s\" elemental attacks."
803 msgstr "Reduz o dano recebido de \"%s\" ataques elementais."
804
805 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
806 #, c-format
807 msgid "XP: %d"
808 msgstr "XP: %d"
809
810 #: ../../../src/MenuCharacter.cpp:367
811 #, c-format
812 msgid "Next: %d"
813 msgstr "Próximo: %d"
814
815 #: ../../../src/MenuCharacter.cpp:373
816 #, c-format
817 msgid "base (%d), bonus (%d)"
818 msgstr "básico (%d), bônus (%d)"
819
820 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
821 msgid "Related stats:"
822 msgstr "Estatísticas:"
823
824 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
825 #, c-format
826 msgid "Each level grants %d."
827 msgstr "Cada nível concede %d."
828
829 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
830 #, c-format
831 msgid "Each point of %s grants %d."
832 msgstr "Cada ponto de %s concede %d."
922 #: ../../../src/MenuConfig.cpp:512
923 msgid ""
924 "Enables the below setting that controls the screen gamma level. The behavior"
925 " of the gamma setting can vary between platforms."
926 msgstr ""
927
928 #: ../../../src/MenuConfig.cpp:513
929 msgid ""
930 "Provides additional text for information that is primarily conveyed through "
931 "color."
932 msgstr ""
933
934 #: ../../../src/MenuConfig.cpp:514
935 msgid ""
936 "Some mods will automatically hide the stat bars when they are inactive. "
937 "Disabling this option will keep them displayed at all times."
938 msgstr ""
939
940 #: ../../../src/MenuConfig.cpp:515
941 msgid ""
942 "When enabled, empty equipment slots will be filled with applicable items "
943 "when they are obtained."
944 msgstr ""
945
946 #: ../../../src/MenuConfig.cpp:516
947 msgid ""
948 "Shows a marker above enemies, allies, and the player when they are obscured "
949 "by tall objects."
950 msgstr ""
951
952 #: ../../../src/MenuConfig.cpp:517
953 msgid ""
954 "This allows the game to be controlled entirely with the keyboard (or "
955 "joystick)."
956 msgstr ""
957
958 #: ../../../src/MenuConfig.cpp:518
959 msgid ""
960 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
961 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
962 "instead of 'Main1'."
963 msgstr ""
964
965 #: ../../../src/MenuConfig.cpp:519
966 msgid ""
967 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
968 "assigned to the movement button can be used by targeting an enemy. If this "
969 "setting is disabled, it is required to use 'Shift' to access the Power "
970 "assigned to the movement button."
971 msgstr ""
972
973 #: ../../../src/MenuConfig.cpp:520
974 msgid ""
975 "The player's attacks will be aimed in the direction of the mouse cursor when"
976 " this is enabled."
977 msgstr ""
978
979 #: ../../../src/MenuConfig.cpp:571
980 msgid "Active Mods"
981 msgstr "Mods Ativos"
982
983 #: ../../../src/MenuConfig.cpp:580
984 msgid "Available Mods"
985 msgstr "Mods Disponíveis"
986
987 #: ../../../src/MenuConfig.cpp:599
988 msgid "<< Disable"
989 msgstr "<< Desabilitar"
990
991 #: ../../../src/MenuConfig.cpp:605
992 msgid "Enable >>"
993 msgstr "Habilitar >>"
994
995 #: ../../../src/MenuConfig.cpp:1436
996 msgid "Version:"
997 msgstr "Versão:"
998
999 #: ../../../src/MenuConfig.cpp:1441
1000 msgid "Game:"
1001 msgstr "Jogo:"
1002
1003 #: ../../../src/MenuConfig.cpp:1446
1004 msgid "Engine version:"
1005 msgstr "Versão do motor:"
1006
1007 #: ../../../src/MenuConfig.cpp:1454
1008 msgid "Requires mods:"
1009 msgstr "Mods necessários:"
1010
1011 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
1012 msgid "(none)"
1013 msgstr "(nenhum)"
1014
1015 #: ../../../src/MenuConfig.cpp:1579
1016 msgid "Save & Exit"
1017 msgstr "Salvar e Sair"
8331018
8341019 #: ../../../src/MenuDevConsole.cpp:63
8351020 msgid "Execute"
9921177 msgid "HINT: Type help"
9931178 msgstr "DICA: Digite help"
9941179
995 #: ../../../src/MenuEnemy.cpp:138
1180 #: ../../../src/MenuEnemy.cpp:162
9961181 #, c-format
9971182 msgid "%s level %d"
9981183 msgstr "%s nível %d"
9991184
1000 #: ../../../src/MenuEnemy.cpp:162
1185 #: ../../../src/MenuEnemy.cpp:186
10011186 msgid "Dead"
10021187 msgstr "Morto"
10031188
1004 #: ../../../src/MenuEnemy.cpp:164
1189 #: ../../../src/MenuEnemy.cpp:188
10051190 msgid "Destroyed"
10061191 msgstr "Destruído"
10071192
1008 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
1009 msgid "Paused"
1010 msgstr "Interrompido"
1011
1012 #: ../../../src/MenuExit.cpp:91
1013 msgid "Save & Exit"
1014 msgstr "Salvar e Sair"
1015
1016 #: ../../../src/MenuExit.cpp:92
1017 msgid "Exit"
1018 msgstr "Sair"
1019
1020 #: ../../../src/MenuExit.cpp:96
1021 msgid "Continue"
1022 msgstr "Continue"
1023
1024 #: ../../../src/MenuInventory.cpp:73
1025 msgid "Automatically equip items"
1026 msgstr "Equipar itens automaticamente"
1027
1028 #: ../../../src/MenuInventory.cpp:188
1193 #: ../../../src/MenuInventory.cpp:177
10291194 #, c-format
10301195 msgid "Lost %d%% of %s."
10311196 msgstr "Perdeu %d%% de %s."
10321197
1033 #: ../../../src/MenuInventory.cpp:195
1198 #: ../../../src/MenuInventory.cpp:184
10341199 #, c-format
10351200 msgid "Lost %d%% of total XP."
10361201 msgstr "Perdeu %d%% do total de XP."
10371202
1038 #: ../../../src/MenuInventory.cpp:200
1203 #: ../../../src/MenuInventory.cpp:189
10391204 #, c-format
10401205 msgid "Lost %d%% of current level XP."
10411206 msgstr "Perdeu %d%% do atual nível de XP."
10421207
1043 #: ../../../src/MenuInventory.cpp:226
1208 #: ../../../src/MenuInventory.cpp:215
10441209 #, c-format
10451210 msgid "Lost %s."
10461211 msgstr "Perdeu %s."
10471212
1048 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1213 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10491214 #, c-format
10501215 msgid "%d %s"
10511216 msgstr "%d %s"
10521217
1053 #: ../../../src/MenuInventory.cpp:317
1218 #: ../../../src/MenuInventory.cpp:300
10541219 msgid "Pick up item(s):"
10551220 msgstr "Item(s) coletados:"
10561221
1057 #: ../../../src/MenuInventory.cpp:318
1222 #: ../../../src/MenuInventory.cpp:301
10581223 msgid "Use or equip item:"
10591224 msgstr "Utilize ou equipe o item:"
10601225
1061 #: ../../../src/MenuInventory.cpp:319
1226 #: ../../../src/MenuInventory.cpp:302
10621227 #, c-format
10631228 msgid "%s modifiers"
10641229 msgstr "%s modificadores"
10651230
1066 #: ../../../src/MenuInventory.cpp:320
1231 #: ../../../src/MenuInventory.cpp:303
10671232 msgid "Select a quantity of item:"
10681233 msgstr "Selecione a quantidade do item:"
10691234
1070 #: ../../../src/MenuInventory.cpp:323
1235 #: ../../../src/MenuInventory.cpp:306
10711236 msgid "Stash item stack:"
10721237 msgstr "Pilha de itens do baú:"
10731238
1074 #: ../../../src/MenuInventory.cpp:325
1239 #: ../../../src/MenuInventory.cpp:308
10751240 msgid "Sell item stack:"
10761241 msgstr "Vender pilha de itens:"
10771242
1078 #: ../../../src/MenuInventory.cpp:592
1243 #: ../../../src/MenuInventory.cpp:574
10791244 msgid "You don't have enough of the required item."
10801245 msgstr "Você não possui o suficiente para adquirir este item."
10811246
1082 #: ../../../src/MenuInventory.cpp:599
1247 #: ../../../src/MenuInventory.cpp:586
10831248 msgid "You can't use this item right now."
10841249 msgstr "Você não pode utilizar este item agora."
10851250
1086 #: ../../../src/MenuInventory.cpp:611
1251 #: ../../../src/MenuInventory.cpp:598
10871252 msgid "This item can only be used from the action bar."
10881253 msgstr "Este item só pode ser usado na barra de ação."
10891254
1090 #: ../../../src/MenuInventory.cpp:729
1255 #: ../../../src/MenuInventory.cpp:716
10911256 msgid "Inventory is full."
10921257 msgstr "Inventário está cheio."
10931258
1094 #: ../../../src/MenuInventory.cpp:849
1259 #: ../../../src/MenuInventory.cpp:841
10951260 #, c-format
10961261 msgid "Not enough %s."
10971262 msgstr "Insuficiente %s."
10981263
1099 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1264 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
11001265 msgid "This item can not be sold."
11011266 msgstr "Este item não pode ser vendido"
11021267
11081273 msgid "Quests"
11091274 msgstr "Missões"
11101275
1111 #: ../../../src/MenuManager.cpp:286
1276 #: ../../../src/MenuManager.cpp:296
11121277 #, c-format
11131278 msgid "XP: %d/%d"
11141279 msgstr "XP: %d/%d"
11151280
1116 #: ../../../src/MenuManager.cpp:827
1281 #: ../../../src/MenuManager.cpp:854
11171282 msgid "This item can not be dropped."
11181283 msgstr "Este item não pode ser descartado."
11191284
11211286 msgid "Enter amount:"
11221287 msgstr "Digite a quantidade:"
11231288
1124 #: ../../../src/MenuPowers.cpp:787
1289 #: ../../../src/MenuPowers.cpp:786
11251290 msgid "Passive"
11261291 msgstr "Passivo"
11271292
1128 #: ../../../src/MenuPowers.cpp:792
1293 #: ../../../src/MenuPowers.cpp:791
11291294 #, c-format
11301295 msgid "Costs %d MP"
11311296 msgstr "Custa %d MP"
11321297
1133 #: ../../../src/MenuPowers.cpp:796
1298 #: ../../../src/MenuPowers.cpp:795
11341299 #, c-format
11351300 msgid "Costs %d HP"
11361301 msgstr "Custa %d HP"
11371302
1138 #: ../../../src/MenuPowers.cpp:801
1303 #: ../../../src/MenuPowers.cpp:800
11391304 msgid "Cooldown:"
11401305 msgstr "Esfriar:"
11411306
1142 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1307 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11431308 msgid "Damage per second"
11441309 msgstr "Dano por segundo"
11451310
1146 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1311 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11471312 msgid "HP per second"
11481313 msgstr "HP por segundo"
11491314
1150 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1315 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11511316 msgid "MP per second"
11521317 msgstr "MP por segundo"
11531318
1154 #: ../../../src/MenuPowers.cpp:885
1319 #: ../../../src/MenuPowers.cpp:884
11551320 msgid "Immobilize"
11561321 msgstr "Imobilizar"
11571322
1158 #: ../../../src/MenuPowers.cpp:893
1323 #: ../../../src/MenuPowers.cpp:892
11591324 msgid "Immunity"
11601325 msgstr "Imunidade"
11611326
1162 #: ../../../src/MenuPowers.cpp:896
1327 #: ../../../src/MenuPowers.cpp:895
11631328 msgid "Immunity to damage over time"
11641329 msgstr "Imunidade a danos de longo prazo"
11651330
1166 #: ../../../src/MenuPowers.cpp:899
1331 #: ../../../src/MenuPowers.cpp:898
11671332 msgid "Immunity to slow"
11681333 msgstr "Imunidade a desaceleração"
11691334
1170 #: ../../../src/MenuPowers.cpp:902
1335 #: ../../../src/MenuPowers.cpp:901
11711336 msgid "Immunity to stun"
11721337 msgstr "Imunidade ao atordoamento"
11731338
1174 #: ../../../src/MenuPowers.cpp:905
1339 #: ../../../src/MenuPowers.cpp:904
11751340 msgid "Immunity to HP steal"
11761341 msgstr "Imunidade ao roubo de HP"
11771342
1178 #: ../../../src/MenuPowers.cpp:908
1343 #: ../../../src/MenuPowers.cpp:907
11791344 msgid "Immunity to MP steal"
11801345 msgstr "Imunidade ao roubo de MP"
11811346
1182 #: ../../../src/MenuPowers.cpp:911
1347 #: ../../../src/MenuPowers.cpp:910
11831348 msgid "Immunity to knockback"
11841349 msgstr "Imunidade a contragolpe"
11851350
1186 #: ../../../src/MenuPowers.cpp:914
1351 #: ../../../src/MenuPowers.cpp:913
11871352 msgid "Immunity to damage reflection"
11881353 msgstr "Imunidade a reflexão de dano"
11891354
1190 #: ../../../src/MenuPowers.cpp:917
1355 #: ../../../src/MenuPowers.cpp:916
11911356 msgid "Stun"
11921357 msgstr "Atordoar"
11931358
1194 #: ../../../src/MenuPowers.cpp:920
1359 #: ../../../src/MenuPowers.cpp:919
11951360 msgid "Automatic revive on death"
11961361 msgstr "Ressuscitar automaticamente"
11971362
1198 #: ../../../src/MenuPowers.cpp:923
1363 #: ../../../src/MenuPowers.cpp:922
11991364 msgid "Convert"
12001365 msgstr "Converter"
12011366
1202 #: ../../../src/MenuPowers.cpp:926
1367 #: ../../../src/MenuPowers.cpp:925
12031368 msgid "Fear"
12041369 msgstr "Medo"
12051370
1206 #: ../../../src/MenuPowers.cpp:929
1371 #: ../../../src/MenuPowers.cpp:928
12071372 msgid "Lifespan"
12081373 msgstr "Vida útil"
12091374
1210 #: ../../../src/MenuPowers.cpp:953
1375 #: ../../../src/MenuPowers.cpp:952
12111376 msgid "Magical Shield"
12121377 msgstr "Escudo Mágico"
12131378
1214 #: ../../../src/MenuPowers.cpp:982
1379 #: ../../../src/MenuPowers.cpp:981
12151380 msgid "Healing"
12161381 msgstr "Cura"
12171382
1218 #: ../../../src/MenuPowers.cpp:985
1383 #: ../../../src/MenuPowers.cpp:984
12191384 msgid "Knockback"
12201385 msgstr "Contragolpe"
12211386
1222 #: ../../../src/MenuPowers.cpp:1010
1387 #: ../../../src/MenuPowers.cpp:1009
12231388 #, c-format
12241389 msgid "%d%% chance"
12251390 msgstr "%d%% chance"
12261391
1227 #: ../../../src/MenuPowers.cpp:1062
1392 #: ../../../src/MenuPowers.cpp:1061
12281393 msgid "Base Accuracy"
12291394 msgstr "Precisão Básica"
12301395
1231 #: ../../../src/MenuPowers.cpp:1082
1396 #: ../../../src/MenuPowers.cpp:1081
12321397 msgid "Base Critical Chance"
12331398 msgstr "Chance Crítica Básica"
12341399
1235 #: ../../../src/MenuPowers.cpp:1090
1400 #: ../../../src/MenuPowers.cpp:1089
12361401 msgid "Ignores Absorbtion"
12371402 msgstr "Ignora Absorção"
12381403
1239 #: ../../../src/MenuPowers.cpp:1095
1404 #: ../../../src/MenuPowers.cpp:1094
12401405 msgid "Ignores Avoidance"
12411406 msgstr "Ignora Esquiva"
12421407
1243 #: ../../../src/MenuPowers.cpp:1100
1408 #: ../../../src/MenuPowers.cpp:1099
12441409 #, c-format
12451410 msgid "%d%% Chance to crit slowed targets"
12461411 msgstr "%d%% Chance de acerto crítico a alvos desacelerados."
12471412
1248 #: ../../../src/MenuPowers.cpp:1105
1413 #: ../../../src/MenuPowers.cpp:1104
12491414 #, c-format
12501415 msgid "Elemental Damage (%s)"
12511416 msgstr "Dano Elemental (%s)"
12521417
1253 #: ../../../src/MenuPowers.cpp:1114
1418 #: ../../../src/MenuPowers.cpp:1113
12541419 #, c-format
12551420 msgid "Requires a %s"
12561421 msgstr "Requer um %s"
12571422
1258 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1423 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12591424 #, c-format
12601425 msgid "Requires Power: %s"
12611426 msgstr "Requer Poder: %s"
12621427
1263 #: ../../../src/MenuPowers.cpp:1163
1428 #: ../../../src/MenuPowers.cpp:1162
12641429 msgid "Click to Unlock (uses 1 Skill Point)"
12651430 msgstr "Aperte para Desbloquear (utiliza 1 Ponto de Habilidade)"
12661431
1267 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1432 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12681433 msgid "Requires 1 Skill Point"
12691434 msgstr "Requer 1 Ponto de Habilidade"
12701435
1271 #: ../../../src/MenuPowers.cpp:1355
1436 #: ../../../src/MenuPowers.cpp:1354
12721437 #, c-format
12731438 msgid "%d unspent skill point"
12741439 msgstr "%d ponto de habilidade não utilizado"
12751440
1276 #: ../../../src/MenuPowers.cpp:1358
1441 #: ../../../src/MenuPowers.cpp:1357
12771442 #, c-format
12781443 msgid "%d unspent skill points"
12791444 msgstr "%d pontos de habilidade não utilizados"
12801445
1281 #: ../../../src/MenuPowers.cpp:1388
1446 #: ../../../src/MenuPowers.cpp:1387
12821447 msgid "Next Level:"
12831448 msgstr "Próximo Nível:"
12841449
1285 #: ../../../src/MenuStash.cpp:96
1286 msgid "Shared Stash"
1287 msgstr "Baú Compartilhado"
1288
1289 #: ../../../src/MenuStash.cpp:209
1450 #: ../../../src/MenuStash.cpp:53
1451 msgid "Private"
1452 msgstr ""
1453
1454 #: ../../../src/MenuStash.cpp:55
1455 msgid "Shared"
1456 msgstr ""
1457
1458 #: ../../../src/MenuStash.cpp:103
1459 msgid "Stash"
1460 msgstr ""
1461
1462 #: ../../../src/MenuStash.cpp:258
12901463 msgid "Can not store quest items in the stash."
12911464 msgstr "Não e possível armazenar itens de missão no baú."
12921465
1293 #: ../../../src/MenuStash.cpp:219
1466 #: ../../../src/MenuStash.cpp:263
1467 msgid "This item can not be stored in the stash."
1468 msgstr ""
1469
1470 #: ../../../src/MenuStash.cpp:268
1471 msgid "This item can not be stored in the private stash."
1472 msgstr ""
1473
1474 #: ../../../src/MenuStash.cpp:273
1475 msgid "This item can not be stored in the shared stash."
1476 msgstr ""
1477
1478 #: ../../../src/MenuStash.cpp:283
12941479 msgid "Stash is full."
12951480 msgstr "Baú esta cheio."
12961481
1297 #: ../../../src/MenuTalker.cpp:454
1482 #: ../../../src/MenuStash.cpp:340
1483 #, c-format
1484 msgid "Can not store item in stash: %s"
1485 msgstr ""
1486
1487 #: ../../../src/MenuTalker.cpp:447
1488 #, c-format
1489 msgid "<dialog node %d>"
1490 msgstr ""
1491
1492 #: ../../../src/MenuTalker.cpp:455
12981493 msgid "Trade"
12991494 msgstr "Troca"
13001495
13021497 msgid "Buyback"
13031498 msgstr "Recompra"
13041499
1305 #: ../../../src/MenuVendor.cpp:279
1500 #: ../../../src/MenuVendor.cpp:281
13061501 msgid "Vendor"
13071502 msgstr "Vendedor"
13081503
1309 #: ../../../src/PowerManager.cpp:1136
1504 #: ../../../src/PowerManager.cpp:1170
13101505 #, c-format
13111506 msgid "+%d Shield"
13121507 msgstr "+%d Escudo"
13131508
1314 #: ../../../src/PowerManager.cpp:1392
1509 #: ../../../src/PowerManager.cpp:1426
13151510 msgid "You are already transformed, untransform first."
13161511 msgstr "Você já foi transformado, desfaça a transformação primeiro."
13171512
1318 #: ../../../src/PowerManager.cpp:1404
1513 #: ../../../src/PowerManager.cpp:1438
13191514 msgid "Could not untransform at this position."
13201515 msgstr "Não foi possível desfazer a transformação nesta posição."
13211516
13231518 msgid "Completed Quests"
13241519 msgstr "Missões Concluídas"
13251520
1326 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1521 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13271522 msgid "Game saved."
13281523 msgstr "Jogo salvo."
13291524
1330 #: ../../../src/SDLInputState.cpp:582
1525 #: ../../../src/SDLInputState.cpp:643
1526 msgid "BkSp"
1527 msgstr ""
1528
1529 #: ../../../src/SDLInputState.cpp:644
1530 msgid "Caps"
1531 msgstr ""
1532
1533 #: ../../../src/SDLInputState.cpp:645
1534 msgid "Del"
1535 msgstr ""
1536
1537 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1538 msgid "End"
1539 msgstr "End"
1540
1541 #: ../../../src/SDLInputState.cpp:648
1542 msgid "Esc"
1543 msgstr ""
1544
1545 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1546 msgid "Home"
1547 msgstr "Home"
1548
1549 #: ../../../src/SDLInputState.cpp:650
1550 msgid "Ins"
1551 msgstr ""
1552
1553 #: ../../../src/SDLInputState.cpp:651
1554 msgid "LAlt"
1555 msgstr ""
1556
1557 #: ../../../src/SDLInputState.cpp:652
1558 msgid "LCtrl"
1559 msgstr ""
1560
1561 #: ../../../src/SDLInputState.cpp:654
1562 msgid "LShft"
1563 msgstr ""
1564
1565 #: ../../../src/SDLInputState.cpp:655
1566 msgid "Num"
1567 msgstr ""
1568
1569 #: ../../../src/SDLInputState.cpp:656
1570 msgid "PgDn"
1571 msgstr ""
1572
1573 #: ../../../src/SDLInputState.cpp:657
1574 msgid "PgUp"
1575 msgstr ""
1576
1577 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1578 msgid "Pause"
1579 msgstr "Pause"
1580
1581 #: ../../../src/SDLInputState.cpp:659
1582 msgid "Print"
1583 msgstr ""
1584
1585 #: ../../../src/SDLInputState.cpp:660
1586 msgid "RAlt"
1587 msgstr ""
1588
1589 #: ../../../src/SDLInputState.cpp:661
1590 msgid "RCtrl"
1591 msgstr ""
1592
1593 #: ../../../src/SDLInputState.cpp:662
1594 msgid "Ret"
1595 msgstr ""
1596
1597 #: ../../../src/SDLInputState.cpp:664
1598 msgid "RShft"
1599 msgstr ""
1600
1601 #: ../../../src/SDLInputState.cpp:665
1602 msgid "SLock"
1603 msgstr ""
1604
1605 #: ../../../src/SDLInputState.cpp:666
1606 msgid "Spc"
1607 msgstr ""
1608
1609 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1610 msgid "Tab"
1611 msgstr "Tab"
1612
1613 #: ../../../src/SDLInputState.cpp:673
13311614 msgid "Backspace"
13321615 msgstr "Backspace"
13331616
1334 #: ../../../src/SDLInputState.cpp:583
1617 #: ../../../src/SDLInputState.cpp:674
13351618 msgid "CapsLock"
13361619 msgstr "CapsLock"
13371620
1338 #: ../../../src/SDLInputState.cpp:586
1339 msgid "End"
1340 msgstr "End"
1341
1342 #: ../../../src/SDLInputState.cpp:587
1621 #: ../../../src/SDLInputState.cpp:678
13431622 msgid "Escape"
13441623 msgstr "Escape"
13451624
1346 #: ../../../src/SDLInputState.cpp:588
1347 msgid "Home"
1348 msgstr "Home"
1349
1350 #: ../../../src/SDLInputState.cpp:589
1625 #: ../../../src/SDLInputState.cpp:680
13511626 msgid "Insert"
13521627 msgstr "Insert"
13531628
1354 #: ../../../src/SDLInputState.cpp:590
1629 #: ../../../src/SDLInputState.cpp:681
13551630 msgid "Left Alt"
13561631 msgstr "Alt Esquerdo"
13571632
1358 #: ../../../src/SDLInputState.cpp:591
1633 #: ../../../src/SDLInputState.cpp:682
13591634 msgid "Left Ctrl"
13601635 msgstr "Ctrl Esquerdo"
13611636
1362 #: ../../../src/SDLInputState.cpp:593
1637 #: ../../../src/SDLInputState.cpp:684
13631638 msgid "Left Shift"
13641639 msgstr "Shift Esquerdo"
13651640
1366 #: ../../../src/SDLInputState.cpp:594
1641 #: ../../../src/SDLInputState.cpp:685
13671642 msgid "NumLock"
13681643 msgstr "NumLock"
13691644
1370 #: ../../../src/SDLInputState.cpp:595
1645 #: ../../../src/SDLInputState.cpp:686
13711646 msgid "PageDown"
13721647 msgstr "PageDown"
13731648
1374 #: ../../../src/SDLInputState.cpp:596
1649 #: ../../../src/SDLInputState.cpp:687
13751650 msgid "PageUp"
13761651 msgstr "PageUp"
13771652
1378 #: ../../../src/SDLInputState.cpp:597
1379 msgid "Pause"
1380 msgstr "Pause"
1381
1382 #: ../../../src/SDLInputState.cpp:598
1653 #: ../../../src/SDLInputState.cpp:689
13831654 msgid "PrintScreen"
13841655 msgstr "PrintScreen"
13851656
1386 #: ../../../src/SDLInputState.cpp:599
1657 #: ../../../src/SDLInputState.cpp:690
13871658 msgid "Right Alt"
13881659 msgstr "Alt Direito"
13891660
1390 #: ../../../src/SDLInputState.cpp:600
1661 #: ../../../src/SDLInputState.cpp:691
13911662 msgid "Right Ctrl"
13921663 msgstr "Ctrl Direito"
13931664
1394 #: ../../../src/SDLInputState.cpp:601
1665 #: ../../../src/SDLInputState.cpp:692
13951666 msgid "Return"
13961667 msgstr "Enter"
13971668
1398 #: ../../../src/SDLInputState.cpp:603
1669 #: ../../../src/SDLInputState.cpp:694
13991670 msgid "Right Shift"
14001671 msgstr "Shift Direito"
14011672
1402 #: ../../../src/SDLInputState.cpp:604
1673 #: ../../../src/SDLInputState.cpp:695
14031674 msgid "ScrollLock"
14041675 msgstr "ScrollLock"
14051676
1406 #: ../../../src/SDLInputState.cpp:605
1677 #: ../../../src/SDLInputState.cpp:696
14071678 msgid "Space"
14081679 msgstr "Espaço"
14091680
1410 #: ../../../src/SDLInputState.cpp:606
1411 msgid "Tab"
1412 msgstr "Tab"
1413
1414 #: ../../../src/SDLInputState.cpp:620
1681 #: ../../../src/SDLInputState.cpp:710
1682 #, c-format
1683 msgid "M%d"
1684 msgstr ""
1685
1686 #: ../../../src/SDLInputState.cpp:716
14151687 #, c-format
14161688 msgid "Mouse %d"
14171689 msgstr "Mouse %d"
14181690
1419 #: ../../../src/SDLInputState.cpp:628
1691 #: ../../../src/SDLInputState.cpp:726
1692 #, c-format
1693 msgid "JX%d-"
1694 msgstr ""
1695
1696 #: ../../../src/SDLInputState.cpp:728
14201697 #, c-format
14211698 msgid "Axis %d -"
14221699 msgstr "Eixo %d -"
14231700
1424 #: ../../../src/SDLInputState.cpp:630
1701 #: ../../../src/SDLInputState.cpp:732
1702 #, c-format
1703 msgid "JX%d+"
1704 msgstr ""
1705
1706 #: ../../../src/SDLInputState.cpp:734
14251707 #, c-format
14261708 msgid "Axis %d +"
14271709 msgstr "Eixo %d +"
14281710
1429 #: ../../../src/SDLInputState.cpp:633
1711 #: ../../../src/SDLInputState.cpp:739
1712 #, c-format
1713 msgid "JB%d"
1714 msgstr ""
1715
1716 #: ../../../src/SDLInputState.cpp:741
14301717 #, c-format
14311718 msgid "Button %d"
14321719 msgstr "Botão %d"
14331720
1434 #: ../../../src/SDLInputState.cpp:637
1435 msgid "(none)"
1436 msgstr "(nenhum)"
1437
1438 #: ../../../src/SDLInputState.cpp:677
1721 #: ../../../src/SDLInputState.cpp:788
14391722 msgid "Touch control D-Pad"
14401723 msgstr ""
14411724
1442 #: ../../../src/SDLInputState.cpp:701
1725 #: ../../../src/SDLInputState.cpp:812
14431726 msgid "Touch control buttons"
14441727 msgstr ""
14451728
1446 #: ../../../src/SDLInputState.cpp:716
1729 #: ../../../src/SDLInputState.cpp:827
14471730 msgid "Tap"
14481731 msgstr "Tap"
14491732
1450 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1451 #: ../../../src/SDLInputState.cpp:768
1733 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1734 #, c-format
1735 msgid "Can not bind: %s"
1736 msgstr ""
1737
1738 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1739 #: ../../../src/SDLInputState.cpp:901
14521740 #, c-format
14531741 msgid "'%s' is no longer bound to:"
14541742 msgstr "'%s' não está mais obrigado a:"
16151903 msgid "k"
16161904 msgstr "k"
16171905
1618 #: ../../../src/Utils.cpp:580
1906 #: ../../../src/Utils.cpp:616
16191907 #, c-format
16201908 msgid "%s second"
16211909 msgstr "%s segundo"
16221910
1623 #: ../../../src/Utils.cpp:583
1911 #: ../../../src/Utils.cpp:619
16241912 #, c-format
16251913 msgid "%s seconds"
16261914 msgstr "%s segundos"
33 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
44 #
55 # Translators:
6 # Justin Jacobs <jajdorkster@gmail.com>, 2018
76 # Ademaro <ademaro@ya.ru>, 2018
7 # Justin Jacobs <jajdorkster@gmail.com>, 2019
88 #
99 #, fuzzy
1010 msgid ""
1111 msgstr ""
1212 "Project-Id-Version: PACKAGE VERSION\n"
1313 "Report-Msgid-Bugs-To: \n"
14 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
14 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1515 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
16 "Last-Translator: Ademaro <ademaro@ya.ru>, 2018\n"
16 "Last-Translator: Justin Jacobs <jajdorkster@gmail.com>, 2019\n"
1717 "Language-Team: Russian (https://www.transifex.com/flareorg/teams/84925/ru/)\n"
1818 "MIME-Version: 1.0\n"
1919 "Content-Type: text/plain; charset=UTF-8\n"
2121 "Language: ru\n"
2222 "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
2323
24 #: ../../../src/Avatar.cpp:367
24 #: ../../../src/Avatar.cpp:387
25 msgid "Your health is low!"
26 msgstr ""
27
28 #: ../../../src/Avatar.cpp:419
2529 #, c-format
2630 msgid "Congratulations, you have reached level %d!"
2731 msgstr "Поздравляем! Вы достигли уровень %d!"
2832
29 #: ../../../src/Avatar.cpp:369
30 msgid "You may increase one attribute through the Character Menu."
31 msgstr "Вы можете увеличить один атрибут в Меню Персонажа."
32
33 #: ../../../src/Avatar.cpp:583
33 #: ../../../src/Avatar.cpp:421
34 msgid "You may increase one or more attributes through the Character Menu."
35 msgstr ""
36
37 #: ../../../src/Avatar.cpp:425
38 msgid "You may unlock one or more abilities through the Powers Menu."
39 msgstr ""
40
41 #: ../../../src/Avatar.cpp:692
3442 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3543 msgstr ""
3644 "Вы потерпели поражение. Игра окончена! Нажмите ${INPUT_CONTINUE}, чтобы "
3745 "выйти в Меню."
3846
39 #: ../../../src/Avatar.cpp:589
47 #: ../../../src/Avatar.cpp:698
4048 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
4149 msgstr "Вы потерпели поражение. Нажмите ${INPUT_CONTINUE}, чтобы продолжить."
4250
43 #: ../../../src/Avatar.cpp:839
51 #: ../../../src/Avatar.cpp:949
4452 msgid "Transformation expired. You have been moved back to a safe place."
4553 msgstr "Трансформация завершилась. Вы были возвращены в безопасное место."
4654
4957 msgid "%d %s removed."
5058 msgstr "%d %s убрано."
5159
52 #: ../../../src/CampaignManager.cpp:162
60 #: ../../../src/CampaignManager.cpp:165
61 #, c-format
62 msgid "%s x%d removed."
63 msgstr ""
64
65 #: ../../../src/CampaignManager.cpp:167
5366 #, c-format
5467 msgid "%s removed."
5568 msgstr "%s убран."
5669
57 #: ../../../src/CampaignManager.cpp:175
70 #: ../../../src/CampaignManager.cpp:180
5871 #, c-format
5972 msgid "You receive %s."
6073 msgstr "Вы получаете %s."
6174
62 #: ../../../src/CampaignManager.cpp:177
75 #: ../../../src/CampaignManager.cpp:182
6376 #, c-format
6477 msgid "You receive %s x%d."
6578 msgstr "Вы получаете %s x%d."
6679
67 #: ../../../src/CampaignManager.cpp:186
80 #: ../../../src/CampaignManager.cpp:191
6881 #, c-format
6982 msgid "You receive %d %s."
7083 msgstr "Вы получаете %d %s."
7184
72 #: ../../../src/CampaignManager.cpp:195
85 #: ../../../src/CampaignManager.cpp:200
7386 #, c-format
7487 msgid "You receive %d XP."
7588 msgstr "Вы получаете %d опыта."
7689
77 #: ../../../src/CampaignManager.cpp:201
90 #: ../../../src/CampaignManager.cpp:206
7891 msgid "HP restored."
7992 msgstr "Жизнь восстановлена."
8093
81 #: ../../../src/CampaignManager.cpp:205
94 #: ../../../src/CampaignManager.cpp:210
8295 msgid "MP restored."
8396 msgstr "Мана восстановлена."
8497
85 #: ../../../src/CampaignManager.cpp:210
98 #: ../../../src/CampaignManager.cpp:215
8699 msgid "HP and MP restored."
87100 msgstr "Жизнь и Мана восстановлены."
88101
89 #: ../../../src/CampaignManager.cpp:214
102 #: ../../../src/CampaignManager.cpp:219
90103 msgid "Negative effects removed."
91104 msgstr "Отрицательные эффекты убраны."
92105
93 #: ../../../src/CampaignManager.cpp:220
106 #: ../../../src/CampaignManager.cpp:225
94107 msgid "HP and MP restored, negative effects removed"
95108 msgstr "Жизнь и Мана восстановлены, отрицательные эффекты убраны"
96109
100113 "\n"
101114 "Often slower, but less likely to have issues."
102115 msgstr ""
116 "SDL software рендерер\n"
117 "\n"
118 "Чаще всего медленнее, но и проблемы возникают реже."
103119
104120 #: ../../../src/DeviceList.cpp:59
105121 msgid ""
107123 "\n"
108124 "The default renderer that is often faster than the SDL software renderer."
109125 msgstr ""
110
111 #: ../../../src/EngineSettings.cpp:561
126 "SDL hardware рендерер\n"
127 "\n"
128 "Рендерер по-умолчанию. Быстрее, чем SDL software рендерер."
129
130 #: ../../../src/EngineSettings.cpp:572
112131 msgid "Adventurer"
113132 msgstr "Авантюрист"
114133
115 #: ../../../src/Entity.cpp:511
134 #: ../../../src/Entity.cpp:522
116135 msgid "miss"
117136 msgstr "промах"
118137
119 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
120 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
138 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
139 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
121140 #, c-format
122141 msgid "+%d HP"
123142 msgstr "+%d Жизни"
124143
125 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
126 #: ../../../src/StatBlock.cpp:822
144 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
145 #: ../../../src/StatBlock.cpp:830
127146 #, c-format
128147 msgid "+%d MP"
129148 msgstr "+%d Маны"
130149
131 #: ../../../src/EventManager.cpp:738
150 #: ../../../src/EventManager.cpp:782
132151 msgid "Unknown destination"
133152 msgstr "Неизвестная цель"
134153
135 #: ../../../src/GameStateConfigBase.cpp:89
136 #: ../../../src/GameStateConfigBase.cpp:110
154 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
155 msgid "Loading..."
156 msgstr "Загрузка..."
157
158 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
159 msgid "Delete Save"
160 msgstr "Удалить Игру"
161
162 #: ../../../src/GameStateLoad.cpp:90
163 msgid "Delete this save?"
164 msgstr "Удалить эту сохранённую игру?"
165
166 #: ../../../src/GameStateLoad.cpp:92
167 msgid "Exit to Title"
168 msgstr "Выйти в Меню"
169
170 #: ../../../src/GameStateLoad.cpp:95
171 msgid "New Game"
172 msgstr "Новая Игра"
173
174 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
175 msgid "Choose a Slot"
176 msgstr "Выберите Слот"
177
178 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
179 msgid "Enable a story mod to continue"
180 msgstr "Включите сюжетный мод для продолжения"
181
182 #: ../../../src/GameStateLoad.cpp:597
183 msgid "Load Game"
184 msgstr "Загрузить Игру"
185
186 #: ../../../src/GameStateLoad.cpp:706
187 msgid "Entering game world..."
188 msgstr "Вход в игровой мир..."
189
190 #: ../../../src/GameStateLoad.cpp:709
191 msgid "Loading saved game..."
192 msgstr "Загрузка сохранённой игры..."
193
194 #: ../../../src/GameStateLoad.cpp:742
195 msgid "Invalid save"
196 msgstr "Недействительная игра"
197
198 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
199 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
200 #: ../../../src/MenuPowers.cpp:1543
201 #, c-format
202 msgid "Level %d"
203 msgstr "Уровень %d"
204
205 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
206 #: ../../../src/MenuConfig.cpp:244
207 msgid "Cancel"
208 msgstr "Отмена"
209
210 #: ../../../src/GameStateNew.cpp:68
211 msgid "Create"
212 msgstr "Создать"
213
214 #: ../../../src/GameStateNew.cpp:76
215 msgid "Randomize"
216 msgstr "Случайно"
217
218 #: ../../../src/GameStateNew.cpp:92
219 msgid "Choose a Portrait"
220 msgstr "Выберите Портрет"
221
222 #: ../../../src/GameStateNew.cpp:96
223 msgid "Choose a Name"
224 msgstr "Выберите Имя"
225
226 #: ../../../src/GameStateNew.cpp:100
227 msgid "Permadeath?"
228 msgstr "Одна Жизнь?"
229
230 #: ../../../src/GameStateNew.cpp:104
231 msgid "Choose a Class"
232 msgstr "Выберите Класс"
233
234 #: ../../../src/GameStateTitle.cpp:107
235 msgid "Play Game"
236 msgstr "Играть"
237
238 #: ../../../src/GameStateTitle.cpp:110
239 msgid "Enable a core mod to continue"
240 msgstr "Включите основной мод для продолжения"
241
242 #: ../../../src/GameStateTitle.cpp:114
243 msgid "Configuration"
244 msgstr "Настройки"
245
246 #: ../../../src/GameStateTitle.cpp:117
247 msgid "Credits"
248 msgstr "Авторы"
249
250 #: ../../../src/GameStateTitle.cpp:120
251 msgid "Exit Game"
252 msgstr "Выйти из Игры"
253
254 #: ../../../src/InputState.cpp:407
255 msgid "Accept"
256 msgstr "Принять"
257
258 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
259 #: ../../../src/SDLInputState.cpp:698
260 msgid "Up"
261 msgstr "Вверх"
262
263 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
264 #: ../../../src/SDLInputState.cpp:676
265 msgid "Down"
266 msgstr "Вниз"
267
268 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
269 #: ../../../src/SDLInputState.cpp:683
270 msgid "Left"
271 msgstr "Влево"
272
273 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
274 #: ../../../src/SDLInputState.cpp:693
275 msgid "Right"
276 msgstr "Вправо"
277
278 #: ../../../src/InputState.cpp:412
279 msgid "Bar1"
280 msgstr "Меню1"
281
282 #: ../../../src/InputState.cpp:413
283 msgid "Bar2"
284 msgstr "Меню2"
285
286 #: ../../../src/InputState.cpp:414
287 msgid "Bar3"
288 msgstr "Меню3"
289
290 #: ../../../src/InputState.cpp:415
291 msgid "Bar4"
292 msgstr "Меню4"
293
294 #: ../../../src/InputState.cpp:416
295 msgid "Bar5"
296 msgstr "Меню5"
297
298 #: ../../../src/InputState.cpp:417
299 msgid "Bar6"
300 msgstr "Меню6"
301
302 #: ../../../src/InputState.cpp:418
303 msgid "Bar7"
304 msgstr "Меню7"
305
306 #: ../../../src/InputState.cpp:419
307 msgid "Bar8"
308 msgstr "Меню8"
309
310 #: ../../../src/InputState.cpp:420
311 msgid "Bar9"
312 msgstr "Меню9"
313
314 #: ../../../src/InputState.cpp:421
315 msgid "Bar0"
316 msgstr "Меню0"
317
318 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
319 #: ../../../src/MenuCharacter.cpp:54
320 msgid "Character"
321 msgstr "Персонаж"
322
323 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
324 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
325 msgid "Inventory"
326 msgstr "Инвентарь"
327
328 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
329 #: ../../../src/MenuPowers.cpp:167
330 msgid "Powers"
331 msgstr "Силы"
332
333 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
334 #: ../../../src/MenuLog.cpp:72
335 msgid "Log"
336 msgstr "Журнал"
337
338 #: ../../../src/InputState.cpp:426
339 msgid "Main1"
340 msgstr "Главное1"
341
342 #: ../../../src/InputState.cpp:427
343 msgid "Main2"
344 msgstr "Главное2"
345
346 #: ../../../src/InputState.cpp:428
347 msgid "Ctrl"
348 msgstr "CTRL"
349
350 #: ../../../src/InputState.cpp:429
351 msgid "Shift"
352 msgstr "SHIFT"
353
354 #: ../../../src/InputState.cpp:430
355 msgid "Alt"
356 msgstr "ALT"
357
358 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
359 msgid "Delete"
360 msgstr "Удалить"
361
362 #: ../../../src/InputState.cpp:432
363 msgid "ActionBar Accept"
364 msgstr "Панель действий: Принять"
365
366 #: ../../../src/InputState.cpp:433
367 msgid "ActionBar Left"
368 msgstr "Панель действий: Влево"
369
370 #: ../../../src/InputState.cpp:434
371 msgid "ActionBar Right"
372 msgstr "Панель действий: Вправо"
373
374 #: ../../../src/InputState.cpp:435
375 msgid "ActionBar Use"
376 msgstr "Панель действий: Использовать"
377
378 #: ../../../src/InputState.cpp:436
379 msgid "Developer Menu"
380 msgstr "Меню Разработчика"
381
382 #: ../../../src/InputState.cpp:438
383 msgid "Left Mouse"
384 msgstr "Левая Кнопка Мыши"
385
386 #: ../../../src/InputState.cpp:439
387 msgid "Middle Mouse"
388 msgstr "Средняя Кнопка Мыши"
389
390 #: ../../../src/InputState.cpp:440
391 msgid "Right Mouse"
392 msgstr "Правая Кнопка Мыши"
393
394 #: ../../../src/InputState.cpp:441
395 msgid "Wheel Up"
396 msgstr "Прокрутка Вверх"
397
398 #: ../../../src/InputState.cpp:442
399 msgid "Wheel Down"
400 msgstr "Прокрутка Вниз"
401
402 #: ../../../src/InputState.cpp:443
403 msgid "Mouse X1"
404 msgstr "Мышь X1"
405
406 #: ../../../src/InputState.cpp:444
407 msgid "Mouse X2"
408 msgstr "Мышь X2"
409
410 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
411 msgid "Unknown Item"
412 msgstr "Неизвестный Предмет"
413
414 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
415 #, c-format
416 msgid "%d%% Speed"
417 msgstr "%d%% Скорости"
418
419 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
420 #, c-format
421 msgid "%d%% Attack Speed"
422 msgstr "%d%% Скорость Атаки"
423
424 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
425 #: ../../../src/MenuPowers.cpp:832
426 #, c-format
427 msgid "Resistance (%s)"
428 msgstr "Сопротивление (%s)"
429
430 #: ../../../src/ItemManager.cpp:714
431 #, c-format
432 msgid "Requires %s"
433 msgstr "Требуется %s"
434
435 #: ../../../src/ItemManager.cpp:763
436 msgid "Quest Item"
437 msgstr "Предмет Задания"
438
439 #: ../../../src/ItemManager.cpp:790
440 #, c-format
441 msgid "Quality: %s"
442 msgstr "Качество: %s"
443
444 #: ../../../src/ItemManager.cpp:815
445 #, c-format
446 msgid "Absorb: %d-%d"
447 msgstr "Поглощение: %d-%d"
448
449 #: ../../../src/ItemManager.cpp:817
450 #, c-format
451 msgid "Absorb: %d"
452 msgstr "Поглощение: %d"
453
454 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
455 #: ../../../src/MenuPowers.cpp:1133
456 #, c-format
457 msgid "Requires Level %d"
458 msgstr "Требуется Уровень %d"
459
460 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
461 #: ../../../src/MenuPowers.cpp:1124
462 #, c-format
463 msgid "Requires %s %d"
464 msgstr "Требуется %s %d"
465
466 #: ../../../src/ItemManager.cpp:879
467 #, c-format
468 msgid "Requires Class: %s"
469 msgstr "Требуется Класс: %s"
470
471 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
472 #, c-format
473 msgid "Buy Price: %d %s"
474 msgstr "Цена Покупки: %d %s"
475
476 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
477 #, c-format
478 msgid "Buy Price: %d %s each"
479 msgstr "Цена Покупки: %d %s каждый"
480
481 #: ../../../src/ItemManager.cpp:916
482 #, c-format
483 msgid "Sell Price: %d %s"
484 msgstr "Цена Продажи: %d %s"
485
486 #: ../../../src/ItemManager.cpp:918
487 #, c-format
488 msgid "Sell Price: %d %s each"
489 msgstr "Цена Продажи: %d %s каждый"
490
491 #: ../../../src/ItemManager.cpp:927
492 msgid "Set:"
493 msgstr ""
494
495 #: ../../../src/ItemManager.cpp:934
496 #, c-format
497 msgid "%d items:"
498 msgstr "%d предметов:"
499
500 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
501 #, c-format
502 msgid "Press [%s] to use"
503 msgstr "Нажмите [%s], чтобы использовать"
504
505 #: ../../../src/ItemManager.cpp:951
506 #, c-format
507 msgid "Press [%s] to read"
508 msgstr "Нажмите [%s], чтобы прочитать"
509
510 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
511 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
512 #, c-format
513 msgid "Hotkey: %s"
514 msgstr "Горячая клавиша: %s"
515
516 #: ../../../src/MenuActionBar.cpp:599
517 msgid "Not enough MP."
518 msgstr "Недостаточно МР."
519
520 #: ../../../src/MenuActiveEffects.cpp:124
521 #, c-format
522 msgid "x%d"
523 msgstr "x%d"
524
525 #: ../../../src/MenuActiveEffects.cpp:219
526 msgid "Remaining:"
527 msgstr "Осталось:"
528
529 #: ../../../src/MenuActiveEffects.cpp:225
530 #, c-format
531 msgid "x%d stacks"
532 msgstr ""
533
534 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
535 msgid "Name"
536 msgstr "Имя"
537
538 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
539 msgid "Level"
540 msgstr "Уровень"
541
542 #: ../../../src/MenuCharacter.cpp:310
543 #, c-format
544 msgid "%d unspent stat point"
545 msgstr "%d не потраченное очко"
546
547 #: ../../../src/MenuCharacter.cpp:313
548 #, c-format
549 msgid "%d unspent stat points"
550 msgstr "%d не потраченные очки"
551
552 #: ../../../src/MenuCharacter.cpp:355
553 #, c-format
554 msgid "Reduces the damage taken from \"%s\" elemental attacks."
555 msgstr "Снижает урон полученный от \"%s\" элементальной атаки."
556
557 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
558 #, c-format
559 msgid "XP: %d"
560 msgstr "Опыт: %d"
561
562 #: ../../../src/MenuCharacter.cpp:367
563 #, c-format
564 msgid "Next: %d"
565 msgstr "Следующий: %d"
566
567 #: ../../../src/MenuCharacter.cpp:373
568 #, c-format
569 msgid "base (%d), bonus (%d)"
570 msgstr "базовое (%d), бонус (%d)"
571
572 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
573 msgid "Related stats:"
574 msgstr "Связанные атрибуты:"
575
576 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
577 #, c-format
578 msgid "Each level grants %d."
579 msgstr "Каждый уровень дает %d."
580
581 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
582 #, c-format
583 msgid "Each point of %s grants %d."
584 msgstr "Каждое очко %s дает %d."
585
586 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
587 msgid "Clear"
588 msgstr "Очистить"
589
590 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
591 msgid "Assign:"
592 msgstr "Назначение:"
593
594 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
137595 msgid "Defaults"
138 msgstr "Дефаулт"
139
140 #: ../../../src/GameStateConfigBase.cpp:89
596 msgstr "По-умолчанию"
597
598 #: ../../../src/MenuConfig.cpp:123
141599 msgid "Reset ALL settings?"
142600 msgstr "Сбросить ВСЕ настройки?"
143601
144 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
602 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
145603 msgid "OK"
146604 msgstr "ОК"
147605
148 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
149 #: ../../../src/InputState.cpp:401
150 msgid "Cancel"
151 msgstr "Отмена"
152
153 #: ../../../src/GameStateConfigBase.cpp:160
154 #: ../../../src/GameStateConfigDesktop.cpp:130
606 #: ../../../src/MenuConfig.cpp:246
607 msgid "Continue"
608 msgstr "Продолжить"
609
610 #: ../../../src/MenuConfig.cpp:248
611 msgid "Save Game"
612 msgstr ""
613
614 #: ../../../src/MenuConfig.cpp:291
615 msgid "Default"
616 msgstr "По умолчанию"
617
618 #: ../../../src/MenuConfig.cpp:291
619 msgid ""
620 "Show all loot tooltips, except for those that would be obscured by the "
621 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
622 msgstr ""
623 "Выпадающие предметы подсвечиваются на удалении от игрока или врага, при "
624 "нажатии клавиши 'Alt' и наведении курсора."
625
626 #: ../../../src/MenuConfig.cpp:292
627 msgid "Show all"
628 msgstr "Показывать всегда"
629
630 #: ../../../src/MenuConfig.cpp:292
631 msgid ""
632 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
633 msgstr ""
634 "Всегда подсвечивать выпадающие предметы. Временно скрыть подсветку клавишей "
635 "'Alt'."
636
637 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
638 msgid "Hidden"
639 msgstr "Скрывать"
640
641 #: ../../../src/MenuConfig.cpp:293
642 msgid ""
643 "Always hide loot tooltips, except for when a piece of loot is hovered with "
644 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
645 msgstr ""
646 "Не подсвечивать выпадающие предметы до наведения на них курсора. Временно "
647 "подстветить все предметы клавишей 'Alt'."
648
649 #: ../../../src/MenuConfig.cpp:296
650 msgid "Visible"
651 msgstr "Видимое"
652
653 #: ../../../src/MenuConfig.cpp:297
654 msgid "Visible (2x zoom)"
655 msgstr "Видимое (2х увеличение)"
656
657 #: ../../../src/MenuConfig.cpp:301
658 msgid ""
659 "Controls the type of warning to be activated when the player is below the "
660 "low health threshold."
661 msgstr ""
662
663 #: ../../../src/MenuConfig.cpp:302
664 msgid "- Display a message"
665 msgstr ""
666
667 #: ../../../src/MenuConfig.cpp:303
668 msgid "- Play a sound"
669 msgstr ""
670
671 #: ../../../src/MenuConfig.cpp:304
672 msgid "- Change the cursor"
673 msgstr ""
674
675 #: ../../../src/MenuConfig.cpp:306
676 msgid "Disabled"
677 msgstr ""
678
679 #: ../../../src/MenuConfig.cpp:307
680 msgid "All"
681 msgstr ""
682
683 #: ../../../src/MenuConfig.cpp:308
684 msgid "Message & Cursor"
685 msgstr ""
686
687 #: ../../../src/MenuConfig.cpp:309
688 msgid "Message & Sound"
689 msgstr ""
690
691 #: ../../../src/MenuConfig.cpp:310
692 msgid "Sound & Cursor"
693 msgstr ""
694
695 #: ../../../src/MenuConfig.cpp:311
696 msgid "Message"
697 msgstr ""
698
699 #: ../../../src/MenuConfig.cpp:312
700 msgid "Cursor"
701 msgstr ""
702
703 #: ../../../src/MenuConfig.cpp:313
704 msgid "Sound"
705 msgstr ""
706
707 #: ../../../src/MenuConfig.cpp:319
708 msgid ""
709 "When the player's health drops below the given threshold, the low health "
710 "notifications are triggered if one or more of them is enabled."
711 msgstr ""
712
713 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
714 msgid "Exit"
715 msgstr "Выйти"
716
717 #: ../../../src/MenuConfig.cpp:333
718 msgid "Video"
719 msgstr "Видео"
720
721 #: ../../../src/MenuConfig.cpp:334
155722 msgid "Audio"
156723 msgstr "Аудио"
157724
158 #: ../../../src/GameStateConfigBase.cpp:161
159 #: ../../../src/GameStateConfigDesktop.cpp:131
725 #: ../../../src/MenuConfig.cpp:335
160726 msgid "Interface"
161727 msgstr "Интерфейс"
162728
163 #: ../../../src/GameStateConfigBase.cpp:162
164 #: ../../../src/GameStateConfigDesktop.cpp:134
729 #: ../../../src/MenuConfig.cpp:336
730 msgid "Input"
731 msgstr "Ввод"
732
733 #: ../../../src/MenuConfig.cpp:337
734 msgid "Keybindings"
735 msgstr "Привязки Клавиш"
736
737 #: ../../../src/MenuConfig.cpp:338
165738 msgid "Mods"
166739 msgstr "Моды"
167740
168 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
741 #: ../../../src/MenuConfig.cpp:350
742 msgid "Paused"
743 msgstr "Пауза"
744
745 #: ../../../src/MenuConfig.cpp:353
746 msgid "Time Played"
747 msgstr "Время в игре"
748
749 #: ../../../src/MenuConfig.cpp:359
750 msgid "Renderer"
751 msgstr "Рендерер"
752
753 #: ../../../src/MenuConfig.cpp:360
754 msgid "Full Screen Mode"
755 msgstr "Полноэкранный Режим"
756
757 #: ../../../src/MenuConfig.cpp:361
758 msgid "Hardware surfaces"
759 msgstr "Аппаратные поверхности"
760
761 #: ../../../src/MenuConfig.cpp:362
762 msgid "V-Sync"
763 msgstr "Верт. Синхронизация"
764
765 #: ../../../src/MenuConfig.cpp:363
766 msgid "Texture Filtering"
767 msgstr "Фильтрация Текстур"
768
769 #: ../../../src/MenuConfig.cpp:364
770 msgid "DPI scaling"
771 msgstr "Масштабирование DPI"
772
773 #: ../../../src/MenuConfig.cpp:365
774 msgid "Parallax Layers"
775 msgstr "Слои Параллакса"
776
777 #: ../../../src/MenuConfig.cpp:366
778 msgid "Allow changing gamma"
779 msgstr "Включить изменение гаммы"
780
781 #: ../../../src/MenuConfig.cpp:367
782 msgid "Gamma"
783 msgstr "Гамма"
784
785 #: ../../../src/MenuConfig.cpp:369
786 msgid "Sound Volume"
787 msgstr "Громкость Звука"
788
789 #: ../../../src/MenuConfig.cpp:370
169790 msgid "Music Volume"
170791 msgstr "Громкость Музыки"
171792
172 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
173 msgid "Sound Volume"
174 msgstr "Громкость Звука"
175
176 #: ../../../src/GameStateConfigBase.cpp:257
793 #: ../../../src/MenuConfig.cpp:372
177794 msgid "Language"
178795 msgstr "Язык"
179796
180 #: ../../../src/GameStateConfigBase.cpp:266
797 #: ../../../src/MenuConfig.cpp:373
181798 msgid "Show FPS"
182799 msgstr "Показывать FPS"
183800
184 #: ../../../src/GameStateConfigBase.cpp:270
185 msgid "Colorblind Mode"
186 msgstr "Режим цветовой слепоты"
187
188 #: ../../../src/GameStateConfigBase.cpp:274
801 #: ../../../src/MenuConfig.cpp:374
189802 msgid "Hardware mouse cursor"
190803 msgstr "Аппаратный курсор мыши"
191804
192 #: ../../../src/GameStateConfigBase.cpp:278
805 #: ../../../src/MenuConfig.cpp:375
806 msgid "Colorblind Mode"
807 msgstr "Режим адаптации для дальтоников"
808
809 #: ../../../src/MenuConfig.cpp:376
193810 msgid "Developer Mode"
194 msgstr "Режим Девелоперов"
195
196 #: ../../../src/GameStateConfigBase.cpp:282
811 msgstr "Режим Разработчика"
812
813 #: ../../../src/MenuConfig.cpp:377
197814 msgid "Subtitles"
198815 msgstr "Субтитры"
199816
200 #: ../../../src/GameStateConfigBase.cpp:286
201 msgid "Active Mods"
202 msgstr "Активные Моды"
203
204 #: ../../../src/GameStateConfigBase.cpp:295
205 msgid "Available Mods"
206 msgstr "Доступные Моды"
207
208 #: ../../../src/GameStateConfigBase.cpp:314
209 msgid "<< Disable"
210 msgstr "<< Отключить"
211
212 #: ../../../src/GameStateConfigBase.cpp:320
213 msgid "Enable >>"
214 msgstr "Включить >>"
215
216 #: ../../../src/GameStateConfigBase.cpp:873
217 msgid "Version:"
218 msgstr "Версия:"
219
220 #: ../../../src/GameStateConfigBase.cpp:878
221 msgid "Game:"
222 msgstr "Игра:"
223
224 #: ../../../src/GameStateConfigBase.cpp:883
225 msgid "Engine version:"
226 msgstr "Версия движка:"
227
228 #: ../../../src/GameStateConfigBase.cpp:891
229 msgid "Requires mods:"
230 msgstr "Требуются моды:"
231
232 #: ../../../src/GameStateConfigDesktop.cpp:83
233 #: ../../../src/GameStateConfigDesktop.cpp:751
234 msgid "Clear"
235 msgstr "Очистить"
236
237 #: ../../../src/GameStateConfigDesktop.cpp:83
238 #: ../../../src/GameStateConfigDesktop.cpp:749
239 msgid "Assign:"
240 msgstr ""
241
242 #: ../../../src/GameStateConfigDesktop.cpp:128
243 msgid "Video"
244 msgstr "Видео"
245
246 #: ../../../src/GameStateConfigDesktop.cpp:132
247 msgid "Input"
248 msgstr "Ввод"
249
250 #: ../../../src/GameStateConfigDesktop.cpp:133
251 msgid "Keybindings"
252 msgstr "Привязки Клавиш"
253
254 #: ../../../src/GameStateConfigDesktop.cpp:188
817 #: ../../../src/MenuConfig.cpp:378
818 msgid "Loot tooltip visibility"
819 msgstr "Подсветка выпадающих вещей"
820
821 #: ../../../src/MenuConfig.cpp:379
822 msgid "Mini-map mode"
823 msgstr "Режим мини-карты"
824
825 #: ../../../src/MenuConfig.cpp:380
826 msgid "Always show stat bar labels"
827 msgstr "Всегда показывать метки в строке состояния"
828
829 #: ../../../src/MenuConfig.cpp:381
830 msgid "Allow stat bar auto-hiding"
831 msgstr "Разрешить модам автоскрытие панелей"
832
833 #: ../../../src/MenuConfig.cpp:382
834 msgid "Show combat text"
835 msgstr "Показывать сообщения битвы"
836
837 #: ../../../src/MenuConfig.cpp:383
838 msgid "Automatically equip items"
839 msgstr "Сразу надевать предметы"
840
841 #: ../../../src/MenuConfig.cpp:384
842 msgid "Show hidden entity markers"
843 msgstr "Помечать меткой скрытых врагов"
844
845 #: ../../../src/MenuConfig.cpp:385
846 msgid "Low health notification"
847 msgstr ""
848
849 #: ../../../src/MenuConfig.cpp:386
850 msgid "Low health threshold"
851 msgstr ""
852
853 #: ../../../src/MenuConfig.cpp:389
854 msgid "Joystick"
855 msgstr "Джойстик"
856
857 #: ../../../src/MenuConfig.cpp:390
858 msgid "Move hero using mouse"
859 msgstr "Управлять героем мышью"
860
861 #: ../../../src/MenuConfig.cpp:391
862 msgid "Mouse aim"
863 msgstr "Целиться мышью"
864
865 #: ../../../src/MenuConfig.cpp:392
866 msgid "Do not use mouse"
867 msgstr "Не использовать мышь"
868
869 #: ../../../src/MenuConfig.cpp:393
870 msgid "Swap mouse movement button"
871 msgstr ""
872
873 #: ../../../src/MenuConfig.cpp:394
874 msgid "Attack with mouse movement"
875 msgstr ""
876
877 #: ../../../src/MenuConfig.cpp:395
878 msgid "Joystick Deadzone"
879 msgstr "Мёртвая зона джойстика"
880
881 #: ../../../src/MenuConfig.cpp:405
882 #, c-format
883 msgid "Primary binding: %s"
884 msgstr ""
885
886 #: ../../../src/MenuConfig.cpp:406
887 #, c-format
888 msgid "Alternate binding: %s"
889 msgstr ""
890
891 #: ../../../src/MenuConfig.cpp:407
892 #, c-format
893 msgid "Joystick binding: %s"
894 msgstr ""
895
896 #: ../../../src/MenuConfig.cpp:508
255897 msgid ""
256898 "Will try to store surfaces in video memory versus system memory. The effect "
257899 "this has on performance depends on the renderer."
258900 msgstr ""
259
260 #: ../../../src/GameStateConfigDesktop.cpp:189
901 "Будет нагружать память видеокарты вместо системной памяти. Эффект зависит от"
902 " рендерера."
903
904 #: ../../../src/MenuConfig.cpp:509
261905 msgid ""
262906 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
263907 "windowed mode or input lag."
264908 msgstr ""
265909
266 #: ../../../src/GameStateConfigDesktop.cpp:190
910 #: ../../../src/MenuConfig.cpp:510
267911 msgid ""
268912 "When enabled, this uses the screen DPI in addition to the window dimensions "
269913 "to scale the rendering resolution. Otherwise, only the window dimensions are"
270914 " used."
271915 msgstr ""
272916
273 #: ../../../src/GameStateConfigDesktop.cpp:191
917 #: ../../../src/MenuConfig.cpp:511
274918 msgid ""
275919 "This enables parallax (non-tile) layers. Disabling this setting can improve "
276920 "performance in some cases."
277921 msgstr ""
278922
279 #: ../../../src/GameStateConfigDesktop.cpp:192
280 msgid "Experimental"
281 msgstr "Экспериментально"
282
283 #: ../../../src/GameStateConfigDesktop.cpp:193
284 msgid "For handheld devices"
285 msgstr "Для наладонных устройств"
286
287 #: ../../../src/GameStateConfigDesktop.cpp:211
288 msgid "Renderer"
289 msgstr ""
290
291 #: ../../../src/GameStateConfigDesktop.cpp:227
292 msgid "Full Screen Mode"
293 msgstr "Полноэкранный Режим"
294
295 #: ../../../src/GameStateConfigDesktop.cpp:231
296 msgid "Move hero using mouse"
297 msgstr "Управлять героя мышью"
298
299 #: ../../../src/GameStateConfigDesktop.cpp:235
300 msgid "Hardware surfaces"
301 msgstr "Аппаратные поверхности"
302
303 #: ../../../src/GameStateConfigDesktop.cpp:239
304 msgid "V-Sync"
305 msgstr "Верт. Синхронизация"
306
307 #: ../../../src/GameStateConfigDesktop.cpp:243
308 msgid "Texture Filtering"
309 msgstr "Фильтрация Текстур"
310
311 #: ../../../src/GameStateConfigDesktop.cpp:247
312 msgid "DPI scaling"
313 msgstr ""
314
315 #: ../../../src/GameStateConfigDesktop.cpp:251
316 msgid "Parallax Layers"
317 msgstr ""
318
319 #: ../../../src/GameStateConfigDesktop.cpp:255
320 msgid "Allow changing gamma"
321 msgstr "Включить изменение гаммы"
322
323 #: ../../../src/GameStateConfigDesktop.cpp:259
324 msgid "Gamma"
325 msgstr "Гамма"
326
327 #: ../../../src/GameStateConfigDesktop.cpp:263
328 msgid "Use joystick"
329 msgstr "Использовать джойстик"
330
331 #: ../../../src/GameStateConfigDesktop.cpp:267
332 msgid "Joystick"
333 msgstr "Джойстик"
334
335 #: ../../../src/GameStateConfigDesktop.cpp:283
336 msgid "Mouse aim"
337 msgstr "Целиться мышью"
338
339 #: ../../../src/GameStateConfigDesktop.cpp:287
340 msgid "Do not use mouse"
341 msgstr "Не использовать мышь"
342
343 #: ../../../src/GameStateConfigDesktop.cpp:291
344 msgid "Joystick Deadzone"
345 msgstr "Мёртвая зона джойстика"
346
347 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
348 msgid "Loading..."
349 msgstr "Загрузка..."
350
351 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
352 msgid "Delete Save"
353 msgstr "Удалить Игру"
354
355 #: ../../../src/GameStateLoad.cpp:88
356 msgid "Delete this save?"
357 msgstr "Удалить эту сохранённую игру?"
358
359 #: ../../../src/GameStateLoad.cpp:90
360 msgid "Exit to Title"
361 msgstr "Выйти в Меню"
362
363 #: ../../../src/GameStateLoad.cpp:93
364 msgid "New Game"
365 msgstr "Новая Игра"
366
367 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
368 msgid "Choose a Slot"
369 msgstr "Выберите Слот"
370
371 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
372 msgid "Enable a story mod to continue"
373 msgstr "Включите сюжетный мод для продолжения"
374
375 #: ../../../src/GameStateLoad.cpp:589
376 msgid "Load Game"
377 msgstr "Загрузить Игру"
378
379 #: ../../../src/GameStateLoad.cpp:695
380 msgid "Entering game world..."
381 msgstr "Вход в игровой мир..."
382
383 #: ../../../src/GameStateLoad.cpp:698
384 msgid "Loading saved game..."
385 msgstr "Загрузка сохранённой игры..."
386
387 #: ../../../src/GameStateLoad.cpp:731
388 msgid "Invalid save"
389 msgstr "Недействительная игра"
390
391 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
392 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
393 #: ../../../src/MenuPowers.cpp:1542
394 #, c-format
395 msgid "Level %d"
396 msgstr "Уровень %d"
397
398 #: ../../../src/GameStateNew.cpp:68
399 msgid "Create"
400 msgstr "Создать"
401
402 #: ../../../src/GameStateNew.cpp:76
403 msgid "Randomize"
404 msgstr ""
405
406 #: ../../../src/GameStateNew.cpp:92
407 msgid "Choose a Portrait"
408 msgstr "Выберите Портрет"
409
410 #: ../../../src/GameStateNew.cpp:96
411 msgid "Choose a Name"
412 msgstr "Выберите Имя"
413
414 #: ../../../src/GameStateNew.cpp:100
415 msgid "Permadeath?"
416 msgstr "Одна Жизнь?"
417
418 #: ../../../src/GameStateNew.cpp:104
419 msgid "Choose a Class"
420 msgstr "Выберите Класс"
421
422 #: ../../../src/GameStateTitle.cpp:108
423 msgid "Play Game"
424 msgstr "Играть"
425
426 #: ../../../src/GameStateTitle.cpp:111
427 msgid "Enable a core mod to continue"
428 msgstr "Включите основной мод для продолжения"
429
430 #: ../../../src/GameStateTitle.cpp:115
431 msgid "Configuration"
432 msgstr "Настройки"
433
434 #: ../../../src/GameStateTitle.cpp:118
435 msgid "Credits"
436 msgstr "Авторы"
437
438 #: ../../../src/GameStateTitle.cpp:121
439 msgid "Exit Game"
440 msgstr "Выйти из Игры"
441
442 #: ../../../src/InputState.cpp:402
443 msgid "Accept"
444 msgstr "Принять"
445
446 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
447 msgid "Up"
448 msgstr "Вверх"
449
450 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
451 msgid "Down"
452 msgstr "Вниз"
453
454 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
455 msgid "Left"
456 msgstr "Влево"
457
458 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
459 msgid "Right"
460 msgstr "Вправо"
461
462 #: ../../../src/InputState.cpp:407
463 msgid "Bar1"
464 msgstr "Меню1"
465
466 #: ../../../src/InputState.cpp:408
467 msgid "Bar2"
468 msgstr "Меню2"
469
470 #: ../../../src/InputState.cpp:409
471 msgid "Bar3"
472 msgstr "Меню3"
473
474 #: ../../../src/InputState.cpp:410
475 msgid "Bar4"
476 msgstr "Меню4"
477
478 #: ../../../src/InputState.cpp:411
479 msgid "Bar5"
480 msgstr "Меню5"
481
482 #: ../../../src/InputState.cpp:412
483 msgid "Bar6"
484 msgstr "Меню6"
485
486 #: ../../../src/InputState.cpp:413
487 msgid "Bar7"
488 msgstr "Меню7"
489
490 #: ../../../src/InputState.cpp:414
491 msgid "Bar8"
492 msgstr "Меню8"
493
494 #: ../../../src/InputState.cpp:415
495 msgid "Bar9"
496 msgstr "Меню9"
497
498 #: ../../../src/InputState.cpp:416
499 msgid "Bar0"
500 msgstr "Меню0"
501
502 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
503 #: ../../../src/MenuCharacter.cpp:54
504 msgid "Character"
505 msgstr "Персонаж"
506
507 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
508 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
509 msgid "Inventory"
510 msgstr "Инвентарь"
511
512 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
513 #: ../../../src/MenuPowers.cpp:168
514 msgid "Powers"
515 msgstr "Силы"
516
517 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
518 #: ../../../src/MenuLog.cpp:72
519 msgid "Log"
520 msgstr "Журнал"
521
522 #: ../../../src/InputState.cpp:421
523 msgid "Main1"
524 msgstr "Главное1"
525
526 #: ../../../src/InputState.cpp:422
527 msgid "Main2"
528 msgstr "Главное2"
529
530 #: ../../../src/InputState.cpp:423
531 msgid "Ctrl"
532 msgstr "CTRL"
533
534 #: ../../../src/InputState.cpp:424
535 msgid "Shift"
536 msgstr "SHIFT"
537
538 #: ../../../src/InputState.cpp:425
539 msgid "Alt"
540 msgstr "ALT"
541
542 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
543 msgid "Delete"
544 msgstr "Удалить"
545
546 #: ../../../src/InputState.cpp:427
547 msgid "ActionBar Accept"
548 msgstr "Панель действий: Принять"
549
550 #: ../../../src/InputState.cpp:428
551 msgid "ActionBar Left"
552 msgstr "Панель действий: Влево"
553
554 #: ../../../src/InputState.cpp:429
555 msgid "ActionBar Right"
556 msgstr "Панель действий: Вправо"
557
558 #: ../../../src/InputState.cpp:430
559 msgid "ActionBar Use"
560 msgstr "Панель действий: Использовать"
561
562 #: ../../../src/InputState.cpp:431
563 msgid "Developer Menu"
564 msgstr "Меню Девелопера"
565
566 #: ../../../src/InputState.cpp:433
567 msgid "Left Mouse"
568 msgstr "Левая Кнопка Мыши"
569
570 #: ../../../src/InputState.cpp:434
571 msgid "Middle Mouse"
572 msgstr "Средняя Кнопка Мыши"
573
574 #: ../../../src/InputState.cpp:435
575 msgid "Right Mouse"
576 msgstr "Правая Кнопка Мыши"
577
578 #: ../../../src/InputState.cpp:436
579 msgid "Wheel Up"
580 msgstr "Прокрутка Вверх"
581
582 #: ../../../src/InputState.cpp:437
583 msgid "Wheel Down"
584 msgstr "Прокрутка Вниз"
585
586 #: ../../../src/InputState.cpp:438
587 msgid "Mouse X1"
588 msgstr "Мышь X1"
589
590 #: ../../../src/InputState.cpp:439
591 msgid "Mouse X2"
592 msgstr "Мышь X2"
593
594 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
595 msgid "Unknown Item"
596 msgstr "Неизвестный Предмет"
597
598 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
599 #, c-format
600 msgid "%d%% Speed"
601 msgstr "%d%% Скорости"
602
603 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
604 #, c-format
605 msgid "%d%% Attack Speed"
606 msgstr ""
607
608 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
609 #: ../../../src/MenuPowers.cpp:833
610 #, c-format
611 msgid "Resistance (%s)"
612 msgstr ""
613
614 #: ../../../src/ItemManager.cpp:684
615 #, c-format
616 msgid "Requires %s"
617 msgstr ""
618
619 #: ../../../src/ItemManager.cpp:733
620 msgid "Quest Item"
621 msgstr "Предмет Задания"
622
623 #: ../../../src/ItemManager.cpp:760
624 #, c-format
625 msgid "Quality: %s"
626 msgstr "Качество: %s"
627
628 #: ../../../src/ItemManager.cpp:785
629 #, c-format
630 msgid "Absorb: %d-%d"
631 msgstr "Поглощение: %d-%d"
632
633 #: ../../../src/ItemManager.cpp:787
634 #, c-format
635 msgid "Absorb: %d"
636 msgstr "Поглощение: %d"
637
638 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
639 #: ../../../src/MenuPowers.cpp:1134
640 #, c-format
641 msgid "Requires Level %d"
642 msgstr "Требуется Уровень %d"
643
644 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
645 #: ../../../src/MenuPowers.cpp:1125
646 #, c-format
647 msgid "Requires %s %d"
648 msgstr "Требуется %s %d"
649
650 #: ../../../src/ItemManager.cpp:849
651 #, c-format
652 msgid "Requires Class: %s"
653 msgstr "Требуется Класс: %s"
654
655 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
656 #, c-format
657 msgid "Buy Price: %d %s"
658 msgstr "Цена Покупки: %d %s"
659
660 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
661 #, c-format
662 msgid "Buy Price: %d %s each"
663 msgstr "Цена Покупки: %d %s каждый"
664
665 #: ../../../src/ItemManager.cpp:886
666 #, c-format
667 msgid "Sell Price: %d %s"
668 msgstr "Цена Продажи: %d %s"
669
670 #: ../../../src/ItemManager.cpp:888
671 #, c-format
672 msgid "Sell Price: %d %s each"
673 msgstr "Цена Продажи: %d %s каждый"
674
675 #: ../../../src/ItemManager.cpp:897
676 msgid "Set:"
677 msgstr ""
678
679 #: ../../../src/ItemManager.cpp:904
680 #, c-format
681 msgid "%d items:"
682 msgstr "%d предметов: "
683
684 #: ../../../src/ItemManager.cpp:917
685 #, c-format
686 msgid "Press [%s] to use"
687 msgstr ""
688
689 #: ../../../src/ItemManager.cpp:920
690 #, c-format
691 msgid "Press [%s] to read"
692 msgstr ""
693
694 #: ../../../src/MenuActionBar.cpp:87
695 msgid "Loot tooltip visibility"
696 msgstr ""
697
698 #: ../../../src/MenuActionBar.cpp:88
699 msgid "Mini-map mode"
700 msgstr ""
701
702 #: ../../../src/MenuActionBar.cpp:89
703 msgid "Always show stat bar labels"
704 msgstr "Всегда показывать метки в строке состояния"
705
706 #: ../../../src/MenuActionBar.cpp:90
707 msgid "Show combat text"
708 msgstr "Показывать сообщения битвы"
709
710 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
711 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
712 #, c-format
713 msgid "Hotkey: %s"
714 msgstr "Горячая клавиша: %s"
715
716 #: ../../../src/MenuActionBar.cpp:474
717 #, c-format
718 msgid "Default. Temporarily show all loot tooltips with '%s'."
719 msgstr ""
720
721 #: ../../../src/MenuActionBar.cpp:476
722 #, c-format
723 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
724 msgstr ""
725
726 #: ../../../src/MenuActionBar.cpp:478
727 #, c-format
728 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
729 msgstr ""
730
731 #: ../../../src/MenuActionBar.cpp:482
732 msgid "Visible"
733 msgstr ""
734
735 #: ../../../src/MenuActionBar.cpp:484
736 msgid "Visible (2x zoom)"
737 msgstr ""
738
739 #: ../../../src/MenuActionBar.cpp:486
740 msgid "Hidden"
741 msgstr ""
742
743 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
744 msgid "Enabled"
745 msgstr ""
746
747 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
748 msgid "Disabled"
749 msgstr ""
750
751 #: ../../../src/MenuActionBar.cpp:657
752 msgid "Not enough MP."
753 msgstr ""
754
755 #: ../../../src/MenuActiveEffects.cpp:124
756 #, c-format
757 msgid "x%d"
758 msgstr "x%d"
759
760 #: ../../../src/MenuActiveEffects.cpp:219
761 msgid "Remaining:"
762 msgstr "Осталось:"
763
764 #: ../../../src/MenuActiveEffects.cpp:225
765 #, c-format
766 msgid "x%d stacks"
767 msgstr ""
768
769 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
770 msgid "Name"
771 msgstr "Имя"
772
773 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
774 msgid "Level"
775 msgstr "Уровень"
776
777 #: ../../../src/MenuCharacter.cpp:310
778 #, c-format
779 msgid "%d unspent stat point"
780 msgstr ""
781
782 #: ../../../src/MenuCharacter.cpp:313
783 #, c-format
784 msgid "%d unspent stat points"
785 msgstr ""
786
787 #: ../../../src/MenuCharacter.cpp:355
788 #, c-format
789 msgid "Reduces the damage taken from \"%s\" elemental attacks."
790 msgstr ""
791
792 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
793 #, c-format
794 msgid "XP: %d"
795 msgstr "Опыт: %d"
796
797 #: ../../../src/MenuCharacter.cpp:367
798 #, c-format
799 msgid "Next: %d"
800 msgstr "Следующий: %d"
801
802 #: ../../../src/MenuCharacter.cpp:373
803 #, c-format
804 msgid "base (%d), bonus (%d)"
805 msgstr "базовое (%d), бонус (%d)"
806
807 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
808 msgid "Related stats:"
809 msgstr "Связанные атрибуты:"
810
811 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
812 #, c-format
813 msgid "Each level grants %d."
814 msgstr ""
815
816 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
817 #, c-format
818 msgid "Each point of %s grants %d."
819 msgstr ""
923 #: ../../../src/MenuConfig.cpp:512
924 msgid ""
925 "Enables the below setting that controls the screen gamma level. The behavior"
926 " of the gamma setting can vary between platforms."
927 msgstr ""
928
929 #: ../../../src/MenuConfig.cpp:513
930 msgid ""
931 "Provides additional text for information that is primarily conveyed through "
932 "color."
933 msgstr "Предоставлять дополнительный текст для информации связанной с цветом."
934
935 #: ../../../src/MenuConfig.cpp:514
936 msgid ""
937 "Some mods will automatically hide the stat bars when they are inactive. "
938 "Disabling this option will keep them displayed at all times."
939 msgstr ""
940 "Некоторые моды автоматически скрывают панель опыта/маны/жизни. Отключив эту "
941 "опцию панели будут отображаться постоянно."
942
943 #: ../../../src/MenuConfig.cpp:515
944 msgid ""
945 "When enabled, empty equipment slots will be filled with applicable items "
946 "when they are obtained."
947 msgstr ""
948 "Если включено, то пустые слоты предметов сразу будут заполняться подходящими"
949 " предметами."
950
951 #: ../../../src/MenuConfig.cpp:516
952 msgid ""
953 "Shows a marker above enemies, allies, and the player when they are obscured "
954 "by tall objects."
955 msgstr ""
956 "Показывать метку над врагами и игроком, когда они скрыты высокими объектами."
957
958 #: ../../../src/MenuConfig.cpp:517
959 msgid ""
960 "This allows the game to be controlled entirely with the keyboard (or "
961 "joystick)."
962 msgstr ""
963
964 #: ../../../src/MenuConfig.cpp:518
965 msgid ""
966 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
967 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
968 "instead of 'Main1'."
969 msgstr ""
970
971 #: ../../../src/MenuConfig.cpp:519
972 msgid ""
973 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
974 "assigned to the movement button can be used by targeting an enemy. If this "
975 "setting is disabled, it is required to use 'Shift' to access the Power "
976 "assigned to the movement button."
977 msgstr ""
978
979 #: ../../../src/MenuConfig.cpp:520
980 msgid ""
981 "The player's attacks will be aimed in the direction of the mouse cursor when"
982 " this is enabled."
983 msgstr ""
984
985 #: ../../../src/MenuConfig.cpp:571
986 msgid "Active Mods"
987 msgstr "Активные Моды"
988
989 #: ../../../src/MenuConfig.cpp:580
990 msgid "Available Mods"
991 msgstr "Доступные Моды"
992
993 #: ../../../src/MenuConfig.cpp:599
994 msgid "<< Disable"
995 msgstr "<< Отключить"
996
997 #: ../../../src/MenuConfig.cpp:605
998 msgid "Enable >>"
999 msgstr "Включить >>"
1000
1001 #: ../../../src/MenuConfig.cpp:1436
1002 msgid "Version:"
1003 msgstr "Версия:"
1004
1005 #: ../../../src/MenuConfig.cpp:1441
1006 msgid "Game:"
1007 msgstr "Игра:"
1008
1009 #: ../../../src/MenuConfig.cpp:1446
1010 msgid "Engine version:"
1011 msgstr "Версия движка:"
1012
1013 #: ../../../src/MenuConfig.cpp:1454
1014 msgid "Requires mods:"
1015 msgstr "Требуются моды:"
1016
1017 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
1018 msgid "(none)"
1019 msgstr "(нет)"
1020
1021 #: ../../../src/MenuConfig.cpp:1579
1022 msgid "Save & Exit"
1023 msgstr "Сохранить и выйти"
8201024
8211025 #: ../../../src/MenuDevConsole.cpp:63
8221026 msgid "Execute"
8241028
8251029 #: ../../../src/MenuDevConsole.cpp:101 ../../../src/MenuDevConsole.cpp:151
8261030 msgid "Developer Console"
827 msgstr "Консоль Девелопера"
1031 msgstr "Консоль Разработчика"
8281032
8291033 #: ../../../src/MenuDevConsole.cpp:141
8301034 #, c-format
8311035 msgid "Use '%s' to inspect with the cursor."
832 msgstr ""
1036 msgstr "Используй '%s' чтобы исследовать с помощью курсора."
8331037
8341038 #: ../../../src/MenuDevConsole.cpp:146
8351039 msgid "Arguments with spaces should be enclosed with double quotes. Example:"
8381042
8391043 #: ../../../src/MenuDevConsole.cpp:147
8401044 msgid "Type 'help' to get a list of commands."
841 msgstr ""
1045 msgstr "Введи 'help' чтобы увидеть список команд."
8421046
8431047 #: ../../../src/MenuDevConsole.cpp:209 ../../../src/MenuDevConsole.cpp:213
8441048 msgid "px"
845 msgstr ""
1049 msgstr "px"
8461050
8471051 #: ../../../src/MenuDevConsole.cpp:224
8481052 msgid "Distance"
849 msgstr ""
1053 msgstr "Дистанция"
8501054
8511055 #: ../../../src/MenuDevConsole.cpp:239 ../../../src/MenuDevConsole.cpp:286
8521056 msgid "Entity"
853 msgstr ""
1057 msgstr "Сущность"
8541058
8551059 #: ../../../src/MenuDevConsole.cpp:261 ../../../src/MenuDevConsole.cpp:268
8561060 msgid "none"
857 msgstr ""
1061 msgstr "отсутствует"
8581062
8591063 #: ../../../src/MenuDevConsole.cpp:262 ../../../src/MenuDevConsole.cpp:264
8601064 msgid "wall"
861 msgstr ""
1065 msgstr "стена"
8621066
8631067 #: ../../../src/MenuDevConsole.cpp:263 ../../../src/MenuDevConsole.cpp:265
8641068 msgid "short wall / pit"
865 msgstr ""
1069 msgstr "короткая стена"
8661070
8671071 #: ../../../src/MenuDevConsole.cpp:266
8681072 msgid "entity"
869 msgstr ""
1073 msgstr "частица"
8701074
8711075 #: ../../../src/MenuDevConsole.cpp:267
8721076 msgid "entity, ally"
8741078
8751079 #: ../../../src/MenuDevConsole.cpp:274
8761080 msgid "Tile"
877 msgstr ""
1081 msgstr "Плитка"
8781082
8791083 #: ../../../src/MenuDevConsole.cpp:360
8801084 msgid "adds a power to the action bar"
8821086
8831087 #: ../../../src/MenuDevConsole.cpp:361
8841088 msgid "turns on/off the display of the FPS counter"
885 msgstr ""
1089 msgstr "включает/выключает счетчик FPS"
8861090
8871091 #: ../../../src/MenuDevConsole.cpp:362
8881092 msgid "turns on/off all of the HUD elements"
8971101 "Prints a list of powers that match a search term. No search term will list "
8981102 "all items"
8991103 msgstr ""
1104 "Выводит найденные силы. Если ничего не указать, показывает все доступные "
1105 "силы"
9001106
9011107 #: ../../../src/MenuDevConsole.cpp:365
9021108 msgid "Prints out all the map filenames located in the \"maps/\" directory."
903 msgstr "Печатает все названия фаилов карт в каталоге «maps»"
1109 msgstr "Печатает все названия файлов в каталоге \"maps/\"."
9041110
9051111 #: ../../../src/MenuDevConsole.cpp:366
9061112 msgid ""
9081114 "term will list all active statuses"
9091115 msgstr ""
9101116 "Выводит найденные статусы активных кампаний. Если ничего не указать, "
911 "показывает все активные статусы."
1117 "показывает все активные статусы"
9121118
9131119 #: ../../../src/MenuDevConsole.cpp:367
9141120 msgid ""
9161122 "all items"
9171123 msgstr ""
9181124 "Выводит список найденных предметов. Если ничего не указать, показывает все "
919 "предметы."
1125 "предметы"
9201126
9211127 #: ../../../src/MenuDevConsole.cpp:368
9221128 msgid ""
9411147
9421148 #: ../../../src/MenuDevConsole.cpp:385
9431149 msgid "Toggled the FPS counter"
944 msgstr ""
1150 msgstr "Переключён счетчик FPS"
9451151
9461152 #: ../../../src/MenuDevConsole.cpp:534
9471153 msgid "ERROR: Incorrect number of arguments"
948 msgstr ""
1154 msgstr "ОШИБКА: Неправильное количество аргументов"
9491155
9501156 #: ../../../src/MenuDevConsole.cpp:536 ../../../src/MenuDevConsole.cpp:564
9511157 msgid "HINT:"
952 msgstr ""
1158 msgstr "ПОДСКАЗКА:"
9531159
9541160 #: ../../../src/MenuDevConsole.cpp:536
9551161 msgid "<id>"
9761182 msgid "HINT: Type help"
9771183 msgstr "ПОДСКАЗКА: наберите help"
9781184
979 #: ../../../src/MenuEnemy.cpp:138
1185 #: ../../../src/MenuEnemy.cpp:162
9801186 #, c-format
9811187 msgid "%s level %d"
9821188 msgstr "%s уровень %d"
9831189
984 #: ../../../src/MenuEnemy.cpp:162
1190 #: ../../../src/MenuEnemy.cpp:186
9851191 msgid "Dead"
9861192 msgstr "Мёртв"
9871193
988 #: ../../../src/MenuEnemy.cpp:164
1194 #: ../../../src/MenuEnemy.cpp:188
9891195 msgid "Destroyed"
990 msgstr ""
991
992 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
993 msgid "Paused"
994 msgstr "Пауза"
995
996 #: ../../../src/MenuExit.cpp:91
997 msgid "Save & Exit"
998 msgstr "Сохранить и выйти"
999
1000 #: ../../../src/MenuExit.cpp:92
1001 msgid "Exit"
1002 msgstr "Выйти"
1003
1004 #: ../../../src/MenuExit.cpp:96
1005 msgid "Continue"
1006 msgstr "Продолжить"
1007
1008 #: ../../../src/MenuInventory.cpp:73
1009 msgid "Automatically equip items"
1010 msgstr "Сразу надевать предметы"
1011
1012 #: ../../../src/MenuInventory.cpp:188
1196 msgstr "Уничтожен"
1197
1198 #: ../../../src/MenuInventory.cpp:177
10131199 #, c-format
10141200 msgid "Lost %d%% of %s."
1015 msgstr ""
1016
1017 #: ../../../src/MenuInventory.cpp:195
1201 msgstr "Потеряно %d%% из %s."
1202
1203 #: ../../../src/MenuInventory.cpp:184
10181204 #, c-format
10191205 msgid "Lost %d%% of total XP."
1020 msgstr ""
1021
1022 #: ../../../src/MenuInventory.cpp:200
1206 msgstr "Потеряно %d%% от общего XP."
1207
1208 #: ../../../src/MenuInventory.cpp:189
10231209 #, c-format
10241210 msgid "Lost %d%% of current level XP."
1025 msgstr ""
1026
1027 #: ../../../src/MenuInventory.cpp:226
1211 msgstr "Потеряно %d%% от актуального числа ХР."
1212
1213 #: ../../../src/MenuInventory.cpp:215
10281214 #, c-format
10291215 msgid "Lost %s."
10301216 msgstr "Потеряно %s."
10311217
1032 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1218 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10331219 #, c-format
10341220 msgid "%d %s"
10351221 msgstr "%d %s"
10361222
1037 #: ../../../src/MenuInventory.cpp:317
1223 #: ../../../src/MenuInventory.cpp:300
10381224 msgid "Pick up item(s):"
10391225 msgstr "Подобраны предметы:"
10401226
1041 #: ../../../src/MenuInventory.cpp:318
1227 #: ../../../src/MenuInventory.cpp:301
10421228 msgid "Use or equip item:"
10431229 msgstr "Использовать или надеть предмет:"
10441230
1045 #: ../../../src/MenuInventory.cpp:319
1231 #: ../../../src/MenuInventory.cpp:302
10461232 #, c-format
10471233 msgid "%s modifiers"
10481234 msgstr "%s модификаторов"
10491235
1050 #: ../../../src/MenuInventory.cpp:320
1236 #: ../../../src/MenuInventory.cpp:303
10511237 msgid "Select a quantity of item:"
10521238 msgstr "Выберите количество предметов:"
10531239
1054 #: ../../../src/MenuInventory.cpp:323
1240 #: ../../../src/MenuInventory.cpp:306
10551241 msgid "Stash item stack:"
10561242 msgstr "Спрятать набор предметов в тайник:"
10571243
1058 #: ../../../src/MenuInventory.cpp:325
1244 #: ../../../src/MenuInventory.cpp:308
10591245 msgid "Sell item stack:"
10601246 msgstr "Продать набор предметов:"
10611247
1062 #: ../../../src/MenuInventory.cpp:592
1248 #: ../../../src/MenuInventory.cpp:574
10631249 msgid "You don't have enough of the required item."
10641250 msgstr "Недостаточно требуемых предметов."
10651251
1066 #: ../../../src/MenuInventory.cpp:599
1252 #: ../../../src/MenuInventory.cpp:586
10671253 msgid "You can't use this item right now."
1068 msgstr ""
1069
1070 #: ../../../src/MenuInventory.cpp:611
1254 msgstr "Вы не можете использовать этот предмет сейчас."
1255
1256 #: ../../../src/MenuInventory.cpp:598
10711257 msgid "This item can only be used from the action bar."
10721258 msgstr "Этот предмет можно использовать только с панели действия."
10731259
1074 #: ../../../src/MenuInventory.cpp:729
1260 #: ../../../src/MenuInventory.cpp:716
10751261 msgid "Inventory is full."
10761262 msgstr "Инвентарь полон."
10771263
1078 #: ../../../src/MenuInventory.cpp:849
1264 #: ../../../src/MenuInventory.cpp:841
10791265 #, c-format
10801266 msgid "Not enough %s."
10811267 msgstr "Недостаточно %s."
10821268
1083 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1269 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
10841270 msgid "This item can not be sold."
10851271 msgstr "Этот предмет нельзя продать."
10861272
10921278 msgid "Quests"
10931279 msgstr "Задания"
10941280
1095 #: ../../../src/MenuManager.cpp:286
1281 #: ../../../src/MenuManager.cpp:296
10961282 #, c-format
10971283 msgid "XP: %d/%d"
10981284 msgstr "Опыт: %d/%d"
10991285
1100 #: ../../../src/MenuManager.cpp:827
1286 #: ../../../src/MenuManager.cpp:854
11011287 msgid "This item can not be dropped."
11021288 msgstr "Этот предмет нельзя выбросить."
11031289
11051291 msgid "Enter amount:"
11061292 msgstr "Введите количество:"
11071293
1108 #: ../../../src/MenuPowers.cpp:787
1294 #: ../../../src/MenuPowers.cpp:786
11091295 msgid "Passive"
11101296 msgstr "Пасивные"
11111297
1112 #: ../../../src/MenuPowers.cpp:792
1298 #: ../../../src/MenuPowers.cpp:791
11131299 #, c-format
11141300 msgid "Costs %d MP"
11151301 msgstr "Стоит %d Маны"
11161302
1117 #: ../../../src/MenuPowers.cpp:796
1303 #: ../../../src/MenuPowers.cpp:795
11181304 #, c-format
11191305 msgid "Costs %d HP"
11201306 msgstr "Стоит %d Жизни"
11211307
1122 #: ../../../src/MenuPowers.cpp:801
1308 #: ../../../src/MenuPowers.cpp:800
11231309 msgid "Cooldown:"
11241310 msgstr "Восстановление:"
11251311
1126 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1312 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11271313 msgid "Damage per second"
11281314 msgstr "Урона в секунду"
11291315
1130 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1316 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11311317 msgid "HP per second"
11321318 msgstr "Жизни в секунду"
11331319
1134 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1320 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11351321 msgid "MP per second"
11361322 msgstr "Маны в секунду"
11371323
1138 #: ../../../src/MenuPowers.cpp:885
1324 #: ../../../src/MenuPowers.cpp:884
11391325 msgid "Immobilize"
11401326 msgstr "Зафиксировать"
11411327
1142 #: ../../../src/MenuPowers.cpp:893
1328 #: ../../../src/MenuPowers.cpp:892
11431329 msgid "Immunity"
11441330 msgstr "Устойчивость"
11451331
1146 #: ../../../src/MenuPowers.cpp:896
1332 #: ../../../src/MenuPowers.cpp:895
11471333 msgid "Immunity to damage over time"
11481334 msgstr "Устойчивость к урону в течение долгого времени"
11491335
1150 #: ../../../src/MenuPowers.cpp:899
1336 #: ../../../src/MenuPowers.cpp:898
11511337 msgid "Immunity to slow"
11521338 msgstr "Устойчивость к снегу"
11531339
1154 #: ../../../src/MenuPowers.cpp:902
1340 #: ../../../src/MenuPowers.cpp:901
11551341 msgid "Immunity to stun"
11561342 msgstr "Устойчивость к оглушению"
11571343
1158 #: ../../../src/MenuPowers.cpp:905
1344 #: ../../../src/MenuPowers.cpp:904
11591345 msgid "Immunity to HP steal"
11601346 msgstr "Устойчивость к краже жизни"
11611347
1162 #: ../../../src/MenuPowers.cpp:908
1348 #: ../../../src/MenuPowers.cpp:907
11631349 msgid "Immunity to MP steal"
11641350 msgstr "Устойчивость к краже маны"
11651351
1166 #: ../../../src/MenuPowers.cpp:911
1352 #: ../../../src/MenuPowers.cpp:910
11671353 msgid "Immunity to knockback"
11681354 msgstr "Устойчивость к сбиванию с ног"
11691355
1170 #: ../../../src/MenuPowers.cpp:914
1356 #: ../../../src/MenuPowers.cpp:913
11711357 msgid "Immunity to damage reflection"
11721358 msgstr "Устойчивость к отражению урона"
11731359
1174 #: ../../../src/MenuPowers.cpp:917
1360 #: ../../../src/MenuPowers.cpp:916
11751361 msgid "Stun"
11761362 msgstr "Оглушение"
11771363
1178 #: ../../../src/MenuPowers.cpp:920
1364 #: ../../../src/MenuPowers.cpp:919
11791365 msgid "Automatic revive on death"
11801366 msgstr "Автоматически возрождаться после смерти"
11811367
1182 #: ../../../src/MenuPowers.cpp:923
1368 #: ../../../src/MenuPowers.cpp:922
11831369 msgid "Convert"
11841370 msgstr "Преобразовать"
11851371
1186 #: ../../../src/MenuPowers.cpp:926
1372 #: ../../../src/MenuPowers.cpp:925
11871373 msgid "Fear"
11881374 msgstr "Страх"
11891375
1190 #: ../../../src/MenuPowers.cpp:929
1376 #: ../../../src/MenuPowers.cpp:928
11911377 msgid "Lifespan"
11921378 msgstr "Продолжительность жизни"
11931379
1194 #: ../../../src/MenuPowers.cpp:953
1380 #: ../../../src/MenuPowers.cpp:952
11951381 msgid "Magical Shield"
11961382 msgstr "Магический Щит"
11971383
1198 #: ../../../src/MenuPowers.cpp:982
1384 #: ../../../src/MenuPowers.cpp:981
11991385 msgid "Healing"
12001386 msgstr "Лечение"
12011387
1202 #: ../../../src/MenuPowers.cpp:985
1388 #: ../../../src/MenuPowers.cpp:984
12031389 msgid "Knockback"
12041390 msgstr "Сбивание с ног"
12051391
1206 #: ../../../src/MenuPowers.cpp:1010
1392 #: ../../../src/MenuPowers.cpp:1009
12071393 #, c-format
12081394 msgid "%d%% chance"
12091395 msgstr "%d%% шанс"
12101396
1211 #: ../../../src/MenuPowers.cpp:1062
1397 #: ../../../src/MenuPowers.cpp:1061
12121398 msgid "Base Accuracy"
12131399 msgstr "Базовая Меткость"
12141400
1215 #: ../../../src/MenuPowers.cpp:1082
1401 #: ../../../src/MenuPowers.cpp:1081
12161402 msgid "Base Critical Chance"
12171403 msgstr "Базовый шанс критического урона"
12181404
1219 #: ../../../src/MenuPowers.cpp:1090
1405 #: ../../../src/MenuPowers.cpp:1089
12201406 msgid "Ignores Absorbtion"
12211407 msgstr "Игнорирует Поглощение"
12221408
1223 #: ../../../src/MenuPowers.cpp:1095
1409 #: ../../../src/MenuPowers.cpp:1094
12241410 msgid "Ignores Avoidance"
12251411 msgstr "Игнорирует Уклонение"
12261412
1227 #: ../../../src/MenuPowers.cpp:1100
1413 #: ../../../src/MenuPowers.cpp:1099
12281414 #, c-format
12291415 msgid "%d%% Chance to crit slowed targets"
12301416 msgstr "%d%% Шанс критического урона по замедленным целям"
12311417
1232 #: ../../../src/MenuPowers.cpp:1105
1418 #: ../../../src/MenuPowers.cpp:1104
12331419 #, c-format
12341420 msgid "Elemental Damage (%s)"
1235 msgstr ""
1236
1237 #: ../../../src/MenuPowers.cpp:1114
1421 msgstr "Элементальный урон (%s)"
1422
1423 #: ../../../src/MenuPowers.cpp:1113
12381424 #, c-format
12391425 msgid "Requires a %s"
12401426 msgstr "Требуется %s"
12411427
1242 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1428 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12431429 #, c-format
12441430 msgid "Requires Power: %s"
12451431 msgstr "Требуется Сила: %s"
12461432
1247 #: ../../../src/MenuPowers.cpp:1163
1433 #: ../../../src/MenuPowers.cpp:1162
12481434 msgid "Click to Unlock (uses 1 Skill Point)"
12491435 msgstr "Щёлкните, чтобы разблокировать (за 1 очко навыка)"
12501436
1251 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1437 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12521438 msgid "Requires 1 Skill Point"
12531439 msgstr "Требуется 1 Очко Навыка"
12541440
1255 #: ../../../src/MenuPowers.cpp:1355
1441 #: ../../../src/MenuPowers.cpp:1354
12561442 #, c-format
12571443 msgid "%d unspent skill point"
1258 msgstr ""
1259
1260 #: ../../../src/MenuPowers.cpp:1358
1444 msgstr "%d не потраченное очко опыта"
1445
1446 #: ../../../src/MenuPowers.cpp:1357
12611447 #, c-format
12621448 msgid "%d unspent skill points"
1263 msgstr ""
1264
1265 #: ../../../src/MenuPowers.cpp:1388
1449 msgstr "%d не потраченные очки опыта"
1450
1451 #: ../../../src/MenuPowers.cpp:1387
12661452 msgid "Next Level:"
12671453 msgstr "Следующий уровень:"
12681454
1269 #: ../../../src/MenuStash.cpp:96
1270 msgid "Shared Stash"
1271 msgstr "Общие Запасы"
1272
1273 #: ../../../src/MenuStash.cpp:209
1455 #: ../../../src/MenuStash.cpp:53
1456 msgid "Private"
1457 msgstr ""
1458
1459 #: ../../../src/MenuStash.cpp:55
1460 msgid "Shared"
1461 msgstr ""
1462
1463 #: ../../../src/MenuStash.cpp:103
1464 msgid "Stash"
1465 msgstr ""
1466
1467 #: ../../../src/MenuStash.cpp:258
12741468 msgid "Can not store quest items in the stash."
12751469 msgstr "Предметы заданий нельзя хранить в тайнике."
12761470
1277 #: ../../../src/MenuStash.cpp:219
1471 #: ../../../src/MenuStash.cpp:263
1472 msgid "This item can not be stored in the stash."
1473 msgstr ""
1474
1475 #: ../../../src/MenuStash.cpp:268
1476 msgid "This item can not be stored in the private stash."
1477 msgstr ""
1478
1479 #: ../../../src/MenuStash.cpp:273
1480 msgid "This item can not be stored in the shared stash."
1481 msgstr ""
1482
1483 #: ../../../src/MenuStash.cpp:283
12781484 msgid "Stash is full."
12791485 msgstr "Тайник заполнен."
12801486
1281 #: ../../../src/MenuTalker.cpp:454
1487 #: ../../../src/MenuStash.cpp:340
1488 #, c-format
1489 msgid "Can not store item in stash: %s"
1490 msgstr ""
1491
1492 #: ../../../src/MenuTalker.cpp:447
1493 #, c-format
1494 msgid "<dialog node %d>"
1495 msgstr ""
1496
1497 #: ../../../src/MenuTalker.cpp:455
12821498 msgid "Trade"
12831499 msgstr "Торговать"
12841500
12861502 msgid "Buyback"
12871503 msgstr "Выкуп"
12881504
1289 #: ../../../src/MenuVendor.cpp:279
1505 #: ../../../src/MenuVendor.cpp:281
12901506 msgid "Vendor"
12911507 msgstr "Торговец"
12921508
1293 #: ../../../src/PowerManager.cpp:1136
1509 #: ../../../src/PowerManager.cpp:1170
12941510 #, c-format
12951511 msgid "+%d Shield"
12961512 msgstr "+%d Щит"
12971513
1298 #: ../../../src/PowerManager.cpp:1392
1514 #: ../../../src/PowerManager.cpp:1426
12991515 msgid "You are already transformed, untransform first."
13001516 msgstr "Вы уже трансформированы, сперва растрансформируйтесь."
13011517
1302 #: ../../../src/PowerManager.cpp:1404
1518 #: ../../../src/PowerManager.cpp:1438
13031519 msgid "Could not untransform at this position."
13041520 msgstr "Здесь нельзя растрансформироваться."
13051521
13061522 #: ../../../src/QuestLog.cpp:234
13071523 msgid "Completed Quests"
1308 msgstr ""
1309
1310 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1524 msgstr "Выполненные Квесты"
1525
1526 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13111527 msgid "Game saved."
13121528 msgstr "Игра сохранена."
13131529
1314 #: ../../../src/SDLInputState.cpp:582
1530 #: ../../../src/SDLInputState.cpp:643
1531 msgid "BkSp"
1532 msgstr ""
1533
1534 #: ../../../src/SDLInputState.cpp:644
1535 msgid "Caps"
1536 msgstr ""
1537
1538 #: ../../../src/SDLInputState.cpp:645
1539 msgid "Del"
1540 msgstr ""
1541
1542 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1543 msgid "End"
1544 msgstr "End"
1545
1546 #: ../../../src/SDLInputState.cpp:648
1547 msgid "Esc"
1548 msgstr ""
1549
1550 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1551 msgid "Home"
1552 msgstr "Home"
1553
1554 #: ../../../src/SDLInputState.cpp:650
1555 msgid "Ins"
1556 msgstr ""
1557
1558 #: ../../../src/SDLInputState.cpp:651
1559 msgid "LAlt"
1560 msgstr ""
1561
1562 #: ../../../src/SDLInputState.cpp:652
1563 msgid "LCtrl"
1564 msgstr ""
1565
1566 #: ../../../src/SDLInputState.cpp:654
1567 msgid "LShft"
1568 msgstr ""
1569
1570 #: ../../../src/SDLInputState.cpp:655
1571 msgid "Num"
1572 msgstr ""
1573
1574 #: ../../../src/SDLInputState.cpp:656
1575 msgid "PgDn"
1576 msgstr ""
1577
1578 #: ../../../src/SDLInputState.cpp:657
1579 msgid "PgUp"
1580 msgstr ""
1581
1582 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1583 msgid "Pause"
1584 msgstr "Pause"
1585
1586 #: ../../../src/SDLInputState.cpp:659
1587 msgid "Print"
1588 msgstr ""
1589
1590 #: ../../../src/SDLInputState.cpp:660
1591 msgid "RAlt"
1592 msgstr ""
1593
1594 #: ../../../src/SDLInputState.cpp:661
1595 msgid "RCtrl"
1596 msgstr ""
1597
1598 #: ../../../src/SDLInputState.cpp:662
1599 msgid "Ret"
1600 msgstr ""
1601
1602 #: ../../../src/SDLInputState.cpp:664
1603 msgid "RShft"
1604 msgstr ""
1605
1606 #: ../../../src/SDLInputState.cpp:665
1607 msgid "SLock"
1608 msgstr ""
1609
1610 #: ../../../src/SDLInputState.cpp:666
1611 msgid "Spc"
1612 msgstr ""
1613
1614 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1615 msgid "Tab"
1616 msgstr "Tab"
1617
1618 #: ../../../src/SDLInputState.cpp:673
13151619 msgid "Backspace"
1316 msgstr ""
1317
1318 #: ../../../src/SDLInputState.cpp:583
1620 msgstr "Backspace"
1621
1622 #: ../../../src/SDLInputState.cpp:674
13191623 msgid "CapsLock"
1320 msgstr ""
1321
1322 #: ../../../src/SDLInputState.cpp:586
1323 msgid "End"
1324 msgstr ""
1325
1326 #: ../../../src/SDLInputState.cpp:587
1624 msgstr "CapsLock"
1625
1626 #: ../../../src/SDLInputState.cpp:678
13271627 msgid "Escape"
1328 msgstr ""
1329
1330 #: ../../../src/SDLInputState.cpp:588
1331 msgid "Home"
1332 msgstr ""
1333
1334 #: ../../../src/SDLInputState.cpp:589
1628 msgstr "Escape"
1629
1630 #: ../../../src/SDLInputState.cpp:680
13351631 msgid "Insert"
1336 msgstr ""
1337
1338 #: ../../../src/SDLInputState.cpp:590
1632 msgstr "Insert"
1633
1634 #: ../../../src/SDLInputState.cpp:681
13391635 msgid "Left Alt"
1340 msgstr ""
1341
1342 #: ../../../src/SDLInputState.cpp:591
1636 msgstr "Left Alt"
1637
1638 #: ../../../src/SDLInputState.cpp:682
13431639 msgid "Left Ctrl"
1344 msgstr ""
1345
1346 #: ../../../src/SDLInputState.cpp:593
1640 msgstr "Left Ctrl"
1641
1642 #: ../../../src/SDLInputState.cpp:684
13471643 msgid "Left Shift"
1348 msgstr ""
1349
1350 #: ../../../src/SDLInputState.cpp:594
1644 msgstr "Left Shift"
1645
1646 #: ../../../src/SDLInputState.cpp:685
13511647 msgid "NumLock"
1352 msgstr ""
1353
1354 #: ../../../src/SDLInputState.cpp:595
1648 msgstr "NumLock"
1649
1650 #: ../../../src/SDLInputState.cpp:686
13551651 msgid "PageDown"
1356 msgstr ""
1357
1358 #: ../../../src/SDLInputState.cpp:596
1652 msgstr "PageDown"
1653
1654 #: ../../../src/SDLInputState.cpp:687
13591655 msgid "PageUp"
1360 msgstr ""
1361
1362 #: ../../../src/SDLInputState.cpp:597
1363 msgid "Pause"
1364 msgstr ""
1365
1366 #: ../../../src/SDLInputState.cpp:598
1656 msgstr "PageUp"
1657
1658 #: ../../../src/SDLInputState.cpp:689
13671659 msgid "PrintScreen"
1368 msgstr ""
1369
1370 #: ../../../src/SDLInputState.cpp:599
1660 msgstr "PrintScreen"
1661
1662 #: ../../../src/SDLInputState.cpp:690
13711663 msgid "Right Alt"
1372 msgstr ""
1373
1374 #: ../../../src/SDLInputState.cpp:600
1664 msgstr "Right Alt"
1665
1666 #: ../../../src/SDLInputState.cpp:691
13751667 msgid "Right Ctrl"
1376 msgstr ""
1377
1378 #: ../../../src/SDLInputState.cpp:601
1668 msgstr "Right Ctrl"
1669
1670 #: ../../../src/SDLInputState.cpp:692
13791671 msgid "Return"
1380 msgstr ""
1381
1382 #: ../../../src/SDLInputState.cpp:603
1672 msgstr "Return"
1673
1674 #: ../../../src/SDLInputState.cpp:694
13831675 msgid "Right Shift"
1384 msgstr ""
1385
1386 #: ../../../src/SDLInputState.cpp:604
1676 msgstr "Right Shift"
1677
1678 #: ../../../src/SDLInputState.cpp:695
13871679 msgid "ScrollLock"
1388 msgstr ""
1389
1390 #: ../../../src/SDLInputState.cpp:605
1680 msgstr "ScrollLock"
1681
1682 #: ../../../src/SDLInputState.cpp:696
13911683 msgid "Space"
1392 msgstr ""
1393
1394 #: ../../../src/SDLInputState.cpp:606
1395 msgid "Tab"
1396 msgstr ""
1397
1398 #: ../../../src/SDLInputState.cpp:620
1684 msgstr "Пробел"
1685
1686 #: ../../../src/SDLInputState.cpp:710
1687 #, c-format
1688 msgid "M%d"
1689 msgstr ""
1690
1691 #: ../../../src/SDLInputState.cpp:716
13991692 #, c-format
14001693 msgid "Mouse %d"
14011694 msgstr "Мышь %d"
14021695
1403 #: ../../../src/SDLInputState.cpp:628
1696 #: ../../../src/SDLInputState.cpp:726
1697 #, c-format
1698 msgid "JX%d-"
1699 msgstr ""
1700
1701 #: ../../../src/SDLInputState.cpp:728
14041702 #, c-format
14051703 msgid "Axis %d -"
14061704 msgstr "Ось %d -"
14071705
1408 #: ../../../src/SDLInputState.cpp:630
1706 #: ../../../src/SDLInputState.cpp:732
1707 #, c-format
1708 msgid "JX%d+"
1709 msgstr ""
1710
1711 #: ../../../src/SDLInputState.cpp:734
14091712 #, c-format
14101713 msgid "Axis %d +"
14111714 msgstr "Ось %d +"
14121715
1413 #: ../../../src/SDLInputState.cpp:633
1716 #: ../../../src/SDLInputState.cpp:739
1717 #, c-format
1718 msgid "JB%d"
1719 msgstr ""
1720
1721 #: ../../../src/SDLInputState.cpp:741
14141722 #, c-format
14151723 msgid "Button %d"
14161724 msgstr "Кнопка %d"
14171725
1418 #: ../../../src/SDLInputState.cpp:637
1419 msgid "(none)"
1420 msgstr "(нет)"
1421
1422 #: ../../../src/SDLInputState.cpp:677
1726 #: ../../../src/SDLInputState.cpp:788
14231727 msgid "Touch control D-Pad"
1424 msgstr ""
1425
1426 #: ../../../src/SDLInputState.cpp:701
1728 msgstr "Сенсорное управление D-Pad"
1729
1730 #: ../../../src/SDLInputState.cpp:812
14271731 msgid "Touch control buttons"
1428 msgstr ""
1429
1430 #: ../../../src/SDLInputState.cpp:716
1732 msgstr "Сенсорные клавиши"
1733
1734 #: ../../../src/SDLInputState.cpp:827
14311735 msgid "Tap"
14321736 msgstr "Коснитесь"
14331737
1434 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1435 #: ../../../src/SDLInputState.cpp:768
1738 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1739 #, c-format
1740 msgid "Can not bind: %s"
1741 msgstr ""
1742
1743 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1744 #: ../../../src/SDLInputState.cpp:901
14361745 #, c-format
14371746 msgid "'%s' is no longer bound to:"
1438 msgstr ""
1747 msgstr "'%s' больше не привязана/о к:"
14391748
14401749 #: ../../../src/Stats.cpp:38
14411750 msgid "Max HP"
14431752
14441753 #: ../../../src/Stats.cpp:39
14451754 msgid "Total amount of HP."
1446 msgstr ""
1755 msgstr "Общее количество НР."
14471756
14481757 #: ../../../src/Stats.cpp:43
14491758 msgid "HP Regen"
14591768
14601769 #: ../../../src/Stats.cpp:49
14611770 msgid "Total amount of MP."
1462 msgstr ""
1771 msgstr "Общее количество МР."
14631772
14641773 #: ../../../src/Stats.cpp:53
14651774 msgid "MP Regen"
14781787 "Accuracy rating. The enemy's Avoidance rating is subtracted from this value "
14791788 "to calculate your likeliness to land a direct hit."
14801789 msgstr ""
1790 "Шанс попадания. Шанс врага увернуться вычитается из этого значения, чтобы "
1791 "определить вероятность попадания."
14811792
14821793 #: ../../../src/Stats.cpp:63
14831794 msgid "Avoidance"
14881799 "Avoidance rating. This value is subtracted from the enemy's Accuracy rating "
14891800 "to calculate their likeliness to land a direct hit."
14901801 msgstr ""
1802 "Шанс увернуться. Это значение вычитается из шанса попадания врага, чтобы "
1803 "определить вероятность попадания врага."
14911804
14921805 #: ../../../src/Stats.cpp:68
14931806 msgid "Absorb Min"
14951808
14961809 #: ../../../src/Stats.cpp:69 ../../../src/Stats.cpp:74
14971810 msgid "Reduces the amount of damage taken."
1498 msgstr ""
1811 msgstr "Уменьшает получаемый урон."
14991812
15001813 #: ../../../src/Stats.cpp:73
15011814 msgid "Absorb Max"
15071820
15081821 #: ../../../src/Stats.cpp:79
15091822 msgid "Chance for an attack to do extra damage."
1510 msgstr ""
1823 msgstr "Шанс дополнительного урона при атаке."
15111824
15121825 #: ../../../src/Stats.cpp:83
15131826 msgid "Bonus XP"
15691882
15701883 #: ../../../src/Stats.cpp:118
15711884 msgid "HP Steal"
1572 msgstr ""
1885 msgstr "Кража ХР"
15731886
15741887 #: ../../../src/Stats.cpp:119
15751888 msgid "Percentage of HP stolen per hit."
15771890
15781891 #: ../../../src/Stats.cpp:123
15791892 msgid "MP Steal"
1580 msgstr ""
1893 msgstr "Кража МР"
15811894
15821895 #: ../../../src/Stats.cpp:124
15831896 msgid "Percentage of MP stolen per hit."
15951908 msgid "k"
15961909 msgstr "к"
15971910
1598 #: ../../../src/Utils.cpp:580
1911 #: ../../../src/Utils.cpp:616
15991912 #, c-format
16001913 msgid "%s second"
16011914 msgstr "%s секунда"
16021915
1603 #: ../../../src/Utils.cpp:583
1916 #: ../../../src/Utils.cpp:619
16041917 #, c-format
16051918 msgid "%s seconds"
16061919 msgstr "%s секунды"
44 #
55 # Translators:
66 # Justin Jacobs <jajdorkster@gmail.com>, 2018
7 # MiroslavR <miroslavr256@gmail.com>, 2019
78 #
89 #, fuzzy
910 msgid ""
1011 msgstr ""
1112 "Project-Id-Version: PACKAGE VERSION\n"
1213 "Report-Msgid-Bugs-To: \n"
13 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
14 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1415 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
15 "Last-Translator: Justin Jacobs <jajdorkster@gmail.com>, 2018\n"
16 "Last-Translator: MiroslavR <miroslavr256@gmail.com>, 2019\n"
1617 "Language-Team: Slovak (https://www.transifex.com/flareorg/teams/84925/sk/)\n"
1718 "MIME-Version: 1.0\n"
1819 "Content-Type: text/plain; charset=UTF-8\n"
2021 "Language: sk\n"
2122 "Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n"
2223
23 #: ../../../src/Avatar.cpp:367
24 #: ../../../src/Avatar.cpp:387
25 msgid "Your health is low!"
26 msgstr "Vaše zdravie je nízke!"
27
28 #: ../../../src/Avatar.cpp:419
2429 #, c-format
2530 msgid "Congratulations, you have reached level %d!"
26 msgstr "Gratulujem, dosiahol si stupeň %d!"
27
28 #: ../../../src/Avatar.cpp:369
29 msgid "You may increase one attribute through the Character Menu."
30 msgstr "Teraz si môžeš zlepšiť jeden atribút cez Menu Postavy"
31
32 #: ../../../src/Avatar.cpp:583
31 msgstr "Gratulujeme, dosiahli ste úroveň %d!"
32
33 #: ../../../src/Avatar.cpp:421
34 msgid "You may increase one or more attributes through the Character Menu."
35 msgstr "Cez ponuku Postava si môžete vylepšiť jeden alebo viacero atribútov."
36
37 #: ../../../src/Avatar.cpp:425
38 msgid "You may unlock one or more abilities through the Powers Menu."
39 msgstr "Cez ponuku Sily si môžete odomknúť jednu alebo viacero schopností."
40
41 #: ../../../src/Avatar.cpp:692
3342 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3443 msgstr ""
35
36 #: ../../../src/Avatar.cpp:589
44 "Utrpeli ste porážku. Hra sa končí! Stlačením ${INPUT_CONTINUE} sa vrátite na"
45 " úvod."
46
47 #: ../../../src/Avatar.cpp:698
3748 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
38 msgstr ""
39
40 #: ../../../src/Avatar.cpp:839
49 msgstr "Utrpeli ste porážku. Pokračujte stlačením ${INPUT_CONTINUE}."
50
51 #: ../../../src/Avatar.cpp:949
4152 msgid "Transformation expired. You have been moved back to a safe place."
42 msgstr ""
53 msgstr "Čas premeny vypršal. Presunuli ste sa naspäť na bezpečné miesto."
4354
4455 #: ../../../src/CampaignManager.cpp:153
4556 #, c-format
4657 msgid "%d %s removed."
4758 msgstr ""
4859
49 #: ../../../src/CampaignManager.cpp:162
60 #: ../../../src/CampaignManager.cpp:165
61 #, c-format
62 msgid "%s x%d removed."
63 msgstr ""
64
65 #: ../../../src/CampaignManager.cpp:167
5066 #, c-format
5167 msgid "%s removed."
5268 msgstr ""
5369
54 #: ../../../src/CampaignManager.cpp:175
70 #: ../../../src/CampaignManager.cpp:180
5571 #, c-format
5672 msgid "You receive %s."
57 msgstr "Dostal si %s."
58
59 #: ../../../src/CampaignManager.cpp:177
73 msgstr "Dostali ste %s."
74
75 #: ../../../src/CampaignManager.cpp:182
6076 #, c-format
6177 msgid "You receive %s x%d."
62 msgstr "Dostal si %s x%d."
63
64 #: ../../../src/CampaignManager.cpp:186
78 msgstr "Dostali ste %s x%d."
79
80 #: ../../../src/CampaignManager.cpp:191
6581 #, c-format
6682 msgid "You receive %d %s."
67 msgstr ""
68
69 #: ../../../src/CampaignManager.cpp:195
83 msgstr "Dostali ste %d %s."
84
85 #: ../../../src/CampaignManager.cpp:200
7086 #, c-format
7187 msgid "You receive %d XP."
72 msgstr "Dostal si %d XP."
73
74 #: ../../../src/CampaignManager.cpp:201
88 msgstr "Dostali ste %d XP."
89
90 #: ../../../src/CampaignManager.cpp:206
7591 msgid "HP restored."
76 msgstr ""
77
78 #: ../../../src/CampaignManager.cpp:205
92 msgstr "HP boli obnovené."
93
94 #: ../../../src/CampaignManager.cpp:210
7995 msgid "MP restored."
80 msgstr ""
81
82 #: ../../../src/CampaignManager.cpp:210
96 msgstr "MP boli obnovené."
97
98 #: ../../../src/CampaignManager.cpp:215
8399 msgid "HP and MP restored."
84 msgstr ""
85
86 #: ../../../src/CampaignManager.cpp:214
100 msgstr "HP a MP boli obnovené."
101
102 #: ../../../src/CampaignManager.cpp:219
87103 msgid "Negative effects removed."
88 msgstr ""
89
90 #: ../../../src/CampaignManager.cpp:220
104 msgstr "Negatívne efekty boli odstránené."
105
106 #: ../../../src/CampaignManager.cpp:225
91107 msgid "HP and MP restored, negative effects removed"
92 msgstr ""
108 msgstr "HP a MP boli obnovené, negatívne efekty odstránené"
93109
94110 #: ../../../src/DeviceList.cpp:56
95111 msgid ""
97113 "\n"
98114 "Often slower, but less likely to have issues."
99115 msgstr ""
116 "Softvérové vykresľovanie pomocou SDL\n"
117 "\n"
118 "Často pomalšie, ale menej náchylné na chyby."
100119
101120 #: ../../../src/DeviceList.cpp:59
102121 msgid ""
104123 "\n"
105124 "The default renderer that is often faster than the SDL software renderer."
106125 msgstr ""
107
108 #: ../../../src/EngineSettings.cpp:561
126 "Hardvérové vykresľovanie pomocou SDL\n"
127 "\n"
128 "Predvolené vykresľovanie, ktoré je často rýchlejšie ako softvérové vykresľovanie pomocou SDL."
129
130 #: ../../../src/EngineSettings.cpp:572
109131 msgid "Adventurer"
110132 msgstr "Dobrodruh"
111133
112 #: ../../../src/Entity.cpp:511
134 #: ../../../src/Entity.cpp:522
113135 msgid "miss"
114 msgstr ""
115
116 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
117 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
136 msgstr "minutie"
137
138 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
139 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
118140 #, c-format
119141 msgid "+%d HP"
120 msgstr ""
121
122 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
123 #: ../../../src/StatBlock.cpp:822
142 msgstr "+%d HP"
143
144 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
145 #: ../../../src/StatBlock.cpp:830
124146 #, c-format
125147 msgid "+%d MP"
126 msgstr ""
127
128 #: ../../../src/EventManager.cpp:738
148 msgstr "+%d MP"
149
150 #: ../../../src/EventManager.cpp:782
129151 msgid "Unknown destination"
130152 msgstr "Neznámy cieľ"
131153
132 #: ../../../src/GameStateConfigBase.cpp:89
133 #: ../../../src/GameStateConfigBase.cpp:110
154 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
155 msgid "Loading..."
156 msgstr "Načítava sa..."
157
158 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
159 msgid "Delete Save"
160 msgstr "Zmazať pozíciu"
161
162 #: ../../../src/GameStateLoad.cpp:90
163 msgid "Delete this save?"
164 msgstr "Zmazať túto pozíciu?"
165
166 #: ../../../src/GameStateLoad.cpp:92
167 msgid "Exit to Title"
168 msgstr "Návrat na úvod"
169
170 #: ../../../src/GameStateLoad.cpp:95
171 msgid "New Game"
172 msgstr "Nová hra"
173
174 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
175 msgid "Choose a Slot"
176 msgstr "Vyberte pozíciu"
177
178 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
179 msgid "Enable a story mod to continue"
180 msgstr ""
181
182 #: ../../../src/GameStateLoad.cpp:597
183 msgid "Load Game"
184 msgstr "Načítať hru"
185
186 #: ../../../src/GameStateLoad.cpp:706
187 msgid "Entering game world..."
188 msgstr "Vstupuje sa do sveta hry..."
189
190 #: ../../../src/GameStateLoad.cpp:709
191 msgid "Loading saved game..."
192 msgstr "Načítava sa uložená hra..."
193
194 #: ../../../src/GameStateLoad.cpp:742
195 msgid "Invalid save"
196 msgstr "Neplatná uložená pozícia"
197
198 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
199 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
200 #: ../../../src/MenuPowers.cpp:1543
201 #, c-format
202 msgid "Level %d"
203 msgstr "Úroveň %d"
204
205 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
206 #: ../../../src/MenuConfig.cpp:244
207 msgid "Cancel"
208 msgstr "Zrušiť"
209
210 #: ../../../src/GameStateNew.cpp:68
211 msgid "Create"
212 msgstr "Vytvoriť"
213
214 #: ../../../src/GameStateNew.cpp:76
215 msgid "Randomize"
216 msgstr "Vybrať náhodne"
217
218 #: ../../../src/GameStateNew.cpp:92
219 msgid "Choose a Portrait"
220 msgstr "Vyberte si vzhľad"
221
222 #: ../../../src/GameStateNew.cpp:96
223 msgid "Choose a Name"
224 msgstr "Vyberte si meno"
225
226 #: ../../../src/GameStateNew.cpp:100
227 msgid "Permadeath?"
228 msgstr "Trvalá smrť?"
229
230 #: ../../../src/GameStateNew.cpp:104
231 msgid "Choose a Class"
232 msgstr "Vyberte si triedu"
233
234 #: ../../../src/GameStateTitle.cpp:107
235 msgid "Play Game"
236 msgstr "Hrať hru"
237
238 #: ../../../src/GameStateTitle.cpp:110
239 msgid "Enable a core mod to continue"
240 msgstr ""
241
242 #: ../../../src/GameStateTitle.cpp:114
243 msgid "Configuration"
244 msgstr "Konfigurácia"
245
246 #: ../../../src/GameStateTitle.cpp:117
247 msgid "Credits"
248 msgstr "Autori"
249
250 #: ../../../src/GameStateTitle.cpp:120
251 msgid "Exit Game"
252 msgstr "Ukončiť hru"
253
254 #: ../../../src/InputState.cpp:407
255 msgid "Accept"
256 msgstr "Prijať"
257
258 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
259 #: ../../../src/SDLInputState.cpp:698
260 msgid "Up"
261 msgstr "Nahor"
262
263 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
264 #: ../../../src/SDLInputState.cpp:676
265 msgid "Down"
266 msgstr "Nadol"
267
268 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
269 #: ../../../src/SDLInputState.cpp:683
270 msgid "Left"
271 msgstr "Doľava"
272
273 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
274 #: ../../../src/SDLInputState.cpp:693
275 msgid "Right"
276 msgstr "Doprava"
277
278 #: ../../../src/InputState.cpp:412
279 msgid "Bar1"
280 msgstr "Panel 1"
281
282 #: ../../../src/InputState.cpp:413
283 msgid "Bar2"
284 msgstr "Panel 2"
285
286 #: ../../../src/InputState.cpp:414
287 msgid "Bar3"
288 msgstr "Panel 3"
289
290 #: ../../../src/InputState.cpp:415
291 msgid "Bar4"
292 msgstr "Panel 4"
293
294 #: ../../../src/InputState.cpp:416
295 msgid "Bar5"
296 msgstr "Panel 5"
297
298 #: ../../../src/InputState.cpp:417
299 msgid "Bar6"
300 msgstr "Panel 6"
301
302 #: ../../../src/InputState.cpp:418
303 msgid "Bar7"
304 msgstr "Panel 7"
305
306 #: ../../../src/InputState.cpp:419
307 msgid "Bar8"
308 msgstr "Panel 8"
309
310 #: ../../../src/InputState.cpp:420
311 msgid "Bar9"
312 msgstr "Panel 9"
313
314 #: ../../../src/InputState.cpp:421
315 msgid "Bar0"
316 msgstr "Panel 0"
317
318 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
319 #: ../../../src/MenuCharacter.cpp:54
320 msgid "Character"
321 msgstr "Postava"
322
323 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
324 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
325 msgid "Inventory"
326 msgstr "Inventár"
327
328 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
329 #: ../../../src/MenuPowers.cpp:167
330 msgid "Powers"
331 msgstr "Sily"
332
333 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
334 #: ../../../src/MenuLog.cpp:72
335 msgid "Log"
336 msgstr "Denník"
337
338 #: ../../../src/InputState.cpp:426
339 msgid "Main1"
340 msgstr "Hlavná akcia 1"
341
342 #: ../../../src/InputState.cpp:427
343 msgid "Main2"
344 msgstr "Hlavná akcia 2"
345
346 #: ../../../src/InputState.cpp:428
347 msgid "Ctrl"
348 msgstr "Ctrl"
349
350 #: ../../../src/InputState.cpp:429
351 msgid "Shift"
352 msgstr "Shift"
353
354 #: ../../../src/InputState.cpp:430
355 msgid "Alt"
356 msgstr "Alt"
357
358 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
359 msgid "Delete"
360 msgstr "Delete"
361
362 #: ../../../src/InputState.cpp:432
363 msgid "ActionBar Accept"
364 msgstr "Panel akcií: prijať"
365
366 #: ../../../src/InputState.cpp:433
367 msgid "ActionBar Left"
368 msgstr "Panel akcií: doľava"
369
370 #: ../../../src/InputState.cpp:434
371 msgid "ActionBar Right"
372 msgstr "Panel akcií: doprava"
373
374 #: ../../../src/InputState.cpp:435
375 msgid "ActionBar Use"
376 msgstr "Panel akcií: použiť"
377
378 #: ../../../src/InputState.cpp:436
379 msgid "Developer Menu"
380 msgstr "Vývojárska ponuka"
381
382 #: ../../../src/InputState.cpp:438
383 msgid "Left Mouse"
384 msgstr "Ľavé tlačidlo myši"
385
386 #: ../../../src/InputState.cpp:439
387 msgid "Middle Mouse"
388 msgstr "Stredné tlačidlo myši"
389
390 #: ../../../src/InputState.cpp:440
391 msgid "Right Mouse"
392 msgstr "Pravé tlačidlo myši"
393
394 #: ../../../src/InputState.cpp:441
395 msgid "Wheel Up"
396 msgstr "Koliesko myši nahor"
397
398 #: ../../../src/InputState.cpp:442
399 msgid "Wheel Down"
400 msgstr "Koliesko myši nadol"
401
402 #: ../../../src/InputState.cpp:443
403 msgid "Mouse X1"
404 msgstr ""
405
406 #: ../../../src/InputState.cpp:444
407 msgid "Mouse X2"
408 msgstr ""
409
410 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
411 msgid "Unknown Item"
412 msgstr "Neznámy predmet"
413
414 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
415 #, c-format
416 msgid "%d%% Speed"
417 msgstr ""
418
419 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
420 #, c-format
421 msgid "%d%% Attack Speed"
422 msgstr ""
423
424 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
425 #: ../../../src/MenuPowers.cpp:832
426 #, c-format
427 msgid "Resistance (%s)"
428 msgstr "Odolnosť (%s)"
429
430 #: ../../../src/ItemManager.cpp:714
431 #, c-format
432 msgid "Requires %s"
433 msgstr "Vyžaduje %s"
434
435 #: ../../../src/ItemManager.cpp:763
436 msgid "Quest Item"
437 msgstr "Predmet úlohy"
438
439 #: ../../../src/ItemManager.cpp:790
440 #, c-format
441 msgid "Quality: %s"
442 msgstr "Kvalita: %s"
443
444 #: ../../../src/ItemManager.cpp:815
445 #, c-format
446 msgid "Absorb: %d-%d"
447 msgstr "Pohltenie: %d-%d"
448
449 #: ../../../src/ItemManager.cpp:817
450 #, c-format
451 msgid "Absorb: %d"
452 msgstr "Pohltenie: %d"
453
454 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
455 #: ../../../src/MenuPowers.cpp:1133
456 #, c-format
457 msgid "Requires Level %d"
458 msgstr "Vyžaduje úroveň %d"
459
460 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
461 #: ../../../src/MenuPowers.cpp:1124
462 #, c-format
463 msgid "Requires %s %d"
464 msgstr ""
465
466 #: ../../../src/ItemManager.cpp:879
467 #, c-format
468 msgid "Requires Class: %s"
469 msgstr "Vyžaduje triedu: %s"
470
471 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
472 #, c-format
473 msgid "Buy Price: %d %s"
474 msgstr "Kúpna cena: %d %s"
475
476 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
477 #, c-format
478 msgid "Buy Price: %d %s each"
479 msgstr "Kúpna cena: %d %s za kus"
480
481 #: ../../../src/ItemManager.cpp:916
482 #, c-format
483 msgid "Sell Price: %d %s"
484 msgstr "Predajná cena: %d %s"
485
486 #: ../../../src/ItemManager.cpp:918
487 #, c-format
488 msgid "Sell Price: %d %s each"
489 msgstr "Predajná cena: %d %s za kus"
490
491 #: ../../../src/ItemManager.cpp:927
492 msgid "Set:"
493 msgstr "Súprava:"
494
495 #: ../../../src/ItemManager.cpp:934
496 #, c-format
497 msgid "%d items:"
498 msgstr ""
499
500 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
501 #, c-format
502 msgid "Press [%s] to use"
503 msgstr "Použijete stlačením [%s]"
504
505 #: ../../../src/ItemManager.cpp:951
506 #, c-format
507 msgid "Press [%s] to read"
508 msgstr "Prečítate stlačením [%s]"
509
510 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
511 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
512 #, c-format
513 msgid "Hotkey: %s"
514 msgstr "Klávesová skratka: %s"
515
516 #: ../../../src/MenuActionBar.cpp:599
517 msgid "Not enough MP."
518 msgstr "Nedostatok MP."
519
520 #: ../../../src/MenuActiveEffects.cpp:124
521 #, c-format
522 msgid "x%d"
523 msgstr ""
524
525 #: ../../../src/MenuActiveEffects.cpp:219
526 msgid "Remaining:"
527 msgstr ""
528
529 #: ../../../src/MenuActiveEffects.cpp:225
530 #, c-format
531 msgid "x%d stacks"
532 msgstr ""
533
534 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
535 msgid "Name"
536 msgstr "Meno"
537
538 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
539 msgid "Level"
540 msgstr "Stupeň"
541
542 #: ../../../src/MenuCharacter.cpp:310
543 #, c-format
544 msgid "%d unspent stat point"
545 msgstr ""
546
547 #: ../../../src/MenuCharacter.cpp:313
548 #, c-format
549 msgid "%d unspent stat points"
550 msgstr ""
551
552 #: ../../../src/MenuCharacter.cpp:355
553 #, c-format
554 msgid "Reduces the damage taken from \"%s\" elemental attacks."
555 msgstr "Znižuje zranenie utŕžené zo živelných útokov „%s“."
556
557 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
558 #, c-format
559 msgid "XP: %d"
560 msgstr "XP: %d"
561
562 #: ../../../src/MenuCharacter.cpp:367
563 #, c-format
564 msgid "Next: %d"
565 msgstr "Nasl.: %d"
566
567 #: ../../../src/MenuCharacter.cpp:373
568 #, c-format
569 msgid "base (%d), bonus (%d)"
570 msgstr "základ (%d), bonus (%d)"
571
572 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
573 msgid "Related stats:"
574 msgstr "Súvisiace charakteristiky:"
575
576 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
577 #, c-format
578 msgid "Each level grants %d."
579 msgstr "Každá úroveň pridá %d."
580
581 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
582 #, c-format
583 msgid "Each point of %s grants %d."
584 msgstr ""
585
586 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
587 msgid "Clear"
588 msgstr "Vymazať"
589
590 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
591 msgid "Assign:"
592 msgstr "Priradiť:"
593
594 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
134595 msgid "Defaults"
135 msgstr ""
136
137 #: ../../../src/GameStateConfigBase.cpp:89
596 msgstr "Predvolené"
597
598 #: ../../../src/MenuConfig.cpp:123
138599 msgid "Reset ALL settings?"
139 msgstr ""
140
141 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
600 msgstr "Vrátiť VŠETKY nastavenia?"
601
602 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
142603 msgid "OK"
143 msgstr ""
144
145 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
146 #: ../../../src/InputState.cpp:401
147 msgid "Cancel"
148 msgstr "Zruš"
149
150 #: ../../../src/GameStateConfigBase.cpp:160
151 #: ../../../src/GameStateConfigDesktop.cpp:130
604 msgstr "OK"
605
606 #: ../../../src/MenuConfig.cpp:246
607 msgid "Continue"
608 msgstr "Pokračovať"
609
610 #: ../../../src/MenuConfig.cpp:248
611 msgid "Save Game"
612 msgstr ""
613
614 #: ../../../src/MenuConfig.cpp:291
615 msgid "Default"
616 msgstr ""
617
618 #: ../../../src/MenuConfig.cpp:291
619 msgid ""
620 "Show all loot tooltips, except for those that would be obscured by the "
621 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
622 msgstr ""
623 "Zobrazovať všetky popisy predmetov na zemi okrem tých, ktoré zakrýva hráč "
624 "alebo nepriateľ. Stlačením klávesu Alt môžete dočasne zobraziť všetky "
625 "popisy."
626
627 #: ../../../src/MenuConfig.cpp:292
628 msgid "Show all"
629 msgstr ""
630
631 #: ../../../src/MenuConfig.cpp:292
632 msgid ""
633 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
634 msgstr ""
635 "Vždy zobrazovať popisy predmetov na zemi. Stlačením klávesu Alt môžete "
636 "dočasne skryť všetky popisy."
637
638 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
639 msgid "Hidden"
640 msgstr ""
641
642 #: ../../../src/MenuConfig.cpp:293
643 msgid ""
644 "Always hide loot tooltips, except for when a piece of loot is hovered with "
645 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
646 msgstr ""
647 "Vždy skrývať popisy predmetov na zemi okrem prípadu, že na predmet ukazuje "
648 "kurzor myši. Stlačením klávesu Alt môžete dočasne zobraziť všetky popisy."
649
650 #: ../../../src/MenuConfig.cpp:296
651 msgid "Visible"
652 msgstr "Viditeľná"
653
654 #: ../../../src/MenuConfig.cpp:297
655 msgid "Visible (2x zoom)"
656 msgstr "Viditeľná (2x priblíženie)"
657
658 #: ../../../src/MenuConfig.cpp:301
659 msgid ""
660 "Controls the type of warning to be activated when the player is below the "
661 "low health threshold."
662 msgstr ""
663 "Ovláda typ upozornenia, ktoré sa aktivuje, keď zdravie hráča klesne pod prah"
664 " nízkeho zdravia."
665
666 #: ../../../src/MenuConfig.cpp:302
667 msgid "- Display a message"
668 msgstr "- Zobrazenie správy"
669
670 #: ../../../src/MenuConfig.cpp:303
671 msgid "- Play a sound"
672 msgstr "- Prehratie zvuku"
673
674 #: ../../../src/MenuConfig.cpp:304
675 msgid "- Change the cursor"
676 msgstr "- Zmena kurzora"
677
678 #: ../../../src/MenuConfig.cpp:306
679 msgid "Disabled"
680 msgstr "Zakázané"
681
682 #: ../../../src/MenuConfig.cpp:307
683 msgid "All"
684 msgstr "Všetky"
685
686 #: ../../../src/MenuConfig.cpp:308
687 msgid "Message & Cursor"
688 msgstr "Správa a kurzor"
689
690 #: ../../../src/MenuConfig.cpp:309
691 msgid "Message & Sound"
692 msgstr "Správa a zvuk"
693
694 #: ../../../src/MenuConfig.cpp:310
695 msgid "Sound & Cursor"
696 msgstr "Zvuk a kurzor"
697
698 #: ../../../src/MenuConfig.cpp:311
699 msgid "Message"
700 msgstr "Správa"
701
702 #: ../../../src/MenuConfig.cpp:312
703 msgid "Cursor"
704 msgstr "Kurzor"
705
706 #: ../../../src/MenuConfig.cpp:313
707 msgid "Sound"
708 msgstr "Zvuk"
709
710 #: ../../../src/MenuConfig.cpp:319
711 msgid ""
712 "When the player's health drops below the given threshold, the low health "
713 "notifications are triggered if one or more of them is enabled."
714 msgstr ""
715 "Keď zdravie hráča klesne pod tento prah, spustia sa oznámenia o nízkom "
716 "zdraví, ak je povolené aspoň jedno z nich."
717
718 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
719 msgid "Exit"
720 msgstr "Ukončiť"
721
722 #: ../../../src/MenuConfig.cpp:333
723 msgid "Video"
724 msgstr "Obraz"
725
726 #: ../../../src/MenuConfig.cpp:334
152727 msgid "Audio"
153 msgstr ""
154
155 #: ../../../src/GameStateConfigBase.cpp:161
156 #: ../../../src/GameStateConfigDesktop.cpp:131
728 msgstr "Zvuk"
729
730 #: ../../../src/MenuConfig.cpp:335
157731 msgid "Interface"
158 msgstr ""
159
160 #: ../../../src/GameStateConfigBase.cpp:162
161 #: ../../../src/GameStateConfigDesktop.cpp:134
732 msgstr "Rozhranie"
733
734 #: ../../../src/MenuConfig.cpp:336
735 msgid "Input"
736 msgstr "Vstup"
737
738 #: ../../../src/MenuConfig.cpp:337
739 msgid "Keybindings"
740 msgstr "Priradenie klávesov"
741
742 #: ../../../src/MenuConfig.cpp:338
162743 msgid "Mods"
163 msgstr ""
164
165 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
744 msgstr "Modifikácie"
745
746 #: ../../../src/MenuConfig.cpp:350
747 msgid "Paused"
748 msgstr "Hra pozastavená"
749
750 #: ../../../src/MenuConfig.cpp:353
751 msgid "Time Played"
752 msgstr "Odohraný čas"
753
754 #: ../../../src/MenuConfig.cpp:359
755 msgid "Renderer"
756 msgstr "Vykresľovanie"
757
758 #: ../../../src/MenuConfig.cpp:360
759 msgid "Full Screen Mode"
760 msgstr "Režim celej obrazovky"
761
762 #: ../../../src/MenuConfig.cpp:361
763 msgid "Hardware surfaces"
764 msgstr "Hardvérové povrchy"
765
766 #: ../../../src/MenuConfig.cpp:362
767 msgid "V-Sync"
768 msgstr "Vertikálna synchronizácia"
769
770 #: ../../../src/MenuConfig.cpp:363
771 msgid "Texture Filtering"
772 msgstr "Filtrovanie textúr"
773
774 #: ../../../src/MenuConfig.cpp:364
775 msgid "DPI scaling"
776 msgstr ""
777
778 #: ../../../src/MenuConfig.cpp:365
779 msgid "Parallax Layers"
780 msgstr "Paralaxné vrstvy"
781
782 #: ../../../src/MenuConfig.cpp:366
783 msgid "Allow changing gamma"
784 msgstr "Povoliť zmenu hodnoty gama"
785
786 #: ../../../src/MenuConfig.cpp:367
787 msgid "Gamma"
788 msgstr "Gama"
789
790 #: ../../../src/MenuConfig.cpp:369
791 msgid "Sound Volume"
792 msgstr "Hlasitosť zvukov"
793
794 #: ../../../src/MenuConfig.cpp:370
166795 msgid "Music Volume"
167 msgstr ""
168
169 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
170 msgid "Sound Volume"
171 msgstr ""
172
173 #: ../../../src/GameStateConfigBase.cpp:257
796 msgstr "Hlasitosť hudby"
797
798 #: ../../../src/MenuConfig.cpp:372
174799 msgid "Language"
175 msgstr ""
176
177 #: ../../../src/GameStateConfigBase.cpp:266
800 msgstr "Jazyk"
801
802 #: ../../../src/MenuConfig.cpp:373
178803 msgid "Show FPS"
179 msgstr ""
180
181 #: ../../../src/GameStateConfigBase.cpp:270
804 msgstr "Zobrazovať FPS"
805
806 #: ../../../src/MenuConfig.cpp:374
807 msgid "Hardware mouse cursor"
808 msgstr "Hardvérový kurzor myši"
809
810 #: ../../../src/MenuConfig.cpp:375
182811 msgid "Colorblind Mode"
183 msgstr ""
184
185 #: ../../../src/GameStateConfigBase.cpp:274
186 msgid "Hardware mouse cursor"
187 msgstr ""
188
189 #: ../../../src/GameStateConfigBase.cpp:278
812 msgstr "Režim pre farboslepých"
813
814 #: ../../../src/MenuConfig.cpp:376
190815 msgid "Developer Mode"
191 msgstr ""
192
193 #: ../../../src/GameStateConfigBase.cpp:282
816 msgstr "Vývojársky režim"
817
818 #: ../../../src/MenuConfig.cpp:377
194819 msgid "Subtitles"
195 msgstr ""
196
197 #: ../../../src/GameStateConfigBase.cpp:286
198 msgid "Active Mods"
199 msgstr ""
200
201 #: ../../../src/GameStateConfigBase.cpp:295
202 msgid "Available Mods"
203 msgstr ""
204
205 #: ../../../src/GameStateConfigBase.cpp:314
206 msgid "<< Disable"
207 msgstr ""
208
209 #: ../../../src/GameStateConfigBase.cpp:320
210 msgid "Enable >>"
211 msgstr ""
212
213 #: ../../../src/GameStateConfigBase.cpp:873
214 msgid "Version:"
215 msgstr ""
216
217 #: ../../../src/GameStateConfigBase.cpp:878
218 msgid "Game:"
219 msgstr ""
220
221 #: ../../../src/GameStateConfigBase.cpp:883
222 msgid "Engine version:"
223 msgstr ""
224
225 #: ../../../src/GameStateConfigBase.cpp:891
226 msgid "Requires mods:"
227 msgstr ""
228
229 #: ../../../src/GameStateConfigDesktop.cpp:83
230 #: ../../../src/GameStateConfigDesktop.cpp:751
231 msgid "Clear"
232 msgstr ""
233
234 #: ../../../src/GameStateConfigDesktop.cpp:83
235 #: ../../../src/GameStateConfigDesktop.cpp:749
236 msgid "Assign:"
237 msgstr ""
238
239 #: ../../../src/GameStateConfigDesktop.cpp:128
240 msgid "Video"
241 msgstr ""
242
243 #: ../../../src/GameStateConfigDesktop.cpp:132
244 msgid "Input"
245 msgstr ""
246
247 #: ../../../src/GameStateConfigDesktop.cpp:133
248 msgid "Keybindings"
249 msgstr ""
250
251 #: ../../../src/GameStateConfigDesktop.cpp:188
820 msgstr "Titulky"
821
822 #: ../../../src/MenuConfig.cpp:378
823 msgid "Loot tooltip visibility"
824 msgstr ""
825
826 #: ../../../src/MenuConfig.cpp:379
827 msgid "Mini-map mode"
828 msgstr "Režim minimapy"
829
830 #: ../../../src/MenuConfig.cpp:380
831 msgid "Always show stat bar labels"
832 msgstr "Vždy zobrazovať textové označenie indikátorov charakteristík"
833
834 #: ../../../src/MenuConfig.cpp:381
835 msgid "Allow stat bar auto-hiding"
836 msgstr "Povoliť automatické skrývanie indikátorov charakteristík"
837
838 #: ../../../src/MenuConfig.cpp:382
839 msgid "Show combat text"
840 msgstr "Zobrazovať text o boji"
841
842 #: ../../../src/MenuConfig.cpp:383
843 msgid "Automatically equip items"
844 msgstr "Automaticky sa vystrojiť predmetmi"
845
846 #: ../../../src/MenuConfig.cpp:384
847 msgid "Show hidden entity markers"
848 msgstr ""
849
850 #: ../../../src/MenuConfig.cpp:385
851 msgid "Low health notification"
852 msgstr "Oznámenie o nízkom zdraví"
853
854 #: ../../../src/MenuConfig.cpp:386
855 msgid "Low health threshold"
856 msgstr "Prah nízkeho zdravia"
857
858 #: ../../../src/MenuConfig.cpp:389
859 msgid "Joystick"
860 msgstr "Joystick"
861
862 #: ../../../src/MenuConfig.cpp:390
863 msgid "Move hero using mouse"
864 msgstr "Ovládať pohyb hrdinu pomocou myši"
865
866 #: ../../../src/MenuConfig.cpp:391
867 msgid "Mouse aim"
868 msgstr "Mierenie myšou"
869
870 #: ../../../src/MenuConfig.cpp:392
871 msgid "Do not use mouse"
872 msgstr "Nepoužívať myš"
873
874 #: ../../../src/MenuConfig.cpp:393
875 msgid "Swap mouse movement button"
876 msgstr ""
877
878 #: ../../../src/MenuConfig.cpp:394
879 msgid "Attack with mouse movement"
880 msgstr ""
881
882 #: ../../../src/MenuConfig.cpp:395
883 msgid "Joystick Deadzone"
884 msgstr "Mŕtva zóna joysticku"
885
886 #: ../../../src/MenuConfig.cpp:405
887 #, c-format
888 msgid "Primary binding: %s"
889 msgstr "Primárne priradenie: %s"
890
891 #: ../../../src/MenuConfig.cpp:406
892 #, c-format
893 msgid "Alternate binding: %s"
894 msgstr "Alternatívne priradenie: %s"
895
896 #: ../../../src/MenuConfig.cpp:407
897 #, c-format
898 msgid "Joystick binding: %s"
899 msgstr "Priradenie pre joystick: %s"
900
901 #: ../../../src/MenuConfig.cpp:508
252902 msgid ""
253903 "Will try to store surfaces in video memory versus system memory. The effect "
254904 "this has on performance depends on the renderer."
255905 msgstr ""
256
257 #: ../../../src/GameStateConfigDesktop.cpp:189
906 "Pokúsi sa ukladať povrchy do grafickej pamäte na rozdiel od operačnej "
907 "pamäte. Vplyv na výkon závisí od typu vykresľovania."
908
909 #: ../../../src/MenuConfig.cpp:509
258910 msgid ""
259911 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
260912 "windowed mode or input lag."
261913 msgstr ""
262
263 #: ../../../src/GameStateConfigDesktop.cpp:190
914 "Zabraňuje trhaniu obrazovky. V prípade „koktania“ v režime okna alebo "
915 "oneskorenia vstupu toto nastavenie zakážte."
916
917 #: ../../../src/MenuConfig.cpp:510
264918 msgid ""
265919 "When enabled, this uses the screen DPI in addition to the window dimensions "
266920 "to scale the rendering resolution. Otherwise, only the window dimensions are"
267921 " used."
268922 msgstr ""
269923
270 #: ../../../src/GameStateConfigDesktop.cpp:191
924 #: ../../../src/MenuConfig.cpp:511
271925 msgid ""
272926 "This enables parallax (non-tile) layers. Disabling this setting can improve "
273927 "performance in some cases."
274928 msgstr ""
275
276 #: ../../../src/GameStateConfigDesktop.cpp:192
277 msgid "Experimental"
278 msgstr ""
279
280 #: ../../../src/GameStateConfigDesktop.cpp:193
281 msgid "For handheld devices"
282 msgstr ""
283
284 #: ../../../src/GameStateConfigDesktop.cpp:211
285 msgid "Renderer"
286 msgstr ""
287
288 #: ../../../src/GameStateConfigDesktop.cpp:227
289 msgid "Full Screen Mode"
290 msgstr ""
291
292 #: ../../../src/GameStateConfigDesktop.cpp:231
293 msgid "Move hero using mouse"
294 msgstr ""
295
296 #: ../../../src/GameStateConfigDesktop.cpp:235
297 msgid "Hardware surfaces"
298 msgstr ""
299
300 #: ../../../src/GameStateConfigDesktop.cpp:239
301 msgid "V-Sync"
302 msgstr ""
303
304 #: ../../../src/GameStateConfigDesktop.cpp:243
305 msgid "Texture Filtering"
306 msgstr ""
307
308 #: ../../../src/GameStateConfigDesktop.cpp:247
309 msgid "DPI scaling"
310 msgstr ""
311
312 #: ../../../src/GameStateConfigDesktop.cpp:251
313 msgid "Parallax Layers"
314 msgstr ""
315
316 #: ../../../src/GameStateConfigDesktop.cpp:255
317 msgid "Allow changing gamma"
318 msgstr ""
319
320 #: ../../../src/GameStateConfigDesktop.cpp:259
321 msgid "Gamma"
322 msgstr ""
323
324 #: ../../../src/GameStateConfigDesktop.cpp:263
325 msgid "Use joystick"
326 msgstr ""
327
328 #: ../../../src/GameStateConfigDesktop.cpp:267
329 msgid "Joystick"
330 msgstr ""
331
332 #: ../../../src/GameStateConfigDesktop.cpp:283
333 msgid "Mouse aim"
334 msgstr ""
335
336 #: ../../../src/GameStateConfigDesktop.cpp:287
337 msgid "Do not use mouse"
338 msgstr ""
339
340 #: ../../../src/GameStateConfigDesktop.cpp:291
341 msgid "Joystick Deadzone"
342 msgstr ""
343
344 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
345 msgid "Loading..."
346 msgstr ""
347
348 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
349 msgid "Delete Save"
350 msgstr "Zmazať Pozíciu"
351
352 #: ../../../src/GameStateLoad.cpp:88
353 msgid "Delete this save?"
354 msgstr "Zmazať túto pozíciu?"
355
356 #: ../../../src/GameStateLoad.cpp:90
357 msgid "Exit to Title"
358 msgstr "Návrat na úvod"
359
360 #: ../../../src/GameStateLoad.cpp:93
361 msgid "New Game"
362 msgstr "Nová Hra"
363
364 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
365 msgid "Choose a Slot"
366 msgstr "Vyber priečinok"
367
368 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
369 msgid "Enable a story mod to continue"
370 msgstr ""
371
372 #: ../../../src/GameStateLoad.cpp:589
373 msgid "Load Game"
374 msgstr "Nahraj Hru"
375
376 #: ../../../src/GameStateLoad.cpp:695
377 msgid "Entering game world..."
378 msgstr "Vstupuješ do sveta hry..."
379
380 #: ../../../src/GameStateLoad.cpp:698
381 msgid "Loading saved game..."
382 msgstr "Nahrávam uloženú hru..."
383
384 #: ../../../src/GameStateLoad.cpp:731
385 msgid "Invalid save"
386 msgstr ""
387
388 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
389 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
390 #: ../../../src/MenuPowers.cpp:1542
391 #, c-format
392 msgid "Level %d"
393 msgstr "Stupeň %d"
394
395 #: ../../../src/GameStateNew.cpp:68
396 msgid "Create"
397 msgstr ""
398
399 #: ../../../src/GameStateNew.cpp:76
400 msgid "Randomize"
401 msgstr ""
402
403 #: ../../../src/GameStateNew.cpp:92
404 msgid "Choose a Portrait"
405 msgstr "Vyber si Vzhľad"
406
407 #: ../../../src/GameStateNew.cpp:96
408 msgid "Choose a Name"
409 msgstr "Vyber si Meno"
410
411 #: ../../../src/GameStateNew.cpp:100
412 msgid "Permadeath?"
413 msgstr ""
414
415 #: ../../../src/GameStateNew.cpp:104
416 msgid "Choose a Class"
417 msgstr ""
418
419 #: ../../../src/GameStateTitle.cpp:108
420 msgid "Play Game"
421 msgstr "Hrať Hru"
422
423 #: ../../../src/GameStateTitle.cpp:111
424 msgid "Enable a core mod to continue"
425 msgstr ""
426
427 #: ../../../src/GameStateTitle.cpp:115
428 msgid "Configuration"
429 msgstr ""
430
431 #: ../../../src/GameStateTitle.cpp:118
432 msgid "Credits"
433 msgstr ""
434
435 #: ../../../src/GameStateTitle.cpp:121
436 msgid "Exit Game"
437 msgstr "Ukončiť Hru"
438
439 #: ../../../src/InputState.cpp:402
440 msgid "Accept"
441 msgstr ""
442
443 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
444 msgid "Up"
445 msgstr ""
446
447 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
448 msgid "Down"
449 msgstr ""
450
451 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
452 msgid "Left"
453 msgstr ""
454
455 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
456 msgid "Right"
457 msgstr ""
458
459 #: ../../../src/InputState.cpp:407
460 msgid "Bar1"
461 msgstr ""
462
463 #: ../../../src/InputState.cpp:408
464 msgid "Bar2"
465 msgstr ""
466
467 #: ../../../src/InputState.cpp:409
468 msgid "Bar3"
469 msgstr ""
470
471 #: ../../../src/InputState.cpp:410
472 msgid "Bar4"
473 msgstr ""
474
475 #: ../../../src/InputState.cpp:411
476 msgid "Bar5"
477 msgstr ""
478
479 #: ../../../src/InputState.cpp:412
480 msgid "Bar6"
481 msgstr ""
482
483 #: ../../../src/InputState.cpp:413
484 msgid "Bar7"
485 msgstr ""
486
487 #: ../../../src/InputState.cpp:414
488 msgid "Bar8"
489 msgstr ""
490
491 #: ../../../src/InputState.cpp:415
492 msgid "Bar9"
493 msgstr ""
494
495 #: ../../../src/InputState.cpp:416
496 msgid "Bar0"
497 msgstr ""
498
499 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
500 #: ../../../src/MenuCharacter.cpp:54
501 msgid "Character"
502 msgstr "Postava"
503
504 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
505 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
506 msgid "Inventory"
507 msgstr "Vrecká"
508
509 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
510 #: ../../../src/MenuPowers.cpp:168
511 msgid "Powers"
512 msgstr "Sily"
513
514 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
515 #: ../../../src/MenuLog.cpp:72
516 msgid "Log"
517 msgstr "Poznámky"
518
519 #: ../../../src/InputState.cpp:421
520 msgid "Main1"
521 msgstr ""
522
523 #: ../../../src/InputState.cpp:422
524 msgid "Main2"
525 msgstr ""
526
527 #: ../../../src/InputState.cpp:423
528 msgid "Ctrl"
529 msgstr ""
530
531 #: ../../../src/InputState.cpp:424
532 msgid "Shift"
533 msgstr ""
534
535 #: ../../../src/InputState.cpp:425
536 msgid "Alt"
537 msgstr ""
538
539 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
540 msgid "Delete"
541 msgstr ""
542
543 #: ../../../src/InputState.cpp:427
544 msgid "ActionBar Accept"
545 msgstr ""
546
547 #: ../../../src/InputState.cpp:428
548 msgid "ActionBar Left"
549 msgstr ""
550
551 #: ../../../src/InputState.cpp:429
552 msgid "ActionBar Right"
553 msgstr ""
554
555 #: ../../../src/InputState.cpp:430
556 msgid "ActionBar Use"
557 msgstr ""
558
559 #: ../../../src/InputState.cpp:431
560 msgid "Developer Menu"
561 msgstr ""
562
563 #: ../../../src/InputState.cpp:433
564 msgid "Left Mouse"
565 msgstr ""
566
567 #: ../../../src/InputState.cpp:434
568 msgid "Middle Mouse"
569 msgstr ""
570
571 #: ../../../src/InputState.cpp:435
572 msgid "Right Mouse"
573 msgstr ""
574
575 #: ../../../src/InputState.cpp:436
576 msgid "Wheel Up"
577 msgstr ""
578
579 #: ../../../src/InputState.cpp:437
580 msgid "Wheel Down"
581 msgstr ""
582
583 #: ../../../src/InputState.cpp:438
584 msgid "Mouse X1"
585 msgstr ""
586
587 #: ../../../src/InputState.cpp:439
588 msgid "Mouse X2"
589 msgstr ""
590
591 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
592 msgid "Unknown Item"
593 msgstr ""
594
595 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
596 #, c-format
597 msgid "%d%% Speed"
598 msgstr ""
599
600 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
601 #, c-format
602 msgid "%d%% Attack Speed"
603 msgstr ""
604
605 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
606 #: ../../../src/MenuPowers.cpp:833
607 #, c-format
608 msgid "Resistance (%s)"
609 msgstr ""
610
611 #: ../../../src/ItemManager.cpp:684
612 #, c-format
613 msgid "Requires %s"
614 msgstr ""
615
616 #: ../../../src/ItemManager.cpp:733
617 msgid "Quest Item"
618 msgstr "Hľadaná Vec"
619
620 #: ../../../src/ItemManager.cpp:760
621 #, c-format
622 msgid "Quality: %s"
623 msgstr ""
624
625 #: ../../../src/ItemManager.cpp:785
626 #, c-format
627 msgid "Absorb: %d-%d"
628 msgstr "Pohlť: %d-%d"
629
630 #: ../../../src/ItemManager.cpp:787
631 #, c-format
632 msgid "Absorb: %d"
633 msgstr "Pohlť: %d"
634
635 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
636 #: ../../../src/MenuPowers.cpp:1134
637 #, c-format
638 msgid "Requires Level %d"
639 msgstr ""
640
641 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
642 #: ../../../src/MenuPowers.cpp:1125
643 #, c-format
644 msgid "Requires %s %d"
645 msgstr ""
646
647 #: ../../../src/ItemManager.cpp:849
648 #, c-format
649 msgid "Requires Class: %s"
650 msgstr ""
651
652 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
653 #, c-format
654 msgid "Buy Price: %d %s"
655 msgstr ""
656
657 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
658 #, c-format
659 msgid "Buy Price: %d %s each"
660 msgstr ""
661
662 #: ../../../src/ItemManager.cpp:886
663 #, c-format
664 msgid "Sell Price: %d %s"
665 msgstr ""
666
667 #: ../../../src/ItemManager.cpp:888
668 #, c-format
669 msgid "Sell Price: %d %s each"
670 msgstr ""
671
672 #: ../../../src/ItemManager.cpp:897
673 msgid "Set:"
674 msgstr ""
675
676 #: ../../../src/ItemManager.cpp:904
677 #, c-format
678 msgid "%d items:"
679 msgstr ""
680
681 #: ../../../src/ItemManager.cpp:917
682 #, c-format
683 msgid "Press [%s] to use"
684 msgstr ""
685
686 #: ../../../src/ItemManager.cpp:920
687 #, c-format
688 msgid "Press [%s] to read"
689 msgstr ""
690
691 #: ../../../src/MenuActionBar.cpp:87
692 msgid "Loot tooltip visibility"
693 msgstr ""
694
695 #: ../../../src/MenuActionBar.cpp:88
696 msgid "Mini-map mode"
697 msgstr ""
698
699 #: ../../../src/MenuActionBar.cpp:89
700 msgid "Always show stat bar labels"
701 msgstr ""
702
703 #: ../../../src/MenuActionBar.cpp:90
704 msgid "Show combat text"
705 msgstr ""
706
707 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
708 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
709 #, c-format
710 msgid "Hotkey: %s"
711 msgstr ""
712
713 #: ../../../src/MenuActionBar.cpp:474
714 #, c-format
715 msgid "Default. Temporarily show all loot tooltips with '%s'."
716 msgstr ""
717
718 #: ../../../src/MenuActionBar.cpp:476
719 #, c-format
720 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
721 msgstr ""
722
723 #: ../../../src/MenuActionBar.cpp:478
724 #, c-format
725 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
726 msgstr ""
727
728 #: ../../../src/MenuActionBar.cpp:482
729 msgid "Visible"
730 msgstr ""
731
732 #: ../../../src/MenuActionBar.cpp:484
733 msgid "Visible (2x zoom)"
734 msgstr ""
735
736 #: ../../../src/MenuActionBar.cpp:486
737 msgid "Hidden"
738 msgstr ""
739
740 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
741 msgid "Enabled"
742 msgstr ""
743
744 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
745 msgid "Disabled"
746 msgstr ""
747
748 #: ../../../src/MenuActionBar.cpp:657
749 msgid "Not enough MP."
750 msgstr ""
751
752 #: ../../../src/MenuActiveEffects.cpp:124
753 #, c-format
754 msgid "x%d"
755 msgstr ""
756
757 #: ../../../src/MenuActiveEffects.cpp:219
758 msgid "Remaining:"
759 msgstr ""
760
761 #: ../../../src/MenuActiveEffects.cpp:225
762 #, c-format
763 msgid "x%d stacks"
764 msgstr ""
765
766 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
767 msgid "Name"
768 msgstr "Meno"
769
770 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
771 msgid "Level"
772 msgstr "Stupeň"
773
774 #: ../../../src/MenuCharacter.cpp:310
775 #, c-format
776 msgid "%d unspent stat point"
777 msgstr ""
778
779 #: ../../../src/MenuCharacter.cpp:313
780 #, c-format
781 msgid "%d unspent stat points"
782 msgstr ""
783
784 #: ../../../src/MenuCharacter.cpp:355
785 #, c-format
786 msgid "Reduces the damage taken from \"%s\" elemental attacks."
787 msgstr ""
788
789 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
790 #, c-format
791 msgid "XP: %d"
792 msgstr "XP: %d"
793
794 #: ../../../src/MenuCharacter.cpp:367
795 #, c-format
796 msgid "Next: %d"
797 msgstr "Nasl.: %d"
798
799 #: ../../../src/MenuCharacter.cpp:373
800 #, c-format
801 msgid "base (%d), bonus (%d)"
802 msgstr "základ (%d), bonus (%d)"
803
804 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
805 msgid "Related stats:"
806 msgstr ""
807
808 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
809 #, c-format
810 msgid "Each level grants %d."
811 msgstr ""
812
813 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
814 #, c-format
815 msgid "Each point of %s grants %d."
816 msgstr ""
929 "Povolí paralaxné (nedlaždicové) vrstvy. Zakázaním tohto nastavenia môžete v "
930 "niektorých prípadoch zlepšiť výkon."
931
932 #: ../../../src/MenuConfig.cpp:512
933 msgid ""
934 "Enables the below setting that controls the screen gamma level. The behavior"
935 " of the gamma setting can vary between platforms."
936 msgstr ""
937 "Povolí nižšie uvedené nastavenie, ktoré ovláda hodnotu gama obrazovky. "
938 "Správanie nastavenia gama sa môže líšiť v závislosti od platformy."
939
940 #: ../../../src/MenuConfig.cpp:513
941 msgid ""
942 "Provides additional text for information that is primarily conveyed through "
943 "color."
944 msgstr ""
945 "Poskytne doplnkové texty pre informácie, ktoré sú vyjadrené hlavne farbami."
946
947 #: ../../../src/MenuConfig.cpp:514
948 msgid ""
949 "Some mods will automatically hide the stat bars when they are inactive. "
950 "Disabling this option will keep them displayed at all times."
951 msgstr ""
952 "Niektoré modifikácie automaticky skrývajú indikátory charakteristík, keď "
953 "neprejavujú aktivitu. Zakázaním tejto možnosti sa budú zobrazovať vždy."
954
955 #: ../../../src/MenuConfig.cpp:515
956 msgid ""
957 "When enabled, empty equipment slots will be filled with applicable items "
958 "when they are obtained."
959 msgstr ""
960 "Ak je toto nastavenie povolené, získanie vhodných predmetov automaticky "
961 "obsadí prázdne pozície výstroje."
962
963 #: ../../../src/MenuConfig.cpp:516
964 msgid ""
965 "Shows a marker above enemies, allies, and the player when they are obscured "
966 "by tall objects."
967 msgstr ""
968
969 #: ../../../src/MenuConfig.cpp:517
970 msgid ""
971 "This allows the game to be controlled entirely with the keyboard (or "
972 "joystick)."
973 msgstr "Umožní ovládať hru výlučne pomocou klávesnice (alebo joysticku)."
974
975 #: ../../../src/MenuConfig.cpp:518
976 msgid ""
977 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
978 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
979 "instead of 'Main1'."
980 msgstr ""
981
982 #: ../../../src/MenuConfig.cpp:519
983 msgid ""
984 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
985 "assigned to the movement button can be used by targeting an enemy. If this "
986 "setting is disabled, it is required to use 'Shift' to access the Power "
987 "assigned to the movement button."
988 msgstr ""
989
990 #: ../../../src/MenuConfig.cpp:520
991 msgid ""
992 "The player's attacks will be aimed in the direction of the mouse cursor when"
993 " this is enabled."
994 msgstr ""
995 "Ak je toto nastavenie povolené, útoky hráča budú mierené smerom ku kurzoru "
996 "myši."
997
998 #: ../../../src/MenuConfig.cpp:571
999 msgid "Active Mods"
1000 msgstr "Aktívne modifikácie"
1001
1002 #: ../../../src/MenuConfig.cpp:580
1003 msgid "Available Mods"
1004 msgstr "Dostupné modifikácie"
1005
1006 #: ../../../src/MenuConfig.cpp:599
1007 msgid "<< Disable"
1008 msgstr "<< Zakázať"
1009
1010 #: ../../../src/MenuConfig.cpp:605
1011 msgid "Enable >>"
1012 msgstr "Povoliť >>"
1013
1014 #: ../../../src/MenuConfig.cpp:1436
1015 msgid "Version:"
1016 msgstr "Verzia:"
1017
1018 #: ../../../src/MenuConfig.cpp:1441
1019 msgid "Game:"
1020 msgstr "Hra:"
1021
1022 #: ../../../src/MenuConfig.cpp:1446
1023 msgid "Engine version:"
1024 msgstr "Verzia jadra:"
1025
1026 #: ../../../src/MenuConfig.cpp:1454
1027 msgid "Requires mods:"
1028 msgstr "Požadované modifikácie:"
1029
1030 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
1031 msgid "(none)"
1032 msgstr ""
1033
1034 #: ../../../src/MenuConfig.cpp:1579
1035 msgid "Save & Exit"
1036 msgstr "Uložiť a ukončiť"
8171037
8181038 #: ../../../src/MenuDevConsole.cpp:63
8191039 msgid "Execute"
820 msgstr ""
1040 msgstr "Vykonať"
8211041
8221042 #: ../../../src/MenuDevConsole.cpp:101 ../../../src/MenuDevConsole.cpp:151
8231043 msgid "Developer Console"
824 msgstr ""
1044 msgstr "Vývojárska konzola"
8251045
8261046 #: ../../../src/MenuDevConsole.cpp:141
8271047 #, c-format
8281048 msgid "Use '%s' to inspect with the cursor."
829 msgstr ""
1049 msgstr "‚%s‘ preskúma miesto, na ktorom je kurzor."
8301050
8311051 #: ../../../src/MenuDevConsole.cpp:146
8321052 msgid "Arguments with spaces should be enclosed with double quotes. Example:"
8331053 msgstr ""
1054 "Argumenty obsahujúce medzery by mali byť uzavreté v dvojitých úvodzovkách. "
1055 "Napríklad:"
8341056
8351057 #: ../../../src/MenuDevConsole.cpp:147
8361058 msgid "Type 'help' to get a list of commands."
837 msgstr ""
1059 msgstr "Ak chetete získať zoznam príkazov, napíšte ‚help‘."
8381060
8391061 #: ../../../src/MenuDevConsole.cpp:209 ../../../src/MenuDevConsole.cpp:213
8401062 msgid "px"
841 msgstr ""
1063 msgstr "px"
8421064
8431065 #: ../../../src/MenuDevConsole.cpp:224
8441066 msgid "Distance"
845 msgstr ""
1067 msgstr "Vzdialenosť"
8461068
8471069 #: ../../../src/MenuDevConsole.cpp:239 ../../../src/MenuDevConsole.cpp:286
8481070 msgid "Entity"
849 msgstr ""
1071 msgstr "Entita"
8501072
8511073 #: ../../../src/MenuDevConsole.cpp:261 ../../../src/MenuDevConsole.cpp:268
8521074 msgid "none"
853 msgstr ""
1075 msgstr "žiadna"
8541076
8551077 #: ../../../src/MenuDevConsole.cpp:262 ../../../src/MenuDevConsole.cpp:264
8561078 msgid "wall"
857 msgstr ""
1079 msgstr "stena"
8581080
8591081 #: ../../../src/MenuDevConsole.cpp:263 ../../../src/MenuDevConsole.cpp:265
8601082 msgid "short wall / pit"
861 msgstr ""
1083 msgstr "nízka stena / priepasť"
8621084
8631085 #: ../../../src/MenuDevConsole.cpp:266
8641086 msgid "entity"
865 msgstr ""
1087 msgstr "entita"
8661088
8671089 #: ../../../src/MenuDevConsole.cpp:267
8681090 msgid "entity, ally"
869 msgstr ""
1091 msgstr "entita, spojenecká"
8701092
8711093 #: ../../../src/MenuDevConsole.cpp:274
8721094 msgid "Tile"
873 msgstr ""
1095 msgstr "Dlaždica"
8741096
8751097 #: ../../../src/MenuDevConsole.cpp:360
8761098 msgid "adds a power to the action bar"
877 msgstr ""
1099 msgstr "pridá silu do panelu akcií"
8781100
8791101 #: ../../../src/MenuDevConsole.cpp:361
8801102 msgid "turns on/off the display of the FPS counter"
881 msgstr ""
1103 msgstr "vypne/zapne zobrazovanie počítadla FPS"
8821104
8831105 #: ../../../src/MenuDevConsole.cpp:362
8841106 msgid "turns on/off all of the HUD elements"
885 msgstr ""
1107 msgstr "vypne/zapne všetky elementy HUD"
8861108
8871109 #: ../../../src/MenuDevConsole.cpp:363
8881110 msgid "turns on/off the developer hud"
889 msgstr ""
1111 msgstr "vypne/zapne HUD pre vývojárov"
8901112
8911113 #: ../../../src/MenuDevConsole.cpp:364
8921114 msgid ""
8931115 "Prints a list of powers that match a search term. No search term will list "
8941116 "all items"
8951117 msgstr ""
1118 "Vypíše zoznam síl, ktoré zodpovedajú hľadanému výrazu. Neexistuje hľadaný "
1119 "výraz, ktorý by ich vymenoval všetky"
8961120
8971121 #: ../../../src/MenuDevConsole.cpp:365
8981122 msgid "Prints out all the map filenames located in the \"maps/\" directory."
899 msgstr ""
1123 msgstr "Vypíše všetky názvy súborov máp umiestnených v adresári „maps/“."
9001124
9011125 #: ../../../src/MenuDevConsole.cpp:366
9021126 msgid ""
9091133 "Prints a list of items that match a search term. No search term will list "
9101134 "all items"
9111135 msgstr ""
1136 "Vypíše zoznam predmetov, ktoré zodpovedajú hľadanému výrazu. Neexistuje "
1137 "hľadaný výraz, ktorý by vymenoval všetky predmety"
9121138
9131139 #: ../../../src/MenuDevConsole.cpp:368
9141140 msgid ""
9171143
9181144 #: ../../../src/MenuDevConsole.cpp:369
9191145 msgid "clears the command history"
920 msgstr ""
1146 msgstr "vymaže históriu príkazov"
9211147
9221148 #: ../../../src/MenuDevConsole.cpp:370
9231149 msgid "displays this text"
924 msgstr ""
1150 msgstr "zobrazí tento text"
9251151
9261152 #: ../../../src/MenuDevConsole.cpp:377
9271153 msgid "Toggled the developer hud"
928 msgstr ""
1154 msgstr "Bolo prepnuté zobrazovanie HUD pre vývojárov"
9291155
9301156 #: ../../../src/MenuDevConsole.cpp:381
9311157 msgid "Toggled the hud"
932 msgstr ""
1158 msgstr "Bolo prepnuté zobrazovanie HUD"
9331159
9341160 #: ../../../src/MenuDevConsole.cpp:385
9351161 msgid "Toggled the FPS counter"
936 msgstr ""
1162 msgstr "Bolo prepnuté zobrazovanie počítadla FPS"
9371163
9381164 #: ../../../src/MenuDevConsole.cpp:534
9391165 msgid "ERROR: Incorrect number of arguments"
940 msgstr ""
1166 msgstr "CHYBA: Nesprávny počet argumentov"
9411167
9421168 #: ../../../src/MenuDevConsole.cpp:536 ../../../src/MenuDevConsole.cpp:564
9431169 msgid "HINT:"
944 msgstr ""
1170 msgstr "TIP:"
9451171
9461172 #: ../../../src/MenuDevConsole.cpp:536
9471173 msgid "<id>"
9501176 #: ../../../src/MenuDevConsole.cpp:552
9511177 #, c-format
9521178 msgid "ERROR: '%s' is not a valid event key"
953 msgstr ""
1179 msgstr "CHYBA: „%s“ nie je platný kľúč udalosti"
9541180
9551181 #: ../../../src/MenuDevConsole.cpp:562
9561182 msgid "ERROR: Too few arguments"
957 msgstr ""
1183 msgstr "CHYBA: Príliš málo argumentov"
9581184
9591185 #: ../../../src/MenuDevConsole.cpp:564
9601186 msgid "<key>=<val> <key>=<val> ..."
961 msgstr ""
1187 msgstr "<kľúč>=<hodnota> <kľúč>=<hodnota> ..."
9621188
9631189 #: ../../../src/MenuDevConsole.cpp:569
9641190 msgid "ERROR: Unknown command"
965 msgstr ""
1191 msgstr "CHYBA: Neznámy príkaz"
9661192
9671193 #: ../../../src/MenuDevConsole.cpp:571
9681194 msgid "HINT: Type help"
969 msgstr ""
970
971 #: ../../../src/MenuEnemy.cpp:138
1195 msgstr "TIP: Napíšte help"
1196
1197 #: ../../../src/MenuEnemy.cpp:162
9721198 #, c-format
9731199 msgid "%s level %d"
9741200 msgstr "%s stupeň %d"
9751201
976 #: ../../../src/MenuEnemy.cpp:162
1202 #: ../../../src/MenuEnemy.cpp:186
9771203 msgid "Dead"
9781204 msgstr "Mŕtvy"
9791205
980 #: ../../../src/MenuEnemy.cpp:164
1206 #: ../../../src/MenuEnemy.cpp:188
9811207 msgid "Destroyed"
9821208 msgstr ""
9831209
984 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
985 msgid "Paused"
986 msgstr ""
987
988 #: ../../../src/MenuExit.cpp:91
989 msgid "Save & Exit"
990 msgstr ""
991
992 #: ../../../src/MenuExit.cpp:92
993 msgid "Exit"
994 msgstr "Ukonči"
995
996 #: ../../../src/MenuExit.cpp:96
997 msgid "Continue"
998 msgstr ""
999
1000 #: ../../../src/MenuInventory.cpp:73
1001 msgid "Automatically equip items"
1002 msgstr ""
1003
1004 #: ../../../src/MenuInventory.cpp:188
1210 #: ../../../src/MenuInventory.cpp:177
10051211 #, c-format
10061212 msgid "Lost %d%% of %s."
1007 msgstr ""
1008
1009 #: ../../../src/MenuInventory.cpp:195
1213 msgstr "Stratili ste %d %% z %s."
1214
1215 #: ../../../src/MenuInventory.cpp:184
10101216 #, c-format
10111217 msgid "Lost %d%% of total XP."
1012 msgstr ""
1013
1014 #: ../../../src/MenuInventory.cpp:200
1218 msgstr "Stratili ste %d %% z celkového XP."
1219
1220 #: ../../../src/MenuInventory.cpp:189
10151221 #, c-format
10161222 msgid "Lost %d%% of current level XP."
1017 msgstr ""
1018
1019 #: ../../../src/MenuInventory.cpp:226
1223 msgstr "Stratili ste %d %% z XP aktuálnej úrovne."
1224
1225 #: ../../../src/MenuInventory.cpp:215
10201226 #, c-format
10211227 msgid "Lost %s."
10221228 msgstr ""
10231229
1024 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1230 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10251231 #, c-format
10261232 msgid "%d %s"
10271233 msgstr ""
10281234
1029 #: ../../../src/MenuInventory.cpp:317
1235 #: ../../../src/MenuInventory.cpp:300
10301236 msgid "Pick up item(s):"
1031 msgstr ""
1032
1033 #: ../../../src/MenuInventory.cpp:318
1237 msgstr "Zobratie predmetu/-ov:"
1238
1239 #: ../../../src/MenuInventory.cpp:301
10341240 msgid "Use or equip item:"
1035 msgstr ""
1036
1037 #: ../../../src/MenuInventory.cpp:319
1241 msgstr "Použitie alebo vystrojenie predmetom:"
1242
1243 #: ../../../src/MenuInventory.cpp:302
10381244 #, c-format
10391245 msgid "%s modifiers"
1040 msgstr ""
1041
1042 #: ../../../src/MenuInventory.cpp:320
1246 msgstr "Modifikátory pre %s"
1247
1248 #: ../../../src/MenuInventory.cpp:303
10431249 msgid "Select a quantity of item:"
1044 msgstr ""
1045
1046 #: ../../../src/MenuInventory.cpp:323
1250 msgstr "Výber množstva predmetu:"
1251
1252 #: ../../../src/MenuInventory.cpp:306
10471253 msgid "Stash item stack:"
1048 msgstr ""
1049
1050 #: ../../../src/MenuInventory.cpp:325
1254 msgstr "Uschovanie hromady predmetov:"
1255
1256 #: ../../../src/MenuInventory.cpp:308
10511257 msgid "Sell item stack:"
1052 msgstr ""
1053
1054 #: ../../../src/MenuInventory.cpp:592
1258 msgstr "Predaj hromady predmetov:"
1259
1260 #: ../../../src/MenuInventory.cpp:574
10551261 msgid "You don't have enough of the required item."
1056 msgstr ""
1057
1058 #: ../../../src/MenuInventory.cpp:599
1262 msgstr "Nemáte dostatočné množstvo vyžadovaného predmetu."
1263
1264 #: ../../../src/MenuInventory.cpp:586
10591265 msgid "You can't use this item right now."
1060 msgstr ""
1061
1062 #: ../../../src/MenuInventory.cpp:611
1266 msgstr "Tento predmet nemožno momentálne použiť."
1267
1268 #: ../../../src/MenuInventory.cpp:598
10631269 msgid "This item can only be used from the action bar."
1064 msgstr "Tento predmet môžeš použiť iba z pruhu akcií."
1065
1066 #: ../../../src/MenuInventory.cpp:729
1270 msgstr "Tento predmet možno použiť iba z panelu akcií."
1271
1272 #: ../../../src/MenuInventory.cpp:716
10671273 msgid "Inventory is full."
1068 msgstr "Vrecká sú plné."
1069
1070 #: ../../../src/MenuInventory.cpp:849
1274 msgstr "Inventár je plný."
1275
1276 #: ../../../src/MenuInventory.cpp:841
10711277 #, c-format
10721278 msgid "Not enough %s."
1073 msgstr ""
1074
1075 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1279 msgstr "Nedostatok %s."
1280
1281 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
10761282 msgid "This item can not be sold."
1077 msgstr ""
1283 msgstr "Tento predmet nemožno predať."
10781284
10791285 #: ../../../src/MenuLog.cpp:91
10801286 msgid "Notes"
1081 msgstr ""
1287 msgstr "Poznámky"
10821288
10831289 #: ../../../src/MenuLog.cpp:92
10841290 msgid "Quests"
10851291 msgstr "Úlohy"
10861292
1087 #: ../../../src/MenuManager.cpp:286
1293 #: ../../../src/MenuManager.cpp:296
10881294 #, c-format
10891295 msgid "XP: %d/%d"
10901296 msgstr "XP: %d/%d"
10911297
1092 #: ../../../src/MenuManager.cpp:827
1298 #: ../../../src/MenuManager.cpp:854
10931299 msgid "This item can not be dropped."
1094 msgstr ""
1300 msgstr "Tento predmet nemožno položiť na zem."
10951301
10961302 #: ../../../src/MenuNumPicker.cpp:59
10971303 msgid "Enter amount:"
1098 msgstr ""
1099
1100 #: ../../../src/MenuPowers.cpp:787
1304 msgstr "Zadajte množstvo:"
1305
1306 #: ../../../src/MenuPowers.cpp:786
11011307 msgid "Passive"
1102 msgstr ""
1103
1104 #: ../../../src/MenuPowers.cpp:792
1308 msgstr "Pasívna"
1309
1310 #: ../../../src/MenuPowers.cpp:791
11051311 #, c-format
11061312 msgid "Costs %d MP"
11071313 msgstr "Spotrebuje %d MP"
11081314
1109 #: ../../../src/MenuPowers.cpp:796
1315 #: ../../../src/MenuPowers.cpp:795
11101316 #, c-format
11111317 msgid "Costs %d HP"
1112 msgstr ""
1113
1114 #: ../../../src/MenuPowers.cpp:801
1318 msgstr "Spotrebuje %d HP"
1319
1320 #: ../../../src/MenuPowers.cpp:800
11151321 msgid "Cooldown:"
11161322 msgstr ""
11171323
1118 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1324 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11191325 msgid "Damage per second"
1120 msgstr ""
1121
1122 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1326 msgstr "Zranenie za sekundu"
1327
1328 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11231329 msgid "HP per second"
1124 msgstr ""
1125
1126 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1330 msgstr "HP za sekundu"
1331
1332 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11271333 msgid "MP per second"
1128 msgstr ""
1129
1130 #: ../../../src/MenuPowers.cpp:885
1334 msgstr "MP za sekundu"
1335
1336 #: ../../../src/MenuPowers.cpp:884
11311337 msgid "Immobilize"
11321338 msgstr ""
11331339
1134 #: ../../../src/MenuPowers.cpp:893
1340 #: ../../../src/MenuPowers.cpp:892
11351341 msgid "Immunity"
1136 msgstr ""
1137
1138 #: ../../../src/MenuPowers.cpp:896
1342 msgstr "Imunita"
1343
1344 #: ../../../src/MenuPowers.cpp:895
11391345 msgid "Immunity to damage over time"
1140 msgstr ""
1141
1142 #: ../../../src/MenuPowers.cpp:899
1346 msgstr "Imunita voči zraneniu postupom času"
1347
1348 #: ../../../src/MenuPowers.cpp:898
11431349 msgid "Immunity to slow"
1144 msgstr ""
1145
1146 #: ../../../src/MenuPowers.cpp:902
1350 msgstr "Imunita voči spomaleniu"
1351
1352 #: ../../../src/MenuPowers.cpp:901
11471353 msgid "Immunity to stun"
1148 msgstr ""
1149
1150 #: ../../../src/MenuPowers.cpp:905
1354 msgstr "Imunita voči omráčeniu"
1355
1356 #: ../../../src/MenuPowers.cpp:904
11511357 msgid "Immunity to HP steal"
1152 msgstr ""
1153
1154 #: ../../../src/MenuPowers.cpp:908
1358 msgstr "Imunita voči krádeži HP"
1359
1360 #: ../../../src/MenuPowers.cpp:907
11551361 msgid "Immunity to MP steal"
1156 msgstr ""
1157
1158 #: ../../../src/MenuPowers.cpp:911
1362 msgstr "Imunita voči krádeži MP"
1363
1364 #: ../../../src/MenuPowers.cpp:910
11591365 msgid "Immunity to knockback"
1160 msgstr ""
1161
1162 #: ../../../src/MenuPowers.cpp:914
1366 msgstr "Imunita voči odhodeniu"
1367
1368 #: ../../../src/MenuPowers.cpp:913
11631369 msgid "Immunity to damage reflection"
1164 msgstr ""
1165
1166 #: ../../../src/MenuPowers.cpp:917
1370 msgstr "Imunita voči odrazu zranenia"
1371
1372 #: ../../../src/MenuPowers.cpp:916
11671373 msgid "Stun"
1168 msgstr ""
1169
1170 #: ../../../src/MenuPowers.cpp:920
1374 msgstr "Omráčenie"
1375
1376 #: ../../../src/MenuPowers.cpp:919
11711377 msgid "Automatic revive on death"
1172 msgstr ""
1173
1174 #: ../../../src/MenuPowers.cpp:923
1378 msgstr "Automatické oživenie po smrti"
1379
1380 #: ../../../src/MenuPowers.cpp:922
11751381 msgid "Convert"
11761382 msgstr ""
11771383
1178 #: ../../../src/MenuPowers.cpp:926
1384 #: ../../../src/MenuPowers.cpp:925
11791385 msgid "Fear"
11801386 msgstr ""
11811387
1182 #: ../../../src/MenuPowers.cpp:929
1388 #: ../../../src/MenuPowers.cpp:928
11831389 msgid "Lifespan"
11841390 msgstr ""
11851391
1186 #: ../../../src/MenuPowers.cpp:953
1392 #: ../../../src/MenuPowers.cpp:952
11871393 msgid "Magical Shield"
1188 msgstr ""
1189
1190 #: ../../../src/MenuPowers.cpp:982
1394 msgstr "Magický štít"
1395
1396 #: ../../../src/MenuPowers.cpp:981
11911397 msgid "Healing"
11921398 msgstr ""
11931399
1194 #: ../../../src/MenuPowers.cpp:985
1400 #: ../../../src/MenuPowers.cpp:984
11951401 msgid "Knockback"
1196 msgstr ""
1197
1198 #: ../../../src/MenuPowers.cpp:1010
1402 msgstr "Odhodenie"
1403
1404 #: ../../../src/MenuPowers.cpp:1009
11991405 #, c-format
12001406 msgid "%d%% chance"
1201 msgstr ""
1202
1203 #: ../../../src/MenuPowers.cpp:1062
1407 msgstr "%d %% šanca"
1408
1409 #: ../../../src/MenuPowers.cpp:1061
12041410 msgid "Base Accuracy"
1205 msgstr ""
1206
1207 #: ../../../src/MenuPowers.cpp:1082
1411 msgstr "Základná presnosť"
1412
1413 #: ../../../src/MenuPowers.cpp:1081
12081414 msgid "Base Critical Chance"
1209 msgstr ""
1210
1211 #: ../../../src/MenuPowers.cpp:1090
1415 msgstr "Základná šanca na kritický zásah"
1416
1417 #: ../../../src/MenuPowers.cpp:1089
12121418 msgid "Ignores Absorbtion"
1213 msgstr ""
1214
1215 #: ../../../src/MenuPowers.cpp:1095
1419 msgstr "Ignoruje pohltenie"
1420
1421 #: ../../../src/MenuPowers.cpp:1094
12161422 msgid "Ignores Avoidance"
1217 msgstr ""
1218
1219 #: ../../../src/MenuPowers.cpp:1100
1423 msgstr "Ignoruje vyhýbanie"
1424
1425 #: ../../../src/MenuPowers.cpp:1099
12201426 #, c-format
12211427 msgid "%d%% Chance to crit slowed targets"
1222 msgstr ""
1223
1224 #: ../../../src/MenuPowers.cpp:1105
1428 msgstr "%d %% šanca kriticky zasiahnuť spomalené ciele"
1429
1430 #: ../../../src/MenuPowers.cpp:1104
12251431 #, c-format
12261432 msgid "Elemental Damage (%s)"
1227 msgstr ""
1228
1229 #: ../../../src/MenuPowers.cpp:1114
1433 msgstr "Živelné zranenie (%s)"
1434
1435 #: ../../../src/MenuPowers.cpp:1113
12301436 #, c-format
12311437 msgid "Requires a %s"
1232 msgstr ""
1233
1234 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1438 msgstr "Vyžaduje %s"
1439
1440 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12351441 #, c-format
12361442 msgid "Requires Power: %s"
1237 msgstr ""
1238
1239 #: ../../../src/MenuPowers.cpp:1163
1443 msgstr "Vyžaduje silu: %s"
1444
1445 #: ../../../src/MenuPowers.cpp:1162
12401446 msgid "Click to Unlock (uses 1 Skill Point)"
1241 msgstr ""
1242
1243 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1447 msgstr "Odomknete kliknutím (použije 1 bod zručnosti)"
1448
1449 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12441450 msgid "Requires 1 Skill Point"
1245 msgstr ""
1246
1247 #: ../../../src/MenuPowers.cpp:1355
1451 msgstr "Vyžaduje 1 bod zručnosti"
1452
1453 #: ../../../src/MenuPowers.cpp:1354
12481454 #, c-format
12491455 msgid "%d unspent skill point"
1250 msgstr ""
1251
1252 #: ../../../src/MenuPowers.cpp:1358
1456 msgstr "Počet nepoužitých bodov zručnosti: %d "
1457
1458 #: ../../../src/MenuPowers.cpp:1357
12531459 #, c-format
12541460 msgid "%d unspent skill points"
1255 msgstr ""
1256
1257 #: ../../../src/MenuPowers.cpp:1388
1461 msgstr "Počet nepoužitých bodov zručnosti: %d "
1462
1463 #: ../../../src/MenuPowers.cpp:1387
12581464 msgid "Next Level:"
1259 msgstr ""
1260
1261 #: ../../../src/MenuStash.cpp:96
1262 msgid "Shared Stash"
1263 msgstr ""
1264
1265 #: ../../../src/MenuStash.cpp:209
1465 msgstr "Ďalšia úroveň:"
1466
1467 #: ../../../src/MenuStash.cpp:53
1468 msgid "Private"
1469 msgstr "Súkromné"
1470
1471 #: ../../../src/MenuStash.cpp:55
1472 msgid "Shared"
1473 msgstr "Zdieľané"
1474
1475 #: ../../../src/MenuStash.cpp:103
1476 msgid "Stash"
1477 msgstr "Úložisko"
1478
1479 #: ../../../src/MenuStash.cpp:258
12661480 msgid "Can not store quest items in the stash."
1267 msgstr ""
1268
1269 #: ../../../src/MenuStash.cpp:219
1481 msgstr "Predmety úloh nemožno vložiť do úložiska."
1482
1483 #: ../../../src/MenuStash.cpp:263
1484 msgid "This item can not be stored in the stash."
1485 msgstr "Tento predmet nemožno vložiť do úložiska."
1486
1487 #: ../../../src/MenuStash.cpp:268
1488 msgid "This item can not be stored in the private stash."
1489 msgstr "Tento predmet nemožno vložiť do súkromného úložiska."
1490
1491 #: ../../../src/MenuStash.cpp:273
1492 msgid "This item can not be stored in the shared stash."
1493 msgstr "Tento predmet nemožno vložiť do zdieľaného úložiska."
1494
1495 #: ../../../src/MenuStash.cpp:283
12701496 msgid "Stash is full."
1271 msgstr ""
1272
1273 #: ../../../src/MenuTalker.cpp:454
1497 msgstr "Úložisko je plné."
1498
1499 #: ../../../src/MenuStash.cpp:340
1500 #, c-format
1501 msgid "Can not store item in stash: %s"
1502 msgstr "Do úložiska nemožno vložiť predmet: %s"
1503
1504 #: ../../../src/MenuTalker.cpp:447
1505 #, c-format
1506 msgid "<dialog node %d>"
1507 msgstr ""
1508
1509 #: ../../../src/MenuTalker.cpp:455
12741510 msgid "Trade"
1275 msgstr ""
1511 msgstr "Obchodovať"
12761512
12771513 #: ../../../src/MenuVendor.cpp:58
12781514 msgid "Buyback"
1279 msgstr ""
1280
1281 #: ../../../src/MenuVendor.cpp:279
1515 msgstr "Spätná kúpa"
1516
1517 #: ../../../src/MenuVendor.cpp:281
12821518 msgid "Vendor"
12831519 msgstr "Predavač"
12841520
1285 #: ../../../src/PowerManager.cpp:1136
1521 #: ../../../src/PowerManager.cpp:1170
12861522 #, c-format
12871523 msgid "+%d Shield"
12881524 msgstr ""
12891525
1290 #: ../../../src/PowerManager.cpp:1392
1526 #: ../../../src/PowerManager.cpp:1426
12911527 msgid "You are already transformed, untransform first."
1292 msgstr ""
1293
1294 #: ../../../src/PowerManager.cpp:1404
1528 msgstr "Už ste raz prešli premenou, najprv ju zvráťte."
1529
1530 #: ../../../src/PowerManager.cpp:1438
12951531 msgid "Could not untransform at this position."
1296 msgstr ""
1532 msgstr "Na tomto mieste nemožno zvrátiť premenu."
12971533
12981534 #: ../../../src/QuestLog.cpp:234
12991535 msgid "Completed Quests"
1300 msgstr ""
1301
1302 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1536 msgstr "Dokončené úlohy"
1537
1538 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13031539 msgid "Game saved."
1304 msgstr ""
1305
1306 #: ../../../src/SDLInputState.cpp:582
1540 msgstr "Hra uložená."
1541
1542 #: ../../../src/SDLInputState.cpp:643
1543 msgid "BkSp"
1544 msgstr ""
1545
1546 #: ../../../src/SDLInputState.cpp:644
1547 msgid "Caps"
1548 msgstr ""
1549
1550 #: ../../../src/SDLInputState.cpp:645
1551 msgid "Del"
1552 msgstr ""
1553
1554 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1555 msgid "End"
1556 msgstr "End"
1557
1558 #: ../../../src/SDLInputState.cpp:648
1559 msgid "Esc"
1560 msgstr ""
1561
1562 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1563 msgid "Home"
1564 msgstr "Home"
1565
1566 #: ../../../src/SDLInputState.cpp:650
1567 msgid "Ins"
1568 msgstr ""
1569
1570 #: ../../../src/SDLInputState.cpp:651
1571 msgid "LAlt"
1572 msgstr ""
1573
1574 #: ../../../src/SDLInputState.cpp:652
1575 msgid "LCtrl"
1576 msgstr ""
1577
1578 #: ../../../src/SDLInputState.cpp:654
1579 msgid "LShft"
1580 msgstr ""
1581
1582 #: ../../../src/SDLInputState.cpp:655
1583 msgid "Num"
1584 msgstr ""
1585
1586 #: ../../../src/SDLInputState.cpp:656
1587 msgid "PgDn"
1588 msgstr ""
1589
1590 #: ../../../src/SDLInputState.cpp:657
1591 msgid "PgUp"
1592 msgstr ""
1593
1594 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1595 msgid "Pause"
1596 msgstr "Pause"
1597
1598 #: ../../../src/SDLInputState.cpp:659
1599 msgid "Print"
1600 msgstr ""
1601
1602 #: ../../../src/SDLInputState.cpp:660
1603 msgid "RAlt"
1604 msgstr ""
1605
1606 #: ../../../src/SDLInputState.cpp:661
1607 msgid "RCtrl"
1608 msgstr ""
1609
1610 #: ../../../src/SDLInputState.cpp:662
1611 msgid "Ret"
1612 msgstr ""
1613
1614 #: ../../../src/SDLInputState.cpp:664
1615 msgid "RShft"
1616 msgstr ""
1617
1618 #: ../../../src/SDLInputState.cpp:665
1619 msgid "SLock"
1620 msgstr ""
1621
1622 #: ../../../src/SDLInputState.cpp:666
1623 msgid "Spc"
1624 msgstr ""
1625
1626 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1627 msgid "Tab"
1628 msgstr "Tab"
1629
1630 #: ../../../src/SDLInputState.cpp:673
13071631 msgid "Backspace"
1308 msgstr ""
1309
1310 #: ../../../src/SDLInputState.cpp:583
1632 msgstr "Backspace"
1633
1634 #: ../../../src/SDLInputState.cpp:674
13111635 msgid "CapsLock"
1312 msgstr ""
1313
1314 #: ../../../src/SDLInputState.cpp:586
1315 msgid "End"
1316 msgstr ""
1317
1318 #: ../../../src/SDLInputState.cpp:587
1636 msgstr "CapsLock"
1637
1638 #: ../../../src/SDLInputState.cpp:678
13191639 msgid "Escape"
1320 msgstr ""
1321
1322 #: ../../../src/SDLInputState.cpp:588
1323 msgid "Home"
1324 msgstr ""
1325
1326 #: ../../../src/SDLInputState.cpp:589
1640 msgstr "Escape"
1641
1642 #: ../../../src/SDLInputState.cpp:680
13271643 msgid "Insert"
1328 msgstr ""
1329
1330 #: ../../../src/SDLInputState.cpp:590
1644 msgstr "Insert"
1645
1646 #: ../../../src/SDLInputState.cpp:681
13311647 msgid "Left Alt"
1332 msgstr ""
1333
1334 #: ../../../src/SDLInputState.cpp:591
1648 msgstr "Ľavý Alt"
1649
1650 #: ../../../src/SDLInputState.cpp:682
13351651 msgid "Left Ctrl"
1336 msgstr ""
1337
1338 #: ../../../src/SDLInputState.cpp:593
1652 msgstr "Ľavý Ctrl"
1653
1654 #: ../../../src/SDLInputState.cpp:684
13391655 msgid "Left Shift"
1340 msgstr ""
1341
1342 #: ../../../src/SDLInputState.cpp:594
1656 msgstr "Ľavý Shift"
1657
1658 #: ../../../src/SDLInputState.cpp:685
13431659 msgid "NumLock"
1344 msgstr ""
1345
1346 #: ../../../src/SDLInputState.cpp:595
1660 msgstr "NumLock"
1661
1662 #: ../../../src/SDLInputState.cpp:686
13471663 msgid "PageDown"
1348 msgstr ""
1349
1350 #: ../../../src/SDLInputState.cpp:596
1664 msgstr "PageDown"
1665
1666 #: ../../../src/SDLInputState.cpp:687
13511667 msgid "PageUp"
1352 msgstr ""
1353
1354 #: ../../../src/SDLInputState.cpp:597
1355 msgid "Pause"
1356 msgstr ""
1357
1358 #: ../../../src/SDLInputState.cpp:598
1668 msgstr "PageUp"
1669
1670 #: ../../../src/SDLInputState.cpp:689
13591671 msgid "PrintScreen"
1360 msgstr ""
1361
1362 #: ../../../src/SDLInputState.cpp:599
1672 msgstr "PrintScreen"
1673
1674 #: ../../../src/SDLInputState.cpp:690
13631675 msgid "Right Alt"
1364 msgstr ""
1365
1366 #: ../../../src/SDLInputState.cpp:600
1676 msgstr "Pravý Alt"
1677
1678 #: ../../../src/SDLInputState.cpp:691
13671679 msgid "Right Ctrl"
1368 msgstr ""
1369
1370 #: ../../../src/SDLInputState.cpp:601
1680 msgstr "Pravý Ctrl"
1681
1682 #: ../../../src/SDLInputState.cpp:692
13711683 msgid "Return"
1372 msgstr ""
1373
1374 #: ../../../src/SDLInputState.cpp:603
1684 msgstr "Return"
1685
1686 #: ../../../src/SDLInputState.cpp:694
13751687 msgid "Right Shift"
1376 msgstr ""
1377
1378 #: ../../../src/SDLInputState.cpp:604
1688 msgstr "Pravý Shift"
1689
1690 #: ../../../src/SDLInputState.cpp:695
13791691 msgid "ScrollLock"
1380 msgstr ""
1381
1382 #: ../../../src/SDLInputState.cpp:605
1692 msgstr "ScrollLock"
1693
1694 #: ../../../src/SDLInputState.cpp:696
13831695 msgid "Space"
1384 msgstr ""
1385
1386 #: ../../../src/SDLInputState.cpp:606
1387 msgid "Tab"
1388 msgstr ""
1389
1390 #: ../../../src/SDLInputState.cpp:620
1696 msgstr "Medzerník"
1697
1698 #: ../../../src/SDLInputState.cpp:710
1699 #, c-format
1700 msgid "M%d"
1701 msgstr ""
1702
1703 #: ../../../src/SDLInputState.cpp:716
13911704 #, c-format
13921705 msgid "Mouse %d"
13931706 msgstr ""
13941707
1395 #: ../../../src/SDLInputState.cpp:628
1708 #: ../../../src/SDLInputState.cpp:726
1709 #, c-format
1710 msgid "JX%d-"
1711 msgstr ""
1712
1713 #: ../../../src/SDLInputState.cpp:728
13961714 #, c-format
13971715 msgid "Axis %d -"
1398 msgstr ""
1399
1400 #: ../../../src/SDLInputState.cpp:630
1716 msgstr "Os %d -"
1717
1718 #: ../../../src/SDLInputState.cpp:732
1719 #, c-format
1720 msgid "JX%d+"
1721 msgstr ""
1722
1723 #: ../../../src/SDLInputState.cpp:734
14011724 #, c-format
14021725 msgid "Axis %d +"
1403 msgstr ""
1404
1405 #: ../../../src/SDLInputState.cpp:633
1726 msgstr "Os %d +"
1727
1728 #: ../../../src/SDLInputState.cpp:739
1729 #, c-format
1730 msgid "JB%d"
1731 msgstr ""
1732
1733 #: ../../../src/SDLInputState.cpp:741
14061734 #, c-format
14071735 msgid "Button %d"
1408 msgstr ""
1409
1410 #: ../../../src/SDLInputState.cpp:637
1411 msgid "(none)"
1412 msgstr ""
1413
1414 #: ../../../src/SDLInputState.cpp:677
1736 msgstr "Tlačidlo %d"
1737
1738 #: ../../../src/SDLInputState.cpp:788
14151739 msgid "Touch control D-Pad"
14161740 msgstr ""
14171741
1418 #: ../../../src/SDLInputState.cpp:701
1742 #: ../../../src/SDLInputState.cpp:812
14191743 msgid "Touch control buttons"
14201744 msgstr ""
14211745
1422 #: ../../../src/SDLInputState.cpp:716
1746 #: ../../../src/SDLInputState.cpp:827
14231747 msgid "Tap"
14241748 msgstr ""
14251749
1426 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1427 #: ../../../src/SDLInputState.cpp:768
1750 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1751 #, c-format
1752 msgid "Can not bind: %s"
1753 msgstr "Nemožno priradiť: %s"
1754
1755 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1756 #: ../../../src/SDLInputState.cpp:901
14281757 #, c-format
14291758 msgid "'%s' is no longer bound to:"
14301759 msgstr ""
14351764
14361765 #: ../../../src/Stats.cpp:39
14371766 msgid "Total amount of HP."
1438 msgstr ""
1767 msgstr "Celkové množstvo HP."
14391768
14401769 #: ../../../src/Stats.cpp:43
14411770 msgid "HP Regen"
1442 msgstr ""
1771 msgstr "Regenerácia HP"
14431772
14441773 #: ../../../src/Stats.cpp:44
14451774 msgid "Ticks of HP regen per minute."
14511780
14521781 #: ../../../src/Stats.cpp:49
14531782 msgid "Total amount of MP."
1454 msgstr ""
1783 msgstr "Celkové množstvo MP."
14551784
14561785 #: ../../../src/Stats.cpp:53
14571786 msgid "MP Regen"
1458 msgstr ""
1787 msgstr "Regenerácia MP"
14591788
14601789 #: ../../../src/Stats.cpp:54
14611790 msgid "Ticks of MP regen per minute."
14631792
14641793 #: ../../../src/Stats.cpp:58
14651794 msgid "Accuracy"
1466 msgstr ""
1795 msgstr "Presnosť"
14671796
14681797 #: ../../../src/Stats.cpp:59
14691798 msgid ""
14701799 "Accuracy rating. The enemy's Avoidance rating is subtracted from this value "
14711800 "to calculate your likeliness to land a direct hit."
14721801 msgstr ""
1802 "Hodnotenie presnosti. Vaša pravdepodobnosť priameho zásahu sa počíta "
1803 "odčítaním hodnotenia vyhýbania nepriateľa od tejto hodnoty."
14731804
14741805 #: ../../../src/Stats.cpp:63
14751806 msgid "Avoidance"
1476 msgstr ""
1807 msgstr "Vyhýbanie"
14771808
14781809 #: ../../../src/Stats.cpp:64
14791810 msgid ""
14801811 "Avoidance rating. This value is subtracted from the enemy's Accuracy rating "
14811812 "to calculate their likeliness to land a direct hit."
14821813 msgstr ""
1814 "Hodnotenie vyhýbania. Nepriateľova pravdepobnosť priameho zásahu sa počíta "
1815 "odčítaním tejto hodnoty od jeho hodnotenia presnosti."
14831816
14841817 #: ../../../src/Stats.cpp:68
14851818 msgid "Absorb Min"
14871820
14881821 #: ../../../src/Stats.cpp:69 ../../../src/Stats.cpp:74
14891822 msgid "Reduces the amount of damage taken."
1490 msgstr ""
1823 msgstr "Znižuje množstvo utŕženého zranenia."
14911824
14921825 #: ../../../src/Stats.cpp:73
14931826 msgid "Absorb Max"
14951828
14961829 #: ../../../src/Stats.cpp:78
14971830 msgid "Critical Hit Chance"
1498 msgstr ""
1831 msgstr "Šanca na kritický zásah"
14991832
15001833 #: ../../../src/Stats.cpp:79
15011834 msgid "Chance for an attack to do extra damage."
1502 msgstr ""
1835 msgstr "Šanca, že útok spôsobí väčšie zranenie."
15031836
15041837 #: ../../../src/Stats.cpp:83
15051838 msgid "Bonus XP"
1506 msgstr ""
1839 msgstr "Bonusové XP"
15071840
15081841 #: ../../../src/Stats.cpp:84
15091842 msgid "Increases the XP gained per kill."
1510 msgstr ""
1843 msgstr "Zvyšuje XP získané za zabitie."
15111844
15121845 #: ../../../src/Stats.cpp:88
15131846 #, c-format
15211854
15221855 #: ../../../src/Stats.cpp:93
15231856 msgid "Item Find Chance"
1524 msgstr ""
1857 msgstr "Šanca na nájdenie predmetu"
15251858
15261859 #: ../../../src/Stats.cpp:94
15271860 msgid "Increases the chance that an enemy will drop an item."
1528 msgstr ""
1861 msgstr "Zvyšuje šancu, že nepriateľ za sebou zanechá predmet."
15291862
15301863 #: ../../../src/Stats.cpp:98
15311864 msgid "Stealth"
1532 msgstr ""
1865 msgstr "Skrývanie"
15331866
15341867 #: ../../../src/Stats.cpp:99
15351868 msgid "Increases your ability to move undetected."
1536 msgstr ""
1869 msgstr "Zvyšuje vašu schopnosť nepozorovane sa pohybovať."
15371870
15381871 #: ../../../src/Stats.cpp:103
15391872 msgid "Poise"
1540 msgstr ""
1873 msgstr "Rovnováha"
15411874
15421875 #: ../../../src/Stats.cpp:104
15431876 msgid "Reduces your chance of stumbling when hit."
1544 msgstr ""
1877 msgstr "Znižuje šancu, že pri zásahu stratíte rovnováhu."
15451878
15461879 #: ../../../src/Stats.cpp:108
15471880 msgid "Missile Reflect Chance"
1548 msgstr ""
1881 msgstr "Šanca na odraz striel"
15491882
15501883 #: ../../../src/Stats.cpp:109
15511884 msgid "Increases your chance of reflecting missiles back at enemies."
1552 msgstr ""
1885 msgstr "Zvyšuje vašu šancu odraziť strely naspäť k nepriateľom."
15531886
15541887 #: ../../../src/Stats.cpp:113
15551888 msgid "Damage Reflection"
1556 msgstr ""
1889 msgstr "Odraz zranenia"
15571890
15581891 #: ../../../src/Stats.cpp:114
15591892 msgid "Deals a percentage of damage taken back to the attacker."
1560 msgstr ""
1893 msgstr "Spôsobí časť utŕženého zranenia späť útočníkovi. "
15611894
15621895 #: ../../../src/Stats.cpp:118
15631896 msgid "HP Steal"
1564 msgstr ""
1897 msgstr "Krádež HP"
15651898
15661899 #: ../../../src/Stats.cpp:119
15671900 msgid "Percentage of HP stolen per hit."
15691902
15701903 #: ../../../src/Stats.cpp:123
15711904 msgid "MP Steal"
1572 msgstr ""
1905 msgstr "Krádež MP"
15731906
15741907 #: ../../../src/Stats.cpp:124
15751908 msgid "Percentage of MP stolen per hit."
15771910
15781911 #: ../../../src/Stats.cpp:128
15791912 msgid "Base HP"
1580 msgstr ""
1913 msgstr "Základné HP"
15811914
15821915 #: ../../../src/Stats.cpp:133
15831916 msgid "Base MP"
1584 msgstr ""
1917 msgstr "Základné MP"
15851918
15861919 #: ../../../src/Utils.cpp:346
15871920 msgid "k"
1588 msgstr ""
1589
1590 #: ../../../src/Utils.cpp:580
1921 msgstr "k"
1922
1923 #: ../../../src/Utils.cpp:616
15911924 #, c-format
15921925 msgid "%s second"
1593 msgstr ""
1594
1595 #: ../../../src/Utils.cpp:583
1926 msgstr "%s sekunda"
1927
1928 #: ../../../src/Utils.cpp:619
15961929 #, c-format
15971930 msgid "%s seconds"
1598 msgstr ""
1931 msgstr "%s sekúnd/-y"
15991932
16001933 #: ../../../src/Version.cpp:139
16011934 msgid "or newer"
1602 msgstr ""
1935 msgstr "alebo novšia"
16031936
16041937 #: ../../../src/Version.cpp:142
16051938 msgid "or older"
1606 msgstr ""
1939 msgstr "alebo staršia"
1010 msgstr ""
1111 "Project-Id-Version: PACKAGE VERSION\n"
1212 "Report-Msgid-Bugs-To: \n"
13 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
13 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1414 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1515 "Last-Translator: Justin Jacobs <jajdorkster@gmail.com>, 2018\n"
1616 "Language-Team: Swedish (https://www.transifex.com/flareorg/teams/84925/sv/)\n"
2020 "Language: sv\n"
2121 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
2222
23 #: ../../../src/Avatar.cpp:367
23 #: ../../../src/Avatar.cpp:387
24 msgid "Your health is low!"
25 msgstr ""
26
27 #: ../../../src/Avatar.cpp:419
2428 #, c-format
2529 msgid "Congratulations, you have reached level %d!"
2630 msgstr "Grattis, du har nått nivå %d!"
2731
28 #: ../../../src/Avatar.cpp:369
29 msgid "You may increase one attribute through the Character Menu."
30 msgstr "Du får nu öka på en egenskap i karaktärsmenyn."
31
32 #: ../../../src/Avatar.cpp:583
32 #: ../../../src/Avatar.cpp:421
33 msgid "You may increase one or more attributes through the Character Menu."
34 msgstr ""
35
36 #: ../../../src/Avatar.cpp:425
37 msgid "You may unlock one or more abilities through the Powers Menu."
38 msgstr ""
39
40 #: ../../../src/Avatar.cpp:692
3341 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3442 msgstr ""
3543
36 #: ../../../src/Avatar.cpp:589
44 #: ../../../src/Avatar.cpp:698
3745 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
3846 msgstr ""
3947
40 #: ../../../src/Avatar.cpp:839
48 #: ../../../src/Avatar.cpp:949
4149 msgid "Transformation expired. You have been moved back to a safe place."
4250 msgstr ""
4351
4654 msgid "%d %s removed."
4755 msgstr "%d %s borttaget."
4856
49 #: ../../../src/CampaignManager.cpp:162
57 #: ../../../src/CampaignManager.cpp:165
58 #, c-format
59 msgid "%s x%d removed."
60 msgstr ""
61
62 #: ../../../src/CampaignManager.cpp:167
5063 #, c-format
5164 msgid "%s removed."
5265 msgstr "%s borttaget."
5366
54 #: ../../../src/CampaignManager.cpp:175
67 #: ../../../src/CampaignManager.cpp:180
5568 #, c-format
5669 msgid "You receive %s."
5770 msgstr "Du får %s."
5871
59 #: ../../../src/CampaignManager.cpp:177
72 #: ../../../src/CampaignManager.cpp:182
6073 #, c-format
6174 msgid "You receive %s x%d."
6275 msgstr "Du får %s x%d."
6376
64 #: ../../../src/CampaignManager.cpp:186
77 #: ../../../src/CampaignManager.cpp:191
6578 #, c-format
6679 msgid "You receive %d %s."
6780 msgstr "Du får %d %s."
6881
69 #: ../../../src/CampaignManager.cpp:195
82 #: ../../../src/CampaignManager.cpp:200
7083 #, c-format
7184 msgid "You receive %d XP."
7285 msgstr "Du får %d XP."
7386
74 #: ../../../src/CampaignManager.cpp:201
87 #: ../../../src/CampaignManager.cpp:206
7588 msgid "HP restored."
7689 msgstr "HP äterställd."
7790
78 #: ../../../src/CampaignManager.cpp:205
91 #: ../../../src/CampaignManager.cpp:210
7992 msgid "MP restored."
8093 msgstr "MP återställd."
8194
82 #: ../../../src/CampaignManager.cpp:210
95 #: ../../../src/CampaignManager.cpp:215
8396 msgid "HP and MP restored."
8497 msgstr "HP och MP återställt."
8598
86 #: ../../../src/CampaignManager.cpp:214
99 #: ../../../src/CampaignManager.cpp:219
87100 msgid "Negative effects removed."
88101 msgstr "Negativa effekter borttagna."
89102
90 #: ../../../src/CampaignManager.cpp:220
103 #: ../../../src/CampaignManager.cpp:225
91104 msgid "HP and MP restored, negative effects removed"
92105 msgstr "HP och MP återställt, negativa effekter borttagna"
93106
105118 "The default renderer that is often faster than the SDL software renderer."
106119 msgstr ""
107120
108 #: ../../../src/EngineSettings.cpp:561
121 #: ../../../src/EngineSettings.cpp:572
109122 msgid "Adventurer"
110123 msgstr "Äventyrare"
111124
112 #: ../../../src/Entity.cpp:511
125 #: ../../../src/Entity.cpp:522
113126 msgid "miss"
114127 msgstr "miss"
115128
116 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
117 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
129 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
130 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
118131 #, c-format
119132 msgid "+%d HP"
120133 msgstr "+%d HP"
121134
122 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
123 #: ../../../src/StatBlock.cpp:822
135 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
136 #: ../../../src/StatBlock.cpp:830
124137 #, c-format
125138 msgid "+%d MP"
126139 msgstr "+%d MP"
127140
128 #: ../../../src/EventManager.cpp:738
141 #: ../../../src/EventManager.cpp:782
129142 msgid "Unknown destination"
130143 msgstr "Okänd destination"
131144
132 #: ../../../src/GameStateConfigBase.cpp:89
133 #: ../../../src/GameStateConfigBase.cpp:110
145 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
146 msgid "Loading..."
147 msgstr "Laddar..."
148
149 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
150 msgid "Delete Save"
151 msgstr "Radera sparat spel"
152
153 #: ../../../src/GameStateLoad.cpp:90
154 msgid "Delete this save?"
155 msgstr "Vill du radera det sparade spelet?"
156
157 #: ../../../src/GameStateLoad.cpp:92
158 msgid "Exit to Title"
159 msgstr "Avsluta och gå till huvudmenyn"
160
161 #: ../../../src/GameStateLoad.cpp:95
162 msgid "New Game"
163 msgstr "Nytt spel"
164
165 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
166 msgid "Choose a Slot"
167 msgstr "Välj en plats"
168
169 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
170 msgid "Enable a story mod to continue"
171 msgstr "Aktivera en story mod för att fortsätta"
172
173 #: ../../../src/GameStateLoad.cpp:597
174 msgid "Load Game"
175 msgstr "Ladda spel"
176
177 #: ../../../src/GameStateLoad.cpp:706
178 msgid "Entering game world..."
179 msgstr "Öppnar spelvärlden..."
180
181 #: ../../../src/GameStateLoad.cpp:709
182 msgid "Loading saved game..."
183 msgstr "Läser in sparat spel..."
184
185 #: ../../../src/GameStateLoad.cpp:742
186 msgid "Invalid save"
187 msgstr ""
188
189 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
190 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
191 #: ../../../src/MenuPowers.cpp:1543
192 #, c-format
193 msgid "Level %d"
194 msgstr "Nivå %d"
195
196 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
197 #: ../../../src/MenuConfig.cpp:244
198 msgid "Cancel"
199 msgstr "Avbryt"
200
201 #: ../../../src/GameStateNew.cpp:68
202 msgid "Create"
203 msgstr "Skapa"
204
205 #: ../../../src/GameStateNew.cpp:76
206 msgid "Randomize"
207 msgstr ""
208
209 #: ../../../src/GameStateNew.cpp:92
210 msgid "Choose a Portrait"
211 msgstr "Välj ett ansikte"
212
213 #: ../../../src/GameStateNew.cpp:96
214 msgid "Choose a Name"
215 msgstr "Ange namn"
216
217 #: ../../../src/GameStateNew.cpp:100
218 msgid "Permadeath?"
219 msgstr "Permanent död?"
220
221 #: ../../../src/GameStateNew.cpp:104
222 msgid "Choose a Class"
223 msgstr "Välj en Klass"
224
225 #: ../../../src/GameStateTitle.cpp:107
226 msgid "Play Game"
227 msgstr "Starta spelet"
228
229 #: ../../../src/GameStateTitle.cpp:110
230 msgid "Enable a core mod to continue"
231 msgstr "Aktivera en core mod för att fortsätta"
232
233 #: ../../../src/GameStateTitle.cpp:114
234 msgid "Configuration"
235 msgstr "Konfiguration"
236
237 #: ../../../src/GameStateTitle.cpp:117
238 msgid "Credits"
239 msgstr ""
240
241 #: ../../../src/GameStateTitle.cpp:120
242 msgid "Exit Game"
243 msgstr "Avsluta spelet"
244
245 #: ../../../src/InputState.cpp:407
246 msgid "Accept"
247 msgstr "Acceptera"
248
249 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
250 #: ../../../src/SDLInputState.cpp:698
251 msgid "Up"
252 msgstr "Upp"
253
254 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
255 #: ../../../src/SDLInputState.cpp:676
256 msgid "Down"
257 msgstr "Ner"
258
259 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
260 #: ../../../src/SDLInputState.cpp:683
261 msgid "Left"
262 msgstr "Vänster"
263
264 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
265 #: ../../../src/SDLInputState.cpp:693
266 msgid "Right"
267 msgstr "Höger"
268
269 #: ../../../src/InputState.cpp:412
270 msgid "Bar1"
271 msgstr ""
272
273 #: ../../../src/InputState.cpp:413
274 msgid "Bar2"
275 msgstr ""
276
277 #: ../../../src/InputState.cpp:414
278 msgid "Bar3"
279 msgstr ""
280
281 #: ../../../src/InputState.cpp:415
282 msgid "Bar4"
283 msgstr ""
284
285 #: ../../../src/InputState.cpp:416
286 msgid "Bar5"
287 msgstr ""
288
289 #: ../../../src/InputState.cpp:417
290 msgid "Bar6"
291 msgstr ""
292
293 #: ../../../src/InputState.cpp:418
294 msgid "Bar7"
295 msgstr ""
296
297 #: ../../../src/InputState.cpp:419
298 msgid "Bar8"
299 msgstr ""
300
301 #: ../../../src/InputState.cpp:420
302 msgid "Bar9"
303 msgstr ""
304
305 #: ../../../src/InputState.cpp:421
306 msgid "Bar0"
307 msgstr ""
308
309 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
310 #: ../../../src/MenuCharacter.cpp:54
311 msgid "Character"
312 msgstr "Karaktär"
313
314 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
315 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
316 msgid "Inventory"
317 msgstr "Inventarie"
318
319 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
320 #: ../../../src/MenuPowers.cpp:167
321 msgid "Powers"
322 msgstr "Krafter"
323
324 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
325 #: ../../../src/MenuLog.cpp:72
326 msgid "Log"
327 msgstr "Logg"
328
329 #: ../../../src/InputState.cpp:426
330 msgid "Main1"
331 msgstr ""
332
333 #: ../../../src/InputState.cpp:427
334 msgid "Main2"
335 msgstr ""
336
337 #: ../../../src/InputState.cpp:428
338 msgid "Ctrl"
339 msgstr ""
340
341 #: ../../../src/InputState.cpp:429
342 msgid "Shift"
343 msgstr ""
344
345 #: ../../../src/InputState.cpp:430
346 msgid "Alt"
347 msgstr ""
348
349 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
350 msgid "Delete"
351 msgstr "Ta bort"
352
353 #: ../../../src/InputState.cpp:432
354 msgid "ActionBar Accept"
355 msgstr ""
356
357 #: ../../../src/InputState.cpp:433
358 msgid "ActionBar Left"
359 msgstr ""
360
361 #: ../../../src/InputState.cpp:434
362 msgid "ActionBar Right"
363 msgstr ""
364
365 #: ../../../src/InputState.cpp:435
366 msgid "ActionBar Use"
367 msgstr ""
368
369 #: ../../../src/InputState.cpp:436
370 msgid "Developer Menu"
371 msgstr ""
372
373 #: ../../../src/InputState.cpp:438
374 msgid "Left Mouse"
375 msgstr ""
376
377 #: ../../../src/InputState.cpp:439
378 msgid "Middle Mouse"
379 msgstr ""
380
381 #: ../../../src/InputState.cpp:440
382 msgid "Right Mouse"
383 msgstr ""
384
385 #: ../../../src/InputState.cpp:441
386 msgid "Wheel Up"
387 msgstr ""
388
389 #: ../../../src/InputState.cpp:442
390 msgid "Wheel Down"
391 msgstr ""
392
393 #: ../../../src/InputState.cpp:443
394 msgid "Mouse X1"
395 msgstr ""
396
397 #: ../../../src/InputState.cpp:444
398 msgid "Mouse X2"
399 msgstr ""
400
401 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
402 msgid "Unknown Item"
403 msgstr ""
404
405 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
406 #, c-format
407 msgid "%d%% Speed"
408 msgstr ""
409
410 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
411 #, c-format
412 msgid "%d%% Attack Speed"
413 msgstr ""
414
415 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
416 #: ../../../src/MenuPowers.cpp:832
417 #, c-format
418 msgid "Resistance (%s)"
419 msgstr ""
420
421 #: ../../../src/ItemManager.cpp:714
422 #, c-format
423 msgid "Requires %s"
424 msgstr ""
425
426 #: ../../../src/ItemManager.cpp:763
427 msgid "Quest Item"
428 msgstr "Uppdragsrelaterat föremål"
429
430 #: ../../../src/ItemManager.cpp:790
431 #, c-format
432 msgid "Quality: %s"
433 msgstr "Kvalitet: %s"
434
435 #: ../../../src/ItemManager.cpp:815
436 #, c-format
437 msgid "Absorb: %d-%d"
438 msgstr "Absorberar: %d-%d"
439
440 #: ../../../src/ItemManager.cpp:817
441 #, c-format
442 msgid "Absorb: %d"
443 msgstr "Absorberar: %d"
444
445 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
446 #: ../../../src/MenuPowers.cpp:1133
447 #, c-format
448 msgid "Requires Level %d"
449 msgstr "Kräver nivå %d"
450
451 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
452 #: ../../../src/MenuPowers.cpp:1124
453 #, c-format
454 msgid "Requires %s %d"
455 msgstr ""
456
457 #: ../../../src/ItemManager.cpp:879
458 #, c-format
459 msgid "Requires Class: %s"
460 msgstr ""
461
462 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
463 #, c-format
464 msgid "Buy Price: %d %s"
465 msgstr "Köpesumma: %d %s"
466
467 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
468 #, c-format
469 msgid "Buy Price: %d %s each"
470 msgstr "Köpesumma: %d %s per styck"
471
472 #: ../../../src/ItemManager.cpp:916
473 #, c-format
474 msgid "Sell Price: %d %s"
475 msgstr "Säljes för: %d %s"
476
477 #: ../../../src/ItemManager.cpp:918
478 #, c-format
479 msgid "Sell Price: %d %s each"
480 msgstr "Säljes för: %d %s per styck"
481
482 #: ../../../src/ItemManager.cpp:927
483 msgid "Set:"
484 msgstr ""
485
486 #: ../../../src/ItemManager.cpp:934
487 #, c-format
488 msgid "%d items:"
489 msgstr ""
490
491 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
492 #, c-format
493 msgid "Press [%s] to use"
494 msgstr ""
495
496 #: ../../../src/ItemManager.cpp:951
497 #, c-format
498 msgid "Press [%s] to read"
499 msgstr ""
500
501 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
502 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
503 #, c-format
504 msgid "Hotkey: %s"
505 msgstr ""
506
507 #: ../../../src/MenuActionBar.cpp:599
508 msgid "Not enough MP."
509 msgstr ""
510
511 #: ../../../src/MenuActiveEffects.cpp:124
512 #, c-format
513 msgid "x%d"
514 msgstr ""
515
516 #: ../../../src/MenuActiveEffects.cpp:219
517 msgid "Remaining:"
518 msgstr ""
519
520 #: ../../../src/MenuActiveEffects.cpp:225
521 #, c-format
522 msgid "x%d stacks"
523 msgstr ""
524
525 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
526 msgid "Name"
527 msgstr "Namn"
528
529 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
530 msgid "Level"
531 msgstr "Nivå"
532
533 #: ../../../src/MenuCharacter.cpp:310
534 #, c-format
535 msgid "%d unspent stat point"
536 msgstr ""
537
538 #: ../../../src/MenuCharacter.cpp:313
539 #, c-format
540 msgid "%d unspent stat points"
541 msgstr ""
542
543 #: ../../../src/MenuCharacter.cpp:355
544 #, c-format
545 msgid "Reduces the damage taken from \"%s\" elemental attacks."
546 msgstr ""
547
548 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
549 #, c-format
550 msgid "XP: %d"
551 msgstr "XP: %d"
552
553 #: ../../../src/MenuCharacter.cpp:367
554 #, c-format
555 msgid "Next: %d"
556 msgstr "Nästa: %d"
557
558 #: ../../../src/MenuCharacter.cpp:373
559 #, c-format
560 msgid "base (%d), bonus (%d)"
561 msgstr "bas (%d), bonus (%d)"
562
563 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
564 msgid "Related stats:"
565 msgstr ""
566
567 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
568 #, c-format
569 msgid "Each level grants %d."
570 msgstr ""
571
572 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
573 #, c-format
574 msgid "Each point of %s grants %d."
575 msgstr ""
576
577 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
578 msgid "Clear"
579 msgstr ""
580
581 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
582 msgid "Assign:"
583 msgstr ""
584
585 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
134586 msgid "Defaults"
135587 msgstr "Standard"
136588
137 #: ../../../src/GameStateConfigBase.cpp:89
589 #: ../../../src/MenuConfig.cpp:123
138590 msgid "Reset ALL settings?"
139591 msgstr "Återställ samtliga inställningar?"
140592
141 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
593 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
142594 msgid "OK"
143595 msgstr "OK"
144596
145 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
146 #: ../../../src/InputState.cpp:401
147 msgid "Cancel"
148 msgstr "Avbryt"
149
150 #: ../../../src/GameStateConfigBase.cpp:160
151 #: ../../../src/GameStateConfigDesktop.cpp:130
597 #: ../../../src/MenuConfig.cpp:246
598 msgid "Continue"
599 msgstr ""
600
601 #: ../../../src/MenuConfig.cpp:248
602 msgid "Save Game"
603 msgstr ""
604
605 #: ../../../src/MenuConfig.cpp:291
606 msgid "Default"
607 msgstr ""
608
609 #: ../../../src/MenuConfig.cpp:291
610 msgid ""
611 "Show all loot tooltips, except for those that would be obscured by the "
612 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
613 msgstr ""
614
615 #: ../../../src/MenuConfig.cpp:292
616 msgid "Show all"
617 msgstr ""
618
619 #: ../../../src/MenuConfig.cpp:292
620 msgid ""
621 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
622 msgstr ""
623
624 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
625 msgid "Hidden"
626 msgstr ""
627
628 #: ../../../src/MenuConfig.cpp:293
629 msgid ""
630 "Always hide loot tooltips, except for when a piece of loot is hovered with "
631 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
632 msgstr ""
633
634 #: ../../../src/MenuConfig.cpp:296
635 msgid "Visible"
636 msgstr ""
637
638 #: ../../../src/MenuConfig.cpp:297
639 msgid "Visible (2x zoom)"
640 msgstr ""
641
642 #: ../../../src/MenuConfig.cpp:301
643 msgid ""
644 "Controls the type of warning to be activated when the player is below the "
645 "low health threshold."
646 msgstr ""
647
648 #: ../../../src/MenuConfig.cpp:302
649 msgid "- Display a message"
650 msgstr ""
651
652 #: ../../../src/MenuConfig.cpp:303
653 msgid "- Play a sound"
654 msgstr ""
655
656 #: ../../../src/MenuConfig.cpp:304
657 msgid "- Change the cursor"
658 msgstr ""
659
660 #: ../../../src/MenuConfig.cpp:306
661 msgid "Disabled"
662 msgstr ""
663
664 #: ../../../src/MenuConfig.cpp:307
665 msgid "All"
666 msgstr ""
667
668 #: ../../../src/MenuConfig.cpp:308
669 msgid "Message & Cursor"
670 msgstr ""
671
672 #: ../../../src/MenuConfig.cpp:309
673 msgid "Message & Sound"
674 msgstr ""
675
676 #: ../../../src/MenuConfig.cpp:310
677 msgid "Sound & Cursor"
678 msgstr ""
679
680 #: ../../../src/MenuConfig.cpp:311
681 msgid "Message"
682 msgstr ""
683
684 #: ../../../src/MenuConfig.cpp:312
685 msgid "Cursor"
686 msgstr ""
687
688 #: ../../../src/MenuConfig.cpp:313
689 msgid "Sound"
690 msgstr ""
691
692 #: ../../../src/MenuConfig.cpp:319
693 msgid ""
694 "When the player's health drops below the given threshold, the low health "
695 "notifications are triggered if one or more of them is enabled."
696 msgstr ""
697
698 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
699 msgid "Exit"
700 msgstr "Avsluta"
701
702 #: ../../../src/MenuConfig.cpp:333
703 msgid "Video"
704 msgstr "Video"
705
706 #: ../../../src/MenuConfig.cpp:334
152707 msgid "Audio"
153708 msgstr "Ljud"
154709
155 #: ../../../src/GameStateConfigBase.cpp:161
156 #: ../../../src/GameStateConfigDesktop.cpp:131
710 #: ../../../src/MenuConfig.cpp:335
157711 msgid "Interface"
158712 msgstr "Gränssnitt"
159713
160 #: ../../../src/GameStateConfigBase.cpp:162
161 #: ../../../src/GameStateConfigDesktop.cpp:134
714 #: ../../../src/MenuConfig.cpp:336
715 msgid "Input"
716 msgstr "Inmatning"
717
718 #: ../../../src/MenuConfig.cpp:337
719 msgid "Keybindings"
720 msgstr "Tangentbindningar"
721
722 #: ../../../src/MenuConfig.cpp:338
162723 msgid "Mods"
163724 msgstr "Mods"
164725
165 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
726 #: ../../../src/MenuConfig.cpp:350
727 msgid "Paused"
728 msgstr ""
729
730 #: ../../../src/MenuConfig.cpp:353
731 msgid "Time Played"
732 msgstr ""
733
734 #: ../../../src/MenuConfig.cpp:359
735 msgid "Renderer"
736 msgstr ""
737
738 #: ../../../src/MenuConfig.cpp:360
739 msgid "Full Screen Mode"
740 msgstr "Fullskärmsläge"
741
742 #: ../../../src/MenuConfig.cpp:361
743 msgid "Hardware surfaces"
744 msgstr ""
745
746 #: ../../../src/MenuConfig.cpp:362
747 msgid "V-Sync"
748 msgstr ""
749
750 #: ../../../src/MenuConfig.cpp:363
751 msgid "Texture Filtering"
752 msgstr ""
753
754 #: ../../../src/MenuConfig.cpp:364
755 msgid "DPI scaling"
756 msgstr ""
757
758 #: ../../../src/MenuConfig.cpp:365
759 msgid "Parallax Layers"
760 msgstr ""
761
762 #: ../../../src/MenuConfig.cpp:366
763 msgid "Allow changing gamma"
764 msgstr "Tillåt ändring av gamma"
765
766 #: ../../../src/MenuConfig.cpp:367
767 msgid "Gamma"
768 msgstr "Gamma"
769
770 #: ../../../src/MenuConfig.cpp:369
771 msgid "Sound Volume"
772 msgstr "Ljudvolym"
773
774 #: ../../../src/MenuConfig.cpp:370
166775 msgid "Music Volume"
167776 msgstr "Musikvolym"
168777
169 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
170 msgid "Sound Volume"
171 msgstr "Ljudvolym"
172
173 #: ../../../src/GameStateConfigBase.cpp:257
778 #: ../../../src/MenuConfig.cpp:372
174779 msgid "Language"
175780 msgstr "Språk"
176781
177 #: ../../../src/GameStateConfigBase.cpp:266
782 #: ../../../src/MenuConfig.cpp:373
178783 msgid "Show FPS"
179784 msgstr "Visa FPS"
180785
181 #: ../../../src/GameStateConfigBase.cpp:270
786 #: ../../../src/MenuConfig.cpp:374
787 msgid "Hardware mouse cursor"
788 msgstr ""
789
790 #: ../../../src/MenuConfig.cpp:375
182791 msgid "Colorblind Mode"
183792 msgstr "Läge för färgblinda"
184793
185 #: ../../../src/GameStateConfigBase.cpp:274
186 msgid "Hardware mouse cursor"
187 msgstr ""
188
189 #: ../../../src/GameStateConfigBase.cpp:278
794 #: ../../../src/MenuConfig.cpp:376
190795 msgid "Developer Mode"
191796 msgstr ""
192797
193 #: ../../../src/GameStateConfigBase.cpp:282
798 #: ../../../src/MenuConfig.cpp:377
194799 msgid "Subtitles"
195800 msgstr ""
196801
197 #: ../../../src/GameStateConfigBase.cpp:286
198 msgid "Active Mods"
199 msgstr "Aktiva Mods"
200
201 #: ../../../src/GameStateConfigBase.cpp:295
202 msgid "Available Mods"
203 msgstr "Tillgängliga Mods"
204
205 #: ../../../src/GameStateConfigBase.cpp:314
206 msgid "<< Disable"
207 msgstr "<< Inaktivera"
208
209 #: ../../../src/GameStateConfigBase.cpp:320
210 msgid "Enable >>"
211 msgstr "Aktivera >>"
212
213 #: ../../../src/GameStateConfigBase.cpp:873
214 msgid "Version:"
215 msgstr ""
216
217 #: ../../../src/GameStateConfigBase.cpp:878
218 msgid "Game:"
219 msgstr ""
220
221 #: ../../../src/GameStateConfigBase.cpp:883
222 msgid "Engine version:"
223 msgstr ""
224
225 #: ../../../src/GameStateConfigBase.cpp:891
226 msgid "Requires mods:"
227 msgstr ""
228
229 #: ../../../src/GameStateConfigDesktop.cpp:83
230 #: ../../../src/GameStateConfigDesktop.cpp:751
231 msgid "Clear"
232 msgstr ""
233
234 #: ../../../src/GameStateConfigDesktop.cpp:83
235 #: ../../../src/GameStateConfigDesktop.cpp:749
236 msgid "Assign:"
237 msgstr ""
238
239 #: ../../../src/GameStateConfigDesktop.cpp:128
240 msgid "Video"
241 msgstr "Video"
242
243 #: ../../../src/GameStateConfigDesktop.cpp:132
244 msgid "Input"
245 msgstr "Inmatning"
246
247 #: ../../../src/GameStateConfigDesktop.cpp:133
248 msgid "Keybindings"
249 msgstr "Tangentbindningar"
250
251 #: ../../../src/GameStateConfigDesktop.cpp:188
802 #: ../../../src/MenuConfig.cpp:378
803 msgid "Loot tooltip visibility"
804 msgstr ""
805
806 #: ../../../src/MenuConfig.cpp:379
807 msgid "Mini-map mode"
808 msgstr ""
809
810 #: ../../../src/MenuConfig.cpp:380
811 msgid "Always show stat bar labels"
812 msgstr ""
813
814 #: ../../../src/MenuConfig.cpp:381
815 msgid "Allow stat bar auto-hiding"
816 msgstr ""
817
818 #: ../../../src/MenuConfig.cpp:382
819 msgid "Show combat text"
820 msgstr "Visa text vid strid"
821
822 #: ../../../src/MenuConfig.cpp:383
823 msgid "Automatically equip items"
824 msgstr ""
825
826 #: ../../../src/MenuConfig.cpp:384
827 msgid "Show hidden entity markers"
828 msgstr ""
829
830 #: ../../../src/MenuConfig.cpp:385
831 msgid "Low health notification"
832 msgstr ""
833
834 #: ../../../src/MenuConfig.cpp:386
835 msgid "Low health threshold"
836 msgstr ""
837
838 #: ../../../src/MenuConfig.cpp:389
839 msgid "Joystick"
840 msgstr "Joystick"
841
842 #: ../../../src/MenuConfig.cpp:390
843 msgid "Move hero using mouse"
844 msgstr "Flytta hjälten med muspekaren"
845
846 #: ../../../src/MenuConfig.cpp:391
847 msgid "Mouse aim"
848 msgstr "Sikta med muspekaren"
849
850 #: ../../../src/MenuConfig.cpp:392
851 msgid "Do not use mouse"
852 msgstr "Använd inte muspekare"
853
854 #: ../../../src/MenuConfig.cpp:393
855 msgid "Swap mouse movement button"
856 msgstr ""
857
858 #: ../../../src/MenuConfig.cpp:394
859 msgid "Attack with mouse movement"
860 msgstr ""
861
862 #: ../../../src/MenuConfig.cpp:395
863 msgid "Joystick Deadzone"
864 msgstr "Joystick Dödzon"
865
866 #: ../../../src/MenuConfig.cpp:405
867 #, c-format
868 msgid "Primary binding: %s"
869 msgstr ""
870
871 #: ../../../src/MenuConfig.cpp:406
872 #, c-format
873 msgid "Alternate binding: %s"
874 msgstr ""
875
876 #: ../../../src/MenuConfig.cpp:407
877 #, c-format
878 msgid "Joystick binding: %s"
879 msgstr ""
880
881 #: ../../../src/MenuConfig.cpp:508
252882 msgid ""
253883 "Will try to store surfaces in video memory versus system memory. The effect "
254884 "this has on performance depends on the renderer."
255885 msgstr ""
256886
257 #: ../../../src/GameStateConfigDesktop.cpp:189
887 #: ../../../src/MenuConfig.cpp:509
258888 msgid ""
259889 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
260890 "windowed mode or input lag."
261891 msgstr ""
262892
263 #: ../../../src/GameStateConfigDesktop.cpp:190
893 #: ../../../src/MenuConfig.cpp:510
264894 msgid ""
265895 "When enabled, this uses the screen DPI in addition to the window dimensions "
266896 "to scale the rendering resolution. Otherwise, only the window dimensions are"
267897 " used."
268898 msgstr ""
269899
270 #: ../../../src/GameStateConfigDesktop.cpp:191
900 #: ../../../src/MenuConfig.cpp:511
271901 msgid ""
272902 "This enables parallax (non-tile) layers. Disabling this setting can improve "
273903 "performance in some cases."
274904 msgstr ""
275905
276 #: ../../../src/GameStateConfigDesktop.cpp:192
277 msgid "Experimental"
278 msgstr "Experimentell"
279
280 #: ../../../src/GameStateConfigDesktop.cpp:193
281 msgid "For handheld devices"
282 msgstr "För handhållna neheter"
283
284 #: ../../../src/GameStateConfigDesktop.cpp:211
285 msgid "Renderer"
286 msgstr ""
287
288 #: ../../../src/GameStateConfigDesktop.cpp:227
289 msgid "Full Screen Mode"
290 msgstr "Fullskärmsläge"
291
292 #: ../../../src/GameStateConfigDesktop.cpp:231
293 msgid "Move hero using mouse"
294 msgstr "Flytta hjälten med muspekaren"
295
296 #: ../../../src/GameStateConfigDesktop.cpp:235
297 msgid "Hardware surfaces"
298 msgstr ""
299
300 #: ../../../src/GameStateConfigDesktop.cpp:239
301 msgid "V-Sync"
302 msgstr ""
303
304 #: ../../../src/GameStateConfigDesktop.cpp:243
305 msgid "Texture Filtering"
306 msgstr ""
307
308 #: ../../../src/GameStateConfigDesktop.cpp:247
309 msgid "DPI scaling"
310 msgstr ""
311
312 #: ../../../src/GameStateConfigDesktop.cpp:251
313 msgid "Parallax Layers"
314 msgstr ""
315
316 #: ../../../src/GameStateConfigDesktop.cpp:255
317 msgid "Allow changing gamma"
318 msgstr "Tillåt ändring av gamma"
319
320 #: ../../../src/GameStateConfigDesktop.cpp:259
321 msgid "Gamma"
322 msgstr "Gamma"
323
324 #: ../../../src/GameStateConfigDesktop.cpp:263
325 msgid "Use joystick"
326 msgstr "Använd joystick"
327
328 #: ../../../src/GameStateConfigDesktop.cpp:267
329 msgid "Joystick"
330 msgstr "Joystick"
331
332 #: ../../../src/GameStateConfigDesktop.cpp:283
333 msgid "Mouse aim"
334 msgstr "Sikta med muspekaren"
335
336 #: ../../../src/GameStateConfigDesktop.cpp:287
337 msgid "Do not use mouse"
338 msgstr "Använd inte muspekare"
339
340 #: ../../../src/GameStateConfigDesktop.cpp:291
341 msgid "Joystick Deadzone"
342 msgstr "Joystick Dödzon"
343
344 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
345 msgid "Loading..."
346 msgstr "Laddar..."
347
348 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
349 msgid "Delete Save"
350 msgstr "Radera sparat spel"
351
352 #: ../../../src/GameStateLoad.cpp:88
353 msgid "Delete this save?"
354 msgstr "Vill du radera det sparade spelet?"
355
356 #: ../../../src/GameStateLoad.cpp:90
357 msgid "Exit to Title"
358 msgstr "Avsluta och gå till huvudmenyn"
359
360 #: ../../../src/GameStateLoad.cpp:93
361 msgid "New Game"
362 msgstr "Nytt spel"
363
364 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
365 msgid "Choose a Slot"
366 msgstr "Välj en plats"
367
368 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
369 msgid "Enable a story mod to continue"
370 msgstr "Aktivera en story mod för att fortsätta"
371
372 #: ../../../src/GameStateLoad.cpp:589
373 msgid "Load Game"
374 msgstr "Ladda spel"
375
376 #: ../../../src/GameStateLoad.cpp:695
377 msgid "Entering game world..."
378 msgstr "Öppnar spelvärlden..."
379
380 #: ../../../src/GameStateLoad.cpp:698
381 msgid "Loading saved game..."
382 msgstr "Läser in sparat spel..."
383
384 #: ../../../src/GameStateLoad.cpp:731
385 msgid "Invalid save"
386 msgstr ""
387
388 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
389 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
390 #: ../../../src/MenuPowers.cpp:1542
391 #, c-format
392 msgid "Level %d"
393 msgstr "Nivå %d"
394
395 #: ../../../src/GameStateNew.cpp:68
396 msgid "Create"
397 msgstr "Skapa"
398
399 #: ../../../src/GameStateNew.cpp:76
400 msgid "Randomize"
401 msgstr ""
402
403 #: ../../../src/GameStateNew.cpp:92
404 msgid "Choose a Portrait"
405 msgstr "Välj ett ansikte"
406
407 #: ../../../src/GameStateNew.cpp:96
408 msgid "Choose a Name"
409 msgstr "Ange namn"
410
411 #: ../../../src/GameStateNew.cpp:100
412 msgid "Permadeath?"
413 msgstr "Permanent död?"
414
415 #: ../../../src/GameStateNew.cpp:104
416 msgid "Choose a Class"
417 msgstr "Välj en Klass"
418
419 #: ../../../src/GameStateTitle.cpp:108
420 msgid "Play Game"
421 msgstr "Starta spelet"
422
423 #: ../../../src/GameStateTitle.cpp:111
424 msgid "Enable a core mod to continue"
425 msgstr "Aktivera en core mod för att fortsätta"
426
427 #: ../../../src/GameStateTitle.cpp:115
428 msgid "Configuration"
429 msgstr "Konfiguration"
430
431 #: ../../../src/GameStateTitle.cpp:118
432 msgid "Credits"
433 msgstr ""
434
435 #: ../../../src/GameStateTitle.cpp:121
436 msgid "Exit Game"
437 msgstr "Avsluta spelet"
438
439 #: ../../../src/InputState.cpp:402
440 msgid "Accept"
441 msgstr "Acceptera"
442
443 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
444 msgid "Up"
445 msgstr "Upp"
446
447 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
448 msgid "Down"
449 msgstr "Ner"
450
451 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
452 msgid "Left"
453 msgstr "Vänster"
454
455 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
456 msgid "Right"
457 msgstr "Höger"
458
459 #: ../../../src/InputState.cpp:407
460 msgid "Bar1"
461 msgstr ""
462
463 #: ../../../src/InputState.cpp:408
464 msgid "Bar2"
465 msgstr ""
466
467 #: ../../../src/InputState.cpp:409
468 msgid "Bar3"
469 msgstr ""
470
471 #: ../../../src/InputState.cpp:410
472 msgid "Bar4"
473 msgstr ""
474
475 #: ../../../src/InputState.cpp:411
476 msgid "Bar5"
477 msgstr ""
478
479 #: ../../../src/InputState.cpp:412
480 msgid "Bar6"
481 msgstr ""
482
483 #: ../../../src/InputState.cpp:413
484 msgid "Bar7"
485 msgstr ""
486
487 #: ../../../src/InputState.cpp:414
488 msgid "Bar8"
489 msgstr ""
490
491 #: ../../../src/InputState.cpp:415
492 msgid "Bar9"
493 msgstr ""
494
495 #: ../../../src/InputState.cpp:416
496 msgid "Bar0"
497 msgstr ""
498
499 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
500 #: ../../../src/MenuCharacter.cpp:54
501 msgid "Character"
502 msgstr "Karaktär"
503
504 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
505 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
506 msgid "Inventory"
507 msgstr "Inventarie"
508
509 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
510 #: ../../../src/MenuPowers.cpp:168
511 msgid "Powers"
512 msgstr "Krafter"
513
514 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
515 #: ../../../src/MenuLog.cpp:72
516 msgid "Log"
517 msgstr "Logg"
518
519 #: ../../../src/InputState.cpp:421
520 msgid "Main1"
521 msgstr ""
522
523 #: ../../../src/InputState.cpp:422
524 msgid "Main2"
525 msgstr ""
526
527 #: ../../../src/InputState.cpp:423
528 msgid "Ctrl"
529 msgstr ""
530
531 #: ../../../src/InputState.cpp:424
532 msgid "Shift"
533 msgstr ""
534
535 #: ../../../src/InputState.cpp:425
536 msgid "Alt"
537 msgstr ""
538
539 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
540 msgid "Delete"
541 msgstr "Ta bort"
542
543 #: ../../../src/InputState.cpp:427
544 msgid "ActionBar Accept"
545 msgstr ""
546
547 #: ../../../src/InputState.cpp:428
548 msgid "ActionBar Left"
549 msgstr ""
550
551 #: ../../../src/InputState.cpp:429
552 msgid "ActionBar Right"
553 msgstr ""
554
555 #: ../../../src/InputState.cpp:430
556 msgid "ActionBar Use"
557 msgstr ""
558
559 #: ../../../src/InputState.cpp:431
560 msgid "Developer Menu"
561 msgstr ""
562
563 #: ../../../src/InputState.cpp:433
564 msgid "Left Mouse"
565 msgstr ""
566
567 #: ../../../src/InputState.cpp:434
568 msgid "Middle Mouse"
569 msgstr ""
570
571 #: ../../../src/InputState.cpp:435
572 msgid "Right Mouse"
573 msgstr ""
574
575 #: ../../../src/InputState.cpp:436
576 msgid "Wheel Up"
577 msgstr ""
578
579 #: ../../../src/InputState.cpp:437
580 msgid "Wheel Down"
581 msgstr ""
582
583 #: ../../../src/InputState.cpp:438
584 msgid "Mouse X1"
585 msgstr ""
586
587 #: ../../../src/InputState.cpp:439
588 msgid "Mouse X2"
589 msgstr ""
590
591 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
592 msgid "Unknown Item"
593 msgstr ""
594
595 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
596 #, c-format
597 msgid "%d%% Speed"
598 msgstr ""
599
600 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
601 #, c-format
602 msgid "%d%% Attack Speed"
603 msgstr ""
604
605 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
606 #: ../../../src/MenuPowers.cpp:833
607 #, c-format
608 msgid "Resistance (%s)"
609 msgstr ""
610
611 #: ../../../src/ItemManager.cpp:684
612 #, c-format
613 msgid "Requires %s"
614 msgstr ""
615
616 #: ../../../src/ItemManager.cpp:733
617 msgid "Quest Item"
618 msgstr "Uppdragsrelaterat föremål"
619
620 #: ../../../src/ItemManager.cpp:760
621 #, c-format
622 msgid "Quality: %s"
623 msgstr "Kvalitet: %s"
624
625 #: ../../../src/ItemManager.cpp:785
626 #, c-format
627 msgid "Absorb: %d-%d"
628 msgstr "Absorberar: %d-%d"
629
630 #: ../../../src/ItemManager.cpp:787
631 #, c-format
632 msgid "Absorb: %d"
633 msgstr "Absorberar: %d"
634
635 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
636 #: ../../../src/MenuPowers.cpp:1134
637 #, c-format
638 msgid "Requires Level %d"
639 msgstr "Kräver nivå %d"
640
641 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
642 #: ../../../src/MenuPowers.cpp:1125
643 #, c-format
644 msgid "Requires %s %d"
645 msgstr ""
646
647 #: ../../../src/ItemManager.cpp:849
648 #, c-format
649 msgid "Requires Class: %s"
650 msgstr ""
651
652 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
653 #, c-format
654 msgid "Buy Price: %d %s"
655 msgstr "Köpesumma: %d %s"
656
657 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
658 #, c-format
659 msgid "Buy Price: %d %s each"
660 msgstr "Köpesumma: %d %s per styck"
661
662 #: ../../../src/ItemManager.cpp:886
663 #, c-format
664 msgid "Sell Price: %d %s"
665 msgstr "Säljes för: %d %s"
666
667 #: ../../../src/ItemManager.cpp:888
668 #, c-format
669 msgid "Sell Price: %d %s each"
670 msgstr "Säljes för: %d %s per styck"
671
672 #: ../../../src/ItemManager.cpp:897
673 msgid "Set:"
674 msgstr ""
675
676 #: ../../../src/ItemManager.cpp:904
677 #, c-format
678 msgid "%d items:"
679 msgstr ""
680
681 #: ../../../src/ItemManager.cpp:917
682 #, c-format
683 msgid "Press [%s] to use"
684 msgstr ""
685
686 #: ../../../src/ItemManager.cpp:920
687 #, c-format
688 msgid "Press [%s] to read"
689 msgstr ""
690
691 #: ../../../src/MenuActionBar.cpp:87
692 msgid "Loot tooltip visibility"
693 msgstr ""
694
695 #: ../../../src/MenuActionBar.cpp:88
696 msgid "Mini-map mode"
697 msgstr ""
698
699 #: ../../../src/MenuActionBar.cpp:89
700 msgid "Always show stat bar labels"
701 msgstr ""
702
703 #: ../../../src/MenuActionBar.cpp:90
704 msgid "Show combat text"
705 msgstr "Visa text vid strid"
706
707 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
708 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
709 #, c-format
710 msgid "Hotkey: %s"
711 msgstr ""
712
713 #: ../../../src/MenuActionBar.cpp:474
714 #, c-format
715 msgid "Default. Temporarily show all loot tooltips with '%s'."
716 msgstr ""
717
718 #: ../../../src/MenuActionBar.cpp:476
719 #, c-format
720 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
721 msgstr ""
722
723 #: ../../../src/MenuActionBar.cpp:478
724 #, c-format
725 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
726 msgstr ""
727
728 #: ../../../src/MenuActionBar.cpp:482
729 msgid "Visible"
730 msgstr ""
731
732 #: ../../../src/MenuActionBar.cpp:484
733 msgid "Visible (2x zoom)"
734 msgstr ""
735
736 #: ../../../src/MenuActionBar.cpp:486
737 msgid "Hidden"
738 msgstr ""
739
740 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
741 msgid "Enabled"
742 msgstr ""
743
744 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
745 msgid "Disabled"
746 msgstr ""
747
748 #: ../../../src/MenuActionBar.cpp:657
749 msgid "Not enough MP."
750 msgstr ""
751
752 #: ../../../src/MenuActiveEffects.cpp:124
753 #, c-format
754 msgid "x%d"
755 msgstr ""
756
757 #: ../../../src/MenuActiveEffects.cpp:219
758 msgid "Remaining:"
759 msgstr ""
760
761 #: ../../../src/MenuActiveEffects.cpp:225
762 #, c-format
763 msgid "x%d stacks"
764 msgstr ""
765
766 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
767 msgid "Name"
768 msgstr "Namn"
769
770 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
771 msgid "Level"
772 msgstr "Nivå"
773
774 #: ../../../src/MenuCharacter.cpp:310
775 #, c-format
776 msgid "%d unspent stat point"
777 msgstr ""
778
779 #: ../../../src/MenuCharacter.cpp:313
780 #, c-format
781 msgid "%d unspent stat points"
782 msgstr ""
783
784 #: ../../../src/MenuCharacter.cpp:355
785 #, c-format
786 msgid "Reduces the damage taken from \"%s\" elemental attacks."
787 msgstr ""
788
789 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
790 #, c-format
791 msgid "XP: %d"
792 msgstr "XP: %d"
793
794 #: ../../../src/MenuCharacter.cpp:367
795 #, c-format
796 msgid "Next: %d"
797 msgstr "Nästa: %d"
798
799 #: ../../../src/MenuCharacter.cpp:373
800 #, c-format
801 msgid "base (%d), bonus (%d)"
802 msgstr "bas (%d), bonus (%d)"
803
804 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
805 msgid "Related stats:"
806 msgstr ""
807
808 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
809 #, c-format
810 msgid "Each level grants %d."
811 msgstr ""
812
813 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
814 #, c-format
815 msgid "Each point of %s grants %d."
906 #: ../../../src/MenuConfig.cpp:512
907 msgid ""
908 "Enables the below setting that controls the screen gamma level. The behavior"
909 " of the gamma setting can vary between platforms."
910 msgstr ""
911
912 #: ../../../src/MenuConfig.cpp:513
913 msgid ""
914 "Provides additional text for information that is primarily conveyed through "
915 "color."
916 msgstr ""
917
918 #: ../../../src/MenuConfig.cpp:514
919 msgid ""
920 "Some mods will automatically hide the stat bars when they are inactive. "
921 "Disabling this option will keep them displayed at all times."
922 msgstr ""
923
924 #: ../../../src/MenuConfig.cpp:515
925 msgid ""
926 "When enabled, empty equipment slots will be filled with applicable items "
927 "when they are obtained."
928 msgstr ""
929
930 #: ../../../src/MenuConfig.cpp:516
931 msgid ""
932 "Shows a marker above enemies, allies, and the player when they are obscured "
933 "by tall objects."
934 msgstr ""
935
936 #: ../../../src/MenuConfig.cpp:517
937 msgid ""
938 "This allows the game to be controlled entirely with the keyboard (or "
939 "joystick)."
940 msgstr ""
941
942 #: ../../../src/MenuConfig.cpp:518
943 msgid ""
944 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
945 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
946 "instead of 'Main1'."
947 msgstr ""
948
949 #: ../../../src/MenuConfig.cpp:519
950 msgid ""
951 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
952 "assigned to the movement button can be used by targeting an enemy. If this "
953 "setting is disabled, it is required to use 'Shift' to access the Power "
954 "assigned to the movement button."
955 msgstr ""
956
957 #: ../../../src/MenuConfig.cpp:520
958 msgid ""
959 "The player's attacks will be aimed in the direction of the mouse cursor when"
960 " this is enabled."
961 msgstr ""
962
963 #: ../../../src/MenuConfig.cpp:571
964 msgid "Active Mods"
965 msgstr "Aktiva Mods"
966
967 #: ../../../src/MenuConfig.cpp:580
968 msgid "Available Mods"
969 msgstr "Tillgängliga Mods"
970
971 #: ../../../src/MenuConfig.cpp:599
972 msgid "<< Disable"
973 msgstr "<< Inaktivera"
974
975 #: ../../../src/MenuConfig.cpp:605
976 msgid "Enable >>"
977 msgstr "Aktivera >>"
978
979 #: ../../../src/MenuConfig.cpp:1436
980 msgid "Version:"
981 msgstr ""
982
983 #: ../../../src/MenuConfig.cpp:1441
984 msgid "Game:"
985 msgstr ""
986
987 #: ../../../src/MenuConfig.cpp:1446
988 msgid "Engine version:"
989 msgstr ""
990
991 #: ../../../src/MenuConfig.cpp:1454
992 msgid "Requires mods:"
993 msgstr ""
994
995 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
996 msgid "(none)"
997 msgstr ""
998
999 #: ../../../src/MenuConfig.cpp:1579
1000 msgid "Save & Exit"
8161001 msgstr ""
8171002
8181003 #: ../../../src/MenuDevConsole.cpp:63
9681153 msgid "HINT: Type help"
9691154 msgstr ""
9701155
971 #: ../../../src/MenuEnemy.cpp:138
1156 #: ../../../src/MenuEnemy.cpp:162
9721157 #, c-format
9731158 msgid "%s level %d"
9741159 msgstr "%s nivå %d"
9751160
976 #: ../../../src/MenuEnemy.cpp:162
1161 #: ../../../src/MenuEnemy.cpp:186
9771162 msgid "Dead"
9781163 msgstr "Död"
9791164
980 #: ../../../src/MenuEnemy.cpp:164
1165 #: ../../../src/MenuEnemy.cpp:188
9811166 msgid "Destroyed"
9821167 msgstr ""
9831168
984 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
985 msgid "Paused"
986 msgstr ""
987
988 #: ../../../src/MenuExit.cpp:91
989 msgid "Save & Exit"
990 msgstr ""
991
992 #: ../../../src/MenuExit.cpp:92
993 msgid "Exit"
994 msgstr "Avsluta"
995
996 #: ../../../src/MenuExit.cpp:96
997 msgid "Continue"
998 msgstr ""
999
1000 #: ../../../src/MenuInventory.cpp:73
1001 msgid "Automatically equip items"
1002 msgstr ""
1003
1004 #: ../../../src/MenuInventory.cpp:188
1169 #: ../../../src/MenuInventory.cpp:177
10051170 #, c-format
10061171 msgid "Lost %d%% of %s."
10071172 msgstr ""
10081173
1009 #: ../../../src/MenuInventory.cpp:195
1174 #: ../../../src/MenuInventory.cpp:184
10101175 #, c-format
10111176 msgid "Lost %d%% of total XP."
10121177 msgstr ""
10131178
1014 #: ../../../src/MenuInventory.cpp:200
1179 #: ../../../src/MenuInventory.cpp:189
10151180 #, c-format
10161181 msgid "Lost %d%% of current level XP."
10171182 msgstr ""
10181183
1019 #: ../../../src/MenuInventory.cpp:226
1184 #: ../../../src/MenuInventory.cpp:215
10201185 #, c-format
10211186 msgid "Lost %s."
10221187 msgstr "Förlorade %s."
10231188
1024 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1189 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10251190 #, c-format
10261191 msgid "%d %s"
10271192 msgstr "%d %s"
10281193
1029 #: ../../../src/MenuInventory.cpp:317
1194 #: ../../../src/MenuInventory.cpp:300
10301195 msgid "Pick up item(s):"
10311196 msgstr ""
10321197
1033 #: ../../../src/MenuInventory.cpp:318
1198 #: ../../../src/MenuInventory.cpp:301
10341199 msgid "Use or equip item:"
10351200 msgstr ""
10361201
1037 #: ../../../src/MenuInventory.cpp:319
1202 #: ../../../src/MenuInventory.cpp:302
10381203 #, c-format
10391204 msgid "%s modifiers"
10401205 msgstr ""
10411206
1042 #: ../../../src/MenuInventory.cpp:320
1207 #: ../../../src/MenuInventory.cpp:303
10431208 msgid "Select a quantity of item:"
10441209 msgstr ""
10451210
1046 #: ../../../src/MenuInventory.cpp:323
1211 #: ../../../src/MenuInventory.cpp:306
10471212 msgid "Stash item stack:"
10481213 msgstr ""
10491214
1050 #: ../../../src/MenuInventory.cpp:325
1215 #: ../../../src/MenuInventory.cpp:308
10511216 msgid "Sell item stack:"
10521217 msgstr ""
10531218
1054 #: ../../../src/MenuInventory.cpp:592
1219 #: ../../../src/MenuInventory.cpp:574
10551220 msgid "You don't have enough of the required item."
10561221 msgstr ""
10571222
1058 #: ../../../src/MenuInventory.cpp:599
1223 #: ../../../src/MenuInventory.cpp:586
10591224 msgid "You can't use this item right now."
10601225 msgstr ""
10611226
1062 #: ../../../src/MenuInventory.cpp:611
1227 #: ../../../src/MenuInventory.cpp:598
10631228 msgid "This item can only be used from the action bar."
10641229 msgstr "Det här föremålet kan bara användas från handlingslisten."
10651230
1066 #: ../../../src/MenuInventory.cpp:729
1231 #: ../../../src/MenuInventory.cpp:716
10671232 msgid "Inventory is full."
10681233 msgstr "Du har inte plats för fler föremål."
10691234
1070 #: ../../../src/MenuInventory.cpp:849
1235 #: ../../../src/MenuInventory.cpp:841
10711236 #, c-format
10721237 msgid "Not enough %s."
10731238 msgstr "Inte tillräckligt med %s."
10741239
1075 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1240 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
10761241 msgid "This item can not be sold."
10771242 msgstr ""
10781243
10841249 msgid "Quests"
10851250 msgstr "Uppdrag"
10861251
1087 #: ../../../src/MenuManager.cpp:286
1252 #: ../../../src/MenuManager.cpp:296
10881253 #, c-format
10891254 msgid "XP: %d/%d"
10901255 msgstr "XP: %d/%d"
10911256
1092 #: ../../../src/MenuManager.cpp:827
1257 #: ../../../src/MenuManager.cpp:854
10931258 msgid "This item can not be dropped."
10941259 msgstr ""
10951260
10971262 msgid "Enter amount:"
10981263 msgstr ""
10991264
1100 #: ../../../src/MenuPowers.cpp:787
1265 #: ../../../src/MenuPowers.cpp:786
11011266 msgid "Passive"
11021267 msgstr ""
11031268
1104 #: ../../../src/MenuPowers.cpp:792
1269 #: ../../../src/MenuPowers.cpp:791
11051270 #, c-format
11061271 msgid "Costs %d MP"
11071272 msgstr "Kostar %d MP"
11081273
1109 #: ../../../src/MenuPowers.cpp:796
1274 #: ../../../src/MenuPowers.cpp:795
11101275 #, c-format
11111276 msgid "Costs %d HP"
11121277 msgstr "Kostar %d HP"
11131278
1114 #: ../../../src/MenuPowers.cpp:801
1279 #: ../../../src/MenuPowers.cpp:800
11151280 msgid "Cooldown:"
11161281 msgstr ""
11171282
1118 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1283 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11191284 msgid "Damage per second"
11201285 msgstr ""
11211286
1122 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1287 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11231288 msgid "HP per second"
11241289 msgstr ""
11251290
1126 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1291 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11271292 msgid "MP per second"
11281293 msgstr ""
11291294
1130 #: ../../../src/MenuPowers.cpp:885
1295 #: ../../../src/MenuPowers.cpp:884
11311296 msgid "Immobilize"
11321297 msgstr ""
11331298
1134 #: ../../../src/MenuPowers.cpp:893
1299 #: ../../../src/MenuPowers.cpp:892
11351300 msgid "Immunity"
11361301 msgstr ""
11371302
1138 #: ../../../src/MenuPowers.cpp:896
1303 #: ../../../src/MenuPowers.cpp:895
11391304 msgid "Immunity to damage over time"
11401305 msgstr ""
11411306
1142 #: ../../../src/MenuPowers.cpp:899
1307 #: ../../../src/MenuPowers.cpp:898
11431308 msgid "Immunity to slow"
11441309 msgstr ""
11451310
1146 #: ../../../src/MenuPowers.cpp:902
1311 #: ../../../src/MenuPowers.cpp:901
11471312 msgid "Immunity to stun"
11481313 msgstr ""
11491314
1150 #: ../../../src/MenuPowers.cpp:905
1315 #: ../../../src/MenuPowers.cpp:904
11511316 msgid "Immunity to HP steal"
11521317 msgstr ""
11531318
1154 #: ../../../src/MenuPowers.cpp:908
1319 #: ../../../src/MenuPowers.cpp:907
11551320 msgid "Immunity to MP steal"
11561321 msgstr ""
11571322
1158 #: ../../../src/MenuPowers.cpp:911
1323 #: ../../../src/MenuPowers.cpp:910
11591324 msgid "Immunity to knockback"
11601325 msgstr ""
11611326
1162 #: ../../../src/MenuPowers.cpp:914
1327 #: ../../../src/MenuPowers.cpp:913
11631328 msgid "Immunity to damage reflection"
11641329 msgstr ""
11651330
1166 #: ../../../src/MenuPowers.cpp:917
1331 #: ../../../src/MenuPowers.cpp:916
11671332 msgid "Stun"
11681333 msgstr ""
11691334
1170 #: ../../../src/MenuPowers.cpp:920
1335 #: ../../../src/MenuPowers.cpp:919
11711336 msgid "Automatic revive on death"
11721337 msgstr ""
11731338
1174 #: ../../../src/MenuPowers.cpp:923
1339 #: ../../../src/MenuPowers.cpp:922
11751340 msgid "Convert"
11761341 msgstr ""
11771342
1178 #: ../../../src/MenuPowers.cpp:926
1343 #: ../../../src/MenuPowers.cpp:925
11791344 msgid "Fear"
11801345 msgstr ""
11811346
1182 #: ../../../src/MenuPowers.cpp:929
1347 #: ../../../src/MenuPowers.cpp:928
11831348 msgid "Lifespan"
11841349 msgstr ""
11851350
1186 #: ../../../src/MenuPowers.cpp:953
1351 #: ../../../src/MenuPowers.cpp:952
11871352 msgid "Magical Shield"
11881353 msgstr ""
11891354
1190 #: ../../../src/MenuPowers.cpp:982
1355 #: ../../../src/MenuPowers.cpp:981
11911356 msgid "Healing"
11921357 msgstr ""
11931358
1194 #: ../../../src/MenuPowers.cpp:985
1359 #: ../../../src/MenuPowers.cpp:984
11951360 msgid "Knockback"
11961361 msgstr ""
11971362
1198 #: ../../../src/MenuPowers.cpp:1010
1363 #: ../../../src/MenuPowers.cpp:1009
11991364 #, c-format
12001365 msgid "%d%% chance"
12011366 msgstr ""
12021367
1203 #: ../../../src/MenuPowers.cpp:1062
1368 #: ../../../src/MenuPowers.cpp:1061
12041369 msgid "Base Accuracy"
12051370 msgstr ""
12061371
1207 #: ../../../src/MenuPowers.cpp:1082
1372 #: ../../../src/MenuPowers.cpp:1081
12081373 msgid "Base Critical Chance"
12091374 msgstr ""
12101375
1211 #: ../../../src/MenuPowers.cpp:1090
1376 #: ../../../src/MenuPowers.cpp:1089
12121377 msgid "Ignores Absorbtion"
12131378 msgstr ""
12141379
1215 #: ../../../src/MenuPowers.cpp:1095
1380 #: ../../../src/MenuPowers.cpp:1094
12161381 msgid "Ignores Avoidance"
12171382 msgstr ""
12181383
1219 #: ../../../src/MenuPowers.cpp:1100
1384 #: ../../../src/MenuPowers.cpp:1099
12201385 #, c-format
12211386 msgid "%d%% Chance to crit slowed targets"
12221387 msgstr ""
12231388
1224 #: ../../../src/MenuPowers.cpp:1105
1389 #: ../../../src/MenuPowers.cpp:1104
12251390 #, c-format
12261391 msgid "Elemental Damage (%s)"
12271392 msgstr ""
12281393
1229 #: ../../../src/MenuPowers.cpp:1114
1394 #: ../../../src/MenuPowers.cpp:1113
12301395 #, c-format
12311396 msgid "Requires a %s"
12321397 msgstr "Kräver %s"
12331398
1234 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1399 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12351400 #, c-format
12361401 msgid "Requires Power: %s"
12371402 msgstr "Kräver styrka: %s"
12381403
1239 #: ../../../src/MenuPowers.cpp:1163
1404 #: ../../../src/MenuPowers.cpp:1162
12401405 msgid "Click to Unlock (uses 1 Skill Point)"
12411406 msgstr ""
12421407
1243 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1408 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12441409 msgid "Requires 1 Skill Point"
12451410 msgstr ""
12461411
1247 #: ../../../src/MenuPowers.cpp:1355
1412 #: ../../../src/MenuPowers.cpp:1354
12481413 #, c-format
12491414 msgid "%d unspent skill point"
12501415 msgstr ""
12511416
1252 #: ../../../src/MenuPowers.cpp:1358
1417 #: ../../../src/MenuPowers.cpp:1357
12531418 #, c-format
12541419 msgid "%d unspent skill points"
12551420 msgstr ""
12561421
1257 #: ../../../src/MenuPowers.cpp:1388
1422 #: ../../../src/MenuPowers.cpp:1387
12581423 msgid "Next Level:"
12591424 msgstr ""
12601425
1261 #: ../../../src/MenuStash.cpp:96
1262 msgid "Shared Stash"
1263 msgstr "Delad gömma"
1264
1265 #: ../../../src/MenuStash.cpp:209
1426 #: ../../../src/MenuStash.cpp:53
1427 msgid "Private"
1428 msgstr ""
1429
1430 #: ../../../src/MenuStash.cpp:55
1431 msgid "Shared"
1432 msgstr ""
1433
1434 #: ../../../src/MenuStash.cpp:103
1435 msgid "Stash"
1436 msgstr ""
1437
1438 #: ../../../src/MenuStash.cpp:258
12661439 msgid "Can not store quest items in the stash."
12671440 msgstr ""
12681441
1269 #: ../../../src/MenuStash.cpp:219
1442 #: ../../../src/MenuStash.cpp:263
1443 msgid "This item can not be stored in the stash."
1444 msgstr ""
1445
1446 #: ../../../src/MenuStash.cpp:268
1447 msgid "This item can not be stored in the private stash."
1448 msgstr ""
1449
1450 #: ../../../src/MenuStash.cpp:273
1451 msgid "This item can not be stored in the shared stash."
1452 msgstr ""
1453
1454 #: ../../../src/MenuStash.cpp:283
12701455 msgid "Stash is full."
12711456 msgstr ""
12721457
1273 #: ../../../src/MenuTalker.cpp:454
1458 #: ../../../src/MenuStash.cpp:340
1459 #, c-format
1460 msgid "Can not store item in stash: %s"
1461 msgstr ""
1462
1463 #: ../../../src/MenuTalker.cpp:447
1464 #, c-format
1465 msgid "<dialog node %d>"
1466 msgstr ""
1467
1468 #: ../../../src/MenuTalker.cpp:455
12741469 msgid "Trade"
12751470 msgstr "Handel"
12761471
12781473 msgid "Buyback"
12791474 msgstr "Återköp"
12801475
1281 #: ../../../src/MenuVendor.cpp:279
1476 #: ../../../src/MenuVendor.cpp:281
12821477 msgid "Vendor"
12831478 msgstr "Tillverkare"
12841479
1285 #: ../../../src/PowerManager.cpp:1136
1480 #: ../../../src/PowerManager.cpp:1170
12861481 #, c-format
12871482 msgid "+%d Shield"
12881483 msgstr "+%d Sköld"
12891484
1290 #: ../../../src/PowerManager.cpp:1392
1485 #: ../../../src/PowerManager.cpp:1426
12911486 msgid "You are already transformed, untransform first."
12921487 msgstr "Du är redan i omvandlad form, omvandla dig tillbaka först."
12931488
1294 #: ../../../src/PowerManager.cpp:1404
1489 #: ../../../src/PowerManager.cpp:1438
12951490 msgid "Could not untransform at this position."
12961491 msgstr ""
12971492
12991494 msgid "Completed Quests"
13001495 msgstr ""
13011496
1302 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1497 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13031498 msgid "Game saved."
13041499 msgstr ""
13051500
1306 #: ../../../src/SDLInputState.cpp:582
1501 #: ../../../src/SDLInputState.cpp:643
1502 msgid "BkSp"
1503 msgstr ""
1504
1505 #: ../../../src/SDLInputState.cpp:644
1506 msgid "Caps"
1507 msgstr ""
1508
1509 #: ../../../src/SDLInputState.cpp:645
1510 msgid "Del"
1511 msgstr ""
1512
1513 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1514 msgid "End"
1515 msgstr ""
1516
1517 #: ../../../src/SDLInputState.cpp:648
1518 msgid "Esc"
1519 msgstr ""
1520
1521 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1522 msgid "Home"
1523 msgstr ""
1524
1525 #: ../../../src/SDLInputState.cpp:650
1526 msgid "Ins"
1527 msgstr ""
1528
1529 #: ../../../src/SDLInputState.cpp:651
1530 msgid "LAlt"
1531 msgstr ""
1532
1533 #: ../../../src/SDLInputState.cpp:652
1534 msgid "LCtrl"
1535 msgstr ""
1536
1537 #: ../../../src/SDLInputState.cpp:654
1538 msgid "LShft"
1539 msgstr ""
1540
1541 #: ../../../src/SDLInputState.cpp:655
1542 msgid "Num"
1543 msgstr ""
1544
1545 #: ../../../src/SDLInputState.cpp:656
1546 msgid "PgDn"
1547 msgstr ""
1548
1549 #: ../../../src/SDLInputState.cpp:657
1550 msgid "PgUp"
1551 msgstr ""
1552
1553 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1554 msgid "Pause"
1555 msgstr ""
1556
1557 #: ../../../src/SDLInputState.cpp:659
1558 msgid "Print"
1559 msgstr ""
1560
1561 #: ../../../src/SDLInputState.cpp:660
1562 msgid "RAlt"
1563 msgstr ""
1564
1565 #: ../../../src/SDLInputState.cpp:661
1566 msgid "RCtrl"
1567 msgstr ""
1568
1569 #: ../../../src/SDLInputState.cpp:662
1570 msgid "Ret"
1571 msgstr ""
1572
1573 #: ../../../src/SDLInputState.cpp:664
1574 msgid "RShft"
1575 msgstr ""
1576
1577 #: ../../../src/SDLInputState.cpp:665
1578 msgid "SLock"
1579 msgstr ""
1580
1581 #: ../../../src/SDLInputState.cpp:666
1582 msgid "Spc"
1583 msgstr ""
1584
1585 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1586 msgid "Tab"
1587 msgstr ""
1588
1589 #: ../../../src/SDLInputState.cpp:673
13071590 msgid "Backspace"
13081591 msgstr ""
13091592
1310 #: ../../../src/SDLInputState.cpp:583
1593 #: ../../../src/SDLInputState.cpp:674
13111594 msgid "CapsLock"
13121595 msgstr ""
13131596
1314 #: ../../../src/SDLInputState.cpp:586
1315 msgid "End"
1316 msgstr ""
1317
1318 #: ../../../src/SDLInputState.cpp:587
1597 #: ../../../src/SDLInputState.cpp:678
13191598 msgid "Escape"
13201599 msgstr ""
13211600
1322 #: ../../../src/SDLInputState.cpp:588
1323 msgid "Home"
1324 msgstr ""
1325
1326 #: ../../../src/SDLInputState.cpp:589
1601 #: ../../../src/SDLInputState.cpp:680
13271602 msgid "Insert"
13281603 msgstr ""
13291604
1330 #: ../../../src/SDLInputState.cpp:590
1605 #: ../../../src/SDLInputState.cpp:681
13311606 msgid "Left Alt"
13321607 msgstr ""
13331608
1334 #: ../../../src/SDLInputState.cpp:591
1609 #: ../../../src/SDLInputState.cpp:682
13351610 msgid "Left Ctrl"
13361611 msgstr ""
13371612
1338 #: ../../../src/SDLInputState.cpp:593
1613 #: ../../../src/SDLInputState.cpp:684
13391614 msgid "Left Shift"
13401615 msgstr ""
13411616
1342 #: ../../../src/SDLInputState.cpp:594
1617 #: ../../../src/SDLInputState.cpp:685
13431618 msgid "NumLock"
13441619 msgstr ""
13451620
1346 #: ../../../src/SDLInputState.cpp:595
1621 #: ../../../src/SDLInputState.cpp:686
13471622 msgid "PageDown"
13481623 msgstr ""
13491624
1350 #: ../../../src/SDLInputState.cpp:596
1625 #: ../../../src/SDLInputState.cpp:687
13511626 msgid "PageUp"
13521627 msgstr ""
13531628
1354 #: ../../../src/SDLInputState.cpp:597
1355 msgid "Pause"
1356 msgstr ""
1357
1358 #: ../../../src/SDLInputState.cpp:598
1629 #: ../../../src/SDLInputState.cpp:689
13591630 msgid "PrintScreen"
13601631 msgstr ""
13611632
1362 #: ../../../src/SDLInputState.cpp:599
1633 #: ../../../src/SDLInputState.cpp:690
13631634 msgid "Right Alt"
13641635 msgstr ""
13651636
1366 #: ../../../src/SDLInputState.cpp:600
1637 #: ../../../src/SDLInputState.cpp:691
13671638 msgid "Right Ctrl"
13681639 msgstr ""
13691640
1370 #: ../../../src/SDLInputState.cpp:601
1641 #: ../../../src/SDLInputState.cpp:692
13711642 msgid "Return"
13721643 msgstr ""
13731644
1374 #: ../../../src/SDLInputState.cpp:603
1645 #: ../../../src/SDLInputState.cpp:694
13751646 msgid "Right Shift"
13761647 msgstr ""
13771648
1378 #: ../../../src/SDLInputState.cpp:604
1649 #: ../../../src/SDLInputState.cpp:695
13791650 msgid "ScrollLock"
13801651 msgstr ""
13811652
1382 #: ../../../src/SDLInputState.cpp:605
1653 #: ../../../src/SDLInputState.cpp:696
13831654 msgid "Space"
13841655 msgstr ""
13851656
1386 #: ../../../src/SDLInputState.cpp:606
1387 msgid "Tab"
1388 msgstr ""
1389
1390 #: ../../../src/SDLInputState.cpp:620
1657 #: ../../../src/SDLInputState.cpp:710
1658 #, c-format
1659 msgid "M%d"
1660 msgstr ""
1661
1662 #: ../../../src/SDLInputState.cpp:716
13911663 #, c-format
13921664 msgid "Mouse %d"
13931665 msgstr ""
13941666
1395 #: ../../../src/SDLInputState.cpp:628
1667 #: ../../../src/SDLInputState.cpp:726
1668 #, c-format
1669 msgid "JX%d-"
1670 msgstr ""
1671
1672 #: ../../../src/SDLInputState.cpp:728
13961673 #, c-format
13971674 msgid "Axis %d -"
13981675 msgstr ""
13991676
1400 #: ../../../src/SDLInputState.cpp:630
1677 #: ../../../src/SDLInputState.cpp:732
1678 #, c-format
1679 msgid "JX%d+"
1680 msgstr ""
1681
1682 #: ../../../src/SDLInputState.cpp:734
14011683 #, c-format
14021684 msgid "Axis %d +"
14031685 msgstr ""
14041686
1405 #: ../../../src/SDLInputState.cpp:633
1687 #: ../../../src/SDLInputState.cpp:739
1688 #, c-format
1689 msgid "JB%d"
1690 msgstr ""
1691
1692 #: ../../../src/SDLInputState.cpp:741
14061693 #, c-format
14071694 msgid "Button %d"
14081695 msgstr ""
14091696
1410 #: ../../../src/SDLInputState.cpp:637
1411 msgid "(none)"
1412 msgstr ""
1413
1414 #: ../../../src/SDLInputState.cpp:677
1697 #: ../../../src/SDLInputState.cpp:788
14151698 msgid "Touch control D-Pad"
14161699 msgstr ""
14171700
1418 #: ../../../src/SDLInputState.cpp:701
1701 #: ../../../src/SDLInputState.cpp:812
14191702 msgid "Touch control buttons"
14201703 msgstr ""
14211704
1422 #: ../../../src/SDLInputState.cpp:716
1705 #: ../../../src/SDLInputState.cpp:827
14231706 msgid "Tap"
14241707 msgstr ""
14251708
1426 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1427 #: ../../../src/SDLInputState.cpp:768
1709 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1710 #, c-format
1711 msgid "Can not bind: %s"
1712 msgstr ""
1713
1714 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1715 #: ../../../src/SDLInputState.cpp:901
14281716 #, c-format
14291717 msgid "'%s' is no longer bound to:"
14301718 msgstr ""
15871875 msgid "k"
15881876 msgstr "k"
15891877
1590 #: ../../../src/Utils.cpp:580
1878 #: ../../../src/Utils.cpp:616
15911879 #, c-format
15921880 msgid "%s second"
15931881 msgstr ""
15941882
1595 #: ../../../src/Utils.cpp:583
1883 #: ../../../src/Utils.cpp:619
15961884 #, c-format
15971885 msgid "%s seconds"
15981886 msgstr ""
44 #
55 # Translators:
66 # Justin Jacobs <jajdorkster@gmail.com>, 2018
7 # Sergiy Borodych, 2018
8 # igorko <mansonigor@gmail.com>, 2018
7 # igorko <mansonigor@gmail.com>, 2019
8 # Sergiy Borodych, 2020
99 #
1010 #, fuzzy
1111 msgid ""
1212 msgstr ""
1313 "Project-Id-Version: PACKAGE VERSION\n"
1414 "Report-Msgid-Bugs-To: \n"
15 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
15 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1616 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
17 "Last-Translator: igorko <mansonigor@gmail.com>, 2018\n"
17 "Last-Translator: Sergiy Borodych, 2020\n"
1818 "Language-Team: Ukrainian (https://www.transifex.com/flareorg/teams/84925/uk/)\n"
1919 "MIME-Version: 1.0\n"
2020 "Content-Type: text/plain; charset=UTF-8\n"
2222 "Language: uk\n"
2323 "Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n"
2424
25 #: ../../../src/Avatar.cpp:367
25 #: ../../../src/Avatar.cpp:387
26 msgid "Your health is low!"
27 msgstr "У Вас мало Здоров'я!"
28
29 #: ../../../src/Avatar.cpp:419
2630 #, c-format
2731 msgid "Congratulations, you have reached level %d!"
28 msgstr "Вітаємо, ви перейшли на рівень %d!"
29
30 #: ../../../src/Avatar.cpp:369
31 msgid "You may increase one attribute through the Character Menu."
32 msgstr "Ви можете покращити одну характеристику в Меню Персонажа."
33
34 #: ../../../src/Avatar.cpp:583
32 msgstr "Вітаємо, Ви перейшли на рівень %d!"
33
34 #: ../../../src/Avatar.cpp:421
35 msgid "You may increase one or more attributes through the Character Menu."
36 msgstr "Ви можете покращити одну чи кілька характеристик в Меню Персонажа."
37
38 #: ../../../src/Avatar.cpp:425
39 msgid "You may unlock one or more abilities through the Powers Menu."
40 msgstr "Ви можете розблокувати одне чи кілька умінь в Меню Умінь."
41
42 #: ../../../src/Avatar.cpp:692
3543 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3644 msgstr "Вас перемогли. Гра завершена! ${INPUT_CONTINUE} щоб вийти в Меню."
3745
38 #: ../../../src/Avatar.cpp:589
46 #: ../../../src/Avatar.cpp:698
3947 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
4048 msgstr "Вас перемогли. ${INPUT_CONTINUE} щоб продовжити."
4149
42 #: ../../../src/Avatar.cpp:839
50 #: ../../../src/Avatar.cpp:949
4351 msgid "Transformation expired. You have been moved back to a safe place."
4452 msgstr "Час перетворення скінчився. Ви були переміщені в безпечне місце."
4553
4856 msgid "%d %s removed."
4957 msgstr "%d %s втрачено."
5058
51 #: ../../../src/CampaignManager.cpp:162
59 #: ../../../src/CampaignManager.cpp:165
60 #, c-format
61 msgid "%s x%d removed."
62 msgstr "%s x%d вилучено."
63
64 #: ../../../src/CampaignManager.cpp:167
5265 #, c-format
5366 msgid "%s removed."
5467 msgstr "%s втрачено."
5568
56 #: ../../../src/CampaignManager.cpp:175
69 #: ../../../src/CampaignManager.cpp:180
5770 #, c-format
5871 msgid "You receive %s."
5972 msgstr "Ви отримали %s."
6073
61 #: ../../../src/CampaignManager.cpp:177
74 #: ../../../src/CampaignManager.cpp:182
6275 #, c-format
6376 msgid "You receive %s x%d."
6477 msgstr "Ви отримали %s x%d."
6578
66 #: ../../../src/CampaignManager.cpp:186
79 #: ../../../src/CampaignManager.cpp:191
6780 #, c-format
6881 msgid "You receive %d %s."
6982 msgstr "Ви отримали %d %s."
7083
71 #: ../../../src/CampaignManager.cpp:195
84 #: ../../../src/CampaignManager.cpp:200
7285 #, c-format
7386 msgid "You receive %d XP."
7487 msgstr "Ви здобули %d Досвіду."
7588
76 #: ../../../src/CampaignManager.cpp:201
89 #: ../../../src/CampaignManager.cpp:206
7790 msgid "HP restored."
7891 msgstr "Здоров'я відновлено."
7992
80 #: ../../../src/CampaignManager.cpp:205
93 #: ../../../src/CampaignManager.cpp:210
8194 msgid "MP restored."
8295 msgstr "Ману відновлено."
8396
84 #: ../../../src/CampaignManager.cpp:210
97 #: ../../../src/CampaignManager.cpp:215
8598 msgid "HP and MP restored."
8699 msgstr "Здоров'я та Мана відновлені."
87100
88 #: ../../../src/CampaignManager.cpp:214
101 #: ../../../src/CampaignManager.cpp:219
89102 msgid "Negative effects removed."
90103 msgstr "Шкідливі ефекти усунено."
91104
92 #: ../../../src/CampaignManager.cpp:220
105 #: ../../../src/CampaignManager.cpp:225
93106 msgid "HP and MP restored, negative effects removed"
94107 msgstr "Здоров'я та Мана відновлені, шкідливі ефекти усунено"
95108
113126 "\n"
114127 "Стандартний рендерер, який часто швидший від програмного SDL рендерера."
115128
116 #: ../../../src/EngineSettings.cpp:561
129 #: ../../../src/EngineSettings.cpp:572
117130 msgid "Adventurer"
118131 msgstr "Шукач пригод"
119132
120 #: ../../../src/Entity.cpp:511
133 #: ../../../src/Entity.cpp:522
121134 msgid "miss"
122135 msgstr "промах"
123136
124 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
125 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
137 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
138 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
126139 #, c-format
127140 msgid "+%d HP"
128141 msgstr "+%d Здоров'я"
129142
130 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
131 #: ../../../src/StatBlock.cpp:822
143 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
144 #: ../../../src/StatBlock.cpp:830
132145 #, c-format
133146 msgid "+%d MP"
134147 msgstr "+%d Мани"
135148
136 #: ../../../src/EventManager.cpp:738
149 #: ../../../src/EventManager.cpp:782
137150 msgid "Unknown destination"
138151 msgstr "Невідомий пункт призначення"
139152
140 #: ../../../src/GameStateConfigBase.cpp:89
141 #: ../../../src/GameStateConfigBase.cpp:110
153 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
154 msgid "Loading..."
155 msgstr "Завантаження..."
156
157 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
158 msgid "Delete Save"
159 msgstr "Видалити"
160
161 #: ../../../src/GameStateLoad.cpp:90
162 msgid "Delete this save?"
163 msgstr "Видалити цього персонажа?"
164
165 #: ../../../src/GameStateLoad.cpp:92
166 msgid "Exit to Title"
167 msgstr "Головне меню"
168
169 #: ../../../src/GameStateLoad.cpp:95
170 msgid "New Game"
171 msgstr "Нова гра"
172
173 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
174 msgid "Choose a Slot"
175 msgstr "Виберіть слот"
176
177 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
178 msgid "Enable a story mod to continue"
179 msgstr "Увімкніть мод повісті щоб продовжити"
180
181 #: ../../../src/GameStateLoad.cpp:597
182 msgid "Load Game"
183 msgstr "Завантажити"
184
185 #: ../../../src/GameStateLoad.cpp:706
186 msgid "Entering game world..."
187 msgstr "Входжу в ігровий світ..."
188
189 #: ../../../src/GameStateLoad.cpp:709
190 msgid "Loading saved game..."
191 msgstr "Завантажую збереження..."
192
193 #: ../../../src/GameStateLoad.cpp:742
194 msgid "Invalid save"
195 msgstr "Невірне збереження"
196
197 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
198 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
199 #: ../../../src/MenuPowers.cpp:1543
200 #, c-format
201 msgid "Level %d"
202 msgstr "Рівень %d"
203
204 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
205 #: ../../../src/MenuConfig.cpp:244
206 msgid "Cancel"
207 msgstr "Скасувати"
208
209 #: ../../../src/GameStateNew.cpp:68
210 msgid "Create"
211 msgstr "Створити"
212
213 #: ../../../src/GameStateNew.cpp:76
214 msgid "Randomize"
215 msgstr "Випадково"
216
217 #: ../../../src/GameStateNew.cpp:92
218 msgid "Choose a Portrait"
219 msgstr "Виберіть портрет"
220
221 #: ../../../src/GameStateNew.cpp:96
222 msgid "Choose a Name"
223 msgstr "Вкажіть ім'я"
224
225 #: ../../../src/GameStateNew.cpp:100
226 msgid "Permadeath?"
227 msgstr "Не воскресає"
228
229 #: ../../../src/GameStateNew.cpp:104
230 msgid "Choose a Class"
231 msgstr "Виберіть клас"
232
233 #: ../../../src/GameStateTitle.cpp:107
234 msgid "Play Game"
235 msgstr "Грати гру"
236
237 #: ../../../src/GameStateTitle.cpp:110
238 msgid "Enable a core mod to continue"
239 msgstr "Увімкніть базовий мод щоб продовжити"
240
241 #: ../../../src/GameStateTitle.cpp:114
242 msgid "Configuration"
243 msgstr "Параметри"
244
245 #: ../../../src/GameStateTitle.cpp:117
246 msgid "Credits"
247 msgstr "Автори"
248
249 #: ../../../src/GameStateTitle.cpp:120
250 msgid "Exit Game"
251 msgstr "Вийти з гри"
252
253 #: ../../../src/InputState.cpp:407
254 msgid "Accept"
255 msgstr "Прийняти"
256
257 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
258 #: ../../../src/SDLInputState.cpp:698
259 msgid "Up"
260 msgstr "Вверх"
261
262 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
263 #: ../../../src/SDLInputState.cpp:676
264 msgid "Down"
265 msgstr "Вниз"
266
267 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
268 #: ../../../src/SDLInputState.cpp:683
269 msgid "Left"
270 msgstr "Вліво"
271
272 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
273 #: ../../../src/SDLInputState.cpp:693
274 msgid "Right"
275 msgstr "Вправо"
276
277 #: ../../../src/InputState.cpp:412
278 msgid "Bar1"
279 msgstr "Слот1"
280
281 #: ../../../src/InputState.cpp:413
282 msgid "Bar2"
283 msgstr "Слот2"
284
285 #: ../../../src/InputState.cpp:414
286 msgid "Bar3"
287 msgstr "Слот3"
288
289 #: ../../../src/InputState.cpp:415
290 msgid "Bar4"
291 msgstr "Слот4"
292
293 #: ../../../src/InputState.cpp:416
294 msgid "Bar5"
295 msgstr "Слот5"
296
297 #: ../../../src/InputState.cpp:417
298 msgid "Bar6"
299 msgstr "Слот6"
300
301 #: ../../../src/InputState.cpp:418
302 msgid "Bar7"
303 msgstr "Слот7"
304
305 #: ../../../src/InputState.cpp:419
306 msgid "Bar8"
307 msgstr "Слот8"
308
309 #: ../../../src/InputState.cpp:420
310 msgid "Bar9"
311 msgstr "Слот9"
312
313 #: ../../../src/InputState.cpp:421
314 msgid "Bar0"
315 msgstr "Слот0"
316
317 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
318 #: ../../../src/MenuCharacter.cpp:54
319 msgid "Character"
320 msgstr "Персонаж"
321
322 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
323 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
324 msgid "Inventory"
325 msgstr "Інвентар"
326
327 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
328 #: ../../../src/MenuPowers.cpp:167
329 msgid "Powers"
330 msgstr "Уміння"
331
332 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
333 #: ../../../src/MenuLog.cpp:72
334 msgid "Log"
335 msgstr "Журнал"
336
337 #: ../../../src/InputState.cpp:426
338 msgid "Main1"
339 msgstr "Дія1"
340
341 #: ../../../src/InputState.cpp:427
342 msgid "Main2"
343 msgstr "Дія2"
344
345 #: ../../../src/InputState.cpp:428
346 msgid "Ctrl"
347 msgstr "Ctrl"
348
349 #: ../../../src/InputState.cpp:429
350 msgid "Shift"
351 msgstr "Shift"
352
353 #: ../../../src/InputState.cpp:430
354 msgid "Alt"
355 msgstr "Alt"
356
357 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
358 msgid "Delete"
359 msgstr "Видалити"
360
361 #: ../../../src/InputState.cpp:432
362 msgid "ActionBar Accept"
363 msgstr "Дії: Прийняти"
364
365 #: ../../../src/InputState.cpp:433
366 msgid "ActionBar Left"
367 msgstr "Дії: Вліво"
368
369 #: ../../../src/InputState.cpp:434
370 msgid "ActionBar Right"
371 msgstr "Дії: Вправо"
372
373 #: ../../../src/InputState.cpp:435
374 msgid "ActionBar Use"
375 msgstr "Дії: Використати"
376
377 #: ../../../src/InputState.cpp:436
378 msgid "Developer Menu"
379 msgstr "Меню розробника"
380
381 #: ../../../src/InputState.cpp:438
382 msgid "Left Mouse"
383 msgstr "ЛівКнМиш"
384
385 #: ../../../src/InputState.cpp:439
386 msgid "Middle Mouse"
387 msgstr "СерКнМиш"
388
389 #: ../../../src/InputState.cpp:440
390 msgid "Right Mouse"
391 msgstr "ПрКнМиш"
392
393 #: ../../../src/InputState.cpp:441
394 msgid "Wheel Up"
395 msgstr "Колесо вверх"
396
397 #: ../../../src/InputState.cpp:442
398 msgid "Wheel Down"
399 msgstr "Колесо вниз"
400
401 #: ../../../src/InputState.cpp:443
402 msgid "Mouse X1"
403 msgstr "Мишка X1"
404
405 #: ../../../src/InputState.cpp:444
406 msgid "Mouse X2"
407 msgstr "Мишка X2"
408
409 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
410 msgid "Unknown Item"
411 msgstr "Невідомий предмет"
412
413 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
414 #, c-format
415 msgid "%d%% Speed"
416 msgstr "%d%% Швидкості"
417
418 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
419 #, c-format
420 msgid "%d%% Attack Speed"
421 msgstr "%d%% Швидкості атаки"
422
423 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
424 #: ../../../src/MenuPowers.cpp:832
425 #, c-format
426 msgid "Resistance (%s)"
427 msgstr "Опір (%s)"
428
429 #: ../../../src/ItemManager.cpp:714
430 #, c-format
431 msgid "Requires %s"
432 msgstr "Потребує %s"
433
434 #: ../../../src/ItemManager.cpp:763
435 msgid "Quest Item"
436 msgstr "Квестовий предмет"
437
438 #: ../../../src/ItemManager.cpp:790
439 #, c-format
440 msgid "Quality: %s"
441 msgstr "Якість: %s"
442
443 #: ../../../src/ItemManager.cpp:815
444 #, c-format
445 msgid "Absorb: %d-%d"
446 msgstr "Поглинання: %d-%d"
447
448 #: ../../../src/ItemManager.cpp:817
449 #, c-format
450 msgid "Absorb: %d"
451 msgstr "Поглинання: %d"
452
453 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
454 #: ../../../src/MenuPowers.cpp:1133
455 #, c-format
456 msgid "Requires Level %d"
457 msgstr "Вимагає Рівень %d"
458
459 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
460 #: ../../../src/MenuPowers.cpp:1124
461 #, c-format
462 msgid "Requires %s %d"
463 msgstr "Потребує %s %d"
464
465 #: ../../../src/ItemManager.cpp:879
466 #, c-format
467 msgid "Requires Class: %s"
468 msgstr "Вимагає клас: %s"
469
470 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
471 #, c-format
472 msgid "Buy Price: %d %s"
473 msgstr "Ціна купівлі: %d %s"
474
475 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
476 #, c-format
477 msgid "Buy Price: %d %s each"
478 msgstr "Ціна купівлі: %d %s кожен"
479
480 #: ../../../src/ItemManager.cpp:916
481 #, c-format
482 msgid "Sell Price: %d %s"
483 msgstr "Ціна продажу: %d %s"
484
485 #: ../../../src/ItemManager.cpp:918
486 #, c-format
487 msgid "Sell Price: %d %s each"
488 msgstr "Ціна продажу: %d %s кожен"
489
490 #: ../../../src/ItemManager.cpp:927
491 msgid "Set:"
492 msgstr "Набір:"
493
494 #: ../../../src/ItemManager.cpp:934
495 #, c-format
496 msgid "%d items:"
497 msgstr "%d предмети:"
498
499 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
500 #, c-format
501 msgid "Press [%s] to use"
502 msgstr "Натисніть [%s] для використання"
503
504 #: ../../../src/ItemManager.cpp:951
505 #, c-format
506 msgid "Press [%s] to read"
507 msgstr "Натисніть [%s] щоб прочитати"
508
509 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
510 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
511 #, c-format
512 msgid "Hotkey: %s"
513 msgstr "Гаряча клавіша: %s"
514
515 #: ../../../src/MenuActionBar.cpp:599
516 msgid "Not enough MP."
517 msgstr "Недостатньо Мани."
518
519 #: ../../../src/MenuActiveEffects.cpp:124
520 #, c-format
521 msgid "x%d"
522 msgstr "x %d"
523
524 #: ../../../src/MenuActiveEffects.cpp:219
525 msgid "Remaining:"
526 msgstr "Залишилось:"
527
528 #: ../../../src/MenuActiveEffects.cpp:225
529 #, c-format
530 msgid "x%d stacks"
531 msgstr "x%d пачок"
532
533 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
534 msgid "Name"
535 msgstr "Ім'я"
536
537 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
538 msgid "Level"
539 msgstr "Рівень"
540
541 #: ../../../src/MenuCharacter.cpp:310
542 #, c-format
543 msgid "%d unspent stat point"
544 msgstr "%d навитрачене очко статистики"
545
546 #: ../../../src/MenuCharacter.cpp:313
547 #, c-format
548 msgid "%d unspent stat points"
549 msgstr "%d невитрачених очків статистики"
550
551 #: ../../../src/MenuCharacter.cpp:355
552 #, c-format
553 msgid "Reduces the damage taken from \"%s\" elemental attacks."
554 msgstr "Зменшує шкоду, завдану атаками стихії \"%s\"."
555
556 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
557 #, c-format
558 msgid "XP: %d"
559 msgstr "Досвід: %d"
560
561 #: ../../../src/MenuCharacter.cpp:367
562 #, c-format
563 msgid "Next: %d"
564 msgstr "Наступний: %d"
565
566 #: ../../../src/MenuCharacter.cpp:373
567 #, c-format
568 msgid "base (%d), bonus (%d)"
569 msgstr "базове (%d), бонус (%d)"
570
571 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
572 msgid "Related stats:"
573 msgstr "Пов'язані характеристики:"
574
575 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
576 #, c-format
577 msgid "Each level grants %d."
578 msgstr "Кожен рівень додає %d."
579
580 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
581 #, c-format
582 msgid "Each point of %s grants %d."
583 msgstr "Кожне очко витрачене на %s додає %d."
584
585 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
586 msgid "Clear"
587 msgstr "Очистити"
588
589 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
590 msgid "Assign:"
591 msgstr "Призначити:"
592
593 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
142594 msgid "Defaults"
143595 msgstr "Типово"
144596
145 #: ../../../src/GameStateConfigBase.cpp:89
597 #: ../../../src/MenuConfig.cpp:123
146598 msgid "Reset ALL settings?"
147599 msgstr "Скинути ВСІ налаштування?"
148600
149 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
601 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
150602 msgid "OK"
151603 msgstr "Гаразд"
152604
153 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
154 #: ../../../src/InputState.cpp:401
155 msgid "Cancel"
156 msgstr "Скасувати"
157
158 #: ../../../src/GameStateConfigBase.cpp:160
159 #: ../../../src/GameStateConfigDesktop.cpp:130
605 #: ../../../src/MenuConfig.cpp:246
606 msgid "Continue"
607 msgstr "Продовжити"
608
609 #: ../../../src/MenuConfig.cpp:248
610 msgid "Save Game"
611 msgstr "Зберегти гру"
612
613 #: ../../../src/MenuConfig.cpp:291
614 msgid "Default"
615 msgstr "Типово"
616
617 #: ../../../src/MenuConfig.cpp:291
618 msgid ""
619 "Show all loot tooltips, except for those that would be obscured by the "
620 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
621 msgstr ""
622 "Завжди показувати підказки предметів. крім тих, що будуть заступлені гравцем"
623 " або ворогом. Тимчасово показати всі підказки за допомогою 'Alt'."
624
625 #: ../../../src/MenuConfig.cpp:292
626 msgid "Show all"
627 msgstr "Показати все"
628
629 #: ../../../src/MenuConfig.cpp:292
630 msgid ""
631 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
632 msgstr ""
633 "Завжди показувати підказки предметів. Тимчасово приховати всі підказки за "
634 "допомогою 'Alt'."
635
636 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
637 msgid "Hidden"
638 msgstr "Приховано"
639
640 #: ../../../src/MenuConfig.cpp:293
641 msgid ""
642 "Always hide loot tooltips, except for when a piece of loot is hovered with "
643 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
644 msgstr ""
645 "Завжди приховувати підказки предметів. крім випадків, коли на предмет "
646 "наведено курсор миші. Тимчасово показати всі підказки за допомогою 'Alt'."
647
648 #: ../../../src/MenuConfig.cpp:296
649 msgid "Visible"
650 msgstr "Видима"
651
652 #: ../../../src/MenuConfig.cpp:297
653 msgid "Visible (2x zoom)"
654 msgstr "Видима (2х)"
655
656 #: ../../../src/MenuConfig.cpp:301
657 msgid ""
658 "Controls the type of warning to be activated when the player is below the "
659 "low health threshold."
660 msgstr ""
661 "Керує типом попередження, яке потрібно активувати, коли Здоров'я героя "
662 "знаходиться нижче нижнього порогу."
663
664 #: ../../../src/MenuConfig.cpp:302
665 msgid "- Display a message"
666 msgstr "- Показати повідомлення"
667
668 #: ../../../src/MenuConfig.cpp:303
669 msgid "- Play a sound"
670 msgstr "- Грати звук"
671
672 #: ../../../src/MenuConfig.cpp:304
673 msgid "- Change the cursor"
674 msgstr "- Змінити курсор"
675
676 #: ../../../src/MenuConfig.cpp:306
677 msgid "Disabled"
678 msgstr "Вимкнено"
679
680 #: ../../../src/MenuConfig.cpp:307
681 msgid "All"
682 msgstr "Все"
683
684 #: ../../../src/MenuConfig.cpp:308
685 msgid "Message & Cursor"
686 msgstr "Текст і Курсор"
687
688 #: ../../../src/MenuConfig.cpp:309
689 msgid "Message & Sound"
690 msgstr "Текст і Звук"
691
692 #: ../../../src/MenuConfig.cpp:310
693 msgid "Sound & Cursor"
694 msgstr "Звук і Курсор"
695
696 #: ../../../src/MenuConfig.cpp:311
697 msgid "Message"
698 msgstr "Текст"
699
700 #: ../../../src/MenuConfig.cpp:312
701 msgid "Cursor"
702 msgstr "Курсор"
703
704 #: ../../../src/MenuConfig.cpp:313
705 msgid "Sound"
706 msgstr "Звук"
707
708 #: ../../../src/MenuConfig.cpp:319
709 msgid ""
710 "When the player's health drops below the given threshold, the low health "
711 "notifications are triggered if one or more of them is enabled."
712 msgstr ""
713 "Коли Здоров'я героя знижується нижче заданого порогу, активуються сповіщення"
714 " про низький рівень Здоров'я, якщо одне або більше з них увімкнено."
715
716 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
717 msgid "Exit"
718 msgstr "Вихід"
719
720 #: ../../../src/MenuConfig.cpp:333
721 msgid "Video"
722 msgstr "Відео"
723
724 #: ../../../src/MenuConfig.cpp:334
160725 msgid "Audio"
161726 msgstr "Аудіо"
162727
163 #: ../../../src/GameStateConfigBase.cpp:161
164 #: ../../../src/GameStateConfigDesktop.cpp:131
728 #: ../../../src/MenuConfig.cpp:335
165729 msgid "Interface"
166730 msgstr "Інтерфейс"
167731
168 #: ../../../src/GameStateConfigBase.cpp:162
169 #: ../../../src/GameStateConfigDesktop.cpp:134
732 #: ../../../src/MenuConfig.cpp:336
733 msgid "Input"
734 msgstr "Керування"
735
736 #: ../../../src/MenuConfig.cpp:337
737 msgid "Keybindings"
738 msgstr "Клавіші"
739
740 #: ../../../src/MenuConfig.cpp:338
170741 msgid "Mods"
171742 msgstr "Моди"
172743
173 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
744 #: ../../../src/MenuConfig.cpp:350
745 msgid "Paused"
746 msgstr "Гру призупинено"
747
748 #: ../../../src/MenuConfig.cpp:353
749 msgid "Time Played"
750 msgstr "Час в грі"
751
752 #: ../../../src/MenuConfig.cpp:359
753 msgid "Renderer"
754 msgstr "Рендерер"
755
756 #: ../../../src/MenuConfig.cpp:360
757 msgid "Full Screen Mode"
758 msgstr "На весь екран"
759
760 #: ../../../src/MenuConfig.cpp:361
761 msgid "Hardware surfaces"
762 msgstr "Апаратні поверхні"
763
764 #: ../../../src/MenuConfig.cpp:362
765 msgid "V-Sync"
766 msgstr "Вертикальна синхронізація"
767
768 #: ../../../src/MenuConfig.cpp:363
769 msgid "Texture Filtering"
770 msgstr "Фільтр текстур"
771
772 #: ../../../src/MenuConfig.cpp:364
773 msgid "DPI scaling"
774 msgstr "Масштабування розлільної здатності"
775
776 #: ../../../src/MenuConfig.cpp:365
777 msgid "Parallax Layers"
778 msgstr "Шари середовища"
779
780 #: ../../../src/MenuConfig.cpp:366
781 msgid "Allow changing gamma"
782 msgstr "Дозволити зміну гами"
783
784 #: ../../../src/MenuConfig.cpp:367
785 msgid "Gamma"
786 msgstr "Гама"
787
788 #: ../../../src/MenuConfig.cpp:369
789 msgid "Sound Volume"
790 msgstr "Гучність звуків"
791
792 #: ../../../src/MenuConfig.cpp:370
174793 msgid "Music Volume"
175794 msgstr "Гучність музики"
176795
177 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
178 msgid "Sound Volume"
179 msgstr "Гучність звуків"
180
181 #: ../../../src/GameStateConfigBase.cpp:257
796 #: ../../../src/MenuConfig.cpp:372
182797 msgid "Language"
183798 msgstr "Мова"
184799
185 #: ../../../src/GameStateConfigBase.cpp:266
800 #: ../../../src/MenuConfig.cpp:373
186801 msgid "Show FPS"
187802 msgstr "Показувати FPS"
188803
189 #: ../../../src/GameStateConfigBase.cpp:270
804 #: ../../../src/MenuConfig.cpp:374
805 msgid "Hardware mouse cursor"
806 msgstr "Апаратний курсор миші"
807
808 #: ../../../src/MenuConfig.cpp:375
190809 msgid "Colorblind Mode"
191810 msgstr "Безколірний режим"
192811
193 #: ../../../src/GameStateConfigBase.cpp:274
194 msgid "Hardware mouse cursor"
195 msgstr "Апаратний курсор миші"
196
197 #: ../../../src/GameStateConfigBase.cpp:278
812 #: ../../../src/MenuConfig.cpp:376
198813 msgid "Developer Mode"
199814 msgstr "Режим розробника"
200815
201 #: ../../../src/GameStateConfigBase.cpp:282
816 #: ../../../src/MenuConfig.cpp:377
202817 msgid "Subtitles"
203818 msgstr "Субтитри"
204819
205 #: ../../../src/GameStateConfigBase.cpp:286
206 msgid "Active Mods"
207 msgstr "Активні моди"
208
209 #: ../../../src/GameStateConfigBase.cpp:295
210 msgid "Available Mods"
211 msgstr "Наявні моди"
212
213 #: ../../../src/GameStateConfigBase.cpp:314
214 msgid "<< Disable"
215 msgstr "<< Вимкнути"
216
217 #: ../../../src/GameStateConfigBase.cpp:320
218 msgid "Enable >>"
219 msgstr "Увімкнути >>"
220
221 #: ../../../src/GameStateConfigBase.cpp:873
222 msgid "Version:"
223 msgstr "Версія:"
224
225 #: ../../../src/GameStateConfigBase.cpp:878
226 msgid "Game:"
227 msgstr "Гра:"
228
229 #: ../../../src/GameStateConfigBase.cpp:883
230 msgid "Engine version:"
231 msgstr "Версія движку:"
232
233 #: ../../../src/GameStateConfigBase.cpp:891
234 msgid "Requires mods:"
235 msgstr "Необхідні моди:"
236
237 #: ../../../src/GameStateConfigDesktop.cpp:83
238 #: ../../../src/GameStateConfigDesktop.cpp:751
239 msgid "Clear"
240 msgstr "Очистити"
241
242 #: ../../../src/GameStateConfigDesktop.cpp:83
243 #: ../../../src/GameStateConfigDesktop.cpp:749
244 msgid "Assign:"
245 msgstr "Призначити:"
246
247 #: ../../../src/GameStateConfigDesktop.cpp:128
248 msgid "Video"
249 msgstr "Відео"
250
251 #: ../../../src/GameStateConfigDesktop.cpp:132
252 msgid "Input"
253 msgstr "Керування"
254
255 #: ../../../src/GameStateConfigDesktop.cpp:133
256 msgid "Keybindings"
257 msgstr "Клавіші"
258
259 #: ../../../src/GameStateConfigDesktop.cpp:188
820 #: ../../../src/MenuConfig.cpp:378
821 msgid "Loot tooltip visibility"
822 msgstr "Видимість міток речей"
823
824 #: ../../../src/MenuConfig.cpp:379
825 msgid "Mini-map mode"
826 msgstr "Режим міні-мапи"
827
828 #: ../../../src/MenuConfig.cpp:380
829 msgid "Always show stat bar labels"
830 msgstr "Завжди показувати текст на смужках статів"
831
832 #: ../../../src/MenuConfig.cpp:381
833 msgid "Allow stat bar auto-hiding"
834 msgstr "Дозволити автоматичне приховування смужок статів"
835
836 #: ../../../src/MenuConfig.cpp:382
837 msgid "Show combat text"
838 msgstr "Показувати текст бою"
839
840 #: ../../../src/MenuConfig.cpp:383
841 msgid "Automatically equip items"
842 msgstr "Автоматично одягати предмети"
843
844 #: ../../../src/MenuConfig.cpp:384
845 msgid "Show hidden entity markers"
846 msgstr "Показувати маркери прихованих істот."
847
848 #: ../../../src/MenuConfig.cpp:385
849 msgid "Low health notification"
850 msgstr "Дані про низький рівень Здоров'я"
851
852 #: ../../../src/MenuConfig.cpp:386
853 msgid "Low health threshold"
854 msgstr "Нижній поріг Здоров'я"
855
856 #: ../../../src/MenuConfig.cpp:389
857 msgid "Joystick"
858 msgstr "Джойстик"
859
860 #: ../../../src/MenuConfig.cpp:390
861 msgid "Move hero using mouse"
862 msgstr "Керувати рухом героя використовуючи мишку"
863
864 #: ../../../src/MenuConfig.cpp:391
865 msgid "Mouse aim"
866 msgstr "Цілитись мишкою"
867
868 #: ../../../src/MenuConfig.cpp:392
869 msgid "Do not use mouse"
870 msgstr "Не користуватись мишкою"
871
872 #: ../../../src/MenuConfig.cpp:393
873 msgid "Swap mouse movement button"
874 msgstr "Переставити кнопку переміщення миші"
875
876 #: ../../../src/MenuConfig.cpp:394
877 msgid "Attack with mouse movement"
878 msgstr "Атакувати рухом миші"
879
880 #: ../../../src/MenuConfig.cpp:395
881 msgid "Joystick Deadzone"
882 msgstr "Мертва зона джойстика"
883
884 #: ../../../src/MenuConfig.cpp:405
885 #, c-format
886 msgid "Primary binding: %s"
887 msgstr "Основна клавіша: %s"
888
889 #: ../../../src/MenuConfig.cpp:406
890 #, c-format
891 msgid "Alternate binding: %s"
892 msgstr "Альтернативна клавіша: %s"
893
894 #: ../../../src/MenuConfig.cpp:407
895 #, c-format
896 msgid "Joystick binding: %s"
897 msgstr "Елемент керування джойстика: %s"
898
899 #: ../../../src/MenuConfig.cpp:508
260900 msgid ""
261901 "Will try to store surfaces in video memory versus system memory. The effect "
262902 "this has on performance depends on the renderer."
264904 "Гра спробує зберігати поверхні у відеопам'яті, а не в оперативній пам'яті. "
265905 "Ефективність режиму залежить від вибраного рендерера."
266906
267 #: ../../../src/GameStateConfigDesktop.cpp:189
907 #: ../../../src/MenuConfig.cpp:509
268908 msgid ""
269909 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
270910 "windowed mode or input lag."
272912 "Запобігає смиканню екрану. Вимкніть, якщо ви помічаєте \"гальмування\" в "
273913 "віконному режимі або запізнілу реакцію на дії користувача."
274914
275 #: ../../../src/GameStateConfigDesktop.cpp:190
915 #: ../../../src/MenuConfig.cpp:510
276916 msgid ""
277917 "When enabled, this uses the screen DPI in addition to the window dimensions "
278918 "to scale the rendering resolution. Otherwise, only the window dimensions are"
282922 "використовуватись роздільна здатність екрану. Інакше використовуються лише "
283923 "розміри вікна."
284924
285 #: ../../../src/GameStateConfigDesktop.cpp:191
925 #: ../../../src/MenuConfig.cpp:511
286926 msgid ""
287927 "This enables parallax (non-tile) layers. Disabling this setting can improve "
288928 "performance in some cases."
290930 "Вмикає шари оточення (сніг, дощ, туман...). Вимкнення цієї опції може інколи"
291931 " підвищити продуктивність."
292932
293 #: ../../../src/GameStateConfigDesktop.cpp:192
294 msgid "Experimental"
295 msgstr "Експериментально"
296
297 #: ../../../src/GameStateConfigDesktop.cpp:193
298 msgid "For handheld devices"
299 msgstr "Для портативних пристроїв"
300
301 #: ../../../src/GameStateConfigDesktop.cpp:211
302 msgid "Renderer"
303 msgstr "Рендерер"
304
305 #: ../../../src/GameStateConfigDesktop.cpp:227
306 msgid "Full Screen Mode"
307 msgstr "На весь екран"
308
309 #: ../../../src/GameStateConfigDesktop.cpp:231
310 msgid "Move hero using mouse"
311 msgstr "Керувати рухом героя використовуючи мишку"
312
313 #: ../../../src/GameStateConfigDesktop.cpp:235
314 msgid "Hardware surfaces"
315 msgstr "Апаратні поверхні"
316
317 #: ../../../src/GameStateConfigDesktop.cpp:239
318 msgid "V-Sync"
319 msgstr "Вертикальна синхронізація"
320
321 #: ../../../src/GameStateConfigDesktop.cpp:243
322 msgid "Texture Filtering"
323 msgstr "Фільтр текстур"
324
325 #: ../../../src/GameStateConfigDesktop.cpp:247
326 msgid "DPI scaling"
327 msgstr "Масштабування розлільної здатності"
328
329 #: ../../../src/GameStateConfigDesktop.cpp:251
330 msgid "Parallax Layers"
331 msgstr "Шари середовища"
332
333 #: ../../../src/GameStateConfigDesktop.cpp:255
334 msgid "Allow changing gamma"
335 msgstr "Дозволити зміну гами"
336
337 #: ../../../src/GameStateConfigDesktop.cpp:259
338 msgid "Gamma"
339 msgstr "Гама"
340
341 #: ../../../src/GameStateConfigDesktop.cpp:263
342 msgid "Use joystick"
343 msgstr "Увімкнути джойстик"
344
345 #: ../../../src/GameStateConfigDesktop.cpp:267
346 msgid "Joystick"
347 msgstr "Джойстик"
348
349 #: ../../../src/GameStateConfigDesktop.cpp:283
350 msgid "Mouse aim"
351 msgstr "Цілитись мишкою"
352
353 #: ../../../src/GameStateConfigDesktop.cpp:287
354 msgid "Do not use mouse"
355 msgstr "Не користуватись мишкою"
356
357 #: ../../../src/GameStateConfigDesktop.cpp:291
358 msgid "Joystick Deadzone"
359 msgstr "Мертва зона джойстика"
360
361 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
362 msgid "Loading..."
363 msgstr "Завантаження..."
364
365 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
366 msgid "Delete Save"
367 msgstr "Видалити"
368
369 #: ../../../src/GameStateLoad.cpp:88
370 msgid "Delete this save?"
371 msgstr "Видалити цього персонажа?"
372
373 #: ../../../src/GameStateLoad.cpp:90
374 msgid "Exit to Title"
375 msgstr "Головне меню"
376
377 #: ../../../src/GameStateLoad.cpp:93
378 msgid "New Game"
379 msgstr "Нова гра"
380
381 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
382 msgid "Choose a Slot"
383 msgstr "Виберіть слот"
384
385 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
386 msgid "Enable a story mod to continue"
387 msgstr "Увімкніть мод повісті щоб продовжити"
388
389 #: ../../../src/GameStateLoad.cpp:589
390 msgid "Load Game"
391 msgstr "Завантажити"
392
393 #: ../../../src/GameStateLoad.cpp:695
394 msgid "Entering game world..."
395 msgstr "Входжу в ігровий світ..."
396
397 #: ../../../src/GameStateLoad.cpp:698
398 msgid "Loading saved game..."
399 msgstr "Завантажую збереження..."
400
401 #: ../../../src/GameStateLoad.cpp:731
402 msgid "Invalid save"
403 msgstr "Невірне збереження"
404
405 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
406 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
407 #: ../../../src/MenuPowers.cpp:1542
408 #, c-format
409 msgid "Level %d"
410 msgstr "Рівень %d"
411
412 #: ../../../src/GameStateNew.cpp:68
413 msgid "Create"
414 msgstr "Створити"
415
416 #: ../../../src/GameStateNew.cpp:76
417 msgid "Randomize"
418 msgstr "Випадково"
419
420 #: ../../../src/GameStateNew.cpp:92
421 msgid "Choose a Portrait"
422 msgstr "Виберіть портрет"
423
424 #: ../../../src/GameStateNew.cpp:96
425 msgid "Choose a Name"
426 msgstr "Вкажіть ім'я"
427
428 #: ../../../src/GameStateNew.cpp:100
429 msgid "Permadeath?"
430 msgstr "Не воскресає"
431
432 #: ../../../src/GameStateNew.cpp:104
433 msgid "Choose a Class"
434 msgstr "Виберіть клас"
435
436 #: ../../../src/GameStateTitle.cpp:108
437 msgid "Play Game"
438 msgstr "Грати гру"
439
440 #: ../../../src/GameStateTitle.cpp:111
441 msgid "Enable a core mod to continue"
442 msgstr "Увімкніть базовий мод щоб продовжити"
443
444 #: ../../../src/GameStateTitle.cpp:115
445 msgid "Configuration"
446 msgstr "Параметри"
447
448 #: ../../../src/GameStateTitle.cpp:118
449 msgid "Credits"
450 msgstr "Автори"
451
452 #: ../../../src/GameStateTitle.cpp:121
453 msgid "Exit Game"
454 msgstr "Вийти з гри"
455
456 #: ../../../src/InputState.cpp:402
457 msgid "Accept"
458 msgstr "Прийняти"
459
460 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
461 msgid "Up"
462 msgstr "Вверх"
463
464 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
465 msgid "Down"
466 msgstr "Вниз"
467
468 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
469 msgid "Left"
470 msgstr "Вліво"
471
472 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
473 msgid "Right"
474 msgstr "Вправо"
475
476 #: ../../../src/InputState.cpp:407
477 msgid "Bar1"
478 msgstr "Слот1"
479
480 #: ../../../src/InputState.cpp:408
481 msgid "Bar2"
482 msgstr "Слот2"
483
484 #: ../../../src/InputState.cpp:409
485 msgid "Bar3"
486 msgstr "Слот3"
487
488 #: ../../../src/InputState.cpp:410
489 msgid "Bar4"
490 msgstr "Слот4"
491
492 #: ../../../src/InputState.cpp:411
493 msgid "Bar5"
494 msgstr "Слот5"
495
496 #: ../../../src/InputState.cpp:412
497 msgid "Bar6"
498 msgstr "Слот6"
499
500 #: ../../../src/InputState.cpp:413
501 msgid "Bar7"
502 msgstr "Слот7"
503
504 #: ../../../src/InputState.cpp:414
505 msgid "Bar8"
506 msgstr "Слот8"
507
508 #: ../../../src/InputState.cpp:415
509 msgid "Bar9"
510 msgstr "Слот9"
511
512 #: ../../../src/InputState.cpp:416
513 msgid "Bar0"
514 msgstr "Слот0"
515
516 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
517 #: ../../../src/MenuCharacter.cpp:54
518 msgid "Character"
519 msgstr "Персонаж"
520
521 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
522 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
523 msgid "Inventory"
524 msgstr "Інвентар"
525
526 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
527 #: ../../../src/MenuPowers.cpp:168
528 msgid "Powers"
529 msgstr "Уміння"
530
531 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
532 #: ../../../src/MenuLog.cpp:72
533 msgid "Log"
534 msgstr "Журнал"
535
536 #: ../../../src/InputState.cpp:421
537 msgid "Main1"
538 msgstr "Дія1"
539
540 #: ../../../src/InputState.cpp:422
541 msgid "Main2"
542 msgstr "Дія2"
543
544 #: ../../../src/InputState.cpp:423
545 msgid "Ctrl"
546 msgstr "Ctrl"
547
548 #: ../../../src/InputState.cpp:424
549 msgid "Shift"
550 msgstr "Shift"
551
552 #: ../../../src/InputState.cpp:425
553 msgid "Alt"
554 msgstr "Alt"
555
556 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
557 msgid "Delete"
558 msgstr "Видалити"
559
560 #: ../../../src/InputState.cpp:427
561 msgid "ActionBar Accept"
562 msgstr "Дії: Прийняти"
563
564 #: ../../../src/InputState.cpp:428
565 msgid "ActionBar Left"
566 msgstr "Дії: Вліво"
567
568 #: ../../../src/InputState.cpp:429
569 msgid "ActionBar Right"
570 msgstr "Дії: Вправо"
571
572 #: ../../../src/InputState.cpp:430
573 msgid "ActionBar Use"
574 msgstr "Дії: Використати"
575
576 #: ../../../src/InputState.cpp:431
577 msgid "Developer Menu"
578 msgstr "Меню розробника"
579
580 #: ../../../src/InputState.cpp:433
581 msgid "Left Mouse"
582 msgstr "ЛівКнМиш"
583
584 #: ../../../src/InputState.cpp:434
585 msgid "Middle Mouse"
586 msgstr "СерКнМиш"
587
588 #: ../../../src/InputState.cpp:435
589 msgid "Right Mouse"
590 msgstr "ПрКнМиш"
591
592 #: ../../../src/InputState.cpp:436
593 msgid "Wheel Up"
594 msgstr "Колесо вверх"
595
596 #: ../../../src/InputState.cpp:437
597 msgid "Wheel Down"
598 msgstr "Колесо вниз"
599
600 #: ../../../src/InputState.cpp:438
601 msgid "Mouse X1"
602 msgstr "Мишка X1"
603
604 #: ../../../src/InputState.cpp:439
605 msgid "Mouse X2"
606 msgstr "Мишка X2"
607
608 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
609 msgid "Unknown Item"
610 msgstr "Невідомий предмет"
611
612 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
613 #, c-format
614 msgid "%d%% Speed"
615 msgstr "%d%% Швидкості"
616
617 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
618 #, c-format
619 msgid "%d%% Attack Speed"
620 msgstr "%d%% Швидкості атаки"
621
622 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
623 #: ../../../src/MenuPowers.cpp:833
624 #, c-format
625 msgid "Resistance (%s)"
626 msgstr "Опір (%s)"
627
628 #: ../../../src/ItemManager.cpp:684
629 #, c-format
630 msgid "Requires %s"
631 msgstr "Потребує %s"
632
633 #: ../../../src/ItemManager.cpp:733
634 msgid "Quest Item"
635 msgstr "Квестовий предмет"
636
637 #: ../../../src/ItemManager.cpp:760
638 #, c-format
639 msgid "Quality: %s"
640 msgstr "Якість: %s"
641
642 #: ../../../src/ItemManager.cpp:785
643 #, c-format
644 msgid "Absorb: %d-%d"
645 msgstr "Поглинання: %d-%d"
646
647 #: ../../../src/ItemManager.cpp:787
648 #, c-format
649 msgid "Absorb: %d"
650 msgstr "Поглинання: %d"
651
652 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
653 #: ../../../src/MenuPowers.cpp:1134
654 #, c-format
655 msgid "Requires Level %d"
656 msgstr "Вимагає Рівень %d"
657
658 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
659 #: ../../../src/MenuPowers.cpp:1125
660 #, c-format
661 msgid "Requires %s %d"
662 msgstr "Потребує %s %d"
663
664 #: ../../../src/ItemManager.cpp:849
665 #, c-format
666 msgid "Requires Class: %s"
667 msgstr "Вимагає клас: %s"
668
669 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
670 #, c-format
671 msgid "Buy Price: %d %s"
672 msgstr "Ціна купівлі: %d %s"
673
674 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
675 #, c-format
676 msgid "Buy Price: %d %s each"
677 msgstr "Ціна купівлі: %d %s кожен"
678
679 #: ../../../src/ItemManager.cpp:886
680 #, c-format
681 msgid "Sell Price: %d %s"
682 msgstr "Ціна продажу: %d %s"
683
684 #: ../../../src/ItemManager.cpp:888
685 #, c-format
686 msgid "Sell Price: %d %s each"
687 msgstr "Ціна продажу: %d %s кожен"
688
689 #: ../../../src/ItemManager.cpp:897
690 msgid "Set:"
691 msgstr "Набір:"
692
693 #: ../../../src/ItemManager.cpp:904
694 #, c-format
695 msgid "%d items:"
696 msgstr "%d предмети:"
697
698 #: ../../../src/ItemManager.cpp:917
699 #, c-format
700 msgid "Press [%s] to use"
701 msgstr "Натисніть [%s] для використання"
702
703 #: ../../../src/ItemManager.cpp:920
704 #, c-format
705 msgid "Press [%s] to read"
706 msgstr "Натисніть [%s] щоб прочитати"
707
708 #: ../../../src/MenuActionBar.cpp:87
709 msgid "Loot tooltip visibility"
710 msgstr "Видимість міток речей"
711
712 #: ../../../src/MenuActionBar.cpp:88
713 msgid "Mini-map mode"
714 msgstr "Режим міні-мапи"
715
716 #: ../../../src/MenuActionBar.cpp:89
717 msgid "Always show stat bar labels"
718 msgstr "Завжди показувати текст на смужках статів"
719
720 #: ../../../src/MenuActionBar.cpp:90
721 msgid "Show combat text"
722 msgstr "Показувати текст бою"
723
724 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
725 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
726 #, c-format
727 msgid "Hotkey: %s"
728 msgstr "Гаряча клавіша: %s"
729
730 #: ../../../src/MenuActionBar.cpp:474
731 #, c-format
732 msgid "Default. Temporarily show all loot tooltips with '%s'."
733 msgstr "Типово. Тимчасово показувати всі мітки з '%s'."
734
735 #: ../../../src/MenuActionBar.cpp:476
736 #, c-format
737 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
738 msgstr "Показати всі. Тимчасово приховати всі мітки з '%s'."
739
740 #: ../../../src/MenuActionBar.cpp:478
741 #, c-format
742 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
743 msgstr "Приховати всі. Тимчасово показувати всі мітки з '%s'"
744
745 #: ../../../src/MenuActionBar.cpp:482
746 msgid "Visible"
747 msgstr "Видима"
748
749 #: ../../../src/MenuActionBar.cpp:484
750 msgid "Visible (2x zoom)"
751 msgstr "Видима (2х)"
752
753 #: ../../../src/MenuActionBar.cpp:486
754 msgid "Hidden"
755 msgstr "Прихована"
756
757 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
758 msgid "Enabled"
759 msgstr "Увімкнено"
760
761 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
762 msgid "Disabled"
763 msgstr "Вимкнено"
764
765 #: ../../../src/MenuActionBar.cpp:657
766 msgid "Not enough MP."
767 msgstr "Недостатньо Мани."
768
769 #: ../../../src/MenuActiveEffects.cpp:124
770 #, c-format
771 msgid "x%d"
772 msgstr "x %d"
773
774 #: ../../../src/MenuActiveEffects.cpp:219
775 msgid "Remaining:"
776 msgstr "Залишилось:"
777
778 #: ../../../src/MenuActiveEffects.cpp:225
779 #, c-format
780 msgid "x%d stacks"
781 msgstr "x%d пачок"
782
783 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
784 msgid "Name"
785 msgstr "Ім'я"
786
787 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
788 msgid "Level"
789 msgstr "Рівень"
790
791 #: ../../../src/MenuCharacter.cpp:310
792 #, c-format
793 msgid "%d unspent stat point"
794 msgstr "%d навитрачене очко статистики"
795
796 #: ../../../src/MenuCharacter.cpp:313
797 #, c-format
798 msgid "%d unspent stat points"
799 msgstr "%d невитрачених очків статистики"
800
801 #: ../../../src/MenuCharacter.cpp:355
802 #, c-format
803 msgid "Reduces the damage taken from \"%s\" elemental attacks."
804 msgstr "Зменшує шкоду, завдану атаками стихії \"%s\"."
805
806 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
807 #, c-format
808 msgid "XP: %d"
809 msgstr "Досвід: %d"
810
811 #: ../../../src/MenuCharacter.cpp:367
812 #, c-format
813 msgid "Next: %d"
814 msgstr "Наступний: %d"
815
816 #: ../../../src/MenuCharacter.cpp:373
817 #, c-format
818 msgid "base (%d), bonus (%d)"
819 msgstr "базове (%d), бонус (%d)"
820
821 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
822 msgid "Related stats:"
823 msgstr "Пов'язані характеристики:"
824
825 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
826 #, c-format
827 msgid "Each level grants %d."
828 msgstr "Кожен рівень додає %d."
829
830 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
831 #, c-format
832 msgid "Each point of %s grants %d."
833 msgstr "Кожне очко витрачене на %s додає %d."
933 #: ../../../src/MenuConfig.cpp:512
934 msgid ""
935 "Enables the below setting that controls the screen gamma level. The behavior"
936 " of the gamma setting can vary between platforms."
937 msgstr ""
938 "Вмикає нижченаведену опцію, яка контролюює рівень гами екрану. Поведінка "
939 "налаштування гами може відрізнятися для різних платформ."
940
941 #: ../../../src/MenuConfig.cpp:513
942 msgid ""
943 "Provides additional text for information that is primarily conveyed through "
944 "color."
945 msgstr ""
946 "Забезпечує додатковий текст для інформації, яка передається через колір."
947
948 #: ../../../src/MenuConfig.cpp:514
949 msgid ""
950 "Some mods will automatically hide the stat bars when they are inactive. "
951 "Disabling this option will keep them displayed at all times."
952 msgstr ""
953 "Деякі моди автоматично приховують смужки статів, коли вони неактивні. Якщо "
954 "вимкнути цю опцію, вони будуть відображатись завжди."
955
956 #: ../../../src/MenuConfig.cpp:515
957 msgid ""
958 "When enabled, empty equipment slots will be filled with applicable items "
959 "when they are obtained."
960 msgstr ""
961 "Коли увімкнено, порожні комірки спорядження будуть заповнені відповідними "
962 "предметами при їх отриманні."
963
964 #: ../../../src/MenuConfig.cpp:516
965 msgid ""
966 "Shows a marker above enemies, allies, and the player when they are obscured "
967 "by tall objects."
968 msgstr ""
969 "Показує маркер над ворогами, союзниками і героєм, коли вони знаходяться за "
970 "високими об'єктами."
971
972 #: ../../../src/MenuConfig.cpp:517
973 msgid ""
974 "This allows the game to be controlled entirely with the keyboard (or "
975 "joystick)."
976 msgstr ""
977 "Дозволяє керувати грою повністю за допомогою клавіатури (або джойстика)."
978
979 #: ../../../src/MenuConfig.cpp:518
980 msgid ""
981 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
982 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
983 "instead of 'Main1'."
984 msgstr ""
985 "Якщо ввімкнено функцію \"Керувати рухом героя використовуючи мишку\", ця "
986 "опція визначає, яка кнопка використовуються для переміщення героя: 'Дія1' чи"
987 " 'Дія2'. Якщо увімкнено, 'Дія2' переміщуватиме героя замість 'Дія1'."
988
989 #: ../../../src/MenuConfig.cpp:519
990 msgid ""
991 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
992 "assigned to the movement button can be used by targeting an enemy. If this "
993 "setting is disabled, it is required to use 'Shift' to access the Power "
994 "assigned to the movement button."
995 msgstr ""
996 "Якщо ввімкнено функцію \"Керувати рухом героя використовуючи мишку\", ця "
997 "опція визначає, чи можна використовувати Уміння, призначене на кнопку "
998 "переміщення, шляхом націлювання на ворога. Якщо це налаштування вимкнено, "
999 "для доступу до Уміння, призначеного на кнопку переміщення, потрібно "
1000 "використовувати 'Shift'."
1001
1002 #: ../../../src/MenuConfig.cpp:520
1003 msgid ""
1004 "The player's attacks will be aimed in the direction of the mouse cursor when"
1005 " this is enabled."
1006 msgstr ""
1007 "Якщо увімкнено, атаки героя будуть спрямовані у напрямку курсору миші."
1008
1009 #: ../../../src/MenuConfig.cpp:571
1010 msgid "Active Mods"
1011 msgstr "Активні моди"
1012
1013 #: ../../../src/MenuConfig.cpp:580
1014 msgid "Available Mods"
1015 msgstr "Наявні моди"
1016
1017 #: ../../../src/MenuConfig.cpp:599
1018 msgid "<< Disable"
1019 msgstr "<< Вимкнути"
1020
1021 #: ../../../src/MenuConfig.cpp:605
1022 msgid "Enable >>"
1023 msgstr "Увімкнути >>"
1024
1025 #: ../../../src/MenuConfig.cpp:1436
1026 msgid "Version:"
1027 msgstr "Версія:"
1028
1029 #: ../../../src/MenuConfig.cpp:1441
1030 msgid "Game:"
1031 msgstr "Гра:"
1032
1033 #: ../../../src/MenuConfig.cpp:1446
1034 msgid "Engine version:"
1035 msgstr "Версія движку:"
1036
1037 #: ../../../src/MenuConfig.cpp:1454
1038 msgid "Requires mods:"
1039 msgstr "Необхідні моди:"
1040
1041 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
1042 msgid "(none)"
1043 msgstr "(нічого)"
1044
1045 #: ../../../src/MenuConfig.cpp:1579
1046 msgid "Save & Exit"
1047 msgstr "Зберегти і Вийти"
8341048
8351049 #: ../../../src/MenuDevConsole.cpp:63
8361050 msgid "Execute"
9921206 msgid "HINT: Type help"
9931207 msgstr "ПІДКАЗКА: Введіть help"
9941208
995 #: ../../../src/MenuEnemy.cpp:138
1209 #: ../../../src/MenuEnemy.cpp:162
9961210 #, c-format
9971211 msgid "%s level %d"
9981212 msgstr "%s рівень %d"
9991213
1000 #: ../../../src/MenuEnemy.cpp:162
1214 #: ../../../src/MenuEnemy.cpp:186
10011215 msgid "Dead"
10021216 msgstr "Мертвий"
10031217
1004 #: ../../../src/MenuEnemy.cpp:164
1218 #: ../../../src/MenuEnemy.cpp:188
10051219 msgid "Destroyed"
10061220 msgstr "Знищений"
10071221
1008 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
1009 msgid "Paused"
1010 msgstr "Призупинено"
1011
1012 #: ../../../src/MenuExit.cpp:91
1013 msgid "Save & Exit"
1014 msgstr "Зберегти і Вийти"
1015
1016 #: ../../../src/MenuExit.cpp:92
1017 msgid "Exit"
1018 msgstr "Вийти"
1019
1020 #: ../../../src/MenuExit.cpp:96
1021 msgid "Continue"
1022 msgstr "Продовжити"
1023
1024 #: ../../../src/MenuInventory.cpp:73
1025 msgid "Automatically equip items"
1026 msgstr "Автоматично одягати предмети"
1027
1028 #: ../../../src/MenuInventory.cpp:188
1222 #: ../../../src/MenuInventory.cpp:177
10291223 #, c-format
10301224 msgid "Lost %d%% of %s."
10311225 msgstr "Втрачено %d%% з %s."
10321226
1033 #: ../../../src/MenuInventory.cpp:195
1227 #: ../../../src/MenuInventory.cpp:184
10341228 #, c-format
10351229 msgid "Lost %d%% of total XP."
10361230 msgstr "Втрачено %d%% загального Досвіду."
10371231
1038 #: ../../../src/MenuInventory.cpp:200
1232 #: ../../../src/MenuInventory.cpp:189
10391233 #, c-format
10401234 msgid "Lost %d%% of current level XP."
10411235 msgstr "Втрачено %d%% Досвіду поточного рівня."
10421236
1043 #: ../../../src/MenuInventory.cpp:226
1237 #: ../../../src/MenuInventory.cpp:215
10441238 #, c-format
10451239 msgid "Lost %s."
10461240 msgstr "Втрачено %s."
10471241
1048 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1242 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10491243 #, c-format
10501244 msgid "%d %s"
10511245 msgstr "%d %s"
10521246
1053 #: ../../../src/MenuInventory.cpp:317
1247 #: ../../../src/MenuInventory.cpp:300
10541248 msgid "Pick up item(s):"
10551249 msgstr "Підняти предмет(и):"
10561250
1057 #: ../../../src/MenuInventory.cpp:318
1251 #: ../../../src/MenuInventory.cpp:301
10581252 msgid "Use or equip item:"
10591253 msgstr "Використати предмет:"
10601254
1061 #: ../../../src/MenuInventory.cpp:319
1255 #: ../../../src/MenuInventory.cpp:302
10621256 #, c-format
10631257 msgid "%s modifiers"
10641258 msgstr "Модифікатори для %s"
10651259
1066 #: ../../../src/MenuInventory.cpp:320
1260 #: ../../../src/MenuInventory.cpp:303
10671261 msgid "Select a quantity of item:"
10681262 msgstr "Вказати кількість предметів:"
10691263
1070 #: ../../../src/MenuInventory.cpp:323
1264 #: ../../../src/MenuInventory.cpp:306
10711265 msgid "Stash item stack:"
10721266 msgstr "Пачку предметів в тайник:"
10731267
1074 #: ../../../src/MenuInventory.cpp:325
1268 #: ../../../src/MenuInventory.cpp:308
10751269 msgid "Sell item stack:"
10761270 msgstr "Продати пачку предметів:"
10771271
1078 #: ../../../src/MenuInventory.cpp:592
1272 #: ../../../src/MenuInventory.cpp:574
10791273 msgid "You don't have enough of the required item."
10801274 msgstr "У вас недостатньо потрібних предметів."
10811275
1082 #: ../../../src/MenuInventory.cpp:599
1276 #: ../../../src/MenuInventory.cpp:586
10831277 msgid "You can't use this item right now."
10841278 msgstr "Наразі неможливо використати цей предмет."
10851279
1086 #: ../../../src/MenuInventory.cpp:611
1280 #: ../../../src/MenuInventory.cpp:598
10871281 msgid "This item can only be used from the action bar."
10881282 msgstr "Цей предмет може бути використаний лише з панелі дій."
10891283
1090 #: ../../../src/MenuInventory.cpp:729
1284 #: ../../../src/MenuInventory.cpp:716
10911285 msgid "Inventory is full."
10921286 msgstr "Інвентар заповнений."
10931287
1094 #: ../../../src/MenuInventory.cpp:849
1288 #: ../../../src/MenuInventory.cpp:841
10951289 #, c-format
10961290 msgid "Not enough %s."
10971291 msgstr "Недостатньо %s."
10981292
1099 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1293 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
11001294 msgid "This item can not be sold."
11011295 msgstr "Цей предмет не можна продати."
11021296
11081302 msgid "Quests"
11091303 msgstr "Квести"
11101304
1111 #: ../../../src/MenuManager.cpp:286
1305 #: ../../../src/MenuManager.cpp:296
11121306 #, c-format
11131307 msgid "XP: %d/%d"
11141308 msgstr "Досвід: %d/%d"
11151309
1116 #: ../../../src/MenuManager.cpp:827
1310 #: ../../../src/MenuManager.cpp:854
11171311 msgid "This item can not be dropped."
11181312 msgstr "Цей предмет не можна викинути."
11191313
11211315 msgid "Enter amount:"
11221316 msgstr "Вкажіть кількість:"
11231317
1124 #: ../../../src/MenuPowers.cpp:787
1318 #: ../../../src/MenuPowers.cpp:786
11251319 msgid "Passive"
11261320 msgstr "Пасивне"
11271321
1128 #: ../../../src/MenuPowers.cpp:792
1322 #: ../../../src/MenuPowers.cpp:791
11291323 #, c-format
11301324 msgid "Costs %d MP"
11311325 msgstr "Коштує %d Мани"
11321326
1133 #: ../../../src/MenuPowers.cpp:796
1327 #: ../../../src/MenuPowers.cpp:795
11341328 #, c-format
11351329 msgid "Costs %d HP"
11361330 msgstr "Коштує %d Здоров'я"
11371331
1138 #: ../../../src/MenuPowers.cpp:801
1332 #: ../../../src/MenuPowers.cpp:800
11391333 msgid "Cooldown:"
11401334 msgstr "Очікування:"
11411335
1142 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1336 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11431337 msgid "Damage per second"
11441338 msgstr "Шкоди за секунду"
11451339
1146 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1340 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11471341 msgid "HP per second"
11481342 msgstr "Здоров'я за секунду"
11491343
1150 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1344 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11511345 msgid "MP per second"
11521346 msgstr "Мани за секунду"
11531347
1154 #: ../../../src/MenuPowers.cpp:885
1348 #: ../../../src/MenuPowers.cpp:884
11551349 msgid "Immobilize"
11561350 msgstr "Сковування"
11571351
1158 #: ../../../src/MenuPowers.cpp:893
1352 #: ../../../src/MenuPowers.cpp:892
11591353 msgid "Immunity"
11601354 msgstr "Імунітет"
11611355
1162 #: ../../../src/MenuPowers.cpp:896
1356 #: ../../../src/MenuPowers.cpp:895
11631357 msgid "Immunity to damage over time"
11641358 msgstr "Імунітет до шкоди протягом часу"
11651359
1166 #: ../../../src/MenuPowers.cpp:899
1360 #: ../../../src/MenuPowers.cpp:898
11671361 msgid "Immunity to slow"
11681362 msgstr "Імунітет до уповільнення"
11691363
1170 #: ../../../src/MenuPowers.cpp:902
1364 #: ../../../src/MenuPowers.cpp:901
11711365 msgid "Immunity to stun"
11721366 msgstr "Імунітет до оглушення"
11731367
1174 #: ../../../src/MenuPowers.cpp:905
1368 #: ../../../src/MenuPowers.cpp:904
11751369 msgid "Immunity to HP steal"
11761370 msgstr "Імунітет до крадіжки Здоров'я"
11771371
1178 #: ../../../src/MenuPowers.cpp:908
1372 #: ../../../src/MenuPowers.cpp:907
11791373 msgid "Immunity to MP steal"
11801374 msgstr "Імунітет до крадіжки Мани"
11811375
1182 #: ../../../src/MenuPowers.cpp:911
1376 #: ../../../src/MenuPowers.cpp:910
11831377 msgid "Immunity to knockback"
11841378 msgstr "Імунітет до відкидання"
11851379
1186 #: ../../../src/MenuPowers.cpp:914
1380 #: ../../../src/MenuPowers.cpp:913
11871381 msgid "Immunity to damage reflection"
11881382 msgstr "Імунітет до відбиття шкоди."
11891383
1190 #: ../../../src/MenuPowers.cpp:917
1384 #: ../../../src/MenuPowers.cpp:916
11911385 msgid "Stun"
11921386 msgstr "Оглушення"
11931387
1194 #: ../../../src/MenuPowers.cpp:920
1388 #: ../../../src/MenuPowers.cpp:919
11951389 msgid "Automatic revive on death"
11961390 msgstr "Автоматичне відродження при смерті"
11971391
1198 #: ../../../src/MenuPowers.cpp:923
1392 #: ../../../src/MenuPowers.cpp:922
11991393 msgid "Convert"
12001394 msgstr "Перетворення"
12011395
1202 #: ../../../src/MenuPowers.cpp:926
1396 #: ../../../src/MenuPowers.cpp:925
12031397 msgid "Fear"
12041398 msgstr "Страх"
12051399
1206 #: ../../../src/MenuPowers.cpp:929
1400 #: ../../../src/MenuPowers.cpp:928
12071401 msgid "Lifespan"
12081402 msgstr "Тривалість життя"
12091403
1210 #: ../../../src/MenuPowers.cpp:953
1404 #: ../../../src/MenuPowers.cpp:952
12111405 msgid "Magical Shield"
12121406 msgstr "Магічний Щит"
12131407
1214 #: ../../../src/MenuPowers.cpp:982
1408 #: ../../../src/MenuPowers.cpp:981
12151409 msgid "Healing"
12161410 msgstr "Лікування"
12171411
1218 #: ../../../src/MenuPowers.cpp:985
1412 #: ../../../src/MenuPowers.cpp:984
12191413 msgid "Knockback"
12201414 msgstr "Відкидання"
12211415
1222 #: ../../../src/MenuPowers.cpp:1010
1416 #: ../../../src/MenuPowers.cpp:1009
12231417 #, c-format
12241418 msgid "%d%% chance"
12251419 msgstr "%d%% шанс"
12261420
1227 #: ../../../src/MenuPowers.cpp:1062
1421 #: ../../../src/MenuPowers.cpp:1061
12281422 msgid "Base Accuracy"
12291423 msgstr "Базова Точність"
12301424
1231 #: ../../../src/MenuPowers.cpp:1082
1425 #: ../../../src/MenuPowers.cpp:1081
12321426 msgid "Base Critical Chance"
12331427 msgstr "Базовий Критичний Шанс"
12341428
1235 #: ../../../src/MenuPowers.cpp:1090
1429 #: ../../../src/MenuPowers.cpp:1089
12361430 msgid "Ignores Absorbtion"
12371431 msgstr "Ігнорує Поглинання"
12381432
1239 #: ../../../src/MenuPowers.cpp:1095
1433 #: ../../../src/MenuPowers.cpp:1094
12401434 msgid "Ignores Avoidance"
12411435 msgstr "Ігнорує Уникнення"
12421436
1243 #: ../../../src/MenuPowers.cpp:1100
1437 #: ../../../src/MenuPowers.cpp:1099
12441438 #, c-format
12451439 msgid "%d%% Chance to crit slowed targets"
12461440 msgstr "%d%% Шанс на крит. сповільненої цілі"
12471441
1248 #: ../../../src/MenuPowers.cpp:1105
1442 #: ../../../src/MenuPowers.cpp:1104
12491443 #, c-format
12501444 msgid "Elemental Damage (%s)"
12511445 msgstr "Шкода від стихії (%s)"
12521446
1253 #: ../../../src/MenuPowers.cpp:1114
1447 #: ../../../src/MenuPowers.cpp:1113
12541448 #, c-format
12551449 msgid "Requires a %s"
12561450 msgstr "Вимагає %s"
12571451
1258 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1452 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12591453 #, c-format
12601454 msgid "Requires Power: %s"
12611455 msgstr "Вимагає Уміння: %s"
12621456
1263 #: ../../../src/MenuPowers.cpp:1163
1457 #: ../../../src/MenuPowers.cpp:1162
12641458 msgid "Click to Unlock (uses 1 Skill Point)"
12651459 msgstr "Клацніть для вивчення (потребує 1 очко Умінь)"
12661460
1267 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1461 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12681462 msgid "Requires 1 Skill Point"
12691463 msgstr "Вимагає 1 очко Умінь"
12701464
1271 #: ../../../src/MenuPowers.cpp:1355
1465 #: ../../../src/MenuPowers.cpp:1354
12721466 #, c-format
12731467 msgid "%d unspent skill point"
12741468 msgstr "%d невитрачене очко Умінь"
12751469
1276 #: ../../../src/MenuPowers.cpp:1358
1470 #: ../../../src/MenuPowers.cpp:1357
12771471 #, c-format
12781472 msgid "%d unspent skill points"
12791473 msgstr "%d невитрачених очок Умінь"
12801474
1281 #: ../../../src/MenuPowers.cpp:1388
1475 #: ../../../src/MenuPowers.cpp:1387
12821476 msgid "Next Level:"
12831477 msgstr "Натсупний рівень:"
12841478
1285 #: ../../../src/MenuStash.cpp:96
1286 msgid "Shared Stash"
1287 msgstr "Загальний тайник"
1288
1289 #: ../../../src/MenuStash.cpp:209
1479 #: ../../../src/MenuStash.cpp:53
1480 msgid "Private"
1481 msgstr "Особистий"
1482
1483 #: ../../../src/MenuStash.cpp:55
1484 msgid "Shared"
1485 msgstr "Загальний"
1486
1487 #: ../../../src/MenuStash.cpp:103
1488 msgid "Stash"
1489 msgstr "Тайник"
1490
1491 #: ../../../src/MenuStash.cpp:258
12901492 msgid "Can not store quest items in the stash."
12911493 msgstr "Квестові речі не можна зберігати в тайнику."
12921494
1293 #: ../../../src/MenuStash.cpp:219
1495 #: ../../../src/MenuStash.cpp:263
1496 msgid "This item can not be stored in the stash."
1497 msgstr "Цю річ не можна зберегти в тайнику."
1498
1499 #: ../../../src/MenuStash.cpp:268
1500 msgid "This item can not be stored in the private stash."
1501 msgstr "Цю річ не можна зберігати в приватному сховку."
1502
1503 #: ../../../src/MenuStash.cpp:273
1504 msgid "This item can not be stored in the shared stash."
1505 msgstr "Цю річ не можна зберігати в спільному сховку."
1506
1507 #: ../../../src/MenuStash.cpp:283
12941508 msgid "Stash is full."
12951509 msgstr "Тайник заповнений."
12961510
1297 #: ../../../src/MenuTalker.cpp:454
1511 #: ../../../src/MenuStash.cpp:340
1512 #, c-format
1513 msgid "Can not store item in stash: %s"
1514 msgstr "Неможливо зберегти в тайнику: %s"
1515
1516 #: ../../../src/MenuTalker.cpp:447
1517 #, c-format
1518 msgid "<dialog node %d>"
1519 msgstr "<dialog node %d>"
1520
1521 #: ../../../src/MenuTalker.cpp:455
12981522 msgid "Trade"
12991523 msgstr "Торгувати"
13001524
13021526 msgid "Buyback"
13031527 msgstr "Викуп"
13041528
1305 #: ../../../src/MenuVendor.cpp:279
1529 #: ../../../src/MenuVendor.cpp:281
13061530 msgid "Vendor"
13071531 msgstr "Торговець"
13081532
1309 #: ../../../src/PowerManager.cpp:1136
1533 #: ../../../src/PowerManager.cpp:1170
13101534 #, c-format
13111535 msgid "+%d Shield"
13121536 msgstr "+%d Захисту"
13131537
1314 #: ../../../src/PowerManager.cpp:1392
1538 #: ../../../src/PowerManager.cpp:1426
13151539 msgid "You are already transformed, untransform first."
13161540 msgstr "Ви вже трансформовані, спершу відновіть початкову форму."
13171541
1318 #: ../../../src/PowerManager.cpp:1404
1542 #: ../../../src/PowerManager.cpp:1438
13191543 msgid "Could not untransform at this position."
13201544 msgstr "Не можу змінити форму в цьому місці."
13211545
13231547 msgid "Completed Quests"
13241548 msgstr "Завершені квести"
13251549
1326 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1550 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13271551 msgid "Game saved."
13281552 msgstr "Гру збережено."
13291553
1330 #: ../../../src/SDLInputState.cpp:582
1554 #: ../../../src/SDLInputState.cpp:643
1555 msgid "BkSp"
1556 msgstr ""
1557
1558 #: ../../../src/SDLInputState.cpp:644
1559 msgid "Caps"
1560 msgstr ""
1561
1562 #: ../../../src/SDLInputState.cpp:645
1563 msgid "Del"
1564 msgstr ""
1565
1566 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1567 msgid "End"
1568 msgstr "End"
1569
1570 #: ../../../src/SDLInputState.cpp:648
1571 msgid "Esc"
1572 msgstr ""
1573
1574 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1575 msgid "Home"
1576 msgstr "Home"
1577
1578 #: ../../../src/SDLInputState.cpp:650
1579 msgid "Ins"
1580 msgstr ""
1581
1582 #: ../../../src/SDLInputState.cpp:651
1583 msgid "LAlt"
1584 msgstr ""
1585
1586 #: ../../../src/SDLInputState.cpp:652
1587 msgid "LCtrl"
1588 msgstr ""
1589
1590 #: ../../../src/SDLInputState.cpp:654
1591 msgid "LShft"
1592 msgstr ""
1593
1594 #: ../../../src/SDLInputState.cpp:655
1595 msgid "Num"
1596 msgstr ""
1597
1598 #: ../../../src/SDLInputState.cpp:656
1599 msgid "PgDn"
1600 msgstr ""
1601
1602 #: ../../../src/SDLInputState.cpp:657
1603 msgid "PgUp"
1604 msgstr ""
1605
1606 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1607 msgid "Pause"
1608 msgstr "Pause"
1609
1610 #: ../../../src/SDLInputState.cpp:659
1611 msgid "Print"
1612 msgstr ""
1613
1614 #: ../../../src/SDLInputState.cpp:660
1615 msgid "RAlt"
1616 msgstr ""
1617
1618 #: ../../../src/SDLInputState.cpp:661
1619 msgid "RCtrl"
1620 msgstr ""
1621
1622 #: ../../../src/SDLInputState.cpp:662
1623 msgid "Ret"
1624 msgstr ""
1625
1626 #: ../../../src/SDLInputState.cpp:664
1627 msgid "RShft"
1628 msgstr ""
1629
1630 #: ../../../src/SDLInputState.cpp:665
1631 msgid "SLock"
1632 msgstr ""
1633
1634 #: ../../../src/SDLInputState.cpp:666
1635 msgid "Spc"
1636 msgstr ""
1637
1638 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1639 msgid "Tab"
1640 msgstr "Tab"
1641
1642 #: ../../../src/SDLInputState.cpp:673
13311643 msgid "Backspace"
13321644 msgstr "Backspace"
13331645
1334 #: ../../../src/SDLInputState.cpp:583
1646 #: ../../../src/SDLInputState.cpp:674
13351647 msgid "CapsLock"
13361648 msgstr "CapsLock"
13371649
1338 #: ../../../src/SDLInputState.cpp:586
1339 msgid "End"
1340 msgstr "End"
1341
1342 #: ../../../src/SDLInputState.cpp:587
1650 #: ../../../src/SDLInputState.cpp:678
13431651 msgid "Escape"
13441652 msgstr "Escape"
13451653
1346 #: ../../../src/SDLInputState.cpp:588
1347 msgid "Home"
1348 msgstr "Home"
1349
1350 #: ../../../src/SDLInputState.cpp:589
1654 #: ../../../src/SDLInputState.cpp:680
13511655 msgid "Insert"
13521656 msgstr "Insert"
13531657
1354 #: ../../../src/SDLInputState.cpp:590
1658 #: ../../../src/SDLInputState.cpp:681
13551659 msgid "Left Alt"
13561660 msgstr "Лівий Alt"
13571661
1358 #: ../../../src/SDLInputState.cpp:591
1662 #: ../../../src/SDLInputState.cpp:682
13591663 msgid "Left Ctrl"
13601664 msgstr "Лівий Ctrl"
13611665
1362 #: ../../../src/SDLInputState.cpp:593
1666 #: ../../../src/SDLInputState.cpp:684
13631667 msgid "Left Shift"
13641668 msgstr "Лівий Shift"
13651669
1366 #: ../../../src/SDLInputState.cpp:594
1670 #: ../../../src/SDLInputState.cpp:685
13671671 msgid "NumLock"
13681672 msgstr "NumLock"
13691673
1370 #: ../../../src/SDLInputState.cpp:595
1674 #: ../../../src/SDLInputState.cpp:686
13711675 msgid "PageDown"
13721676 msgstr "PageDown"
13731677
1374 #: ../../../src/SDLInputState.cpp:596
1678 #: ../../../src/SDLInputState.cpp:687
13751679 msgid "PageUp"
13761680 msgstr "PageUp"
13771681
1378 #: ../../../src/SDLInputState.cpp:597
1379 msgid "Pause"
1380 msgstr "Pause"
1381
1382 #: ../../../src/SDLInputState.cpp:598
1682 #: ../../../src/SDLInputState.cpp:689
13831683 msgid "PrintScreen"
13841684 msgstr "PrintScreen"
13851685
1386 #: ../../../src/SDLInputState.cpp:599
1686 #: ../../../src/SDLInputState.cpp:690
13871687 msgid "Right Alt"
13881688 msgstr "Правий Alt"
13891689
1390 #: ../../../src/SDLInputState.cpp:600
1690 #: ../../../src/SDLInputState.cpp:691
13911691 msgid "Right Ctrl"
13921692 msgstr "Правий Ctrl"
13931693
1394 #: ../../../src/SDLInputState.cpp:601
1694 #: ../../../src/SDLInputState.cpp:692
13951695 msgid "Return"
13961696 msgstr "Enter"
13971697
1398 #: ../../../src/SDLInputState.cpp:603
1698 #: ../../../src/SDLInputState.cpp:694
13991699 msgid "Right Shift"
14001700 msgstr "Правий Shift"
14011701
1402 #: ../../../src/SDLInputState.cpp:604
1702 #: ../../../src/SDLInputState.cpp:695
14031703 msgid "ScrollLock"
14041704 msgstr "ScrollLock"
14051705
1406 #: ../../../src/SDLInputState.cpp:605
1706 #: ../../../src/SDLInputState.cpp:696
14071707 msgid "Space"
14081708 msgstr "Пробіл"
14091709
1410 #: ../../../src/SDLInputState.cpp:606
1411 msgid "Tab"
1412 msgstr "Tab"
1413
1414 #: ../../../src/SDLInputState.cpp:620
1710 #: ../../../src/SDLInputState.cpp:710
1711 #, c-format
1712 msgid "M%d"
1713 msgstr ""
1714
1715 #: ../../../src/SDLInputState.cpp:716
14151716 #, c-format
14161717 msgid "Mouse %d"
14171718 msgstr "Мишка %d"
14181719
1419 #: ../../../src/SDLInputState.cpp:628
1720 #: ../../../src/SDLInputState.cpp:726
1721 #, c-format
1722 msgid "JX%d-"
1723 msgstr ""
1724
1725 #: ../../../src/SDLInputState.cpp:728
14201726 #, c-format
14211727 msgid "Axis %d -"
14221728 msgstr "Вісь %d -"
14231729
1424 #: ../../../src/SDLInputState.cpp:630
1730 #: ../../../src/SDLInputState.cpp:732
1731 #, c-format
1732 msgid "JX%d+"
1733 msgstr ""
1734
1735 #: ../../../src/SDLInputState.cpp:734
14251736 #, c-format
14261737 msgid "Axis %d +"
14271738 msgstr "Вісь %d +"
14281739
1429 #: ../../../src/SDLInputState.cpp:633
1740 #: ../../../src/SDLInputState.cpp:739
1741 #, c-format
1742 msgid "JB%d"
1743 msgstr ""
1744
1745 #: ../../../src/SDLInputState.cpp:741
14301746 #, c-format
14311747 msgid "Button %d"
14321748 msgstr "Кнопка %d"
14331749
1434 #: ../../../src/SDLInputState.cpp:637
1435 msgid "(none)"
1436 msgstr "(нічого)"
1437
1438 #: ../../../src/SDLInputState.cpp:677
1750 #: ../../../src/SDLInputState.cpp:788
14391751 msgid "Touch control D-Pad"
14401752 msgstr "Торкніться кнопок переміщення"
14411753
1442 #: ../../../src/SDLInputState.cpp:701
1754 #: ../../../src/SDLInputState.cpp:812
14431755 msgid "Touch control buttons"
14441756 msgstr "Торкніться кнопок керування"
14451757
1446 #: ../../../src/SDLInputState.cpp:716
1758 #: ../../../src/SDLInputState.cpp:827
14471759 msgid "Tap"
14481760 msgstr "Торкніться"
14491761
1450 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1451 #: ../../../src/SDLInputState.cpp:768
1762 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1763 #, c-format
1764 msgid "Can not bind: %s"
1765 msgstr "Неможливо прив'язати клавішу: %s"
1766
1767 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1768 #: ../../../src/SDLInputState.cpp:901
14521769 #, c-format
14531770 msgid "'%s' is no longer bound to:"
14541771 msgstr "'%s' більше не повязаний з:"
16161933 msgid "k"
16171934 msgstr "к"
16181935
1619 #: ../../../src/Utils.cpp:580
1936 #: ../../../src/Utils.cpp:616
16201937 #, c-format
16211938 msgid "%s second"
16221939 msgstr "%s секунда"
16231940
1624 #: ../../../src/Utils.cpp:583
1941 #: ../../../src/Utils.cpp:619
16251942 #, c-format
16261943 msgid "%s seconds"
16271944 msgstr "%s секунд"
1010 msgstr ""
1111 "Project-Id-Version: PACKAGE VERSION\n"
1212 "Report-Msgid-Bugs-To: \n"
13 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
13 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1414 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
1515 "Last-Translator: Justin Jacobs <jajdorkster@gmail.com>, 2018\n"
1616 "Language-Team: Vietnamese (https://www.transifex.com/flareorg/teams/84925/vi/)\n"
2020 "Language: vi\n"
2121 "Plural-Forms: nplurals=1; plural=0;\n"
2222
23 #: ../../../src/Avatar.cpp:367
23 #: ../../../src/Avatar.cpp:387
24 msgid "Your health is low!"
25 msgstr ""
26
27 #: ../../../src/Avatar.cpp:419
2428 #, c-format
2529 msgid "Congratulations, you have reached level %d!"
2630 msgstr "Chúc mừng, bạn đã đạt cấp độ %d!"
2731
28 #: ../../../src/Avatar.cpp:369
29 msgid "You may increase one attribute through the Character Menu."
30 msgstr "Bạn có thể tăng một chỉ số qua menu Nhân vật."
31
32 #: ../../../src/Avatar.cpp:583
32 #: ../../../src/Avatar.cpp:421
33 msgid "You may increase one or more attributes through the Character Menu."
34 msgstr ""
35
36 #: ../../../src/Avatar.cpp:425
37 msgid "You may unlock one or more abilities through the Powers Menu."
38 msgstr ""
39
40 #: ../../../src/Avatar.cpp:692
3341 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
3442 msgstr ""
3543 "Bạn đã bị đánh bại. Trò chơi kết thúc! Nhấn ${INPUT_CONTINUE} để thoát ra "
3644 "Trang đầu."
3745
38 #: ../../../src/Avatar.cpp:589
46 #: ../../../src/Avatar.cpp:698
3947 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
4048 msgstr "Bạn đã bị đánh bại. Nhấn ${INPUT_CONTINUE} để tiếp tục."
4149
42 #: ../../../src/Avatar.cpp:839
50 #: ../../../src/Avatar.cpp:949
4351 msgid "Transformation expired. You have been moved back to a safe place."
4452 msgstr "Sự biến đổi kết thúc. Bạn đã được chuyển về vị trí an toàn."
4553
4856 msgid "%d %s removed."
4957 msgstr "%d %s đã bị lấy đi."
5058
51 #: ../../../src/CampaignManager.cpp:162
59 #: ../../../src/CampaignManager.cpp:165
60 #, c-format
61 msgid "%s x%d removed."
62 msgstr ""
63
64 #: ../../../src/CampaignManager.cpp:167
5265 #, c-format
5366 msgid "%s removed."
5467 msgstr "%s đã bị lấy đi."
5568
56 #: ../../../src/CampaignManager.cpp:175
69 #: ../../../src/CampaignManager.cpp:180
5770 #, c-format
5871 msgid "You receive %s."
5972 msgstr "Bạn nhận được %s."
6073
61 #: ../../../src/CampaignManager.cpp:177
74 #: ../../../src/CampaignManager.cpp:182
6275 #, c-format
6376 msgid "You receive %s x%d."
6477 msgstr "Bạn nhận được %s x%d."
6578
66 #: ../../../src/CampaignManager.cpp:186
79 #: ../../../src/CampaignManager.cpp:191
6780 #, c-format
6881 msgid "You receive %d %s."
6982 msgstr "Bạn nhận được %d %s."
7083
71 #: ../../../src/CampaignManager.cpp:195
84 #: ../../../src/CampaignManager.cpp:200
7285 #, c-format
7386 msgid "You receive %d XP."
7487 msgstr "Bạn nhận được %d điểm kinh nghiệm."
7588
76 #: ../../../src/CampaignManager.cpp:201
89 #: ../../../src/CampaignManager.cpp:206
7790 msgid "HP restored."
7891 msgstr "Thể chất đã hồi phục."
7992
80 #: ../../../src/CampaignManager.cpp:205
93 #: ../../../src/CampaignManager.cpp:210
8194 msgid "MP restored."
8295 msgstr "Ma pháp đã hồi phục."
8396
84 #: ../../../src/CampaignManager.cpp:210
97 #: ../../../src/CampaignManager.cpp:215
8598 msgid "HP and MP restored."
8699 msgstr "Thể chất và ma pháp đã hồi phục."
87100
88 #: ../../../src/CampaignManager.cpp:214
101 #: ../../../src/CampaignManager.cpp:219
89102 msgid "Negative effects removed."
90103 msgstr "Các lời nguyền đã bị vô hiệu."
91104
92 #: ../../../src/CampaignManager.cpp:220
105 #: ../../../src/CampaignManager.cpp:225
93106 msgid "HP and MP restored, negative effects removed"
94107 msgstr "Thể chất và ma pháp đã hồi phục, các lời nguyền đã bị vô hiệu"
95108
111124 "Kết xuất đồ hoạ SDL bằng phần cứng\n"
112125 "Bộ kết xuất mặc định, thường nhanh hơn bằng phần mềm."
113126
114 #: ../../../src/EngineSettings.cpp:561
127 #: ../../../src/EngineSettings.cpp:572
115128 msgid "Adventurer"
116129 msgstr "Người phiêu lưu"
117130
118 #: ../../../src/Entity.cpp:511
131 #: ../../../src/Entity.cpp:522
119132 msgid "miss"
120133 msgstr "trượt"
121134
122 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
123 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
135 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
136 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
124137 #, c-format
125138 msgid "+%d HP"
126139 msgstr "+%d điểm thể chất"
127140
128 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
129 #: ../../../src/StatBlock.cpp:822
141 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
142 #: ../../../src/StatBlock.cpp:830
130143 #, c-format
131144 msgid "+%d MP"
132145 msgstr "+%d điểm ma pháp"
133146
134 #: ../../../src/EventManager.cpp:738
147 #: ../../../src/EventManager.cpp:782
135148 msgid "Unknown destination"
136149 msgstr "Điểm đến chưa xác định"
137150
138 #: ../../../src/GameStateConfigBase.cpp:89
139 #: ../../../src/GameStateConfigBase.cpp:110
151 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
152 msgid "Loading..."
153 msgstr "Đang tải..."
154
155 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
156 msgid "Delete Save"
157 msgstr "Xoá bản lưư"
158
159 #: ../../../src/GameStateLoad.cpp:90
160 msgid "Delete this save?"
161 msgstr "Xoá bản lưư này?"
162
163 #: ../../../src/GameStateLoad.cpp:92
164 msgid "Exit to Title"
165 msgstr "Thoát ra tiêu đề"
166
167 #: ../../../src/GameStateLoad.cpp:95
168 msgid "New Game"
169 msgstr "Trò chơi mới"
170
171 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
172 msgid "Choose a Slot"
173 msgstr "Chọn một ô"
174
175 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
176 msgid "Enable a story mod to continue"
177 msgstr "Chọn một bản mod cốt truyện để tiếp tục"
178
179 #: ../../../src/GameStateLoad.cpp:597
180 msgid "Load Game"
181 msgstr "Mở bản lưu"
182
183 #: ../../../src/GameStateLoad.cpp:706
184 msgid "Entering game world..."
185 msgstr "Đang tiến vào thế giới trò chơi..."
186
187 #: ../../../src/GameStateLoad.cpp:709
188 msgid "Loading saved game..."
189 msgstr "Đang mở bản lưu..."
190
191 #: ../../../src/GameStateLoad.cpp:742
192 msgid "Invalid save"
193 msgstr "Bản lưu không hợp lệ"
194
195 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
196 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
197 #: ../../../src/MenuPowers.cpp:1543
198 #, c-format
199 msgid "Level %d"
200 msgstr "Cấp độ %d"
201
202 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
203 #: ../../../src/MenuConfig.cpp:244
204 msgid "Cancel"
205 msgstr "Hủy"
206
207 #: ../../../src/GameStateNew.cpp:68
208 msgid "Create"
209 msgstr "Tạo"
210
211 #: ../../../src/GameStateNew.cpp:76
212 msgid "Randomize"
213 msgstr "Ngẫu nhiên"
214
215 #: ../../../src/GameStateNew.cpp:92
216 msgid "Choose a Portrait"
217 msgstr "Chọn chân dung"
218
219 #: ../../../src/GameStateNew.cpp:96
220 msgid "Choose a Name"
221 msgstr "Chọn tên"
222
223 #: ../../../src/GameStateNew.cpp:100
224 msgid "Permadeath?"
225 msgstr "Chết vĩnh viễn?"
226
227 #: ../../../src/GameStateNew.cpp:104
228 msgid "Choose a Class"
229 msgstr "Chọn một giai cấp"
230
231 #: ../../../src/GameStateTitle.cpp:107
232 msgid "Play Game"
233 msgstr "Chơi trò chơi"
234
235 #: ../../../src/GameStateTitle.cpp:110
236 msgid "Enable a core mod to continue"
237 msgstr "Chọn một bản mod lõi để tiếp tục"
238
239 #: ../../../src/GameStateTitle.cpp:114
240 msgid "Configuration"
241 msgstr "Thiết lập"
242
243 #: ../../../src/GameStateTitle.cpp:117
244 msgid "Credits"
245 msgstr "Các đóng góp"
246
247 #: ../../../src/GameStateTitle.cpp:120
248 msgid "Exit Game"
249 msgstr "Thoát trò chơi"
250
251 #: ../../../src/InputState.cpp:407
252 msgid "Accept"
253 msgstr "Đồng ý"
254
255 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
256 #: ../../../src/SDLInputState.cpp:698
257 msgid "Up"
258 msgstr "Lên"
259
260 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
261 #: ../../../src/SDLInputState.cpp:676
262 msgid "Down"
263 msgstr "Xuống"
264
265 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
266 #: ../../../src/SDLInputState.cpp:683
267 msgid "Left"
268 msgstr "Trái"
269
270 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
271 #: ../../../src/SDLInputState.cpp:693
272 msgid "Right"
273 msgstr "Phải"
274
275 #: ../../../src/InputState.cpp:412
276 msgid "Bar1"
277 msgstr "Thanh1"
278
279 #: ../../../src/InputState.cpp:413
280 msgid "Bar2"
281 msgstr "Thanh2"
282
283 #: ../../../src/InputState.cpp:414
284 msgid "Bar3"
285 msgstr "Thanh3"
286
287 #: ../../../src/InputState.cpp:415
288 msgid "Bar4"
289 msgstr "Thanh4"
290
291 #: ../../../src/InputState.cpp:416
292 msgid "Bar5"
293 msgstr "Thanh5"
294
295 #: ../../../src/InputState.cpp:417
296 msgid "Bar6"
297 msgstr "Thanh6"
298
299 #: ../../../src/InputState.cpp:418
300 msgid "Bar7"
301 msgstr "Thanh7"
302
303 #: ../../../src/InputState.cpp:419
304 msgid "Bar8"
305 msgstr "Thanh8"
306
307 #: ../../../src/InputState.cpp:420
308 msgid "Bar9"
309 msgstr "Thanh9"
310
311 #: ../../../src/InputState.cpp:421
312 msgid "Bar0"
313 msgstr "Thanh0"
314
315 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
316 #: ../../../src/MenuCharacter.cpp:54
317 msgid "Character"
318 msgstr "Nhân vật"
319
320 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
321 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
322 msgid "Inventory"
323 msgstr "Hành trang"
324
325 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
326 #: ../../../src/MenuPowers.cpp:167
327 msgid "Powers"
328 msgstr "Sức mạnh"
329
330 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
331 #: ../../../src/MenuLog.cpp:72
332 msgid "Log"
333 msgstr "Nhật kí"
334
335 #: ../../../src/InputState.cpp:426
336 msgid "Main1"
337 msgstr "Chính1"
338
339 #: ../../../src/InputState.cpp:427
340 msgid "Main2"
341 msgstr "Chính2"
342
343 #: ../../../src/InputState.cpp:428
344 msgid "Ctrl"
345 msgstr ""
346
347 #: ../../../src/InputState.cpp:429
348 msgid "Shift"
349 msgstr ""
350
351 #: ../../../src/InputState.cpp:430
352 msgid "Alt"
353 msgstr ""
354
355 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
356 msgid "Delete"
357 msgstr ""
358
359 #: ../../../src/InputState.cpp:432
360 msgid "ActionBar Accept"
361 msgstr "ActionBar chọn"
362
363 #: ../../../src/InputState.cpp:433
364 msgid "ActionBar Left"
365 msgstr "ActionBar trái"
366
367 #: ../../../src/InputState.cpp:434
368 msgid "ActionBar Right"
369 msgstr "ActionBar phải"
370
371 #: ../../../src/InputState.cpp:435
372 msgid "ActionBar Use"
373 msgstr "ActionBar dùng"
374
375 #: ../../../src/InputState.cpp:436
376 msgid "Developer Menu"
377 msgstr "Menu phát triển"
378
379 #: ../../../src/InputState.cpp:438
380 msgid "Left Mouse"
381 msgstr "Chuột trái"
382
383 #: ../../../src/InputState.cpp:439
384 msgid "Middle Mouse"
385 msgstr "Chuột giữa"
386
387 #: ../../../src/InputState.cpp:440
388 msgid "Right Mouse"
389 msgstr "Chuột phải"
390
391 #: ../../../src/InputState.cpp:441
392 msgid "Wheel Up"
393 msgstr "Lăn lên"
394
395 #: ../../../src/InputState.cpp:442
396 msgid "Wheel Down"
397 msgstr "Lăn xuống"
398
399 #: ../../../src/InputState.cpp:443
400 msgid "Mouse X1"
401 msgstr "Phím X1 chuột"
402
403 #: ../../../src/InputState.cpp:444
404 msgid "Mouse X2"
405 msgstr "Phím X2 chuột"
406
407 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
408 msgid "Unknown Item"
409 msgstr "Vật chưa xác định"
410
411 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
412 #, c-format
413 msgid "%d%% Speed"
414 msgstr "%d%% tốc độ"
415
416 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
417 #, c-format
418 msgid "%d%% Attack Speed"
419 msgstr "%d%% tốc độ tấn công"
420
421 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
422 #: ../../../src/MenuPowers.cpp:832
423 #, c-format
424 msgid "Resistance (%s)"
425 msgstr "Khả năng kháng %s"
426
427 #: ../../../src/ItemManager.cpp:714
428 #, c-format
429 msgid "Requires %s"
430 msgstr "Yêu cầu %s"
431
432 #: ../../../src/ItemManager.cpp:763
433 msgid "Quest Item"
434 msgstr "Đồ nhiệm vụ"
435
436 #: ../../../src/ItemManager.cpp:790
437 #, c-format
438 msgid "Quality: %s"
439 msgstr "Chất lượng: %s"
440
441 #: ../../../src/ItemManager.cpp:815
442 #, c-format
443 msgid "Absorb: %d-%d"
444 msgstr "Hấp thụ: %d-%d"
445
446 #: ../../../src/ItemManager.cpp:817
447 #, c-format
448 msgid "Absorb: %d"
449 msgstr "Hấp thụ: %d"
450
451 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
452 #: ../../../src/MenuPowers.cpp:1133
453 #, c-format
454 msgid "Requires Level %d"
455 msgstr "Yêu cầu cấp độ %d"
456
457 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
458 #: ../../../src/MenuPowers.cpp:1124
459 #, c-format
460 msgid "Requires %s %d"
461 msgstr "Yêu cầu %s %d"
462
463 #: ../../../src/ItemManager.cpp:879
464 #, c-format
465 msgid "Requires Class: %s"
466 msgstr "Yêu cầu thuộc giai cấp: %s"
467
468 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
469 #, c-format
470 msgid "Buy Price: %d %s"
471 msgstr "Giá mua: %d %s"
472
473 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
474 #, c-format
475 msgid "Buy Price: %d %s each"
476 msgstr "Giá mua mỗi chiếc: %d %s"
477
478 #: ../../../src/ItemManager.cpp:916
479 #, c-format
480 msgid "Sell Price: %d %s"
481 msgstr "Giá bán: %d %s"
482
483 #: ../../../src/ItemManager.cpp:918
484 #, c-format
485 msgid "Sell Price: %d %s each"
486 msgstr "Giá bán mỗi chiếc: %d %s"
487
488 #: ../../../src/ItemManager.cpp:927
489 msgid "Set:"
490 msgstr "Đặt:"
491
492 #: ../../../src/ItemManager.cpp:934
493 #, c-format
494 msgid "%d items:"
495 msgstr "%d vật:"
496
497 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
498 #, c-format
499 msgid "Press [%s] to use"
500 msgstr "Nhấn [%s] để sử dụng"
501
502 #: ../../../src/ItemManager.cpp:951
503 #, c-format
504 msgid "Press [%s] to read"
505 msgstr "Nhấn [%s] để đọc"
506
507 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
508 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
509 #, c-format
510 msgid "Hotkey: %s"
511 msgstr "Phím: %s"
512
513 #: ../../../src/MenuActionBar.cpp:599
514 msgid "Not enough MP."
515 msgstr "Không đủ ma pháp."
516
517 #: ../../../src/MenuActiveEffects.cpp:124
518 #, c-format
519 msgid "x%d"
520 msgstr ""
521
522 #: ../../../src/MenuActiveEffects.cpp:219
523 msgid "Remaining:"
524 msgstr "Còn lại:"
525
526 #: ../../../src/MenuActiveEffects.cpp:225
527 #, c-format
528 msgid "x%d stacks"
529 msgstr "x%d chồng"
530
531 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
532 msgid "Name"
533 msgstr "Tên"
534
535 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
536 msgid "Level"
537 msgstr "Cấp độ"
538
539 #: ../../../src/MenuCharacter.cpp:310
540 #, c-format
541 msgid "%d unspent stat point"
542 msgstr "%d điểm thuộc tính chưa dùng"
543
544 #: ../../../src/MenuCharacter.cpp:313
545 #, c-format
546 msgid "%d unspent stat points"
547 msgstr "%d điểm thuộc tính chưa dùng"
548
549 #: ../../../src/MenuCharacter.cpp:355
550 #, c-format
551 msgid "Reduces the damage taken from \"%s\" elemental attacks."
552 msgstr "Giảm sát thương từ nguyên tố %s."
553
554 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
555 #, c-format
556 msgid "XP: %d"
557 msgstr "Điểm kinh nghiệm: %d"
558
559 #: ../../../src/MenuCharacter.cpp:367
560 #, c-format
561 msgid "Next: %d"
562 msgstr "Tiếp: %d"
563
564 #: ../../../src/MenuCharacter.cpp:373
565 #, c-format
566 msgid "base (%d), bonus (%d)"
567 msgstr "gốc %d, thêm %d"
568
569 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
570 msgid "Related stats:"
571 msgstr "Thuộc tính liên quan:"
572
573 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
574 #, c-format
575 msgid "Each level grants %d."
576 msgstr "Mỗi cấp độ tăng %d."
577
578 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
579 #, c-format
580 msgid "Each point of %s grants %d."
581 msgstr "Mỗi điểm của %s tăng %d."
582
583 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
584 msgid "Clear"
585 msgstr "Xoá"
586
587 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
588 msgid "Assign:"
589 msgstr "Gán với:"
590
591 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
140592 msgid "Defaults"
141593 msgstr "Mặc định"
142594
143 #: ../../../src/GameStateConfigBase.cpp:89
595 #: ../../../src/MenuConfig.cpp:123
144596 msgid "Reset ALL settings?"
145597 msgstr "Thiết lập lại TẤT CẢ?"
146598
147 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
599 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
148600 msgid "OK"
149601 msgstr ""
150602
151 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
152 #: ../../../src/InputState.cpp:401
153 msgid "Cancel"
154 msgstr "Hủy"
155
156 #: ../../../src/GameStateConfigBase.cpp:160
157 #: ../../../src/GameStateConfigDesktop.cpp:130
603 #: ../../../src/MenuConfig.cpp:246
604 msgid "Continue"
605 msgstr ""
606
607 #: ../../../src/MenuConfig.cpp:248
608 msgid "Save Game"
609 msgstr ""
610
611 #: ../../../src/MenuConfig.cpp:291
612 msgid "Default"
613 msgstr ""
614
615 #: ../../../src/MenuConfig.cpp:291
616 msgid ""
617 "Show all loot tooltips, except for those that would be obscured by the "
618 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
619 msgstr ""
620
621 #: ../../../src/MenuConfig.cpp:292
622 msgid "Show all"
623 msgstr ""
624
625 #: ../../../src/MenuConfig.cpp:292
626 msgid ""
627 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
628 msgstr ""
629
630 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
631 msgid "Hidden"
632 msgstr ""
633
634 #: ../../../src/MenuConfig.cpp:293
635 msgid ""
636 "Always hide loot tooltips, except for when a piece of loot is hovered with "
637 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
638 msgstr ""
639
640 #: ../../../src/MenuConfig.cpp:296
641 msgid "Visible"
642 msgstr ""
643
644 #: ../../../src/MenuConfig.cpp:297
645 msgid "Visible (2x zoom)"
646 msgstr ""
647
648 #: ../../../src/MenuConfig.cpp:301
649 msgid ""
650 "Controls the type of warning to be activated when the player is below the "
651 "low health threshold."
652 msgstr ""
653
654 #: ../../../src/MenuConfig.cpp:302
655 msgid "- Display a message"
656 msgstr ""
657
658 #: ../../../src/MenuConfig.cpp:303
659 msgid "- Play a sound"
660 msgstr ""
661
662 #: ../../../src/MenuConfig.cpp:304
663 msgid "- Change the cursor"
664 msgstr ""
665
666 #: ../../../src/MenuConfig.cpp:306
667 msgid "Disabled"
668 msgstr ""
669
670 #: ../../../src/MenuConfig.cpp:307
671 msgid "All"
672 msgstr ""
673
674 #: ../../../src/MenuConfig.cpp:308
675 msgid "Message & Cursor"
676 msgstr ""
677
678 #: ../../../src/MenuConfig.cpp:309
679 msgid "Message & Sound"
680 msgstr ""
681
682 #: ../../../src/MenuConfig.cpp:310
683 msgid "Sound & Cursor"
684 msgstr ""
685
686 #: ../../../src/MenuConfig.cpp:311
687 msgid "Message"
688 msgstr ""
689
690 #: ../../../src/MenuConfig.cpp:312
691 msgid "Cursor"
692 msgstr ""
693
694 #: ../../../src/MenuConfig.cpp:313
695 msgid "Sound"
696 msgstr ""
697
698 #: ../../../src/MenuConfig.cpp:319
699 msgid ""
700 "When the player's health drops below the given threshold, the low health "
701 "notifications are triggered if one or more of them is enabled."
702 msgstr ""
703
704 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
705 msgid "Exit"
706 msgstr "Thoát"
707
708 #: ../../../src/MenuConfig.cpp:333
709 msgid "Video"
710 msgstr "Đồ hoạ"
711
712 #: ../../../src/MenuConfig.cpp:334
158713 msgid "Audio"
159714 msgstr "Âm thanh"
160715
161 #: ../../../src/GameStateConfigBase.cpp:161
162 #: ../../../src/GameStateConfigDesktop.cpp:131
716 #: ../../../src/MenuConfig.cpp:335
163717 msgid "Interface"
164718 msgstr "Giao diện"
165719
166 #: ../../../src/GameStateConfigBase.cpp:162
167 #: ../../../src/GameStateConfigDesktop.cpp:134
720 #: ../../../src/MenuConfig.cpp:336
721 msgid "Input"
722 msgstr "Đầu vào"
723
724 #: ../../../src/MenuConfig.cpp:337
725 msgid "Keybindings"
726 msgstr "Phím điều khiển"
727
728 #: ../../../src/MenuConfig.cpp:338
168729 msgid "Mods"
169730 msgstr "Các bản mod"
170731
171 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
732 #: ../../../src/MenuConfig.cpp:350
733 msgid "Paused"
734 msgstr "Đang tạm dừng"
735
736 #: ../../../src/MenuConfig.cpp:353
737 msgid "Time Played"
738 msgstr ""
739
740 #: ../../../src/MenuConfig.cpp:359
741 msgid "Renderer"
742 msgstr "Thiết bị kết xuất đồ hoạ"
743
744 #: ../../../src/MenuConfig.cpp:360
745 msgid "Full Screen Mode"
746 msgstr "Toàn màn hình"
747
748 #: ../../../src/MenuConfig.cpp:361
749 msgid "Hardware surfaces"
750 msgstr "Kết xuất bề mặt bằng phần cứng"
751
752 #: ../../../src/MenuConfig.cpp:362
753 msgid "V-Sync"
754 msgstr ""
755
756 #: ../../../src/MenuConfig.cpp:363
757 msgid "Texture Filtering"
758 msgstr "Lọc kết cấu bề mặt (texture)"
759
760 #: ../../../src/MenuConfig.cpp:364
761 msgid "DPI scaling"
762 msgstr "Phóng theo DPI"
763
764 #: ../../../src/MenuConfig.cpp:365
765 msgid "Parallax Layers"
766 msgstr ""
767
768 #: ../../../src/MenuConfig.cpp:366
769 msgid "Allow changing gamma"
770 msgstr "Cho phép thay đổi gamma"
771
772 #: ../../../src/MenuConfig.cpp:367
773 msgid "Gamma"
774 msgstr ""
775
776 #: ../../../src/MenuConfig.cpp:369
777 msgid "Sound Volume"
778 msgstr "Âm lượng"
779
780 #: ../../../src/MenuConfig.cpp:370
172781 msgid "Music Volume"
173782 msgstr "Âm lượng nhạc"
174783
175 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
176 msgid "Sound Volume"
177 msgstr "Âm lượng"
178
179 #: ../../../src/GameStateConfigBase.cpp:257
784 #: ../../../src/MenuConfig.cpp:372
180785 msgid "Language"
181786 msgstr "Ngôn ngữ"
182787
183 #: ../../../src/GameStateConfigBase.cpp:266
788 #: ../../../src/MenuConfig.cpp:373
184789 msgid "Show FPS"
185790 msgstr "Hiển thị FPS"
186791
187 #: ../../../src/GameStateConfigBase.cpp:270
792 #: ../../../src/MenuConfig.cpp:374
793 msgid "Hardware mouse cursor"
794 msgstr "Con trỏ hệ thống"
795
796 #: ../../../src/MenuConfig.cpp:375
188797 msgid "Colorblind Mode"
189798 msgstr "Chế độ cho người mù màu"
190799
191 #: ../../../src/GameStateConfigBase.cpp:274
192 msgid "Hardware mouse cursor"
193 msgstr "Con trỏ hệ thống"
194
195 #: ../../../src/GameStateConfigBase.cpp:278
800 #: ../../../src/MenuConfig.cpp:376
196801 msgid "Developer Mode"
197802 msgstr "Chế độ cho người phát triển"
198803
199 #: ../../../src/GameStateConfigBase.cpp:282
804 #: ../../../src/MenuConfig.cpp:377
200805 msgid "Subtitles"
201806 msgstr "Phụ đề"
202807
203 #: ../../../src/GameStateConfigBase.cpp:286
204 msgid "Active Mods"
205 msgstr "Bản mod đang bật"
206
207 #: ../../../src/GameStateConfigBase.cpp:295
208 msgid "Available Mods"
209 msgstr "Bản mod còn lại"
210
211 #: ../../../src/GameStateConfigBase.cpp:314
212 msgid "<< Disable"
213 msgstr "<< Tắt"
214
215 #: ../../../src/GameStateConfigBase.cpp:320
216 msgid "Enable >>"
217 msgstr "Bật >>"
218
219 #: ../../../src/GameStateConfigBase.cpp:873
220 msgid "Version:"
221 msgstr "Phiên bản:"
222
223 #: ../../../src/GameStateConfigBase.cpp:878
224 msgid "Game:"
225 msgstr "Trò chơi:"
226
227 #: ../../../src/GameStateConfigBase.cpp:883
228 msgid "Engine version:"
229 msgstr "Phiên bản engine:"
230
231 #: ../../../src/GameStateConfigBase.cpp:891
232 msgid "Requires mods:"
233 msgstr "Yêu cầu bản mod:"
234
235 #: ../../../src/GameStateConfigDesktop.cpp:83
236 #: ../../../src/GameStateConfigDesktop.cpp:751
237 msgid "Clear"
238 msgstr "Xoá"
239
240 #: ../../../src/GameStateConfigDesktop.cpp:83
241 #: ../../../src/GameStateConfigDesktop.cpp:749
242 msgid "Assign:"
243 msgstr "Gán với:"
244
245 #: ../../../src/GameStateConfigDesktop.cpp:128
246 msgid "Video"
247 msgstr "Đồ hoạ"
248
249 #: ../../../src/GameStateConfigDesktop.cpp:132
250 msgid "Input"
251 msgstr "Đầu vào"
252
253 #: ../../../src/GameStateConfigDesktop.cpp:133
254 msgid "Keybindings"
255 msgstr "Phím điều khiển"
256
257 #: ../../../src/GameStateConfigDesktop.cpp:188
808 #: ../../../src/MenuConfig.cpp:378
809 msgid "Loot tooltip visibility"
810 msgstr ""
811
812 #: ../../../src/MenuConfig.cpp:379
813 msgid "Mini-map mode"
814 msgstr ""
815
816 #: ../../../src/MenuConfig.cpp:380
817 msgid "Always show stat bar labels"
818 msgstr "Luôn hiển thị nhãn thanh thuộc tính"
819
820 #: ../../../src/MenuConfig.cpp:381
821 msgid "Allow stat bar auto-hiding"
822 msgstr ""
823
824 #: ../../../src/MenuConfig.cpp:382
825 msgid "Show combat text"
826 msgstr "Hiển thị nội dung chiến trận"
827
828 #: ../../../src/MenuConfig.cpp:383
829 msgid "Automatically equip items"
830 msgstr "Tự động trang bị đồ"
831
832 #: ../../../src/MenuConfig.cpp:384
833 msgid "Show hidden entity markers"
834 msgstr ""
835
836 #: ../../../src/MenuConfig.cpp:385
837 msgid "Low health notification"
838 msgstr ""
839
840 #: ../../../src/MenuConfig.cpp:386
841 msgid "Low health threshold"
842 msgstr ""
843
844 #: ../../../src/MenuConfig.cpp:389
845 msgid "Joystick"
846 msgstr ""
847
848 #: ../../../src/MenuConfig.cpp:390
849 msgid "Move hero using mouse"
850 msgstr "Di chuyển nhân vật bằng chuột"
851
852 #: ../../../src/MenuConfig.cpp:391
853 msgid "Mouse aim"
854 msgstr "Ngắm bằng chuột"
855
856 #: ../../../src/MenuConfig.cpp:392
857 msgid "Do not use mouse"
858 msgstr "Không sử dụng chuột"
859
860 #: ../../../src/MenuConfig.cpp:393
861 msgid "Swap mouse movement button"
862 msgstr ""
863
864 #: ../../../src/MenuConfig.cpp:394
865 msgid "Attack with mouse movement"
866 msgstr ""
867
868 #: ../../../src/MenuConfig.cpp:395
869 msgid "Joystick Deadzone"
870 msgstr "Khoảng chết của joystick"
871
872 #: ../../../src/MenuConfig.cpp:405
873 #, c-format
874 msgid "Primary binding: %s"
875 msgstr ""
876
877 #: ../../../src/MenuConfig.cpp:406
878 #, c-format
879 msgid "Alternate binding: %s"
880 msgstr ""
881
882 #: ../../../src/MenuConfig.cpp:407
883 #, c-format
884 msgid "Joystick binding: %s"
885 msgstr ""
886
887 #: ../../../src/MenuConfig.cpp:508
258888 msgid ""
259889 "Will try to store surfaces in video memory versus system memory. The effect "
260890 "this has on performance depends on the renderer."
262892 "Lưu dữ liệu bề mặt vào bộ nhớ đồ hoạ thay cho RAM. Hiệu quả của tuỳ chọn này"
263893 " phụ thuộc vào thiết bị kết xuất."
264894
265 #: ../../../src/GameStateConfigDesktop.cpp:189
895 #: ../../../src/MenuConfig.cpp:509
266896 msgid ""
267897 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
268898 "windowed mode or input lag."
270900 "Giúp tránh rách hình. Tắt nếu bạn thấy lag khi điều khiển hoặc chế độ cửa sổ"
271901 " bị \"lắp\"."
272902
273 #: ../../../src/GameStateConfigDesktop.cpp:190
903 #: ../../../src/MenuConfig.cpp:510
274904 msgid ""
275905 "When enabled, this uses the screen DPI in addition to the window dimensions "
276906 "to scale the rendering resolution. Otherwise, only the window dimensions are"
279909 "Khi bật, sử dụng thêm DPI màn hình cùng kích thước cửa sổ để phóng đồ hoạ. "
280910 "Nếu không, chỉ sử dụng kích thước cửa sổ."
281911
282 #: ../../../src/GameStateConfigDesktop.cpp:191
912 #: ../../../src/MenuConfig.cpp:511
283913 msgid ""
284914 "This enables parallax (non-tile) layers. Disabling this setting can improve "
285915 "performance in some cases."
286916 msgstr ""
287917
288 #: ../../../src/GameStateConfigDesktop.cpp:192
289 msgid "Experimental"
290 msgstr "Đang thử nghiệm"
291
292 #: ../../../src/GameStateConfigDesktop.cpp:193
293 msgid "For handheld devices"
294 msgstr "Cho thiết bị cầm tay"
295
296 #: ../../../src/GameStateConfigDesktop.cpp:211
297 msgid "Renderer"
298 msgstr "Thiết bị kết xuất đồ hoạ"
299
300 #: ../../../src/GameStateConfigDesktop.cpp:227
301 msgid "Full Screen Mode"
302 msgstr "Toàn màn hình"
303
304 #: ../../../src/GameStateConfigDesktop.cpp:231
305 msgid "Move hero using mouse"
306 msgstr "Di chuyển nhân vật bằng chuột"
307
308 #: ../../../src/GameStateConfigDesktop.cpp:235
309 msgid "Hardware surfaces"
310 msgstr "Kết xuất bề mặt bằng phần cứng"
311
312 #: ../../../src/GameStateConfigDesktop.cpp:239
313 msgid "V-Sync"
314 msgstr ""
315
316 #: ../../../src/GameStateConfigDesktop.cpp:243
317 msgid "Texture Filtering"
318 msgstr "Lọc kết cấu bề mặt (texture)"
319
320 #: ../../../src/GameStateConfigDesktop.cpp:247
321 msgid "DPI scaling"
322 msgstr "Phóng theo DPI"
323
324 #: ../../../src/GameStateConfigDesktop.cpp:251
325 msgid "Parallax Layers"
326 msgstr ""
327
328 #: ../../../src/GameStateConfigDesktop.cpp:255
329 msgid "Allow changing gamma"
330 msgstr "Cho phép thay đổi gamma"
331
332 #: ../../../src/GameStateConfigDesktop.cpp:259
333 msgid "Gamma"
334 msgstr ""
335
336 #: ../../../src/GameStateConfigDesktop.cpp:263
337 msgid "Use joystick"
338 msgstr "Sử dụng joystick"
339
340 #: ../../../src/GameStateConfigDesktop.cpp:267
341 msgid "Joystick"
342 msgstr ""
343
344 #: ../../../src/GameStateConfigDesktop.cpp:283
345 msgid "Mouse aim"
346 msgstr "Ngắm bằng chuột"
347
348 #: ../../../src/GameStateConfigDesktop.cpp:287
349 msgid "Do not use mouse"
350 msgstr "Không sử dụng chuột"
351
352 #: ../../../src/GameStateConfigDesktop.cpp:291
353 msgid "Joystick Deadzone"
354 msgstr "Khoảng chết của joystick"
355
356 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
357 msgid "Loading..."
358 msgstr "Đang tải..."
359
360 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
361 msgid "Delete Save"
362 msgstr "Xoá bản lưư"
363
364 #: ../../../src/GameStateLoad.cpp:88
365 msgid "Delete this save?"
366 msgstr "Xoá bản lưư này?"
367
368 #: ../../../src/GameStateLoad.cpp:90
369 msgid "Exit to Title"
370 msgstr "Thoát ra tiêu đề"
371
372 #: ../../../src/GameStateLoad.cpp:93
373 msgid "New Game"
374 msgstr "Trò chơi mới"
375
376 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
377 msgid "Choose a Slot"
378 msgstr "Chọn một ô"
379
380 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
381 msgid "Enable a story mod to continue"
382 msgstr "Chọn một bản mod cốt truyện để tiếp tục"
383
384 #: ../../../src/GameStateLoad.cpp:589
385 msgid "Load Game"
386 msgstr "Mở bản lưu"
387
388 #: ../../../src/GameStateLoad.cpp:695
389 msgid "Entering game world..."
390 msgstr "Đang tiến vào thế giới trò chơi..."
391
392 #: ../../../src/GameStateLoad.cpp:698
393 msgid "Loading saved game..."
394 msgstr "Đang mở bản lưu..."
395
396 #: ../../../src/GameStateLoad.cpp:731
397 msgid "Invalid save"
398 msgstr "Bản lưu không hợp lệ"
399
400 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
401 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
402 #: ../../../src/MenuPowers.cpp:1542
403 #, c-format
404 msgid "Level %d"
405 msgstr "Cấp độ %d"
406
407 #: ../../../src/GameStateNew.cpp:68
408 msgid "Create"
409 msgstr "Tạo"
410
411 #: ../../../src/GameStateNew.cpp:76
412 msgid "Randomize"
413 msgstr "Ngẫu nhiên"
414
415 #: ../../../src/GameStateNew.cpp:92
416 msgid "Choose a Portrait"
417 msgstr "Chọn chân dung"
418
419 #: ../../../src/GameStateNew.cpp:96
420 msgid "Choose a Name"
421 msgstr "Chọn tên"
422
423 #: ../../../src/GameStateNew.cpp:100
424 msgid "Permadeath?"
425 msgstr "Chết vĩnh viễn?"
426
427 #: ../../../src/GameStateNew.cpp:104
428 msgid "Choose a Class"
429 msgstr "Chọn một giai cấp"
430
431 #: ../../../src/GameStateTitle.cpp:108
432 msgid "Play Game"
433 msgstr "Chơi trò chơi"
434
435 #: ../../../src/GameStateTitle.cpp:111
436 msgid "Enable a core mod to continue"
437 msgstr "Chọn một bản mod lõi để tiếp tục"
438
439 #: ../../../src/GameStateTitle.cpp:115
440 msgid "Configuration"
441 msgstr "Thiết lập"
442
443 #: ../../../src/GameStateTitle.cpp:118
444 msgid "Credits"
445 msgstr "Các đóng góp"
446
447 #: ../../../src/GameStateTitle.cpp:121
448 msgid "Exit Game"
449 msgstr "Thoát trò chơi"
450
451 #: ../../../src/InputState.cpp:402
452 msgid "Accept"
453 msgstr "Đồng ý"
454
455 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
456 msgid "Up"
457 msgstr "Lên"
458
459 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
460 msgid "Down"
461 msgstr "Xuống"
462
463 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
464 msgid "Left"
465 msgstr "Trái"
466
467 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
468 msgid "Right"
469 msgstr "Phải"
470
471 #: ../../../src/InputState.cpp:407
472 msgid "Bar1"
473 msgstr "Thanh1"
474
475 #: ../../../src/InputState.cpp:408
476 msgid "Bar2"
477 msgstr "Thanh2"
478
479 #: ../../../src/InputState.cpp:409
480 msgid "Bar3"
481 msgstr "Thanh3"
482
483 #: ../../../src/InputState.cpp:410
484 msgid "Bar4"
485 msgstr "Thanh4"
486
487 #: ../../../src/InputState.cpp:411
488 msgid "Bar5"
489 msgstr "Thanh5"
490
491 #: ../../../src/InputState.cpp:412
492 msgid "Bar6"
493 msgstr "Thanh6"
494
495 #: ../../../src/InputState.cpp:413
496 msgid "Bar7"
497 msgstr "Thanh7"
498
499 #: ../../../src/InputState.cpp:414
500 msgid "Bar8"
501 msgstr "Thanh8"
502
503 #: ../../../src/InputState.cpp:415
504 msgid "Bar9"
505 msgstr "Thanh9"
506
507 #: ../../../src/InputState.cpp:416
508 msgid "Bar0"
509 msgstr "Thanh0"
510
511 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
512 #: ../../../src/MenuCharacter.cpp:54
513 msgid "Character"
514 msgstr "Nhân vật"
515
516 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
517 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
518 msgid "Inventory"
519 msgstr "Hành trang"
520
521 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
522 #: ../../../src/MenuPowers.cpp:168
523 msgid "Powers"
524 msgstr "Sức mạnh"
525
526 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
527 #: ../../../src/MenuLog.cpp:72
528 msgid "Log"
529 msgstr "Nhật kí"
530
531 #: ../../../src/InputState.cpp:421
532 msgid "Main1"
533 msgstr "Chính1"
534
535 #: ../../../src/InputState.cpp:422
536 msgid "Main2"
537 msgstr "Chính2"
538
539 #: ../../../src/InputState.cpp:423
540 msgid "Ctrl"
541 msgstr ""
542
543 #: ../../../src/InputState.cpp:424
544 msgid "Shift"
545 msgstr ""
546
547 #: ../../../src/InputState.cpp:425
548 msgid "Alt"
549 msgstr ""
550
551 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
552 msgid "Delete"
553 msgstr ""
554
555 #: ../../../src/InputState.cpp:427
556 msgid "ActionBar Accept"
557 msgstr "ActionBar chọn"
558
559 #: ../../../src/InputState.cpp:428
560 msgid "ActionBar Left"
561 msgstr "ActionBar trái"
562
563 #: ../../../src/InputState.cpp:429
564 msgid "ActionBar Right"
565 msgstr "ActionBar phải"
566
567 #: ../../../src/InputState.cpp:430
568 msgid "ActionBar Use"
569 msgstr "ActionBar dùng"
570
571 #: ../../../src/InputState.cpp:431
572 msgid "Developer Menu"
573 msgstr "Menu phát triển"
574
575 #: ../../../src/InputState.cpp:433
576 msgid "Left Mouse"
577 msgstr "Chuột trái"
578
579 #: ../../../src/InputState.cpp:434
580 msgid "Middle Mouse"
581 msgstr "Chuột giữa"
582
583 #: ../../../src/InputState.cpp:435
584 msgid "Right Mouse"
585 msgstr "Chuột phải"
586
587 #: ../../../src/InputState.cpp:436
588 msgid "Wheel Up"
589 msgstr "Lăn lên"
590
591 #: ../../../src/InputState.cpp:437
592 msgid "Wheel Down"
593 msgstr "Lăn xuống"
594
595 #: ../../../src/InputState.cpp:438
596 msgid "Mouse X1"
597 msgstr "Phím X1 chuột"
598
599 #: ../../../src/InputState.cpp:439
600 msgid "Mouse X2"
601 msgstr "Phím X2 chuột"
602
603 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
604 msgid "Unknown Item"
605 msgstr "Vật chưa xác định"
606
607 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
608 #, c-format
609 msgid "%d%% Speed"
610 msgstr "%d%% tốc độ"
611
612 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
613 #, c-format
614 msgid "%d%% Attack Speed"
615 msgstr "%d%% tốc độ tấn công"
616
617 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
618 #: ../../../src/MenuPowers.cpp:833
619 #, c-format
620 msgid "Resistance (%s)"
621 msgstr "Khả năng kháng %s"
622
623 #: ../../../src/ItemManager.cpp:684
624 #, c-format
625 msgid "Requires %s"
626 msgstr "Yêu cầu %s"
627
628 #: ../../../src/ItemManager.cpp:733
629 msgid "Quest Item"
630 msgstr "Đồ nhiệm vụ"
631
632 #: ../../../src/ItemManager.cpp:760
633 #, c-format
634 msgid "Quality: %s"
635 msgstr "Chất lượng: %s"
636
637 #: ../../../src/ItemManager.cpp:785
638 #, c-format
639 msgid "Absorb: %d-%d"
640 msgstr "Hấp thụ: %d-%d"
641
642 #: ../../../src/ItemManager.cpp:787
643 #, c-format
644 msgid "Absorb: %d"
645 msgstr "Hấp thụ: %d"
646
647 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
648 #: ../../../src/MenuPowers.cpp:1134
649 #, c-format
650 msgid "Requires Level %d"
651 msgstr "Yêu cầu cấp độ %d"
652
653 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
654 #: ../../../src/MenuPowers.cpp:1125
655 #, c-format
656 msgid "Requires %s %d"
657 msgstr "Yêu cầu %s %d"
658
659 #: ../../../src/ItemManager.cpp:849
660 #, c-format
661 msgid "Requires Class: %s"
662 msgstr "Yêu cầu thuộc giai cấp: %s"
663
664 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
665 #, c-format
666 msgid "Buy Price: %d %s"
667 msgstr "Giá mua: %d %s"
668
669 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
670 #, c-format
671 msgid "Buy Price: %d %s each"
672 msgstr "Giá mua mỗi chiếc: %d %s"
673
674 #: ../../../src/ItemManager.cpp:886
675 #, c-format
676 msgid "Sell Price: %d %s"
677 msgstr "Giá bán: %d %s"
678
679 #: ../../../src/ItemManager.cpp:888
680 #, c-format
681 msgid "Sell Price: %d %s each"
682 msgstr "Giá bán mỗi chiếc: %d %s"
683
684 #: ../../../src/ItemManager.cpp:897
685 msgid "Set:"
686 msgstr "Đặt:"
687
688 #: ../../../src/ItemManager.cpp:904
689 #, c-format
690 msgid "%d items:"
691 msgstr "%d vật:"
692
693 #: ../../../src/ItemManager.cpp:917
694 #, c-format
695 msgid "Press [%s] to use"
696 msgstr "Nhấn [%s] để sử dụng"
697
698 #: ../../../src/ItemManager.cpp:920
699 #, c-format
700 msgid "Press [%s] to read"
701 msgstr "Nhấn [%s] để đọc"
702
703 #: ../../../src/MenuActionBar.cpp:87
704 msgid "Loot tooltip visibility"
705 msgstr ""
706
707 #: ../../../src/MenuActionBar.cpp:88
708 msgid "Mini-map mode"
709 msgstr ""
710
711 #: ../../../src/MenuActionBar.cpp:89
712 msgid "Always show stat bar labels"
713 msgstr "Luôn hiển thị nhãn thanh thuộc tính"
714
715 #: ../../../src/MenuActionBar.cpp:90
716 msgid "Show combat text"
717 msgstr "Hiển thị nội dung chiến trận"
718
719 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
720 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
721 #, c-format
722 msgid "Hotkey: %s"
723 msgstr "Phím: %s"
724
725 #: ../../../src/MenuActionBar.cpp:474
726 #, c-format
727 msgid "Default. Temporarily show all loot tooltips with '%s'."
728 msgstr ""
729
730 #: ../../../src/MenuActionBar.cpp:476
731 #, c-format
732 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
733 msgstr ""
734
735 #: ../../../src/MenuActionBar.cpp:478
736 #, c-format
737 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
738 msgstr ""
739
740 #: ../../../src/MenuActionBar.cpp:482
741 msgid "Visible"
742 msgstr ""
743
744 #: ../../../src/MenuActionBar.cpp:484
745 msgid "Visible (2x zoom)"
746 msgstr ""
747
748 #: ../../../src/MenuActionBar.cpp:486
749 msgid "Hidden"
750 msgstr ""
751
752 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
753 msgid "Enabled"
754 msgstr ""
755
756 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
757 msgid "Disabled"
758 msgstr ""
759
760 #: ../../../src/MenuActionBar.cpp:657
761 msgid "Not enough MP."
762 msgstr "Không đủ ma pháp."
763
764 #: ../../../src/MenuActiveEffects.cpp:124
765 #, c-format
766 msgid "x%d"
767 msgstr ""
768
769 #: ../../../src/MenuActiveEffects.cpp:219
770 msgid "Remaining:"
771 msgstr "Còn lại:"
772
773 #: ../../../src/MenuActiveEffects.cpp:225
774 #, c-format
775 msgid "x%d stacks"
776 msgstr "x%d chồng"
777
778 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
779 msgid "Name"
780 msgstr "Tên"
781
782 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
783 msgid "Level"
784 msgstr "Cấp độ"
785
786 #: ../../../src/MenuCharacter.cpp:310
787 #, c-format
788 msgid "%d unspent stat point"
789 msgstr "%d điểm thuộc tính chưa dùng"
790
791 #: ../../../src/MenuCharacter.cpp:313
792 #, c-format
793 msgid "%d unspent stat points"
794 msgstr "%d điểm thuộc tính chưa dùng"
795
796 #: ../../../src/MenuCharacter.cpp:355
797 #, c-format
798 msgid "Reduces the damage taken from \"%s\" elemental attacks."
799 msgstr "Giảm sát thương từ nguyên tố %s."
800
801 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
802 #, c-format
803 msgid "XP: %d"
804 msgstr "Điểm kinh nghiệm: %d"
805
806 #: ../../../src/MenuCharacter.cpp:367
807 #, c-format
808 msgid "Next: %d"
809 msgstr "Tiếp: %d"
810
811 #: ../../../src/MenuCharacter.cpp:373
812 #, c-format
813 msgid "base (%d), bonus (%d)"
814 msgstr "gốc %d, thêm %d"
815
816 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
817 msgid "Related stats:"
818 msgstr "Thuộc tính liên quan:"
819
820 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
821 #, c-format
822 msgid "Each level grants %d."
823 msgstr "Mỗi cấp độ tăng %d."
824
825 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
826 #, c-format
827 msgid "Each point of %s grants %d."
828 msgstr "Mỗi điểm của %s tăng %d."
918 #: ../../../src/MenuConfig.cpp:512
919 msgid ""
920 "Enables the below setting that controls the screen gamma level. The behavior"
921 " of the gamma setting can vary between platforms."
922 msgstr ""
923
924 #: ../../../src/MenuConfig.cpp:513
925 msgid ""
926 "Provides additional text for information that is primarily conveyed through "
927 "color."
928 msgstr ""
929
930 #: ../../../src/MenuConfig.cpp:514
931 msgid ""
932 "Some mods will automatically hide the stat bars when they are inactive. "
933 "Disabling this option will keep them displayed at all times."
934 msgstr ""
935
936 #: ../../../src/MenuConfig.cpp:515
937 msgid ""
938 "When enabled, empty equipment slots will be filled with applicable items "
939 "when they are obtained."
940 msgstr ""
941
942 #: ../../../src/MenuConfig.cpp:516
943 msgid ""
944 "Shows a marker above enemies, allies, and the player when they are obscured "
945 "by tall objects."
946 msgstr ""
947
948 #: ../../../src/MenuConfig.cpp:517
949 msgid ""
950 "This allows the game to be controlled entirely with the keyboard (or "
951 "joystick)."
952 msgstr ""
953
954 #: ../../../src/MenuConfig.cpp:518
955 msgid ""
956 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
957 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
958 "instead of 'Main1'."
959 msgstr ""
960
961 #: ../../../src/MenuConfig.cpp:519
962 msgid ""
963 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
964 "assigned to the movement button can be used by targeting an enemy. If this "
965 "setting is disabled, it is required to use 'Shift' to access the Power "
966 "assigned to the movement button."
967 msgstr ""
968
969 #: ../../../src/MenuConfig.cpp:520
970 msgid ""
971 "The player's attacks will be aimed in the direction of the mouse cursor when"
972 " this is enabled."
973 msgstr ""
974
975 #: ../../../src/MenuConfig.cpp:571
976 msgid "Active Mods"
977 msgstr "Bản mod đang bật"
978
979 #: ../../../src/MenuConfig.cpp:580
980 msgid "Available Mods"
981 msgstr "Bản mod còn lại"
982
983 #: ../../../src/MenuConfig.cpp:599
984 msgid "<< Disable"
985 msgstr "<< Tắt"
986
987 #: ../../../src/MenuConfig.cpp:605
988 msgid "Enable >>"
989 msgstr "Bật >>"
990
991 #: ../../../src/MenuConfig.cpp:1436
992 msgid "Version:"
993 msgstr "Phiên bản:"
994
995 #: ../../../src/MenuConfig.cpp:1441
996 msgid "Game:"
997 msgstr "Trò chơi:"
998
999 #: ../../../src/MenuConfig.cpp:1446
1000 msgid "Engine version:"
1001 msgstr "Phiên bản engine:"
1002
1003 #: ../../../src/MenuConfig.cpp:1454
1004 msgid "Requires mods:"
1005 msgstr "Yêu cầu bản mod:"
1006
1007 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
1008 msgid "(none)"
1009 msgstr "(không)"
1010
1011 #: ../../../src/MenuConfig.cpp:1579
1012 msgid "Save & Exit"
1013 msgstr "Lưư & Thoát"
8291014
8301015 #: ../../../src/MenuDevConsole.cpp:63
8311016 msgid "Execute"
9881173 msgid "HINT: Type help"
9891174 msgstr "GỢI Ý: Gõ 'help'"
9901175
991 #: ../../../src/MenuEnemy.cpp:138
1176 #: ../../../src/MenuEnemy.cpp:162
9921177 #, c-format
9931178 msgid "%s level %d"
9941179 msgstr "%s cấp độ %d"
9951180
996 #: ../../../src/MenuEnemy.cpp:162
1181 #: ../../../src/MenuEnemy.cpp:186
9971182 msgid "Dead"
9981183 msgstr "Đã chết"
9991184
1000 #: ../../../src/MenuEnemy.cpp:164
1185 #: ../../../src/MenuEnemy.cpp:188
10011186 msgid "Destroyed"
10021187 msgstr "Đã bị phá huỷ"
10031188
1004 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
1005 msgid "Paused"
1006 msgstr "Đang tạm dừng"
1007
1008 #: ../../../src/MenuExit.cpp:91
1009 msgid "Save & Exit"
1010 msgstr "Lưư & Thoát"
1011
1012 #: ../../../src/MenuExit.cpp:92
1013 msgid "Exit"
1014 msgstr "Thoát"
1015
1016 #: ../../../src/MenuExit.cpp:96
1017 msgid "Continue"
1018 msgstr "Tiếp tục"
1019
1020 #: ../../../src/MenuInventory.cpp:73
1021 msgid "Automatically equip items"
1022 msgstr "Tự động trang bị đồ"
1023
1024 #: ../../../src/MenuInventory.cpp:188
1189 #: ../../../src/MenuInventory.cpp:177
10251190 #, c-format
10261191 msgid "Lost %d%% of %s."
10271192 msgstr "Mất %d%% %s."
10281193
1029 #: ../../../src/MenuInventory.cpp:195
1194 #: ../../../src/MenuInventory.cpp:184
10301195 #, c-format
10311196 msgid "Lost %d%% of total XP."
10321197 msgstr "Mất %d%% tổng điểm kinh nghiệm."
10331198
1034 #: ../../../src/MenuInventory.cpp:200
1199 #: ../../../src/MenuInventory.cpp:189
10351200 #, c-format
10361201 msgid "Lost %d%% of current level XP."
10371202 msgstr "Mất %d%% điểm kinh nghiệm cấp độ hiện tại."
10381203
1039 #: ../../../src/MenuInventory.cpp:226
1204 #: ../../../src/MenuInventory.cpp:215
10401205 #, c-format
10411206 msgid "Lost %s."
10421207 msgstr "Mất %s."
10431208
1044 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1209 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10451210 #, c-format
10461211 msgid "%d %s"
10471212 msgstr ""
10481213
1049 #: ../../../src/MenuInventory.cpp:317
1214 #: ../../../src/MenuInventory.cpp:300
10501215 msgid "Pick up item(s):"
10511216 msgstr "Nhặt vật:"
10521217
1053 #: ../../../src/MenuInventory.cpp:318
1218 #: ../../../src/MenuInventory.cpp:301
10541219 msgid "Use or equip item:"
10551220 msgstr "Sử dụng hoặc trang bị đồ:"
10561221
1057 #: ../../../src/MenuInventory.cpp:319
1222 #: ../../../src/MenuInventory.cpp:302
10581223 #, c-format
10591224 msgid "%s modifiers"
10601225 msgstr "Các phím chức năng kết hợp với %s:"
10611226
1062 #: ../../../src/MenuInventory.cpp:320
1227 #: ../../../src/MenuInventory.cpp:303
10631228 msgid "Select a quantity of item:"
10641229 msgstr "Chọn số lượng đồ:"
10651230
1066 #: ../../../src/MenuInventory.cpp:323
1231 #: ../../../src/MenuInventory.cpp:306
10671232 msgid "Stash item stack:"
10681233 msgstr "Cất chồng đồ:"
10691234
1070 #: ../../../src/MenuInventory.cpp:325
1235 #: ../../../src/MenuInventory.cpp:308
10711236 msgid "Sell item stack:"
10721237 msgstr "Bán chồng đồ:"
10731238
1074 #: ../../../src/MenuInventory.cpp:592
1239 #: ../../../src/MenuInventory.cpp:574
10751240 msgid "You don't have enough of the required item."
10761241 msgstr "Bạn không đủ số đồ vật yêu cầu."
10771242
1078 #: ../../../src/MenuInventory.cpp:599
1243 #: ../../../src/MenuInventory.cpp:586
10791244 msgid "You can't use this item right now."
10801245 msgstr "Bạn không thể dùng vật này bây giờ."
10811246
1082 #: ../../../src/MenuInventory.cpp:611
1247 #: ../../../src/MenuInventory.cpp:598
10831248 msgid "This item can only be used from the action bar."
10841249 msgstr "Vật này chỉ có thể được dùng ở thanh hành động."
10851250
1086 #: ../../../src/MenuInventory.cpp:729
1251 #: ../../../src/MenuInventory.cpp:716
10871252 msgid "Inventory is full."
10881253 msgstr "Hành trang đã đầy."
10891254
1090 #: ../../../src/MenuInventory.cpp:849
1255 #: ../../../src/MenuInventory.cpp:841
10911256 #, c-format
10921257 msgid "Not enough %s."
10931258 msgstr "Không đủ %s."
10941259
1095 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1260 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
10961261 msgid "This item can not be sold."
10971262 msgstr "Không thể bán vật này."
10981263
11041269 msgid "Quests"
11051270 msgstr "Nhiệm vụ"
11061271
1107 #: ../../../src/MenuManager.cpp:286
1272 #: ../../../src/MenuManager.cpp:296
11081273 #, c-format
11091274 msgid "XP: %d/%d"
11101275 msgstr "Điểm kinh nghiệm: %d/%d"
11111276
1112 #: ../../../src/MenuManager.cpp:827
1277 #: ../../../src/MenuManager.cpp:854
11131278 msgid "This item can not be dropped."
11141279 msgstr "Không thể vứt vật này."
11151280
11171282 msgid "Enter amount:"
11181283 msgstr "Nhập số lượng:"
11191284
1120 #: ../../../src/MenuPowers.cpp:787
1285 #: ../../../src/MenuPowers.cpp:786
11211286 msgid "Passive"
11221287 msgstr "Thụ động"
11231288
1124 #: ../../../src/MenuPowers.cpp:792
1289 #: ../../../src/MenuPowers.cpp:791
11251290 #, c-format
11261291 msgid "Costs %d MP"
11271292 msgstr "Tốn %d điểm ma pháp"
11281293
1129 #: ../../../src/MenuPowers.cpp:796
1294 #: ../../../src/MenuPowers.cpp:795
11301295 #, c-format
11311296 msgid "Costs %d HP"
11321297 msgstr "Tốn %d điểm thể chất"
11331298
1134 #: ../../../src/MenuPowers.cpp:801
1299 #: ../../../src/MenuPowers.cpp:800
11351300 msgid "Cooldown:"
11361301 msgstr "Nguội:"
11371302
1138 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1303 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11391304 msgid "Damage per second"
11401305 msgstr "Sát thương trên giây"
11411306
1142 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1307 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11431308 msgid "HP per second"
11441309 msgstr "Điểm thể chất trên giây"
11451310
1146 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1311 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11471312 msgid "MP per second"
11481313 msgstr "Điểm ma pháp trên giây"
11491314
1150 #: ../../../src/MenuPowers.cpp:885
1315 #: ../../../src/MenuPowers.cpp:884
11511316 msgid "Immobilize"
11521317 msgstr "Làm bất động"
11531318
1154 #: ../../../src/MenuPowers.cpp:893
1319 #: ../../../src/MenuPowers.cpp:892
11551320 msgid "Immunity"
11561321 msgstr "Đề kháng"
11571322
1158 #: ../../../src/MenuPowers.cpp:896
1323 #: ../../../src/MenuPowers.cpp:895
11591324 msgid "Immunity to damage over time"
11601325 msgstr "Kháng sát thương theo thời gian"
11611326
1162 #: ../../../src/MenuPowers.cpp:899
1327 #: ../../../src/MenuPowers.cpp:898
11631328 msgid "Immunity to slow"
11641329 msgstr "Chống bị làm chậm"
11651330
1166 #: ../../../src/MenuPowers.cpp:902
1331 #: ../../../src/MenuPowers.cpp:901
11671332 msgid "Immunity to stun"
11681333 msgstr "Chống bất động"
11691334
1170 #: ../../../src/MenuPowers.cpp:905
1335 #: ../../../src/MenuPowers.cpp:904
11711336 msgid "Immunity to HP steal"
11721337 msgstr "Chống trộm điểm thể chất"
11731338
1174 #: ../../../src/MenuPowers.cpp:908
1339 #: ../../../src/MenuPowers.cpp:907
11751340 msgid "Immunity to MP steal"
11761341 msgstr "Chống trộm điểm ma pháp"
11771342
1178 #: ../../../src/MenuPowers.cpp:911
1343 #: ../../../src/MenuPowers.cpp:910
11791344 msgid "Immunity to knockback"
11801345 msgstr "Chống bị đẩy lại"
11811346
1182 #: ../../../src/MenuPowers.cpp:914
1347 #: ../../../src/MenuPowers.cpp:913
11831348 msgid "Immunity to damage reflection"
11841349 msgstr "Chống phản sát thương"
11851350
1186 #: ../../../src/MenuPowers.cpp:917
1351 #: ../../../src/MenuPowers.cpp:916
11871352 msgid "Stun"
11881353 msgstr "Làm bất động"
11891354
1190 #: ../../../src/MenuPowers.cpp:920
1355 #: ../../../src/MenuPowers.cpp:919
11911356 msgid "Automatic revive on death"
11921357 msgstr "Tự động hồi sinh"
11931358
1194 #: ../../../src/MenuPowers.cpp:923
1359 #: ../../../src/MenuPowers.cpp:922
11951360 msgid "Convert"
11961361 msgstr "Biến đổi"
11971362
1198 #: ../../../src/MenuPowers.cpp:926
1363 #: ../../../src/MenuPowers.cpp:925
11991364 msgid "Fear"
12001365 msgstr "Sợ hãi"
12011366
1202 #: ../../../src/MenuPowers.cpp:929
1367 #: ../../../src/MenuPowers.cpp:928
12031368 msgid "Lifespan"
12041369 msgstr "Vòng đời"
12051370
1206 #: ../../../src/MenuPowers.cpp:953
1371 #: ../../../src/MenuPowers.cpp:952
12071372 msgid "Magical Shield"
12081373 msgstr "Khiên ma thuật"
12091374
1210 #: ../../../src/MenuPowers.cpp:982
1375 #: ../../../src/MenuPowers.cpp:981
12111376 msgid "Healing"
12121377 msgstr "Hồi sức"
12131378
1214 #: ../../../src/MenuPowers.cpp:985
1379 #: ../../../src/MenuPowers.cpp:984
12151380 msgid "Knockback"
12161381 msgstr "Đẩy lại"
12171382
1218 #: ../../../src/MenuPowers.cpp:1010
1383 #: ../../../src/MenuPowers.cpp:1009
12191384 #, c-format
12201385 msgid "%d%% chance"
12211386 msgstr "%d%% khả năng"
12221387
1223 #: ../../../src/MenuPowers.cpp:1062
1388 #: ../../../src/MenuPowers.cpp:1061
12241389 msgid "Base Accuracy"
12251390 msgstr "Độ chính xác gốc"
12261391
1227 #: ../../../src/MenuPowers.cpp:1082
1392 #: ../../../src/MenuPowers.cpp:1081
12281393 msgid "Base Critical Chance"
12291394 msgstr "Xác suất siêu sát thương gốc"
12301395
1231 #: ../../../src/MenuPowers.cpp:1090
1396 #: ../../../src/MenuPowers.cpp:1089
12321397 msgid "Ignores Absorbtion"
12331398 msgstr "Bỏ qua hấp thụ sát thương"
12341399
1235 #: ../../../src/MenuPowers.cpp:1095
1400 #: ../../../src/MenuPowers.cpp:1094
12361401 msgid "Ignores Avoidance"
12371402 msgstr "Bỏ qua khả năng tránh đòn"
12381403
1239 #: ../../../src/MenuPowers.cpp:1100
1404 #: ../../../src/MenuPowers.cpp:1099
12401405 #, c-format
12411406 msgid "%d%% Chance to crit slowed targets"
12421407 msgstr "%d%% khả năng siêu sát thương với mục tiêu bị làm chậm"
12431408
1244 #: ../../../src/MenuPowers.cpp:1105
1409 #: ../../../src/MenuPowers.cpp:1104
12451410 #, c-format
12461411 msgid "Elemental Damage (%s)"
12471412 msgstr "Sát thương nguyên tố %s"
12481413
1249 #: ../../../src/MenuPowers.cpp:1114
1414 #: ../../../src/MenuPowers.cpp:1113
12501415 #, c-format
12511416 msgid "Requires a %s"
12521417 msgstr "Yêu cầu %s"
12531418
1254 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1419 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12551420 #, c-format
12561421 msgid "Requires Power: %s"
12571422 msgstr "Yêu cầu sức mạnh: %s"
12581423
1259 #: ../../../src/MenuPowers.cpp:1163
1424 #: ../../../src/MenuPowers.cpp:1162
12601425 msgid "Click to Unlock (uses 1 Skill Point)"
12611426 msgstr "Nhấn để mở khoá (dùng 1 điểm kĩ năng)"
12621427
1263 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1428 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12641429 msgid "Requires 1 Skill Point"
12651430 msgstr "Yêu cầu 1 điểm kĩ năng"
12661431
1267 #: ../../../src/MenuPowers.cpp:1355
1432 #: ../../../src/MenuPowers.cpp:1354
12681433 #, c-format
12691434 msgid "%d unspent skill point"
12701435 msgstr "%d điểm kĩ năng chưa dùng"
12711436
1272 #: ../../../src/MenuPowers.cpp:1358
1437 #: ../../../src/MenuPowers.cpp:1357
12731438 #, c-format
12741439 msgid "%d unspent skill points"
12751440 msgstr "%d điểm kĩ năng chưa dùng"
12761441
1277 #: ../../../src/MenuPowers.cpp:1388
1442 #: ../../../src/MenuPowers.cpp:1387
12781443 msgid "Next Level:"
12791444 msgstr "Cấp độ tiếp:"
12801445
1281 #: ../../../src/MenuStash.cpp:96
1282 msgid "Shared Stash"
1283 msgstr "Hòm đồ chung"
1284
1285 #: ../../../src/MenuStash.cpp:209
1446 #: ../../../src/MenuStash.cpp:53
1447 msgid "Private"
1448 msgstr ""
1449
1450 #: ../../../src/MenuStash.cpp:55
1451 msgid "Shared"
1452 msgstr ""
1453
1454 #: ../../../src/MenuStash.cpp:103
1455 msgid "Stash"
1456 msgstr ""
1457
1458 #: ../../../src/MenuStash.cpp:258
12861459 msgid "Can not store quest items in the stash."
12871460 msgstr "Không thể giữ đồ nhiệm vụ trong hòm."
12881461
1289 #: ../../../src/MenuStash.cpp:219
1462 #: ../../../src/MenuStash.cpp:263
1463 msgid "This item can not be stored in the stash."
1464 msgstr ""
1465
1466 #: ../../../src/MenuStash.cpp:268
1467 msgid "This item can not be stored in the private stash."
1468 msgstr ""
1469
1470 #: ../../../src/MenuStash.cpp:273
1471 msgid "This item can not be stored in the shared stash."
1472 msgstr ""
1473
1474 #: ../../../src/MenuStash.cpp:283
12901475 msgid "Stash is full."
12911476 msgstr "Hòm đã đầy."
12921477
1293 #: ../../../src/MenuTalker.cpp:454
1478 #: ../../../src/MenuStash.cpp:340
1479 #, c-format
1480 msgid "Can not store item in stash: %s"
1481 msgstr ""
1482
1483 #: ../../../src/MenuTalker.cpp:447
1484 #, c-format
1485 msgid "<dialog node %d>"
1486 msgstr ""
1487
1488 #: ../../../src/MenuTalker.cpp:455
12941489 msgid "Trade"
12951490 msgstr "Trao đổi"
12961491
12981493 msgid "Buyback"
12991494 msgstr "Mua lại"
13001495
1301 #: ../../../src/MenuVendor.cpp:279
1496 #: ../../../src/MenuVendor.cpp:281
13021497 msgid "Vendor"
13031498 msgstr "Thương nhân"
13041499
1305 #: ../../../src/PowerManager.cpp:1136
1500 #: ../../../src/PowerManager.cpp:1170
13061501 #, c-format
13071502 msgid "+%d Shield"
13081503 msgstr "+%d giáp"
13091504
1310 #: ../../../src/PowerManager.cpp:1392
1505 #: ../../../src/PowerManager.cpp:1426
13111506 msgid "You are already transformed, untransform first."
13121507 msgstr "Bạn đã biến đổi rồi, phải biến về trạng thái ban đầu trước tiên."
13131508
1314 #: ../../../src/PowerManager.cpp:1404
1509 #: ../../../src/PowerManager.cpp:1438
13151510 msgid "Could not untransform at this position."
13161511 msgstr "Không thể biến về trạng thái ban đầu ở vị trí này."
13171512
13191514 msgid "Completed Quests"
13201515 msgstr "Nhiệm vụ đã hoàn thành"
13211516
1322 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1517 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13231518 msgid "Game saved."
13241519 msgstr "Đã lưư trò chơi."
13251520
1326 #: ../../../src/SDLInputState.cpp:582
1521 #: ../../../src/SDLInputState.cpp:643
1522 msgid "BkSp"
1523 msgstr ""
1524
1525 #: ../../../src/SDLInputState.cpp:644
1526 msgid "Caps"
1527 msgstr ""
1528
1529 #: ../../../src/SDLInputState.cpp:645
1530 msgid "Del"
1531 msgstr ""
1532
1533 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1534 msgid "End"
1535 msgstr ""
1536
1537 #: ../../../src/SDLInputState.cpp:648
1538 msgid "Esc"
1539 msgstr ""
1540
1541 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1542 msgid "Home"
1543 msgstr ""
1544
1545 #: ../../../src/SDLInputState.cpp:650
1546 msgid "Ins"
1547 msgstr ""
1548
1549 #: ../../../src/SDLInputState.cpp:651
1550 msgid "LAlt"
1551 msgstr ""
1552
1553 #: ../../../src/SDLInputState.cpp:652
1554 msgid "LCtrl"
1555 msgstr ""
1556
1557 #: ../../../src/SDLInputState.cpp:654
1558 msgid "LShft"
1559 msgstr ""
1560
1561 #: ../../../src/SDLInputState.cpp:655
1562 msgid "Num"
1563 msgstr ""
1564
1565 #: ../../../src/SDLInputState.cpp:656
1566 msgid "PgDn"
1567 msgstr ""
1568
1569 #: ../../../src/SDLInputState.cpp:657
1570 msgid "PgUp"
1571 msgstr ""
1572
1573 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1574 msgid "Pause"
1575 msgstr ""
1576
1577 #: ../../../src/SDLInputState.cpp:659
1578 msgid "Print"
1579 msgstr ""
1580
1581 #: ../../../src/SDLInputState.cpp:660
1582 msgid "RAlt"
1583 msgstr ""
1584
1585 #: ../../../src/SDLInputState.cpp:661
1586 msgid "RCtrl"
1587 msgstr ""
1588
1589 #: ../../../src/SDLInputState.cpp:662
1590 msgid "Ret"
1591 msgstr ""
1592
1593 #: ../../../src/SDLInputState.cpp:664
1594 msgid "RShft"
1595 msgstr ""
1596
1597 #: ../../../src/SDLInputState.cpp:665
1598 msgid "SLock"
1599 msgstr ""
1600
1601 #: ../../../src/SDLInputState.cpp:666
1602 msgid "Spc"
1603 msgstr ""
1604
1605 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1606 msgid "Tab"
1607 msgstr ""
1608
1609 #: ../../../src/SDLInputState.cpp:673
13271610 msgid "Backspace"
13281611 msgstr ""
13291612
1330 #: ../../../src/SDLInputState.cpp:583
1613 #: ../../../src/SDLInputState.cpp:674
13311614 msgid "CapsLock"
13321615 msgstr ""
13331616
1334 #: ../../../src/SDLInputState.cpp:586
1335 msgid "End"
1336 msgstr ""
1337
1338 #: ../../../src/SDLInputState.cpp:587
1617 #: ../../../src/SDLInputState.cpp:678
13391618 msgid "Escape"
13401619 msgstr ""
13411620
1342 #: ../../../src/SDLInputState.cpp:588
1343 msgid "Home"
1344 msgstr ""
1345
1346 #: ../../../src/SDLInputState.cpp:589
1621 #: ../../../src/SDLInputState.cpp:680
13471622 msgid "Insert"
13481623 msgstr ""
13491624
1350 #: ../../../src/SDLInputState.cpp:590
1625 #: ../../../src/SDLInputState.cpp:681
13511626 msgid "Left Alt"
13521627 msgstr "Alt trái"
13531628
1354 #: ../../../src/SDLInputState.cpp:591
1629 #: ../../../src/SDLInputState.cpp:682
13551630 msgid "Left Ctrl"
13561631 msgstr "Ctrl trái"
13571632
1358 #: ../../../src/SDLInputState.cpp:593
1633 #: ../../../src/SDLInputState.cpp:684
13591634 msgid "Left Shift"
13601635 msgstr "Shift trái"
13611636
1362 #: ../../../src/SDLInputState.cpp:594
1637 #: ../../../src/SDLInputState.cpp:685
13631638 msgid "NumLock"
13641639 msgstr ""
13651640
1366 #: ../../../src/SDLInputState.cpp:595
1641 #: ../../../src/SDLInputState.cpp:686
13671642 msgid "PageDown"
13681643 msgstr ""
13691644
1370 #: ../../../src/SDLInputState.cpp:596
1645 #: ../../../src/SDLInputState.cpp:687
13711646 msgid "PageUp"
13721647 msgstr ""
13731648
1374 #: ../../../src/SDLInputState.cpp:597
1375 msgid "Pause"
1376 msgstr ""
1377
1378 #: ../../../src/SDLInputState.cpp:598
1649 #: ../../../src/SDLInputState.cpp:689
13791650 msgid "PrintScreen"
13801651 msgstr ""
13811652
1382 #: ../../../src/SDLInputState.cpp:599
1653 #: ../../../src/SDLInputState.cpp:690
13831654 msgid "Right Alt"
13841655 msgstr "Alt phải"
13851656
1386 #: ../../../src/SDLInputState.cpp:600
1657 #: ../../../src/SDLInputState.cpp:691
13871658 msgid "Right Ctrl"
13881659 msgstr "Ctrl phải"
13891660
1390 #: ../../../src/SDLInputState.cpp:601
1661 #: ../../../src/SDLInputState.cpp:692
13911662 msgid "Return"
13921663 msgstr ""
13931664
1394 #: ../../../src/SDLInputState.cpp:603
1665 #: ../../../src/SDLInputState.cpp:694
13951666 msgid "Right Shift"
13961667 msgstr "Shift phải"
13971668
1398 #: ../../../src/SDLInputState.cpp:604
1669 #: ../../../src/SDLInputState.cpp:695
13991670 msgid "ScrollLock"
14001671 msgstr ""
14011672
1402 #: ../../../src/SDLInputState.cpp:605
1673 #: ../../../src/SDLInputState.cpp:696
14031674 msgid "Space"
14041675 msgstr ""
14051676
1406 #: ../../../src/SDLInputState.cpp:606
1407 msgid "Tab"
1408 msgstr ""
1409
1410 #: ../../../src/SDLInputState.cpp:620
1677 #: ../../../src/SDLInputState.cpp:710
1678 #, c-format
1679 msgid "M%d"
1680 msgstr ""
1681
1682 #: ../../../src/SDLInputState.cpp:716
14111683 #, c-format
14121684 msgid "Mouse %d"
14131685 msgstr "Chuột %d"
14141686
1415 #: ../../../src/SDLInputState.cpp:628
1687 #: ../../../src/SDLInputState.cpp:726
1688 #, c-format
1689 msgid "JX%d-"
1690 msgstr ""
1691
1692 #: ../../../src/SDLInputState.cpp:728
14161693 #, c-format
14171694 msgid "Axis %d -"
14181695 msgstr ""
14191696
1420 #: ../../../src/SDLInputState.cpp:630
1697 #: ../../../src/SDLInputState.cpp:732
1698 #, c-format
1699 msgid "JX%d+"
1700 msgstr ""
1701
1702 #: ../../../src/SDLInputState.cpp:734
14211703 #, c-format
14221704 msgid "Axis %d +"
14231705 msgstr ""
14241706
1425 #: ../../../src/SDLInputState.cpp:633
1707 #: ../../../src/SDLInputState.cpp:739
1708 #, c-format
1709 msgid "JB%d"
1710 msgstr ""
1711
1712 #: ../../../src/SDLInputState.cpp:741
14261713 #, c-format
14271714 msgid "Button %d"
14281715 msgstr "Nút %d"
14291716
1430 #: ../../../src/SDLInputState.cpp:637
1431 msgid "(none)"
1432 msgstr "(không)"
1433
1434 #: ../../../src/SDLInputState.cpp:677
1717 #: ../../../src/SDLInputState.cpp:788
14351718 msgid "Touch control D-Pad"
14361719 msgstr ""
14371720
1438 #: ../../../src/SDLInputState.cpp:701
1721 #: ../../../src/SDLInputState.cpp:812
14391722 msgid "Touch control buttons"
14401723 msgstr ""
14411724
1442 #: ../../../src/SDLInputState.cpp:716
1725 #: ../../../src/SDLInputState.cpp:827
14431726 msgid "Tap"
14441727 msgstr "Vỗ"
14451728
1446 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1447 #: ../../../src/SDLInputState.cpp:768
1729 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1730 #, c-format
1731 msgid "Can not bind: %s"
1732 msgstr ""
1733
1734 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1735 #: ../../../src/SDLInputState.cpp:901
14481736 #, c-format
14491737 msgid "'%s' is no longer bound to:"
14501738 msgstr "[%s] không còn được gán với:"
16091897 msgid "k"
16101898 msgstr ""
16111899
1612 #: ../../../src/Utils.cpp:580
1900 #: ../../../src/Utils.cpp:616
16131901 #, c-format
16141902 msgid "%s second"
16151903 msgstr "%s giây"
16161904
1617 #: ../../../src/Utils.cpp:583
1905 #: ../../../src/Utils.cpp:619
16181906 #, c-format
16191907 msgid "%s seconds"
16201908 msgstr "%s giây"
33 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
44 #
55 # Translators:
6 # Justin Jacobs <jajdorkster@gmail.com>, 2018
7 # 杜茂森 <dumaosen_main01@outlook.com>, 2018
6 # Justin Jacobs <jajdorkster@gmail.com>, 2019
7 # 杜茂森 <dumaosen_main01@outlook.com>, 2020
88 #
99 #, fuzzy
1010 msgid ""
1111 msgstr ""
1212 "Project-Id-Version: PACKAGE VERSION\n"
1313 "Report-Msgid-Bugs-To: \n"
14 "POT-Creation-Date: 2018-11-17 21:50-0500\n"
14 "POT-Creation-Date: 2020-05-20 16:39-0400\n"
1515 "PO-Revision-Date: 2018-03-28 19:16+0000\n"
16 "Last-Translator: 杜茂森 <dumaosen_main01@outlook.com>, 2018\n"
16 "Last-Translator: 杜茂森 <dumaosen_main01@outlook.com>, 2020\n"
1717 "Language-Team: Chinese (https://www.transifex.com/flareorg/teams/84925/zh/)\n"
1818 "MIME-Version: 1.0\n"
1919 "Content-Type: text/plain; charset=UTF-8\n"
2121 "Language: zh\n"
2222 "Plural-Forms: nplurals=1; plural=0;\n"
2323
24 #: ../../../src/Avatar.cpp:367
24 #: ../../../src/Avatar.cpp:387
25 msgid "Your health is low!"
26 msgstr "您已奄奄一息!"
27
28 #: ../../../src/Avatar.cpp:419
2529 #, c-format
2630 msgid "Congratulations, you have reached level %d!"
27 msgstr "恭喜!你达到了等级 %d!"
28
29 #: ../../../src/Avatar.cpp:369
30 msgid "You may increase one attribute through the Character Menu."
31 msgstr "你可以在角色菜单增加一点属性"
32
33 #: ../../../src/Avatar.cpp:583
31 msgstr "恭喜,你达到了等级%d!"
32
33 #: ../../../src/Avatar.cpp:421
34 msgid "You may increase one or more attributes through the Character Menu."
35 msgstr "你可以在角色菜单增加一点或多点属性。"
36
37 #: ../../../src/Avatar.cpp:425
38 msgid "You may unlock one or more abilities through the Powers Menu."
39 msgstr "你可以在技能菜单增加一点或多点技能。"
40
41 #: ../../../src/Avatar.cpp:692
3442 msgid "You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."
35 msgstr "你被打败了,游戏结束!按下${INPUT_CONTINUE}返回游戏开始界面。"
36
37 #: ../../../src/Avatar.cpp:589
43 msgstr "你被打败了,游戏结束!按下 ${INPUT_CONTINUE} 返回到标题界面。"
44
45 #: ../../../src/Avatar.cpp:698
3846 msgid "You are defeated. ${INPUT_CONTINUE} to continue."
39 msgstr "你被打败了。按下${INPUT_CONTINUE}以继续。"
40
41 #: ../../../src/Avatar.cpp:839
47 msgstr "你被打败了。按下 ${INPUT_CONTINUE} 以继续。"
48
49 #: ../../../src/Avatar.cpp:949
4250 msgid "Transformation expired. You have been moved back to a safe place."
43 msgstr "转换已过期。 你已回到一个安全的地方。"
51 msgstr "传送已过期。你已回到了一个安全的地方。"
4452
4553 #: ../../../src/CampaignManager.cpp:153
4654 #, c-format
4755 msgid "%d %s removed."
48 msgstr "%d %s 已移除"
49
50 #: ../../../src/CampaignManager.cpp:162
56 msgstr "%d个%s已移除。"
57
58 #: ../../../src/CampaignManager.cpp:165
59 #, c-format
60 msgid "%s x%d removed."
61 msgstr "%s个%d已移除。"
62
63 #: ../../../src/CampaignManager.cpp:167
5164 #, c-format
5265 msgid "%s removed."
53 msgstr "%s已移除"
54
55 #: ../../../src/CampaignManager.cpp:175
66 msgstr "%s已移除。"
67
68 #: ../../../src/CampaignManager.cpp:180
5669 #, c-format
5770 msgid "You receive %s."
58 msgstr "你收到 %s."
59
60 #: ../../../src/CampaignManager.cpp:177
71 msgstr "你收到%s。"
72
73 #: ../../../src/CampaignManager.cpp:182
6174 #, c-format
6275 msgid "You receive %s x%d."
63 msgstr "你收到 %s x%d."
64
65 #: ../../../src/CampaignManager.cpp:186
76 msgstr "你收到%s x%d。"
77
78 #: ../../../src/CampaignManager.cpp:191
6679 #, c-format
6780 msgid "You receive %d %s."
68 msgstr "你收到 %d %s."
69
70 #: ../../../src/CampaignManager.cpp:195
81 msgstr "你得到%d个%s。"
82
83 #: ../../../src/CampaignManager.cpp:200
7184 #, c-format
7285 msgid "You receive %d XP."
73 msgstr "你收到 %d XP."
74
75 #: ../../../src/CampaignManager.cpp:201
86 msgstr "你得到%dXP。"
87
88 #: ../../../src/CampaignManager.cpp:206
7689 msgid "HP restored."
77 msgstr "HP 已恢复."
78
79 #: ../../../src/CampaignManager.cpp:205
90 msgstr "HP已恢复。"
91
92 #: ../../../src/CampaignManager.cpp:210
8093 msgid "MP restored."
81 msgstr "MP 已恢复."
82
83 #: ../../../src/CampaignManager.cpp:210
94 msgstr "MP已恢复。"
95
96 #: ../../../src/CampaignManager.cpp:215
8497 msgid "HP and MP restored."
85 msgstr "HP 和 MP 已恢复."
86
87 #: ../../../src/CampaignManager.cpp:214
98 msgstr "HP和MP已恢复。"
99
100 #: ../../../src/CampaignManager.cpp:219
88101 msgid "Negative effects removed."
89 msgstr "负面影响已消除."
90
91 #: ../../../src/CampaignManager.cpp:220
102 msgstr "负面效果已消除。"
103
104 #: ../../../src/CampaignManager.cpp:225
92105 msgid "HP and MP restored, negative effects removed"
93 msgstr "HP 和MP 已恢复, 负面影响已消除"
106 msgstr "HP和MP已恢复,负面效果已消除。"
94107
95108 #: ../../../src/DeviceList.cpp:56
96109 msgid ""
99112 "Often slower, but less likely to have issues."
100113 msgstr ""
101114 "SDL软件渲染器\n"
102 "通常较慢,但不太可能出现问题。"
115 "\n"
116 "通常较慢,但出现问题几率更低。"
103117
104118 #: ../../../src/DeviceList.cpp:59
105119 msgid ""
108122 "The default renderer that is often faster than the SDL software renderer."
109123 msgstr ""
110124 "SDL硬件渲染器\n"
111 "默认渲染器,通常比SDL软件渲染器更快。"
112
113 #: ../../../src/EngineSettings.cpp:561
125 "\n"
126 "默认渲染器,通常比软件渲染器更快。"
127
128 #: ../../../src/EngineSettings.cpp:572
114129 msgid "Adventurer"
115 msgstr "玩家"
116
117 #: ../../../src/Entity.cpp:511
130 msgstr "冒险者"
131
132 #: ../../../src/Entity.cpp:522
118133 msgid "miss"
119134 msgstr "未击中"
120135
121 #: ../../../src/Entity.cpp:548 ../../../src/PowerManager.cpp:1152
122 #: ../../../src/StatBlock.cpp:805 ../../../src/StatBlock.cpp:811
136 #: ../../../src/Entity.cpp:560 ../../../src/PowerManager.cpp:1186
137 #: ../../../src/StatBlock.cpp:813 ../../../src/StatBlock.cpp:819
123138 #, c-format
124139 msgid "+%d HP"
125 msgstr "+%d HP"
126
127 #: ../../../src/Entity.cpp:555 ../../../src/StatBlock.cpp:816
128 #: ../../../src/StatBlock.cpp:822
140 msgstr "+%dHP"
141
142 #: ../../../src/Entity.cpp:567 ../../../src/StatBlock.cpp:824
143 #: ../../../src/StatBlock.cpp:830
129144 #, c-format
130145 msgid "+%d MP"
131 msgstr "+%d MP"
132
133 #: ../../../src/EventManager.cpp:738
146 msgstr "+%dMP"
147
148 #: ../../../src/EventManager.cpp:782
134149 msgid "Unknown destination"
135150 msgstr "无法进入"
136151
137 #: ../../../src/GameStateConfigBase.cpp:89
138 #: ../../../src/GameStateConfigBase.cpp:110
152 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
153 msgid "Loading..."
154 msgstr "载入中……"
155
156 #: ../../../src/GameStateLoad.cpp:90 ../../../src/GameStateLoad.cpp:103
157 msgid "Delete Save"
158 msgstr "删除存档"
159
160 #: ../../../src/GameStateLoad.cpp:90
161 msgid "Delete this save?"
162 msgstr "确定删除存档?"
163
164 #: ../../../src/GameStateLoad.cpp:92
165 msgid "Exit to Title"
166 msgstr "回到标题界面"
167
168 #: ../../../src/GameStateLoad.cpp:95
169 msgid "New Game"
170 msgstr "新游戏"
171
172 #: ../../../src/GameStateLoad.cpp:99 ../../../src/GameStateLoad.cpp:608
173 msgid "Choose a Slot"
174 msgstr "选择一个人物存档"
175
176 #: ../../../src/GameStateLoad.cpp:581 ../../../src/GameStateLoad.cpp:602
177 msgid "Enable a story mod to continue"
178 msgstr "启用故事模块以继续"
179
180 #: ../../../src/GameStateLoad.cpp:597
181 msgid "Load Game"
182 msgstr "载入游戏"
183
184 #: ../../../src/GameStateLoad.cpp:706
185 msgid "Entering game world..."
186 msgstr "进入游戏世界……"
187
188 #: ../../../src/GameStateLoad.cpp:709
189 msgid "Loading saved game..."
190 msgstr "载入游戏……"
191
192 #: ../../../src/GameStateLoad.cpp:742
193 msgid "Invalid save"
194 msgstr "保存无效"
195
196 #: ../../../src/GameStateLoad.cpp:766 ../../../src/ItemManager.cpp:777
197 #: ../../../src/MenuPowers.cpp:777 ../../../src/MenuPowers.cpp:1143
198 #: ../../../src/MenuPowers.cpp:1543
199 #, c-format
200 msgid "Level %d"
201 msgstr "等级 %d"
202
203 #: ../../../src/GameStateNew.cpp:65 ../../../src/InputState.cpp:406
204 #: ../../../src/MenuConfig.cpp:244
205 msgid "Cancel"
206 msgstr "取消"
207
208 #: ../../../src/GameStateNew.cpp:68
209 msgid "Create"
210 msgstr "创建"
211
212 #: ../../../src/GameStateNew.cpp:76
213 msgid "Randomize"
214 msgstr "随机"
215
216 #: ../../../src/GameStateNew.cpp:92
217 msgid "Choose a Portrait"
218 msgstr "选择头像"
219
220 #: ../../../src/GameStateNew.cpp:96
221 msgid "Choose a Name"
222 msgstr "输入名字"
223
224 #: ../../../src/GameStateNew.cpp:100
225 msgid "Permadeath?"
226 msgstr "死亡后不可复活?"
227
228 #: ../../../src/GameStateNew.cpp:104
229 msgid "Choose a Class"
230 msgstr "选择职业"
231
232 #: ../../../src/GameStateTitle.cpp:107
233 msgid "Play Game"
234 msgstr "开始游戏"
235
236 #: ../../../src/GameStateTitle.cpp:110
237 msgid "Enable a core mod to continue"
238 msgstr "开启核心模块以继续"
239
240 #: ../../../src/GameStateTitle.cpp:114
241 msgid "Configuration"
242 msgstr "设置"
243
244 #: ../../../src/GameStateTitle.cpp:117
245 msgid "Credits"
246 msgstr "致谢"
247
248 #: ../../../src/GameStateTitle.cpp:120
249 msgid "Exit Game"
250 msgstr "退出游戏"
251
252 #: ../../../src/InputState.cpp:407
253 msgid "Accept"
254 msgstr "确定"
255
256 #: ../../../src/InputState.cpp:408 ../../../src/SDLInputState.cpp:668
257 #: ../../../src/SDLInputState.cpp:698
258 msgid "Up"
259 msgstr "上"
260
261 #: ../../../src/InputState.cpp:409 ../../../src/SDLInputState.cpp:646
262 #: ../../../src/SDLInputState.cpp:676
263 msgid "Down"
264 msgstr "下"
265
266 #: ../../../src/InputState.cpp:410 ../../../src/SDLInputState.cpp:653
267 #: ../../../src/SDLInputState.cpp:683
268 msgid "Left"
269 msgstr "左"
270
271 #: ../../../src/InputState.cpp:411 ../../../src/SDLInputState.cpp:663
272 #: ../../../src/SDLInputState.cpp:693
273 msgid "Right"
274 msgstr "右"
275
276 #: ../../../src/InputState.cpp:412
277 msgid "Bar1"
278 msgstr "槽1"
279
280 #: ../../../src/InputState.cpp:413
281 msgid "Bar2"
282 msgstr "槽2"
283
284 #: ../../../src/InputState.cpp:414
285 msgid "Bar3"
286 msgstr "槽3"
287
288 #: ../../../src/InputState.cpp:415
289 msgid "Bar4"
290 msgstr "槽4"
291
292 #: ../../../src/InputState.cpp:416
293 msgid "Bar5"
294 msgstr "槽5"
295
296 #: ../../../src/InputState.cpp:417
297 msgid "Bar6"
298 msgstr "槽6"
299
300 #: ../../../src/InputState.cpp:418
301 msgid "Bar7"
302 msgstr "槽7"
303
304 #: ../../../src/InputState.cpp:419
305 msgid "Bar8"
306 msgstr "槽8"
307
308 #: ../../../src/InputState.cpp:420
309 msgid "Bar9"
310 msgstr "槽9"
311
312 #: ../../../src/InputState.cpp:421
313 msgid "Bar0"
314 msgstr "槽0"
315
316 #: ../../../src/InputState.cpp:422 ../../../src/MenuActionBar.cpp:82
317 #: ../../../src/MenuCharacter.cpp:54
318 msgid "Character"
319 msgstr "角色"
320
321 #: ../../../src/InputState.cpp:423 ../../../src/MenuActionBar.cpp:83
322 #: ../../../src/MenuInventory.cpp:129 ../../../src/MenuVendor.cpp:57
323 msgid "Inventory"
324 msgstr "物品"
325
326 #: ../../../src/InputState.cpp:424 ../../../src/MenuActionBar.cpp:84
327 #: ../../../src/MenuPowers.cpp:167
328 msgid "Powers"
329 msgstr "技能"
330
331 #: ../../../src/InputState.cpp:425 ../../../src/MenuActionBar.cpp:85
332 #: ../../../src/MenuLog.cpp:72
333 msgid "Log"
334 msgstr "日志"
335
336 #: ../../../src/InputState.cpp:426
337 msgid "Main1"
338 msgstr "主按键1"
339
340 #: ../../../src/InputState.cpp:427
341 msgid "Main2"
342 msgstr "主按键2"
343
344 #: ../../../src/InputState.cpp:428
345 msgid "Ctrl"
346 msgstr "Ctrl"
347
348 #: ../../../src/InputState.cpp:429
349 msgid "Shift"
350 msgstr "Shift"
351
352 #: ../../../src/InputState.cpp:430
353 msgid "Alt"
354 msgstr "Alt"
355
356 #: ../../../src/InputState.cpp:431 ../../../src/SDLInputState.cpp:675
357 msgid "Delete"
358 msgstr "Delete"
359
360 #: ../../../src/InputState.cpp:432
361 msgid "ActionBar Accept"
362 msgstr "操作栏接受"
363
364 #: ../../../src/InputState.cpp:433
365 msgid "ActionBar Left"
366 msgstr "操作栏左"
367
368 #: ../../../src/InputState.cpp:434
369 msgid "ActionBar Right"
370 msgstr "操作栏右"
371
372 #: ../../../src/InputState.cpp:435
373 msgid "ActionBar Use"
374 msgstr "操作栏使用"
375
376 #: ../../../src/InputState.cpp:436
377 msgid "Developer Menu"
378 msgstr "开发者菜单"
379
380 #: ../../../src/InputState.cpp:438
381 msgid "Left Mouse"
382 msgstr "鼠标左键"
383
384 #: ../../../src/InputState.cpp:439
385 msgid "Middle Mouse"
386 msgstr "鼠标中键"
387
388 #: ../../../src/InputState.cpp:440
389 msgid "Right Mouse"
390 msgstr "鼠标右键"
391
392 #: ../../../src/InputState.cpp:441
393 msgid "Wheel Up"
394 msgstr "滚轮向上"
395
396 #: ../../../src/InputState.cpp:442
397 msgid "Wheel Down"
398 msgstr "滚轮向下"
399
400 #: ../../../src/InputState.cpp:443
401 msgid "Mouse X1"
402 msgstr "鼠标X1"
403
404 #: ../../../src/InputState.cpp:444
405 msgid "Mouse X2"
406 msgstr "鼠标X2"
407
408 #: ../../../src/ItemManager.cpp:480 ../../../src/ItemManager.cpp:483
409 msgid "Unknown Item"
410 msgstr "未知物品"
411
412 #: ../../../src/ItemManager.cpp:678 ../../../src/MenuPowers.cpp:886
413 #, c-format
414 msgid "%d%% Speed"
415 msgstr "%d%%速度"
416
417 #: ../../../src/ItemManager.cpp:682 ../../../src/MenuPowers.cpp:889
418 #, c-format
419 msgid "%d%% Attack Speed"
420 msgstr "%d%%攻击速度"
421
422 #: ../../../src/ItemManager.cpp:704 ../../../src/MenuCharacter.cpp:354
423 #: ../../../src/MenuPowers.cpp:832
424 #, c-format
425 msgid "Resistance (%s)"
426 msgstr "抗性(%s)"
427
428 #: ../../../src/ItemManager.cpp:714
429 #, c-format
430 msgid "Requires %s"
431 msgstr "需要%s"
432
433 #: ../../../src/ItemManager.cpp:763
434 msgid "Quest Item"
435 msgstr "任务物品"
436
437 #: ../../../src/ItemManager.cpp:790
438 #, c-format
439 msgid "Quality: %s"
440 msgstr "质量:%s"
441
442 #: ../../../src/ItemManager.cpp:815
443 #, c-format
444 msgid "Absorb: %d-%d"
445 msgstr "伤害吸收:%d-%d"
446
447 #: ../../../src/ItemManager.cpp:817
448 #, c-format
449 msgid "Absorb: %d"
450 msgstr "伤害吸收:%d"
451
452 #: ../../../src/ItemManager.cpp:857 ../../../src/MenuPowers.cpp:1130
453 #: ../../../src/MenuPowers.cpp:1133
454 #, c-format
455 msgid "Requires Level %d"
456 msgstr "需要等级%d"
457
458 #: ../../../src/ItemManager.cpp:868 ../../../src/MenuPowers.cpp:1122
459 #: ../../../src/MenuPowers.cpp:1124
460 #, c-format
461 msgid "Requires %s %d"
462 msgstr "需要%s %d"
463
464 #: ../../../src/ItemManager.cpp:879
465 #, c-format
466 msgid "Requires Class: %s"
467 msgstr "需要职业:%s"
468
469 #: ../../../src/ItemManager.cpp:894 ../../../src/ItemManager.cpp:906
470 #, c-format
471 msgid "Buy Price: %d %s"
472 msgstr "购买价格:%d %s"
473
474 #: ../../../src/ItemManager.cpp:896 ../../../src/ItemManager.cpp:908
475 #, c-format
476 msgid "Buy Price: %d %s each"
477 msgstr "购买单价:%d 每个%s"
478
479 #: ../../../src/ItemManager.cpp:916
480 #, c-format
481 msgid "Sell Price: %d %s"
482 msgstr "出售价格:%d %s"
483
484 #: ../../../src/ItemManager.cpp:918
485 #, c-format
486 msgid "Sell Price: %d %s each"
487 msgstr "出售单价:%d 每个%s"
488
489 #: ../../../src/ItemManager.cpp:927
490 msgid "Set:"
491 msgstr "设置:"
492
493 #: ../../../src/ItemManager.cpp:934
494 #, c-format
495 msgid "%d items:"
496 msgstr "%d个物品:"
497
498 #: ../../../src/ItemManager.cpp:947 ../../../src/ItemManager.cpp:953
499 #, c-format
500 msgid "Press [%s] to use"
501 msgstr "按[%s]使用"
502
503 #: ../../../src/ItemManager.cpp:951
504 #, c-format
505 msgid "Press [%s] to read"
506 msgstr "按[%s]阅读"
507
508 #: ../../../src/MenuActionBar.cpp:226 ../../../src/MenuActionBar.cpp:233
509 #: ../../../src/MenuActionBar.cpp:236 ../../../src/MenuActionBar.cpp:242
510 #, c-format
511 msgid "Hotkey: %s"
512 msgstr "快捷键:%s"
513
514 #: ../../../src/MenuActionBar.cpp:599
515 msgid "Not enough MP."
516 msgstr "MP不足。"
517
518 #: ../../../src/MenuActiveEffects.cpp:124
519 #, c-format
520 msgid "x%d"
521 msgstr "x%d"
522
523 #: ../../../src/MenuActiveEffects.cpp:219
524 msgid "Remaining:"
525 msgstr "剩余:"
526
527 #: ../../../src/MenuActiveEffects.cpp:225
528 #, c-format
529 msgid "x%d stacks"
530 msgstr "x%d"
531
532 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
533 msgid "Name"
534 msgstr "名字"
535
536 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
537 msgid "Level"
538 msgstr "等级"
539
540 #: ../../../src/MenuCharacter.cpp:310
541 #, c-format
542 msgid "%d unspent stat point"
543 msgstr "%d个未使用的属性点数"
544
545 #: ../../../src/MenuCharacter.cpp:313
546 #, c-format
547 msgid "%d unspent stat points"
548 msgstr "%d个未使用的属性点数"
549
550 #: ../../../src/MenuCharacter.cpp:355
551 #, c-format
552 msgid "Reduces the damage taken from \"%s\" elemental attacks."
553 msgstr "减少来自“%s”的元素攻击伤害。"
554
555 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:292
556 #, c-format
557 msgid "XP: %d"
558 msgstr "经验值XP:%d"
559
560 #: ../../../src/MenuCharacter.cpp:367
561 #, c-format
562 msgid "Next: %d"
563 msgstr "下一级:%d"
564
565 #: ../../../src/MenuCharacter.cpp:373
566 #, c-format
567 msgid "base (%d), bonus (%d)"
568 msgstr "基础(%d),增益(%d)"
569
570 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
571 msgid "Related stats:"
572 msgstr "相关的属性:"
573
574 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
575 #, c-format
576 msgid "Each level grants %d."
577 msgstr "每一级增长%d。"
578
579 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
580 #, c-format
581 msgid "Each point of %s grants %d."
582 msgstr "每点%s增长%d。"
583
584 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1163
585 msgid "Clear"
586 msgstr "清空"
587
588 #: ../../../src/MenuConfig.cpp:122 ../../../src/MenuConfig.cpp:1161
589 msgid "Assign:"
590 msgstr "分配:"
591
592 #: ../../../src/MenuConfig.cpp:123 ../../../src/MenuConfig.cpp:243
139593 msgid "Defaults"
140594 msgstr "默认设置"
141595
142 #: ../../../src/GameStateConfigBase.cpp:89
596 #: ../../../src/MenuConfig.cpp:123
143597 msgid "Reset ALL settings?"
144 msgstr "确定重置?"
145
146 #: ../../../src/GameStateConfigBase.cpp:109 ../../../src/MenuNumPicker.cpp:49
598 msgstr "确定重置所有设置吗?"
599
600 #: ../../../src/MenuConfig.cpp:242 ../../../src/MenuNumPicker.cpp:49
147601 msgid "OK"
148602 msgstr "确定"
149603
150 #: ../../../src/GameStateConfigBase.cpp:111 ../../../src/GameStateNew.cpp:65
151 #: ../../../src/InputState.cpp:401
152 msgid "Cancel"
153 msgstr "取消设置"
154
155 #: ../../../src/GameStateConfigBase.cpp:160
156 #: ../../../src/GameStateConfigDesktop.cpp:130
604 #: ../../../src/MenuConfig.cpp:246
605 msgid "Continue"
606 msgstr "继续"
607
608 #: ../../../src/MenuConfig.cpp:248
609 msgid "Save Game"
610 msgstr "保存游戏"
611
612 #: ../../../src/MenuConfig.cpp:291
613 msgid "Default"
614 msgstr "默认"
615
616 #: ../../../src/MenuConfig.cpp:291
617 msgid ""
618 "Show all loot tooltips, except for those that would be obscured by the "
619 "player or an enemy. Temporarily show all loot tooltips with 'Alt'."
620 msgstr "显示全部的战利品提示,除了那些被玩家或敌人遮盖的。按‘Alt’临时显示全部的战利品提示。"
621
622 #: ../../../src/MenuConfig.cpp:292
623 msgid "Show all"
624 msgstr "全部显示"
625
626 #: ../../../src/MenuConfig.cpp:292
627 msgid ""
628 "Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."
629 msgstr "总是显示战利品提示。按‘Alt’临时隐藏全部的战利品提示。"
630
631 #: ../../../src/MenuConfig.cpp:293 ../../../src/MenuConfig.cpp:298
632 msgid "Hidden"
633 msgstr "隐藏"
634
635 #: ../../../src/MenuConfig.cpp:293
636 msgid ""
637 "Always hide loot tooltips, except for when a piece of loot is hovered with "
638 "the mouse cursor. Temporarily show all loot tooltips with 'Alt'."
639 msgstr "总是隐藏战利品提示,除了光标指向的。按 ‘Alt’ 显示全部的战利品提示。"
640
641 #: ../../../src/MenuConfig.cpp:296
642 msgid "Visible"
643 msgstr "可见"
644
645 #: ../../../src/MenuConfig.cpp:297
646 msgid "Visible (2x zoom)"
647 msgstr "可见(两倍缩放)"
648
649 #: ../../../src/MenuConfig.cpp:301
650 msgid ""
651 "Controls the type of warning to be activated when the player is below the "
652 "low health threshold."
653 msgstr "这将控制玩家在低生命阈值以下时使用何种通知。"
654
655 #: ../../../src/MenuConfig.cpp:302
656 msgid "- Display a message"
657 msgstr "- 显示消息"
658
659 #: ../../../src/MenuConfig.cpp:303
660 msgid "- Play a sound"
661 msgstr "- 播放声音"
662
663 #: ../../../src/MenuConfig.cpp:304
664 msgid "- Change the cursor"
665 msgstr "- 切换光标"
666
667 #: ../../../src/MenuConfig.cpp:306
668 msgid "Disabled"
669 msgstr "已禁用"
670
671 #: ../../../src/MenuConfig.cpp:307
672 msgid "All"
673 msgstr "全部"
674
675 #: ../../../src/MenuConfig.cpp:308
676 msgid "Message & Cursor"
677 msgstr "消息和光标"
678
679 #: ../../../src/MenuConfig.cpp:309
680 msgid "Message & Sound"
681 msgstr "消息和声音"
682
683 #: ../../../src/MenuConfig.cpp:310
684 msgid "Sound & Cursor"
685 msgstr "声音和光标"
686
687 #: ../../../src/MenuConfig.cpp:311
688 msgid "Message"
689 msgstr "消息"
690
691 #: ../../../src/MenuConfig.cpp:312
692 msgid "Cursor"
693 msgstr "光标"
694
695 #: ../../../src/MenuConfig.cpp:313
696 msgid "Sound"
697 msgstr "音效"
698
699 #: ../../../src/MenuConfig.cpp:319
700 msgid ""
701 "When the player's health drops below the given threshold, the low health "
702 "notifications are triggered if one or more of them is enabled."
703 msgstr "当玩家的HP低于一个特定的阈值时,如果您已启用一种或更多低生命通知,它将被触发。"
704
705 #: ../../../src/MenuConfig.cpp:332 ../../../src/MenuConfig.cpp:1579
706 msgid "Exit"
707 msgstr "退出"
708
709 #: ../../../src/MenuConfig.cpp:333
710 msgid "Video"
711 msgstr "画面"
712
713 #: ../../../src/MenuConfig.cpp:334
157714 msgid "Audio"
158715 msgstr "声音"
159716
160 #: ../../../src/GameStateConfigBase.cpp:161
161 #: ../../../src/GameStateConfigDesktop.cpp:131
717 #: ../../../src/MenuConfig.cpp:335
162718 msgid "Interface"
163719 msgstr "界面"
164720
165 #: ../../../src/GameStateConfigBase.cpp:162
166 #: ../../../src/GameStateConfigDesktop.cpp:134
721 #: ../../../src/MenuConfig.cpp:336
722 msgid "Input"
723 msgstr "输入"
724
725 #: ../../../src/MenuConfig.cpp:337
726 msgid "Keybindings"
727 msgstr "快捷键"
728
729 #: ../../../src/MenuConfig.cpp:338
167730 msgid "Mods"
168731 msgstr "模块"
169732
170 #: ../../../src/GameStateConfigBase.cpp:249 ../../../src/MenuExit.cpp:72
733 #: ../../../src/MenuConfig.cpp:350
734 msgid "Paused"
735 msgstr "暂停"
736
737 #: ../../../src/MenuConfig.cpp:353
738 msgid "Time Played"
739 msgstr "已玩时间"
740
741 #: ../../../src/MenuConfig.cpp:359
742 msgid "Renderer"
743 msgstr "渲染器"
744
745 #: ../../../src/MenuConfig.cpp:360
746 msgid "Full Screen Mode"
747 msgstr "全屏模式"
748
749 #: ../../../src/MenuConfig.cpp:361
750 msgid "Hardware surfaces"
751 msgstr "硬件加速"
752
753 #: ../../../src/MenuConfig.cpp:362
754 msgid "V-Sync"
755 msgstr "垂直同步"
756
757 #: ../../../src/MenuConfig.cpp:363
758 msgid "Texture Filtering"
759 msgstr "纹理过滤"
760
761 #: ../../../src/MenuConfig.cpp:364
762 msgid "DPI scaling"
763 msgstr "DPI缩放"
764
765 #: ../../../src/MenuConfig.cpp:365
766 msgid "Parallax Layers"
767 msgstr "视差层"
768
769 #: ../../../src/MenuConfig.cpp:366
770 msgid "Allow changing gamma"
771 msgstr "允许更改伽马"
772
773 #: ../../../src/MenuConfig.cpp:367
774 msgid "Gamma"
775 msgstr "伽马"
776
777 #: ../../../src/MenuConfig.cpp:369
778 msgid "Sound Volume"
779 msgstr "游戏音乐音量"
780
781 #: ../../../src/MenuConfig.cpp:370
171782 msgid "Music Volume"
172783 msgstr "背景音乐音量"
173784
174 #: ../../../src/GameStateConfigBase.cpp:253 ../../../src/MenuExit.cpp:77
175 msgid "Sound Volume"
176 msgstr "游戏音乐音量"
177
178 #: ../../../src/GameStateConfigBase.cpp:257
785 #: ../../../src/MenuConfig.cpp:372
179786 msgid "Language"
180787 msgstr "语言"
181788
182 #: ../../../src/GameStateConfigBase.cpp:266
789 #: ../../../src/MenuConfig.cpp:373
183790 msgid "Show FPS"
184791 msgstr "显示画面每秒帧数"
185792
186 #: ../../../src/GameStateConfigBase.cpp:270
793 #: ../../../src/MenuConfig.cpp:374
794 msgid "Hardware mouse cursor"
795 msgstr "硬件光标"
796
797 #: ../../../src/MenuConfig.cpp:375
187798 msgid "Colorblind Mode"
188799 msgstr "色盲模式"
189800
190 #: ../../../src/GameStateConfigBase.cpp:274
191 msgid "Hardware mouse cursor"
192 msgstr "硬件鼠标光标"
193
194 #: ../../../src/GameStateConfigBase.cpp:278
801 #: ../../../src/MenuConfig.cpp:376
195802 msgid "Developer Mode"
196803 msgstr "开发者模式"
197804
198 #: ../../../src/GameStateConfigBase.cpp:282
805 #: ../../../src/MenuConfig.cpp:377
199806 msgid "Subtitles"
200807 msgstr "字幕"
201808
202 #: ../../../src/GameStateConfigBase.cpp:286
203 msgid "Active Mods"
204 msgstr "激活模块"
205
206 #: ../../../src/GameStateConfigBase.cpp:295
207 msgid "Available Mods"
208 msgstr "可用模块"
209
210 #: ../../../src/GameStateConfigBase.cpp:314
211 msgid "<< Disable"
212 msgstr "<< 禁用"
213
214 #: ../../../src/GameStateConfigBase.cpp:320
215 msgid "Enable >>"
216 msgstr " 启用>>"
217
218 #: ../../../src/GameStateConfigBase.cpp:873
219 msgid "Version:"
220 msgstr "版本号:"
221
222 #: ../../../src/GameStateConfigBase.cpp:878
223 msgid "Game:"
224 msgstr "游戏:"
225
226 #: ../../../src/GameStateConfigBase.cpp:883
227 msgid "Engine version:"
228 msgstr "引擎版本号:"
229
230 #: ../../../src/GameStateConfigBase.cpp:891
231 msgid "Requires mods:"
232 msgstr "需要的模组:"
233
234 #: ../../../src/GameStateConfigDesktop.cpp:83
235 #: ../../../src/GameStateConfigDesktop.cpp:751
236 msgid "Clear"
237 msgstr "清空"
238
239 #: ../../../src/GameStateConfigDesktop.cpp:83
240 #: ../../../src/GameStateConfigDesktop.cpp:749
241 msgid "Assign:"
242 msgstr "分配:"
243
244 #: ../../../src/GameStateConfigDesktop.cpp:128
245 msgid "Video"
246 msgstr "画面"
247
248 #: ../../../src/GameStateConfigDesktop.cpp:132
249 msgid "Input"
250 msgstr "输入"
251
252 #: ../../../src/GameStateConfigDesktop.cpp:133
253 msgid "Keybindings"
254 msgstr "快捷键"
255
256 #: ../../../src/GameStateConfigDesktop.cpp:188
809 #: ../../../src/MenuConfig.cpp:378
810 msgid "Loot tooltip visibility"
811 msgstr "战利品提示可见性"
812
813 #: ../../../src/MenuConfig.cpp:379
814 msgid "Mini-map mode"
815 msgstr "小地图模式"
816
817 #: ../../../src/MenuConfig.cpp:380
818 msgid "Always show stat bar labels"
819 msgstr "始终显示进度条标签"
820
821 #: ../../../src/MenuConfig.cpp:381
822 msgid "Allow stat bar auto-hiding"
823 msgstr "允许状态栏自动隐藏"
824
825 #: ../../../src/MenuConfig.cpp:382
826 msgid "Show combat text"
827 msgstr "显示战斗文字"
828
829 #: ../../../src/MenuConfig.cpp:383
830 msgid "Automatically equip items"
831 msgstr "自动装备物品"
832
833 #: ../../../src/MenuConfig.cpp:384
834 msgid "Show hidden entity markers"
835 msgstr "显示隐藏的敌人标记"
836
837 #: ../../../src/MenuConfig.cpp:385
838 msgid "Low health notification"
839 msgstr "低生命通知"
840
841 #: ../../../src/MenuConfig.cpp:386
842 msgid "Low health threshold"
843 msgstr "低生命阈值"
844
845 #: ../../../src/MenuConfig.cpp:389
846 msgid "Joystick"
847 msgstr "摇杆"
848
849 #: ../../../src/MenuConfig.cpp:390
850 msgid "Move hero using mouse"
851 msgstr "使用鼠标移动英雄"
852
853 #: ../../../src/MenuConfig.cpp:391
854 msgid "Mouse aim"
855 msgstr "使用鼠标瞄准敌人"
856
857 #: ../../../src/MenuConfig.cpp:392
858 msgid "Do not use mouse"
859 msgstr "不要使用鼠标"
860
861 #: ../../../src/MenuConfig.cpp:393
862 msgid "Swap mouse movement button"
863 msgstr "交换鼠标移动键"
864
865 #: ../../../src/MenuConfig.cpp:394
866 msgid "Attack with mouse movement"
867 msgstr "用鼠标移动键攻击"
868
869 #: ../../../src/MenuConfig.cpp:395
870 msgid "Joystick Deadzone"
871 msgstr "摇杆灵敏度"
872
873 #: ../../../src/MenuConfig.cpp:405
874 #, c-format
875 msgid "Primary binding: %s"
876 msgstr "主要键位:%s"
877
878 #: ../../../src/MenuConfig.cpp:406
879 #, c-format
880 msgid "Alternate binding: %s"
881 msgstr "备用键位:%s"
882
883 #: ../../../src/MenuConfig.cpp:407
884 #, c-format
885 msgid "Joystick binding: %s"
886 msgstr "摇杆键位:%s"
887
888 #: ../../../src/MenuConfig.cpp:508
257889 msgid ""
258890 "Will try to store surfaces in video memory versus system memory. The effect "
259891 "this has on performance depends on the renderer."
260 msgstr "将尝试在视频内存中存储表面与系统内存。 这对性能的影响取决于渲染器。"
261
262 #: ../../../src/GameStateConfigDesktop.cpp:189
892 msgstr "将尝试在视频内存中存储表面而不是系统内存。这对性能的影响取决于渲染器。"
893
894 #: ../../../src/MenuConfig.cpp:509
263895 msgid ""
264896 "Prevents screen tearing. Disable if you experience \"stuttering\" in "
265897 "windowed mode or input lag."
266 msgstr "防止画面撕裂。 如果在窗口模式或输入时卡顿则禁用。"
267
268 #: ../../../src/GameStateConfigDesktop.cpp:190
898 msgstr "防止画面撕裂。如果在窗口模式或输入时“卡顿”则禁用。"
899
900 #: ../../../src/MenuConfig.cpp:510
269901 msgid ""
270902 "When enabled, this uses the screen DPI in addition to the window dimensions "
271903 "to scale the rendering resolution. Otherwise, only the window dimensions are"
272904 " used."
273 msgstr "启用后,除了窗口尺寸外,还会使用屏幕DPI来调整渲染分辨率。 否则,只使用窗口尺寸。"
274
275 #: ../../../src/GameStateConfigDesktop.cpp:191
905 msgstr "启用后,除了窗口尺寸外,还会使用屏幕DPI来调整渲染分辨率。否则,只使用窗口尺寸。"
906
907 #: ../../../src/MenuConfig.cpp:511
276908 msgid ""
277909 "This enables parallax (non-tile) layers. Disabling this setting can improve "
278910 "performance in some cases."
279 msgstr ""
280
281 #: ../../../src/GameStateConfigDesktop.cpp:192
282 msgid "Experimental"
283 msgstr "实验功能"
284
285 #: ../../../src/GameStateConfigDesktop.cpp:193
286 msgid "For handheld devices"
287 msgstr "对于手持设备"
288
289 #: ../../../src/GameStateConfigDesktop.cpp:211
290 msgid "Renderer"
291 msgstr "渲染"
292
293 #: ../../../src/GameStateConfigDesktop.cpp:227
294 msgid "Full Screen Mode"
295 msgstr "全屏模式"
296
297 #: ../../../src/GameStateConfigDesktop.cpp:231
298 msgid "Move hero using mouse"
299 msgstr "使用鼠标移动人物"
300
301 #: ../../../src/GameStateConfigDesktop.cpp:235
302 msgid "Hardware surfaces"
303 msgstr "硬件加速"
304
305 #: ../../../src/GameStateConfigDesktop.cpp:239
306 msgid "V-Sync"
307 msgstr "垂直同步"
308
309 #: ../../../src/GameStateConfigDesktop.cpp:243
310 msgid "Texture Filtering"
311 msgstr "纹理过滤"
312
313 #: ../../../src/GameStateConfigDesktop.cpp:247
314 msgid "DPI scaling"
315 msgstr "DPI缩放"
316
317 #: ../../../src/GameStateConfigDesktop.cpp:251
318 msgid "Parallax Layers"
319 msgstr ""
320
321 #: ../../../src/GameStateConfigDesktop.cpp:255
322 msgid "Allow changing gamma"
323 msgstr "允许更改亮度"
324
325 #: ../../../src/GameStateConfigDesktop.cpp:259
326 msgid "Gamma"
327 msgstr "亮度"
328
329 #: ../../../src/GameStateConfigDesktop.cpp:263
330 msgid "Use joystick"
331 msgstr "使用摇杆"
332
333 #: ../../../src/GameStateConfigDesktop.cpp:267
334 msgid "Joystick"
335 msgstr "摇杆"
336
337 #: ../../../src/GameStateConfigDesktop.cpp:283
338 msgid "Mouse aim"
339 msgstr "使用鼠标瞄准敌人"
340
341 #: ../../../src/GameStateConfigDesktop.cpp:287
342 msgid "Do not use mouse"
343 msgstr "不要使用鼠标"
344
345 #: ../../../src/GameStateConfigDesktop.cpp:291
346 msgid "Joystick Deadzone"
347 msgstr "操纵杆灵敏度"
348
349 #: ../../../src/GameState.cpp:37 ../../../src/GameState.cpp:58
350 msgid "Loading..."
351 msgstr "载入中..."
352
353 #: ../../../src/GameStateLoad.cpp:88 ../../../src/GameStateLoad.cpp:101
354 msgid "Delete Save"
355 msgstr "删除角色"
356
357 #: ../../../src/GameStateLoad.cpp:88
358 msgid "Delete this save?"
359 msgstr "确定删除角色?"
360
361 #: ../../../src/GameStateLoad.cpp:90
362 msgid "Exit to Title"
363 msgstr "回到游戏开始"
364
365 #: ../../../src/GameStateLoad.cpp:93
366 msgid "New Game"
367 msgstr "新游戏"
368
369 #: ../../../src/GameStateLoad.cpp:97 ../../../src/GameStateLoad.cpp:600
370 msgid "Choose a Slot"
371 msgstr "选择一个人物"
372
373 #: ../../../src/GameStateLoad.cpp:573 ../../../src/GameStateLoad.cpp:594
374 msgid "Enable a story mod to continue"
375 msgstr "使用故事模式继续"
376
377 #: ../../../src/GameStateLoad.cpp:589
378 msgid "Load Game"
379 msgstr "载入游戏"
380
381 #: ../../../src/GameStateLoad.cpp:695
382 msgid "Entering game world..."
383 msgstr "进入游戏..."
384
385 #: ../../../src/GameStateLoad.cpp:698
386 msgid "Loading saved game..."
387 msgstr "载入游戏..."
388
389 #: ../../../src/GameStateLoad.cpp:731
390 msgid "Invalid save"
391 msgstr "保存无效"
392
393 #: ../../../src/GameStateLoad.cpp:755 ../../../src/ItemManager.cpp:747
394 #: ../../../src/MenuPowers.cpp:778 ../../../src/MenuPowers.cpp:1144
395 #: ../../../src/MenuPowers.cpp:1542
396 #, c-format
397 msgid "Level %d"
398 msgstr "级别 %d"
399
400 #: ../../../src/GameStateNew.cpp:68
401 msgid "Create"
402 msgstr "创建"
403
404 #: ../../../src/GameStateNew.cpp:76
405 msgid "Randomize"
406 msgstr "随机化"
407
408 #: ../../../src/GameStateNew.cpp:92
409 msgid "Choose a Portrait"
410 msgstr "选择头像"
411
412 #: ../../../src/GameStateNew.cpp:96
413 msgid "Choose a Name"
414 msgstr "输入名字"
415
416 #: ../../../src/GameStateNew.cpp:100
417 msgid "Permadeath?"
418 msgstr "死亡后不可复活?"
419
420 #: ../../../src/GameStateNew.cpp:104
421 msgid "Choose a Class"
422 msgstr "选择职业"
423
424 #: ../../../src/GameStateTitle.cpp:108
425 msgid "Play Game"
426 msgstr "开始游戏"
427
428 #: ../../../src/GameStateTitle.cpp:111
429 msgid "Enable a core mod to continue"
430 msgstr "使用 core mod 继续"
431
432 #: ../../../src/GameStateTitle.cpp:115
433 msgid "Configuration"
434 msgstr "配置"
435
436 #: ../../../src/GameStateTitle.cpp:118
437 msgid "Credits"
438 msgstr "参与人员"
439
440 #: ../../../src/GameStateTitle.cpp:121
441 msgid "Exit Game"
442 msgstr "退出游戏"
443
444 #: ../../../src/InputState.cpp:402
445 msgid "Accept"
446 msgstr "确定"
447
448 #: ../../../src/InputState.cpp:403 ../../../src/SDLInputState.cpp:607
449 msgid "Up"
450 msgstr "上"
451
452 #: ../../../src/InputState.cpp:404 ../../../src/SDLInputState.cpp:585
453 msgid "Down"
454 msgstr "下"
455
456 #: ../../../src/InputState.cpp:405 ../../../src/SDLInputState.cpp:592
457 msgid "Left"
458 msgstr "左"
459
460 #: ../../../src/InputState.cpp:406 ../../../src/SDLInputState.cpp:602
461 msgid "Right"
462 msgstr "右"
463
464 #: ../../../src/InputState.cpp:407
465 msgid "Bar1"
466 msgstr "槽1"
467
468 #: ../../../src/InputState.cpp:408
469 msgid "Bar2"
470 msgstr "槽2"
471
472 #: ../../../src/InputState.cpp:409
473 msgid "Bar3"
474 msgstr "槽3"
475
476 #: ../../../src/InputState.cpp:410
477 msgid "Bar4"
478 msgstr "槽4"
479
480 #: ../../../src/InputState.cpp:411
481 msgid "Bar5"
482 msgstr "槽5"
483
484 #: ../../../src/InputState.cpp:412
485 msgid "Bar6"
486 msgstr "槽6"
487
488 #: ../../../src/InputState.cpp:413
489 msgid "Bar7"
490 msgstr "槽7"
491
492 #: ../../../src/InputState.cpp:414
493 msgid "Bar8"
494 msgstr "槽8"
495
496 #: ../../../src/InputState.cpp:415
497 msgid "Bar9"
498 msgstr "槽9"
499
500 #: ../../../src/InputState.cpp:416
501 msgid "Bar0"
502 msgstr "槽0"
503
504 #: ../../../src/InputState.cpp:417 ../../../src/MenuActionBar.cpp:83
505 #: ../../../src/MenuCharacter.cpp:54
506 msgid "Character"
507 msgstr "角色"
508
509 #: ../../../src/InputState.cpp:418 ../../../src/MenuActionBar.cpp:84
510 #: ../../../src/MenuInventory.cpp:137 ../../../src/MenuVendor.cpp:57
511 msgid "Inventory"
512 msgstr "物品"
513
514 #: ../../../src/InputState.cpp:419 ../../../src/MenuActionBar.cpp:85
515 #: ../../../src/MenuPowers.cpp:168
516 msgid "Powers"
517 msgstr "技能"
518
519 #: ../../../src/InputState.cpp:420 ../../../src/MenuActionBar.cpp:86
520 #: ../../../src/MenuLog.cpp:72
521 msgid "Log"
522 msgstr "说明"
523
524 #: ../../../src/InputState.cpp:421
525 msgid "Main1"
526 msgstr "主槽1"
527
528 #: ../../../src/InputState.cpp:422
529 msgid "Main2"
530 msgstr "主槽2"
531
532 #: ../../../src/InputState.cpp:423
533 msgid "Ctrl"
534 msgstr "Ctrl"
535
536 #: ../../../src/InputState.cpp:424
537 msgid "Shift"
538 msgstr "Shift"
539
540 #: ../../../src/InputState.cpp:425
541 msgid "Alt"
542 msgstr "其他"
543
544 #: ../../../src/InputState.cpp:426 ../../../src/SDLInputState.cpp:584
545 msgid "Delete"
546 msgstr "删除"
547
548 #: ../../../src/InputState.cpp:427
549 msgid "ActionBar Accept"
550 msgstr "操作栏 接受"
551
552 #: ../../../src/InputState.cpp:428
553 msgid "ActionBar Left"
554 msgstr "操作栏 左"
555
556 #: ../../../src/InputState.cpp:429
557 msgid "ActionBar Right"
558 msgstr ""
559
560 #: ../../../src/InputState.cpp:430
561 msgid "ActionBar Use"
562 msgstr ""
563
564 #: ../../../src/InputState.cpp:431
565 msgid "Developer Menu"
566 msgstr ""
567
568 #: ../../../src/InputState.cpp:433
569 msgid "Left Mouse"
570 msgstr ""
571
572 #: ../../../src/InputState.cpp:434
573 msgid "Middle Mouse"
574 msgstr ""
575
576 #: ../../../src/InputState.cpp:435
577 msgid "Right Mouse"
578 msgstr ""
579
580 #: ../../../src/InputState.cpp:436
581 msgid "Wheel Up"
582 msgstr ""
583
584 #: ../../../src/InputState.cpp:437
585 msgid "Wheel Down"
586 msgstr ""
587
588 #: ../../../src/InputState.cpp:438
589 msgid "Mouse X1"
590 msgstr ""
591
592 #: ../../../src/InputState.cpp:439
593 msgid "Mouse X2"
594 msgstr ""
595
596 #: ../../../src/ItemManager.cpp:450 ../../../src/ItemManager.cpp:453
597 msgid "Unknown Item"
598 msgstr ""
599
600 #: ../../../src/ItemManager.cpp:648 ../../../src/MenuPowers.cpp:887
601 #, c-format
602 msgid "%d%% Speed"
603 msgstr ""
604
605 #: ../../../src/ItemManager.cpp:652 ../../../src/MenuPowers.cpp:890
606 #, c-format
607 msgid "%d%% Attack Speed"
608 msgstr ""
609
610 #: ../../../src/ItemManager.cpp:674 ../../../src/MenuCharacter.cpp:354
611 #: ../../../src/MenuPowers.cpp:833
612 #, c-format
613 msgid "Resistance (%s)"
614 msgstr ""
615
616 #: ../../../src/ItemManager.cpp:684
617 #, c-format
618 msgid "Requires %s"
619 msgstr ""
620
621 #: ../../../src/ItemManager.cpp:733
622 msgid "Quest Item"
623 msgstr ""
624
625 #: ../../../src/ItemManager.cpp:760
626 #, c-format
627 msgid "Quality: %s"
628 msgstr ""
629
630 #: ../../../src/ItemManager.cpp:785
631 #, c-format
632 msgid "Absorb: %d-%d"
633 msgstr "抵消攻击: %d-%d"
634
635 #: ../../../src/ItemManager.cpp:787
636 #, c-format
637 msgid "Absorb: %d"
638 msgstr "抵消攻击: %d"
639
640 #: ../../../src/ItemManager.cpp:827 ../../../src/MenuPowers.cpp:1131
641 #: ../../../src/MenuPowers.cpp:1134
642 #, c-format
643 msgid "Requires Level %d"
644 msgstr "需要级别 %d"
645
646 #: ../../../src/ItemManager.cpp:838 ../../../src/MenuPowers.cpp:1123
647 #: ../../../src/MenuPowers.cpp:1125
648 #, c-format
649 msgid "Requires %s %d"
650 msgstr ""
651
652 #: ../../../src/ItemManager.cpp:849
653 #, c-format
654 msgid "Requires Class: %s"
655 msgstr ""
656
657 #: ../../../src/ItemManager.cpp:864 ../../../src/ItemManager.cpp:876
658 #, c-format
659 msgid "Buy Price: %d %s"
660 msgstr "购买价格: %d %s"
661
662 #: ../../../src/ItemManager.cpp:866 ../../../src/ItemManager.cpp:878
663 #, c-format
664 msgid "Buy Price: %d %s each"
665 msgstr "购买单价: %d %s "
666
667 #: ../../../src/ItemManager.cpp:886
668 #, c-format
669 msgid "Sell Price: %d %s"
670 msgstr "出售价格: %d %s"
671
672 #: ../../../src/ItemManager.cpp:888
673 #, c-format
674 msgid "Sell Price: %d %s each"
675 msgstr "出售单价: %d %s "
676
677 #: ../../../src/ItemManager.cpp:897
678 msgid "Set:"
679 msgstr ""
680
681 #: ../../../src/ItemManager.cpp:904
682 #, c-format
683 msgid "%d items:"
684 msgstr ""
685
686 #: ../../../src/ItemManager.cpp:917
687 #, c-format
688 msgid "Press [%s] to use"
689 msgstr ""
690
691 #: ../../../src/ItemManager.cpp:920
692 #, c-format
693 msgid "Press [%s] to read"
694 msgstr ""
695
696 #: ../../../src/MenuActionBar.cpp:87
697 msgid "Loot tooltip visibility"
698 msgstr ""
699
700 #: ../../../src/MenuActionBar.cpp:88
701 msgid "Mini-map mode"
702 msgstr ""
703
704 #: ../../../src/MenuActionBar.cpp:89
705 msgid "Always show stat bar labels"
706 msgstr "始终显示进度条标签"
707
708 #: ../../../src/MenuActionBar.cpp:90
709 msgid "Show combat text"
710 msgstr "显示战斗文字"
711
712 #: ../../../src/MenuActionBar.cpp:254 ../../../src/MenuActionBar.cpp:261
713 #: ../../../src/MenuActionBar.cpp:264 ../../../src/MenuActionBar.cpp:271
714 #, c-format
715 msgid "Hotkey: %s"
716 msgstr ""
717
718 #: ../../../src/MenuActionBar.cpp:474
719 #, c-format
720 msgid "Default. Temporarily show all loot tooltips with '%s'."
721 msgstr ""
722
723 #: ../../../src/MenuActionBar.cpp:476
724 #, c-format
725 msgid "Show All. Temporarily hide all loot tooltips with '%s'."
726 msgstr ""
727
728 #: ../../../src/MenuActionBar.cpp:478
729 #, c-format
730 msgid "Hide All. Temporarily show all loot tooltips with '%s'."
731 msgstr ""
732
733 #: ../../../src/MenuActionBar.cpp:482
734 msgid "Visible"
735 msgstr ""
736
737 #: ../../../src/MenuActionBar.cpp:484
738 msgid "Visible (2x zoom)"
739 msgstr ""
740
741 #: ../../../src/MenuActionBar.cpp:486
742 msgid "Hidden"
743 msgstr ""
744
745 #: ../../../src/MenuActionBar.cpp:490 ../../../src/MenuActionBar.cpp:496
746 msgid "Enabled"
747 msgstr ""
748
749 #: ../../../src/MenuActionBar.cpp:492 ../../../src/MenuActionBar.cpp:498
750 msgid "Disabled"
751 msgstr ""
752
753 #: ../../../src/MenuActionBar.cpp:657
754 msgid "Not enough MP."
755 msgstr ""
756
757 #: ../../../src/MenuActiveEffects.cpp:124
758 #, c-format
759 msgid "x%d"
760 msgstr ""
761
762 #: ../../../src/MenuActiveEffects.cpp:219
763 msgid "Remaining:"
764 msgstr ""
765
766 #: ../../../src/MenuActiveEffects.cpp:225
767 #, c-format
768 msgid "x%d stacks"
769 msgstr ""
770
771 #: ../../../src/MenuCharacter.cpp:73 ../../../src/MenuCharacter.cpp:78
772 msgid "Name"
773 msgstr "名字"
774
775 #: ../../../src/MenuCharacter.cpp:74 ../../../src/MenuCharacter.cpp:79
776 msgid "Level"
777 msgstr "级别"
778
779 #: ../../../src/MenuCharacter.cpp:310
780 #, c-format
781 msgid "%d unspent stat point"
782 msgstr ""
783
784 #: ../../../src/MenuCharacter.cpp:313
785 #, c-format
786 msgid "%d unspent stat points"
787 msgstr ""
788
789 #: ../../../src/MenuCharacter.cpp:355
790 #, c-format
791 msgid "Reduces the damage taken from \"%s\" elemental attacks."
792 msgstr ""
793
794 #: ../../../src/MenuCharacter.cpp:365 ../../../src/MenuManager.cpp:283
795 #, c-format
796 msgid "XP: %d"
797 msgstr "经验值: %d"
798
799 #: ../../../src/MenuCharacter.cpp:367
800 #, c-format
801 msgid "Next: %d"
802 msgstr "Next: %d"
803
804 #: ../../../src/MenuCharacter.cpp:373
805 #, c-format
806 msgid "base (%d), bonus (%d)"
807 msgstr "base (%d), bonus (%d)"
808
809 #: ../../../src/MenuCharacter.cpp:381 ../../../src/MenuCharacter.cpp:395
810 msgid "Related stats:"
811 msgstr ""
812
813 #: ../../../src/MenuCharacter.cpp:421 ../../../src/MenuCharacter.cpp:445
814 #, c-format
815 msgid "Each level grants %d."
816 msgstr ""
817
818 #: ../../../src/MenuCharacter.cpp:425 ../../../src/MenuCharacter.cpp:449
819 #, c-format
820 msgid "Each point of %s grants %d."
821 msgstr ""
911 msgstr "启用视差(非瓦片)层。 禁用此设置在一些情况下能提升性能。"
912
913 #: ../../../src/MenuConfig.cpp:512
914 msgid ""
915 "Enables the below setting that controls the screen gamma level. The behavior"
916 " of the gamma setting can vary between platforms."
917 msgstr "启用以下设置来控制屏幕伽马级别。这个伽马设置的行为依平台而异。"
918
919 #: ../../../src/MenuConfig.cpp:513
920 msgid ""
921 "Provides additional text for information that is primarily conveyed through "
922 "color."
923 msgstr "提供从颜色传递的额外的文字信息。"
924
925 #: ../../../src/MenuConfig.cpp:514
926 msgid ""
927 "Some mods will automatically hide the stat bars when they are inactive. "
928 "Disabling this option will keep them displayed at all times."
929 msgstr "当状态栏闲置时,一些组件会自动隐藏它。禁用它以让状态栏持续显示。"
930
931 #: ../../../src/MenuConfig.cpp:515
932 msgid ""
933 "When enabled, empty equipment slots will be filled with applicable items "
934 "when they are obtained."
935 msgstr "当开启时,获取适当的物品的时候空的装备栏将被填充。"
936
937 #: ../../../src/MenuConfig.cpp:516
938 msgid ""
939 "Shows a marker above enemies, allies, and the player when they are obscured "
940 "by tall objects."
941 msgstr "敌人、友军和玩家被高的物体遮蔽时在上面显示标记。"
942
943 #: ../../../src/MenuConfig.cpp:517
944 msgid ""
945 "This allows the game to be controlled entirely with the keyboard (or "
946 "joystick)."
947 msgstr "允许游戏完全被键盘(或摇杆)控制。"
948
949 #: ../../../src/MenuConfig.cpp:518
950 msgid ""
951 "When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or"
952 " 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero "
953 "instead of 'Main1'."
954 msgstr "当开启‘使用鼠标移动英雄’时,这设置使用‘主按键1’还是‘主按键2’来移动英雄。开启时,使用‘主按键2’来移动英雄而不是‘主按键1’。"
955
956 #: ../../../src/MenuConfig.cpp:519
957 msgid ""
958 "When 'Move hero using mouse' is enabled, this setting controls if the Power "
959 "assigned to the movement button can be used by targeting an enemy. If this "
960 "setting is disabled, it is required to use 'Shift' to access the Power "
961 "assigned to the movement button."
962 msgstr "当开启‘使用鼠标移动英雄’时,这设置分配到移动键的技能是否能向敌人使用。如果这个设置被禁用,需要使用‘Shift’访问分配到移动键的技能。"
963
964 #: ../../../src/MenuConfig.cpp:520
965 msgid ""
966 "The player's attacks will be aimed in the direction of the mouse cursor when"
967 " this is enabled."
968 msgstr "开启后玩家的攻击将指向光标。"
969
970 #: ../../../src/MenuConfig.cpp:571
971 msgid "Active Mods"
972 msgstr "激活模块"
973
974 #: ../../../src/MenuConfig.cpp:580
975 msgid "Available Mods"
976 msgstr "可用模块"
977
978 #: ../../../src/MenuConfig.cpp:599
979 msgid "<< Disable"
980 msgstr "<< 禁用"
981
982 #: ../../../src/MenuConfig.cpp:605
983 msgid "Enable >>"
984 msgstr "启用 >>"
985
986 #: ../../../src/MenuConfig.cpp:1436
987 msgid "Version:"
988 msgstr "版本号:"
989
990 #: ../../../src/MenuConfig.cpp:1441
991 msgid "Game:"
992 msgstr "游戏:"
993
994 #: ../../../src/MenuConfig.cpp:1446
995 msgid "Engine version:"
996 msgstr "引擎版本号:"
997
998 #: ../../../src/MenuConfig.cpp:1454
999 msgid "Requires mods:"
1000 msgstr "需要的模块:"
1001
1002 #: ../../../src/MenuConfig.cpp:1562 ../../../src/SDLInputState.cpp:748
1003 msgid "(none)"
1004 msgstr "(无)"
1005
1006 #: ../../../src/MenuConfig.cpp:1579
1007 msgid "Save & Exit"
1008 msgstr "保存并退出"
8221009
8231010 #: ../../../src/MenuDevConsole.cpp:63
8241011 msgid "Execute"
825 msgstr ""
1012 msgstr "执行"
8261013
8271014 #: ../../../src/MenuDevConsole.cpp:101 ../../../src/MenuDevConsole.cpp:151
8281015 msgid "Developer Console"
829 msgstr ""
1016 msgstr "开发者控制台"
8301017
8311018 #: ../../../src/MenuDevConsole.cpp:141
8321019 #, c-format
8331020 msgid "Use '%s' to inspect with the cursor."
834 msgstr ""
1021 msgstr "使用‘%s’使用光标检视"
8351022
8361023 #: ../../../src/MenuDevConsole.cpp:146
8371024 msgid "Arguments with spaces should be enclosed with double quotes. Example:"
838 msgstr ""
1025 msgstr "参数中的空格需要以双引号包围。比如:"
8391026
8401027 #: ../../../src/MenuDevConsole.cpp:147
8411028 msgid "Type 'help' to get a list of commands."
842 msgstr ""
1029 msgstr "输入‘help’获取命令列表。"
8431030
8441031 #: ../../../src/MenuDevConsole.cpp:209 ../../../src/MenuDevConsole.cpp:213
8451032 msgid "px"
846 msgstr ""
1033 msgstr "像素"
8471034
8481035 #: ../../../src/MenuDevConsole.cpp:224
8491036 msgid "Distance"
850 msgstr ""
1037 msgstr "距离"
8511038
8521039 #: ../../../src/MenuDevConsole.cpp:239 ../../../src/MenuDevConsole.cpp:286
8531040 msgid "Entity"
854 msgstr ""
1041 msgstr "实体"
8551042
8561043 #: ../../../src/MenuDevConsole.cpp:261 ../../../src/MenuDevConsole.cpp:268
8571044 msgid "none"
858 msgstr ""
1045 msgstr "无"
8591046
8601047 #: ../../../src/MenuDevConsole.cpp:262 ../../../src/MenuDevConsole.cpp:264
8611048 msgid "wall"
862 msgstr ""
1049 msgstr "墙"
8631050
8641051 #: ../../../src/MenuDevConsole.cpp:263 ../../../src/MenuDevConsole.cpp:265
8651052 msgid "short wall / pit"
866 msgstr ""
1053 msgstr "矮墙/坑洞"
8671054
8681055 #: ../../../src/MenuDevConsole.cpp:266
8691056 msgid "entity"
870 msgstr ""
1057 msgstr "敌人"
8711058
8721059 #: ../../../src/MenuDevConsole.cpp:267
8731060 msgid "entity, ally"
874 msgstr ""
1061 msgstr "敌人,友军"
8751062
8761063 #: ../../../src/MenuDevConsole.cpp:274
8771064 msgid "Tile"
878 msgstr ""
1065 msgstr "瓦片"
8791066
8801067 #: ../../../src/MenuDevConsole.cpp:360
8811068 msgid "adds a power to the action bar"
882 msgstr ""
1069 msgstr "向动作槽添加一个技能"
8831070
8841071 #: ../../../src/MenuDevConsole.cpp:361
8851072 msgid "turns on/off the display of the FPS counter"
886 msgstr ""
1073 msgstr "打开/关闭FPS计数器的显示"
8871074
8881075 #: ../../../src/MenuDevConsole.cpp:362
8891076 msgid "turns on/off all of the HUD elements"
890 msgstr ""
1077 msgstr "打开/关闭全部HUD元素"
8911078
8921079 #: ../../../src/MenuDevConsole.cpp:363
8931080 msgid "turns on/off the developer hud"
894 msgstr ""
1081 msgstr "打开/关闭开发者HUD"
8951082
8961083 #: ../../../src/MenuDevConsole.cpp:364
8971084 msgid ""
8981085 "Prints a list of powers that match a search term. No search term will list "
8991086 "all items"
900 msgstr ""
1087 msgstr "输出匹配搜索词的技能列表。没有搜索词将会列出所有对象"
9011088
9021089 #: ../../../src/MenuDevConsole.cpp:365
9031090 msgid "Prints out all the map filenames located in the \"maps/\" directory."
904 msgstr ""
1091 msgstr "输出“maps/”文件夹里所有地图的文件名。"
9051092
9061093 #: ../../../src/MenuDevConsole.cpp:366
9071094 msgid ""
9081095 "Prints out the active campaign statuses that match a search term. No search "
9091096 "term will list all active statuses"
910 msgstr ""
1097 msgstr "输出匹配搜索词的活动战役状态。没有搜索词将会列出所有活动状态"
9111098
9121099 #: ../../../src/MenuDevConsole.cpp:367
9131100 msgid ""
9141101 "Prints a list of items that match a search term. No search term will list "
9151102 "all items"
916 msgstr ""
1103 msgstr "输出匹配搜索词的物品。没有搜索词将会列出所有物品"
9171104
9181105 #: ../../../src/MenuDevConsole.cpp:368
9191106 msgid ""
9201107 "parses a series of event components and executes them as a single event"
921 msgstr ""
1108 msgstr "解析一串事件元素并且像一个事件一样执行它们"
9221109
9231110 #: ../../../src/MenuDevConsole.cpp:369
9241111 msgid "clears the command history"
925 msgstr ""
1112 msgstr "清除命令历史"
9261113
9271114 #: ../../../src/MenuDevConsole.cpp:370
9281115 msgid "displays this text"
929 msgstr ""
1116 msgstr "显示这个文字"
9301117
9311118 #: ../../../src/MenuDevConsole.cpp:377
9321119 msgid "Toggled the developer hud"
933 msgstr ""
1120 msgstr "切换开发者HUD"
9341121
9351122 #: ../../../src/MenuDevConsole.cpp:381
9361123 msgid "Toggled the hud"
937 msgstr ""
1124 msgstr "切换HUD"
9381125
9391126 #: ../../../src/MenuDevConsole.cpp:385
9401127 msgid "Toggled the FPS counter"
941 msgstr ""
1128 msgstr "切换FPS计数器"
9421129
9431130 #: ../../../src/MenuDevConsole.cpp:534
9441131 msgid "ERROR: Incorrect number of arguments"
945 msgstr ""
1132 msgstr "错误:参数个数错误"
9461133
9471134 #: ../../../src/MenuDevConsole.cpp:536 ../../../src/MenuDevConsole.cpp:564
9481135 msgid "HINT:"
949 msgstr ""
1136 msgstr "提示:"
9501137
9511138 #: ../../../src/MenuDevConsole.cpp:536
9521139 msgid "<id>"
953 msgstr ""
1140 msgstr "<id>"
9541141
9551142 #: ../../../src/MenuDevConsole.cpp:552
9561143 #, c-format
9571144 msgid "ERROR: '%s' is not a valid event key"
958 msgstr ""
1145 msgstr "错误:'%s'是非法事件代码"
9591146
9601147 #: ../../../src/MenuDevConsole.cpp:562
9611148 msgid "ERROR: Too few arguments"
962 msgstr ""
1149 msgstr "错误:参数太少"
9631150
9641151 #: ../../../src/MenuDevConsole.cpp:564
9651152 msgid "<key>=<val> <key>=<val> ..."
966 msgstr ""
1153 msgstr "<key>=<val> <key>=<val> ..."
9671154
9681155 #: ../../../src/MenuDevConsole.cpp:569
9691156 msgid "ERROR: Unknown command"
970 msgstr ""
1157 msgstr "错误:未知命令"
9711158
9721159 #: ../../../src/MenuDevConsole.cpp:571
9731160 msgid "HINT: Type help"
974 msgstr ""
975
976 #: ../../../src/MenuEnemy.cpp:138
1161 msgstr "提示:类型帮助"
1162
1163 #: ../../../src/MenuEnemy.cpp:162
9771164 #, c-format
9781165 msgid "%s level %d"
979 msgstr "%s 级别 %d"
980
981 #: ../../../src/MenuEnemy.cpp:162
1166 msgstr "%s 等级%d"
1167
1168 #: ../../../src/MenuEnemy.cpp:186
9821169 msgid "Dead"
9831170 msgstr "死亡"
9841171
985 #: ../../../src/MenuEnemy.cpp:164
1172 #: ../../../src/MenuEnemy.cpp:188
9861173 msgid "Destroyed"
987 msgstr ""
988
989 #: ../../../src/MenuExit.cpp:85 ../../../src/MenuExit.cpp:139
990 msgid "Paused"
991 msgstr ""
992
993 #: ../../../src/MenuExit.cpp:91
994 msgid "Save & Exit"
995 msgstr ""
996
997 #: ../../../src/MenuExit.cpp:92
998 msgid "Exit"
999 msgstr "退出"
1000
1001 #: ../../../src/MenuExit.cpp:96
1002 msgid "Continue"
1003 msgstr ""
1004
1005 #: ../../../src/MenuInventory.cpp:73
1006 msgid "Automatically equip items"
1007 msgstr "自动装备物品"
1008
1009 #: ../../../src/MenuInventory.cpp:188
1174 msgstr "摧毁"
1175
1176 #: ../../../src/MenuInventory.cpp:177
10101177 #, c-format
10111178 msgid "Lost %d%% of %s."
1012 msgstr ""
1013
1014 #: ../../../src/MenuInventory.cpp:195
1179 msgstr "失去%d%%的%s。"
1180
1181 #: ../../../src/MenuInventory.cpp:184
10151182 #, c-format
10161183 msgid "Lost %d%% of total XP."
1017 msgstr ""
1018
1019 #: ../../../src/MenuInventory.cpp:200
1184 msgstr "失去%d%%总XP。"
1185
1186 #: ../../../src/MenuInventory.cpp:189
10201187 #, c-format
10211188 msgid "Lost %d%% of current level XP."
1022 msgstr ""
1023
1024 #: ../../../src/MenuInventory.cpp:226
1189 msgstr "失去%d%%当前等级的XP。"
1190
1191 #: ../../../src/MenuInventory.cpp:215
10251192 #, c-format
10261193 msgid "Lost %s."
1027 msgstr ""
1028
1029 #: ../../../src/MenuInventory.cpp:274 ../../../src/MenuStash.cpp:146
1194 msgstr "失去%s。"
1195
1196 #: ../../../src/MenuInventory.cpp:257 ../../../src/MenuStash.cpp:194
10301197 #, c-format
10311198 msgid "%d %s"
1032 msgstr "%d %s"
1033
1034 #: ../../../src/MenuInventory.cpp:317
1199 msgstr "%d个%s"
1200
1201 #: ../../../src/MenuInventory.cpp:300
10351202 msgid "Pick up item(s):"
1036 msgstr ""
1037
1038 #: ../../../src/MenuInventory.cpp:318
1203 msgstr "捡起物品:"
1204
1205 #: ../../../src/MenuInventory.cpp:301
10391206 msgid "Use or equip item:"
1040 msgstr ""
1041
1042 #: ../../../src/MenuInventory.cpp:319
1207 msgstr "使用或装备物品:"
1208
1209 #: ../../../src/MenuInventory.cpp:302
10431210 #, c-format
10441211 msgid "%s modifiers"
1045 msgstr ""
1046
1047 #: ../../../src/MenuInventory.cpp:320
1212 msgstr "来调整"
1213
1214 #: ../../../src/MenuInventory.cpp:303
10481215 msgid "Select a quantity of item:"
1049 msgstr ""
1050
1051 #: ../../../src/MenuInventory.cpp:323
1216 msgstr "选择物品的数量:"
1217
1218 #: ../../../src/MenuInventory.cpp:306
10521219 msgid "Stash item stack:"
1053 msgstr ""
1054
1055 #: ../../../src/MenuInventory.cpp:325
1220 msgstr "储物物品的栈:"
1221
1222 #: ../../../src/MenuInventory.cpp:308
10561223 msgid "Sell item stack:"
1057 msgstr ""
1058
1059 #: ../../../src/MenuInventory.cpp:592
1224 msgstr "卖出物品的栈:"
1225
1226 #: ../../../src/MenuInventory.cpp:574
10601227 msgid "You don't have enough of the required item."
1061 msgstr ""
1062
1063 #: ../../../src/MenuInventory.cpp:599
1228 msgstr "你没有足够的需要的物品。"
1229
1230 #: ../../../src/MenuInventory.cpp:586
10641231 msgid "You can't use this item right now."
1065 msgstr ""
1066
1067 #: ../../../src/MenuInventory.cpp:611
1232 msgstr "你无法立刻使用这个物品。"
1233
1234 #: ../../../src/MenuInventory.cpp:598
10681235 msgid "This item can only be used from the action bar."
1069 msgstr "此物品只能从动作槽使用"
1070
1071 #: ../../../src/MenuInventory.cpp:729
1236 msgstr "此物品只能从动作槽使用。"
1237
1238 #: ../../../src/MenuInventory.cpp:716
10721239 msgid "Inventory is full."
1073 msgstr "背包已满"
1074
1075 #: ../../../src/MenuInventory.cpp:849
1240 msgstr "背包已满。"
1241
1242 #: ../../../src/MenuInventory.cpp:841
10761243 #, c-format
10771244 msgid "Not enough %s."
1078 msgstr ""
1079
1080 #: ../../../src/MenuInventory.cpp:869 ../../../src/MenuInventory.cpp:876
1245 msgstr "%s不足。"
1246
1247 #: ../../../src/MenuInventory.cpp:861 ../../../src/MenuInventory.cpp:868
10811248 msgid "This item can not be sold."
1082 msgstr ""
1249 msgstr "这个物品无法卖出。"
10831250
10841251 #: ../../../src/MenuLog.cpp:91
10851252 msgid "Notes"
10891256 msgid "Quests"
10901257 msgstr "任务"
10911258
1092 #: ../../../src/MenuManager.cpp:286
1259 #: ../../../src/MenuManager.cpp:296
10931260 #, c-format
10941261 msgid "XP: %d/%d"
1095 msgstr "经验值: %d/%d"
1096
1097 #: ../../../src/MenuManager.cpp:827
1262 msgstr "经验值:%d/%d"
1263
1264 #: ../../../src/MenuManager.cpp:854
10981265 msgid "This item can not be dropped."
1099 msgstr ""
1266 msgstr "这个物品无法丢弃。"
11001267
11011268 #: ../../../src/MenuNumPicker.cpp:59
11021269 msgid "Enter amount:"
1103 msgstr ""
1104
1105 #: ../../../src/MenuPowers.cpp:787
1270 msgstr "输入数目:"
1271
1272 #: ../../../src/MenuPowers.cpp:786
11061273 msgid "Passive"
1107 msgstr ""
1108
1109 #: ../../../src/MenuPowers.cpp:792
1274 msgstr "被动"
1275
1276 #: ../../../src/MenuPowers.cpp:791
11101277 #, c-format
11111278 msgid "Costs %d MP"
1112 msgstr "消耗 %d MP"
1113
1114 #: ../../../src/MenuPowers.cpp:796
1279 msgstr "消耗%dMP"
1280
1281 #: ../../../src/MenuPowers.cpp:795
11151282 #, c-format
11161283 msgid "Costs %d HP"
1117 msgstr "消耗 %d HP"
1118
1119 #: ../../../src/MenuPowers.cpp:801
1284 msgstr "消耗%dHP"
1285
1286 #: ../../../src/MenuPowers.cpp:800
11201287 msgid "Cooldown:"
1121 msgstr ""
1122
1123 #: ../../../src/MenuPowers.cpp:866 ../../../src/MenuPowers.cpp:869
1288 msgstr "冷却:"
1289
1290 #: ../../../src/MenuPowers.cpp:865 ../../../src/MenuPowers.cpp:868
11241291 msgid "Damage per second"
1125 msgstr ""
1126
1127 #: ../../../src/MenuPowers.cpp:872 ../../../src/MenuPowers.cpp:875
1292 msgstr "每秒伤害:"
1293
1294 #: ../../../src/MenuPowers.cpp:871 ../../../src/MenuPowers.cpp:874
11281295 msgid "HP per second"
1129 msgstr ""
1130
1131 #: ../../../src/MenuPowers.cpp:878 ../../../src/MenuPowers.cpp:881
1296 msgstr "每秒HP"
1297
1298 #: ../../../src/MenuPowers.cpp:877 ../../../src/MenuPowers.cpp:880
11321299 msgid "MP per second"
1133 msgstr ""
1134
1135 #: ../../../src/MenuPowers.cpp:885
1300 msgstr "每秒MP"
1301
1302 #: ../../../src/MenuPowers.cpp:884
11361303 msgid "Immobilize"
1137 msgstr ""
1138
1139 #: ../../../src/MenuPowers.cpp:893
1304 msgstr "固定"
1305
1306 #: ../../../src/MenuPowers.cpp:892
11401307 msgid "Immunity"
1141 msgstr ""
1142
1143 #: ../../../src/MenuPowers.cpp:896
1308 msgstr "豁免"
1309
1310 #: ../../../src/MenuPowers.cpp:895
11441311 msgid "Immunity to damage over time"
1145 msgstr ""
1146
1147 #: ../../../src/MenuPowers.cpp:899
1312 msgstr "慢性伤害豁免"
1313
1314 #: ../../../src/MenuPowers.cpp:898
11481315 msgid "Immunity to slow"
1149 msgstr ""
1150
1151 #: ../../../src/MenuPowers.cpp:902
1316 msgstr "减速豁免"
1317
1318 #: ../../../src/MenuPowers.cpp:901
11521319 msgid "Immunity to stun"
1153 msgstr ""
1154
1155 #: ../../../src/MenuPowers.cpp:905
1320 msgstr "击晕豁免"
1321
1322 #: ../../../src/MenuPowers.cpp:904
11561323 msgid "Immunity to HP steal"
1157 msgstr ""
1158
1159 #: ../../../src/MenuPowers.cpp:908
1324 msgstr "HP偷取豁免"
1325
1326 #: ../../../src/MenuPowers.cpp:907
11601327 msgid "Immunity to MP steal"
1161 msgstr ""
1162
1163 #: ../../../src/MenuPowers.cpp:911
1328 msgstr "MP偷取豁免"
1329
1330 #: ../../../src/MenuPowers.cpp:910
11641331 msgid "Immunity to knockback"
1165 msgstr ""
1166
1167 #: ../../../src/MenuPowers.cpp:914
1332 msgstr "击退豁免"
1333
1334 #: ../../../src/MenuPowers.cpp:913
11681335 msgid "Immunity to damage reflection"
1169 msgstr ""
1170
1171 #: ../../../src/MenuPowers.cpp:917
1336 msgstr "伤害反射豁免"
1337
1338 #: ../../../src/MenuPowers.cpp:916
11721339 msgid "Stun"
1173 msgstr ""
1174
1175 #: ../../../src/MenuPowers.cpp:920
1340 msgstr "击晕"
1341
1342 #: ../../../src/MenuPowers.cpp:919
11761343 msgid "Automatic revive on death"
1177 msgstr ""
1178
1179 #: ../../../src/MenuPowers.cpp:923
1344 msgstr "死亡自动复活"
1345
1346 #: ../../../src/MenuPowers.cpp:922
11801347 msgid "Convert"
1181 msgstr ""
1182
1183 #: ../../../src/MenuPowers.cpp:926
1348 msgstr "转换"
1349
1350 #: ../../../src/MenuPowers.cpp:925
11841351 msgid "Fear"
1185 msgstr ""
1186
1187 #: ../../../src/MenuPowers.cpp:929
1352 msgstr "恐惧"
1353
1354 #: ../../../src/MenuPowers.cpp:928
11881355 msgid "Lifespan"
1189 msgstr ""
1190
1191 #: ../../../src/MenuPowers.cpp:953
1356 msgstr "有效期"
1357
1358 #: ../../../src/MenuPowers.cpp:952
11921359 msgid "Magical Shield"
1193 msgstr ""
1194
1195 #: ../../../src/MenuPowers.cpp:982
1360 msgstr "魔法盾"
1361
1362 #: ../../../src/MenuPowers.cpp:981
11961363 msgid "Healing"
1197 msgstr ""
1198
1199 #: ../../../src/MenuPowers.cpp:985
1364 msgstr "治疗"
1365
1366 #: ../../../src/MenuPowers.cpp:984
12001367 msgid "Knockback"
1201 msgstr ""
1202
1203 #: ../../../src/MenuPowers.cpp:1010
1368 msgstr "击退"
1369
1370 #: ../../../src/MenuPowers.cpp:1009
12041371 #, c-format
12051372 msgid "%d%% chance"
1206 msgstr ""
1207
1208 #: ../../../src/MenuPowers.cpp:1062
1373 msgstr "%d%%几率"
1374
1375 #: ../../../src/MenuPowers.cpp:1061
12091376 msgid "Base Accuracy"
1210 msgstr ""
1211
1212 #: ../../../src/MenuPowers.cpp:1082
1377 msgstr "基础精准度"
1378
1379 #: ../../../src/MenuPowers.cpp:1081
12131380 msgid "Base Critical Chance"
1214 msgstr ""
1215
1216 #: ../../../src/MenuPowers.cpp:1090
1381 msgstr "基础致命一击几率"
1382
1383 #: ../../../src/MenuPowers.cpp:1089
12171384 msgid "Ignores Absorbtion"
1218 msgstr ""
1219
1220 #: ../../../src/MenuPowers.cpp:1095
1385 msgstr "无视伤害吸收"
1386
1387 #: ../../../src/MenuPowers.cpp:1094
12211388 msgid "Ignores Avoidance"
1222 msgstr ""
1223
1224 #: ../../../src/MenuPowers.cpp:1100
1389 msgstr "无视闪避"
1390
1391 #: ../../../src/MenuPowers.cpp:1099
12251392 #, c-format
12261393 msgid "%d%% Chance to crit slowed targets"
1227 msgstr ""
1228
1229 #: ../../../src/MenuPowers.cpp:1105
1394 msgstr "%d%%几率重击减慢的敌人"
1395
1396 #: ../../../src/MenuPowers.cpp:1104
12301397 #, c-format
12311398 msgid "Elemental Damage (%s)"
1232 msgstr ""
1233
1234 #: ../../../src/MenuPowers.cpp:1114
1399 msgstr "元素伤害(%s)"
1400
1401 #: ../../../src/MenuPowers.cpp:1113
12351402 #, c-format
12361403 msgid "Requires a %s"
1237 msgstr ""
1238
1239 #: ../../../src/MenuPowers.cpp:1151 ../../../src/MenuPowers.cpp:1154
1404 msgstr "需要一个%s"
1405
1406 #: ../../../src/MenuPowers.cpp:1150 ../../../src/MenuPowers.cpp:1153
12401407 #, c-format
12411408 msgid "Requires Power: %s"
1242 msgstr "需要技能点: %s"
1243
1244 #: ../../../src/MenuPowers.cpp:1163
1409 msgstr "需要技能点:%s"
1410
1411 #: ../../../src/MenuPowers.cpp:1162
12451412 msgid "Click to Unlock (uses 1 Skill Point)"
1246 msgstr ""
1247
1248 #: ../../../src/MenuPowers.cpp:1167 ../../../src/MenuPowers.cpp:1169
1413 msgstr "点击以解锁(使用一个技能点)"
1414
1415 #: ../../../src/MenuPowers.cpp:1166 ../../../src/MenuPowers.cpp:1168
12491416 msgid "Requires 1 Skill Point"
1250 msgstr ""
1251
1252 #: ../../../src/MenuPowers.cpp:1355
1417 msgstr "需要一个技能点"
1418
1419 #: ../../../src/MenuPowers.cpp:1354
12531420 #, c-format
12541421 msgid "%d unspent skill point"
1255 msgstr ""
1256
1257 #: ../../../src/MenuPowers.cpp:1358
1422 msgstr "%d个未使用的技能点数"
1423
1424 #: ../../../src/MenuPowers.cpp:1357
12581425 #, c-format
12591426 msgid "%d unspent skill points"
1260 msgstr ""
1261
1262 #: ../../../src/MenuPowers.cpp:1388
1427 msgstr "%d个未使用的技能点数"
1428
1429 #: ../../../src/MenuPowers.cpp:1387
12631430 msgid "Next Level:"
1264 msgstr ""
1265
1266 #: ../../../src/MenuStash.cpp:96
1267 msgid "Shared Stash"
1431 msgstr "下一级:"
1432
1433 #: ../../../src/MenuStash.cpp:53
1434 msgid "Private"
1435 msgstr "隐私"
1436
1437 #: ../../../src/MenuStash.cpp:55
1438 msgid "Shared"
1439 msgstr "公用"
1440
1441 #: ../../../src/MenuStash.cpp:103
1442 msgid "Stash"
12681443 msgstr "储物柜"
12691444
1270 #: ../../../src/MenuStash.cpp:209
1445 #: ../../../src/MenuStash.cpp:258
12711446 msgid "Can not store quest items in the stash."
1272 msgstr ""
1273
1274 #: ../../../src/MenuStash.cpp:219
1447 msgstr "不能在储物柜中存放任务物品。"
1448
1449 #: ../../../src/MenuStash.cpp:263
1450 msgid "This item can not be stored in the stash."
1451 msgstr "此物品无法存放在储物柜中。"
1452
1453 #: ../../../src/MenuStash.cpp:268
1454 msgid "This item can not be stored in the private stash."
1455 msgstr "此物品无法存放在私人储物柜中。"
1456
1457 #: ../../../src/MenuStash.cpp:273
1458 msgid "This item can not be stored in the shared stash."
1459 msgstr "此物品无法存放在公用储物柜中。"
1460
1461 #: ../../../src/MenuStash.cpp:283
12751462 msgid "Stash is full."
1276 msgstr ""
1277
1278 #: ../../../src/MenuTalker.cpp:454
1463 msgstr "储物柜已满。"
1464
1465 #: ../../../src/MenuStash.cpp:340
1466 #, c-format
1467 msgid "Can not store item in stash: %s"
1468 msgstr "无法在储物柜中存放物品 %s"
1469
1470 #: ../../../src/MenuTalker.cpp:447
1471 #, c-format
1472 msgid "<dialog node %d>"
1473 msgstr "<dialog node %d>"
1474
1475 #: ../../../src/MenuTalker.cpp:455
12791476 msgid "Trade"
12801477 msgstr "交易"
12811478
12831480 msgid "Buyback"
12841481 msgstr "购回"
12851482
1286 #: ../../../src/MenuVendor.cpp:279
1483 #: ../../../src/MenuVendor.cpp:281
12871484 msgid "Vendor"
12881485 msgstr "商人"
12891486
1290 #: ../../../src/PowerManager.cpp:1136
1487 #: ../../../src/PowerManager.cpp:1170
12911488 #, c-format
12921489 msgid "+%d Shield"
1293 msgstr "+%d Shield"
1294
1295 #: ../../../src/PowerManager.cpp:1392
1490 msgstr "+%d护盾"
1491
1492 #: ../../../src/PowerManager.cpp:1426
12961493 msgid "You are already transformed, untransform first."
1297 msgstr "You are already transformed, untransform first."
1298
1299 #: ../../../src/PowerManager.cpp:1404
1494 msgstr "你已经被传送了,得先反传送。"
1495
1496 #: ../../../src/PowerManager.cpp:1438
13001497 msgid "Could not untransform at this position."
1301 msgstr ""
1498 msgstr "不能反传送回这个位置。"
13021499
13031500 #: ../../../src/QuestLog.cpp:234
13041501 msgid "Completed Quests"
1305 msgstr ""
1306
1307 #: ../../../src/SaveLoad.cpp:243 ../../../src/SaveLoad.cpp:244
1502 msgstr "完成的任务"
1503
1504 #: ../../../src/SaveLoad.cpp:263 ../../../src/SaveLoad.cpp:264
13081505 msgid "Game saved."
1309 msgstr ""
1310
1311 #: ../../../src/SDLInputState.cpp:582
1506 msgstr "游戏已保存。"
1507
1508 #: ../../../src/SDLInputState.cpp:643
1509 msgid "BkSp"
1510 msgstr "回格键"
1511
1512 #: ../../../src/SDLInputState.cpp:644
1513 msgid "Caps"
1514 msgstr "大写锁定"
1515
1516 #: ../../../src/SDLInputState.cpp:645
1517 msgid "Del"
1518 msgstr "删除键"
1519
1520 #: ../../../src/SDLInputState.cpp:647 ../../../src/SDLInputState.cpp:677
1521 msgid "End"
1522 msgstr "End"
1523
1524 #: ../../../src/SDLInputState.cpp:648
1525 msgid "Esc"
1526 msgstr "退出键"
1527
1528 #: ../../../src/SDLInputState.cpp:649 ../../../src/SDLInputState.cpp:679
1529 msgid "Home"
1530 msgstr "Home"
1531
1532 #: ../../../src/SDLInputState.cpp:650
1533 msgid "Ins"
1534 msgstr "Ins"
1535
1536 #: ../../../src/SDLInputState.cpp:651
1537 msgid "LAlt"
1538 msgstr "左Alt"
1539
1540 #: ../../../src/SDLInputState.cpp:652
1541 msgid "LCtrl"
1542 msgstr "左Ctrl"
1543
1544 #: ../../../src/SDLInputState.cpp:654
1545 msgid "LShft"
1546 msgstr "左Shift"
1547
1548 #: ../../../src/SDLInputState.cpp:655
1549 msgid "Num"
1550 msgstr "Num"
1551
1552 #: ../../../src/SDLInputState.cpp:656
1553 msgid "PgDn"
1554 msgstr "PgDn"
1555
1556 #: ../../../src/SDLInputState.cpp:657
1557 msgid "PgUp"
1558 msgstr "PgUp"
1559
1560 #: ../../../src/SDLInputState.cpp:658 ../../../src/SDLInputState.cpp:688
1561 msgid "Pause"
1562 msgstr "Pause"
1563
1564 #: ../../../src/SDLInputState.cpp:659
1565 msgid "Print"
1566 msgstr "Print"
1567
1568 #: ../../../src/SDLInputState.cpp:660
1569 msgid "RAlt"
1570 msgstr "右Alt"
1571
1572 #: ../../../src/SDLInputState.cpp:661
1573 msgid "RCtrl"
1574 msgstr "右Ctrl"
1575
1576 #: ../../../src/SDLInputState.cpp:662
1577 msgid "Ret"
1578 msgstr "Ret"
1579
1580 #: ../../../src/SDLInputState.cpp:664
1581 msgid "RShft"
1582 msgstr "右Shift"
1583
1584 #: ../../../src/SDLInputState.cpp:665
1585 msgid "SLock"
1586 msgstr "SLock"
1587
1588 #: ../../../src/SDLInputState.cpp:666
1589 msgid "Spc"
1590 msgstr "Spc"
1591
1592 #: ../../../src/SDLInputState.cpp:667 ../../../src/SDLInputState.cpp:697
1593 msgid "Tab"
1594 msgstr "Tab"
1595
1596 #: ../../../src/SDLInputState.cpp:673
13121597 msgid "Backspace"
1313 msgstr ""
1314
1315 #: ../../../src/SDLInputState.cpp:583
1598 msgstr "Backspace"
1599
1600 #: ../../../src/SDLInputState.cpp:674
13161601 msgid "CapsLock"
1317 msgstr ""
1318
1319 #: ../../../src/SDLInputState.cpp:586
1320 msgid "End"
1321 msgstr ""
1322
1323 #: ../../../src/SDLInputState.cpp:587
1602 msgstr "CapsLock"
1603
1604 #: ../../../src/SDLInputState.cpp:678
13241605 msgid "Escape"
1325 msgstr ""
1326
1327 #: ../../../src/SDLInputState.cpp:588
1328 msgid "Home"
1329 msgstr ""
1330
1331 #: ../../../src/SDLInputState.cpp:589
1606 msgstr "Escape"
1607
1608 #: ../../../src/SDLInputState.cpp:680
13321609 msgid "Insert"
1333 msgstr ""
1334
1335 #: ../../../src/SDLInputState.cpp:590
1610 msgstr "Insert"
1611
1612 #: ../../../src/SDLInputState.cpp:681
13361613 msgid "Left Alt"
1337 msgstr ""
1338
1339 #: ../../../src/SDLInputState.cpp:591
1614 msgstr "左Alt"
1615
1616 #: ../../../src/SDLInputState.cpp:682
13401617 msgid "Left Ctrl"
1341 msgstr ""
1342
1343 #: ../../../src/SDLInputState.cpp:593
1618 msgstr "左Ctrl"
1619
1620 #: ../../../src/SDLInputState.cpp:684
13441621 msgid "Left Shift"
1345 msgstr ""
1346
1347 #: ../../../src/SDLInputState.cpp:594
1622 msgstr "左Shift"
1623
1624 #: ../../../src/SDLInputState.cpp:685
13481625 msgid "NumLock"
1349 msgstr ""
1350
1351 #: ../../../src/SDLInputState.cpp:595
1626 msgstr "NumLock"
1627
1628 #: ../../../src/SDLInputState.cpp:686
13521629 msgid "PageDown"
1353 msgstr ""
1354
1355 #: ../../../src/SDLInputState.cpp:596
1630 msgstr "PageDown"
1631
1632 #: ../../../src/SDLInputState.cpp:687
13561633 msgid "PageUp"
1357 msgstr ""
1358
1359 #: ../../../src/SDLInputState.cpp:597
1360 msgid "Pause"
1361 msgstr ""
1362
1363 #: ../../../src/SDLInputState.cpp:598
1634 msgstr "PageUp"
1635
1636 #: ../../../src/SDLInputState.cpp:689
13641637 msgid "PrintScreen"
1365 msgstr ""
1366
1367 #: ../../../src/SDLInputState.cpp:599
1638 msgstr "PrintScreen"
1639
1640 #: ../../../src/SDLInputState.cpp:690
13681641 msgid "Right Alt"
1369 msgstr ""
1370
1371 #: ../../../src/SDLInputState.cpp:600
1642 msgstr "右Alt"
1643
1644 #: ../../../src/SDLInputState.cpp:691
13721645 msgid "Right Ctrl"
1373 msgstr ""
1374
1375 #: ../../../src/SDLInputState.cpp:601
1646 msgstr "右Ctrl"
1647
1648 #: ../../../src/SDLInputState.cpp:692
13761649 msgid "Return"
1377 msgstr ""
1378
1379 #: ../../../src/SDLInputState.cpp:603
1650 msgstr "Return"
1651
1652 #: ../../../src/SDLInputState.cpp:694
13801653 msgid "Right Shift"
1381 msgstr ""
1382
1383 #: ../../../src/SDLInputState.cpp:604
1654 msgstr "右Shift"
1655
1656 #: ../../../src/SDLInputState.cpp:695
13841657 msgid "ScrollLock"
1385 msgstr ""
1386
1387 #: ../../../src/SDLInputState.cpp:605
1658 msgstr "ScrollLock"
1659
1660 #: ../../../src/SDLInputState.cpp:696
13881661 msgid "Space"
1389 msgstr ""
1390
1391 #: ../../../src/SDLInputState.cpp:606
1392 msgid "Tab"
1393 msgstr ""
1394
1395 #: ../../../src/SDLInputState.cpp:620
1662 msgstr "Space"
1663
1664 #: ../../../src/SDLInputState.cpp:710
1665 #, c-format
1666 msgid "M%d"
1667 msgstr "M%d"
1668
1669 #: ../../../src/SDLInputState.cpp:716
13961670 #, c-format
13971671 msgid "Mouse %d"
1398 msgstr ""
1399
1400 #: ../../../src/SDLInputState.cpp:628
1672 msgstr "鼠标 %d"
1673
1674 #: ../../../src/SDLInputState.cpp:726
1675 #, c-format
1676 msgid "JX%d-"
1677 msgstr "JX%d-"
1678
1679 #: ../../../src/SDLInputState.cpp:728
14011680 #, c-format
14021681 msgid "Axis %d -"
1403 msgstr ""
1404
1405 #: ../../../src/SDLInputState.cpp:630
1682 msgstr "摇杆轴 %d-"
1683
1684 #: ../../../src/SDLInputState.cpp:732
1685 #, c-format
1686 msgid "JX%d+"
1687 msgstr "JX%d+"
1688
1689 #: ../../../src/SDLInputState.cpp:734
14061690 #, c-format
14071691 msgid "Axis %d +"
1408 msgstr ""
1409
1410 #: ../../../src/SDLInputState.cpp:633
1692 msgstr "摇杆轴 %d+"
1693
1694 #: ../../../src/SDLInputState.cpp:739
1695 #, c-format
1696 msgid "JB%d"
1697 msgstr "JB%d"
1698
1699 #: ../../../src/SDLInputState.cpp:741
14111700 #, c-format
14121701 msgid "Button %d"
1413 msgstr ""
1414
1415 #: ../../../src/SDLInputState.cpp:637
1416 msgid "(none)"
1417 msgstr ""
1418
1419 #: ../../../src/SDLInputState.cpp:677
1702 msgstr "按钮 %d"
1703
1704 #: ../../../src/SDLInputState.cpp:788
14201705 msgid "Touch control D-Pad"
1421 msgstr ""
1422
1423 #: ../../../src/SDLInputState.cpp:701
1706 msgstr "触摸控制D-Pad"
1707
1708 #: ../../../src/SDLInputState.cpp:812
14241709 msgid "Touch control buttons"
1425 msgstr ""
1426
1427 #: ../../../src/SDLInputState.cpp:716
1710 msgstr "触摸控制按钮"
1711
1712 #: ../../../src/SDLInputState.cpp:827
14281713 msgid "Tap"
1429 msgstr ""
1430
1431 #: ../../../src/SDLInputState.cpp:760 ../../../src/SDLInputState.cpp:764
1432 #: ../../../src/SDLInputState.cpp:768
1714 msgstr "点按"
1715
1716 #: ../../../src/SDLInputState.cpp:879 ../../../src/SDLInputState.cpp:881
1717 #, c-format
1718 msgid "Can not bind: %s"
1719 msgstr "无法绑定 %s"
1720
1721 #: ../../../src/SDLInputState.cpp:893 ../../../src/SDLInputState.cpp:897
1722 #: ../../../src/SDLInputState.cpp:901
14331723 #, c-format
14341724 msgid "'%s' is no longer bound to:"
1435 msgstr ""
1725 msgstr "‘%s’不再绑定到:"
14361726
14371727 #: ../../../src/Stats.cpp:38
14381728 msgid "Max HP"
1439 msgstr ""
1729 msgstr "最大HP"
14401730
14411731 #: ../../../src/Stats.cpp:39
14421732 msgid "Total amount of HP."
1443 msgstr ""
1733 msgstr "HP总量。"
14441734
14451735 #: ../../../src/Stats.cpp:43
14461736 msgid "HP Regen"
1447 msgstr ""
1737 msgstr "HP恢复"
14481738
14491739 #: ../../../src/Stats.cpp:44
14501740 msgid "Ticks of HP regen per minute."
1451 msgstr ""
1741 msgstr "每分钟恢复的HP数。"
14521742
14531743 #: ../../../src/Stats.cpp:48
14541744 msgid "Max MP"
1455 msgstr ""
1745 msgstr "最大MP"
14561746
14571747 #: ../../../src/Stats.cpp:49
14581748 msgid "Total amount of MP."
1459 msgstr ""
1749 msgstr "MP总量。"
14601750
14611751 #: ../../../src/Stats.cpp:53
14621752 msgid "MP Regen"
1463 msgstr ""
1753 msgstr "MP恢复"
14641754
14651755 #: ../../../src/Stats.cpp:54
14661756 msgid "Ticks of MP regen per minute."
1467 msgstr ""
1757 msgstr "每分钟恢复的MP数。"
14681758
14691759 #: ../../../src/Stats.cpp:58
14701760 msgid "Accuracy"
1471 msgstr ""
1761 msgstr "精准度"
14721762
14731763 #: ../../../src/Stats.cpp:59
14741764 msgid ""
14751765 "Accuracy rating. The enemy's Avoidance rating is subtracted from this value "
14761766 "to calculate your likeliness to land a direct hit."
1477 msgstr ""
1767 msgstr "精准度等级。这个值减去敌人的闪避等级计算为你直接击中敌人的可能性。"
14781768
14791769 #: ../../../src/Stats.cpp:63
14801770 msgid "Avoidance"
1481 msgstr ""
1771 msgstr "闪避"
14821772
14831773 #: ../../../src/Stats.cpp:64
14841774 msgid ""
14851775 "Avoidance rating. This value is subtracted from the enemy's Accuracy rating "
14861776 "to calculate their likeliness to land a direct hit."
1487 msgstr ""
1777 msgstr "闪避等级。敌人的精准度等级减去这个值计算为敌人直接击中你的可能性。"
14881778
14891779 #: ../../../src/Stats.cpp:68
14901780 msgid "Absorb Min"
1491 msgstr ""
1781 msgstr "伤害吸收最小值"
14921782
14931783 #: ../../../src/Stats.cpp:69 ../../../src/Stats.cpp:74
14941784 msgid "Reduces the amount of damage taken."
1495 msgstr ""
1785 msgstr "减少受到的伤害数量。"
14961786
14971787 #: ../../../src/Stats.cpp:73
14981788 msgid "Absorb Max"
1499 msgstr ""
1789 msgstr "伤害吸收最大值"
15001790
15011791 #: ../../../src/Stats.cpp:78
15021792 msgid "Critical Hit Chance"
1503 msgstr ""
1793 msgstr "致命一击几率"
15041794
15051795 #: ../../../src/Stats.cpp:79
15061796 msgid "Chance for an attack to do extra damage."
1507 msgstr ""
1797 msgstr "攻击造成额外伤害的几率。"
15081798
15091799 #: ../../../src/Stats.cpp:83
15101800 msgid "Bonus XP"
1511 msgstr ""
1801 msgstr "奖励XP"
15121802
15131803 #: ../../../src/Stats.cpp:84
15141804 msgid "Increases the XP gained per kill."
1515 msgstr ""
1805 msgstr "增加每个击杀得到的XP。"
15161806
15171807 #: ../../../src/Stats.cpp:88
15181808 #, c-format
15191809 msgid "Bonus %s"
1520 msgstr ""
1810 msgstr "奖励%s"
15211811
15221812 #: ../../../src/Stats.cpp:89
15231813 #, c-format
15241814 msgid "Increases the %s found per drop."
1525 msgstr ""
1815 msgstr "每次掉落增加%s。"
15261816
15271817 #: ../../../src/Stats.cpp:93
15281818 msgid "Item Find Chance"
1529 msgstr ""
1819 msgstr "发现物品的几率"
15301820
15311821 #: ../../../src/Stats.cpp:94
15321822 msgid "Increases the chance that an enemy will drop an item."
1533 msgstr ""
1823 msgstr "增加敌人掉落物品的几率。"
15341824
15351825 #: ../../../src/Stats.cpp:98
15361826 msgid "Stealth"
1537 msgstr ""
1827 msgstr "潜行"
15381828
15391829 #: ../../../src/Stats.cpp:99
15401830 msgid "Increases your ability to move undetected."
1541 msgstr ""
1831 msgstr "增加你不被发现地移动的能力。"
15421832
15431833 #: ../../../src/Stats.cpp:103
15441834 msgid "Poise"
1545 msgstr ""
1835 msgstr "平稳"
15461836
15471837 #: ../../../src/Stats.cpp:104
15481838 msgid "Reduces your chance of stumbling when hit."
1549 msgstr ""
1839 msgstr "减少你被击中时跌倒的几率。"
15501840
15511841 #: ../../../src/Stats.cpp:108
15521842 msgid "Missile Reflect Chance"
1553 msgstr ""
1843 msgstr "投射物反弹几率"
15541844
15551845 #: ../../../src/Stats.cpp:109
15561846 msgid "Increases your chance of reflecting missiles back at enemies."
1557 msgstr ""
1847 msgstr "增加你反弹投射物回敌人的几率。"
15581848
15591849 #: ../../../src/Stats.cpp:113
15601850 msgid "Damage Reflection"
1561 msgstr ""
1851 msgstr "伤害反弹"
15621852
15631853 #: ../../../src/Stats.cpp:114
15641854 msgid "Deals a percentage of damage taken back to the attacker."
1565 msgstr ""
1855 msgstr "返回给攻击者一定比例的伤害。"
15661856
15671857 #: ../../../src/Stats.cpp:118
15681858 msgid "HP Steal"
1569 msgstr ""
1859 msgstr "HP偷取"
15701860
15711861 #: ../../../src/Stats.cpp:119
15721862 msgid "Percentage of HP stolen per hit."
1573 msgstr ""
1863 msgstr "每次击中偷取的MP百分比。"
15741864
15751865 #: ../../../src/Stats.cpp:123
15761866 msgid "MP Steal"
1577 msgstr ""
1867 msgstr "MP偷取"
15781868
15791869 #: ../../../src/Stats.cpp:124
15801870 msgid "Percentage of MP stolen per hit."
1581 msgstr ""
1871 msgstr "每次击中偷取的MP百分比。"
15821872
15831873 #: ../../../src/Stats.cpp:128
15841874 msgid "Base HP"
1585 msgstr ""
1875 msgstr "基础MP"
15861876
15871877 #: ../../../src/Stats.cpp:133
15881878 msgid "Base MP"
1589 msgstr ""
1879 msgstr "基础MP"
15901880
15911881 #: ../../../src/Utils.cpp:346
15921882 msgid "k"
1593 msgstr ""
1594
1595 #: ../../../src/Utils.cpp:580
1883 msgstr "k"
1884
1885 #: ../../../src/Utils.cpp:616
15961886 #, c-format
15971887 msgid "%s second"
1598 msgstr ""
1599
1600 #: ../../../src/Utils.cpp:583
1888 msgstr "%s秒"
1889
1890 #: ../../../src/Utils.cpp:619
16011891 #, c-format
16021892 msgid "%s seconds"
1603 msgstr ""
1893 msgstr "%s秒"
16041894
16051895 #: ../../../src/Version.cpp:139
16061896 msgid "or newer"
1607 msgstr ""
1897 msgstr "或更新的"
16081898
16091899 #: ../../../src/Version.cpp:142
16101900 msgid "or older"
1611 msgstr ""
1901 msgstr "或更旧的"
0 #!/bin/bash
1 # Run this script in the language directory to update the pot and all *.po files
2
3 DO_MERGE=true
4 for i in "$@"; do
5 if [ "$i" == "--no-merge" ]; then
6 DO_MERGE=false
7 fi
8 done
9
10 # For the engine
11 # To generate the appropriate .pot file, you need to run the following command from the languages directory:
12 if [ -e engine.pot ] ; then
13 echo "Generating engine.pot"
14
15 xgettext --keyword=get -o engine.pot ../../../src/*.cpp
16
17 # xgettext doesn't allow defining a charset, but we want UTF-8 across the board
18 sed -i "s/charset=CHARSET/charset=UTF-8/" engine.pot
19
20 if [ $DO_MERGE = true ]; then
21 # To update existing .po files, you need to run the following command from the languages directory:
22 # msgmerge -U -N <name_of_.po_file> <name_of_.pot_file>
23
24 for f in $(ls engine.*.po) ; do
25 echo "Processing $f"
26 msgmerge -U -N --backup=none $f engine.pot
27 done
28 fi
29 fi
30
31 if [ -e data.pot ] ; then
32 echo "Generating data.pot"
33
34 # For mods:
35 ./xgettext.py
36
37 if [ $DO_MERGE = true ]; then
38 for f in $(ls data.*.po) ; do
39 echo "Processing $f"
40 msgmerge -U -N --backup=none $f data.pot
41 done
42 fi
43 fi
0 #! /usr/bin/python
1 import os
2 import datetime
3 import codecs # proper UTF8 handling with files
4
5 keys = []
6 comments = []
7 now = datetime.datetime.now()
8 header = r'''# Copyright (C) 2011 Clint Bellanger
9 # This file is distributed under the same license as the FLARE package.
10 #
11 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
12 msgid ""
13 msgstr ""
14 "Project-Id-Version: PACKAGE VERSION\n"
15 "Report-Msgid-Bugs-To: \n"
16 "POT-Creation-Date: {now}\n"
17 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
18 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
19 "Language-Team: LANGUAGE <LL@li.org>\n"
20 "Language: \n"
21 "MIME-Version: 1.0\n"
22 "Content-Type: text/plain; charset=UTF-8\n"
23 "Content-Transfer-Encoding: 8bit\n"
24
25 '''
26
27 POT_STRING = u'''\
28 #: {comment}
29 msgid "{msgid}"
30 msgstr ""
31
32 '''
33
34 # this extracts translatable strings from the flare data file
35 def extract(filename):
36 if not os.path.exists(filename):
37 return
38 infile = codecs.open(filename, encoding='UTF-8', mode='r')
39 triggers = [
40 'msg', 'him', 'her', 'you', 'name', 'title', 'tooltip',
41 'power_desc', 'quest_text', 'description',
42 'tab_title', 'currency_name', 'flavor', 'topic', 'option',
43 'caption', 'text', 'name_min', 'name_max'
44 ]
45 plain_text = [
46 'msg', 'him', 'her', 'you', 'name', 'title', 'tooltip',
47 'quest_text', 'description', 'topic', 'flavor', 'caption', 'text'
48 ]
49 # The credits cutscenes mostly contain names of people that we don't want to translate.
50 # However, there are a few strings that we DO want translated, which we define here:
51 allowed_credits_strings = [
52 'Flare Engine Credits', 'Lead Programmers', 'Programmers', 'Default Art',
53 'Translators', 'Distributors', 'Special Thanks', 'For giving constant feedback and testing:',
54 'The community at OpenGameArt', 'For Tiled and the Flare map exporter:',
55 'Flare Game Credits - fantasycore', 'Lead Visual Artists', 'Visual Artists', 'Composers',
56 'Foley Artists', 'Voice Actors', 'Flare Game Credits - empyrean_campaign',
57 'Lead Content Designers', 'Flare Game Credits - alpha_demo', 'Content Designers'
58 ]
59 for i, line in enumerate(infile, start=1):
60 for trigger in triggers:
61 if line.startswith(trigger + '='):
62 line = line.split('=')[1]
63 line = line.strip('\n')
64 values = line.split(',')
65 # TODO checking length of values isn't reliable, check trigger too?
66 if (trigger in plain_text):
67 stat = line.replace("\"", "\\\"");
68 elif len(values) == 1:
69 # {key}={value}
70 stat, = values
71 elif len(values) == 2:
72 # bonus={stat},{value}
73 stat, value = values
74 elif len(values) == 3:
75 # bonus={set_level},{stat},{value}
76 set_level, stat, value = values
77 elif len(values) == 5:
78 # option=base,head,portrait,name
79 stat = values[-1]
80
81 test_key = stat.rstrip()
82 if filename.endswith('cutscenes/credits.txt') and test_key not in allowed_credits_strings:
83 continue
84
85 comment = filename + ':' + str(i)
86 comments.append(comment)
87 keys.append(test_key)
88
89 # this removes duplicates from keys in a clean way (without screwing up the order)
90 def remove_duplicates():
91 global comments
92 global keys
93 tmp = []
94 tmp_c = []
95 for node_c,node in zip(comments,keys):
96 if node not in tmp:
97 tmp_c.append(node_c)
98 tmp.append(node)
99 comments = tmp_c
100 keys = tmp
101
102 # this writes the list of keys to a gettext .po file
103 def save(filename):
104 outfile = codecs.open('data.pot', encoding='UTF-8', mode='w')
105 outfile.write(header.format(now=now.strftime('%Y-%m-%d %H:%M+%z')))
106 remove_duplicates()
107 for line_c,line in zip(comments,keys):
108 outfile.write(POT_STRING.format(comment=line_c, msgid=line))
109
110 # HERE'S THE MAIN EXECUTION
111 extract('../items/items.txt')
112 extract('../items/types.txt')
113 extract('../items/sets.txt')
114 extract('../items/qualities.txt')
115 extract('../menus/powers.txt')
116 extract('../powers/effects.txt')
117 extract('../powers/powers.txt')
118 extract('../engine/elements.txt')
119 extract('../engine/loot.txt')
120 extract('../engine/classes.txt')
121 extract('../engine/hero_options.txt')
122 extract('../engine/titles.txt')
123 extract('../engine/equip_flags.txt')
124 extract('../engine/primary_stats.txt')
125 extract('../engine/damage_types.txt')
126 extract('../soundfx/subtitles.txt')
127
128 for folder in ['enemies', 'maps', 'quests', 'npcs', 'cutscenes', 'books', 'items', 'powers', 'scripts']:
129 target = os.path.join('..', folder)
130 if os.path.isdir(target):
131 for filename in sorted(os.listdir(target)):
132 subfolder = os.path.join(target, filename)
133 if os.path.isdir(subfolder):
134 for root, dirs, files in os.walk(subfolder):
135 for f in files:
136 f = os.path.join(root, f)
137 if os.path.isfile(f):
138 extract(f)
139 elif os.path.isfile(subfolder):
140 extract(subfolder)
141
142 save('data.pot')
88
99 listbox_scrollbar_offset=2
1010
11 [video]
12 renderer=104,16,32,32
13 fullscreen=568,36,584,32
14 hwsurface=568,68,584,64
15 vsync=568,100,584,96
16 texture_filter=568,132,584,128
17 dpi_scaling=568,164,584,160
18 parallax_layers=568,196,584,192
19 change_gamma=568,228,584,224
20 gamma=368,264,384,256
21
22 [audio]
23 music_volume=368,40,384,32
24 sound_volume=368,72,384,64
25
26 [interface]
27 language=104,16,32,32
28 show_fps=568,36,584,32
29 colorblind=568,68,584,64
30 hardware_cursor=568,100,584,96
31 dev_mode=568,132,584,128
32 subtitles=568,164,584,160
33
34 [input]
35 joystick_device=104,16,32,32
36 enable_joystick=568,36,584,32
37 mouse_move=568,68,584,64
38 mouse_aim=568,100,584,96
39 no_mouse=568,132,584,128
40 mouse_move_swap=568,164,584,160
41 mouse_move_attack=568,196,584,192
42 joystick_deadzone=368,232,384,224
43
44 [key_bindings]
45
4611 # scrollpane values are positions x, y and sizes width, height
47 scrollpane=0,4,600,320
48 # scrollpane_contents is the height of the scrollpane's internal area
49 scrollpane_contents=940
50
51 keybinds_bg_color=26,26,26
52 cancel=120,14,138,10
53 accept=120,44,138,40
54 up=120,74,138,70
55 down=120,104,138,100
56 left=120,134,138,130
57 right=120,164,138,160
58 bar1=120,194,138,190
59 bar2=120,224,138,220
60
61 bar3=120,254,138,250
62 bar4=120,284,138,280
63 bar5=120,314,138,310
64 bar6=120,344,138,340
65 bar7=120,374,138,370
66 bar8=120,404,138,400
67 bar9=120,434,138,430
68 bar0=120,464,138,460
69
70 main1=120,494,138,490
71 main2=120,524,138,520
72 character=120,554,138,550
73 inventory=120,584,138,580
74 powers=120,614,138,610
75 log=120,644,138,640
76 ctrl=120,674,138,670
77 shift=120,704,138,700
78 alt=120,734,138,730
79 delete=120,764,138,760
80 actionbar=120,794,138,790
81 actionbar_back=120,824,138,820
82 actionbar_forward=120,854,138,850
83 actionbar_use=120,884,138,880
84 developer_menu=120,914,138,910
85 secondary_offset=145,0
12 # scrollpane=0,4,600,320
13 scrollpane=-6,-6,616,344
14 scrollpane_padding=80,40
15 # scrollpane_bg_color=26,26,26,127
16 scrollpane_separator_color=63,63,63
8617
8718 [mods]
8819 activemods=456,16,384,32
0 # Configuration for the "Select a Movement Type" dialog
1
2 pos=0,0,480,192
3 align=center
4
5 label_title=240,8,center,top
6 label_config_hint=240,28,center,top
7
8 button_keyboard=19,144
9 button_mouse=169,144
10 button_joystick=319,144
11
12 icon_keyboard=58,64
13 icon_mouse=208,64
14 icon_joystick=358,64
00 #!/usr/bin/env bash -e
11
22 FLARE_EXE=$1
3 FLARE_DEPS_SRC="http"
4 FLARE_GAME=""
35
4 if [ -z "$FLARE_EXE" ]; then
6 if [ -z "${FLARE_EXE}" ]; then
57 echo "usage: $0 <path to flare executable>"
68 exit 1
79 fi
810 if [ ! -f ${FLARE_EXE} ]; then
9 echo "no Flare executable found at $FLARE_EXE. Please follow README in order to build Flare engine first"
11 echo "no Flare executable found at ${FLARE_EXE}. Please follow README in order to build Flare engine first"
1012 exit 1
1113 fi
1214 if [ `otool -L ${FLARE_EXE} | egrep libSDL2 | wc -l` -lt 1 ]; then
1315 echo "invalid Flare executable"
1416 exit 1
17 fi
18
19 if [ "$2" != "" ]; then
20 FLARE_DEPS_SRC=$2
21 fi
22 if [ ${FLARE_DEPS_SRC} == "http" ]; then
23 echo "download dependencies from website"
24 elif [ ${FLARE_DEPS_SRC} == "homebrew" ]; then
25 echo "copy dependencies from homebrew"
26 else
27 echo "usage: $0 <path to flare executable> <http|homebrew>"
28 exit 1
29 fi
30
31 if [ "$3" != "" ]; then
32 FLARE_GAME=$3
1533 fi
1634
1735 DST=/tmp/___flare.build
2442 ${FLARE_EXE} \
2543 mods ${DST}
2644
27 #feel free to build dependencies by yourself btw
28 wget 'http://files.ruads.org/flare_osx_dependencies.tar.gz' -P ${DST}
29 tar -zxf ${DST}/flare_osx_dependencies.tar.gz -C ${DST}
30 rm -f ${DST}/flare_osx_dependencies.tar.gz
45 if [ ${FLARE_DEPS_SRC} == "http" ]; then
46 #feel free to build dependencies by yourself btw
47 wget 'http://files.ruads.org/flare_osx_dependencies.tar.gz' -P ${DST}
48 tar -zxf ${DST}/flare_osx_dependencies.tar.gz -C ${DST}
49 rm -f ${DST}/flare_osx_dependencies.tar.gz
50 elif [ ${FLARE_DEPS_SRC} == "homebrew" ]; then
51 LIB=${DST}/lib
52 mkdir ${LIB}
53 # SDL2
54 cp /usr/local/opt/sdl2/COPYING.txt ${LIB}/SDL2-COPYING.txt
55 cp /usr/local/opt/sdl2/README.txt ${LIB}/SDL2-README.txt
56 cp /usr/local/opt/sdl2/lib/libSDL2-2.0.0.dylib ${LIB}
57 cp /usr/local/opt/sdl2_image/lib/libSDL2_image-2.0.0.dylib ${LIB}
58 cp /usr/local/opt/sdl2_mixer/lib/libSDL2_mixer-2.0.0.dylib ${LIB}
59 cp /usr/local/opt/sdl2_ttf/lib/libSDL2_ttf-2.0.0.dylib ${LIB}
60 # VORBIS
61 cp /usr/local/opt/libvorbis/COPYING ${LIB}/VORBIS-COPYING
62 cp /usr/local/opt/libvorbis/lib/libvorbis.0.dylib ${LIB}
63 cp /usr/local/opt/libvorbis/lib/libvorbisenc.2.dylib ${LIB}
64 cp /usr/local/opt/libvorbis/lib/libvorbisfile.3.dylib ${LIB}
65 # OGG
66 cp /usr/local/opt/libogg/COPYING ${LIB}/OGG-COPYING
67 cp /usr/local/opt/libogg/lib/libogg.0.dylib ${LIB}
68 # PNG
69 cp /usr/local/opt/libpng/lib/libpng16.16.dylib ${LIB}
70
71 # Verify all homebrew deps using using otool
72 for DYLIB in ${LIB}/*.dylib; do
73 #echo "dylib: ${DYLIB}"
74 for LINE in $(otool -L ${DYLIB}); do
75 #echo "line: ${LINE}"
76 if [[ $LINE == *"/usr/local/opt/"* ]]; then
77 NEED=$(basename ${LINE})
78 #echo "${DYLIB} need: ${NEED}"
79 FILE="${LIB}/${NEED}"
80 if [ ! -f "${FILE}" ]; then
81 echo "${NEED} not found, copying"
82 cp ${LINE} ${LIB}
83 fi
84 fi
85 done
86 done
87
88 else
89 echo "'${FLARE_DEPS_SRC}' unknown dependency source"
90 exit 1
91 fi
92
93 if [ "${FLARE_GAME}" != "" ]; then
94 FLARE_ENGINE_MOD_LIST=mods/mods.txt
95 FLARE_GAME_MOD=${FLARE_GAME}/mods
96 while IFS= read -r MOD; do
97 MOD_DIR=${FLARE_GAME_MOD}/${MOD}
98 if [ "${MOD}" != "" ] && [ -d "${MOD_DIR}" ]; then
99 cp -r ${MOD_DIR} ${DST}/mods
100 echo "copied ${MOD}"
101 fi
102 done < "${FLARE_ENGINE_MOD_LIST}"
103 cp ${FLARE_GAME}/CREDITS.txt ${DST}
104 cp ${FLARE_GAME}/LICENSE.txt ${DST}
105 fi
31106
32107 echo '#!/bin/sh' >> ${DST}/start.sh
33108 echo 'cd "$(dirname "${BASH_SOURCE[0]}")"' >> ${DST}/start.sh
0 <?xml version="1.0" encoding="UTF-8"?>
1 <!DOCTYPE QtCreatorCodeStyle>
2 <!-- Written by Qt Creator 2.4.1, 2012-10-14T19:16:20. -->
3 <qtcreator>
4 <data>
5 <variable>CodeStyleData</variable>
6 <valuemap type="QVariantMap">
7 <value type="bool" key="AlignAssignments">false</value>
8 <value type="bool" key="AutoSpacesForTabs">false</value>
9 <value type="bool" key="ExtraPaddingForConditionsIfConfusingAlign">true</value>
10 <value type="bool" key="IndentAccessSpecifiers">false</value>
11 <value type="bool" key="IndentBlockBody">true</value>
12 <value type="bool" key="IndentBlockBraces">false</value>
13 <value type="bool" key="IndentBlocksRelativeToSwitchLabels">false</value>
14 <value type="bool" key="IndentClassBraces">false</value>
15 <value type="bool" key="IndentControlFlowRelativeToSwitchLabels">true</value>
16 <value type="bool" key="IndentDeclarationsRelativeToAccessSpecifiers">true</value>
17 <value type="bool" key="IndentEnumBraces">false</value>
18 <value type="bool" key="IndentFunctionBody">true</value>
19 <value type="bool" key="IndentFunctionBraces">false</value>
20 <value type="bool" key="IndentNamespaceBody">false</value>
21 <value type="bool" key="IndentNamespaceBraces">false</value>
22 <value type="int" key="IndentSize">4</value>
23 <value type="bool" key="IndentStatementsRelativeToSwitchLabels">true</value>
24 <value type="bool" key="IndentSwitchLabels">false</value>
25 <value type="int" key="PaddingMode">2</value>
26 <value type="bool" key="SpacesForTabs">false</value>
27 <value type="int" key="TabSize">4</value>
28 </valuemap>
29 </data>
30 <data>
31 <variable>DisplayName</variable>
32 <value type="QString">Flare</value>
33 </data>
34 </qtcreator>
0 #!/bin/sh
1
2 SOURCE=./docs/gen/attribute-reference.md
3 DESTINATION=./Attribute-Reference.md
4
5 cp ${SOURCE} ${DESTINATION}
6 ./extract_xml.sh | xsltproc wiki.xslt - | sed -e '1,3d' >> ${DESTINATION}
7
8 echo "Created ${DESTINATION}"
9 echo "Now move it to the wiki."
3030 #include "Animation.h"
3131 #include "RenderDevice.h"
3232
33 Animation::Animation(const std::string &_name, const std::string &_type, Image *_sprite, uint8_t _blend_mode, uint8_t _alpha_mod, Color _color_mod)
33 Animation::Animation(const std::string &_name, const std::string &_type, AnimationMedia *_sprite, uint8_t _blend_mode, uint8_t _alpha_mod, Color _color_mod)
3434 : name(_name)
3535 , type( _type == "play_once" ? ANIMTYPE_PLAY_ONCE :
3636 _type == "back_forth" ? ANIMTYPE_BACK_FORTH :
6666 for (unsigned short i = 0 ; i < _frames; i++) {
6767 int base_index = max_kinds*i;
6868 for (unsigned short kind = 0 ; kind < max_kinds; kind++) {
69 gfx[base_index + kind].x = _render_size.x * (_position + i);
70 gfx[base_index + kind].y = _render_size.y * kind;
71 gfx[base_index + kind].w = _render_size.x;
72 gfx[base_index + kind].h = _render_size.y;
69 // TODO handle multiple images for uncompressed animation defintions
70 gfx[base_index + kind].first = sprite->getImageFromKey("");
71 gfx[base_index + kind].second.x = _render_size.x * (_position + i);
72 gfx[base_index + kind].second.y = _render_size.y * kind;
73 gfx[base_index + kind].second.w = _render_size.x;
74 gfx[base_index + kind].second.h = _render_size.y;
7375 render_offset[base_index + kind].x = _render_offset.x;
7476 render_offset[base_index + kind].y = _render_offset.y;
7577 }
147149 render_offset.resize(i);
148150 }
149151
150 void Animation::addFrame(unsigned short index, unsigned short kind, const Rect& rect, const Point& _render_offset) {
152 void Animation::addFrame(unsigned short index, unsigned short kind, const Rect& rect, const Point& _render_offset, const std::string& key) {
151153
152154 if (index >= gfx.size()/max_kinds) {
153155 Utils::logError("Animation: Animation(%s) adding rect(%d, %d, %d, %d) to frame index(%u) out of bounds. must be in [0, %d]",
161163 }
162164
163165 unsigned i = max_kinds*index+kind;
164 gfx[i] = rect;
166 gfx[i].first = sprite->getImageFromKey(key);
167 gfx[i].second = rect;
165168 render_offset[i] = _render_offset;
166169 }
167170
233236 Renderable r;
234237 if (!frames.empty()) {
235238 const int index = (max_kinds*frames[cur_frame_index]) + kind;
236 r.src.x = gfx[index].x;
237 r.src.y = gfx[index].y;
238 r.src.w = gfx[index].w;
239 r.src.h = gfx[index].h;
239 r.src.x = gfx[index].second.x;
240 r.src.y = gfx[index].second.y;
241 r.src.w = gfx[index].second.w;
242 r.src.h = gfx[index].second.h;
240243 r.offset.x = render_offset[index].x;
241244 r.offset.y = render_offset[index].y;
242 r.image = sprite;
245 r.image = gfx[index].first;
243246 r.blend_mode = blend_mode;
244247 r.color_mod = color_mod;
245248 r.alpha_mod = alpha_mod;
310313 }
311314
312315 bool Animation::isFirstFrame() {
313 return cur_frame_index == 0;
316 return cur_frame_index == 0 && static_cast<float>(cur_frame_index) == cur_frame_index_f;
314317 }
315318
316319 bool Animation::isLastFrame() {
324327 bool Animation::isActiveFrame() {
325328 if (type == ANIMTYPE_BACK_FORTH) {
326329 if (std::find(active_frames.begin(), active_frames.end(), elapsed_frames) != active_frames.end())
327 return cur_frame_index == getLastFrameIndex(cur_frame);
330 return cur_frame_index == getLastFrameIndex(cur_frame) && static_cast<float>(cur_frame_index) == cur_frame_index_f;
328331 }
329332 else {
330333 if (std::find(active_frames.begin(), active_frames.end(), cur_frame) != active_frames.end()) {
331 if (cur_frame_index == getLastFrameIndex(cur_frame)) {
334 if (cur_frame_index == getLastFrameIndex(cur_frame) && static_cast<float>(cur_frame_index) == cur_frame_index_f) {
332335 if (type == ANIMTYPE_PLAY_ONCE)
333336 active_frame_triggered = true;
334337
3232
3333 #include "CommonIncludes.h"
3434 #include "Utils.h"
35 #include "AnimationMedia.h"
3536
3637 class Animation {
3738 protected:
3940
4041 const std::string name;
4142 const int type;
42 Image *sprite;
43 AnimationMedia *sprite;
4344 uint8_t blend_mode;
4445 uint8_t alpha_mod;
4546 Color color_mod;
6263
6364 // Frame data, all vectors must have the same length:
6465 // These are indexed as 8*cur_frame_index + direction.
65 std::vector<Rect> gfx; // position on the spritesheet to be used.
66 std::vector<std::pair<Image*, Rect> > gfx; // position on the spritesheet to be used.
6667 std::vector<Point> render_offset; // "virtual point on the floor"
6768 std::vector<unsigned short> frames; // a list of frames to play on each tick
6869
8586 };
8687
8788 public:
88 Animation(const std::string &_name, const std::string &_type, Image *_sprite, uint8_t _blend_mode, uint8_t _alpha_mod, Color _color_mod);
89 Animation(const std::string &_name, const std::string &_type, AnimationMedia *_sprite, uint8_t _blend_mode, uint8_t _alpha_mod, Color _color_mod);
8990
9091 // Traditional way to create an animation.
9192 // The frames are stored in a grid like fashion, so the individual frame
100101 void setup(unsigned short _frames, unsigned short _duration, unsigned short _maxkinds = 8);
101102
102103 // kind can be used for direction(enemies, hero) or randomness(powers)
103 void addFrame(unsigned short index, unsigned short kind, const Rect& rect, const Point& _render_offset);
104 void addFrame(unsigned short index, unsigned short kind, const Rect& rect, const Point& _render_offset, const std::string &key);
104105
105106 // advance the animation one frame
106107 void advanceFrame();
0 /*
1 Copyright © 2020 bloodhero
2 Copyright © 2020 Justin Jacobs
3
4 This file is part of FLARE.
5
6 FLARE is free software: you can redistribute it and/or modify it under the terms
7 of the GNU General Public License as published by the Free Software Foundation,
8 either version 3 of the License, or (at your option) any later version.
9
10 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
11 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
12 PARTICULAR PURPOSE. See the GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License along with
15 FLARE. If not, see http://www.gnu.org/licenses/
16 */
17
18 #include "AnimationMedia.h"
19 #include "RenderDevice.h"
20 #include "SharedResources.h"
21
22 AnimationMedia::AnimationMedia()
23 : first_key("") {
24 }
25
26 AnimationMedia::~AnimationMedia() {
27 }
28
29 void AnimationMedia::loadImage(std::string path, std::string key) {
30 Image* loaded_img = render_device->loadImage(path, RenderDevice::ERROR_NORMAL);
31 if (!loaded_img)
32 return;
33
34 if (sprites.find(key) == sprites.end()) {
35 sprites[key] = loaded_img;
36 }
37 else {
38 sprites[key]->unref();
39 sprites[key] = loaded_img;
40 }
41
42 if (sprites.size() == 1) {
43 first_key = key;
44 }
45 }
46
47 Image* AnimationMedia::getImageFromKey(std::string key) {
48 std::map<std::string, Image*>::iterator it = sprites.find(key);
49 if (it != sprites.end()) {
50 return it->second;
51 }
52 else if (!sprites.empty()) {
53 return sprites[first_key];
54 }
55
56 return NULL;
57 }
58
59 void AnimationMedia::unref() {
60 std::map<std::string, Image*>::iterator it;
61 for (it = sprites.begin(); it != sprites.end(); it++) {
62 it->second->unref();
63 }
64 sprites.clear();
65 }
66
0 /*
1 Copyright © 2020 bloodhero
2 Copyright © 2020 Justin Jacobs
3
4 This file is part of FLARE.
5
6 FLARE is free software: you can redistribute it and/or modify it under the terms
7 of the GNU General Public License as published by the Free Software Foundation,
8 either version 3 of the License, or (at your option) any later version.
9
10 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
11 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
12 PARTICULAR PURPOSE. See the GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License along with
15 FLARE. If not, see http://www.gnu.org/licenses/
16 */
17
18 #ifndef ANIMATION_MEDIA_H
19 #define ANIMATION_MEDIA_H
20
21 #include "CommonIncludes.h"
22
23 class AnimationMedia {
24 private:
25 std::map<std::string, Image*> sprites;
26 std::string first_key;
27
28 public:
29 AnimationMedia();
30 ~AnimationMedia();
31 void loadImage(std::string path, std::string key);
32 Image* getImageFromKey(std::string key);
33 void unref();
34 };
35
36 #endif
5656 : name(animationname)
5757 , loaded(false)
5858 , parent(NULL)
59 , animations()
60 , sprite(NULL) {
61 defaultAnimation = new Animation("default", "play_once", NULL, Renderable::BLEND_NORMAL, 255, Color(255,255,255));
59 , animations() {
60 sprite = new AnimationMedia();
61 defaultAnimation = new Animation("default", "play_once", sprite, Renderable::BLEND_NORMAL, 255, Color(255,255,255));
6262 defaultAnimation->setupUncompressed(Point(), Point(), 0, 1, 0);
6363 }
6464
6868
6969 FileParser parser;
7070 // @CLASS AnimationSet|Description of animations in animations/
71 if (!parser.open(name, FileParser::MOD_FILE, FileParser::ERROR_NORMAL))
71 if (name.empty() || !parser.open(name, FileParser::MOD_FILE, FileParser::ERROR_NORMAL))
7272 return;
7373
7474 std::string _name = "";
110110 }
111111 if (parser.section.empty()) {
112112 if (parser.key == "image") {
113 // @ATTR image|filename|Filename of sprite-sheet image.
114 if (sprite != NULL) {
115 parser.error("AnimationSet: Multiple images specified. Dragons be here!");
116 Utils::logErrorDialog("AnimationSet: Multiple images specified. Dragons be here!");
117 mods->resetModConfig();
118 Utils::Exit(128);
119 }
120
121 sprite = render_device->loadImage(parser.val, RenderDevice::ERROR_NORMAL);
113 // @ATTR image|filename, string : Filename, ID|Filename of sprite-sheet image along with an identifier string. The identifier string may be omitted if there is only a single image.
114 std::string img_filename = Parse::popFirstString(parser.val);
115 std::string img_id = Parse::popFirstString(parser.val);
116 sprite->loadImage(img_filename, img_id);
122117 }
123118 else if (parser.key == "render_size") {
124119 // @ATTR render_size|int, int : Width, Height|Width and height of animation.
191186 }
192187 }
193188 else if (parser.key == "frame") {
194 // @ATTR animation.frame|int, int, int, int, int, int, int, int : Index, Direction, X, Y, Width, Height, X offset, Y offset|A single frame of a compressed animation.
189 // @ATTR animation.frame|int, int, int, int, int, int, int, int, string: Index, Direction, X, Y, Width, Height, X offset, Y offset, Image ID|A single frame of a compressed animation. The image ID may be omitted, in which case the first available image will be used.
195190 if (compressed_loading == false) { // first frame statement in section
196191 newanim = new Animation(_name, type, sprite, blend_mode, alpha_mod, color_mod);
197192 newanim->setup(frames, duration);
201196 animations.push_back(newanim);
202197 compressed_loading = true;
203198 }
204 // frame = index, direction, x, y, w, h, offsetx, offsety
199 // frame = index, direction, x, y, w, h, offsetx, offsety, image
205200 Rect r;
206201 Point offset;
207202 const unsigned short index = static_cast<unsigned short>(Parse::popFirstInt(parser.val));
212207 r.h = Parse::popFirstInt(parser.val);
213208 offset.x = Parse::popFirstInt(parser.val);
214209 offset.y = Parse::popFirstInt(parser.val);
215 newanim->addFrame(index, direction, r, offset);
210 std::string key = parser.val;
211 newanim->addFrame(index, direction, r, offset, key);
216212 }
217213 else {
218214 parser.error("AnimationSet: '%s' is not a valid key.", parser.key.c_str());
249245 for (unsigned i = 0; i < animations.size(); ++i)
250246 delete animations[i];
251247 delete defaultAnimation;
252 }
253
248 delete sprite;
249 }
250
2020 #define ANIMATION_SET_H
2121
2222 #include "CommonIncludes.h"
23 #include "AnimationMedia.h"
2324
2425 class Animation;
2526
4445
4546 std::vector<Animation*> animations;
4647
47 Image *sprite;
48 AnimationMedia *sprite;
4849
4950 explicit AnimationSet(const std::string &animationname);
5051 AnimationSet(const AnimationSet &a); // copy constructor not implemented.
3131 #include "CommonIncludes.h"
3232 #include "CursorManager.h"
3333 #include "EnemyGroupManager.h"
34 #include "Enemy.h"
35 #include "EnemyManager.h"
34 #include "Entity.h"
35 #include "EntityManager.h"
3636 #include "EngineSettings.h"
3737 #include "FileParser.h"
3838 #include "InputState.h"
3939 #include "MapRenderer.h"
4040 #include "MenuActionBar.h"
4141 #include "MenuExit.h"
42 #include "MenuGameOver.h"
4243 #include "MenuManager.h"
4344 #include "MessageEngine.h"
4445 #include "ModManager.h"
6970 , time_played(0)
7071 , questlog_dismissed(false)
7172 , using_main1(false)
72 , using_main2(false) {
73 , using_main2(false)
74 , prev_hp(0)
75 , playing_lowhp(false)
76 , teleport_camera_lock(false) {
7377
7478 init();
7579
122126
123127 // other init
124128 sprites = 0;
125 stats.cur_state = StatBlock::AVATAR_STANCE;
129 stats.cur_state = StatBlock::ENTITY_STANCE;
126130 if (mapr->hero_pos_enabled) {
127131 stats.pos.x = mapr->hero_pos.x;
128132 stats.pos.y = mapr->hero_pos.y;
155159 revertPowers = false;
156160 last_transform = "";
157161
162 power_cooldown_timers.clear();
163 power_cast_timers.clear();
164
158165 // Find untransform power index to use for manual untransfrom ability
159166 untransform_power = 0;
160 for (unsigned id=0; id<powers->powers.size(); id++) {
161 if (powers->powers[id].spawn_type == "untransform" && powers->powers[id].required_items.empty()) {
162 untransform_power = id;
163 break;
164 }
165 }
166
167 power_cooldown_timers.clear();
168 power_cooldown_timers.resize(powers->powers.size());
169 power_cast_timers.clear();
170 power_cast_timers.resize(powers->powers.size());
171
167 std::map<PowerID, Power>::iterator power_it;
168 for (power_it = powers->powers.begin(); power_it != powers->powers.end(); ++power_it) {
169 if (untransform_power == 0 && power_it->second.required_items.empty() && power_it->second.spawn_type == "untransform") {
170 untransform_power = power_it->first;
171 }
172
173 power_cooldown_timers[power_it->first] = Timer();
174 power_cast_timers[power_it->first] = Timer();
175 }
172176 }
173177
174178 void Avatar::handleNewMap() {
175179 cursor_enemy = NULL;
176180 lock_enemy = NULL;
181 playing_lowhp = false;
177182 }
178183
179184 /**
291296
292297
293298 bool Avatar::pressing_move() {
294 if (!allow_movement) {
299 if (!allow_movement || teleport_camera_lock) {
295300 return false;
296301 }
297302 else if (stats.effects.knockback_speed != 0) {
309314 }
310315
311316 void Avatar::set_direction() {
317 if (teleport_camera_lock || !set_dir_timer.isEnd())
318 return;
319
320 int old_dir = stats.direction;
321
312322 // handle direction changes
313323 if (settings->mouse_move) {
314 FPoint target = Utils::screenToMap(inpt->mouse.x, inpt->mouse.y, stats.pos.x, stats.pos.y);
324 FPoint target = Utils::screenToMap(inpt->mouse.x, inpt->mouse.y, mapr->cam.pos.x, mapr->cam.pos.y);
315325 stats.direction = Utils::calcDirection(stats.pos.x, stats.pos.y, target.x, target.y);
316326 }
317327 else {
329339 (inpt->pressing[Input::LEFT] && !inpt->lock[Input::LEFT]) || (inpt->pressing[Input::RIGHT] && !inpt->lock[Input::RIGHT])))
330340 stats.direction = static_cast<unsigned char>((stats.direction == 7) ? 0 : stats.direction + 1);
331341 }
342
343 // give direction changing a 100ms cooldown
344 // this allows the player to quickly change direction on their own without becoming overly "jittery"
345 // the cooldown can be ended by releasing the move button, but the cooldown is so fast that it doesn't matter much (maybe a speed run tactic?)
346 if (stats.direction != old_dir)
347 set_dir_timer.setDuration(settings->max_frames_per_sec / 10);
332348 }
333349
334350 /**
337353 * - move the avatar based on buttons pressed
338354 * - calculate the next frame of animation
339355 * - calculate camera position based on avatar position
340 *
341 * @param action The actionbar power activated and the target. action.power == 0 means no power.
342 * @param restrict_power_use Whether or not to allow power usage on mouse1
343 * @param npc True if the player is talking to an NPC. Can limit ability to move/attack in certain conditions
344356 */
345 void Avatar::logic(std::vector<ActionData> &action_queue, bool restrict_power_use) {
357 void Avatar::logic() {
358 bool restrict_power_use = false;
359 if (settings->mouse_move) {
360 if(inpt->pressing[mm_key] && !inpt->pressing[Input::SHIFT] && !menu->act->isWithinSlots(inpt->mouse) && !menu->act->isWithinMenus(inpt->mouse)) {
361 restrict_power_use = true;
362 }
363 }
364
346365 // clear current space to allow correct movement
347366 mapr->collider.unblock(stats.pos.x, stats.pos.y);
348367
355374
356375 // handle when the player stops blocking
357376 if (stats.effects.triggered_block && !stats.blocking) {
358 stats.cur_state = StatBlock::AVATAR_STANCE;
377 stats.cur_state = StatBlock::ENTITY_STANCE;
359378 stats.effects.triggered_block = false;
360379 stats.effects.clearTriggerEffects(Power::TRIGGER_BLOCK);
361380 stats.refresh_stats = true;
381 stats.block_power = 0;
362382 }
363383
364384 stats.logic();
385
386 // alert on low health
387 if (isDroppedToLowHp()) {
388 // show message if set
389 if (isLowHpMessageEnabled()) {
390 std::stringstream ss;
391 ss << msg->get("Your health is low!");
392 logMsg(ss.str(), MSG_NORMAL);
393 }
394 // play a sound if set in settings
395 if (isLowHpSoundEnabled() && !playing_lowhp) {
396 // if looping, then do not cleanup
397 snd->play(sound_lowhp, "lowhp", snd->NO_POS, stats.sfx_lowhp_loop, !stats.sfx_lowhp_loop);
398 playing_lowhp = true;
399 }
400 }
401 // if looping, stop sounds when HP recovered above threshold
402 if (isLowHpSoundEnabled() && !isLowHp() && playing_lowhp && stats.sfx_lowhp_loop) {
403 snd->pauseChannel("lowhp");
404 playing_lowhp = false;
405 }
406 else if (isLowHpSoundEnabled() && isLowHp() && !playing_lowhp && stats.sfx_lowhp_loop) {
407 snd->play(sound_lowhp, "lowhp", snd->NO_POS, stats.sfx_lowhp_loop, !stats.sfx_lowhp_loop);
408 playing_lowhp = true;
409 }
410 else if (!isLowHpSoundEnabled() && playing_lowhp) {
411 snd->pauseChannel("lowhp");
412 playing_lowhp = false;
413 }
414
415 // we can not use stats.prev_hp here
416 prev_hp = stats.hp;
365417
366418 // check level up
367419 if (stats.level < eset->xp.getMaxLevel() && stats.xp >= eset->xp.getLevelXP(stats.level + 1)) {
368420 stats.level_up = true;
369 stats.level++;
421 stats.level = eset->xp.getLevelFromXP(stats.xp);
370422 std::stringstream ss;
371423 ss << msg->get("Congratulations, you have reached level %d!", stats.level);
372 if (stats.level < stats.max_spendable_stat_points) {
373 ss << " " << msg->get("You may increase one attribute through the Character Menu.");
424 if (pc->stats.stat_points_per_level > 0) {
425 ss << " " << msg->get("You may increase one or more attributes through the Character Menu.");
374426 newLevelNotification = true;
427 }
428 if (pc->stats.power_points_per_level > 0) {
429 ss << " " << msg->get("You may unlock one or more abilities through the Powers Menu.");
375430 }
376431 logMsg(ss.str(), MSG_NORMAL);
377432 stats.recalc();
378433 snd->play(sound_levelup, snd->DEFAULT_CHANNEL, snd->NO_POS, !snd->LOOP);
379434
380435 // if the player managed to level up while dead (e.g. via a bleeding creature), restore to life
381 if (stats.cur_state == StatBlock::AVATAR_DEAD) {
382 stats.cur_state = StatBlock::AVATAR_STANCE;
436 if (stats.cur_state == StatBlock::ENTITY_DEAD) {
437 stats.cur_state = StatBlock::ENTITY_STANCE;
383438 }
384439 }
385440
386441 // assist mouse movement
442 mm_key = settings->mouse_move_swap ? Input::MAIN2 : Input::MAIN1;
387443 if (!inpt->pressing[mm_key]) {
388444 drag_walking = false;
389445 }
407463 transform_map = mapr->getFilename();
408464 }
409465
410 int mm_attack_id = (settings->mouse_move_swap ? menu->act->getSlotPower(MenuActionBar::SLOT_MAIN2) : menu->act->getSlotPower(MenuActionBar::SLOT_MAIN1));
466 PowerID mm_attack_id = (settings->mouse_move_swap ? menu->act->getSlotPower(MenuActionBar::SLOT_MAIN2) : menu->act->getSlotPower(MenuActionBar::SLOT_MAIN1));
411467 bool mm_can_use_power = true;
412468
413469 if (settings->mouse_move) {
433489 }
434490 }
435491
492 if (teleport_camera_lock && Utils::calcDist(stats.pos, mapr->cam.pos) < 0.5f) {
493 teleport_camera_lock = false;
494 }
495
496 set_dir_timer.tick();
497 if (!pressing_move()) {
498 set_dir_timer.reset(Timer::END);
499 }
500
436501 if (!stats.effects.stun) {
437502 bool allowed_to_move;
438503 bool allowed_to_use_power = true;
439504
440505 switch(stats.cur_state) {
441 case StatBlock::AVATAR_STANCE:
506 case StatBlock::ENTITY_STANCE:
442507
443508 setAnimation("stance");
444509
467532 drag_walking = true;
468533 }
469534
470 stats.cur_state = StatBlock::AVATAR_RUN;
471 }
472 }
473
474 if (settings->mouse_move && settings->mouse_move_attack && cursor_enemy && mm_can_use_power && powers->checkCombatRange(mm_attack_id, &stats, cursor_enemy->stats.pos)) {
475 stats.cur_state = StatBlock::AVATAR_STANCE;
535 stats.cur_state = StatBlock::ENTITY_MOVE;
536 }
537 }
538
539 if (settings->mouse_move && settings->mouse_move_attack && cursor_enemy && !cursor_enemy->stats.hero_ally && mm_can_use_power && powers->checkCombatRange(mm_attack_id, &stats, cursor_enemy->stats.pos)) {
540 stats.cur_state = StatBlock::ENTITY_STANCE;
476541 lock_enemy = cursor_enemy;
477542 }
478543
479544 break;
480545
481 case StatBlock::AVATAR_RUN:
546 case StatBlock::ENTITY_MOVE:
482547
483548 setAnimation("run");
484549
494559
495560 // handle transition to STANCE
496561 if (!pressing_move()) {
497 stats.cur_state = StatBlock::AVATAR_STANCE;
562 stats.cur_state = StatBlock::ENTITY_STANCE;
498563 break;
499564 }
500565 else if (!move()) { // collide with wall
501 stats.cur_state = StatBlock::AVATAR_STANCE;
566 stats.cur_state = StatBlock::ENTITY_STANCE;
502567 break;
503568 }
504569 else if (settings->mouse_move && inpt->pressing[Input::SHIFT]) {
505570 // when moving with the mouse, pressing Shift should stop movement and begin attacking
506 stats.cur_state = StatBlock::AVATAR_STANCE;
571 stats.cur_state = StatBlock::ENTITY_STANCE;
507572 break;
508573 }
509574
510575 if (activeAnimation->getName() != "run")
511 stats.cur_state = StatBlock::AVATAR_STANCE;
512
513 if (settings->mouse_move && settings->mouse_move_attack && cursor_enemy && mm_can_use_power && powers->checkCombatRange(mm_attack_id, &stats, cursor_enemy->stats.pos)) {
514 stats.cur_state = StatBlock::AVATAR_STANCE;
576 stats.cur_state = StatBlock::ENTITY_STANCE;
577
578 if (settings->mouse_move && settings->mouse_move_attack && cursor_enemy && !cursor_enemy->stats.hero_ally && mm_can_use_power && powers->checkCombatRange(mm_attack_id, &stats, cursor_enemy->stats.pos)) {
579 stats.cur_state = StatBlock::ENTITY_STANCE;
515580 lock_enemy = cursor_enemy;
516581 }
517582
518583 break;
519584
520 case StatBlock::AVATAR_ATTACK:
585 case StatBlock::ENTITY_POWER:
521586
522587 setAnimation(attack_anim);
523588
528593 if (activeAnimation->isFirstFrame()) {
529594 float attack_speed = (stats.effects.getAttackSpeed(attack_anim) * powers->powers[current_power].attack_speed) / 100.0f;
530595 activeAnimation->setSpeed(attack_speed);
596 for (size_t i=0; i<anims.size(); ++i) {
597 if (anims[i])
598 anims[i]->setSpeed(attack_speed);
599 }
531600 playAttackSound(attack_anim);
532601 power_cast_timers[current_power].setDuration(activeAnimation->getDuration());
533602 }
547616
548617 // animation is done, switch back to normal stance
549618 if ((activeAnimation->isLastFrame() && stats.state_timer.isEnd()) || activeAnimation->getName() != attack_anim) {
550 stats.cur_state = StatBlock::AVATAR_STANCE;
619 stats.cur_state = StatBlock::ENTITY_STANCE;
551620 stats.cooldown.reset(Timer::BEGIN);
552621 allowed_to_use_power = false;
553622 stats.prevent_interrupt = false;
562631
563632 break;
564633
565 case StatBlock::AVATAR_BLOCK:
634 case StatBlock::ENTITY_BLOCK:
566635
567636 setAnimation("block");
568637
570639
571640 break;
572641
573 case StatBlock::AVATAR_HIT:
642 case StatBlock::ENTITY_HIT:
574643
575644 setAnimation("hit");
576645
584653 }
585654
586655 if (activeAnimation->getTimesPlayed() >= 1 || activeAnimation->getName() != "hit") {
587 stats.cur_state = StatBlock::AVATAR_STANCE;
656 stats.cur_state = StatBlock::ENTITY_STANCE;
588657 if (settings->mouse_move) {
589658 drag_walking = true;
590659 }
592661
593662 break;
594663
595 case StatBlock::AVATAR_DEAD:
664 case StatBlock::ENTITY_DEAD:
596665 allowed_to_use_power = false;
597666
598667 if (stats.effects.triggered_death) break;
606675
607676 if (!stats.corpse && activeAnimation->isFirstFrame() && activeAnimation->getTimesPlayed() < 1) {
608677 stats.effects.clearEffects();
678 stats.powers_passive.clear();
609679
610680 // reset power cooldowns
611 for (size_t i = 0; i < power_cooldown_timers.size(); i++) {
612 power_cooldown_timers[i].reset(Timer::END);
613 power_cast_timers[i].reset(Timer::END);
681 std::map<size_t, Timer>::iterator pct_it;
682 for (pct_it = power_cooldown_timers.begin(); pct_it != power_cooldown_timers.end(); ++pct_it) {
683 pct_it->second.reset(Timer::END);
684 power_cast_timers[pct_it->first].reset(Timer::END);
614685 }
615686
616687 // close menus in GameStatePlay
617688 close_menus = true;
618689
619690 playSound(Entity::SOUND_DIE);
691
692 logMsg(msg->get("You are defeated."), MSG_NORMAL);
620693
621694 if (stats.permadeath) {
622695 // ignore death penalty on permadeath and instead delete the player's saved game
623696 stats.death_penalty = false;
624697 Utils::removeSaveDir(save_load->getGameSlot());
625698 menu->exit->disableSave();
626
627 logMsg(Utils::substituteVarsInString(msg->get("You are defeated. Game over! ${INPUT_CONTINUE} to exit to Title."), this), MSG_NORMAL);
699 menu->game_over->disableSave();
628700 }
629701 else {
630702 // raise the death penalty flag. This is handled in MenuInventory
631703 stats.death_penalty = true;
632
633 logMsg(Utils::substituteVarsInString(msg->get("You are defeated. ${INPUT_CONTINUE} to continue."), this), MSG_NORMAL);
634704 }
635705
636706 // if the player is attacking, we need to block further input
638708 inpt->lock[Input::MAIN1] = true;
639709 }
640710
641 if (activeAnimation->getTimesPlayed() >= 1 || activeAnimation->getName() != "die") {
711 if (!stats.corpse && (activeAnimation->getTimesPlayed() >= 1 || activeAnimation->getName() != "die")) {
642712 stats.corpse = true;
713 menu->game_over->visible = true;
643714 }
644715
645716 // allow respawn with Accept if not permadeath
646 if ((inpt->pressing[Input::ACCEPT] || (settings->touchscreen && inpt->pressing[Input::MAIN1] && !inpt->lock[Input::MAIN1])) && stats.corpse) {
647 if (inpt->pressing[Input::ACCEPT]) inpt->lock[Input::ACCEPT] = true;
648 if (settings->touchscreen && inpt->pressing[Input::MAIN1]) inpt->lock[Input::MAIN1] = true;
717 if (menu->game_over->visible && menu->game_over->continue_clicked) {
718 menu->game_over->close();
719
649720 mapr->teleportation = true;
650721 mapr->teleport_mapname = mapr->respawn_map;
722
651723 if (stats.permadeath) {
652724 // set these positions so it doesn't flash before jumping to Title
653725 mapr->teleport_destination.x = stats.pos.x;
674746
675747 for (unsigned i=0; i<action_queue.size(); i++) {
676748 ActionData &action = action_queue[i];
677 const Power &power = powers->powers[action.power];
749 PowerID power_id = powers->checkReplaceByEffect(action.power, &stats);
750 const Power &power = powers->powers[power_id];
678751
679752 if (power.type == Power::TYPE_BLOCK)
680753 blocking = true;
681754
682 if (action.power != 0 && (stats.cooldown.isEnd() || action.instant_item)) {
755 if (power_id != 0 && (stats.cooldown.isEnd() || action.instant_item)) {
683756 FPoint target = action.target;
684757
685758 // check requirements
686 if ((stats.cur_state == StatBlock::AVATAR_ATTACK || stats.cur_state == StatBlock::AVATAR_HIT) && !action.instant_item)
759 if ((stats.cur_state == StatBlock::ENTITY_POWER || stats.cur_state == StatBlock::ENTITY_HIT) && !action.instant_item)
687760 continue;
688 if (!stats.canUsePower(action.power, !StatBlock::CAN_USE_PASSIVE))
761 if (!stats.canUsePower(power_id, !StatBlock::CAN_USE_PASSIVE))
689762 continue;
690763 if (power.requires_los && !mapr->collider.lineOfSight(stats.pos.x, stats.pos.y, target.x, target.y))
691764 continue;
692765 if (power.requires_empty_target && !mapr->collider.isEmpty(target.x, target.y))
693766 continue;
694 if (!power_cooldown_timers[action.power].isEnd())
767 if (!power_cooldown_timers[power_id].isEnd())
695768 continue;
696 if (!powers->hasValidTarget(action.power, &stats, target))
769 if (!powers->hasValidTarget(power_id, &stats, target))
697770 continue;
698771
699772 // automatically target the selected enemy with melee attacks
707780 }
708781
709782 if (power.new_state != Power::STATE_INSTANT) {
710 current_power = action.power;
783 current_power = power_id;
711784 act_target = target;
712785 attack_anim = power.attack_anim;
713786 }
726799
727800 switch (power.new_state) {
728801 case Power::STATE_ATTACK: // handle attack powers
729 stats.cur_state = StatBlock::AVATAR_ATTACK;
802 stats.cur_state = StatBlock::ENTITY_POWER;
730803 break;
731804
732805 case Power::STATE_INSTANT: // handle instant powers
733 powers->activate(action.power, &stats, target);
734 power_cooldown_timers[action.power].setDuration(power.cooldown);
806 powers->activate(power_id, &stats, target);
807 power_cooldown_timers[power_id].setDuration(power.cooldown);
735808 break;
736809
737810 default:
738811 if (power.type == Power::TYPE_BLOCK) {
739 stats.cur_state = StatBlock::AVATAR_BLOCK;
740 powers->activate(action.power, &stats, target);
812 stats.cur_state = StatBlock::ENTITY_BLOCK;
813 powers->activate(power_id, &stats, target);
741814 stats.refresh_stats = true;
742815 }
743816 break;
745818
746819 // if the player is attacking, show the attack cursor
747820 attack_cursor = (
748 stats.cur_state == StatBlock::AVATAR_ATTACK &&
821 stats.cur_state == StatBlock::ENTITY_POWER &&
749822 !power.buff && !power.buff_teleport &&
750823 power.type != Power::TYPE_TRANSFORM &&
751824 power.type != Power::TYPE_BLOCK &&
760833
761834 }
762835
763 // calc new cam position from player position
764 // cam is focused at player position
765 float cam_dx = (Utils::calcDist(FPoint(mapr->cam.x, stats.pos.y), stats.pos)) / eset->misc.camera_speed;
766 float cam_dy = (Utils::calcDist(FPoint(stats.pos.x, mapr->cam.y), stats.pos)) / eset->misc.camera_speed;
767
768 if (mapr->cam.x < stats.pos.x) {
769 mapr->cam.x += cam_dx;
770 if (mapr->cam.x > stats.pos.x)
771 mapr->cam.x = stats.pos.x;
772 }
773 else if (mapr->cam.x > stats.pos.x) {
774 mapr->cam.x -= cam_dx;
775 if (mapr->cam.x < stats.pos.x)
776 mapr->cam.x = stats.pos.x;
777 }
778 if (mapr->cam.y < stats.pos.y) {
779 mapr->cam.y += cam_dy;
780 if (mapr->cam.y > stats.pos.y)
781 mapr->cam.y = stats.pos.y;
782 }
783 else if (mapr->cam.y > stats.pos.y) {
784 mapr->cam.y -= cam_dy;
785 if (mapr->cam.y < stats.pos.y)
786 mapr->cam.y = stats.pos.y;
787 }
836 // update camera
837 mapr->cam.setTarget(stats.pos);
788838
789839 // check for map events
790840 mapr->checkEvents(stats.pos);
791841
792842 // decrement all cooldowns
793 for (unsigned i = 0; i < power_cooldown_timers.size(); i++) {
794 power_cooldown_timers[i].tick();
795 power_cast_timers[i].tick();
843 std::map<size_t, Timer>::iterator pct_it;
844 for (pct_it = power_cooldown_timers.begin(); pct_it != power_cooldown_timers.end(); ++pct_it) {
845 pct_it->second.tick();
846 power_cast_timers[pct_it->first].tick();
796847 }
797848
798849 // make the current square solid
801852 if (stats.state_timer.isEnd() && stats.hold_state)
802853 stats.hold_state = false;
803854
804 if (stats.cur_state != StatBlock::AVATAR_ATTACK && stats.charge_speed != 0.0f)
855 if (stats.cur_state != StatBlock::ENTITY_POWER && stats.charge_speed != 0.0f)
805856 stats.charge_speed = 0.0f;
806857 }
807858
808859 void Avatar::transform() {
860 // dead players can't transform
861 if (stats.hp <= 0)
862 return;
863
809864 // calling a transform power locks the actionbar, so we unlock it here
810865 inpt->unlockActionBar();
811866
852907 animationSet = anim->getAnimationSet(charmed_stats->animations);
853908 delete activeAnimation;
854909 activeAnimation = animationSet->getAnimation("");
855 stats.cur_state = StatBlock::AVATAR_STANCE;
910 stats.cur_state = StatBlock::ENTITY_STANCE;
856911
857912 // base stats
858913 for (int i=0; i<Stats::COUNT; ++i) {
916971 animationSet = anim->getAnimationSet("animations/hero.txt");
917972 delete activeAnimation;
918973 activeAnimation = animationSet->getAnimation("");
919 stats.cur_state = StatBlock::AVATAR_STANCE;
974 stats.cur_state = StatBlock::ENTITY_STANCE;
920975
921976 // This is a bit of a hack.
922977 // In order to switch to the stance animation, we can't already be in a stance animation
10141069 log_msg.push(std::pair<std::string, int>(str, type));
10151070 }
10161071
1072 // isLowHp returns true if health is below set threshold
1073 bool Avatar::isLowHp() {
1074 if (stats.hp == 0)
1075 return false;
1076 float hp_one_perc = static_cast<float>(std::max(stats.get(Stats::HP_MAX), 1)) / 100.0f;
1077 return static_cast<float>(stats.hp)/hp_one_perc < static_cast<float>(settings->low_hp_threshold);
1078 }
1079
1080 // isDroppedToLowHp returns true only if player hp just dropped below threshold
1081 bool Avatar::isDroppedToLowHp() {
1082 float hp_one_perc = static_cast<float>(std::max(stats.get(Stats::HP_MAX), 1)) / 100.0f;
1083 return static_cast<float>(stats.hp)/hp_one_perc < static_cast<float>(settings->low_hp_threshold) &&
1084 static_cast<float>(prev_hp)/hp_one_perc >= static_cast<float>(settings->low_hp_threshold);
1085 }
1086
1087 bool Avatar::isLowHpMessageEnabled() {
1088 return settings->low_hp_warning_type == settings->LHP_WARN_TEXT ||
1089 settings->low_hp_warning_type == settings->LHP_WARN_TEXT_CURSOR ||
1090 settings->low_hp_warning_type == settings->LHP_WARN_TEXT_SOUND ||
1091 settings->low_hp_warning_type == settings->LHP_WARN_ALL;
1092 }
1093
1094 bool Avatar::isLowHpSoundEnabled() {
1095 return settings->low_hp_warning_type == settings->LHP_WARN_SOUND ||
1096 settings->low_hp_warning_type == settings->LHP_WARN_TEXT_SOUND ||
1097 settings->low_hp_warning_type == settings->LHP_WARN_CURSOR_SOUND ||
1098 settings->low_hp_warning_type == settings->LHP_WARN_ALL;
1099 }
1100
1101 bool Avatar::isLowHpCursorEnabled() {
1102 return settings->low_hp_warning_type == settings->LHP_WARN_CURSOR ||
1103 settings->low_hp_warning_type == settings->LHP_WARN_TEXT_CURSOR ||
1104 settings->low_hp_warning_type == settings->LHP_WARN_CURSOR_SOUND ||
1105 settings->low_hp_warning_type == settings->LHP_WARN_ALL;
1106 }
1107
10171108 Avatar::~Avatar() {
10181109 if (stats.transformed && charmed_stats && charmed_stats->animations != "") {
10191110 anim->decreaseCount(charmed_stats->animations);
3030 #include "Entity.h"
3131 #include "Utils.h"
3232
33 class Enemy;
3433 class Entity;
3534 class StatBlock;
3635
3736 class ActionData {
3837 public:
39 int power;
38 PowerID power;
4039 unsigned hotkey;
4140 bool instant_item;
4241 FPoint target;
8180
8281 int mm_key; // mouse movement key
8382
83 Timer set_dir_timer;
84
85 bool isDroppedToLowHp();
86
8487 protected:
8588 virtual void resetActiveAnimation();
8689
104107 void loadGraphics(std::vector<Layer_gfx> _img_gfx);
105108 void loadStepFX(const std::string& stepname);
106109
107 void logic(std::vector<ActionData> &action_queue, bool restrict_power_use);
110 void logic();
108111
109112 // transformation handling
110113 bool isTransforming() {
116119
117120 void logMsg(const std::string& str, int type);
118121
122 bool isLowHp();
123 bool isLowHpMessageEnabled();
124 bool isLowHpSoundEnabled();
125 bool isLowHpCursorEnabled();
126
119127 std::vector<std::string> layer_reference_order;
120128 std::vector<std::vector<unsigned> > layer_def;
121129
124132 std::string attack_anim;
125133 bool setPowers;
126134 bool revertPowers;
127 int untransform_power;
135 PowerID untransform_power;
128136 StatBlock *hero_stats;
129137 StatBlock *charmed_stats;
130138 FPoint transform_pos;
131139 std::string transform_map;
132140
133141 // vars
134 int current_power;
142 PowerID current_power;
135143 FPoint act_target;
136144 bool drag_walking;
137145 bool newLevelNotification;
138146 bool respawn;
139147 bool close_menus;
140148 bool allow_movement;
141 std::vector<Timer> power_cooldown_timers;
142 std::vector<Timer> power_cast_timers;
143 Enemy* cursor_enemy; // enemy selected with the mouse cursor
144 Enemy* lock_enemy;
149 std::map<PowerID, Timer> power_cooldown_timers;
150 std::map<PowerID, Timer> power_cast_timers;
151 Entity* cursor_enemy; // enemy selected with the mouse cursor
152 Entity* lock_enemy;
145153 unsigned long time_played;
146154 bool questlog_dismissed;
147155 bool using_main1;
148156 bool using_main2;
157 int prev_hp;
158 bool playing_lowhp;
159 bool teleport_camera_lock;
160
161 std::vector<ActionData> action_queue;
149162 };
150163
151164 #endif
+0
-284
src/BehaviorAlly.cpp less more
0 /*
1 Copyright © 2013 Ryan Dansie
2 Copyright © 2014-2015 Justin Jacobs
3
4 This file is part of FLARE.
5
6 FLARE is free software: you can redistribute it and/or modify it under the terms
7 of the GNU General Public License as published by the Free Software Foundation,
8 either version 3 of the License, or (at your option) any later version.
9
10 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
11 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
12 PARTICULAR PURPOSE. See the GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License along with
15 FLARE. If not, see http://www.gnu.org/licenses/
16 */
17
18 #include "Avatar.h"
19 #include "BehaviorAlly.h"
20 #include "Enemy.h"
21 #include "EnemyManager.h"
22 #include "EngineSettings.h"
23 #include "MapRenderer.h"
24 #include "SharedGameResources.h"
25 #include "SharedResources.h"
26 #include "UtilsMath.h"
27
28 const float ALLY_FLEE_DISTANCE = 2;
29 const float ALLY_FOLLOW_DISTANCE_WALK = 5.5;
30 const float ALLY_FOLLOW_DISTANCE_STOP = 5;
31 const float ALLY_TELEPORT_DISTANCE = 40;
32
33 const unsigned short BLOCK_TICKS = 10;
34
35 BehaviorAlly::BehaviorAlly(Enemy *_e) : BehaviorStandard(_e) {
36 }
37
38 BehaviorAlly::~BehaviorAlly() {
39 }
40
41 void BehaviorAlly::findTarget() {
42 // dying enemies can't target anything
43 if (e->stats.cur_state == StatBlock::ENEMY_DEAD || e->stats.cur_state == StatBlock::ENEMY_CRITDEAD) return;
44
45 // stunned minions can't act
46 if (e->stats.effects.stun) return;
47
48 // check distance and line of sight between minion and hero
49 if (pc->stats.alive)
50 hero_dist = Utils::calcDist(e->stats.pos, pc->stats.pos);
51 else
52 hero_dist = 0;
53
54 //if the minion gets too far, transport it to the player pos
55 if(hero_dist > ALLY_TELEPORT_DISTANCE && !e->stats.in_combat) {
56 mapr->collider.unblock(e->stats.pos.x, e->stats.pos.y);
57 e->stats.pos.x = pc->stats.pos.x;
58 e->stats.pos.y = pc->stats.pos.y;
59 mapr->collider.block(e->stats.pos.x, e->stats.pos.y, MapCollision::IS_ALLY);
60 hero_dist = 0;
61 }
62
63 bool enemies_in_combat = false;
64 //enter combat because enemy is targeting the player or a summon
65 for (unsigned int i=0; i < enemym->enemies.size(); i++) {
66 if(enemym->enemies[i]->stats.in_combat && !enemym->enemies[i]->stats.hero_ally && enemym->enemies[i]->stats.hp > 0) {
67 Enemy* enemy = enemym->enemies[i];
68
69 //now work out the distance to the enemy and compare it to the distance to the current targer (we want to target the closest enemy)
70 if(enemies_in_combat) {
71 float enemy_dist = Utils::calcDist(e->stats.pos, enemy->stats.pos);
72 if (enemy_dist < target_dist) {
73 pursue_pos.x = enemy->stats.pos.x;
74 pursue_pos.y = enemy->stats.pos.y;
75 target_dist = enemy_dist;
76 }
77 }
78 else {
79 //minion is not already chasig another enemy so chase this one
80 pursue_pos.x = enemy->stats.pos.x;
81 pursue_pos.y = enemy->stats.pos.y;
82 target_dist = Utils::calcDist(e->stats.pos, enemy->stats.pos);
83 }
84
85 e->stats.in_combat = true;
86 enemies_in_combat = true;
87 }
88 }
89
90
91 //break combat if the player gets too far or all enemies die
92 if(!enemies_in_combat)
93 e->stats.in_combat = false;
94
95 // aggressive creatures are always in combat
96 if (e->stats.combat_style == StatBlock::COMBAT_AGGRESSIVE)
97 e->stats.in_combat = true;
98
99 //the default target is the player
100 if(!e->stats.in_combat) {
101 pursue_pos.x = pc->stats.pos.x;
102 pursue_pos.y = pc->stats.pos.y;
103 target_dist = hero_dist;
104 }
105
106 // check line-of-sight
107 if (target_dist < e->stats.threat_range && pc->stats.alive)
108 los = mapr->collider.lineOfSight(e->stats.pos.x, e->stats.pos.y, pursue_pos.x, pursue_pos.y);
109 else
110 los = false;
111
112 //if the player is blocked, all summons which the player is facing to move away for the specified frames
113 //need to set the flag player_blocked so that other allies know to get out of the way as well
114 //if hero is facing the summon
115 if(eset->misc.enable_ally_collision_ai) {
116 if(!enemym->player_blocked && hero_dist < ALLY_FLEE_DISTANCE
117 && mapr->collider.isFacing(pc->stats.pos.x,pc->stats.pos.y,pc->stats.direction,e->stats.pos.x,e->stats.pos.y)) {
118 enemym->player_blocked = true;
119 enemym->player_blocked_timer.reset(Timer::BEGIN);
120 }
121
122 bool player_closer_than_target = Utils::calcDist(e->stats.pos, pursue_pos) > Utils::calcDist(e->stats.pos, pc->stats.pos);
123
124 if(enemym->player_blocked && (!e->stats.in_combat || player_closer_than_target)
125 && mapr->collider.isFacing(pc->stats.pos.x,pc->stats.pos.y,pc->stats.direction,e->stats.pos.x,e->stats.pos.y)) {
126 fleeing = true;
127 pursue_pos = pc->stats.pos;
128 }
129 }
130
131 if(e->stats.effects.fear) fleeing = true;
132
133 // If we have a successful chance_flee roll, try to move to a safe distance
134 if (
135 e->stats.in_combat &&
136 e->stats.cur_state == StatBlock::ENEMY_STANCE &&
137 !move_to_safe_dist && hero_dist < e->stats.flee_range &&
138 hero_dist >= e->stats.melee_range &&
139 Math::percentChance(e->stats.chance_flee) &&
140 e->stats.flee_cooldown_timer.isEnd()
141 )
142 {
143 move_to_safe_dist = true;
144 }
145
146 if (move_to_safe_dist) fleeing = true;
147
148 if (fleeing) {
149 FPoint target_pos = pursue_pos;
150
151 std::vector<int> flee_dirs;
152
153 int middle_dir = Utils::calcDirection(target_pos.x, target_pos.y, e->stats.pos.x, e->stats.pos.y);
154 for (int i = -2; i <= 2; ++i) {
155 int test_dir = Utils::rotateDirection(middle_dir, i);
156
157 FPoint test_pos = Utils::calcVector(e->stats.pos, test_dir, 1);
158 if (mapr->collider.isValidPosition(test_pos.x, test_pos.y, e->stats.movement_type, MapCollision::COLLIDE_NORMAL)) {
159 if (test_dir == e->stats.direction) {
160 // if we're already moving in a good direction, favor it over other directions
161 flee_dirs.clear();
162 flee_dirs.push_back(test_dir);
163 break;
164 }
165 else {
166 flee_dirs.push_back(test_dir);
167 }
168 }
169 }
170
171 if (flee_dirs.empty()) {
172 // trapped and can't move
173 move_to_safe_dist = false;
174 fleeing = false;
175 }
176 else {
177 int index = Math::randBetween(0, static_cast<int>(flee_dirs.size())-1);
178 pursue_pos = Utils::calcVector(e->stats.pos, flee_dirs[index], 1);
179
180 if (e->stats.flee_timer.isEnd()) {
181 e->stats.flee_timer.reset(Timer::BEGIN);
182 }
183 }
184 }
185 }
186
187 void BehaviorAlly::checkMoveStateStance() {
188
189 // If the enemy is capable of fleeing and is at a safe distance, have it hold its position instead of moving
190 if (hero_dist >= e->stats.flee_range && e->stats.chance_flee > 0) return;
191
192 // try to move to the target if we're either:
193 // 1. too far away and chance_pursue roll succeeds
194 // 2. within range, but lack line-of-sight (required to attack)
195 bool should_move_to_target = (target_dist > e->stats.melee_range && Math::percentChance(e->stats.chance_pursue)) || (target_dist <= e->stats.melee_range && !los) || (hero_dist > ALLY_FOLLOW_DISTANCE_WALK);
196
197 if (should_move_to_target || fleeing) {
198 if(e->stats.in_combat && target_dist > e->stats.melee_range) {
199 if (e->move())
200 e->stats.cur_state = StatBlock::ENEMY_MOVE;
201 }
202
203 if((!e->stats.in_combat && hero_dist > ALLY_FOLLOW_DISTANCE_WALK) || fleeing) {
204 if (e->move()) {
205 e->stats.cur_state = StatBlock::ENEMY_MOVE;
206 }
207 else {
208 collided = true;
209 unsigned char prev_direction = e->stats.direction;
210
211 // hit an obstacle, try the next best angle
212 e->stats.direction = e->faceNextBest(pursue_pos.x, pursue_pos.y);
213 if (e->move()) {
214 e->stats.cur_state = StatBlock::ENEMY_MOVE;
215 }
216 else e->stats.direction = prev_direction;
217 }
218 }
219 }
220 }
221
222 void BehaviorAlly::checkMoveStateMove() {
223 bool can_attack = true;
224
225 if (!e->stats.cooldown.isEnd()) {
226 can_attack = false;
227 }
228 else {
229 can_attack = false;
230 for (size_t i = 0; i < e->stats.powers_ai.size(); ++i) {
231 if (e->stats.powers_ai[i].cooldown.isEnd()) {
232 can_attack = true;
233 break;
234 }
235 }
236 }
237 // in order to prevent infinite fleeing, we re-roll our chance to flee after a certain duration
238 bool stop_fleeing = can_attack && fleeing && e->stats.flee_timer.isEnd() && !Math::percentChance(e->stats.chance_flee);
239
240 if (!stop_fleeing && e->stats.flee_timer.isEnd()) {
241 // if the roll to continue fleeing succeeds, but the flee duration has expired, we don't want to reset the duration to the full amount
242 // instead, we scehdule the next re-roll to happen on the next frame
243 // this will continue until a roll fails, returning to the stance state
244 e->stats.flee_timer.setCurrent(1);
245 }
246
247 //if close enough to hero, stop miving
248 if((hero_dist < ALLY_FOLLOW_DISTANCE_STOP && !e->stats.in_combat && !fleeing)
249 || (target_dist < e->stats.melee_range && e->stats.in_combat && !fleeing)
250 || (move_to_safe_dist && target_dist >= e->stats.threat_range/2)
251 || stop_fleeing)
252 {
253 if (stop_fleeing) {
254 e->stats.flee_cooldown_timer.reset(Timer::BEGIN);
255 }
256 e->stats.cur_state = StatBlock::ENEMY_STANCE;
257 move_to_safe_dist = false;
258 fleeing = false;
259 }
260
261 // try to continue moving
262 else if (!e->move()) {
263 collided = true;
264 unsigned char prev_direction = e->stats.direction;
265 // hit an obstacle. Try the next best angle
266 e->stats.direction = e->faceNextBest(pursue_pos.x, pursue_pos.y);
267 if (!e->move()) {
268 //this prevents an ally trying to move perpendicular to a bridge if the player gets close to it in a certain position and gets blocked
269 if(enemym->player_blocked && !e->stats.in_combat) {
270 e->stats.direction = pc->stats.direction;
271 if (!e->move()) {
272 e->stats.cur_state = StatBlock::ENEMY_STANCE;
273 e->stats.direction = prev_direction;
274 }
275 }
276 else {
277 e->stats.cur_state = StatBlock::ENEMY_STANCE;
278 e->stats.direction = prev_direction;
279 }
280 }
281 }
282 }
283
+0
-35
src/BehaviorAlly.h less more
0 /*
1 Copyright © 2013 Ryan Dansie
2
3 This file is part of FLARE.
4
5 FLARE is free software: you can redistribute it and/or modify it under the terms
6 of the GNU General Public License as published by the Free Software Foundation,
7 either version 3 of the License, or (at your option) any later version.
8
9 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
10 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
11 PARTICULAR PURPOSE. See the GNU General Public License for more details.
12
13 You should have received a copy of the GNU General Public License along with
14 FLARE. If not, see http://www.gnu.org/licenses/
15 */
16
17
18 #ifndef BEHAVIORALLY_H
19 #define BEHAVIORALLY_H
20
21 #include "BehaviorStandard.h"
22
23 class BehaviorAlly : public BehaviorStandard {
24 public:
25 explicit BehaviorAlly(Enemy *_e);
26 virtual ~BehaviorAlly();
27 protected:
28 private:
29 virtual void findTarget();
30 virtual void checkMoveStateStance();
31 virtual void checkMoveStateMove();
32 };
33
34 #endif // BEHAVIORALLY_H
+0
-753
src/BehaviorStandard.cpp less more
0 /*
1 Copyright © 2012 Clint Bellanger
2 Copyright © 2012 Stefan Beller
3 Copyright © 2012-2016 Justin Jacobs
4
5 This file is part of FLARE.
6
7 FLARE is free software: you can redistribute it and/or modify it under the terms
8 of the GNU General Public License as published by the Free Software Foundation,
9 either version 3 of the License, or (at your option) any later version.
10
11 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13 PARTICULAR PURPOSE. See the GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License along with
16 FLARE. If not, see http://www.gnu.org/licenses/
17 */
18
19 #include "Animation.h"
20 #include "Avatar.h"
21 #include "BehaviorStandard.h"
22 #include "CommonIncludes.h"
23 #include "Enemy.h"
24 #include "EnemyManager.h"
25 #include "EngineSettings.h"
26 #include "MapRenderer.h"
27 #include "PowerManager.h"
28 #include "Settings.h"
29 #include "SharedGameResources.h"
30 #include "SharedResources.h"
31 #include "StatBlock.h"
32 #include "UtilsMath.h"
33
34 BehaviorStandard::BehaviorStandard(Enemy *_e)
35 : EnemyBehavior(_e)
36 , path()
37 , prev_target()
38 , collided(false)
39 , path_found(false)
40 , chance_calc_path(0)
41 , hero_dist(0)
42 , target_dist(0)
43 , pursue_pos(-1, -1)
44 , los(false)
45 , fleeing(false)
46 , move_to_safe_dist(false)
47 , turn_timer()
48 {
49 }
50
51 /**
52 * One frame of logic for this behavior
53 */
54 void BehaviorStandard::logic() {
55
56 // skip all logic if the enemy is dead and no longer animating
57 if (e->stats.corpse) {
58 e->stats.corpse_timer.tick();
59 return;
60 }
61
62 if (!e->stats.hero_ally) {
63 if (Utils::calcDist(e->stats.pos, pc->stats.pos) <= settings->encounter_dist)
64 e->stats.encountered = true;
65
66 if (!e->stats.encountered)
67 return;
68 }
69
70 doUpkeep();
71 findTarget();
72 checkPower();
73 checkMove();
74 updateState();
75
76 fleeing = false;
77 }
78
79 /**
80 * Various upkeep on stats
81 */
82 void BehaviorStandard::doUpkeep() {
83 // activate all passive powers
84 if (e->stats.hp > 0 || e->stats.effects.triggered_death)
85 powers->activatePassives(&e->stats);
86
87 e->stats.logic();
88
89 // bleeding to death
90 if (e->stats.bleed_source_type != -1) {
91 e->doRewards(e->stats.bleed_source_type);
92 e->stats.bleed_source_type = -1;
93 }
94
95 // check for teleport powers
96 if (e->stats.teleportation) {
97
98 mapr->collider.unblock(e->stats.pos.x,e->stats.pos.y);
99
100 e->stats.pos.x = e->stats.teleport_destination.x;
101 e->stats.pos.y = e->stats.teleport_destination.y;
102
103 mapr->collider.block(e->stats.pos.x,e->stats.pos.y, e->stats.hero_ally);
104
105 e->stats.teleportation = false;
106 }
107 }
108
109 /**
110 * Locate the player and set various targeting info
111 */
112 void BehaviorStandard::findTarget() {
113 // dying enemies can't target anything
114 if (e->stats.cur_state == StatBlock::ENEMY_DEAD || e->stats.cur_state == StatBlock::ENEMY_CRITDEAD) return;
115
116 float stealth_threat_range = (e->stats.threat_range * (100 - static_cast<float>(e->stats.hero_stealth))) / 100;
117
118 // stunned enemies can't act
119 if (e->stats.effects.stun) return;
120
121 // check distance and line of sight between enemy and hero
122 if (pc->stats.alive)
123 hero_dist = Utils::calcDist(e->stats.pos, pc->stats.pos);
124 else
125 hero_dist = 0;
126
127
128 // aggressive enemies are always in combat
129 if (!e->stats.in_combat && e->stats.combat_style == StatBlock::COMBAT_AGGRESSIVE) {
130 e->stats.join_combat = true;
131 }
132
133 // check entering combat (because the player got too close)
134 if (e->stats.alive && !e->stats.in_combat && los && hero_dist < stealth_threat_range && e->stats.combat_style != StatBlock::COMBAT_PASSIVE) {
135 e->stats.join_combat = true;
136 }
137
138 // check entering combat (because the player hit the enemy)
139 if (e->stats.join_combat) {
140 e->stats.in_combat = true;
141
142 StatBlock::AIPower* ai_power = e->stats.getAIPower(StatBlock::AI_POWER_BEACON);
143 if (ai_power != NULL) {
144 powers->activate(ai_power->id, &e->stats, e->stats.pos); //emit beacon
145 }
146
147 ai_power = e->stats.getAIPower(StatBlock::AI_POWER_JOIN_COMBAT);
148 if (ai_power != NULL) {
149 e->stats.cur_state = StatBlock::ENEMY_POWER;
150 e->stats.activated_power = ai_power;
151 }
152
153 e->stats.join_combat = false;
154 }
155
156 // check exiting combat (player died or got too far away)
157 if (e->stats.in_combat && hero_dist > (e->stats.threat_range_far) && !e->stats.join_combat && e->stats.combat_style != StatBlock::COMBAT_AGGRESSIVE) {
158 e->stats.in_combat = false;
159 }
160
161 // check exiting combat (player or enemy died)
162 if ((!e->stats.alive || !pc->stats.alive) && e->stats.combat_style != StatBlock::COMBAT_AGGRESSIVE) {
163 e->stats.in_combat = false;
164 }
165
166 // by default, the enemy pursues the hero directly
167 pursue_pos.x = pc->stats.pos.x;
168 pursue_pos.y = pc->stats.pos.y;
169 target_dist = hero_dist;
170
171
172 //if there are player allies closer than the hero, target an ally instead
173 if(e->stats.in_combat) {
174 for (unsigned int i=0; i < enemym->enemies.size(); i++) {
175 if(!enemym->enemies[i]->stats.corpse && enemym->enemies[i]->stats.hero_ally) {
176 //now work out the distance to the minion and compare it to the distance to the current targer (we want to target the closest ally)
177 float ally_dist = Utils::calcDist(e->stats.pos, enemym->enemies[i]->stats.pos);
178 if (ally_dist < target_dist) {
179 pursue_pos.x = enemym->enemies[i]->stats.pos.x;
180 pursue_pos.y = enemym->enemies[i]->stats.pos.y;
181 target_dist = ally_dist;
182 }
183 }
184 }
185 }
186
187 // if we just started wandering, set the first waypoint
188 if (e->stats.wander && e->stats.waypoints.empty()) {
189 FPoint waypoint = getWanderPoint();
190 e->stats.waypoints.push(waypoint);
191 e->stats.waypoint_timer.reset(Timer::BEGIN);
192 }
193
194 // if we're not in combat, pursue the next waypoint
195 if (!(e->stats.in_combat || e->stats.waypoints.empty())) {
196 FPoint waypoint = e->stats.waypoints.front();
197 pursue_pos.x = waypoint.x;
198 pursue_pos.y = waypoint.y;
199 }
200
201 // check line-of-sight
202 if (target_dist < e->stats.threat_range && pc->stats.alive)
203 los = mapr->collider.lineOfSight(e->stats.pos.x, e->stats.pos.y, pc->stats.pos.x, pc->stats.pos.y);
204 else
205 los = false;
206
207 if(e->stats.effects.fear) fleeing = true;
208
209 // If we have a successful chance_flee roll, try to move to a safe distance
210 if (
211 e->stats.in_combat &&
212 e->stats.cur_state == StatBlock::ENEMY_STANCE &&
213 !move_to_safe_dist && hero_dist < e->stats.flee_range &&
214 hero_dist >= e->stats.melee_range &&
215 Math::percentChance(e->stats.chance_flee) &&
216 e->stats.flee_cooldown_timer.isEnd()
217 )
218 {
219 move_to_safe_dist = true;
220 }
221
222 if (move_to_safe_dist) fleeing = true;
223
224 if (fleeing) {
225 FPoint target_pos = pursue_pos;
226
227 std::vector<int> flee_dirs;
228
229 int middle_dir = Utils::calcDirection(target_pos.x, target_pos.y, e->stats.pos.x, e->stats.pos.y);
230 for (int i = -2; i <= 2; ++i) {
231 int test_dir = Utils::rotateDirection(middle_dir, i);
232
233 FPoint test_pos = Utils::calcVector(e->stats.pos, test_dir, 1);
234 if (mapr->collider.isValidPosition(test_pos.x, test_pos.y, e->stats.movement_type, MapCollision::COLLIDE_NORMAL)) {
235 if (test_dir == e->stats.direction) {
236 // if we're already moving in a good direction, favor it over other directions
237 flee_dirs.clear();
238 flee_dirs.push_back(test_dir);
239 break;
240 }
241 else {
242 flee_dirs.push_back(test_dir);
243 }
244 }
245 }
246
247 if (flee_dirs.empty()) {
248 // trapped and can't move
249 move_to_safe_dist = false;
250 fleeing = false;
251 }
252 else {
253 int index = Math::randBetween(0, static_cast<int>(flee_dirs.size())-1);
254 pursue_pos = Utils::calcVector(e->stats.pos, flee_dirs[index], 1);
255
256 if (e->stats.flee_timer.isEnd()) {
257 e->stats.flee_timer.reset(Timer::BEGIN);
258 }
259 }
260 }
261 }
262
263 /**
264 * Begin using a power if idle, based on behavior % chances.
265 * Activate a ready power, if the attack animation has followed through
266 */
267 void BehaviorStandard::checkPower() {
268
269 // stunned enemies can't act
270 if (e->stats.effects.stun || e->stats.effects.fear || fleeing) return;
271
272 // currently all enemy power use happens during combat
273 if (!e->stats.in_combat) return;
274
275 // if the enemy is on global cooldown it cannot act
276 if (!e->stats.cooldown.isEnd()) return;
277
278 // Note there are two stages to activating a power.
279 // First is the enemy choosing to use a power based on behavioral chance
280 // Second is the power actually firing off once the related animation reaches the active frame.
281 // The second stage occurs in updateState()
282
283 // pick a power from the available powers for this creature
284 if (e->stats.cur_state == StatBlock::ENEMY_STANCE || e->stats.cur_state == StatBlock::ENEMY_MOVE) {
285 StatBlock::AIPower* ai_power = NULL;
286
287 // check half dead power use
288 if (e->stats.half_dead_power && e->stats.hp <= e->stats.get(Stats::HP_MAX)/2) {
289 ai_power = e->stats.getAIPower(StatBlock::AI_POWER_HALF_DEAD);
290 }
291 // check ranged power use
292 else if (target_dist > e->stats.melee_range) {
293 ai_power = e->stats.getAIPower(StatBlock::AI_POWER_RANGED);
294 }
295 // check melee power use
296 else {
297 ai_power = e->stats.getAIPower(StatBlock::AI_POWER_MELEE);
298 }
299
300 if (ai_power != NULL) {
301 const Power& pwr = powers->powers[ai_power->id];
302 if (!los && (pwr.requires_los || pwr.requires_los_default)) {
303 ai_power = NULL;
304 }
305 if (ai_power != NULL) {
306 e->stats.cur_state = StatBlock::ENEMY_POWER;
307 e->stats.activated_power = ai_power;
308 }
309 }
310 }
311
312 if (e->stats.cur_state != StatBlock::ENEMY_POWER && e->stats.activated_power) {
313 e->stats.activated_power = NULL;
314 }
315 }
316
317 /**
318 * Check state changes related to movement
319 */
320 void BehaviorStandard::checkMove() {
321
322 // dying enemies can't move
323 if (e->stats.cur_state == StatBlock::ENEMY_DEAD || e->stats.cur_state == StatBlock::ENEMY_CRITDEAD) return;
324
325 // stunned enemies can't act
326 if (e->stats.effects.stun) return;
327
328 // handle not being in combat and (not patrolling waypoints or waiting at waypoint)
329 if (!e->stats.hero_ally && !e->stats.in_combat && (e->stats.waypoints.empty() || !e->stats.waypoint_timer.isEnd())) {
330
331 if (e->stats.cur_state == StatBlock::ENEMY_MOVE) {
332 e->stats.cur_state = StatBlock::ENEMY_STANCE;
333 }
334
335 // currently enemies only move while in combat or patrolling
336 return;
337 }
338
339 float real_speed = e->stats.speed * speedMultiplyer[e->stats.direction] * e->stats.effects.speed / 100;
340
341 unsigned turn_ticks = turn_timer.getCurrent();
342 turn_timer.setDuration(e->stats.turn_delay);
343
344 // If an enemy's turn_delay is too long compared to their speed, they will be unable to follow a path properly.
345 // So here, we get how many frames it takes to traverse a single tile and then compare it to the turn delay time.
346 // We then cap the turn delay the time at the number of frames we calculated for tile traversal.
347 // There may be other solutions to this problem, such as having the enemy pause when they reach a path point,
348 // but I was unable to get anything else working as cleanly/bug-free as this.
349 int max_turn_ticks = static_cast<int>(1.f / real_speed);
350 if (e->stats.turn_delay > max_turn_ticks) {
351 turn_timer.setDuration(max_turn_ticks);
352 }
353 turn_timer.setCurrent(turn_ticks);
354
355 // clear current space to allow correct movement
356 mapr->collider.unblock(e->stats.pos.x, e->stats.pos.y);
357
358 // update direction
359 if (e->stats.facing) {
360 turn_timer.tick();
361 if (turn_timer.isEnd()) {
362
363 // if blocked, face in pathfinder direction instead
364 if (!mapr->collider.lineOfMovement(e->stats.pos.x, e->stats.pos.y, pursue_pos.x, pursue_pos.y, e->stats.movement_type)) {
365
366 // if a path is returned, target first waypoint
367
368 bool recalculate_path = false;
369
370 //if theres no path, it needs to be calculated
371 if(path.empty())
372 recalculate_path = true;
373
374 //if the target moved more than 1 tile away, recalculate
375 if(Utils::calcDist(FPoint(Point(prev_target)), FPoint(Point(pursue_pos))) > 1.f)
376 recalculate_path = true;
377
378 //if a collision ocurred then recalculate
379 if(collided)
380 recalculate_path = true;
381
382 //add a 5% chance to recalculate on every frame. This prevents reclaulating lots of entities in the same frame
383 chance_calc_path += 5;
384
385 if(Math::percentChance(chance_calc_path))
386 recalculate_path = true;
387
388 //dont recalculate if we were blocked and no path was found last time
389 //this makes sure that pathfinding calculation is not spammed when the target is unreachable and the entity is as close as its going to get
390 if(!path_found && collided && !Math::percentChance(chance_calc_path))
391 recalculate_path = false;
392 else//reset the collision flag only if we dont want the cooldown in place
393 collided = false;
394
395 prev_target = pursue_pos;
396
397 // target first waypoint
398 if(recalculate_path) {
399 chance_calc_path = -100;
400 path.clear();
401 path_found = mapr->collider.computePath(e->stats.pos, pursue_pos, path, e->stats.movement_type, MapCollision::DEFAULT_PATH_LIMIT);
402 }
403
404 if(!path.empty()) {
405 pursue_pos = path.back();
406
407 //if distance to node is lower than a tile size, the node is going to be passed and can be removed
408 if(Utils::calcDist(e->stats.pos, pursue_pos) <= 1.f)
409 path.pop_back();
410 }
411 }
412 else {
413 path.clear();
414 }
415
416 if (e->stats.charge_speed == 0.0f) {
417 e->stats.direction = Utils::calcDirection(e->stats.pos.x, e->stats.pos.y, pursue_pos.x, pursue_pos.y);
418 }
419 turn_timer.reset(Timer::BEGIN);
420 }
421 }
422
423 e->stats.flee_timer.tick();
424 e->stats.flee_cooldown_timer.tick();
425
426 // try to start moving
427 if (e->stats.cur_state == StatBlock::ENEMY_STANCE) {
428 checkMoveStateStance();
429 }
430
431 // already moving
432 else if (e->stats.cur_state == StatBlock::ENEMY_MOVE) {
433 checkMoveStateMove();
434 }
435
436 // if patrolling waypoints and has reached a waypoint, cycle to the next one
437 if (!e->stats.waypoints.empty()) {
438 // if the patroller is close to the waypoint
439 FPoint waypoint = e->stats.waypoints.front();
440 float waypoint_dist = Utils::calcDist(waypoint, e->stats.pos);
441
442 FPoint saved_pos = e->stats.pos;
443 e->move();
444 float new_dist = Utils::calcDist(waypoint, e->stats.pos);
445 e->stats.pos = saved_pos;
446
447 if (waypoint_dist <= real_speed || (waypoint_dist <= 0.5f && new_dist > waypoint_dist)) {
448 e->stats.pos = waypoint;
449 turn_timer.reset(Timer::END);
450 e->stats.waypoints.pop();
451 // pick a new random point if we're wandering
452 if (e->stats.wander) {
453 waypoint = getWanderPoint();
454 }
455 e->stats.waypoints.push(waypoint);
456 e->stats.waypoint_timer.reset(Timer::BEGIN);
457 }
458 }
459
460 // re-block current space to allow correct movement
461 mapr->collider.block(e->stats.pos.x, e->stats.pos.y, e->stats.hero_ally);
462
463 }
464
465 void BehaviorStandard::checkMoveStateStance() {
466
467 // If the enemy is capable of fleeing and is at a safe distance, have it hold its position instead of moving
468 if (hero_dist >= e->stats.flee_range && e->stats.chance_flee > 0 && e->stats.waypoints.empty()) return;
469
470 // try to move to the target if we're either:
471 // 1. too far away and chance_pursue roll succeeds
472 // 2. within range, but lack line-of-sight (required to attack)
473 bool should_move_to_target = (target_dist > e->stats.melee_range && Math::percentChance(e->stats.chance_pursue)) || (target_dist <= e->stats.melee_range && !los);
474
475 if (should_move_to_target || fleeing) {
476
477 if (e->move()) {
478 e->stats.cur_state = StatBlock::ENEMY_MOVE;
479 }
480 else {
481 collided = true;
482 unsigned char prev_direction = e->stats.direction;
483
484 // hit an obstacle, try the next best angle
485 e->stats.direction = e->faceNextBest(pursue_pos.x, pursue_pos.y);
486 if (e->move()) {
487 e->stats.cur_state = StatBlock::ENEMY_MOVE;
488 }
489 else
490 e->stats.direction = prev_direction;
491 }
492 }
493 }
494
495 void BehaviorStandard::checkMoveStateMove() {
496 bool can_attack = true;
497
498 if (!e->stats.cooldown.isEnd()) {
499 can_attack = false;
500 }
501 else {
502 can_attack = false;
503 for (size_t i = 0; i < e->stats.powers_ai.size(); ++i) {
504 if (e->stats.powers_ai[i].cooldown.isEnd()) {
505 can_attack = true;
506 break;
507 }
508 }
509 }
510 // in order to prevent infinite fleeing, we re-roll our chance to flee after a certain duration
511 bool stop_fleeing = can_attack && fleeing && e->stats.flee_timer.isEnd() && !Math::percentChance(e->stats.chance_flee);
512
513 if (!stop_fleeing && e->stats.flee_timer.isEnd()) {
514 // if the roll to continue fleeing succeeds, but the flee duration has expired, we don't want to reset the duration to the full amount
515 // instead, we scehdule the next re-roll to happen on the next frame
516 // this will continue until a roll fails, returning to the stance state
517 e->stats.flee_timer.setCurrent(1);
518 }
519
520 // close enough to the hero or is at a safe distance
521 if (pc->stats.alive && ((target_dist < e->stats.melee_range && !fleeing) || (move_to_safe_dist && target_dist >= e->stats.flee_range) || stop_fleeing)) {
522 if (stop_fleeing) {
523 e->stats.flee_cooldown_timer.reset(Timer::BEGIN);
524 }
525 e->stats.cur_state = StatBlock::ENEMY_STANCE;
526 move_to_safe_dist = false;
527 fleeing = false;
528 }
529
530 // try to continue moving
531 else if (!e->move()) {
532 collided = true;
533 unsigned char prev_direction = e->stats.direction;
534 // hit an obstacle. Try the next best angle
535 e->stats.direction = e->faceNextBest(pursue_pos.x, pursue_pos.y);
536 if (!e->move()) {
537 e->stats.cur_state = StatBlock::ENEMY_STANCE;
538 e->stats.direction = prev_direction;
539 }
540 }
541 }
542
543
544 /**
545 * Perform miscellaneous state-based actions.
546 * 1) Set animations and sound effects
547 * 2) Return to the default state (Stance) when actions are complete
548 */
549 void BehaviorStandard::updateState() {
550
551 // stunned enemies can't act
552 if (e->stats.effects.stun) return;
553
554 int power_id;
555 int power_state;
556
557 // continue current animations
558 e->activeAnimation->advanceFrame();
559
560 switch (e->stats.cur_state) {
561
562 case StatBlock::ENEMY_STANCE:
563
564 e->setAnimation("stance");
565 break;
566
567 case StatBlock::ENEMY_MOVE:
568
569 e->setAnimation("run");
570 break;
571
572 case StatBlock::ENEMY_POWER:
573
574 if (e->stats.activated_power == NULL) {
575 e->stats.cur_state = StatBlock::ENEMY_STANCE;
576 break;
577 }
578
579 power_id = e->stats.activated_power->id;
580 power_state = powers->powers[power_id].new_state;
581 e->stats.prevent_interrupt = powers->powers[power_id].prevent_interrupt;
582
583 // animation based on power type
584 if (power_state == Power::STATE_INSTANT)
585 e->instant_power = true;
586 else if (power_state == Power::STATE_ATTACK)
587 e->setAnimation(powers->powers[power_id].attack_anim);
588
589 // sound effect based on power type
590 if (e->activeAnimation->isFirstFrame()) {
591 if (powers->powers[power_id].pre_power > 0 && Math::percentChance(powers->powers[power_id].pre_power_chance)) {
592 powers->activate(powers->powers[power_id].pre_power, &e->stats, pursue_pos);
593 }
594
595 float attack_speed = (e->stats.effects.getAttackSpeed(powers->powers[power_id].attack_anim) * powers->powers[power_id].attack_speed) / 100.0f;
596 e->activeAnimation->setSpeed(attack_speed);
597 e->playAttackSound(powers->powers[power_id].attack_anim);
598
599 if (powers->powers[power_id].state_duration > 0)
600 e->stats.state_timer.setDuration(powers->powers[power_id].state_duration);
601
602 if (powers->powers[power_id].charge_speed != 0.0f)
603 e->stats.charge_speed = powers->powers[power_id].charge_speed;
604 }
605
606 // Activate Power:
607 // if we're at the active frame of a power animation,
608 // activate the power and set the local and global cooldowns
609 if ((e->activeAnimation->isActiveFrame() || e->instant_power) && !e->stats.hold_state) {
610 powers->activate(power_id, &e->stats, pursue_pos);
611
612 // set cooldown for all ai powers with the same power id
613 for (size_t i = 0; i < e->stats.powers_ai.size(); ++i) {
614 if (e->stats.activated_power->id == e->stats.powers_ai[i].id) {
615 e->stats.powers_ai[i].cooldown.setDuration(powers->powers[power_id].cooldown);
616 }
617 }
618
619 if (e->stats.activated_power->type == StatBlock::AI_POWER_HALF_DEAD) {
620 e->stats.half_dead_power = false;
621 }
622
623 if (!e->stats.state_timer.isEnd())
624 e->stats.hold_state = true;
625 }
626
627 // animation is finished
628 if ((e->activeAnimation->isLastFrame() && e->stats.state_timer.isEnd()) ||
629 (power_state == Power::STATE_ATTACK && e->activeAnimation->getName() != powers->powers[power_id].attack_anim) ||
630 e->instant_power)
631 {
632 if (!e->instant_power)
633 e->stats.cooldown.reset(Timer::BEGIN);
634 else
635 e->instant_power = false;
636
637 e->stats.activated_power = NULL;
638 e->stats.cur_state = StatBlock::ENEMY_STANCE;
639 e->stats.prevent_interrupt = false;
640 }
641 break;
642
643 case StatBlock::ENEMY_SPAWN:
644
645 e->setAnimation("spawn");
646 //the second check is needed in case the entity does not have a spawn animation
647 if (e->activeAnimation->isLastFrame() || e->activeAnimation->getName() != "spawn") {
648 e->stats.cur_state = StatBlock::ENEMY_STANCE;
649 }
650 break;
651
652 case StatBlock::ENEMY_BLOCK:
653
654 e->setAnimation("block");
655 break;
656
657 case StatBlock::ENEMY_HIT:
658
659 e->setAnimation("hit");
660 if (e->activeAnimation->isFirstFrame()) {
661 e->stats.effects.triggered_hit = true;
662 }
663 if (e->activeAnimation->isLastFrame() || e->activeAnimation->getName() != "hit")
664 e->stats.cur_state = StatBlock::ENEMY_STANCE;
665 break;
666
667 case StatBlock::ENEMY_DEAD:
668 if (e->stats.effects.triggered_death) break;
669
670 e->setAnimation("die");
671 if (e->activeAnimation->isFirstFrame()) {
672 e->playSound(Entity::SOUND_DIE);
673 e->stats.corpse_timer.setDuration(eset->misc.corpse_timeout);
674 }
675 if (e->activeAnimation->isSecondLastFrame()) {
676 StatBlock::AIPower* ai_power = e->stats.getAIPower(StatBlock::AI_POWER_DEATH);
677 if (ai_power != NULL)
678 powers->activate(ai_power->id, &e->stats, e->stats.pos);
679
680 e->stats.effects.clearEffects();
681 }
682 if (e->activeAnimation->isLastFrame() || e->activeAnimation->getName() != "die") {
683 // puts renderable under object layer
684 e->stats.corpse = true;
685
686 //allow free movement over the corpse
687 mapr->collider.unblock(e->stats.pos.x, e->stats.pos.y);
688
689 // remove corpses that land on blocked tiles, such as water or pits
690 if (!mapr->collider.isValidPosition(e->stats.pos.x, e->stats.pos.y, MapCollision::MOVE_NORMAL, MapCollision::COLLIDE_NORMAL)) {
691 e->stats.corpse_timer.reset(Timer::END);
692 }
693
694 // prevent "jumping" when rendering
695 e->stats.pos.align();
696 }
697
698 break;
699
700 case StatBlock::ENEMY_CRITDEAD:
701
702 e->setAnimation("critdie");
703 if (e->activeAnimation->isFirstFrame()) {
704 e->playSound(Entity::SOUND_CRITDIE);
705 e->stats.corpse_timer.setDuration(eset->misc.corpse_timeout);
706 }
707 if (e->activeAnimation->isSecondLastFrame()) {
708 StatBlock::AIPower* ai_power = e->stats.getAIPower(StatBlock::AI_POWER_DEATH);
709 if (ai_power != NULL)
710 powers->activate(ai_power->id, &e->stats, e->stats.pos);
711
712 e->stats.effects.clearEffects();
713 }
714 if (e->activeAnimation->isLastFrame() || e->activeAnimation->getName() != "critdie") {
715 // puts renderable under object layer
716 e->stats.corpse = true;
717
718 //allow free movement over the corpse
719 mapr->collider.unblock(e->stats.pos.x, e->stats.pos.y);
720
721 // prevent "jumping" when rendering
722 e->stats.pos.align();
723 }
724
725 break;
726
727 default:
728 break;
729 }
730
731 if (e->stats.state_timer.isEnd() && e->stats.hold_state)
732 e->stats.hold_state = false;
733
734 if (e->stats.cur_state != StatBlock::ENEMY_POWER && e->stats.charge_speed != 0.0f)
735 e->stats.charge_speed = 0.0f;
736 }
737
738 FPoint BehaviorStandard::getWanderPoint() {
739 FPoint waypoint;
740 waypoint.x = static_cast<float>(e->stats.wander_area.x) + static_cast<float>(rand() % (e->stats.wander_area.w)) + 0.5f;
741 waypoint.y = static_cast<float>(e->stats.wander_area.y) + static_cast<float>(rand() % (e->stats.wander_area.h)) + 0.5f;
742
743 if (mapr->collider.isValidPosition(waypoint.x, waypoint.y, e->stats.movement_type, mapr->collider.getCollideType(e->stats.hero)) &&
744 mapr->collider.lineOfMovement(e->stats.pos.x, e->stats.pos.y, waypoint.x, waypoint.y, e->stats.movement_type))
745 {
746 return waypoint;
747 }
748 else {
749 // didn't get a valid waypoint, so keep our current position
750 return e->stats.pos;
751 }
752 }
+0
-65
src/BehaviorStandard.h less more
0 /*
1 Copyright © 2012 Clint Bellanger
2 Copyright © 2013-2014 Justin Jacobs
3
4 This file is part of FLARE.
5
6 FLARE is free software: you can redistribute it and/or modify it under the terms
7 of the GNU General Public License as published by the Free Software Foundation,
8 either version 3 of the License, or (at your option) any later version.
9
10 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
11 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
12 PARTICULAR PURPOSE. See the GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License along with
15 FLARE. If not, see http://www.gnu.org/licenses/
16 */
17
18 #ifndef BEHAVIOR_STANDARD_H
19 #define BEHAVIOR_STANDARD_H
20
21 #include "EnemyBehavior.h"
22 #include "Utils.h"
23
24 class Enemy;
25 class Point;
26
27 class BehaviorStandard : public EnemyBehavior {
28 private:
29
30 // logic steps
31 void doUpkeep();
32 virtual void findTarget();
33 void checkPower();
34 void checkMove();
35 virtual void checkMoveStateStance();
36 virtual void checkMoveStateMove();
37 void updateState();
38 FPoint getWanderPoint();
39
40 protected:
41 //variables for patfinding
42 std::vector<FPoint> path;
43 FPoint prev_target;
44 bool collided;
45 bool path_found;
46 int chance_calc_path;
47
48 float hero_dist;
49 float target_dist;
50 FPoint pursue_pos;
51 // targeting vars
52 bool los;
53 //when fleeing, the enemy moves away from the pursue_pos
54 bool fleeing;
55 bool move_to_safe_dist;
56 Timer turn_timer;
57
58 public:
59 explicit BehaviorStandard(Enemy *_e);
60 void logic();
61
62 };
63
64 #endif
0 /*
1 Copyright © 2012-2021 Justin Jacobs
2
3 This file is part of FLARE.
4
5 FLARE is free software: you can redistribute it and/or modify it under the terms
6 of the GNU General Public License as published by the Free Software Foundation,
7 either version 3 of the License, or (at your option) any later version.
8
9 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
10 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
11 PARTICULAR PURPOSE. See the GNU General Public License for more details.
12
13 You should have received a copy of the GNU General Public License along with
14 FLARE. If not, see http://www.gnu.org/licenses/
15 */
16
17
18 /**
19 * class Camera
20 *
21 * Controls the viewport that moves around the map, usually focused on the player
22 *
23 */
24
25 #include "Camera.h"
26 #include "CommonIncludes.h"
27 #include "EngineSettings.h"
28 #include "SharedResources.h"
29 #include "Utils.h"
30 #include "UtilsMath.h"
31
32 Camera::Camera()
33 : pos()
34 , shake()
35 , target()
36 , prev_cam_target()
37 , prev_cam_dx(0)
38 , prev_cam_dy(0)
39 , cam_threshold(eset->misc.camera_speed / 50.f)
40 , shake_strength(8)
41 {
42 }
43
44 Camera::~Camera() {
45 }
46
47 void Camera::logic() {
48 // gradulally move camera towards target
49
50 float cam_delta = Utils::calcDist(pos, target);
51 float cam_dx = (Utils::calcDist(FPoint(pos.x, target.y), target)) / eset->misc.camera_speed;
52 float cam_dy = (Utils::calcDist(FPoint(target.x, pos.y), target)) / eset->misc.camera_speed;
53
54 if (prev_cam_target.x == target.x && prev_cam_target.y == target.y) {
55 // target hasn't changed
56
57 if (cam_delta == 0 || cam_delta >= cam_threshold) {
58 // camera is stationary or moving fast enough, so store the deltas
59 prev_cam_dx = cam_dx;
60 prev_cam_dy = cam_dy;
61 }
62 else if (cam_delta < cam_threshold) {
63 if (cam_dx < prev_cam_dx || cam_dy < prev_cam_dy) {
64 // maintain camera speed
65 cam_dx = prev_cam_dx;
66 cam_dy = prev_cam_dy;
67 }
68 else {
69 // camera didn't get a chance to speed up, so set the minimum speed
70 float b = fabsf(pos.x - target.x);
71 float alpha = acosf(b / cam_delta);
72
73 float fast_dx = cam_threshold * cosf(alpha);
74 float fast_dy = cam_threshold * sinf(alpha);
75
76 prev_cam_dx = fast_dx / eset->misc.camera_speed;
77 prev_cam_dy = fast_dy / eset->misc.camera_speed;
78 }
79 }
80 }
81 else {
82 // target changed, reset
83 prev_cam_target = target;
84 prev_cam_dx = 0;
85 prev_cam_dy = 0;
86 }
87
88 // camera movement might overshoot its target, so compensate for that here
89 if (pos.x < target.x) {
90 pos.x += cam_dx;
91 if (pos.x > target.x)
92 pos.x = target.x;
93 }
94 else if (pos.x > target.x) {
95 pos.x -= cam_dx;
96 if (pos.x < target.x)
97 pos.x = target.x;
98 }
99 if (pos.y < target.y) {
100 pos.y += cam_dy;
101 if (pos.y > target.y)
102 pos.y = target.y;
103 }
104 else if (pos.y > target.y) {
105 pos.y -= cam_dy;
106 if (pos.y < target.y)
107 pos.y = target.y;
108 }
109
110 // handle camera shaking timer
111 shake_timer.tick();
112
113 if (shake_timer.isEnd()) {
114 shake.x = pos.x;
115 shake.y = pos.y;
116 }
117 else {
118 shake.x = pos.x + static_cast<float>((rand() % (shake_strength * 2)) - shake_strength) * 0.0078125f;
119 shake.y = pos.y + static_cast<float>((rand() % (shake_strength * 2)) - shake_strength) * 0.0078125f;
120 }
121 }
122
123 void Camera::setTarget(const FPoint& _target) {
124 target = _target;
125 }
126
127 void Camera::warpTo(const FPoint& _target) {
128 pos = shake = target = prev_cam_target = _target;
129 shake_timer.reset(Timer::END);
130 prev_cam_dx = 0;
131 prev_cam_dy = 0;
132 }
133
0 /*
1 Copyright © 2012-2021 Justin Jacobs
2
3 This file is part of FLARE.
4
5 FLARE is free software: you can redistribute it and/or modify it under the terms
6 of the GNU General Public License as published by the Free Software Foundation,
7 either version 3 of the License, or (at your option) any later version.
8
9 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
10 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
11 PARTICULAR PURPOSE. See the GNU General Public License for more details.
12
13 You should have received a copy of the GNU General Public License along with
14 FLARE. If not, see http://www.gnu.org/licenses/
15 */
16
17
18 /**
19 * class Camera
20 *
21 * Controls the viewport that moves around the map, usually focused on the player
22 *
23 */
24
25 #ifndef CAMERA_H
26 #define CAMERA_H
27
28 #include "CommonIncludes.h"
29 #include "Utils.h"
30
31 class Camera {
32 public:
33 Camera();
34 ~Camera();
35
36 void logic();
37 void setTarget(const FPoint& _target);
38 void warpTo(const FPoint& _target);
39
40 FPoint pos;
41 FPoint shake;
42 Timer shake_timer;
43
44 private:
45 FPoint target;
46 FPoint prev_cam_target;
47
48 float prev_cam_dx;
49 float prev_cam_dy;
50
51 float cam_threshold;
52 int shake_strength;
53 };
54
55 #endif
137137 return menu->inv->inventory[MenuInventory::CARRIED].contain(eset->misc.currency_id, quantity);
138138 }
139139
140 bool CampaignManager::checkItem(int item_id) {
141 if (menu->inv->inventory[MenuInventory::CARRIED].contain(item_id, 1))
140 bool CampaignManager::checkItem(ItemStack istack) {
141 if (menu->inv->inventory[MenuInventory::CARRIED].contain(istack.item, istack.quantity))
142142 return true;
143143 else
144 return menu->inv->inventory[MenuInventory::EQUIPMENT].contain(item_id, 1);
144 return menu->inv->inventory[MenuInventory::EQUIPMENT].contain(istack.item, istack.quantity);
145145 }
146146
147147 void CampaignManager::removeCurrency(int quantity) {
154154 }
155155 }
156156
157 void CampaignManager::removeItem(int item_id) {
158 if (item_id < 0 || static_cast<unsigned>(item_id) >= items->items.size()) return;
159
160 if (menu->inv->remove(item_id)) {
161 pc->logMsg(msg->get("%s removed.", items->getItemName(item_id)), Avatar::MSG_UNIQUE);
162 items->playSound(item_id);
157 void CampaignManager::removeItem(ItemStack istack) {
158 if (istack.empty())
159 return;
160
161 if (istack.item == eset->misc.currency_id) {
162 removeCurrency(istack.quantity);
163 return;
164 }
165
166 int item_count = menu->inv->inventory[MenuInventory::CARRIED].count(istack.item) + menu->inv->inventory[MenuInventory::EQUIPMENT].count(istack.item);
167 int max_amount = std::min(item_count, istack.quantity);
168
169 if (menu->inv->remove(istack.item, max_amount)) {
170 if (max_amount > 1)
171 pc->logMsg(msg->get("%s x%d removed.", items->getItemName(istack.item), max_amount), Avatar::MSG_UNIQUE);
172 else if (max_amount == 1)
173 pc->logMsg(msg->get("%s removed.", items->getItemName(istack.item)), Avatar::MSG_UNIQUE);
174
175 if (max_amount > 0)
176 items->playSound(istack.item);
163177 }
164178 }
165179
169183
170184 menu->inv->add(istack, MenuInventory::CARRIED, ItemStorage::NO_SLOT, MenuInventory::ADD_PLAY_SOUND, MenuInventory::ADD_AUTO_EQUIP);
171185
172 if (istack.item != eset->misc.currency_id) {
173 if (istack.quantity <= 1)
174 pc->logMsg(msg->get("You receive %s.", items->getItemName(istack.item)), Avatar::MSG_UNIQUE);
186 if (istack.item == eset->misc.currency_id) {
187 pc->logMsg(msg->get("You receive %d %s.", istack.quantity, eset->loot.currency), Avatar::MSG_UNIQUE);
188 }
189 else {
175190 if (istack.quantity > 1)
176191 pc->logMsg(msg->get("You receive %s x%d.", items->getItemName(istack.item), istack.quantity), Avatar::MSG_UNIQUE);
192 else if (istack.quantity == 1)
193 pc->logMsg(msg->get("You receive %s.", items->getItemName(istack.item)), Avatar::MSG_UNIQUE);
177194 }
178195 }
179196
182199 stack.item = eset->misc.currency_id;
183200 stack.quantity = amount;
184201
185 pc->logMsg(msg->get("You receive %d %s.", amount, eset->loot.currency), Avatar::MSG_UNIQUE);
186202 rewardItem(stack);
187203 }
188204
238254 return true;
239255 }
240256 else if (ec.type == EventComponent::REQUIRES_ITEM) {
241 if (checkItem(ec.x))
257 if (checkItem(ItemStack(ec.id, ec.x)))
242258 return true;
243259 }
244260 else if (ec.type == EventComponent::REQUIRES_NOT_ITEM) {
245 if (!checkItem(ec.x))
261 if (!checkItem(ItemStack(ec.id, ec.x)))
246262 return true;
247263 }
248264 else if (ec.type == EventComponent::REQUIRES_LEVEL) {
4848 void resetAllStatuses();
4949 void getSetStatusStrings(std::vector<std::string>& status_strings);
5050 bool checkCurrency(int quantity);
51 bool checkItem(int item_id);
51 bool checkItem(ItemStack istack);
5252 void removeCurrency(int quantity);
53 void removeItem(int item_id);
53 void removeItem(ItemStack istack);
5454 void rewardItem(ItemStack istack);
5555 void rewardCurrency(int amount);
5656 void rewardXP(int amount, bool show_message);
4141 , floating_offset(0)
4242 , text("")
4343 , displaytype(0)
44 , is_int(false)
45 , int_value(0)
4446 {}
4547
4648 Combat_Text_Item::~Combat_Text_Item() {
49 // label deletion is handled by CombatText class
4750 }
4851
4952 CombatText::CombatText() {
5457 msg_color[MSG_MISS] = font->getColor(FontEngine::COLOR_COMBAT_MISS);
5558
5659 duration = settings->max_frames_per_sec; // 1 second
60 fade_duration = 0;
5761 speed = 60.f / settings->max_frames_per_sec;
5862 offset = 48; // average height of flare-game enemies, so a sensible default
5963
7478 // @ATTR offset|int|The vertical offset for the combat text's starting position.
7579 offset = Parse::toInt(infile.val);
7680 }
81 else if (infile.key == "fade_duration") {
82 // @ATTR fade_duration|duration|How long the combat text will spend fading out in 'ms' or 's'.
83 fade_duration = Parse::toDuration(infile.val);
84 }
7785 else {
7886 infile.error("CombatText: '%s' is not a valid key.",infile.key.c_str());
7987 }
8088 }
8189 infile.close();
8290 }
91
92 if (fade_duration > duration)
93 fade_duration = duration;
8394 }
8495
8596 CombatText::~CombatText() {
91102 }
92103
93104 void CombatText::addString(const std::string& message, const FPoint& location, int displaytype) {
94 if (settings->combat_text) {
95 Combat_Text_Item *c = new Combat_Text_Item();
96 WidgetLabel *label = new WidgetLabel();
97 c->pos.x = location.x;
98 c->pos.y = location.y;
99 c->floating_offset = static_cast<float>(offset);
100 c->label = label;
101 c->text = message;
102 c->lifespan = duration;
103 c->displaytype = displaytype;
104
105 c->label->setPos(static_cast<int>(c->pos.x), static_cast<int>(c->pos.y));
106 c->label->setJustify(FontEngine::JUSTIFY_CENTER);
107 c->label->setVAlign(LabelInfo::VALIGN_BOTTOM);
108 c->label->setText(c->text);
109 c->label->setColor(msg_color[c->displaytype]);
110 combat_text.push_back(*c);
111 delete c;
112 }
105 if (!settings->combat_text)
106 return;
107
108 Combat_Text_Item c;
109 c.pos.x = location.x;
110 c.pos.y = location.y;
111 c.floating_offset = static_cast<float>(offset);
112 c.text = message;
113 c.lifespan = duration;
114 c.displaytype = displaytype;
115
116 c.label = new WidgetLabel();
117 c.label->setPos(static_cast<int>(c.pos.x), static_cast<int>(c.pos.y));
118 c.label->setJustify(FontEngine::JUSTIFY_CENTER);
119 c.label->setVAlign(LabelInfo::VALIGN_BOTTOM);
120 c.label->setText(c.text);
121 c.label->setColor(msg_color[c.displaytype]);
122 combat_text.push_back(c);
113123 }
114124
115125 void CombatText::addInt(int num, const FPoint& location, int displaytype) {
116 if (settings->combat_text) {
117 std::stringstream ss;
118 ss << num;
119 addString(ss.str(), location, displaytype);
120 }
126 if (!settings->combat_text)
127 return;
128
129 std::stringstream ss;
130
131 // when adding multiple combat text of the same type and position on the same frame, add the num to the existing text
132 for (std::vector<Combat_Text_Item>::iterator it = combat_text.begin(); it != combat_text.end(); ++it) {
133 if (it->is_int && it->displaytype == displaytype && it->lifespan == duration && it->pos.x == location.x && it->pos.y == location.y) {
134 it->int_value += num;
135 ss << it->int_value;
136 it->text = ss.str();
137 it->label->setText(ss.str());
138 return;
139 }
140 }
141
142 ss << num;
143 addString(ss.str(), location, displaytype);
144
145 combat_text.back().is_int = true;
146 combat_text.back().int_value = num;
121147 }
122148
123149 void CombatText::logic(const FPoint& _cam) {
124150 cam = _cam;
125151
126 for(std::vector<Combat_Text_Item>::iterator it = combat_text.begin(); it != combat_text.end(); ++it) {
152 for(std::vector<Combat_Text_Item>::iterator it = combat_text.end(); it != combat_text.begin();) {
153 it--;
154
127155 it->lifespan--;
128156 it->floating_offset += speed;
129157
132160 scr_pos.y -= static_cast<int>(it->floating_offset);
133161
134162 it->label->setPos(scr_pos.x, scr_pos.y);
163
164 // try to prevent messages from overlapping
165 for (std::vector<Combat_Text_Item>::iterator overlap_it = it; overlap_it != combat_text.begin();) {
166 overlap_it--;
167 Rect bounds = *(it->label->getBounds());
168 Rect overlap_bounds = *(overlap_it->label->getBounds());
169 if (Utils::rectsOverlap(bounds, overlap_bounds)) {
170 overlap_it->floating_offset += static_cast<float>(overlap_bounds.h + (overlap_bounds.y - bounds.y));
171
172 scr_pos = Utils::mapToScreen(overlap_it->pos.x, overlap_it->pos.y, cam.x, cam.y);
173 scr_pos.y -= static_cast<int>(overlap_it->floating_offset);
174
175 overlap_it->label->setPos(scr_pos.x, scr_pos.y);
176 }
177 }
135178 }
136179
137180 // delete expired messages
145188 if (!settings->show_hud) return;
146189
147190 for(std::vector<Combat_Text_Item>::iterator it = combat_text.begin(); it != combat_text.end(); ++it) {
148 if (it->lifespan > 0)
191 if (it->lifespan > 0) {
192 // fade out
193 if (it->lifespan < fade_duration)
194 it->label->setAlpha(static_cast<uint8_t>((static_cast<float>(it->lifespan) / static_cast<float>(fade_duration)) * 255.f));
195
149196 it->label->render();
197 }
150198 }
151199 }
152200
153201 void CombatText::clear() {
154 combat_text.clear();
155 }
202 while (combat_text.size()) {
203 delete combat_text.begin()->label;
204 combat_text.erase(combat_text.begin());
205 }
206 }
4343 float floating_offset;
4444 std::string text;
4545 int displaytype;
46 bool is_int;
47 int int_value;
4648 };
4749
4850 class CombatText {
6971
7072 Color msg_color[5];
7173 int duration;
74 int fade_duration;
7275 float speed;
7376 int offset;
7477 };
2929 , cursor_interact(NULL)
3030 , cursor_talk(NULL)
3131 , cursor_attack(NULL)
32 , cursor_lhp_normal(NULL)
33 , cursor_lhp_interact(NULL)
34 , cursor_lhp_talk(NULL)
35 , cursor_lhp_attack(NULL)
3236 , cursor_current(NULL)
33 , offset_current(NULL) {
37 , offset_current(NULL)
38 , low_hp(false) {
3439 Image *graphics;
3540 FileParser infile;
3641 // @CLASS CursorManager|Description of engine/mouse_cursor.txt
7277 }
7378 offset_attack = Parse::toPoint(infile.val);
7479 }
80 else if (infile.key == "lowhp_normal") {
81 // @ATTR lowhp_normal|filename|Filename of an image for the normal cursor when health is low.
82 graphics = render_device->loadImage(Parse::popFirstString(infile.val), RenderDevice::ERROR_NORMAL);
83 if (graphics) {
84 cursor_lhp_normal = graphics->createSprite();
85 graphics->unref();
86 }
87 offset_lhp_normal = Parse::toPoint(infile.val);
88 }
89 else if (infile.key == "lowhp_interact") {
90 // @ATTR lowhp_interact|filename|Filename of an image for the object interaction cursor when health is low.
91 graphics = render_device->loadImage(Parse::popFirstString(infile.val), RenderDevice::ERROR_NORMAL);
92 if (graphics) {
93 cursor_lhp_interact = graphics->createSprite();
94 graphics->unref();
95 }
96 offset_lhp_interact = Parse::toPoint(infile.val);
97 }
98 else if (infile.key == "lowhp_talk") {
99 // @ATTR lowhp_talk|filename|Filename of an image for the NPC interaction cursor when health is low.
100 graphics = render_device->loadImage(Parse::popFirstString(infile.val), RenderDevice::ERROR_NORMAL);
101 if (graphics) {
102 cursor_lhp_talk = graphics->createSprite();
103 graphics->unref();
104 }
105 offset_lhp_talk = Parse::toPoint(infile.val);
106 }
107 else if (infile.key == "lowhp_attack") {
108 // @ATTR lowhp_attack|filename|Filename of an image for the cursor when attacking enemies and health is low.
109 graphics = render_device->loadImage(Parse::popFirstString(infile.val), RenderDevice::ERROR_NORMAL);
110 if (graphics) {
111 cursor_lhp_attack = graphics->createSprite();
112 graphics->unref();
113 }
114 offset_lhp_attack = Parse::toPoint(infile.val);
115 }
116
117
75118 else {
76119 infile.error("CursorManager: '%s' is not a valid key.", infile.key.c_str());
77120 }
85128 if (cursor_interact) delete cursor_interact;
86129 if (cursor_talk) delete cursor_talk;
87130 if (cursor_attack) delete cursor_attack;
131 if (cursor_lhp_normal) delete cursor_lhp_normal;
132 if (cursor_lhp_interact) delete cursor_lhp_interact;
133 if (cursor_lhp_talk) delete cursor_lhp_talk;
134 if (cursor_lhp_attack) delete cursor_lhp_attack;
88135 }
89136
90137 void CursorManager::logic() {
99146 cursor_current = NULL;
100147 offset_current = NULL;
101148
102 if (cursor_normal) {
103 inpt->hideCursor();
104 cursor_current = cursor_normal;
105 offset_current = &offset_normal;
106 }
107 else {
108 // system cursor
109 inpt->showCursor();
110 }
149 setCursor(CURSOR_NORMAL);
111150 }
112151
113152 void CursorManager::render() {
125164 }
126165 }
127166
167 void CursorManager::setLowHP(bool val) {
168 low_hp = val;
169 }
170
128171 void CursorManager::setCursor(int type) {
129172 if (settings->hardware_cursor) return;
130173
131 if (type == CURSOR_INTERACT && cursor_interact) {
132 inpt->hideCursor();
133 cursor_current = cursor_interact;
134 offset_current = &offset_interact;
135 }
136 else if (type == CURSOR_TALK && cursor_talk) {
137 inpt->hideCursor();
138 cursor_current = cursor_talk;
139 offset_current = &offset_talk;
140 }
141 else if (type == CURSOR_ATTACK && cursor_attack) {
142 inpt->hideCursor();
143 cursor_current = cursor_attack;
144 offset_current = &offset_attack;
145 }
146 else if (cursor_normal) {
147 inpt->hideCursor();
148 cursor_current = cursor_normal;
149 offset_current = &offset_normal;
174 if (type == CURSOR_INTERACT && (cursor_interact || (cursor_lhp_interact && low_hp))) {
175 inpt->hideCursor();
176 if (low_hp && cursor_lhp_interact) {
177 cursor_current = cursor_lhp_interact;
178 offset_current = &offset_lhp_interact;
179 }
180 else if (cursor_interact) {
181 cursor_current = cursor_interact;
182 offset_current = &offset_interact;
183 }
184 }
185 else if (type == CURSOR_TALK && (cursor_talk || (cursor_lhp_talk && low_hp))) {
186 inpt->hideCursor();
187 if (low_hp && cursor_lhp_talk) {
188 cursor_current = cursor_lhp_talk;
189 offset_current = &offset_lhp_talk;
190 }
191 else if (cursor_talk) {
192 cursor_current = cursor_talk;
193 offset_current = &offset_talk;
194 }
195 }
196 else if (type == CURSOR_ATTACK && (cursor_attack || (cursor_lhp_attack && low_hp))) {
197 inpt->hideCursor();
198 if (low_hp && cursor_lhp_attack) {
199 cursor_current = cursor_lhp_attack;
200 offset_current = &offset_lhp_attack;
201 }
202 else if (cursor_attack) {
203 cursor_current = cursor_attack;
204 offset_current = &offset_attack;
205 }
206 }
207 else if (cursor_normal || (cursor_lhp_normal && low_hp)) {
208 inpt->hideCursor();
209 if (low_hp && cursor_lhp_normal) {
210 cursor_current = cursor_lhp_normal;
211 offset_current = &offset_lhp_normal;
212 }
213 else if (cursor_normal) {
214 cursor_current = cursor_normal;
215 offset_current = &offset_normal;
216 }
150217 }
151218 else {
152219 // system cursor
2727 ~CursorManager ();
2828 void logic();
2929 void render();
30 void setLowHP(bool val);
3031 void setCursor(int type);
3132
3233 bool show_cursor;
3536 CURSOR_NORMAL,
3637 CURSOR_INTERACT,
3738 CURSOR_TALK,
38 CURSOR_ATTACK
39 CURSOR_ATTACK,
3940 };
4041
4142 private:
4344 Sprite *cursor_interact;
4445 Sprite *cursor_talk;
4546 Sprite *cursor_attack;
47 Sprite *cursor_lhp_normal;
48 Sprite *cursor_lhp_interact;
49 Sprite *cursor_lhp_talk;
50 Sprite *cursor_lhp_attack;
4651
4752 Point offset_normal;
4853 Point offset_interact;
4954 Point offset_talk;
5055 Point offset_attack;
56 Point offset_lhp_normal;
57 Point offset_lhp_interact;
58 Point offset_lhp_talk;
59 Point offset_lhp_attack;
60
5161
5262 Sprite *cursor_current;
5363 Point* offset_current;
64
65 bool low_hp;
5466 };
5567
5668 #endif
3232
3333 EffectDef::EffectDef()
3434 : id("")
35 , type("")
35 , type(Effect::NONE)
3636 , name("")
3737 , icon(-1)
3838 , animation("")
4949 : id("")
5050 , name("")
5151 , icon(-1)
52 , ticks(0)
53 , duration(-1)
54 , type(NONE)
52 , timer()
53 , type(Effect::NONE)
5554 , magnitude(0)
5655 , magnitude_max(0)
5756 , animation_name("")
6261 , passive_id(0)
6362 , source_type(Power::SOURCE_TYPE_HERO)
6463 , group_stack(false)
65 , color_mod(255, 255, 255)
64 , color_mod(Color(255,255,255).encodeRGBA())
6665 , alpha_mod(255)
6766 , attack_speed_anim("") {
6867 }
7776 return *this;
7877
7978 unloadAnimation();
79 animation_name = other.animation_name;
80 loadAnimation(animation_name);
81 if (animation && other.animation)
82 animation->syncTo(other.animation);
8083
8184 id = other.id;
8285 name = other.name;
8386 icon = other.icon;
84 ticks = other.ticks;
85 duration = other.duration;
87 timer = other.timer;
8688 type = other.type;
8789 magnitude = other.magnitude;
8890 magnitude_max = other.magnitude_max;
89 animation_name = other.animation_name;
90 loadAnimation(animation_name);
9191 item = other.item;
9292 trigger = other.trigger;
9393 render_above = other.render_above;
121121 delete animation;
122122 animation = NULL;
123123 }
124 }
125
126 int Effect::getTypeFromString(const std::string& type_str) {
127 if (type_str.empty()) return Effect::NONE;
128
129 if (type_str == "damage") return Effect::DAMAGE;
130 else if (type_str == "damage_percent") return Effect::DAMAGE_PERCENT;
131 else if (type_str == "hpot") return Effect::HPOT;
132 else if (type_str == "hpot_percent") return Effect::HPOT_PERCENT;
133 else if (type_str == "mpot") return Effect::MPOT;
134 else if (type_str == "mpot_percent") return Effect::MPOT_PERCENT;
135 else if (type_str == "speed") return Effect::SPEED;
136 else if (type_str == "attack_speed") return Effect::ATTACK_SPEED;
137 else if (type_str == "immunity") return Effect::IMMUNITY;
138 else if (type_str == "immunity_damage") return Effect::IMMUNITY_DAMAGE;
139 else if (type_str == "immunity_slow") return Effect::IMMUNITY_SLOW;
140 else if (type_str == "immunity_stun") return Effect::IMMUNITY_STUN;
141 else if (type_str == "immunity_hp_steal") return Effect::IMMUNITY_HP_STEAL;
142 else if (type_str == "immunity_mp_steal") return Effect::IMMUNITY_MP_STEAL;
143 else if (type_str == "immunity_knockback") return Effect::IMMUNITY_KNOCKBACK;
144 else if (type_str == "immunity_damage_reflect") return Effect::IMMUNITY_DAMAGE_REFLECT;
145 else if (type_str == "immunity_stat_debuff") return Effect::IMMUNITY_STAT_DEBUFF;
146 else if (type_str == "stun") return Effect::STUN;
147 else if (type_str == "revive") return Effect::REVIVE;
148 else if (type_str == "convert") return Effect::CONVERT;
149 else if (type_str == "fear") return Effect::FEAR;
150 else if (type_str == "death_sentence") return Effect::DEATH_SENTENCE;
151 else if (type_str == "shield") return Effect::SHIELD;
152 else if (type_str == "heal") return Effect::HEAL;
153 else if (type_str == "knockback") return Effect::KNOCKBACK;
154 else {
155 for (int i=0; i<Stats::COUNT; ++i) {
156 if (type_str == Stats::KEY[i]) {
157 return Effect::TYPE_COUNT + i;
158 }
159 }
160
161 for (size_t i=0; i<eset->damage_types.list.size(); ++i) {
162 if (type_str == eset->damage_types.list[i].min) {
163 return Effect::TYPE_COUNT + Stats::COUNT + static_cast<int>(i*2);
164 }
165 else if (type_str == eset->damage_types.list[i].max) {
166 return Effect::TYPE_COUNT + Stats::COUNT + static_cast<int>(i*2) + 1;
167 }
168 }
169
170 for (size_t i=0; i<eset->elements.list.size(); ++i) {
171 if (type_str == eset->elements.list[i].id + "_resist") {
172 return Effect::TYPE_COUNT + Stats::COUNT + static_cast<int>(eset->damage_types.count + i);
173 }
174 }
175
176 for (size_t i=0; i<eset->primary_stats.list.size(); ++i) {
177 if (type_str == eset->primary_stats.list[i].id) {
178 return Effect::TYPE_COUNT + Stats::COUNT + static_cast<int>(eset->damage_types.count) + static_cast<int>(eset->elements.list.size() + i);
179 }
180 }
181 }
182
183 Utils::logError("EffectManager: '%s' is not a valid effect type.", type_str.c_str());
184 return Effect::NONE;
185 }
186
187 bool Effect::typeIsStat(int t) {
188 return t >= Effect::TYPE_COUNT && t < Effect::TYPE_COUNT + Stats::COUNT;
189 }
190
191 bool Effect::typeIsDmgMin(int t) {
192 return t >= Effect::TYPE_COUNT + Stats::COUNT && t < Effect::TYPE_COUNT + Stats::COUNT + static_cast<int>(eset->damage_types.count) && (t - Stats::COUNT - Effect::TYPE_COUNT) % 2 == 0;
193 }
194
195 bool Effect::typeIsDmgMax(int t) {
196 return t >= Effect::TYPE_COUNT + Stats::COUNT && t < Effect::TYPE_COUNT + Stats::COUNT + static_cast<int>(eset->damage_types.count) && (t - Stats::COUNT - Effect::TYPE_COUNT) % 2 == 1;
197 }
198
199 bool Effect::typeIsResist(int t) {
200 return t >= Effect::TYPE_COUNT + Stats::COUNT + static_cast<int>(eset->damage_types.count) && t < Effect::TYPE_COUNT + Stats::COUNT + static_cast<int>(eset->damage_types.count) + static_cast<int>(eset->elements.list.size());
201 }
202
203 bool Effect::typeIsPrimary(int t) {
204 return t >= Effect::TYPE_COUNT + Stats::COUNT + static_cast<int>(eset->damage_types.count) + static_cast<int>(eset->elements.list.size()) && t < Effect::TYPE_COUNT + Stats::COUNT + static_cast<int>(eset->damage_types.count) + static_cast<int>(eset->elements.list.size()) + static_cast<int>(eset->primary_stats.list.size());
205 }
206
207 int Effect::getStatFromType(int t) {
208 return t - Effect::TYPE_COUNT;
209 }
210
211 size_t Effect::getDmgFromType(int t) {
212 return static_cast<size_t>(t - Effect::TYPE_COUNT - Stats::COUNT);
213 }
214
215 size_t Effect::getResistFromType(int t) {
216 return static_cast<size_t>(t - Effect::TYPE_COUNT - Stats::COUNT) - eset->damage_types.count;
217 }
218
219 size_t Effect::getPrimaryFromType(int t) {
220 return static_cast<size_t>(t - Effect::TYPE_COUNT - Stats::COUNT) - eset->damage_types.count - eset->elements.list.size();
124221 }
125222
126223 EffectManager::EffectManager()
179276 void EffectManager::logic() {
180277 clearStatus();
181278
182 for (unsigned i=0; i<effect_list.size(); i++) {
279 for (size_t i=0; i<effect_list.size(); ++i) {
280 Effect& ei = effect_list[i];
281
183282 // @CLASS EffectManager|Description of "type" in powers/effects.txt
184283 // expire timed effects and total up magnitudes of active effects
185 if (effect_list[i].duration >= 0) {
186 if (effect_list[i].duration > 0) {
187 if (effect_list[i].ticks > 0) effect_list[i].ticks--;
188 if (effect_list[i].ticks == 0) {
189 //death sentence is only applied at the end of the timer
190 // @TYPE death_sentence|Causes sudden death at the end of the effect duration.
191 if (effect_list[i].type == Effect::DEATH_SENTENCE) death_sentence = true;
192 removeEffect(i);
193 i--;
194 continue;
195 }
196 }
197
198 // @TYPE damage|Damage per second
199 if (effect_list[i].type == Effect::DAMAGE && effect_list[i].ticks % settings->max_frames_per_sec == 1) damage += effect_list[i].magnitude;
200 // @TYPE damage_percent|Damage per second (percentage of max HP)
201 else if (effect_list[i].type == Effect::DAMAGE_PERCENT && effect_list[i].ticks % settings->max_frames_per_sec == 1) damage_percent += effect_list[i].magnitude;
202 // @TYPE hpot|HP restored per second
203 else if (effect_list[i].type == Effect::HPOT && effect_list[i].ticks % settings->max_frames_per_sec == 1) hpot += effect_list[i].magnitude;
204 // @TYPE hpot_percent|HP restored per second (percentage of max HP)
205 else if (effect_list[i].type == Effect::HPOT_PERCENT && effect_list[i].ticks % settings->max_frames_per_sec == 1) hpot_percent += effect_list[i].magnitude;
206 // @TYPE mpot|MP restored per second
207 else if (effect_list[i].type == Effect::MPOT && effect_list[i].ticks % settings->max_frames_per_sec == 1) mpot += effect_list[i].magnitude;
208 // @TYPE mpot_percent|MP restored per second (percentage of max MP)
209 else if (effect_list[i].type == Effect::MPOT_PERCENT && effect_list[i].ticks % settings->max_frames_per_sec == 1) mpot_percent += effect_list[i].magnitude;
210 // @TYPE speed|Changes movement speed. A magnitude of 100 is 100% speed (aka normal speed).
211 else if (effect_list[i].type == Effect::SPEED) speed = (static_cast<float>(effect_list[i].magnitude) * speed) / 100.f;
212 // @TYPE attack_speed|Changes attack speed. A magnitude of 100 is 100% speed (aka normal speed).
213 // attack speed is calculated when getAttackSpeed() is called
214
215 // @TYPE immunity|Applies all immunity effects. Magnitude is ignored.
216 else if (effect_list[i].type == Effect::IMMUNITY) {
217 immunity_damage = true;
218 immunity_slow = true;
219 immunity_stun = true;
220 immunity_hp_steal = true;
221 immunity_mp_steal = true;
222 immunity_knockback = true;
223 immunity_damage_reflect = true;
224 immunity_stat_debuff = true;
225 }
226 // @TYPE immunity_damage|Removes and prevents damage over time. Magnitude is ignored.
227 else if (effect_list[i].type == Effect::IMMUNITY_DAMAGE) immunity_damage = true;
228 // @TYPE immunity_slow|Removes and prevents slow effects. Magnitude is ignored.
229 else if (effect_list[i].type == Effect::IMMUNITY_SLOW) immunity_slow = true;
230 // @TYPE immunity_stun|Removes and prevents stun effects. Magnitude is ignored.
231 else if (effect_list[i].type == Effect::IMMUNITY_STUN) immunity_stun = true;
232 // @TYPE immunity_hp_steal|Prevents HP stealing. Magnitude is ignored.
233 else if (effect_list[i].type == Effect::IMMUNITY_HP_STEAL) immunity_hp_steal = true;
234 // @TYPE immunity_mp_steal|Prevents MP stealing. Magnitude is ignored.
235 else if (effect_list[i].type == Effect::IMMUNITY_MP_STEAL) immunity_mp_steal = true;
236 // @TYPE immunity_knockback|Removes and prevents knockback effects. Magnitude is ignored.
237 else if (effect_list[i].type == Effect::IMMUNITY_KNOCKBACK) immunity_knockback = true;
238 // @TYPE immunity_damage_reflect|Prevents damage reflection. Magnitude is ignored.
239 else if (effect_list[i].type == Effect::IMMUNITY_DAMAGE_REFLECT) immunity_damage_reflect = true;
240 // @TYPE immunity_stat_debuff|Prevents stat value altering effects that have a magnitude less than 0. Magnitude is ignored.
241 else if (effect_list[i].type == Effect::IMMUNITY_STAT_DEBUFF) immunity_stat_debuff = true;
242
243 // @TYPE stun|Can't move or attack. Being attacked breaks stun.
244 else if (effect_list[i].type == Effect::STUN) stun = true;
245 // @TYPE revive|Revives the player. Typically attached to a power that triggers when the player dies.
246 else if (effect_list[i].type == Effect::REVIVE) revive = true;
247 // @TYPE convert|Causes an enemy or an ally to switch allegiance
248 else if (effect_list[i].type == Effect::CONVERT) convert = true;
249 // @TYPE fear|Causes enemies to run away
250 else if (effect_list[i].type == Effect::FEAR) fear = true;
251 // @TYPE knockback|Pushes the target away from the source caster. Speed is the given value divided by the framerate cap.
252 else if (effect_list[i].type == Effect::KNOCKBACK) knockback_speed = static_cast<float>(effect_list[i].magnitude)/static_cast<float>(settings->max_frames_per_sec);
253
254 // @TYPE ${STATNAME}|Increases ${STATNAME}, where ${STATNAME} is any of the base stats. Examples: hp, avoidance, xp_gain
255 // @TYPE ${DAMAGE_TYPE}|Increases a damage min or max, where ${DAMAGE_TYPE} is any 'min' or 'max' value found in engine/damage_types.txt. Example: dmg_melee_min
256 else if (effect_list[i].type >= Effect::TYPE_COUNT && effect_list[i].type < Effect::TYPE_COUNT + Stats::COUNT + static_cast<int>(eset->damage_types.count)) {
257 bonus[effect_list[i].type - Effect::TYPE_COUNT] += effect_list[i].magnitude;
258 }
259 // else if (effect_list[i].type >= Effect::TYPE_COUNT + Stats::COUNT && effect_list[i].type < Effect::TYPE_COUNT + Stats::COUNT + static_cast<int>(eset->damage_types.count)) {
260 // bonus[effect_list[i].type - Effect::TYPE_COUNT] += effect_list[i].magnitude;
261 // }
262 // @TYPE ${ELEMENT}_resist|Increase Resistance % to ${ELEMENT}, where ${ELEMENT} is any found in engine/elements.txt. Example: fire_resist
263 else if (effect_list[i].type >= Effect::TYPE_COUNT + Stats::COUNT + static_cast<int>(eset->damage_types.count) && effect_list[i].type < Effect::TYPE_COUNT + Stats::COUNT + static_cast<int>(eset->damage_types.count) + static_cast<int>(eset->elements.list.size())) {
264 bonus_resist[effect_list[i].type - Effect::TYPE_COUNT - Stats::COUNT - eset->damage_types.count] += effect_list[i].magnitude;
265 }
266 // @TYPE ${PRIMARYSTAT}|Increases ${PRIMARYSTAT}, where ${PRIMARYSTAT} is any of the primary stats defined in engine/primary_stats.txt. Example: physical
267 else if (effect_list[i].type >= Effect::TYPE_COUNT) {
268 bonus_primary[effect_list[i].type - Effect::TYPE_COUNT - Stats::COUNT - eset->damage_types.count - eset->elements.list.size()] += effect_list[i].magnitude;
269 }
270 }
271 // expire shield effects
272 if (effect_list[i].magnitude_max > 0 && effect_list[i].magnitude == 0) {
273 // @TYPE shield|Create a damage absorbing barrier based on Mental damage stat. Duration is ignored.
274 if (effect_list[i].type == Effect::SHIELD) {
284 if (ei.timer.getDuration() > 0) {
285 if (ei.timer.isEnd()) {
286 //death sentence is only applied at the end of the timer
287 // @TYPE death_sentence|Causes sudden death at the end of the effect duration.
288 if (ei.type == Effect::DEATH_SENTENCE) death_sentence = true;
275289 removeEffect(i);
276290 i--;
277291 continue;
278292 }
279293 }
280 // expire effects based on animations
281 if ((effect_list[i].animation && effect_list[i].animation->isLastFrame()) || !effect_list[i].animation) {
282 // @TYPE heal|Restore HP based on Mental damage stat.
283 if (effect_list[i].type == Effect::HEAL) {
294
295 // @TYPE damage|Damage per second
296 if (ei.type == Effect::DAMAGE && ei.timer.isWholeSecond()) damage += ei.magnitude;
297 // @TYPE damage_percent|Damage per second (percentage of max HP)
298 else if (ei.type == Effect::DAMAGE_PERCENT && ei.timer.isWholeSecond()) damage_percent += ei.magnitude;
299 // @TYPE hpot|HP restored per second
300 else if (ei.type == Effect::HPOT && ei.timer.isWholeSecond()) hpot += ei.magnitude;
301 // @TYPE hpot_percent|HP restored per second (percentage of max HP)
302 else if (ei.type == Effect::HPOT_PERCENT && ei.timer.isWholeSecond()) hpot_percent += ei.magnitude;
303 // @TYPE mpot|MP restored per second
304 else if (ei.type == Effect::MPOT && ei.timer.isWholeSecond()) mpot += ei.magnitude;
305 // @TYPE mpot_percent|MP restored per second (percentage of max MP)
306 else if (ei.type == Effect::MPOT_PERCENT && ei.timer.isWholeSecond()) mpot_percent += ei.magnitude;
307 // @TYPE speed|Changes movement speed. A magnitude of 100 is 100% speed (aka normal speed).
308 else if (ei.type == Effect::SPEED) speed = (static_cast<float>(ei.magnitude) * speed) / 100.f;
309 // @TYPE attack_speed|Changes attack speed. A magnitude of 100 is 100% speed (aka normal speed).
310 // attack speed is calculated when getAttackSpeed() is called
311
312 // @TYPE immunity|Applies all immunity effects. Magnitude is ignored.
313 else if (ei.type == Effect::IMMUNITY) {
314 immunity_damage = true;
315 immunity_slow = true;
316 immunity_stun = true;
317 immunity_hp_steal = true;
318 immunity_mp_steal = true;
319 immunity_knockback = true;
320 immunity_damage_reflect = true;
321 immunity_stat_debuff = true;
322 }
323 // @TYPE immunity_damage|Removes and prevents damage over time. Magnitude is ignored.
324 else if (ei.type == Effect::IMMUNITY_DAMAGE) immunity_damage = true;
325 // @TYPE immunity_slow|Removes and prevents slow effects. Magnitude is ignored.
326 else if (ei.type == Effect::IMMUNITY_SLOW) immunity_slow = true;
327 // @TYPE immunity_stun|Removes and prevents stun effects. Magnitude is ignored.
328 else if (ei.type == Effect::IMMUNITY_STUN) immunity_stun = true;
329 // @TYPE immunity_hp_steal|Prevents HP stealing. Magnitude is ignored.
330 else if (ei.type == Effect::IMMUNITY_HP_STEAL) immunity_hp_steal = true;
331 // @TYPE immunity_mp_steal|Prevents MP stealing. Magnitude is ignored.
332 else if (ei.type == Effect::IMMUNITY_MP_STEAL) immunity_mp_steal = true;
333 // @TYPE immunity_knockback|Removes and prevents knockback effects. Magnitude is ignored.
334 else if (ei.type == Effect::IMMUNITY_KNOCKBACK) immunity_knockback = true;
335 // @TYPE immunity_damage_reflect|Prevents damage reflection. Magnitude is ignored.
336 else if (ei.type == Effect::IMMUNITY_DAMAGE_REFLECT) immunity_damage_reflect = true;
337 // @TYPE immunity_stat_debuff|Prevents stat value altering effects that have a magnitude less than 0. Magnitude is ignored.
338 else if (ei.type == Effect::IMMUNITY_STAT_DEBUFF) immunity_stat_debuff = true;
339
340 // @TYPE stun|Can't move or attack. Being attacked breaks stun.
341 else if (ei.type == Effect::STUN) stun = true;
342 // @TYPE revive|Revives the player. Typically attached to a power that triggers when the player dies.
343 else if (ei.type == Effect::REVIVE) revive = true;
344 // @TYPE convert|Causes an enemy or an ally to switch allegiance
345 else if (ei.type == Effect::CONVERT) convert = true;
346 // @TYPE fear|Causes enemies to run away
347 else if (ei.type == Effect::FEAR) fear = true;
348 // @TYPE knockback|Pushes the target away from the source caster. Speed is the given value divided by the framerate cap.
349 else if (ei.type == Effect::KNOCKBACK) knockback_speed = static_cast<float>(ei.magnitude)/static_cast<float>(settings->max_frames_per_sec);
350
351 // @TYPE ${STATNAME}|Increases ${STATNAME}, where ${STATNAME} is any of the base stats. Examples: hp, avoidance, xp_gain
352 // @TYPE ${DAMAGE_TYPE}|Increases a damage min or max, where ${DAMAGE_TYPE} is any 'min' or 'max' value found in engine/damage_types.txt. Example: dmg_melee_min
353 else if (ei.type >= Effect::TYPE_COUNT && ei.type < Effect::TYPE_COUNT + Stats::COUNT + static_cast<int>(eset->damage_types.count)) {
354 bonus[ei.type - Effect::TYPE_COUNT] += ei.magnitude;
355 }
356 // @TYPE ${ELEMENT}_resist|Increase Resistance % to ${ELEMENT}, where ${ELEMENT} is any found in engine/elements.txt. Example: fire_resist
357 else if (ei.type >= Effect::TYPE_COUNT + Stats::COUNT + static_cast<int>(eset->damage_types.count) && ei.type < Effect::TYPE_COUNT + Stats::COUNT + static_cast<int>(eset->damage_types.count) + static_cast<int>(eset->elements.list.size())) {
358 bonus_resist[ei.type - Effect::TYPE_COUNT - Stats::COUNT - eset->damage_types.count] += ei.magnitude;
359 }
360 // @TYPE ${PRIMARYSTAT}|Increases ${PRIMARYSTAT}, where ${PRIMARYSTAT} is any of the primary stats defined in engine/primary_stats.txt. Example: physical
361 else if (ei.type >= Effect::TYPE_COUNT) {
362 bonus_primary[ei.type - Effect::TYPE_COUNT - Stats::COUNT - eset->damage_types.count - eset->elements.list.size()] += ei.magnitude;
363 }
364
365 ei.timer.tick();
366
367 // expire shield effects
368 if (ei.magnitude_max > 0 && ei.magnitude == 0) {
369 // @TYPE shield|Create a damage absorbing barrier based on Mental damage stat. Duration is ignored.
370 if (ei.type == Effect::SHIELD) {
284371 removeEffect(i);
285372 i--;
286373 continue;
287374 }
288375 }
376 // expire effects based on animations
377 if ((ei.animation && ei.animation->isLastFrame()) || !ei.animation) {
378 // @TYPE heal|Restore HP based on Mental damage stat.
379 if (ei.type == Effect::HEAL) {
380 removeEffect(i);
381 i--;
382 continue;
383 }
384 }
289385
290386 // animate
291 if (effect_list[i].animation) {
292 if (!effect_list[i].animation->isCompleted())
293 effect_list[i].animation->advanceFrame();
294 }
295 }
296 }
297
298 void EffectManager::addEffect(EffectDef &effect, int duration, int magnitude, int source_type, size_t power_id) {
387 if (ei.animation) {
388 if (!ei.animation->isCompleted())
389 ei.animation->advanceFrame();
390 }
391 }
392 }
393
394 void EffectManager::addEffect(EffectDef &effect, int duration, int magnitude, int source_type, PowerID power_id) {
299395 addEffectInternal(effect, duration, magnitude, source_type, false, power_id);
300396 }
301397
304400 addEffectInternal(effect, duration, magnitude, Power::SOURCE_TYPE_HERO, true, NO_POWER);
305401 }
306402
307 void EffectManager::addEffectInternal(EffectDef &effect, int duration, int magnitude, int source_type, bool item, size_t power_id) {
308 int effect_type = getType(effect.type);
403 void EffectManager::addEffectInternal(EffectDef &effect, int duration, int magnitude, int source_type, bool item, PowerID power_id) {
309404 refresh_stats = true;
310405
311406 // if we're already immune, don't add negative effects
312 if (immunity_damage && (effect_type == Effect::DAMAGE || effect_type == Effect::DAMAGE_PERCENT))
407 if (immunity_damage && (effect.type == Effect::DAMAGE || effect.type == Effect::DAMAGE_PERCENT))
313408 return;
314 else if (immunity_slow && effect_type == Effect::SPEED && magnitude < 100)
409 else if (immunity_slow && effect.type == Effect::SPEED && magnitude < 100)
315410 return;
316 else if (immunity_stun && effect_type == Effect::STUN)
411 else if (immunity_stun && effect.type == Effect::STUN)
317412 return;
318 else if (immunity_knockback && effect_type == Effect::KNOCKBACK)
413 else if (immunity_knockback && effect.type == Effect::KNOCKBACK)
319414 return;
320 else if (immunity_stat_debuff && effect_type > Effect::TYPE_COUNT && magnitude < 0)
415 else if (immunity_stat_debuff && effect.type > Effect::TYPE_COUNT && magnitude < 0)
321416 return;
322417
323418 // only allow one knockback effect at a time
324 if (effect_type == Effect::KNOCKBACK && knockback_speed != 0)
419 if (effect.type == Effect::KNOCKBACK && knockback_speed != 0)
325420 return;
326421
327 if (effect_type == Effect::ATTACK_SPEED && magnitude < 100) {
328 Utils::logInfo("EffectManager: Attack speeds less than 100 are unsupported.");
329 return;
330 }
331
332422 bool insert_effect = false;
423 size_t insert_pos;
333424 int stacks_applied = 0;
334 size_t insert_pos;
335425 int trigger = power_id > 0 ? powers->powers[power_id].passive_trigger : -1;
336426 size_t passive_id = (power_id > 0 && powers->powers[power_id].passive) ? power_id : 0;
337427
338428 for (size_t i=effect_list.size(); i>0; i--) {
339 if (effect_list[i-1].id == effect.id) {
340 if (trigger > -1 && effect_list[i-1].trigger == trigger)
429 Effect& ei = effect_list[i-1];
430
431 // while checking only id would be sufficient, it is a slow string compare
432 // so we check the type first, which is an int compare, before taking the slow path
433 if (ei.type == effect.type && ei.id == effect.id) {
434 if (trigger > -1 && ei.trigger == trigger)
341435 return; // trigger effects can only be cast once per trigger
342436
343437 if (!effect.can_stack) {
344438 removeEffect(i-1);
345439 }
346440 else{
347 if(effect_type == Effect::SHIELD && effect.group_stack){
348 effect_list[i-1].magnitude += magnitude;
349
350 if(effect.max_stacks == -1
351 || (magnitude != 0 && effect_list[i-1].magnitude_max/magnitude < effect.max_stacks)){
352 effect_list[i-1].magnitude_max += magnitude;
441 if (effect.type == Effect::SHIELD && effect.group_stack){
442 ei.magnitude += magnitude;
443
444 if (effect.max_stacks == -1
445 || (magnitude != 0 && ei.magnitude_max/magnitude < effect.max_stacks)){
446 ei.magnitude_max += magnitude;
353447 }
354448
355 if(effect_list[i-1].magnitude > effect_list[i-1].magnitude_max){
356 effect_list[i-1].magnitude = effect_list[i-1].magnitude_max;
449 if (ei.magnitude > ei.magnitude_max){
450 ei.magnitude = ei.magnitude_max;
357451 }
358452
359453 return;
360454 }
361455
362 if (insert_effect == false) {
363 // to keep matching effects together, they are inserted after the most recent matching effect
456 if (insert_effect == false && effect.max_stacks != -1) {
457 // to keep stackable effects together, they are inserted after the most recent matching effect
364458 // otherwise, they are added to the end of the effect list
365459 insert_effect = true;
366460 insert_pos = i;
370464 }
371465 }
372466 // if we're adding an immunity effect, remove all negative effects
373 if (effect_type == Effect::IMMUNITY)
467 if (effect.type == Effect::IMMUNITY)
374468 clearNegativeEffects();
375 else if (effect_type == Effect::IMMUNITY_DAMAGE)
469 else if (effect.type == Effect::IMMUNITY_DAMAGE)
376470 clearNegativeEffects(Effect::IMMUNITY_DAMAGE);
377 else if (effect_type == Effect::IMMUNITY_SLOW)
471 else if (effect.type == Effect::IMMUNITY_SLOW)
378472 clearNegativeEffects(Effect::IMMUNITY_SLOW);
379 else if (effect_type == Effect::IMMUNITY_STUN)
473 else if (effect.type == Effect::IMMUNITY_STUN)
380474 clearNegativeEffects(Effect::IMMUNITY_STUN);
381 else if (effect_type == Effect::IMMUNITY_KNOCKBACK)
475 else if (effect.type == Effect::IMMUNITY_KNOCKBACK)
382476 clearNegativeEffects(Effect::IMMUNITY_KNOCKBACK);
383477 }
384478
387481 e.id = effect.id;
388482 e.name = effect.name;
389483 e.icon = effect.icon;
390 e.type = effect_type;
484 e.type = effect.type;
391485 e.render_above = effect.render_above;
392486 e.group_stack = effect.group_stack;
393 e.color_mod = effect.color_mod;
487 e.color_mod = effect.color_mod.encodeRGBA();
394488 e.alpha_mod = effect.alpha_mod;
395489 e.attack_speed_anim = effect.attack_speed_anim;
396490
397 if (effect.animation != "") {
491 if (!effect.animation.empty()) {
398492 e.loadAnimation(effect.animation);
399493 }
400494
401 e.ticks = e.duration = duration;
495 e.timer.setDuration(duration);
402496 e.magnitude = e.magnitude_max = magnitude;
403497 e.item = item;
404498 e.trigger = trigger;
405499 e.passive_id = passive_id;
406500 e.source_type = source_type;
407501
408 if(insert_effect && effect.max_stacks != -1 && stacks_applied >= effect.max_stacks){
409 //Remove the oldest effect of the type
410 removeEffect(insert_pos-stacks_applied);
411
412 //All elemnts have shiftef to left
413 insert_pos--;
414 }
415
416 if (insert_effect)
502 if (insert_effect) {
503 if (effect.max_stacks != -1 && stacks_applied >= effect.max_stacks){
504 //Remove the oldest effect of the type
505 removeEffect(insert_pos-stacks_applied);
506
507 //All elements have shifted to left
508 insert_pos--;
509 }
510
417511 effect_list.insert(effect_list.begin() + insert_pos, e);
418 else
512 }
513 else {
419514 effect_list.push_back(e);
515 }
420516 }
421517
422518 void EffectManager::removeEffect(size_t id) {
512608 return over_dmg;
513609 }
514610
515 int EffectManager::getType(const std::string& type) {
516 if (type.empty()) return Effect::NONE;
517
518 if (type == "damage") return Effect::DAMAGE;
519 else if (type == "damage_percent") return Effect::DAMAGE_PERCENT;
520 else if (type == "hpot") return Effect::HPOT;
521 else if (type == "hpot_percent") return Effect::HPOT_PERCENT;
522 else if (type == "mpot") return Effect::MPOT;
523 else if (type == "mpot_percent") return Effect::MPOT_PERCENT;
524 else if (type == "speed") return Effect::SPEED;
525 else if (type == "attack_speed") return Effect::ATTACK_SPEED;
526 else if (type == "immunity") return Effect::IMMUNITY;
527 else if (type == "immunity_damage") return Effect::IMMUNITY_DAMAGE;
528 else if (type == "immunity_slow") return Effect::IMMUNITY_SLOW;
529 else if (type == "immunity_stun") return Effect::IMMUNITY_STUN;
530 else if (type == "immunity_hp_steal") return Effect::IMMUNITY_HP_STEAL;
531 else if (type == "immunity_mp_steal") return Effect::IMMUNITY_MP_STEAL;
532 else if (type == "immunity_knockback") return Effect::IMMUNITY_KNOCKBACK;
533 else if (type == "immunity_damage_reflect") return Effect::IMMUNITY_DAMAGE_REFLECT;
534 else if (type == "immunity_stat_debuff") return Effect::IMMUNITY_STAT_DEBUFF;
535 else if (type == "stun") return Effect::STUN;
536 else if (type == "revive") return Effect::REVIVE;
537 else if (type == "convert") return Effect::CONVERT;
538 else if (type == "fear") return Effect::FEAR;
539 else if (type == "death_sentence") return Effect::DEATH_SENTENCE;
540 else if (type == "shield") return Effect::SHIELD;
541 else if (type == "heal") return Effect::HEAL;
542 else if (type == "knockback") return Effect::KNOCKBACK;
543 else {
544 for (int i=0; i<Stats::COUNT; i++) {
545 if (type == Stats::KEY[i]) {
546 return Effect::TYPE_COUNT + i;
547 }
548 }
549
550 for (unsigned i=0; i<eset->damage_types.list.size(); i++) {
551 if (type == eset->damage_types.list[i].min) {
552 return Effect::TYPE_COUNT + Stats::COUNT + (i*2);
553 }
554 else if (type == eset->damage_types.list[i].max) {
555 return Effect::TYPE_COUNT + Stats::COUNT + (i*2) + 1;
556 }
557 }
558
559 for (unsigned i=0; i<bonus_resist.size(); i++) {
560 if (type == eset->elements.list[i].id + "_resist") {
561 return Effect::TYPE_COUNT + Stats::COUNT + static_cast<int>(eset->damage_types.count) + i;
562 }
563 }
564
565 for (unsigned i=0; i<bonus_primary.size(); i++) {
566 if (type == eset->primary_stats.list[i].id) {
567 return Effect::TYPE_COUNT + Stats::COUNT + static_cast<int>(eset->damage_types.count) + static_cast<int>(eset->elements.list.size()) + i;
568 }
569 }
570 }
571
572 Utils::logError("EffectManager: '%s' is not a valid effect type.", type.c_str());
573 return Effect::NONE;
574 }
575
576611 bool EffectManager::isDebuffed() {
577612 for (size_t i=effect_list.size(); i > 0; i--) {
578613 if (effect_list[i-1].type == Effect::DAMAGE) return true;
586621 }
587622
588623 void EffectManager::getCurrentColor(Color& color_mod) {
589 Color default_color = color_mod;
590 Color no_color = Color(255, 255, 255);
591
592 for (size_t i=effect_list.size(); i > 0; i--) {
593 if (effect_list[i-1].color_mod == no_color)
624 uint32_t default_color = color_mod.encodeRGBA();
625 uint32_t no_color = Color(255, 255, 255).encodeRGBA();
626
627 for (size_t i=effect_list.size(); i > 0; i--) {
628 Effect& ei = effect_list[i-1];
629 if (ei.color_mod == no_color)
594630 continue;
595631
596 if (effect_list[i-1].color_mod != default_color) {
597 color_mod = effect_list[i-1].color_mod;
632 if (ei.color_mod != default_color) {
633 color_mod.decodeRGBA(ei.color_mod);
598634 return;
599635 }
600636 }
605641 uint8_t no_alpha = 255;
606642
607643 for (size_t i=effect_list.size(); i > 0; i--) {
608 if (effect_list[i-1].alpha_mod == no_alpha)
644 Effect& ei = effect_list[i-1];
645 if (ei.alpha_mod == no_alpha)
609646 continue;
610647
611 if (effect_list[i-1].alpha_mod != default_alpha) {
612 alpha_mod = effect_list[i-1].alpha_mod;
648 if (ei.alpha_mod != default_alpha) {
649 alpha_mod = ei.alpha_mod;
613650 return;
614651 }
615652 }
643680
644681 return attack_speed;
645682 }
683
684 int EffectManager::getDamageSourceType(int dmg_mode) {
685 if (dmg_mode != Effect::DAMAGE || dmg_mode != Effect::DAMAGE_PERCENT)
686 return -1;
687
688 int source_type = Power::SOURCE_TYPE_NEUTRAL;
689
690 for (size_t i = 0; i < effect_list.size(); ++i) {
691 Effect& ei = effect_list[i];
692 if (ei.type == dmg_mode) {
693 // anything other than ally source type take precedence, so we can return early
694 if (ei.source_type != Power::SOURCE_TYPE_ALLY)
695 return ei.source_type;
696
697 source_type = ei.source_type;
698 }
699 }
700
701 return source_type;
702 }
6969 void loadAnimation(const std::string &s);
7070 void unloadAnimation();
7171
72 static int getTypeFromString(const std::string& _type);
73 static bool typeIsStat(int t);
74 static bool typeIsDmgMin(int t);
75 static bool typeIsDmgMax(int t);
76 static bool typeIsResist(int t);
77 static bool typeIsPrimary(int t);
78 static int getStatFromType(int t);
79 static size_t getDmgFromType(int t);
80 static size_t getResistFromType(int t);
81 static size_t getPrimaryFromType(int t);
82
7283 std::string id;
7384 std::string name;
7485 int icon;
75 int ticks;
76 int duration;
86 Timer timer;
7787 int type;
7888 int magnitude;
7989 int magnitude_max;
8595 size_t passive_id;
8696 int source_type;
8797 bool group_stack;
88 Color color_mod;
98 uint32_t color_mod;
8999 uint8_t alpha_mod;
90100 std::string attack_speed_anim;
91101 };
95105 EffectDef();
96106
97107 std::string id;
98 std::string type;
108 int type;
99109 std::string name;
100110 int icon;
101111 std::string animation;
112122 private:
113123 void removeEffect(size_t id);
114124 void clearStatus();
115 int getType(const std::string& type);
116 void addEffectInternal(EffectDef &effect, int duration, int magnitude, int source_type, bool item, size_t power_id);
125 void addEffectInternal(EffectDef &effect, int duration, int magnitude, int source_type, bool item, PowerID power_id);
117126
118127 public:
119128 EffectManager();
120129 ~EffectManager();
121130 void logic();
122 void addEffect(EffectDef &effect, int duration, int magnitude, int source_type, size_t power_id);
131 void addEffect(EffectDef &effect, int duration, int magnitude, int source_type, PowerID power_id);
123132 void addItemEffect(EffectDef &effect, int duration, int magnitude);
124133 void removeEffectType(const int type);
125134 void removeEffectPassive(size_t id);
134143 void getCurrentAlpha(uint8_t& alpha_mod);
135144 bool hasEffect(const std::string& id, int req_count);
136145 float getAttackSpeed(const std::string& anim_name);
146 int getDamageSourceType(int dmg_mode);
137147
138148 std::vector<Effect> effect_list;
139149
+0
-192
src/Enemy.cpp less more
0 /*
1 Copyright © 2011-2012 Clint Bellanger
2 Copyright © 2012 Stefan Beller
3 Copyright © 2012-2015 Justin Jacobs
4
5 This file is part of FLARE.
6
7 FLARE is free software: you can redistribute it and/or modify it under the terms
8 of the GNU General Public License as published by the Free Software Foundation,
9 either version 3 of the License, or (at your option) any later version.
10
11 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13 PARTICULAR PURPOSE. See the GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License along with
16 FLARE. If not, see http://www.gnu.org/licenses/
17 */
18
19 #include "Animation.h"
20 #include "Avatar.h"
21 #include "BehaviorAlly.h"
22 #include "BehaviorStandard.h"
23 #include "CampaignManager.h"
24 #include "CommonIncludes.h"
25 #include "Enemy.h"
26 #include "EnemyBehavior.h"
27 #include "LootManager.h"
28 #include "PowerManager.h"
29 #include "RenderDevice.h"
30 #include "Settings.h"
31 #include "SharedGameResources.h"
32 #include "SharedResources.h"
33 #include "UtilsMath.h"
34
35 #include <math.h>
36 #include <cassert>
37
38 Enemy::Enemy() : Entity() {
39
40 stats.cur_state = StatBlock::ENEMY_STANCE;
41 stats.cooldown.reset(Timer::END);
42 stats.in_combat = false;
43 stats.join_combat = false;
44
45 reward_xp = false;
46 instant_power = false;
47 kill_source_type = Power::SOURCE_TYPE_NEUTRAL;
48 eb = NULL;
49 }
50
51 Enemy::Enemy(const Enemy& e)
52 : Entity(e)
53 , type(e.type)
54 , reward_xp(e.reward_xp)
55 , instant_power(e.instant_power)
56 , kill_source_type(e.kill_source_type) {
57 eb = new BehaviorStandard(this); // Putting a 'this' into the init list will make MSVS complain, hence it's in the body of the ctor
58 }
59
60 Enemy& Enemy::operator=(const Enemy& e) {
61 if (this == &e)
62 return *this;
63
64 Entity::operator=(e);
65 type = e.type;
66 reward_xp = e.reward_xp;
67 instant_power = e.instant_power;
68 kill_source_type = e.kill_source_type;
69 eb = new BehaviorStandard(this);
70
71 return *this;
72 }
73
74 /**
75 * The current direction leads to a wall. Try the next best direction, if one is available.
76 */
77 unsigned char Enemy::faceNextBest(float mapx, float mapy) {
78 float dx = static_cast<float>(fabs(mapx - stats.pos.x));
79 float dy = static_cast<float>(fabs(mapy - stats.pos.y));
80 switch (stats.direction) {
81 case 0:
82 if (dy > dx) return 7;
83 else return 1;
84 case 1:
85 if (mapy > stats.pos.y) return 0;
86 else return 2;
87 case 2:
88 if (dx > dy) return 1;
89 else return 3;
90 case 3:
91 if (mapx < stats.pos.x) return 2;
92 else return 4;
93 case 4:
94 if (dy > dx) return 3;
95 else return 5;
96 case 5:
97 if (mapy < stats.pos.y) return 4;
98 else return 6;
99 case 6:
100 if (dx > dy) return 5;
101 else return 7;
102 case 7:
103 if (mapx > stats.pos.x) return 6;
104 else return 0;
105 }
106 return 0;
107 }
108
109 /**
110 * logic()
111 * Handle a single frame. This includes:
112 * - move the enemy based on AI % chances
113 * - calculate the next frame of animation
114 */
115 void Enemy::logic() {
116
117 eb->logic();
118
119 //need to check whether the enemy was converted here
120 //cant do it in behaviour because the behaviour object would be replaced by this
121 if(stats.effects.convert != stats.converted) {
122 delete eb;
123 eb = stats.hero_ally ? new BehaviorStandard(this) : new BehaviorAlly(this);
124 stats.converted = !stats.converted;
125 stats.hero_ally = !stats.hero_ally;
126 if (stats.convert_status != 0) {
127 camp->setStatus(stats.convert_status);
128 }
129 }
130
131 return;
132 }
133
134 /**
135 * Upon enemy death, handle rewards (currency, xp, loot)
136 */
137 void Enemy::doRewards(int source_type) {
138
139 if(stats.hero_ally && !stats.converted)
140 return;
141
142 reward_xp = true;
143 kill_source_type = source_type;
144
145 // some creatures create special loot if we're on a quest
146 if (stats.quest_loot_requires_status != 0) {
147 // the loot manager will check quest_loot_id
148 // if set (not zero), the loot manager will 100% generate that loot.
149 if (!(camp->checkStatus(stats.quest_loot_requires_status) && !camp->checkStatus(stats.quest_loot_requires_not_status))) {
150 stats.quest_loot_id = 0;
151 }
152 }
153
154 // some creatures drop special loot the first time they are defeated
155 // this must be done in conjunction with defeat status
156 if (stats.first_defeat_loot > 0) {
157 if (!camp->checkStatus(stats.defeat_status)) {
158 stats.quest_loot_id = stats.first_defeat_loot;
159 }
160 }
161
162 // defeating some creatures (e.g. bosses) affects the story
163 if (stats.defeat_status != 0) {
164 camp->setStatus(stats.defeat_status);
165 }
166
167 loot->addEnemyLoot(this);
168 }
169
170 /**
171 * getRender()
172 * Map objects need to be drawn in Z order, so we allow a parent object (GameEngine)
173 * to collect all mobile sprites each frame.
174 */
175 Renderable Enemy::getRender() {
176 Renderable r = activeAnimation->getCurrentFrame(stats.direction);
177 r.map_pos.x = stats.pos.x;
178 r.map_pos.y = stats.pos.y;
179 if (stats.hp > 0) {
180 if (stats.hero_ally)
181 r.type = Renderable::TYPE_ALLY;
182 else if (stats.in_combat)
183 r.type = Renderable::TYPE_ENEMY;
184 }
185 return r;
186 }
187
188 Enemy::~Enemy() {
189 delete eb;
190 }
191
+0
-60
src/Enemy.h less more
0 /*
1 Copyright © 2011-2012 Clint Bellanger
2 Copyright © 2012 Stefan Beller
3 Copyright © 2012-2015 Justin Jacobs
4
5 This file is part of FLARE.
6
7 FLARE is free software: you can redistribute it and/or modify it under the terms
8 of the GNU General Public License as published by the Free Software Foundation,
9 either version 3 of the License, or (at your option) any later version.
10
11 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13 PARTICULAR PURPOSE. See the GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License along with
16 FLARE. If not, see http://www.gnu.org/licenses/
17 */
18
19 /*
20 * class Enemy
21 */
22
23
24 #ifndef ENEMY_H
25 #define ENEMY_H
26
27 #include "CommonIncludes.h"
28 #include "Entity.h"
29 #include "Utils.h"
30
31 class EnemyBehavior;
32
33 class Enemy : public Entity {
34
35 public:
36 Enemy();
37 Enemy(const Enemy& e);
38 Enemy& operator=(const Enemy& e);
39 ~Enemy();
40 void logic();
41 unsigned char faceNextBest(float mapx, float mapy);
42 virtual void doRewards(int source_type);
43
44 std::string type;
45
46 Renderable getRender();
47
48 EnemyBehavior *eb;
49
50 // other flags
51 bool reward_xp;
52 bool instant_power;
53 int kill_source_type;
54
55 };
56
57
58 #endif
59
+0
-38
src/EnemyBehavior.cpp less more
0 /*
1 Copyright © 2012 Clint Bellanger
2
3 This file is part of FLARE.
4
5 FLARE is free software: you can redistribute it and/or modify it under the terms
6 of the GNU General Public License as published by the Free Software Foundation,
7 either version 3 of the License, or (at your option) any later version.
8
9 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
10 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
11 PARTICULAR PURPOSE. See the GNU General Public License for more details.
12
13 You should have received a copy of the GNU General Public License along with
14 FLARE. If not, see http://www.gnu.org/licenses/
15 */
16
17 /**
18 * class EnemyBehavior
19 *
20 * Interface for enemy behaviors.
21 * The behavior object is a component of Enemy.
22 * Make AI decisions (movement, actions) for enemies.
23 */
24
25 #include "EnemyBehavior.h"
26
27 EnemyBehavior::EnemyBehavior(Enemy *_e) {
28 e = _e;
29 }
30
31 void EnemyBehavior::logic() {
32
33 }
34
35 EnemyBehavior::~EnemyBehavior() {
36
37 }
+0
-41
src/EnemyBehavior.h less more
0 /*
1 Copyright © 2012 Clint Bellanger
2
3 This file is part of FLARE.
4
5 FLARE is free software: you can redistribute it and/or modify it under the terms
6 of the GNU General Public License as published by the Free Software Foundation,
7 either version 3 of the License, or (at your option) any later version.
8
9 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
10 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
11 PARTICULAR PURPOSE. See the GNU General Public License for more details.
12
13 You should have received a copy of the GNU General Public License along with
14 FLARE. If not, see http://www.gnu.org/licenses/
15 */
16
17 /**
18 * class EnemyBehavior
19 *
20 * Interface for enemy behaviors.
21 * The behavior object is a component of Enemy.
22 * Make AI decisions (movement, actions) for enemies.
23 */
24
25
26 #ifndef ENEMY_BEHAVIOR_H
27 #define ENEMY_BEHAVIOR_H
28
29 class Enemy;
30
31 class EnemyBehavior {
32 protected:
33 Enemy *e;
34 public:
35 explicit EnemyBehavior(Enemy *_e);
36 virtual ~EnemyBehavior();
37 virtual void logic();
38 };
39
40 #endif
+0
-552
src/EnemyManager.cpp less more
0 /*
1 Copyright © 2011-2012 Clint Bellanger
2 Copyright © 2012 Stefan Beller
3 Copyright © 2013 Henrik Andersson
4 Copyright © 2012-2016 Justin Jacobs
5
6 This file is part of FLARE.
7
8 FLARE is free software: you can redistribute it and/or modify it under the terms
9 of the GNU General Public License as published by the Free Software Foundation,
10 either version 3 of the License, or (at your option) any later version.
11
12 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14 PARTICULAR PURPOSE. See the GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License along with
17 FLARE. If not, see http://www.gnu.org/licenses/
18 */
19
20 #include "Animation.h"
21 #include "AnimationManager.h"
22 #include "AnimationSet.h"
23 #include "Avatar.h"
24 #include "BehaviorAlly.h"
25 #include "BehaviorStandard.h"
26 #include "CampaignManager.h"
27 #include "Enemy.h"
28 #include "EnemyBehavior.h"
29 #include "EnemyGroupManager.h"
30 #include "EnemyManager.h"
31 #include "EngineSettings.h"
32 #include "EventManager.h"
33 #include "Hazard.h"
34 #include "MapRenderer.h"
35 #include "MenuActionBar.h"
36 #include "PowerManager.h"
37 #include "RenderDevice.h"
38 #include "Settings.h"
39 #include "SharedGameResources.h"
40 #include "SharedResources.h"
41
42 #include <limits>
43
44 EnemyManager::EnemyManager()
45 : enemies()
46 , hero_stealth(0)
47 , player_blocked(false)
48 , player_blocked_timer(settings->max_frames_per_sec / 6) {
49 handleNewMap();
50 }
51
52 void EnemyManager::loadAnimations(Enemy *e) {
53 anim->increaseCount(e->stats.animations);
54 e->animationSet = anim->getAnimationSet(e->stats.animations);
55 e->activeAnimation = e->animationSet->getAnimation("");
56 }
57
58 Enemy *EnemyManager::getEnemyPrototype(const std::string& type_id) {
59 Enemy* e = new Enemy(prototypes.at(loadEnemyPrototype(type_id)));
60 anim->increaseCount(e->stats.animations);
61 return e;
62 }
63
64 size_t EnemyManager::loadEnemyPrototype(const std::string& type_id) {
65 for (size_t i = 0; i < prototypes.size(); i++) {
66 if (prototypes[i].type == type_id) {
67 return i;
68 }
69 }
70
71 Enemy e = Enemy();
72
73 e.eb = new BehaviorStandard(&e);
74 e.stats.load(type_id);
75 e.type = type_id;
76
77 if (e.stats.animations == "")
78 Utils::logError("EnemyManager: No animation file specified for entity: %s", type_id.c_str());
79
80 loadAnimations(&e);
81 e.loadSounds();
82
83 // set cooldown_hit to duration of hit animation if undefined
84 if (!e.stats.cooldown_hit_enabled) {
85 Animation *hit_anim = e.animationSet->getAnimation("hit");
86 if (hit_anim) {
87 e.stats.cooldown_hit.setDuration(hit_anim->getDuration());
88 delete hit_anim;
89 }
90 else {
91 e.stats.cooldown_hit.setDuration(0);
92 }
93 }
94
95 prototypes.push_back(e);
96 size_t prototype = prototypes.size() - 1;
97
98 for (size_t i = 0; i < e.stats.powers_ai.size(); i++) {
99 int power_index = e.stats.powers_ai[i].id;
100 const std::string& spawn_type = powers->powers[power_index].spawn_type;
101 if (power_index != 0 && spawn_type != "" && spawn_type != "untransform") {
102 std::vector<Enemy_Level> spawn_enemies = enemyg->getEnemiesInCategory(spawn_type);
103 for (size_t j = 0; j < spawn_enemies.size(); j++) {
104 loadEnemyPrototype(spawn_enemies[j].type);
105 }
106 }
107 }
108
109 return prototype;
110 }
111
112 /**
113 * When loading a new map, we eliminate existing enemies and load the new ones.
114 * The map will have loaded Entity blocks into an array; retrieve the Enemies and init them
115 */
116 void EnemyManager::handleNewMap () {
117
118 Map_Enemy me;
119 std::queue<Enemy *> allies;
120
121 // delete existing enemies
122 for (unsigned int i=0; i < enemies.size(); i++) {
123 anim->decreaseCount(enemies[i]->animationSet->getName());
124 if(enemies[i]->stats.hero_ally && !enemies[i]->stats.corpse && enemies[i]->stats.cur_state != StatBlock::ENEMY_DEAD && enemies[i]->stats.cur_state != StatBlock::ENEMY_CRITDEAD && enemies[i]->stats.speed > 0.0f)
125 allies.push(enemies[i]);
126 else {
127 enemies[i]->unloadSounds();
128 delete enemies[i];
129 }
130 }
131 enemies.clear();
132
133
134 for (unsigned int i=0; i < prototypes.size(); i++) {
135 anim->decreaseCount(prototypes[i].animationSet->getName());
136 prototypes[i].unloadSounds();
137 }
138 prototypes.clear();
139
140 // load new enemies
141 while (!mapr->enemies.empty()) {
142 me = mapr->enemies.front();
143 mapr->enemies.pop();
144
145 if (me.type.empty()) {
146 Utils::logError("EnemyManager: Enemy(%f, %f) doesn't have type attribute set, skipping", me.pos.x, me.pos.y);
147 continue;
148 }
149
150
151 bool status_reqs_met = true;
152 //if the status requirements arent met, dont load the enemy
153 for(unsigned int i = 0; i < me.requires_status.size(); i++) {
154 if (!camp->checkStatus(me.requires_status[i]))
155 status_reqs_met = false;
156 }
157 for(unsigned int i = 0; i < me.requires_not_status.size(); i++) {
158 if (camp->checkStatus(me.requires_not_status[i]))
159 status_reqs_met = false;
160 }
161 if(!status_reqs_met)
162 continue;
163
164
165 Enemy *e = getEnemyPrototype(me.type);
166
167 e->stats.waypoints = me.waypoints;
168 e->stats.pos.x = me.pos.x;
169 e->stats.pos.y = me.pos.y;
170 e->stats.direction = static_cast<unsigned char>(me.direction);
171 e->stats.wander = me.wander_radius > 0;
172 e->stats.setWanderArea(me.wander_radius);
173 e->stats.invincible_requires_status = me.invincible_requires_status;
174 e->stats.invincible_requires_not_status = me.invincible_requires_not_status;
175
176 enemies.push_back(e);
177
178 mapr->collider.block(me.pos.x, me.pos.y, !MapCollision::IS_ALLY);
179 }
180
181 FPoint spawn_pos = mapr->collider.getRandomNeighbor(Point(pc->stats.pos), 1, !MapCollision::IGNORE_BLOCKED);
182 while (!allies.empty()) {
183
184 Enemy *e = allies.front();
185 allies.pop();
186
187 //dont need the result of this. its only called to handle animation and sound
188 Enemy* temp = getEnemyPrototype(e->type);
189 delete temp;
190
191 e->stats.pos = spawn_pos;
192 e->stats.direction = pc->stats.direction;
193
194 enemies.push_back(e);
195
196 mapr->collider.block(e->stats.pos.x, e->stats.pos.y, MapCollision::IS_ALLY);
197 }
198
199 // load enemies that can be spawn by avatar's powers
200 for (size_t i = 0; i < pc->stats.powers_list.size(); i++) {
201 int power_index = pc->stats.powers_list[i];
202 const std::string& spawn_type = powers->powers[power_index].spawn_type;
203 if (spawn_type != "" && spawn_type != "untransform") {
204 std::vector<Enemy_Level> spawn_enemies = enemyg->getEnemiesInCategory(spawn_type);
205 for (size_t j = 0; j < spawn_enemies.size(); j++) {
206 loadEnemyPrototype(spawn_enemies[j].type);
207 }
208 }
209 }
210
211 // load enemies that can be spawn by powers in the action bar
212 if (menu_act != NULL) {
213 for (size_t i = 0; i < menu_act->hotkeys.size(); i++) {
214 int power_index = menu_act->hotkeys[i];
215 const std::string& spawn_type = powers->powers[power_index].spawn_type;
216 if (power_index != 0 && spawn_type != "" && spawn_type != "untransform") {
217 std::vector<Enemy_Level> spawn_enemies = enemyg->getEnemiesInCategory(spawn_type);
218 for (size_t j = 0; j < spawn_enemies.size(); j++) {
219 loadEnemyPrototype(spawn_enemies[j].type);
220 }
221 }
222 }
223 }
224
225 // load enemies that can be spawn by map events
226 for (size_t i = 0; i < mapr->events.size(); i++) {
227 for (size_t j = 0; j < mapr->events[i].components.size(); j++) {
228 if (mapr->events[i].components[j].type == EventComponent::SPAWN) {
229 std::vector<Enemy_Level> spawn_enemies = enemyg->getEnemiesInCategory(mapr->events[i].components[j].s);
230 for (size_t k = 0; k < spawn_enemies.size(); k++) {
231 loadEnemyPrototype(spawn_enemies[k].type);
232 }
233 }
234 }
235 }
236
237 anim->cleanUp();
238 }
239
240 /**
241 * Powers can cause new enemies to spawn
242 * Check PowerManager for any new queued enemies
243 */
244 void EnemyManager::handleSpawn() {
245
246 Map_Enemy espawn;
247
248 while (!powers->map_enemies.empty()) {
249 espawn = powers->map_enemies.front();
250 powers->map_enemies.pop();
251
252 mapr->collider.unblock(espawn.pos.x, espawn.pos.y);
253
254 Enemy *e = new Enemy();
255 // factory
256 if(espawn.hero_ally)
257 e->eb = new BehaviorAlly(e);
258 else
259 e->eb = new BehaviorStandard(e);
260
261 e->stats.hero_ally = espawn.hero_ally;
262 e->stats.enemy_ally = espawn.enemy_ally;
263 e->stats.summoned = true;
264 e->stats.summoned_power_index = espawn.summon_power_index;
265
266 if(espawn.summoner != NULL) {
267 e->stats.summoner = espawn.summoner;
268 espawn.summoner->summons.push_back(&(e->stats));
269 }
270
271 e->stats.direction = static_cast<unsigned char>(espawn.direction);
272
273 Enemy_Level el = enemyg->getRandomEnemy(espawn.type, 0, 0);
274 e->type = el.type;
275
276 if (el.type != "") {
277 e->stats.load(el.type);
278 }
279 else {
280 Utils::logError("EnemyManager: Could not spawn creature type '%s'", espawn.type.c_str());
281 delete e;
282 return;
283 }
284
285 if (e->stats.animations != "") {
286 // load the animation file if specified
287 anim->increaseCount(e->stats.animations);
288 e->animationSet = anim->getAnimationSet(e->stats.animations);
289 if (e->animationSet)
290 e->activeAnimation = e->animationSet->getAnimation("");
291 else
292 Utils::logError("EnemyManager: Animations file could not be loaded for %s", espawn.type.c_str());
293 }
294 else {
295 Utils::logError("EnemyManager: No animation file specified for entity: %s", espawn.type.c_str());
296 }
297 e->loadSounds();
298
299 //Set level
300 if(e->stats.summoned_power_index != 0) {
301 if(powers->powers[e->stats.summoned_power_index].spawn_level_mode == Power::SPAWN_LEVEL_MODE_FIXED)
302 e->stats.level = powers->powers[e->stats.summoned_power_index].spawn_level_qty;
303
304 if(powers->powers[e->stats.summoned_power_index].spawn_level_mode == Power::SPAWN_LEVEL_MODE_LEVEL) {
305 if(e->stats.summoner != NULL && powers->powers[e->stats.summoned_power_index].spawn_level_every != 0) {
306 e->stats.level = powers->powers[e->stats.summoned_power_index].spawn_level_qty
307 * (e->stats.summoner->level / powers->powers[e->stats.summoned_power_index].spawn_level_every);
308 }
309 }
310
311 if(powers->powers[e->stats.summoned_power_index].spawn_level_mode == Power::SPAWN_LEVEL_MODE_STAT) {
312 if(e->stats.summoner != NULL && powers->powers[e->stats.summoned_power_index].spawn_level_every != 0) {
313 int stat_val = 0;
314 for (size_t i = 0; i < eset->primary_stats.list.size(); ++i) {
315 if (powers->powers[e->stats.summoned_power_index].spawn_level_stat == i) {
316 stat_val = e->stats.summoner->get_primary(i);
317 break;
318 }
319 }
320
321 e->stats.level = powers->powers[e->stats.summoned_power_index].spawn_level_qty
322 * (stat_val / powers->powers[e->stats.summoned_power_index].spawn_level_every);
323 }
324 }
325
326 // apply Effects and set HP to max HP
327 e->stats.recalc();
328 }
329
330 if (mapr->collider.isValidPosition(espawn.pos.x, espawn.pos.y, e->stats.movement_type, MapCollision::COLLIDE_NORMAL) || !e->stats.hero_ally) {
331 e->stats.pos.x = espawn.pos.x;
332 e->stats.pos.y = espawn.pos.y;
333 }
334 else {
335 e->stats.pos.x = pc->stats.pos.x;
336 e->stats.pos.y = pc->stats.pos.y;
337 }
338
339 // special animation state for spawning enemies
340 e->stats.cur_state = StatBlock::ENEMY_SPAWN;
341
342 //now apply post effects to the spawned enemy
343 if(e->stats.summoned_power_index > 0)
344 powers->effect(&e->stats, (espawn.summoner != NULL ? espawn.summoner : &e->stats), e->stats.summoned_power_index, e->stats.hero_ally ? Power::SOURCE_TYPE_HERO : Power::SOURCE_TYPE_ENEMY);
345
346 //apply party passives
347 //synchronise tha party passives in the pc stat block with the passives in the allies stat blocks
348 //at the time the summon is spawned, it takes the passives available at that time. if the passives change later, the changes wont affect summons retrospectively. could be exploited with equipment switching
349 for (unsigned i=0; i< pc->stats.powers_passive.size(); i++) {
350 int pwr = pc->stats.powers_passive[i];
351 if (powers->powers[pwr].passive && powers->powers[pwr].buff_party && (e->stats.hero_ally || e->stats.enemy_ally)
352 && (powers->powers[pwr].buff_party_power_id == 0 || powers->powers[pwr].buff_party_power_id == e->stats.summoned_power_index)) {
353
354 e->stats.powers_passive.push_back(pwr);
355 }
356 }
357
358 for (unsigned i=0; i<pc->stats.powers_list_items.size(); i++) {
359 int pwr = pc->stats.powers_list_items[i];
360 if (powers->powers[pwr].passive && powers->powers[pwr].buff_party && (e->stats.hero_ally || e->stats.enemy_ally)
361 && (powers->powers[pwr].buff_party_power_id == 0 || powers->powers[pwr].buff_party_power_id == e->stats.summoned_power_index)) {
362
363 e->stats.powers_passive.push_back(pwr);
364 }
365 }
366
367 enemies.push_back(e);
368
369 mapr->collider.block(e->stats.pos.x, e->stats.pos.y, e->stats.hero_ally);
370 }
371 }
372
373 bool EnemyManager::checkPartyMembers() {
374 for (unsigned int i=0; i < enemies.size(); i++) {
375 if(enemies[i]->stats.hero_ally && enemies[i]->stats.hp > 0) {
376 return true;
377 }
378 }
379 return false;
380 }
381
382 /**
383 * perform logic() for all enemies
384 */
385 void EnemyManager::logic() {
386
387 if (player_blocked) {
388 player_blocked_timer.tick();
389 if (player_blocked_timer.isEnd())
390 player_blocked = false;
391 }
392
393 handleSpawn();
394
395 std::vector<Enemy*>::iterator it;
396 for (it = enemies.begin(); it != enemies.end(); ++it) {
397 // new actions this round
398 (*it)->stats.hero_stealth = hero_stealth;
399 (*it)->logic();
400 }
401 }
402
403 Enemy* EnemyManager::enemyFocus(const Point& mouse, const FPoint& cam, bool alive_only) {
404 Point p;
405 Rect r;
406 for(unsigned int i = 0; i < enemies.size(); i++) {
407 if(alive_only && (enemies[i]->stats.cur_state == StatBlock::ENEMY_DEAD || enemies[i]->stats.cur_state == StatBlock::ENEMY_CRITDEAD)) {
408 continue;
409 }
410 p = Utils::mapToScreen(enemies[i]->stats.pos.x, enemies[i]->stats.pos.y, cam.x, cam.y);
411
412 Renderable ren = enemies[i]->getRender();
413 r.w = ren.src.w;
414 r.h = ren.src.h;
415 r.x = p.x - ren.offset.x;
416 r.y = p.y - ren.offset.y;
417
418 if (Utils::isWithinRect(r, mouse)) {
419 Enemy *enemy = enemies[i];
420 return enemy;
421 }
422 }
423 return NULL;
424 }
425
426 Enemy* EnemyManager::getNearestEnemy(const FPoint& pos, bool get_corpse, float *saved_distance, float max_range) {
427 Enemy* nearest = NULL;
428 float best_distance = std::numeric_limits<float>::max();
429
430 for (unsigned i=0; i<enemies.size(); i++) {
431 if(!get_corpse && (enemies[i]->stats.cur_state == StatBlock::ENEMY_DEAD || enemies[i]->stats.cur_state == StatBlock::ENEMY_CRITDEAD)) {
432 continue;
433 }
434 if (get_corpse && !enemies[i]->stats.corpse) {
435 continue;
436 }
437
438 float distance = Utils::calcDist(pos, enemies[i]->stats.pos);
439 if (distance < best_distance) {
440 best_distance = distance;
441 nearest = enemies[i];
442 }
443 }
444
445 if (nearest && saved_distance)
446 *saved_distance = best_distance;
447
448 if (!saved_distance && best_distance > max_range)
449 nearest = NULL;
450
451 return nearest;
452 }
453
454 /**
455 * If an enemy has died, reward the hero with experience points
456 */
457 void EnemyManager::checkEnemiesforXP() {
458 for (unsigned int i=0; i < enemies.size(); i++) {
459 if (enemies[i]->reward_xp) {
460 //adjust for party exp if necessary
461 float xp_multiplier = 1;
462 if(enemies[i]->kill_source_type == Power::SOURCE_TYPE_ALLY)
463 xp_multiplier = static_cast<float>(eset->misc.party_exp_percentage) / 100.0f;
464
465 camp->rewardXP(static_cast<int>((static_cast<float>(enemies[i]->stats.xp) * xp_multiplier)), !CampaignManager::XP_SHOW_MSG);
466 enemies[i]->reward_xp = false; // clear flag
467 }
468 }
469 }
470
471 bool EnemyManager::isCleared() {
472 if (enemies.empty()) return true;
473
474 for (unsigned int i=0; i < enemies.size(); i++) {
475 if (enemies[i]->stats.alive && !enemies[i]->stats.hero_ally)
476 return false;
477 }
478
479 return true;
480 }
481
482 void EnemyManager::spawn(const std::string& enemy_type, const Point& target) {
483 Map_Enemy espawn;
484
485 espawn.type = enemy_type;
486 espawn.pos = FPoint(target);
487 espawn.pos.x += 0.5f;
488 espawn.pos.y += 0.5f;
489
490 // quick spawns start facing a random direction
491 espawn.direction = rand() % 8;
492
493 if (!mapr->collider.isEmpty(espawn.pos.x, espawn.pos.y)) {
494 return;
495 }
496 else {
497 mapr->collider.block(espawn.pos.x, espawn.pos.y, !MapCollision::IS_ALLY);
498 }
499
500 powers->map_enemies.push(espawn);
501 }
502
503 /**
504 * addRenders()
505 * Map objects need to be drawn in Z order, so we allow a parent object (GameEngine)
506 * to collect all mobile sprites each frame.
507 */
508 void EnemyManager::addRenders(std::vector<Renderable> &r, std::vector<Renderable> &r_dead) {
509 std::vector<Enemy*>::iterator it;
510 for (it = enemies.begin(); it != enemies.end(); ++it) {
511 bool dead = (*it)->stats.corpse;
512 if (!dead || !(*it)->stats.corpse_timer.isEnd()) {
513 Renderable re = (*it)->getRender();
514 re.prio = 1;
515 (*it)->stats.effects.getCurrentColor(re.color_mod);
516 (*it)->stats.effects.getCurrentAlpha(re.alpha_mod);
517
518 // fade out corpses
519 unsigned fade_time = (eset->misc.corpse_timeout > settings->max_frames_per_sec) ? settings->max_frames_per_sec : eset->misc.corpse_timeout;
520 if (dead && fade_time != 0 && (*it)->stats.corpse_timer.getCurrent() <= fade_time) {
521 re.alpha_mod = static_cast<uint8_t>(static_cast<float>((*it)->stats.corpse_timer.getCurrent()) * (re.alpha_mod / static_cast<float>(fade_time)));
522 }
523
524 // draw corpses below objects so that floor loot is more visible
525 (dead ? r_dead : r).push_back(re);
526
527 // add effects
528 for (unsigned i = 0; i < (*it)->stats.effects.effect_list.size(); ++i) {
529 if ((*it)->stats.effects.effect_list[i].animation) {
530 Renderable ren = (*it)->stats.effects.effect_list[i].animation->getCurrentFrame(0);
531 ren.map_pos = (*it)->stats.pos;
532 if ((*it)->stats.effects.effect_list[i].render_above) ren.prio = 2;
533 else ren.prio = 0;
534 r.push_back(ren);
535 }
536 }
537 }
538 }
539 }
540
541 EnemyManager::~EnemyManager() {
542 for (unsigned int i=0; i < enemies.size(); i++) {
543 anim->decreaseCount(enemies[i]->animationSet->getName());
544 enemies[i]->unloadSounds();
545 delete enemies[i];
546 }
547 for (unsigned int i=0; i < prototypes.size(); i++) {
548 anim->decreaseCount(prototypes[i].animationSet->getName());
549 prototypes[i].unloadSounds();
550 }
551 }
+0
-77
src/EnemyManager.h less more
0 /*
1 Copyright © 2011-2012 Clint Bellanger
2 Copyright © 2012 Stefan Beller
3 Copyright © 2013 Henrik Andersson
4 Copyright © 2012-2016 Justin Jacobs
5
6 This file is part of FLARE.
7
8 FLARE is free software: you can redistribute it and/or modify it under the terms
9 of the GNU General Public License as published by the Free Software Foundation,
10 either version 3 of the License, or (at your option) any later version.
11
12 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14 PARTICULAR PURPOSE. See the GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License along with
17 FLARE. If not, see http://www.gnu.org/licenses/
18 */
19
20 /*
21 * class EnemyManager
22 */
23
24
25 #ifndef ENEMY_MANAGER_H
26 #define ENEMY_MANAGER_H
27
28 #include "CommonIncludes.h"
29 #include "Utils.h"
30
31 class Animation;
32 class Enemy;
33
34 class EnemyManager {
35 private:
36
37 void loadAnimations(Enemy *e);
38
39 std::vector<std::string> anim_prefixes;
40 std::vector<std::vector<Animation*> > anim_entities;
41
42 /**
43 * callee is responsible for deleting returned enemy object
44 */
45 Enemy *getEnemyPrototype(const std::string& type_id);
46 size_t loadEnemyPrototype(const std::string& type_id);
47
48 std::vector<Enemy> prototypes;
49
50 public:
51 EnemyManager();
52 ~EnemyManager();
53 void handleNewMap();
54 void handleSpawn();
55 bool checkPartyMembers();
56 void logic();
57 void addRenders(std::vector<Renderable> &r, std::vector<Renderable> &r_dead);
58 void checkEnemiesforXP();
59 bool isCleared();
60 void spawn(const std::string& enemy_type, const Point& target);
61 Enemy *enemyFocus(const Point& mouse, const FPoint& cam, bool alive_only);
62 Enemy* getNearestEnemy(const FPoint& pos, bool get_corpse, float *saved_distance, float max_range);
63
64 // vars
65 std::vector<Enemy*> enemies;
66 int hero_stealth;
67
68 bool player_blocked;
69 Timer player_blocked_timer;
70
71 static const bool GET_CORPSE = true;
72 static const bool IS_ALIVE = true;
73 };
74
75
76 #endif
2020
2121 #include "EngineSettings.h"
2222 #include "FileParser.h"
23 #include "FontEngine.h"
2324 #include "MenuActionBar.h"
2425 #include "MessageEngine.h"
2526 #include "ModManager.h"
6465 save_onload = true;
6566 save_onexit = true;
6667 save_pos_onexit = false;
68 save_oncutscene = true;
69 save_onstash = SAVE_ONSTASH_ALL;
70 save_anywhere = false;
6771 camera_speed = 10.f;
6872 save_buyback = true;
6973 keep_buyback_on_map_change = true;
7074 sfx_unable_to_cast = "";
75 combat_aborts_npc_interact = true;
7176
7277 FileParser infile;
7378 // @CLASS EngineSettings: Misc|Description of engine/misc.txt
7883 save_hpmp = Parse::toBool(infile.val);
7984 // @ATTR corpse_timeout|duration|Duration that a corpse can exist on the map in 'ms' or 's'.
8085 else if (infile.key == "corpse_timeout")
81 corpse_timeout = Parse::toDirection(infile.val);
86 corpse_timeout = Parse::toDuration(infile.val);
8287 // @ATTR sell_without_vendor|bool|Allows selling items when not at a vendor via CTRL-Click.
8388 else if (infile.key == "sell_without_vendor")
8489 sell_without_vendor = Parse::toBool(infile.val);
105110 enable_ally_collision_ai = Parse::toBool(infile.val);
106111 else if (infile.key == "currency_id") {
107112 // @ATTR currency_id|item_id|An item id that will be used as currency.
108 currency_id = Parse::toInt(infile.val);
113 currency_id = Parse::toItemID(infile.val);
109114 if (currency_id < 1) {
110115 currency_id = 1;
111116 Utils::logError("EngineSettings: Currency ID below the minimum allowed value. Resetting it to %d", currency_id);
126131 // @ATTR save_pos_onexit|bool|If the game gets saved on exiting, store the player's current position instead of the map spawn position.
127132 else if (infile.key == "save_pos_onexit")
128133 save_pos_onexit = Parse::toBool(infile.val);
134 // @ATTR save_oncutscene|bool|Saves the game when triggering any cutscene via an Event.
135 else if (infile.key == "save_oncutscene")
136 save_oncutscene = Parse::toBool(infile.val);
137 // @ATTR save_onstash|[bool, "private", "shared"]|Saves the game when changing the contents of a stash. The default is true (i.e. save when using both stash types). Use caution with the values "private" and false, since not saving shared stashes exposes an item duplication exploit.
138 else if (infile.key == "save_onstash") {
139 if (infile.val == "private")
140 save_onstash = SAVE_ONSTASH_PRIVATE;
141 else if (infile.val == "shared")
142 save_onstash = SAVE_ONSTASH_SHARED;
143 else {
144 if (Parse::toBool(infile.val))
145 save_onstash = SAVE_ONSTASH_ALL;
146 else
147 save_onstash = SAVE_ONSTASH_NONE;
148 }
149 }
150 // @ATTR save_anywhere|bool|Saves the game when using a button.
151 else if (infile.key == "save_anywhere")
152 save_anywhere = Parse::toBool(infile.val);
129153 // @ATTR camera_speed|float|Modifies how fast the camera moves to recenter on the player. Larger values mean a slower camera. Default value is 10.
130154 else if (infile.key == "camera_speed") {
131155 camera_speed = Parse::toFloat(infile.val);
141165 // @ATTR sfx_unable_to_cast|filename|Sound to play when the player lacks the MP to cast a power.
142166 else if (infile.key == "sfx_unable_to_cast")
143167 sfx_unable_to_cast = infile.val;
168 // @ATTR combat_aborts_npc_interact|bool|If true, the NPC dialog and vendor menus will be closed if the player is attacked.
169 else if (infile.key == "combat_aborts_npc_interact")
170 combat_aborts_npc_interact = Parse::toBool(infile.val);
144171
145172 else infile.error("EngineSettings: '%s' is not a valid key.", infile.key.c_str());
146173 }
195222 virtual_heights.clear();
196223 std::string v_height = Parse::popFirstString(infile.val);
197224 while (!v_height.empty()) {
198 virtual_heights.push_back(static_cast<unsigned short>(Parse::toInt(v_height)));
225 unsigned short test_v_height = static_cast<unsigned short>(Parse::toInt(v_height));
226 if (test_v_height <= 0) {
227 Utils::logError("EngineSettings: virtual_height must be greater than zero.");
228 }
229 else {
230 virtual_heights.push_back(static_cast<unsigned short>(Parse::toInt(v_height)));
231 }
199232 v_height = Parse::popFirstString(infile.val);
200233 }
201234
223256 // prevent the window from being too small
224257 if (settings->screen_w < min_screen_w) settings->screen_w = min_screen_w;
225258 if (settings->screen_h < min_screen_h) settings->screen_h = min_screen_h;
226
227 // set the default virtual height if it's not defined
228 if (settings->view_h == 0) {
229 Utils::logError("EngineSettings: virtual_height is undefined. Setting it to %d.", min_screen_h);
230 virtual_heights.push_back(min_screen_h);
231 settings->view_h = min_screen_h;
232 settings->view_h_half = settings->view_h / 2;
233 }
234259
235260 // icon size can not be zero, so we set a default of 32x32, which is fantasycore's icon size
236261 if (icon_size == 0) {
279304 if (infile.open("engine/combat.txt", FileParser::MOD_FILE, FileParser::ERROR_NORMAL)) {
280305 while (infile.next()) {
281306 if (infile.key == "absorb_percent") {
282 // @ATTR absorb_percent|int, int : Minimum, Maximum|Limits the percentage of damage that can be absorbed.
307 // @ATTR absorb_percent|int, int : Minimum, Maximum|Limits the percentage of damage that can be absorbed. A max value less than 100 will ensure that the target always takes at least 1 damage from non-elemental attacks.
283308 min_absorb = Parse::popFirstInt(infile.val);
284309 max_absorb = Parse::popFirstInt(infile.val);
285310 max_absorb = std::max(max_absorb, min_absorb);
286311 }
287312 else if (infile.key == "resist_percent") {
288 // @ATTR resist_percent|int, int : Minimum, Maximum|Limits the percentage of damage that can be resisted.
313 // @ATTR resist_percent|int, int : Minimum, Maximum|Limits the percentage of damage that can be resisted. A max value less than 100 will ensure that the target always takes at least 1 damage from elemental attacks.
289314 min_resist = Parse::popFirstInt(infile.val);
290315 max_resist = Parse::popFirstInt(infile.val);
291316 max_resist = std::max(max_resist, min_resist);
292317 }
293318 else if (infile.key == "block_percent") {
294 // @ATTR block_percent|int, int : Minimum, Maximum|Limits the percentage of damage that can be blocked.
319 // @ATTR block_percent|int, int : Minimum, Maximum|Limits the percentage of damage that can be absorbed when the target is in the 'block' animation state. A max value less than 100 will ensure that the target always takes at least 1 damage from non-elemental attacks.
295320 min_block = Parse::popFirstInt(infile.val);
296321 max_block = Parse::popFirstInt(infile.val);
297322 max_block = std::max(max_block, min_block);
454479 , equipment("")
455480 , carried("")
456481 , primary((eset ? eset->primary_stats.list.size() : 0), 0)
457 , hotkeys(std::vector<int>(MenuActionBar::SLOT_MAX, 0))
482 , hotkeys(std::vector<PowerID>(MenuActionBar::SLOT_MAX, 0))
458483 , power_tree("")
459484 , default_power_tab(-1)
460485 {
508533 else if (infile.key == "actionbar") {
509534 // @ATTR actionbar|list(power_id)|A list of powers to place in the action bar for the class.
510535 for (int i=0; i<12; i++) {
511 list.back().hotkeys[i] = Parse::popFirstInt(infile.val);
536 list.back().hotkeys[i] = Parse::toPowerID(Parse::popFirstString(infile.val));
512537 }
513538 }
514539 else if (infile.key == "powers") {
515540 // @ATTR powers|list(power_id)|A list of powers that are unlocked when starting this class.
516541 std::string power;
517542 while ( (power = Parse::popFirstString(infile.val)) != "") {
518 list.back().powers.push_back(Parse::toInt(power));
543 list.back().powers.push_back(Parse::toPowerID(power));
519544 }
520545 }
521546 else if (infile.key == "campaign") {
826851 // reset to defaults
827852 selection_rect_color = Color(255, 248, 220, 255);
828853 colorblind_highlight_offset = Point(2, 2);
854
829855 tab_padding = Point(8, 0);
856
830857 slot_quantity_label = LabelInfo();
858 slot_quantity_color = font->getColor(FontEngine::COLOR_WIDGET_NORMAL);
831859 slot_quantity_bg_color = Color(0, 0, 0, 0);
860 slot_hotkey_label = LabelInfo();
861 slot_hotkey_color = font->getColor(FontEngine::COLOR_WIDGET_NORMAL);
862 slot_hotkey_label.hidden = true;
863 slot_hotkey_bg_color = Color(0, 0, 0, 0);
864
832865 listbox_text_margin = Point(8, 8);
866
867 horizontal_list_text_width = 150;
833868
834869 FileParser infile;
835870 // @CLASS EngineSettings: Widgets|Description of engine/widget_settings.txt
856891 // @ATTR slot.quantity_label|label|Setting for the slot quantity text.
857892 slot_quantity_label = Parse::popLabelInfo(infile.val);
858893 }
894 else if (infile.key == "quantity_color") {
895 // @ATTR slot.quantity_color|color|Text color for the slot quantity text.
896 slot_quantity_color = Parse::toRGB(infile.val);
897 }
859898 else if (infile.key == "quantity_bg_color") {
860899 // @ATTR slot.quantity_bg_color|color, int : Color, Alpha|If a slot has a quantity, a rectangle filled with this color will be placed beneath the text.
861900 slot_quantity_bg_color = Parse::toRGBA(infile.val);
901 }
902 else if (infile.key == "hotkey_label") {
903 // @ATTR slot.hotkey_label|label|Setting for the slot hotkey text.
904 slot_hotkey_label = Parse::popLabelInfo(infile.val);
905 }
906 else if (infile.key == "hotkey_color") {
907 // @ATTR slot.hotkey_color|color|Text color for the slot hotkey text.
908 slot_hotkey_color = Parse::toRGB(infile.val);
909 }
910 else if (infile.key == "hotkey_bg_color") {
911 // @ATTR slot.hotkey_bg_color|color, int : Color, Alpha|If a slot has a hotkey, a rectangle filled with this color will be placed beneath the text.
912 slot_hotkey_bg_color = Parse::toRGBA(infile.val);
862913 }
863914 }
864915 else if (infile.section == "listbox") {
865916 if (infile.key == "text_margin") {
866917 // @ATTR listbox.text_margin|int, int : Left margin, Right margin|The pixel margin to leave on the left and right sides of listbox element text.
867918 listbox_text_margin = Parse::toPoint(infile.val);
919 }
920 }
921 else if (infile.section == "horizontal_list") {
922 if (infile.key == "text_width") {
923 // @ATTR horizontal_list.text_width|int|The pixel width of the text area that displays the currently selected item. Default is 150 pixels;
924 horizontal_list_text_width = Parse::toInt(infile.val);
868925 }
869926 }
870927 }
899956 }
900957
901958 unsigned long EngineSettings::XPTable::getLevelXP(int level) {
902 if (level <= 1)
959 if (level <= 1 || xp_table.empty())
903960 return 0;
904961 else if (level > static_cast<int>(xp_table.size()))
905962 return xp_table.back();
3232 class Misc {
3333 public:
3434 void load();
35
36 enum {
37 SAVE_ONSTASH_NONE = 0,
38 SAVE_ONSTASH_PRIVATE = 1,
39 SAVE_ONSTASH_SHARED = 2,
40 SAVE_ONSTASH_ALL = 3,
41 };
3542
3643 bool save_hpmp;
3744 int corpse_timeout;
4350 int party_exp_percentage;
4451 bool enable_ally_collision;
4552 bool enable_ally_collision_ai;
46 int currency_id;
53 ItemID currency_id;
4754 float interact_range;
4855 bool menus_pause;
4956 bool save_onload;
5057 bool save_onexit;
5158 bool save_pos_onexit;
59 bool save_oncutscene;
60 int save_onstash;
61 bool save_anywhere;
5262 float camera_speed;
5363 bool save_buyback;
5464 bool keep_buyback_on_map_change;
5565 std::string sfx_unable_to_cast;
66 bool combat_aborts_npc_interact;
5667 };
5768
5869 class Resolutions {
148159 std::string equipment;
149160 std::string carried;
150161 std::vector<int> primary;
151 std::vector<int> hotkeys;
152 std::vector<int> powers;
162 std::vector<PowerID> hotkeys;
163 std::vector<PowerID> powers;
153164 std::vector<std::string> statuses;
154165 std::string power_tree;
155166 int default_power_tab;
246257 Point colorblind_highlight_offset;
247258 Point tab_padding;
248259 LabelInfo slot_quantity_label;
260 Color slot_quantity_color;
249261 Color slot_quantity_bg_color;
262 LabelInfo slot_hotkey_label;
263 Color slot_hotkey_color;
264 Color slot_hotkey_bg_color;
250265 Point listbox_text_margin;
266 int horizontal_list_text_width;
251267 };
252268
253269 class XPTable {
3131 #include "CommonIncludes.h"
3232 #include "EngineSettings.h"
3333 #include "Entity.h"
34 #include "EntityBehavior.h"
3435 #include "Hazard.h"
3536 #include "MapRenderer.h"
3637 #include "MessageEngine.h"
3738 #include "PowerManager.h"
39 #include "RenderDevice.h"
3840 #include "Settings.h"
3941 #include "SharedGameResources.h"
4042 #include "SharedResources.h"
4143 #include "SoundManager.h"
4244 #include "UtilsMath.h"
43
44 #include <math.h>
45
46 #ifndef M_SQRT2
47 #define M_SQRT2 sqrt(2.0)
48 #endif
49
50 const int directionDeltaX[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
51 const int directionDeltaY[8] = { 1, 0, -1, -1, -1, 0, 1, 1};
52 const float speedMultiplyer[8] = { static_cast<float>(1.0/M_SQRT2), 1.0f, static_cast<float>(1.0/M_SQRT2), 1.0f, static_cast<float>(1.0/M_SQRT2), 1.0f, static_cast<float>(1.0/M_SQRT2), 1.0f};
5345
5446 Entity::Entity()
5547 : sprites(NULL)
5951 , sound_critdie()
6052 , sound_block()
6153 , sound_levelup(0)
54 , sound_lowhp(0)
6255 , activeAnimation(NULL)
63 , animationSet(NULL) {
56 , animationSet(NULL)
57 , stats()
58 , type_filename("")
59 {
60 // MSVC complains if you use 'this' in the init list
61 behavior = new EntityBehavior(this);
6462 }
6563
6664 Entity::Entity(const Entity& e) {
7876 sound_critdie = e.sound_critdie;
7977 sound_block = e.sound_block;
8078 sound_levelup = e.sound_levelup;
81 activeAnimation = new Animation(*e.activeAnimation);
79 sound_lowhp = e.sound_lowhp;
80
81 if (e.activeAnimation)
82 activeAnimation = new Animation(*e.activeAnimation);
8283 animationSet = e.animationSet;
84
8385 stats = StatBlock(e.stats);
8486
87 type_filename = e.type_filename;
88
89 behavior = new EntityBehavior(this);
90
8591 return *this;
92 }
93
94 void Entity::logic() {
95 behavior->logic();
8696 }
8797
8898 void Entity::loadSounds() {
119129
120130 if (src_stats->sfx_levelup != "")
121131 sound_levelup = snd->load(src_stats->sfx_levelup, "Entity leveled up");
132
133 if (src_stats->sfx_lowhp != "")
134 sound_lowhp = snd->load(src_stats->sfx_lowhp, "Entity has low hp");
122135 }
123136
124137 void Entity::unloadSounds() {
142155 }
143156
144157 snd->unload(sound_levelup);
158 snd->unload(sound_lowhp);
145159 }
146160
147161 void Entity::playAttackSound(const std::string& attack_name) {
277291 if (stats.charge_speed != 0.0f)
278292 return false;
279293
280 float speed = stats.speed * speedMultiplyer[stats.direction] * stats.effects.speed / 100;
281 float dx = speed * static_cast<float>(directionDeltaX[stats.direction]);
282 float dy = speed * static_cast<float>(directionDeltaY[stats.direction]);
294 float speed = stats.speed * StatBlock::SPEED_MULTIPLIER[stats.direction] * stats.effects.speed / 100;
295 float dx = speed * StatBlock::DIRECTION_DELTA_X[stats.direction];
296 float dy = speed * StatBlock::DIRECTION_DELTA_Y[stats.direction];
283297
284298 bool full_move = mapr->collider.move(stats.pos.x, stats.pos.y, dx, dy, stats.movement_type, mapr->collider.getCollideType(stats.hero));
285299
295309 bool Entity::takeHit(Hazard &h) {
296310
297311 //check if this enemy should be affected by this hazard based on the category
298 if(!powers->powers[h.power_index].target_categories.empty() && !stats.hero) {
312 if(!powers->powers[h.power_index].target_categories.empty()) {
299313 //the power has a target category requirement, so if it doesnt match, dont continue
300314 bool match_found = false;
301315 for (unsigned int i=0; i<stats.categories.size(); i++) {
313327 }
314328
315329 //if the target is already dead, they cannot be hit
316 if ((stats.cur_state == StatBlock::ENEMY_DEAD || stats.cur_state == StatBlock::ENEMY_CRITDEAD) && !stats.hero)
317 return false;
318
319 if(stats.cur_state == StatBlock::AVATAR_DEAD && stats.hero)
330 if (stats.cur_state == StatBlock::ENTITY_DEAD || stats.cur_state == StatBlock::ENTITY_CRITDEAD)
320331 return false;
321332
322333 // some attacks will always miss enemies of a certain movement type
424435 if (h.power->trait_elemental >= 0 && static_cast<size_t>(h.power->trait_elemental) < stats.vulnerable.size()) {
425436 size_t i = h.power->trait_elemental;
426437
427 int vulnerable = std::max(stats.vulnerable[i], eset->combat.min_resist);
428 if (stats.vulnerable[i] < 100)
429 vulnerable = std::min(vulnerable, eset->combat.max_resist);
438 int vulnerable = stats.vulnerable[i];
439 // vulnerable values >100 are weakness, and are unaffected by min/max resist setting
440 if (vulnerable <= 100) {
441 if (100 - vulnerable < eset->combat.min_resist)
442 vulnerable = 100 - eset->combat.min_resist;
443 if (100 - vulnerable > eset->combat.max_resist)
444 vulnerable = 100 - eset->combat.max_resist;
445 }
430446
431447 dmg = (dmg * vulnerable) / 100;
432448 }
493509 // default is dmg * 2
494510 dmg = (dmg * Math::randBetween(eset->combat.min_crit_damage, eset->combat.max_crit_damage)) / 100;
495511 if(!stats.hero)
496 mapr->shaky_cam_timer.setDuration(settings->max_frames_per_sec/2);
512 mapr->cam.shake_timer.setDuration(settings->max_frames_per_sec/2);
497513 }
498514 else if (is_overhit) {
499515 dmg = (dmg * Math::randBetween(eset->combat.min_overhit_damage, eset->combat.max_overhit_damage)) / 100;
529545 bool was_debuffed = stats.effects.isDebuffed();
530546
531547 // apply damage
532 stats.takeDamage(dmg);
548 stats.takeDamage(dmg, crit, h.source_type);
533549
534550 // after effects
535551 if (dmg > 0 || powers->powers[h.power_index].ignore_zero_damage) {
540556 powers->effect(&stats, h.src_stats, static_cast<int>(h.power_index), h.source_type);
541557
542558 // HP/MP steal is cumulative between stat bonus and power bonus
543 int hp_steal = h.power->hp_steal + h.src_stats->get(Stats::HP_STEAL);
544 if (!stats.effects.immunity_hp_steal && hp_steal != 0) {
545 int steal_amt = (std::min(dmg, prev_hp) * hp_steal) / 100;
546 if (steal_amt == 0) steal_amt = 1;
547 combat_text->addString(msg->get("+%d HP",steal_amt), h.src_stats->pos, CombatText::MSG_BUFF);
548 h.src_stats->hp = std::min(h.src_stats->hp + steal_amt, h.src_stats->get(Stats::HP_MAX));
549 }
550 int mp_steal = h.power->mp_steal + h.src_stats->get(Stats::MP_STEAL);
551 if (!stats.effects.immunity_mp_steal && mp_steal != 0) {
552 int steal_amt = (std::min(dmg, prev_hp) * mp_steal) / 100;
553 if (steal_amt == 0) steal_amt = 1;
554 combat_text->addString(msg->get("+%d MP",steal_amt), h.src_stats->pos, CombatText::MSG_BUFF);
555 h.src_stats->mp = std::min(h.src_stats->mp + steal_amt, h.src_stats->get(Stats::MP_MAX));
559 if (h.src_stats->hp > 0) {
560 int hp_steal = h.power->hp_steal + h.src_stats->get(Stats::HP_STEAL);
561 if (!stats.effects.immunity_hp_steal && hp_steal != 0) {
562 int steal_amt = (std::min(dmg, prev_hp) * hp_steal) / 100;
563 if (steal_amt == 0) steal_amt = 1;
564 combat_text->addString(msg->get("+%d HP",steal_amt), h.src_stats->pos, CombatText::MSG_BUFF);
565 h.src_stats->hp = std::min(h.src_stats->hp + steal_amt, h.src_stats->get(Stats::HP_MAX));
566 }
567 int mp_steal = h.power->mp_steal + h.src_stats->get(Stats::MP_STEAL);
568 if (!stats.effects.immunity_mp_steal && mp_steal != 0) {
569 int steal_amt = (std::min(dmg, prev_hp) * mp_steal) / 100;
570 if (steal_amt == 0) steal_amt = 1;
571 combat_text->addString(msg->get("+%d MP",steal_amt), h.src_stats->pos, CombatText::MSG_BUFF);
572 h.src_stats->mp = std::min(h.src_stats->mp + steal_amt, h.src_stats->get(Stats::MP_MAX));
573 }
556574 }
557575
558576 // deal return damage
562580 if (dmg_return == 0)
563581 dmg_return = 1;
564582
565 h.src_stats->takeDamage(dmg_return);
583 // swap the source type when dealing return damage
584 int return_source_type = Power::SOURCE_TYPE_NEUTRAL;
585 if (h.source_type == Power::SOURCE_TYPE_HERO || h.source_type == Power::SOURCE_TYPE_ALLY)
586 return_source_type = Power::SOURCE_TYPE_ENEMY;
587 else if (h.source_type == Power::SOURCE_TYPE_ENEMY)
588 return_source_type = stats.hero ? Power::SOURCE_TYPE_HERO : Power::SOURCE_TYPE_ALLY;
589
590 h.src_stats->takeDamage(dmg_return, !StatBlock::TAKE_DMG_CRIT, return_source_type);
566591 comb->addInt(dmg_return, h.src_stats->pos, CombatText::MSG_GIVEDMG);
567592 }
568593 }
579604
580605 // interrupted to new state
581606 if (dmg > 0) {
582 bool chance_poise = Math::percentChance(stats.get(Stats::POISE));
583
584 if(stats.hp <= 0) {
585 stats.effects.triggered_death = true;
586 if(stats.hero)
587 stats.cur_state = StatBlock::AVATAR_DEAD;
588 else {
589 doRewards(h.source_type);
590 if (crit)
591 stats.cur_state = StatBlock::ENEMY_CRITDEAD;
592 else
593 stats.cur_state = StatBlock::ENEMY_DEAD;
594 mapr->collider.unblock(stats.pos.x,stats.pos.y);
595 }
596
607 if (stats.hero) {
608 stats.abort_npc_interact = true;
609 }
610
611 // entity is dead, no need to contine
612 if (stats.hp <= 0)
597613 return true;
598 }
599614
600615 // play hit sound effect, but only if the hit cooldown is done
601616 if (stats.cooldown_hit.isEnd())
605620 if (!was_debuffed && stats.effects.isDebuffed()) {
606621 StatBlock::AIPower* ai_power = stats.getAIPower(StatBlock::AI_POWER_DEBUFF);
607622 if (ai_power != NULL) {
608 stats.cur_state = StatBlock::ENEMY_POWER;
623 stats.cur_state = StatBlock::ENTITY_POWER;
609624 stats.activated_power = ai_power;
610625 stats.cooldown.reset(Timer::END); // ignore global cooldown
611626 return true;
615630 // roll to see if the enemy's ON_HIT power is casted
616631 StatBlock::AIPower* ai_power = stats.getAIPower(StatBlock::AI_POWER_HIT);
617632 if (ai_power != NULL) {
618 stats.cur_state = StatBlock::ENEMY_POWER;
633 stats.cur_state = StatBlock::ENTITY_POWER;
619634 stats.activated_power = ai_power;
620635 stats.cooldown.reset(Timer::END); // ignore global cooldown
621636 return true;
623638
624639 // don't go through a hit animation if stunned or successfully poised
625640 // however, critical hits ignore poise
641 bool chance_poise = Math::percentChance(stats.get(Stats::POISE));
642
626643 if(stats.cooldown_hit.isEnd()) {
627644 stats.cooldown_hit.reset(Timer::BEGIN);
628645
629646 if (!stats.effects.stun && (!chance_poise || crit) && !stats.prevent_interrupt) {
630647 if(stats.hero) {
631 stats.cur_state = StatBlock::AVATAR_HIT;
648 stats.cur_state = StatBlock::ENTITY_HIT;
632649 }
633650 else {
634 if (stats.cur_state == StatBlock::ENEMY_POWER) {
651 if (stats.cur_state == StatBlock::ENTITY_POWER) {
635652 stats.cooldown.reset(Timer::BEGIN);
636653 stats.activated_power = NULL;
637654 }
638 stats.cur_state = StatBlock::ENEMY_HIT;
655 stats.cur_state = StatBlock::ENTITY_HIT;
639656 }
640657
641658 if (stats.untransform_on_hit)
642659 stats.transform_duration = 0;
660 }
661 }
662
663 // handle block post-power
664 if (stats.block_power != 0) {
665 PowerID block_post_power = powers->powers[stats.block_power].post_power;
666
667 if (block_post_power != 0 && stats.getPowerCooldown(block_post_power) == 0) {
668 if (Math::percentChance(powers->powers[stats.block_power].post_power_chance)) {
669 powers->activate(powers->powers[stats.block_power].post_power, &stats, stats.pos);
670 stats.setPowerCooldown(block_post_power, powers->powers[block_post_power].cooldown);
671 }
643672 }
644673 }
645674 }
669698 return activeAnimation == NULL;
670699 }
671700
701 /**
702 * The current direction leads to a wall. Try the next best direction, if one is available.
703 */
704 unsigned char Entity::faceNextBest(float mapx, float mapy) {
705 float dx = static_cast<float>(fabs(mapx - stats.pos.x));
706 float dy = static_cast<float>(fabs(mapy - stats.pos.y));
707 switch (stats.direction) {
708 case 0:
709 if (dy > dx) return 7;
710 else return 1;
711 case 1:
712 if (mapy > stats.pos.y) return 0;
713 else return 2;
714 case 2:
715 if (dx > dy) return 1;
716 else return 3;
717 case 3:
718 if (mapx < stats.pos.x) return 2;
719 else return 4;
720 case 4:
721 if (dy > dx) return 3;
722 else return 5;
723 case 5:
724 if (mapy < stats.pos.y) return 4;
725 else return 6;
726 case 6:
727 if (dx > dy) return 5;
728 else return 7;
729 case 7:
730 if (mapx > stats.pos.x) return 6;
731 else return 0;
732 }
733 return 0;
734 }
735
736 /**
737 * getRender()
738 * Map objects need to be drawn in Z order, so we allow a parent object (GameEngine)
739 * to collect all mobile sprites each frame.
740 */
741 Renderable Entity::getRender() {
742 Renderable r = activeAnimation->getCurrentFrame(stats.direction);
743 r.map_pos.x = stats.pos.x;
744 r.map_pos.y = stats.pos.y;
745 if (stats.hp > 0) {
746 if (stats.hero_ally)
747 r.type = Renderable::TYPE_ALLY;
748 else if (stats.in_combat)
749 r.type = Renderable::TYPE_ENEMY;
750 }
751 return r;
752 }
753
672754 Entity::~Entity () {
673755 delete activeAnimation;
674 }
675
756 delete behavior;
757 }
758
3232
3333 class Animation;
3434 class AnimationSet;
35 class EntityBehavior;
3536
3637 class Entity {
3738 protected:
5354 Entity& operator=(const Entity& e);
5455 virtual ~Entity();
5556
57 void logic();
5658 void loadSounds();
5759 void loadSoundsFromStatBlock(StatBlock *src_stats);
5860 void unloadSounds();
6062 void playSound(int sound_type);
6163 bool move();
6264 bool takeHit(Hazard &h);
63 virtual void doRewards(int) {}
6465
6566 // sound effects
6667 std::vector<std::pair<std::string, std::vector<SoundID> > > sound_attack;
6970 std::vector<SoundID> sound_critdie;
7071 std::vector<SoundID> sound_block;
7172 SoundID sound_levelup;
73 SoundID sound_lowhp;
7274
7375 bool setAnimation(const std::string& animation);
7476 Animation *activeAnimation;
7577 AnimationSet *animationSet;
7678
7779 StatBlock stats;
80
81 unsigned char faceNextBest(float mapx, float mapy);
82 Renderable getRender();
83
84 std::string type_filename;
85
86 EntityBehavior *behavior;
7887 };
7988
8089 extern const int directionDeltaX[];
0 /*
1 Copyright © 2012 Clint Bellanger
2 Copyright © 2012 Stefan Beller
3 Copyright © 2013 Ryan Dansie
4 Copyright © 2012-2021 Justin Jacobs
5
6 This file is part of FLARE.
7
8 FLARE is free software: you can redistribute it and/or modify it under the terms
9 of the GNU General Public License as published by the Free Software Foundation,
10 either version 3 of the License, or (at your option) any later version.
11
12 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14 PARTICULAR PURPOSE. See the GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License along with
17 FLARE. If not, see http://www.gnu.org/licenses/
18 */
19
20 /**
21 * class EntityBehavior
22 *
23 * Interface for entity behaviors.
24 * The behavior object is a component of Entity.
25 * Make AI decisions (movement, actions) for entities.
26 */
27
28 #include "Animation.h"
29 #include "Avatar.h"
30 #include "CommonIncludes.h"
31 #include "Entity.h"
32 #include "EntityManager.h"
33 #include "EngineSettings.h"
34 #include "Entity.h"
35 #include "EntityBehavior.h"
36 #include "MapRenderer.h"
37 #include "PowerManager.h"
38 #include "Settings.h"
39 #include "SharedGameResources.h"
40 #include "SharedResources.h"
41 #include "StatBlock.h"
42 #include "UtilsMath.h"
43
44 const float EntityBehavior::ALLY_FLEE_DISTANCE = 2;
45 const float EntityBehavior::ALLY_FOLLOW_DISTANCE_WALK = 5.5;
46 const float EntityBehavior::ALLY_FOLLOW_DISTANCE_STOP = 5;
47 const float EntityBehavior::ALLY_TELEPORT_DISTANCE = 40;
48
49 EntityBehavior::EntityBehavior(Entity *_e)
50 : e(_e)
51 , path()
52 , prev_target()
53 , collided(false)
54 , path_found(false)
55 , chance_calc_path(0)
56 , path_found_fails(0)
57 , path_found_fail_timer()
58 , target_dist(0)
59 , hero_dist(0)
60 , pursue_pos(-1, -1)
61 , los(false)
62 , fleeing(false)
63 , move_to_safe_dist(false)
64 , turn_timer()
65 , instant_power(false)
66 {
67 // wait when PATH_FOUND_FAIL_THRESHOLD is exceeded
68 path_found_fail_timer.setDuration(settings->max_frames_per_sec * PATH_FOUND_FAIL_WAIT_SECONDS);
69 path_found_fail_timer.reset(Timer::END);
70 }
71
72 /**
73 * One frame of logic for this behavior
74 */
75 void EntityBehavior::logic() {
76 // skip all logic if the enemy is dead and no longer animating
77 if (e->stats.corpse) {
78 e->stats.corpse_timer.tick();
79 return;
80 }
81
82 if (!e->stats.hero_ally) {
83 if (Utils::calcDist(e->stats.pos, pc->stats.pos) <= settings->encounter_dist)
84 e->stats.encountered = true;
85
86 if (!e->stats.encountered)
87 return;
88 }
89
90 doUpkeep();
91 findTarget();
92 checkPower();
93 checkMove();
94 updateState();
95
96 fleeing = false;
97
98 }
99
100 /**
101 * Various upkeep on stats
102 */
103 void EntityBehavior::doUpkeep() {
104 // activate all passive powers
105 if (e->stats.hp > 0 || e->stats.effects.triggered_death)
106 powers->activatePassives(&e->stats);
107
108 e->stats.logic();
109
110 // check for teleport powers
111 if (e->stats.teleportation) {
112
113 mapr->collider.unblock(e->stats.pos.x,e->stats.pos.y);
114
115 e->stats.pos.x = e->stats.teleport_destination.x;
116 e->stats.pos.y = e->stats.teleport_destination.y;
117
118 mapr->collider.block(e->stats.pos.x,e->stats.pos.y, e->stats.hero_ally);
119
120 e->stats.teleportation = false;
121 }
122 }
123
124 /**
125 * Locate the player and set various targeting info
126 */
127 void EntityBehavior::findTarget() {
128 // dying enemies can't target anything
129 if (e->stats.cur_state == StatBlock::ENTITY_DEAD || e->stats.cur_state == StatBlock::ENTITY_CRITDEAD) return;
130
131 // stunned enemies can't act
132 if (e->stats.effects.stun) return;
133
134 StatBlock *target_stats = NULL;
135 float stealth_threat_range = (e->stats.threat_range * (100 - static_cast<float>(e->stats.hero_stealth))) / 100;
136 bool is_ally = e->stats.hero_ally;
137
138 // check distance and line of sight between enemy and hero
139 // by default, the enemy pursues the hero directly
140 if (pc->stats.alive) {
141 target_dist = Utils::calcDist(e->stats.pos, pc->stats.pos);
142 target_stats = &pc->stats;
143 }
144 else {
145 target_dist = 0;
146 }
147 hero_dist = target_dist;
148
149 // if the minion gets too far, transport it to the player pos
150 if (is_ally && hero_dist > ALLY_TELEPORT_DISTANCE && !e->stats.in_combat) {
151 mapr->collider.unblock(e->stats.pos.x, e->stats.pos.y);
152 e->stats.pos.x = pc->stats.pos.x;
153 e->stats.pos.y = pc->stats.pos.y;
154 mapr->collider.block(e->stats.pos.x, e->stats.pos.y, MapCollision::IS_ALLY);
155 hero_dist = 0;
156 }
157
158 bool enemies_in_combat = false;
159 for (size_t i = 0; i < entitym->entities.size(); ++i) {
160 Entity* entity = entitym->entities[i];
161 if (!entity->stats.alive)
162 continue;
163
164 if ((!is_ally && entity->stats.hero_ally) || (is_ally && !entity->stats.hero_ally && entity->stats.in_combat)) {
165 float entity_dist = Utils::calcDist(e->stats.pos, entity->stats.pos);
166 if (!target_stats || (is_ally && target_stats && target_stats->hero)) {
167 // pick the first available target if none is already selected
168 target_stats = &entitym->entities[i]->stats;
169 target_dist = entity_dist;
170 e->stats.in_combat = true;
171 enemies_in_combat = true;
172 }
173 else if (entity_dist < target_dist) {
174 // pick a new target if it's closer
175 target_stats = &entitym->entities[i]->stats;
176 target_dist = entity_dist;
177 }
178 }
179 }
180
181 //break combat if the player gets too far or all enemies die
182 if(!enemies_in_combat)
183 e->stats.in_combat = false;
184
185 // check line-of-sight
186 if (target_stats && target_dist < e->stats.threat_range && pc->stats.alive)
187 los = mapr->collider.lineOfSight(e->stats.pos.x, e->stats.pos.y, target_stats->pos.x, target_stats->pos.y);
188 else
189 los = false;
190
191 // aggressive enemies are always in combat
192 if (!e->stats.in_combat && e->stats.combat_style == StatBlock::COMBAT_AGGRESSIVE) {
193 e->stats.join_combat = true;
194 }
195
196 // check entering combat (because the player got too close)
197 bool close_to_target = false;
198 if (!is_ally && &pc->stats == target_stats)
199 close_to_target = target_dist < stealth_threat_range;
200 else if (target_stats && &pc->stats != target_stats)
201 close_to_target = target_dist < e->stats.threat_range;
202
203 if (e->stats.alive && !e->stats.in_combat && los && close_to_target && e->stats.combat_style != StatBlock::COMBAT_PASSIVE) {
204 e->stats.join_combat = true;
205 }
206
207 // if the join_combat flag wasn't set above, it could have been set if the enemy was hit by a hazard
208 // we put the entity in a combat state and activate powers that trigger when entering combat
209 if (e->stats.join_combat) {
210 e->stats.in_combat = true;
211
212 StatBlock::AIPower* ai_power;
213 if (!is_ally) {
214 ai_power = e->stats.getAIPower(StatBlock::AI_POWER_BEACON);
215 if (ai_power != NULL) {
216 powers->activate(ai_power->id, &e->stats, e->stats.pos); //emit beacon
217 }
218 }
219
220 ai_power = e->stats.getAIPower(StatBlock::AI_POWER_JOIN_COMBAT);
221 if (ai_power != NULL) {
222 e->stats.cur_state = StatBlock::ENTITY_POWER;
223 e->stats.activated_power = ai_power;
224 }
225
226 e->stats.join_combat = false;
227 }
228
229 // check exiting combat
230 if (e->stats.combat_style != StatBlock::COMBAT_AGGRESSIVE) {
231 // target got too far away
232 if (target_dist > e->stats.threat_range_far && !e->stats.join_combat)
233 e->stats.in_combat = false;
234
235 // either party is dead
236 if (!e->stats.alive || !pc->stats.alive)
237 e->stats.in_combat = false;
238 }
239
240 if (target_stats)
241 pursue_pos = target_stats->pos;
242
243 // if we just started wandering, set the first waypoint
244 if (e->stats.wander && e->stats.waypoints.empty()) {
245 FPoint waypoint = getWanderPoint();
246 e->stats.waypoints.push(waypoint);
247 e->stats.waypoint_timer.reset(Timer::BEGIN);
248 }
249
250 // if we're not in combat, pursue the next waypoint
251 if (!(e->stats.in_combat || e->stats.waypoints.empty())) {
252 FPoint waypoint = e->stats.waypoints.front();
253 pursue_pos.x = waypoint.x;
254 pursue_pos.y = waypoint.y;
255 }
256
257 // if the player is blocked, all summons which the player is facing to move away for the specified frames
258 // need to set the flag player_blocked so that other allies know to get out of the way as well
259 // if hero is facing the summon
260 if (is_ally && eset->misc.enable_ally_collision_ai) {
261 if (!entitym->player_blocked && hero_dist < ALLY_FLEE_DISTANCE
262 && mapr->collider.isFacing(pc->stats.pos.x,pc->stats.pos.y,pc->stats.direction,e->stats.pos.x,e->stats.pos.y)) {
263 entitym->player_blocked = true;
264 entitym->player_blocked_timer.reset(Timer::BEGIN);
265 }
266
267 bool player_closer_than_target = Utils::calcDist(e->stats.pos, pursue_pos) > Utils::calcDist(e->stats.pos, pc->stats.pos);
268
269 if (entitym->player_blocked && (!e->stats.in_combat || player_closer_than_target)
270 && mapr->collider.isFacing(pc->stats.pos.x,pc->stats.pos.y,pc->stats.direction,e->stats.pos.x,e->stats.pos.y)) {
271 fleeing = true;
272 pursue_pos = pc->stats.pos;
273 }
274 }
275
276 if (e->stats.effects.fear) fleeing = true;
277
278 // If we have a successful chance_flee roll, try to move to a safe distance
279 if (
280 e->stats.in_combat &&
281 e->stats.cur_state == StatBlock::ENTITY_STANCE &&
282 !move_to_safe_dist && target_dist < e->stats.flee_range &&
283 target_dist >= e->stats.melee_range &&
284 Math::percentChance(e->stats.chance_flee) &&
285 e->stats.flee_cooldown_timer.isEnd()
286 )
287 {
288 move_to_safe_dist = true;
289 }
290
291 if (move_to_safe_dist) fleeing = true;
292
293 if (fleeing) {
294 FPoint target_pos = pursue_pos;
295
296 std::vector<int> flee_dirs;
297
298 int middle_dir = Utils::calcDirection(target_pos.x, target_pos.y, e->stats.pos.x, e->stats.pos.y);
299 for (int i = -2; i <= 2; ++i) {
300 int test_dir = Utils::rotateDirection(middle_dir, i);
301
302 FPoint test_pos = Utils::calcVector(e->stats.pos, test_dir, 1);
303 if (mapr->collider.isValidPosition(test_pos.x, test_pos.y, e->stats.movement_type, MapCollision::COLLIDE_NORMAL)) {
304 if (test_dir == e->stats.direction) {
305 // if we're already moving in a good direction, favor it over other directions
306 flee_dirs.clear();
307 flee_dirs.push_back(test_dir);
308 break;
309 }
310 else {
311 flee_dirs.push_back(test_dir);
312 }
313 }
314 }
315
316 if (flee_dirs.empty()) {
317 // trapped and can't move
318 move_to_safe_dist = false;
319 fleeing = false;
320 }
321 else {
322 int index = Math::randBetween(0, static_cast<int>(flee_dirs.size())-1);
323 pursue_pos = Utils::calcVector(e->stats.pos, flee_dirs[index], 1);
324
325 if (e->stats.flee_timer.isEnd()) {
326 e->stats.flee_timer.reset(Timer::BEGIN);
327 }
328 }
329 }
330 }
331
332 /**
333 * Begin using a power if idle, based on behavior % chances.
334 * Activate a ready power, if the attack animation has followed through
335 */
336 void EntityBehavior::checkPower() {
337
338 // stunned enemies can't act
339 if (e->stats.effects.stun || e->stats.effects.fear || fleeing) return;
340
341 // currently all enemy power use happens during combat
342 if (!e->stats.in_combat) return;
343
344 // if the enemy is on global cooldown it cannot act
345 if (!e->stats.cooldown.isEnd()) return;
346
347 // Note there are two stages to activating a power.
348 // First is the enemy choosing to use a power based on behavioral chance
349 // Second is the power actually firing off once the related animation reaches the active frame.
350 // The second stage occurs in updateState()
351
352 // pick a power from the available powers for this creature
353 if (e->stats.cur_state == StatBlock::ENTITY_STANCE || e->stats.cur_state == StatBlock::ENTITY_MOVE) {
354 StatBlock::AIPower* ai_power = NULL;
355
356 // check half dead power use
357 if (e->stats.half_dead_power && e->stats.hp <= e->stats.get(Stats::HP_MAX)/2) {
358 ai_power = e->stats.getAIPower(StatBlock::AI_POWER_HALF_DEAD);
359 }
360 // check ranged power use
361 else if (target_dist > e->stats.melee_range) {
362 ai_power = e->stats.getAIPower(StatBlock::AI_POWER_RANGED);
363 }
364 // check melee power use
365 else {
366 ai_power = e->stats.getAIPower(StatBlock::AI_POWER_MELEE);
367 }
368
369 if (ai_power != NULL) {
370 const Power& pwr = powers->powers[ai_power->id];
371 if (!los && (pwr.requires_los || pwr.requires_los_default)) {
372 ai_power = NULL;
373 }
374 if (ai_power != NULL) {
375 e->stats.cur_state = StatBlock::ENTITY_POWER;
376 e->stats.activated_power = ai_power;
377 }
378 }
379 }
380
381 if (e->stats.cur_state != StatBlock::ENTITY_POWER && e->stats.activated_power) {
382 e->stats.activated_power = NULL;
383 }
384 }
385
386 /**
387 * Check state changes related to movement
388 */
389 void EntityBehavior::checkMove() {
390
391 // dying enemies can't move
392 if (e->stats.cur_state == StatBlock::ENTITY_DEAD || e->stats.cur_state == StatBlock::ENTITY_CRITDEAD) return;
393
394 // stunned enemies can't act
395 if (e->stats.effects.stun) return;
396
397 // handle not being in combat and (not patrolling waypoints or waiting at waypoint)
398 if (!e->stats.hero_ally && !e->stats.in_combat && (e->stats.waypoints.empty() || !e->stats.waypoint_timer.isEnd())) {
399
400 if (e->stats.cur_state == StatBlock::ENTITY_MOVE) {
401 e->stats.cur_state = StatBlock::ENTITY_STANCE;
402 }
403
404 // currently enemies only move while in combat or patrolling
405 return;
406 }
407
408 float real_speed = e->stats.speed * StatBlock::SPEED_MULTIPLIER[e->stats.direction] * e->stats.effects.speed / 100;
409
410 unsigned turn_ticks = turn_timer.getCurrent();
411 turn_timer.setDuration(e->stats.turn_delay);
412
413 // If an enemy's turn_delay is too long compared to their speed, they will be unable to follow a path properly.
414 // So here, we get how many frames it takes to traverse a single tile and then compare it to the turn delay time.
415 // We then cap the turn delay the time at the number of frames we calculated for tile traversal.
416 // There may be other solutions to this problem, such as having the enemy pause when they reach a path point,
417 // but I was unable to get anything else working as cleanly/bug-free as this.
418 int max_turn_ticks = static_cast<int>(1.f / real_speed);
419 if (e->stats.turn_delay > max_turn_ticks) {
420 turn_timer.setDuration(max_turn_ticks);
421 }
422 turn_timer.setCurrent(turn_ticks);
423
424 // clear current space to allow correct movement
425 mapr->collider.unblock(e->stats.pos.x, e->stats.pos.y);
426
427 path_found_fail_timer.tick();
428
429 // update direction
430 if (e->stats.facing) {
431 turn_timer.tick();
432 if (turn_timer.isEnd()) {
433
434 // if blocked, face in pathfinder direction instead
435 if (!mapr->collider.lineOfMovement(e->stats.pos.x, e->stats.pos.y, pursue_pos.x, pursue_pos.y, e->stats.movement_type)) {
436
437 // if a path is returned, target first waypoint
438
439 bool recalculate_path = false;
440
441 // add a 5% chance to recalculate on every frame. This prevents reclaulating lots of entities in the same frame
442 chance_calc_path += 5;
443
444 bool calc_path_success = Math::percentChance(chance_calc_path);
445 if (calc_path_success)
446 recalculate_path = true;
447
448 // if a collision ocurred then recalculate
449 if (collided)
450 recalculate_path = true;
451
452 // if theres no path, it needs to be calculated
453 if (!recalculate_path && path.empty())
454 recalculate_path = true;
455
456 // if the target moved more than 1 tile away, recalculate
457 if (!recalculate_path && Utils::calcDist(FPoint(Point(prev_target)), FPoint(Point(pursue_pos))) > 1.f)
458 recalculate_path = true;
459
460 // dont recalculate if we were blocked and no path was found last time
461 // this makes sure that pathfinding calculation is not spammed when the target is unreachable and the entity is as close as its going to get
462 if (!path_found && collided && !calc_path_success) {
463 recalculate_path = false;
464 }
465 else {
466 // reset the collision flag only if we dont want the cooldown in place
467 collided = false;
468 }
469
470 if (!path_found_fail_timer.isEnd()) {
471 recalculate_path = false;
472 chance_calc_path = -100;
473 }
474
475 prev_target = pursue_pos;
476
477 // target first waypoint
478 if (recalculate_path) {
479 chance_calc_path = -100;
480 path.clear();
481 path_found = mapr->collider.computePath(e->stats.pos, pursue_pos, path, e->stats.movement_type, MapCollision::DEFAULT_PATH_LIMIT);
482
483 if (!path_found) {
484 path_found_fails++;
485 if (path_found_fails >= PATH_FOUND_FAIL_THRESHOLD) {
486 // could not find a path after several tries, so wait a little before the next attempt
487 path_found_fail_timer.reset(Timer::BEGIN);
488 }
489 }
490 else {
491 path_found_fails = 0;
492 path_found_fail_timer.reset(Timer::END);
493 }
494 }
495
496 if (!path.empty()) {
497 pursue_pos = path.back();
498
499 // if distance to node is lower than a tile size, the node is going to be passed and can be removed
500 if (Utils::calcDist(e->stats.pos, pursue_pos) <= 1.f)
501 path.pop_back();
502 }
503 }
504 else {
505 path.clear();
506 }
507
508 if (e->stats.charge_speed == 0.0f) {
509 e->stats.direction = Utils::calcDirection(e->stats.pos.x, e->stats.pos.y, pursue_pos.x, pursue_pos.y);
510 }
511 turn_timer.reset(Timer::BEGIN);
512 }
513 }
514
515 e->stats.flee_timer.tick();
516 e->stats.flee_cooldown_timer.tick();
517
518 // try to start moving
519 if (e->stats.cur_state == StatBlock::ENTITY_STANCE) {
520 checkMoveStateStance();
521 }
522
523 // already moving
524 else if (e->stats.cur_state == StatBlock::ENTITY_MOVE) {
525 checkMoveStateMove();
526 }
527
528 // if patrolling waypoints and has reached a waypoint, cycle to the next one
529 if (!e->stats.waypoints.empty()) {
530 // if the patroller is close to the waypoint
531 FPoint waypoint = e->stats.waypoints.front();
532 float waypoint_dist = Utils::calcDist(waypoint, e->stats.pos);
533
534 FPoint saved_pos = e->stats.pos;
535 e->move();
536 float new_dist = Utils::calcDist(waypoint, e->stats.pos);
537 e->stats.pos = saved_pos;
538
539 if (waypoint_dist <= real_speed || (waypoint_dist <= 0.5f && new_dist > waypoint_dist)) {
540 e->stats.pos = waypoint;
541 turn_timer.reset(Timer::END);
542 e->stats.waypoints.pop();
543 // pick a new random point if we're wandering
544 if (e->stats.wander) {
545 waypoint = getWanderPoint();
546 }
547 e->stats.waypoints.push(waypoint);
548 e->stats.waypoint_timer.reset(Timer::BEGIN);
549 }
550 }
551
552 // re-block current space to allow correct movement
553 mapr->collider.block(e->stats.pos.x, e->stats.pos.y, e->stats.hero_ally);
554
555 }
556
557 void EntityBehavior::checkMoveStateStance() {
558
559 // If the enemy is capable of fleeing and is at a safe distance, have it hold its position instead of moving
560 if (target_dist >= e->stats.flee_range && e->stats.chance_flee > 0 && e->stats.waypoints.empty()) return;
561
562 // try to move to the target if we're either:
563 // 1. too far away and chance_pursue roll succeeds
564 // 2. within range, but lack line-of-sight (required to attack)
565 bool ally_targeting_hero = e->stats.hero_ally && !e->stats.in_combat && hero_dist > ALLY_FOLLOW_DISTANCE_WALK;
566 bool should_move_to_target = (e->stats.in_combat || !e->stats.waypoints.empty()) && ((target_dist > e->stats.melee_range && Math::percentChance(e->stats.chance_pursue)) || (target_dist <= e->stats.melee_range && !los));
567
568 if (should_move_to_target || fleeing || ally_targeting_hero) {
569
570 if (e->move()) {
571 e->stats.cur_state = StatBlock::ENTITY_MOVE;
572 }
573 else {
574 collided = true;
575 unsigned char prev_direction = e->stats.direction;
576
577 // hit an obstacle, try the next best angle
578 e->stats.direction = e->faceNextBest(pursue_pos.x, pursue_pos.y);
579 if (e->move()) {
580 e->stats.cur_state = StatBlock::ENTITY_MOVE;
581 }
582 else
583 e->stats.direction = prev_direction;
584 }
585 }
586 }
587
588 void EntityBehavior::checkMoveStateMove() {
589 bool can_attack = true;
590
591 if (!e->stats.cooldown.isEnd()) {
592 can_attack = false;
593 }
594 else {
595 can_attack = false;
596 for (size_t i = 0; i < e->stats.powers_ai.size(); ++i) {
597 if (e->stats.powers_ai[i].cooldown.isEnd()) {
598 can_attack = true;
599 break;
600 }
601 }
602 }
603 // in order to prevent infinite fleeing, we re-roll our chance to flee after a certain duration
604 bool stop_fleeing = can_attack && fleeing && e->stats.flee_timer.isEnd() && !Math::percentChance(e->stats.chance_flee);
605
606 if (!stop_fleeing && e->stats.flee_timer.isEnd()) {
607 // if the roll to continue fleeing succeeds, but the flee duration has expired, we don't want to reset the duration to the full amount
608 // instead, we scehdule the next re-roll to happen on the next frame
609 // this will continue until a roll fails, returning to the stance state
610 e->stats.flee_timer.setCurrent(1);
611 }
612
613 // close enough to the hero or is at a safe distance
614 bool ally_targeting_hero = e->stats.hero_ally && !e->stats.in_combat && !fleeing && hero_dist < ALLY_FOLLOW_DISTANCE_STOP;
615 if (pc->stats.alive && ((target_dist < e->stats.melee_range && !fleeing) || (move_to_safe_dist && target_dist >= e->stats.flee_range) || stop_fleeing || ally_targeting_hero)) {
616 if (stop_fleeing) {
617 e->stats.flee_cooldown_timer.reset(Timer::BEGIN);
618 }
619 e->stats.cur_state = StatBlock::ENTITY_STANCE;
620 move_to_safe_dist = false;
621 fleeing = false;
622 }
623
624 // try to continue moving
625 else if (!e->move()) {
626 collided = true;
627 unsigned char prev_direction = e->stats.direction;
628 // hit an obstacle. Try the next best angle
629 e->stats.direction = e->faceNextBest(pursue_pos.x, pursue_pos.y);
630 if (!e->move()) {
631 // this prevents an ally trying to move perpendicular to a 1-tile-wide path if the player gets close to it in a certain position and gets blocked
632 if (e->stats.hero_ally && entitym->player_blocked && !e->stats.in_combat) {
633 e->stats.direction = pc->stats.direction;
634 if (!e->move()) {
635 e->stats.cur_state = StatBlock::ENTITY_STANCE;
636 e->stats.direction = prev_direction;
637 }
638 }
639 else {
640 e->stats.cur_state = StatBlock::ENTITY_STANCE;
641 e->stats.direction = prev_direction;
642 }
643 }
644 }
645 }
646
647
648 /**
649 * Perform miscellaneous state-based actions.
650 * 1) Set animations and sound effects
651 * 2) Return to the default state (Stance) when actions are complete
652 */
653 void EntityBehavior::updateState() {
654
655 // stunned enemies can't act
656 if (e->stats.effects.stun) return;
657
658 PowerID power_id;
659 int power_state;
660
661 // continue current animations
662 e->activeAnimation->advanceFrame();
663
664 switch (e->stats.cur_state) {
665
666 case StatBlock::ENTITY_STANCE:
667
668 e->setAnimation("stance");
669 break;
670
671 case StatBlock::ENTITY_MOVE:
672
673 e->setAnimation("run");
674 break;
675
676 case StatBlock::ENTITY_POWER:
677
678 if (e->stats.activated_power == NULL) {
679 e->stats.cur_state = StatBlock::ENTITY_STANCE;
680 break;
681 }
682
683 power_id = powers->checkReplaceByEffect(e->stats.activated_power->id, &e->stats);
684 power_state = powers->powers[power_id].new_state;
685 e->stats.prevent_interrupt = powers->powers[power_id].prevent_interrupt;
686
687 // animation based on power type
688 if (power_state == Power::STATE_INSTANT)
689 instant_power = true;
690 else if (power_state == Power::STATE_ATTACK)
691 e->setAnimation(powers->powers[power_id].attack_anim);
692
693 // sound effect based on power type
694 if (e->activeAnimation->isFirstFrame()) {
695 if (powers->powers[power_id].pre_power > 0 && Math::percentChance(powers->powers[power_id].pre_power_chance)) {
696 powers->activate(powers->powers[power_id].pre_power, &e->stats, pursue_pos);
697 }
698
699 float attack_speed = (e->stats.effects.getAttackSpeed(powers->powers[power_id].attack_anim) * powers->powers[power_id].attack_speed) / 100.0f;
700 e->activeAnimation->setSpeed(attack_speed);
701 e->playAttackSound(powers->powers[power_id].attack_anim);
702
703 if (powers->powers[power_id].state_duration > 0)
704 e->stats.state_timer.setDuration(powers->powers[power_id].state_duration);
705
706 if (powers->powers[power_id].charge_speed != 0.0f)
707 e->stats.charge_speed = powers->powers[power_id].charge_speed;
708 }
709
710 // Activate Power:
711 // if we're at the active frame of a power animation,
712 // activate the power and set the local and global cooldowns
713 if ((e->activeAnimation->isActiveFrame() || instant_power) && !e->stats.hold_state) {
714 powers->activate(power_id, &e->stats, pursue_pos);
715
716 // set cooldown for all ai powers with the same power id
717 for (size_t i = 0; i < e->stats.powers_ai.size(); ++i) {
718 if (e->stats.activated_power->id == e->stats.powers_ai[i].id) {
719 e->stats.powers_ai[i].cooldown.setDuration(powers->powers[power_id].cooldown);
720 }
721 }
722
723 if (e->stats.activated_power->type == StatBlock::AI_POWER_HALF_DEAD) {
724 e->stats.half_dead_power = false;
725 }
726
727 if (!e->stats.state_timer.isEnd())
728 e->stats.hold_state = true;
729 }
730
731 // animation is finished
732 if ((e->activeAnimation->isLastFrame() && e->stats.state_timer.isEnd()) || (power_state == Power::STATE_ATTACK && e->activeAnimation->getName() != powers->powers[power_id].attack_anim) || instant_power) {
733 if (!instant_power)
734 e->stats.cooldown.reset(Timer::BEGIN);
735 else
736 instant_power = false;
737
738 e->stats.activated_power = NULL;
739 e->stats.cur_state = StatBlock::ENTITY_STANCE;
740 e->stats.prevent_interrupt = false;
741 }
742 break;
743
744 case StatBlock::ENTITY_SPAWN:
745
746 e->setAnimation("spawn");
747 //the second check is needed in case the entity does not have a spawn animation
748 if (e->activeAnimation->isLastFrame() || e->activeAnimation->getName() != "spawn") {
749 e->stats.cur_state = StatBlock::ENTITY_STANCE;
750 }
751 break;
752
753 case StatBlock::ENTITY_BLOCK:
754
755 e->setAnimation("block");
756 break;
757
758 case StatBlock::ENTITY_HIT:
759
760 e->setAnimation("hit");
761 if (e->activeAnimation->isFirstFrame()) {
762 e->stats.effects.triggered_hit = true;
763 }
764 if (e->activeAnimation->isLastFrame() || e->activeAnimation->getName() != "hit")
765 e->stats.cur_state = StatBlock::ENTITY_STANCE;
766 break;
767
768 case StatBlock::ENTITY_DEAD:
769 if (e->stats.effects.triggered_death) break;
770
771 e->setAnimation("die");
772 if (e->activeAnimation->isFirstFrame()) {
773 e->playSound(Entity::SOUND_DIE);
774 e->stats.corpse_timer.setDuration(eset->misc.corpse_timeout);
775 }
776 if (e->activeAnimation->isSecondLastFrame()) {
777 StatBlock::AIPower* ai_power = e->stats.getAIPower(StatBlock::AI_POWER_DEATH);
778 if (ai_power != NULL)
779 powers->activate(ai_power->id, &e->stats, e->stats.pos);
780
781 e->stats.effects.clearEffects();
782 }
783 if (e->activeAnimation->isLastFrame() || e->activeAnimation->getName() != "die") {
784 // puts renderable under object layer
785 e->stats.corpse = true;
786
787 //allow free movement over the corpse
788 mapr->collider.unblock(e->stats.pos.x, e->stats.pos.y);
789
790 // remove corpses that land on blocked tiles, such as water or pits
791 if (!mapr->collider.isValidPosition(e->stats.pos.x, e->stats.pos.y, MapCollision::MOVE_NORMAL, MapCollision::COLLIDE_NORMAL)) {
792 e->stats.corpse_timer.reset(Timer::END);
793 }
794
795 // prevent "jumping" when rendering
796 e->stats.pos.align();
797 }
798
799 break;
800
801 case StatBlock::ENTITY_CRITDEAD:
802
803 e->setAnimation("critdie");
804 if (e->activeAnimation->isFirstFrame()) {
805 e->playSound(Entity::SOUND_CRITDIE);
806 e->stats.corpse_timer.setDuration(eset->misc.corpse_timeout);
807 }
808 if (e->activeAnimation->isSecondLastFrame()) {
809 StatBlock::AIPower* ai_power = e->stats.getAIPower(StatBlock::AI_POWER_DEATH);
810 if (ai_power != NULL)
811 powers->activate(ai_power->id, &e->stats, e->stats.pos);
812
813 e->stats.effects.clearEffects();
814 }
815 if (e->activeAnimation->isLastFrame() || e->activeAnimation->getName() != "critdie") {
816 // puts renderable under object layer
817 e->stats.corpse = true;
818
819 //allow free movement over the corpse
820 mapr->collider.unblock(e->stats.pos.x, e->stats.pos.y);
821
822 // prevent "jumping" when rendering
823 e->stats.pos.align();
824 }
825
826 break;
827
828 default:
829 break;
830 }
831
832 if (e->stats.state_timer.isEnd() && e->stats.hold_state)
833 e->stats.hold_state = false;
834
835 if (e->stats.cur_state != StatBlock::ENTITY_POWER && e->stats.charge_speed != 0.0f)
836 e->stats.charge_speed = 0.0f;
837 }
838
839 FPoint EntityBehavior::getWanderPoint() {
840 FPoint waypoint;
841 waypoint.x = static_cast<float>(e->stats.wander_area.x) + static_cast<float>(rand() % (e->stats.wander_area.w)) + 0.5f;
842 waypoint.y = static_cast<float>(e->stats.wander_area.y) + static_cast<float>(rand() % (e->stats.wander_area.h)) + 0.5f;
843
844 if (mapr->collider.isValidPosition(waypoint.x, waypoint.y, e->stats.movement_type, mapr->collider.getCollideType(e->stats.hero)) &&
845 mapr->collider.lineOfMovement(e->stats.pos.x, e->stats.pos.y, waypoint.x, waypoint.y, e->stats.movement_type))
846 {
847 return waypoint;
848 }
849 else {
850 // didn't get a valid waypoint, so keep our current position
851 return e->stats.pos;
852 }
853 }
854 EntityBehavior::~EntityBehavior() {
855 }
0 /*
1 Copyright © 2012 Clint Bellanger
2 Copyright © 2012 Stefan Beller
3 Copyright © 2013 Ryan Dansie
4 Copyright © 2012-2021 Justin Jacobs
5
6 This file is part of FLARE.
7
8 FLARE is free software: you can redistribute it and/or modify it under the terms
9 of the GNU General Public License as published by the Free Software Foundation,
10 either version 3 of the License, or (at your option) any later version.
11
12 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14 PARTICULAR PURPOSE. See the GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License along with
17 FLARE. If not, see http://www.gnu.org/licenses/
18 */
19
20 /**
21 * class EntityBehavior
22 *
23 * Interface for entity behaviors.
24 * The behavior object is a component of Entity.
25 * Make AI decisions (movement, actions) for entities.
26 */
27
28
29 #ifndef ENTITY_BEHAVIOR_H
30 #define ENTITY_BEHAVIOR_H
31
32 class Entity;
33
34 class EntityBehavior {
35 private:
36 static const float ALLY_FLEE_DISTANCE;
37 static const float ALLY_FOLLOW_DISTANCE_WALK;
38 static const float ALLY_FOLLOW_DISTANCE_STOP;
39 static const float ALLY_TELEPORT_DISTANCE;
40
41 // logic steps
42 void doUpkeep();
43 void findTarget();
44 void checkPower();
45 void checkMove();
46 void checkMoveStateStance();
47 void checkMoveStateMove();
48 void updateState();
49 FPoint getWanderPoint();
50
51 protected:
52 Entity *e;
53
54 static const int PATH_FOUND_FAIL_THRESHOLD = 1;
55 static const int PATH_FOUND_FAIL_WAIT_SECONDS = 2;
56
57 //variables for patfinding
58 std::vector<FPoint> path;
59 FPoint prev_target;
60 bool collided;
61 bool path_found;
62 int chance_calc_path;
63 int path_found_fails;
64 Timer path_found_fail_timer;
65
66 float target_dist;
67 float hero_dist;
68 FPoint pursue_pos;
69 // targeting vars
70 bool los;
71 //when fleeing, the entity moves away from the pursue_pos
72 bool fleeing;
73 bool move_to_safe_dist;
74 Timer turn_timer;
75
76 bool instant_power;
77
78 public:
79 EntityBehavior(Entity *_e);
80 ~EntityBehavior();
81 void logic();
82 };
83
84 #endif
0 /*
1 Copyright © 2011-2012 Clint Bellanger
2 Copyright © 2012 Stefan Beller
3 Copyright © 2013 Henrik Andersson
4 Copyright © 2012-2016 Justin Jacobs
5
6 This file is part of FLARE.
7
8 FLARE is free software: you can redistribute it and/or modify it under the terms
9 of the GNU General Public License as published by the Free Software Foundation,
10 either version 3 of the License, or (at your option) any later version.
11
12 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14 PARTICULAR PURPOSE. See the GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License along with
17 FLARE. If not, see http://www.gnu.org/licenses/
18 */
19
20 #include "Animation.h"
21 #include "AnimationManager.h"
22 #include "AnimationSet.h"
23 #include "Avatar.h"
24 #include "CampaignManager.h"
25 #include "EnemyGroupManager.h"
26 #include "Entity.h"
27 #include "EntityBehavior.h"
28 #include "EntityManager.h"
29 #include "EngineSettings.h"
30 #include "EntityBehavior.h"
31 #include "EventManager.h"
32 #include "Hazard.h"
33 #include "MapRenderer.h"
34 #include "MenuActionBar.h"
35 #include "PowerManager.h"
36 #include "RenderDevice.h"
37 #include "Settings.h"
38 #include "SharedGameResources.h"
39 #include "SharedResources.h"
40
41 #include <limits>
42
43 EntityManager::EntityManager()
44 : entities()
45 , hero_stealth(0)
46 , player_blocked(false)
47 , player_blocked_timer(settings->max_frames_per_sec / 6) {
48 handleNewMap();
49 }
50
51 void EntityManager::loadAnimations(Entity *e) {
52 anim->increaseCount(e->stats.animations);
53 e->animationSet = anim->getAnimationSet(e->stats.animations);
54 e->activeAnimation = e->animationSet->getAnimation("");
55 }
56
57 Entity *EntityManager::getEntityPrototype(const std::string& type_id) {
58 Entity* e = new Entity(prototypes.at(loadEntityPrototype(type_id)));
59 return e;
60 }
61
62 size_t EntityManager::loadEntityPrototype(const std::string& type_id) {
63 for (size_t i = 0; i < prototypes.size(); i++) {
64 if (prototypes[i].type_filename == type_id) {
65 return i;
66 }
67 }
68
69 Entity e = Entity();
70
71 e.stats.load(type_id);
72 e.type_filename = type_id;
73
74 if (e.stats.animations == "")
75 Utils::logError("EntityManager: No animation file specified for entity: %s", type_id.c_str());
76
77 loadAnimations(&e);
78 e.loadSounds();
79
80 // set cooldown_hit to duration of hit animation if undefined
81 if (!e.stats.cooldown_hit_enabled) {
82 Animation *hit_anim = e.animationSet->getAnimation("hit");
83 if (hit_anim) {
84 e.stats.cooldown_hit.setDuration(hit_anim->getDuration());
85 delete hit_anim;
86 }
87 else {
88 e.stats.cooldown_hit.setDuration(0);
89 }
90 }
91
92 prototypes.push_back(e);
93 size_t prototype = prototypes.size() - 1;
94
95 for (size_t i = 0; i < e.stats.powers_ai.size(); i++) {
96 PowerID power_index = e.stats.powers_ai[i].id;
97 const std::string& spawn_type = powers->powers[power_index].spawn_type;
98 if (power_index != 0 && spawn_type != "" && spawn_type != "untransform") {
99 std::vector<Enemy_Level> spawn_enemies = enemyg->getEnemiesInCategory(spawn_type);
100 for (size_t j = 0; j < spawn_enemies.size(); j++) {
101 loadEntityPrototype(spawn_enemies[j].type);
102 }
103 }
104 }
105
106 return prototype;
107 }
108
109 /**
110 * When loading a new map, we eliminate existing entities and load the new ones.
111 * The map will have loaded Entity blocks into an array; retrieve the entities and init them
112 */
113 void EntityManager::handleNewMap () {
114
115 Map_Enemy me;
116 std::queue<Entity *> allies;
117
118 // delete existing entities
119 for (unsigned int i=0; i < entities.size(); i++) {
120 anim->decreaseCount(entities[i]->animationSet->getName());
121 if(entities[i]->stats.hero_ally && !entities[i]->stats.corpse && entities[i]->stats.cur_state != StatBlock::ENTITY_DEAD && entities[i]->stats.cur_state != StatBlock::ENTITY_CRITDEAD && entities[i]->stats.speed > 0.0f)
122 allies.push(entities[i]);
123 else {
124 entities[i]->unloadSounds();
125 delete entities[i];
126 }
127 }
128 entities.clear();
129
130
131 for (unsigned int i=0; i < prototypes.size(); i++) {
132 anim->decreaseCount(prototypes[i].animationSet->getName());
133 prototypes[i].unloadSounds();
134 }
135 prototypes.clear();
136
137 // load new entities
138 while (!mapr->enemies.empty()) {
139 me = mapr->enemies.front();
140 mapr->enemies.pop();
141
142 if (me.type.empty()) {
143 Utils::logError("EntityManager: Entity(%f, %f) doesn't have type attribute set, skipping", me.pos.x, me.pos.y);
144 continue;
145 }
146
147
148 bool status_reqs_met = true;
149 //if the status requirements arent met, dont load the entity
150 for(unsigned int i = 0; i < me.requires_status.size(); i++) {
151 if (!camp->checkStatus(me.requires_status[i]))
152 status_reqs_met = false;
153 }
154 for(unsigned int i = 0; i < me.requires_not_status.size(); i++) {
155 if (camp->checkStatus(me.requires_not_status[i]))
156 status_reqs_met = false;
157 }
158 if(!status_reqs_met)
159 continue;
160
161
162 Entity *e = getEntityPrototype(me.type);
163 anim->increaseCount(e->stats.animations);
164
165 e->stats.waypoints = me.waypoints;
166 e->stats.pos.x = me.pos.x;
167 e->stats.pos.y = me.pos.y;
168 e->stats.direction = static_cast<unsigned char>(me.direction);
169 e->stats.wander = me.wander_radius > 0;
170 e->stats.setWanderArea(me.wander_radius);
171 e->stats.invincible_requires_status = me.invincible_requires_status;
172 e->stats.invincible_requires_not_status = me.invincible_requires_not_status;
173
174 entities.push_back(e);
175
176 mapr->collider.block(me.pos.x, me.pos.y, !MapCollision::IS_ALLY);
177 }
178
179 FPoint spawn_pos = mapr->collider.getRandomNeighbor(Point(pc->stats.pos), 1, !MapCollision::IGNORE_BLOCKED);
180 while (!allies.empty()) {
181
182 Entity *e = allies.front();
183 allies.pop();
184
185 //dont need the result of this. its only called to handle animation and sound
186 Entity* temp = getEntityPrototype(e->type_filename);
187 anim->increaseCount(temp->stats.animations);
188 delete temp;
189
190 e->stats.pos = spawn_pos;
191 e->stats.direction = pc->stats.direction;
192
193 entities.push_back(e);
194
195 mapr->collider.block(e->stats.pos.x, e->stats.pos.y, MapCollision::IS_ALLY);
196 }
197
198 // load entities that can be spawn by avatar's powers
199 for (size_t i = 0; i < pc->stats.powers_list.size(); i++) {
200 PowerID power_index = pc->stats.powers_list[i];
201 const std::string& spawn_type = powers->powers[power_index].spawn_type;
202 if (spawn_type != "" && spawn_type != "untransform") {
203 std::vector<Enemy_Level> spawn_enemies = enemyg->getEnemiesInCategory(spawn_type);
204 for (size_t j = 0; j < spawn_enemies.size(); j++) {
205 loadEntityPrototype(spawn_enemies[j].type);
206 }
207 }
208 }
209
210 // load entities that can be spawn by powers in the action bar
211 if (menu_act != NULL) {
212 for (size_t i = 0; i < menu_act->hotkeys.size(); i++) {
213 PowerID power_index = menu_act->hotkeys[i];
214 const std::string& spawn_type = powers->powers[power_index].spawn_type;
215 if (power_index != 0 && spawn_type != "" && spawn_type != "untransform") {
216 std::vector<Enemy_Level> spawn_enemies = enemyg->getEnemiesInCategory(spawn_type);
217 for (size_t j = 0; j < spawn_enemies.size(); j++) {
218 loadEntityPrototype(spawn_enemies[j].type);
219 }
220 }
221 }
222 }
223
224 // load entities that can be spawn by map events
225 for (size_t i = 0; i < mapr->events.size(); i++) {
226 for (size_t j = 0; j < mapr->events[i].components.size(); j++) {
227 if (mapr->events[i].components[j].type == EventComponent::SPAWN) {
228 std::vector<Enemy_Level> spawn_enemies = enemyg->getEnemiesInCategory(mapr->events[i].components[j].s);
229 for (size_t k = 0; k < spawn_enemies.size(); k++) {
230 loadEntityPrototype(spawn_enemies[k].type);
231 }
232 }
233 }
234 }
235
236 anim->cleanUp();
237 }
238
239 /**
240 * Powers can cause new entities to spawn
241 * Check PowerManager for any new queued entities
242 */
243 void EntityManager::handleSpawn() {
244
245 Map_Enemy espawn;
246
247 while (!powers->map_enemies.empty()) {
248 espawn = powers->map_enemies.front();
249 powers->map_enemies.pop();
250
251 mapr->collider.unblock(espawn.pos.x, espawn.pos.y);
252
253 Entity *e = new Entity();
254
255 e->stats.hero_ally = espawn.hero_ally;
256 e->stats.enemy_ally = espawn.enemy_ally;
257 e->stats.summoned = true;
258 e->stats.summoned_power_index = espawn.summon_power_index;
259
260 if(espawn.summoner != NULL) {
261 e->stats.summoner = espawn.summoner;
262 espawn.summoner->summons.push_back(&(e->stats));
263 }
264
265 e->stats.direction = static_cast<unsigned char>(espawn.direction);
266
267 Enemy_Level el = enemyg->getRandomEnemy(espawn.type, 0, 0);
268 e->type_filename = el.type;
269
270 if (el.type != "") {
271 e->stats.load(el.type);
272 }
273 else {
274 Utils::logError("EntityManager: Could not spawn creature type '%s'", espawn.type.c_str());
275 delete e;
276 return;
277 }
278
279 if (e->stats.animations != "") {
280 // load the animation file if specified
281 anim->increaseCount(e->stats.animations);
282 e->animationSet = anim->getAnimationSet(e->stats.animations);
283 if (e->animationSet)
284 e->activeAnimation = e->animationSet->getAnimation("");
285 else
286 Utils::logError("EntityManager: Animations file could not be loaded for %s", espawn.type.c_str());
287 }
288 else {
289 Utils::logError("EntityManager: No animation file specified for entity: %s", espawn.type.c_str());
290 }
291 e->loadSounds();
292
293 //Set level
294 if(e->stats.summoned_power_index != 0) {
295 if(powers->powers[e->stats.summoned_power_index].spawn_level_mode == Power::SPAWN_LEVEL_MODE_FIXED)
296 e->stats.level = powers->powers[e->stats.summoned_power_index].spawn_level_qty;
297
298 if(powers->powers[e->stats.summoned_power_index].spawn_level_mode == Power::SPAWN_LEVEL_MODE_LEVEL) {
299 if(e->stats.summoner != NULL && powers->powers[e->stats.summoned_power_index].spawn_level_every != 0) {
300 e->stats.level = powers->powers[e->stats.summoned_power_index].spawn_level_qty
301 * (e->stats.summoner->level / powers->powers[e->stats.summoned_power_index].spawn_level_every);
302 }
303 }
304
305 if(powers->powers[e->stats.summoned_power_index].spawn_level_mode == Power::SPAWN_LEVEL_MODE_STAT) {
306 if(e->stats.summoner != NULL && powers->powers[e->stats.summoned_power_index].spawn_level_every != 0) {
307 int stat_val = 0;
308 for (size_t i = 0; i < eset->primary_stats.list.size(); ++i) {
309 if (powers->powers[e->stats.summoned_power_index].spawn_level_stat == i) {
310 stat_val = e->stats.summoner->get_primary(i);
311 break;
312 }
313 }
314
315 e->stats.level = powers->powers[e->stats.summoned_power_index].spawn_level_qty
316 * (stat_val / powers->powers[e->stats.summoned_power_index].spawn_level_every);
317 }
318 }
319
320 // apply Effects and set HP to max HP
321 e->stats.recalc();
322 }
323
324 if (mapr->collider.isValidPosition(espawn.pos.x, espawn.pos.y, e->stats.movement_type, MapCollision::COLLIDE_NORMAL) || !e->stats.hero_ally) {
325 e->stats.pos.x = espawn.pos.x;
326 e->stats.pos.y = espawn.pos.y;
327 }
328 else {
329 e->stats.pos.x = pc->stats.pos.x;
330 e->stats.pos.y = pc->stats.pos.y;
331 }
332
333 // special animation state for spawning entities
334 e->stats.cur_state = StatBlock::ENTITY_SPAWN;
335
336 //now apply post effects to the spawned entity
337 if(e->stats.summoned_power_index > 0)
338 powers->effect(&e->stats, (espawn.summoner != NULL ? espawn.summoner : &e->stats), e->stats.summoned_power_index, e->stats.hero_ally ? Power::SOURCE_TYPE_HERO : Power::SOURCE_TYPE_ENEMY);
339
340 //apply party passives
341 //synchronise tha party passives in the pc stat block with the passives in the allies stat blocks
342 //at the time the summon is spawned, it takes the passives available at that time. if the passives change later, the changes wont affect summons retrospectively. could be exploited with equipment switching
343 for (unsigned i=0; i< pc->stats.powers_passive.size(); i++) {
344 PowerID pwr = pc->stats.powers_passive[i];
345 if (powers->powers[pwr].passive && powers->powers[pwr].buff_party && (e->stats.hero_ally || e->stats.enemy_ally)
346 && (powers->powers[pwr].buff_party_power_id == 0 || powers->powers[pwr].buff_party_power_id == e->stats.summoned_power_index)) {
347
348 e->stats.powers_passive.push_back(pwr);
349 }
350 }
351
352 for (unsigned i=0; i<pc->stats.powers_list_items.size(); i++) {
353 PowerID pwr = pc->stats.powers_list_items[i];
354 if (powers->powers[pwr].passive && powers->powers[pwr].buff_party && (e->stats.hero_ally || e->stats.enemy_ally)
355 && (powers->powers[pwr].buff_party_power_id == 0 || powers->powers[pwr].buff_party_power_id == e->stats.summoned_power_index)) {
356
357 e->stats.powers_passive.push_back(pwr);
358 }
359 }
360
361 entities.push_back(e);
362
363 mapr->collider.block(e->stats.pos.x, e->stats.pos.y, e->stats.hero_ally);
364 }
365 }
366
367 bool EntityManager::checkPartyMembers() {
368 for (unsigned int i=0; i < entities.size(); i++) {
369 if(entities[i]->stats.hero_ally && entities[i]->stats.hp > 0) {
370 return true;
371 }
372 }
373 return false;
374 }
375
376 /**
377 * perform logic() for all entities
378 */
379 void EntityManager::logic() {
380
381 if (player_blocked) {
382 player_blocked_timer.tick();
383 if (player_blocked_timer.isEnd())
384 player_blocked = false;
385 }
386
387 handleSpawn();
388
389 std::vector<Entity*>::iterator it;
390 for (it = entities.begin(); it != entities.end(); ++it) {
391 // new actions this round
392 (*it)->stats.hero_stealth = hero_stealth;
393 (*it)->logic();
394 }
395 }
396
397 Entity* EntityManager::entityFocus(const Point& mouse, const FPoint& cam, bool alive_only) {
398 Point p;
399 Rect r;
400 for(unsigned int i = 0; i < entities.size(); i++) {
401 if(alive_only && (entities[i]->stats.cur_state == StatBlock::ENTITY_DEAD || entities[i]->stats.cur_state == StatBlock::ENTITY_CRITDEAD)) {
402 continue;
403 }
404 p = Utils::mapToScreen(entities[i]->stats.pos.x, entities[i]->stats.pos.y, cam.x, cam.y);
405
406 Renderable ren = entities[i]->getRender();
407 r.w = ren.src.w;
408 r.h = ren.src.h;
409 r.x = p.x - ren.offset.x;
410 r.y = p.y - ren.offset.y;
411
412 if (Utils::isWithinRect(r, mouse)) {
413 Entity *entity = entities[i];
414 return entity;
415 }
416 }
417 return NULL;
418 }
419
420 Entity* EntityManager::getNearestEntity(const FPoint& pos, bool get_corpse, float *saved_distance, float max_range) {
421 Entity* nearest = NULL;
422 float best_distance = std::numeric_limits<float>::max();
423
424 for (unsigned i=0; i<entities.size(); i++) {
425 if(!get_corpse && (entities[i]->stats.cur_state == StatBlock::ENTITY_DEAD || entities[i]->stats.cur_state == StatBlock::ENTITY_CRITDEAD)) {
426 continue;
427 }
428 if (get_corpse && !entities[i]->stats.corpse) {
429 continue;
430 }
431
432 float distance = Utils::calcDist(pos, entities[i]->stats.pos);
433 if (distance < best_distance) {
434 best_distance = distance;
435 nearest = entities[i];
436 }
437 }
438
439 if (nearest && saved_distance)
440 *saved_distance = best_distance;
441
442 if (!saved_distance && best_distance > max_range)
443 nearest = NULL;
444
445 return nearest;
446 }
447
448 bool EntityManager::isCleared() {
449 if (entities.empty()) return true;
450
451 for (unsigned int i=0; i < entities.size(); i++) {
452 if (entities[i]->stats.alive && !entities[i]->stats.hero_ally)
453 return false;
454 }
455
456 return true;
457 }
458
459 void EntityManager::spawn(const std::string& entity_type, const Point& target) {
460 Map_Enemy espawn;
461
462 espawn.type = entity_type;
463 espawn.pos = FPoint(target);
464 espawn.pos.x += 0.5f;
465 espawn.pos.y += 0.5f;
466
467 // quick spawns start facing a random direction
468 espawn.direction = rand() % 8;
469
470 if (!mapr->collider.isEmpty(espawn.pos.x, espawn.pos.y)) {
471 return;
472 }
473 else {
474 mapr->collider.block(espawn.pos.x, espawn.pos.y, !MapCollision::IS_ALLY);
475 }
476
477 powers->map_enemies.push(espawn);
478 }
479
480 /**
481 * addRenders()
482 * Map objects need to be drawn in Z order, so we allow a parent object (GameEngine)
483 * to collect all mobile sprites each frame.
484 */
485 void EntityManager::addRenders(std::vector<Renderable> &r, std::vector<Renderable> &r_dead) {
486 std::vector<Entity*>::iterator it;
487 for (it = entities.begin(); it != entities.end(); ++it) {
488 bool dead = (*it)->stats.corpse;
489 if (!dead || !(*it)->stats.corpse_timer.isEnd()) {
490 Renderable re = (*it)->getRender();
491 re.prio = 1;
492 (*it)->stats.effects.getCurrentColor(re.color_mod);
493 (*it)->stats.effects.getCurrentAlpha(re.alpha_mod);
494
495 // fade out corpses
496 unsigned fade_time = (eset->misc.corpse_timeout > settings->max_frames_per_sec) ? settings->max_frames_per_sec : eset->misc.corpse_timeout;
497 if (dead && fade_time != 0 && (*it)->stats.corpse_timer.getCurrent() <= fade_time) {
498 re.alpha_mod = static_cast<uint8_t>(static_cast<float>((*it)->stats.corpse_timer.getCurrent()) * (re.alpha_mod / static_cast<float>(fade_time)));
499 }
500
501 // draw corpses below objects so that floor loot is more visible
502 (dead ? r_dead : r).push_back(re);
503
504 // add effects
505 for (size_t i = 0; i < (*it)->stats.effects.effect_list.size(); ++i) {
506 Effect& ei = (*it)->stats.effects.effect_list[i];
507 if (ei.animation) {
508 Renderable ren = ei.animation->getCurrentFrame(0);
509 ren.map_pos = (*it)->stats.pos;
510 if (ei.render_above)
511 ren.prio = 2;
512 else
513 ren.prio = 0;
514 r.push_back(ren);
515 }
516 }
517 }
518 }
519 }
520
521 EntityManager::~EntityManager() {
522 for (unsigned int i=0; i < entities.size(); i++) {
523 anim->decreaseCount(entities[i]->animationSet->getName());
524 entities[i]->unloadSounds();
525 delete entities[i];
526 }
527 for (unsigned int i=0; i < prototypes.size(); i++) {
528 anim->decreaseCount(prototypes[i].animationSet->getName());
529 prototypes[i].unloadSounds();
530 }
531 }
0 /*
1 Copyright © 2011-2012 Clint Bellanger
2 Copyright © 2012 Stefan Beller
3 Copyright © 2013 Henrik Andersson
4 Copyright © 2012-2016 Justin Jacobs
5
6 This file is part of FLARE.
7
8 FLARE is free software: you can redistribute it and/or modify it under the terms
9 of the GNU General Public License as published by the Free Software Foundation,
10 either version 3 of the License, or (at your option) any later version.
11
12 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14 PARTICULAR PURPOSE. See the GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License along with
17 FLARE. If not, see http://www.gnu.org/licenses/
18 */
19
20 /*
21 * class EntityManager
22 */
23
24
25 #ifndef ENTITY_MANAGER_H
26 #define ENTITY_MANAGER_H
27
28 #include "CommonIncludes.h"
29 #include "Utils.h"
30
31 class Animation;
32 class Entity;
33
34 class EntityManager {
35 private:
36
37 void loadAnimations(Entity *e);
38
39 std::vector<std::string> anim_prefixes;
40 std::vector<std::vector<Animation*> > anim_entities;
41
42 protected:
43 /**
44 * callee is responsible for deleting returned entity object
45 */
46 size_t loadEntityPrototype(const std::string& type_id);
47
48 std::vector<Entity> prototypes;
49
50 public:
51 EntityManager();
52 ~EntityManager();
53
54 Entity *getEntityPrototype(const std::string& type_id);
55
56 void handleNewMap();
57 void handleSpawn();
58 bool checkPartyMembers();
59 void logic();
60 void addRenders(std::vector<Renderable> &r, std::vector<Renderable> &r_dead);
61 void checkEnemiesforXP();
62 bool isCleared();
63 void spawn(const std::string& entity_type, const Point& target);
64 Entity *entityFocus(const Point& mouse, const FPoint& cam, bool alive_only);
65 Entity* getNearestEntity(const FPoint& pos, bool get_corpse, float *saved_distance, float max_range);
66
67 // vars
68 std::vector<Entity*> entities;
69 int hero_stealth;
70
71 bool player_blocked;
72 Timer player_blocked_timer;
73
74 static const bool GET_CORPSE = true;
75 static const bool IS_ALIVE = true;
76 };
77
78
79 #endif
1717
1818 #include "Avatar.h"
1919 #include "CampaignManager.h"
20 #include "EnemyManager.h"
20 #include "EntityManager.h"
2121 #include "EngineSettings.h"
2222 #include "EventManager.h"
2323 #include "FileParser.h"
4242 */
4343 Event::Event()
4444 : type("")
45 , activate_type(-1)
45 , activate_type(ACTIVATE_ON_TRIGGER)
4646 , components(std::vector<EventComponent>())
4747 , location(Rect())
4848 , hotspot(Rect())
9595 evnt->type = infile.val;
9696 }
9797 else if (infile.key == "activate") {
98 // @ATTR event.activate|["on_trigger", "on_load", "on_leave", "on_mapexit", "on_clear", "static"]|Set the state in which the event will be activated (map events only).
98 // @ATTR event.activate|["on_trigger", "on_interact", "on_load", "on_leave", "on_mapexit", "on_clear", "static"]|Set the state in which the event will be activated (map events only). on_trigger = the player is standing in the event area or the player interacts with the hotspot. on_interact = the player ineracts with the hotspot. on_mapexit = as the player leaves the map. on_leave = as the player steps outside of an event area they were previously inside of. on_load = as the player enters a map. on_clear = all of the enemies on a map have been defeated. static = constantly, every frame.
9999 if (infile.val == "on_trigger") {
100100 evnt->activate_type = Event::ACTIVATE_ON_TRIGGER;
101 }
102 else if (infile.val == "on_interact") {
103 evnt->activate_type = Event::ACTIVATE_ON_INTERACT;
101104 }
102105 else if (infile.val == "on_mapexit") {
103106 // no need to set keep_after_trigger to false correctly, it's ignored anyway
118121 evnt->activate_type = Event::ACTIVATE_STATIC;
119122 }
120123 else {
121 infile.error("EventManager: Event activation type '%s' unknown, change to \"on_trigger\" to suppress this warning.", infile.val.c_str());
124 infile.error("EventManager: Event activation type '%s' unknown. Defaulting to 'on_trigger'.", infile.val.c_str());
125 evnt->activate_type = Event::ACTIVATE_ON_TRIGGER;
122126 }
123127 }
124128 else if (infile.key == "location") {
200204 e->s = msg->get(val);
201205 }
202206 else if (key == "power_path") {
203 // @ATTR event.power_path|["hero", point]|Event power path
207 // @ATTR event.power_path|int, int, ["hero", point] : Source X, Source Y, Destination|Path that an event power will take.
204208 e->type = EventComponent::POWER_PATH;
205209
206210 // x,y are src, if s=="hero" we target the hero,
221225 // @ATTR event.power_damage|int, int : Min, Max|Range of power damage
222226 e->type = EventComponent::POWER_DAMAGE;
223227
224 e->a = Parse::popFirstInt(val);
225 e->b = Parse::popFirstInt(val);
228 e->x = Parse::popFirstInt(val);
229 e->y = Parse::popFirstInt(val);
226230 }
227231 else if (key == "intermap") {
228232 // @ATTR event.intermap|filename, int, int : Map file, X, Y|Jump to specific map at location specified.
386390 e->x = Parse::popFirstInt(val);
387391 }
388392 else if (key == "requires_item") {
389 // @ATTR event.requires_item|list(item_id)|Event requires specific item (not equipped)
393 // @ATTR event.requires_item|list(item_id)|Event requires specific item (not equipped). Quantity can be specified by appending ":Q" to the item_id, where Q is an integer.
390394 e->type = EventComponent::REQUIRES_ITEM;
391395
392 e->x = Parse::popFirstInt(val);
396 ItemStack item_stack = Parse::toItemQuantityPair(Parse::popFirstString(val));
397 e->id = item_stack.item;
398 e->x = item_stack.quantity;
393399
394400 // add repeating requires_item
395401 if (evnt) {
398404 evnt->components.push_back(EventComponent());
399405 e = &evnt->components.back();
400406 e->type = EventComponent::REQUIRES_ITEM;
401 e->x = Parse::toInt(repeat_val);
407 item_stack = Parse::toItemQuantityPair(repeat_val);
408 e->id = item_stack.item;
409 e->x = item_stack.quantity;
402410
403411 repeat_val = Parse::popFirstString(val);
404412 }
405413 }
406414 }
407415 else if (key == "requires_not_item") {
408 // @ATTR event.requires_not_item|list(item_id)|Event requires not having a specific item (not equipped)
416 // @ATTR event.requires_not_item|list(item_id)|Event requires not having a specific item (not equipped). Quantity can be specified by appending ":Q" to the item_id, where Q is an integer.
409417 e->type = EventComponent::REQUIRES_NOT_ITEM;
410418
411 e->x = Parse::popFirstInt(val);
419 ItemStack item_stack = Parse::toItemQuantityPair(Parse::popFirstString(val));
420 e->id = item_stack.item;
421 e->x = item_stack.quantity;
412422
413423 // add repeating requires_not_item
414424 if (evnt) {
417427 evnt->components.push_back(EventComponent());
418428 e = &evnt->components.back();
419429 e->type = EventComponent::REQUIRES_NOT_ITEM;
420 e->x = Parse::toInt(repeat_val);
430 item_stack = Parse::toItemQuantityPair(repeat_val);
431 e->id = item_stack.item;
432 e->x = item_stack.quantity;
421433
422434 repeat_val = Parse::popFirstString(val);
423435 }
480492 e->x = std::max(Parse::toInt(val), 0);
481493 }
482494 else if (key == "remove_item") {
483 // @ATTR event.remove_item|list(item_id)|Removes specified item from hero inventory
495 // @ATTR event.remove_item|list(item_id)|Removes specified item from hero inventory. Quantity can be specified by appending ":Q" to the item_id, where Q is an integer.
484496 e->type = EventComponent::REMOVE_ITEM;
485497
486 e->x = Parse::popFirstInt(val);
498 ItemStack item_stack = Parse::toItemQuantityPair(Parse::popFirstString(val));
499 e->id = item_stack.item;
500 e->x = item_stack.quantity;
487501
488502 // add repeating remove_item
489503 if (evnt) {
492506 evnt->components.push_back(EventComponent());
493507 e = &evnt->components.back();
494508 e->type = EventComponent::REMOVE_ITEM;
495 e->x = Parse::toInt(repeat_val);
509 item_stack = Parse::toItemQuantityPair(repeat_val);
510 e->id = item_stack.item;
511 e->x = item_stack.quantity;
496512
497513 repeat_val = Parse::popFirstString(val);
498514 }
511527 e->x = std::max(Parse::toInt(val), 0);
512528 }
513529 else if (key == "reward_item") {
514 // @ATTR event.reward_item|item_id, int : Item, Quantity|Reward hero with y number of item x.
530 // @ATTR event.reward_item|(list(item_id)|Reward hero with a specified item. Quantity can be specified by appending ":Q" to the item_id, where Q is an integer. To maintain backwards compatibility, the quantity must be defined for at least the first item in the list in order to use this syntax.
531 // @ATTR event.reward_item|item_id, int : Item, Quantity|Reward hero with y number of item x. NOTE: This syntax is maintained for backwards compatibility. It is recommended to use the above syntax instead.
515532 e->type = EventComponent::REWARD_ITEM;
516533
517 e->x = Parse::popFirstInt(val);
518 e->y = std::max(Parse::popFirstInt(val), 1);
534 bool check_pair = false;
535 ItemStack item_stack = Parse::toItemQuantityPair(Parse::popFirstString(val), &check_pair);
536
537 if (!check_pair) {
538 // item:quantity syntax not detected, falling back to the old syntax
539 e->id = item_stack.item;
540 e->x = std::max(Parse::popFirstInt(val), 1);
541 }
542 else {
543 e->id = item_stack.item;
544 e->x = item_stack.quantity;
545
546 // add repeating reward_item
547 if (evnt) {
548 std::string repeat_val = Parse::popFirstString(val);
549 while (repeat_val != "") {
550 evnt->components.push_back(EventComponent());
551 e = &evnt->components.back();
552 e->type = EventComponent::REWARD_ITEM;
553 item_stack = Parse::toItemQuantityPair(repeat_val);
554 e->id = item_stack.item;
555 e->x = item_stack.quantity;
556
557 repeat_val = Parse::popFirstString(val);
558 }
559 }
560 }
519561 }
520562 else if (key == "reward_loot") {
521563 // @ATTR event.reward_loot|list(loot)|Reward hero with random loot.
540582 // @ATTR event.power|power_id|Specify power coupled with event.
541583 e->type = EventComponent::POWER;
542584
543 e->x = Parse::toInt(val);
585 e->id = Parse::toPowerID(val);
544586 }
545587 else if (key == "spawn") {
546588 // @ATTR event.spawn|list(predefined_string, int, int) : Enemy category, X, Y|Spawn an enemy from this category at location
639681
640682 if (!use_engine_defaults.empty())
641683 e->y = static_cast<int>(Parse::toBool(use_engine_defaults));
684 }
685 else if (key == "show_on_minimap") {
686 // @ATTR event.show_on_minimap|bool|If true, this event will be shown on the minimap if it is the appropriate type (e.g. an intermap teleport).
687 e->type = EventComponent::SHOW_ON_MINIMAP;
688
689 e->x = static_cast<int>(Parse::toBool(val));
690 }
691 else if (key == "parallax_layers") {
692 // @ATTR event.parallax_layers|filename|Filename of a parallax layers definition to load.
693 e->type = EventComponent::PARALLAX_LAYERS;
694
695 e->s = val;
642696 }
643697 else {
644698 return false;
806860 pc->logMsg(ec->s, Avatar::MSG_UNIQUE);
807861 }
808862 else if (ec->type == EventComponent::SHAKYCAM) {
809 mapr->shaky_cam_timer.setDuration(ec->x);
863 mapr->cam.shake_timer.setDuration(ec->x);
810864 }
811865 else if (ec->type == EventComponent::REMOVE_CURRENCY) {
812866 camp->removeCurrency(ec->x);
813867 }
814868 else if (ec->type == EventComponent::REMOVE_ITEM) {
815 camp->removeItem(ec->x);
869 camp->removeItem(ItemStack(ec->id, ec->x));
816870 }
817871 else if (ec->type == EventComponent::REWARD_XP) {
818872 camp->rewardXP(ec->x, CampaignManager::XP_SHOW_MSG);
821875 camp->rewardCurrency(ec->x);
822876 }
823877 else if (ec->type == EventComponent::REWARD_ITEM) {
824 ItemStack istack;
825 istack.item = ec->x;
826 istack.quantity = ec->y;
827 camp->rewardItem(istack);
878 camp->rewardItem(ItemStack(ec->id, ec->x));
828879 }
829880 else if (ec->type == EventComponent::REWARD_LOOT) {
830881 std::vector<EventComponent> random_table;
858909 Point spawn_pos;
859910 spawn_pos.x = ec->x;
860911 spawn_pos.y = ec->y;
861 enemym->spawn(ec->s, spawn_pos);
912 entitym->spawn(ec->s, spawn_pos);
862913 }
863914 else if (ec->type == EventComponent::POWER) {
864915 EventComponent *ec_path = ev.getComponent(EventComponent::POWER_PATH);
882933 target.y = static_cast<float>(ev.location.y) + 0.5f;
883934 }
884935
885 // ec->x is power id
886 // ec->y is statblock index
887 mapr->activatePower(ec->x, ec->y, target);
936 // ec->id is power id
937 // ec->x is statblock index
938 mapr->activatePower(ec->id, ec->x, target);
888939 }
889940 else if (ec->type == EventComponent::STASH) {
890941 mapr->stash = ec->x == 0 ? false : true;
9611012 }
9621013 menu_powers->setUnlockedPowers();
9631014
964 menu_act->clear();
1015 menu_act->clear(MenuActionBar::CLEAR_SKIP_ITEMS);
9651016 if (pc_class && !use_engine_defaults) {
966 menu->act->set(pc_class->hotkeys);
1017 menu->act->set(pc_class->hotkeys, MenuActionBar::SET_SKIP_EMPTY);
9671018 }
9681019 menu->pow->newPowerNotification = false;
9691020
9701021 pc->respawn = true; // re-applies equipment, also revives the player
9711022 pc->stats.refresh_stats = true;
9721023 }
1024 }
1025 else if (ec->type == EventComponent::PARALLAX_LAYERS) {
1026 mapr->setMapParallax(ec->s);
9731027 }
9741028 }
9751029 return !ev.keep_after_trigger;
10051059 if (script_evnt.empty())
10061060 continue;
10071061
1008 if (script_file.key == "script" && script_file.val == filename) {
1062 if (script_file.key == "script" && Filesystem::convertSlashes(script_file.val) == Filesystem::convertSlashes(filename)) {
10091063 script_file.error("EventManager: Calling a script from within itself is not allowed.");
10101064 continue;
10111065 }
10181072 // create StatBlocks if we need them
10191073 EventComponent *ec_power = script_evnt.front().getComponent(EventComponent::POWER);
10201074 if (ec_power) {
1021 ec_power->y = mapr->addEventStatBlock(script_evnt.front());
1075 ec_power->x = mapr->addEventStatBlock(script_evnt.front());
10221076 }
10231077
10241078 if (isActive(script_evnt.front())) {
7474 SCRIPT = 41,
7575 CHANCE_EXEC = 42,
7676 RESPEC = 43,
77 NPC_ID = 44,
78 NPC_HOTSPOT = 45,
79 NPC_DIALOG_THEM = 46,
80 NPC_DIALOG_YOU = 47,
81 NPC_VOICE = 48,
82 NPC_DIALOG_TOPIC = 49,
83 NPC_DIALOG_GROUP = 50,
84 NPC_DIALOG_ID = 51,
85 NPC_DIALOG_RESPONSE = 52,
86 NPC_DIALOG_RESPONSE_ONLY = 53,
87 NPC_ALLOW_MOVEMENT = 54,
88 NPC_PORTRAIT_THEM = 55,
89 NPC_PORTRAIT_YOU = 56,
90 QUEST_TEXT = 57,
91 WAS_INSIDE_EVENT_AREA = 58
77 SHOW_ON_MINIMAP = 44,
78 PARALLAX_LAYERS = 45,
79 NPC_ID = 46,
80 NPC_HOTSPOT = 47,
81 NPC_DIALOG_THEM = 48,
82 NPC_DIALOG_YOU = 49,
83 NPC_VOICE = 50,
84 NPC_DIALOG_TOPIC = 51,
85 NPC_DIALOG_GROUP = 52,
86 NPC_DIALOG_ID = 53,
87 NPC_DIALOG_RESPONSE = 54,
88 NPC_DIALOG_RESPONSE_ONLY = 55,
89 NPC_ALLOW_MOVEMENT = 56,
90 NPC_PORTRAIT_THEM = 57,
91 NPC_PORTRAIT_YOU = 58,
92 QUEST_TEXT = 59,
93 WAS_INSIDE_EVENT_AREA = 60,
94 NPC_TAKE_A_PARTY = 61
9295 };
9396
9497 int type;
100103 int a;
101104 int b;
102105 int c;
106 float f;
107 size_t id;
103108
104109 EventComponent()
105110 : type(NONE)
110115 , z(0)
111116 , a(0)
112117 , b(0)
113 , c(0) {
118 , c(0)
119 , f(0)
120 , id(0) {
114121 }
115122 };
116123
118125 public:
119126 enum {
120127 ACTIVATE_ON_TRIGGER = 0,
121 ACTIVATE_ON_MAPEXIT = 1,
122 ACTIVATE_ON_LEAVE = 2,
123 ACTIVATE_ON_LOAD = 3,
124 ACTIVATE_ON_CLEAR = 4,
125 ACTIVATE_STATIC = 5
128 ACTIVATE_ON_INTERACT = 1,
129 ACTIVATE_ON_MAPEXIT = 2,
130 ACTIVATE_ON_LEAVE = 3,
131 ACTIVATE_ON_LOAD = 4,
132 ACTIVATE_ON_CLEAR = 5,
133 ACTIVATE_STATIC = 6
126134 };
127135
128136 std::string type;
4242
4343 filenames.clear();
4444 if (is_mod_file) {
45 filenames = mods->list(_filename, ModManager::LIST_FULL_PATHS);
45 filenames = mods->list(Filesystem::convertSlashes(_filename), ModManager::LIST_FULL_PATHS);
4646 }
4747 else {
48 filenames.push_back(_filename);
48 filenames.push_back(Filesystem::convertSlashes(_filename));
4949 }
5050 current_index = 0;
5151 line_number = 0;
231231 va_list args;
232232
233233 va_start(args, format);
234 vsprintf(buffer, format, args);
234 vsnprintf(buffer, 4096, format, args);
235235 va_end(args);
236236
237237 errorBuf(buffer);
0 /*
1 Copyright © 2012 Clint Bellanger
2 Copyright © 2012 davidriod
3 Copyright © 2012 Igor Paliychuk
4 Copyright © 2012 Stefan Beller
5 Copyright © 2013 Kurt Rinnert
6 Copyright © 2014 Henrik Andersson
7 Copyright © 2014-2016 Justin Jacobs
8
9 This file is part of FLARE.
10
11 FLARE is free software: you can redistribute it and/or modify it under the terms
12 of the GNU General Public License as published by the Free Software Foundation,
13 either version 3 of the License, or (at your option) any later version.
14
15 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
16 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
17 PARTICULAR PURPOSE. See the GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License along with
20 FLARE. If not, see http://www.gnu.org/licenses/
21 */
22
23 /**
24 * GameStateConfig
25 *
26 * Handle game Settings Menu
27 */
28
29 #include "CombatText.h"
30 #include "DeviceList.h"
31 #include "EngineSettings.h"
32 #include "FontEngine.h"
33 #include "GameStateConfig.h"
34 #include "GameStateTitle.h"
35 #include "InputState.h"
36 #include "MenuConfig.h"
37 #include "MessageEngine.h"
38 #include "ModManager.h"
39 #include "RenderDevice.h"
40 #include "Settings.h"
41 #include "SharedResources.h"
42 #include "SoundManager.h"
43 #include "Stats.h"
44 #include "TooltipManager.h"
45
46 GameStateConfig::GameStateConfig ()
47 : GameState()
48 , menu_config(new MenuConfig(MenuConfig::IS_GAME_STATE))
49 {
50
51 // don't save settings if we close the game while in this menu
52 save_settings_on_exit = false;
53 }
54
55 GameStateConfig::~GameStateConfig() {
56 delete menu_config;
57 }
58
59 void GameStateConfig::logic() {
60 menu_config->logic();
61
62 if (menu_config->force_refresh_background) {
63 force_refresh_background = true;
64 menu_config->force_refresh_background = false;
65 }
66 if (menu_config->reload_music) {
67 reload_music = true;
68 menu_config->reload_music = false;
69 }
70
71 if (menu_config->clicked_accept) {
72 menu_config->clicked_accept = false;
73 logicAccept();
74 }
75 else if (menu_config->clicked_cancel) {
76 menu_config->clicked_cancel = false;
77 logicCancel();
78 }
79 }
80
81 void GameStateConfig::logicAccept() {
82 // new_render_device = renderer_lstb->getValue();
83 std::string new_render_device = menu_config->getRenderDevice();
84
85 if (menu_config->setMods()) {
86 snd->unloadMusic();
87 reload_music = true;
88 reload_backgrounds = true;
89 delete mods;
90 mods = new ModManager(NULL);
91 settings->prev_save_slot = -1;
92 }
93 delete msg;
94 msg = new MessageEngine();
95 inpt->saveKeyBindings();
96 inpt->setKeybindNames();
97 eset->load();
98 Stats::init();
99 refreshFont();
100 if ((settings->enable_joystick) && (inpt->getNumJoysticks() > 0)) {
101 inpt->initJoystick();
102 }
103 menu_config->cleanup();
104
105 showLoading();
106 // need to delete the "Loading..." message here, as we're recreating our render context
107 if (loading_tip) {
108 delete loading_tip;
109 loading_tip = NULL;
110 }
111
112 delete tooltipm;
113
114 // we can't replace the render device in-place, so soft-reset the game
115 if (new_render_device != settings->render_device_name) {
116 settings->render_device_name = new_render_device;
117 inpt->done = true;
118 settings->soft_reset = true;
119 }
120
121 render_device->createContext();
122 tooltipm = new TooltipManager();
123 settings->saveSettings();
124 setRequestedGameState(new GameStateTitle());
125 }
126
127 void GameStateConfig::logicCancel() {
128 inpt->lock[Input::CANCEL] = true;
129 settings->loadSettings();
130 inpt->loadKeyBindings();
131 delete msg;
132 msg = new MessageEngine();
133 inpt->setKeybindNames();
134 eset->load();
135 Stats::init();
136 refreshFont();
137 menu_config->update();
138 menu_config->cleanup();
139 render_device->windowResize();
140 render_device->updateTitleBar();
141 showLoading();
142 setRequestedGameState(new GameStateTitle());
143 }
144
145 void GameStateConfig::render() {
146 if (requestedGameState != NULL) {
147 // we're in the process of switching game states, so skip rendering
148 return;
149 }
150
151 menu_config->render();
152 }
153
154 void GameStateConfig::refreshFont() {
155 delete font;
156 font = getFontEngine();
157 delete comb;
158 comb = new CombatText();
159 }
160
0 /*
1 Copyright © 2012 Clint Bellanger
2 Copyright © 2012 davidriod
3 Copyright © 2012 Igor Paliychuk
4 Copyright © 2013 Kurt Rinnert
5 Copyright © 2014-2016 Justin Jacobs
6
7 This file is part of FLARE.
8
9 FLARE is free software: you can redistribute it and/or modify it under the terms
10 of the GNU General Public License as published by the Free Software Foundation,
11 either version 3 of the License, or (at your option) any later version.
12
13 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
15 PARTICULAR PURPOSE. See the GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License along with
18 FLARE. If not, see http://www.gnu.org/licenses/
19 */
20
21 /**
22 * GameStateConfig
23 *
24 * Handle game Settings Menu
25 */
26
27 #ifndef GAMESTATECONFIG_H
28 #define GAMESTATECONFIG_H
29
30 #include "CommonIncludes.h"
31 #include "GameState.h"
32
33 class MenuConfig;
34
35 class GameStateConfig : public GameState {
36 private:
37 MenuConfig* menu_config;
38
39 public:
40 explicit GameStateConfig();
41 ~GameStateConfig();
42
43 void logic();
44 void logicAccept();
45 void logicCancel();
46 void refreshFont();
47
48 void render();
49 };
50
51 #endif
52
+0
-954
src/GameStateConfigBase.cpp less more
0 /*
1 Copyright © 2012 Clint Bellanger
2 Copyright © 2012 davidriod
3 Copyright © 2012 Igor Paliychuk
4 Copyright © 2012 Stefan Beller
5 Copyright © 2013 Kurt Rinnert
6 Copyright © 2014 Henrik Andersson
7 Copyright © 2014-2016 Justin Jacobs
8
9 This file is part of FLARE.
10
11 FLARE is free software: you can redistribute it and/or modify it under the terms
12 of the GNU General Public License as published by the Free Software Foundation,
13 either version 3 of the License, or (at your option) any later version.
14
15 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
16 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
17 PARTICULAR PURPOSE. See the GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License along with
20 FLARE. If not, see http://www.gnu.org/licenses/
21 */
22
23 /**
24 * GameStateConfigBase
25 *
26 * Handle game Settings Menu
27 */
28
29 #include "CombatText.h"
30 #include "CommonIncludes.h"
31 #include "DeviceList.h"
32 #include "EngineSettings.h"
33 #include "FileParser.h"
34 #include "FontEngine.h"
35 #include "GameStateConfigBase.h"
36 #include "GameStateTitle.h"
37 #include "InputState.h"
38 #include "MenuConfirm.h"
39 #include "MessageEngine.h"
40 #include "ModManager.h"
41 #include "Platform.h"
42 #include "RenderDevice.h"
43 #include "Settings.h"
44 #include "SharedResources.h"
45 #include "SoundManager.h"
46 #include "Stats.h"
47 #include "TooltipManager.h"
48 #include "UtilsFileSystem.h"
49 #include "UtilsParsing.h"
50 #include "Version.h"
51 #include "WidgetButton.h"
52 #include "WidgetCheckBox.h"
53 #include "WidgetListBox.h"
54 #include "WidgetSlider.h"
55 #include "WidgetTabControl.h"
56
57 GameStateConfigBase::GameStateConfigBase (bool do_init)
58 : GameState()
59 , child_widget()
60 , ok_button(new WidgetButton(WidgetButton::DEFAULT_FILE))
61 , defaults_button(new WidgetButton(WidgetButton::DEFAULT_FILE))
62 , cancel_button(new WidgetButton(WidgetButton::DEFAULT_FILE))
63 , background(NULL)
64 , show_fps_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
65 , show_fps_lb(new WidgetLabel())
66 , hardware_cursor_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
67 , hardware_cursor_lb(new WidgetLabel())
68 , colorblind_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
69 , colorblind_lb(new WidgetLabel())
70 , dev_mode_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
71 , dev_mode_lb(new WidgetLabel())
72 , subtitles_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
73 , subtitles_lb(new WidgetLabel())
74 , music_volume_sl(new WidgetSlider(WidgetSlider::DEFAULT_FILE))
75 , music_volume_lb(new WidgetLabel())
76 , sound_volume_sl(new WidgetSlider(WidgetSlider::DEFAULT_FILE))
77 , sound_volume_lb(new WidgetLabel())
78 , activemods_lstb(new WidgetListBox(10, WidgetListBox::DEFAULT_FILE))
79 , activemods_lb(new WidgetLabel())
80 , inactivemods_lstb(new WidgetListBox(10, WidgetListBox::DEFAULT_FILE))
81 , inactivemods_lb(new WidgetLabel())
82 , language_lstb(new WidgetListBox(10, WidgetListBox::DEFAULT_FILE))
83 , language_lb(new WidgetLabel())
84 , activemods_shiftup_btn(new WidgetButton("images/menus/buttons/up.png"))
85 , activemods_shiftdown_btn(new WidgetButton("images/menus/buttons/down.png"))
86 , activemods_deactivate_btn(new WidgetButton(WidgetButton::DEFAULT_FILE))
87 , inactivemods_activate_btn(new WidgetButton(WidgetButton::DEFAULT_FILE))
88 , defaults_confirm(new MenuConfirm(msg->get("Defaults"), msg->get("Reset ALL settings?")))
89 , active_tab(0)
90 , frame(0,0)
91 , frame_offset(11,8)
92 , tab_offset(3,0)
93 , new_render_device(settings->render_device_name)
94 {
95
96 // don't save settings if we close the game while in this menu
97 save_settings_on_exit = false;
98
99 Image *graphics;
100 graphics = render_device->loadImage("images/menus/config.png", RenderDevice::ERROR_NORMAL);
101 if (graphics) {
102 background = graphics->createSprite();
103 graphics->unref();
104 }
105
106 tab_control = new WidgetTabControl();
107
108 ok_button->setLabel(msg->get("OK"));
109 defaults_button->setLabel(msg->get("Defaults"));
110 cancel_button->setLabel(msg->get("Cancel"));
111
112 language_lstb->can_deselect = false;
113
114 // Finish Mods ListBoxes setup
115 activemods_lstb->multi_select = true;
116 for (unsigned int i = 0; i < mods->mod_list.size() ; i++) {
117 if (mods->mod_list[i].name != mods->FALLBACK_MOD)
118 activemods_lstb->append(mods->mod_list[i].name,createModTooltip(&mods->mod_list[i]));
119 }
120
121 inactivemods_lstb->multi_select = true;
122 for (unsigned int i = 0; i<mods->mod_dirs.size(); i++) {
123 bool skip_mod = false;
124 for (unsigned int j = 0; j<mods->mod_list.size(); j++) {
125 if (mods->mod_dirs[i] == mods->mod_list[j].name) {
126 skip_mod = true;
127 break;
128 }
129 }
130 if (!skip_mod && mods->mod_dirs[i] != mods->FALLBACK_MOD) {
131 Mod temp_mod = mods->loadMod(mods->mod_dirs[i]);
132 inactivemods_lstb->append(mods->mod_dirs[i],createModTooltip(&temp_mod));
133 }
134 }
135 inactivemods_lstb->sort();
136
137 if (do_init) {
138 init();
139 }
140 else {
141 // these will be initialized properly by a derevitive class (i.e. GameStateConfigDesktop)
142 AUDIO_TAB = 0;
143 INTERFACE_TAB = 0;
144 MODS_TAB = 0;
145 }
146
147 render_device->setBackgroundColor(Color(0,0,0,0));
148 }
149
150 GameStateConfigBase::~GameStateConfigBase() {
151 cleanup();
152 }
153
154 void GameStateConfigBase::init() {
155 AUDIO_TAB = 0;
156 INTERFACE_TAB = 1;
157 MODS_TAB = 2;
158
159 tab_control->setTabTitle(AUDIO_TAB, msg->get("Audio"));
160 tab_control->setTabTitle(INTERFACE_TAB, msg->get("Interface"));
161 tab_control->setTabTitle(MODS_TAB, msg->get("Mods"));
162
163 readConfig();
164
165 addChildWidgets();
166 setupTabList();
167
168 refreshWidgets();
169
170 update();
171 }
172
173 void GameStateConfigBase::readConfig() {
174 //Load the menu configuration from file
175
176 FileParser infile;
177 if (infile.open("menus/config.txt", FileParser::MOD_FILE, FileParser::ERROR_NORMAL)) {
178 while (infile.next()) {
179 if (parseKeyButtons(infile))
180 continue;
181
182 int x1 = Parse::popFirstInt(infile.val);
183 int y1 = Parse::popFirstInt(infile.val);
184 int x2 = Parse::popFirstInt(infile.val);
185 int y2 = Parse::popFirstInt(infile.val);
186
187 if (parseKey(infile, x1, y1, x2, y2))
188 continue;
189 else if (parseStub(infile))
190 continue;
191 else {
192 infile.error("GameStateConfigBase: '%s' is not a valid key.", infile.key.c_str());
193 }
194 }
195 infile.close();
196 }
197 }
198
199 bool GameStateConfigBase::parseKeyButtons(FileParser &infile) {
200 // @CLASS GameStateConfigBase|Description of menus/config.txt
201
202 if (infile.key == "button_ok") {
203 // @ATTR button_ok|int, int, alignment : X, Y, Alignment|Position of the "OK" button.
204 int x = Parse::popFirstInt(infile.val);
205 int y = Parse::popFirstInt(infile.val);
206 int a = Parse::toAlignment(Parse::popFirstString(infile.val));
207 ok_button->setBasePos(x, y, a);
208 }
209 else if (infile.key == "button_defaults") {
210 // @ATTR button_defaults|int, int, alignment : X, Y, Alignment|Position of the "Defaults" button.
211 int x = Parse::popFirstInt(infile.val);
212 int y = Parse::popFirstInt(infile.val);
213 int a = Parse::toAlignment(Parse::popFirstString(infile.val));
214 defaults_button->setBasePos(x, y, a);
215 }
216 else if (infile.key == "button_cancel") {
217 // @ATTR button_cancel|int, int, alignment : X, Y, Alignment|Position of the "Cancel" button.
218 int x = Parse::popFirstInt(infile.val);
219 int y = Parse::popFirstInt(infile.val);
220 int a = Parse::toAlignment(Parse::popFirstString(infile.val));
221 cancel_button->setBasePos(x, y, a);
222 }
223 else {
224 return false;
225 }
226
227 return true;
228 }
229 bool GameStateConfigBase::parseKey(FileParser &infile, int &x1, int &y1, int &x2, int &y2) {
230 if (infile.key == "listbox_scrollbar_offset") {
231 // @ATTR listbox_scrollbar_offset|int|Horizontal offset from the right of listboxes (mods, languages, etc) to place the scrollbar.
232 activemods_lstb->scrollbar_offset = x1;
233 inactivemods_lstb->scrollbar_offset = x1;
234 language_lstb->scrollbar_offset = x1;
235 }
236 else if (infile.key == "frame_offset") {
237 // @ATTR frame_offset|point|Offset for all the widgets contained under each tab.
238 frame_offset.x = x1;
239 frame_offset.y = y1;
240 }
241 else if (infile.key == "tab_offset") {
242 // @ATTR tab_offset|point|Offset for the row of tabs.
243 tab_offset.x = x1;
244 tab_offset.y = y1;
245 }
246 else if (infile.key == "music_volume") {
247 // @ATTR music_volume|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Music Volume" slider relative to the frame.
248 placeLabeledWidget(music_volume_lb, music_volume_sl, x1, y1, x2, y2, msg->get("Music Volume"), FontEngine::JUSTIFY_RIGHT);
249 }
250 else if (infile.key == "sound_volume") {
251 // @ATTR sound_volume|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Sound Volume" slider relative to the frame.
252 placeLabeledWidget(sound_volume_lb, sound_volume_sl, x1, y1, x2, y2, msg->get("Sound Volume"), FontEngine::JUSTIFY_RIGHT);
253 }
254 else if (infile.key == "language") {
255 // @ATTR language|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Language" list box relative to the frame.
256 placeLabeledWidget(language_lb, language_lstb, x1, y1, x2, y2, msg->get("Language"));
257 language_lb->setJustify(FontEngine::JUSTIFY_CENTER);
258 }
259 else if (infile.key == "language_height") {
260 // @ATTR language_height|int|Number of visible rows for the "Language" list box.
261 language_lstb->setHeight(x1);
262 }
263 else if (infile.key == "show_fps") {
264 // @ATTR show_fps|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Show FPS" checkbox relative to the frame.
265 placeLabeledWidget(show_fps_lb, show_fps_cb, x1, y1, x2, y2, msg->get("Show FPS"), FontEngine::JUSTIFY_RIGHT);
266 }
267 else if (infile.key == "colorblind") {
268 // @ATTR colorblind|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Colorblind Mode" checkbox relative to the frame.
269 placeLabeledWidget(colorblind_lb, colorblind_cb, x1, y1, x2, y2, msg->get("Colorblind Mode"), FontEngine::JUSTIFY_RIGHT);
270 }
271 else if (infile.key == "hardware_cursor") {
272 // @ATTR hardware_cursor|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Hardware mouse cursor" checkbox relative to the frame.
273 placeLabeledWidget(hardware_cursor_lb, hardware_cursor_cb, x1, y1, x2, y2, msg->get("Hardware mouse cursor"), FontEngine::JUSTIFY_RIGHT);
274 }
275 else if (infile.key == "dev_mode") {
276 // @ATTR dev_mode|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Developer Mode" checkbox relative to the frame.
277 placeLabeledWidget(dev_mode_lb, dev_mode_cb, x1, y1, x2, y2, msg->get("Developer Mode"), FontEngine::JUSTIFY_RIGHT);
278 }
279 else if (infile.key == "subtitles") {
280 // @ATTR subtitles|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Subtitles" checkbox relative to the frame.
281 placeLabeledWidget(subtitles_lb, subtitles_cb, x1, y1, x2, y2, msg->get("Subtitles"), FontEngine::JUSTIFY_RIGHT);
282 }
283 else if (infile.key == "activemods") {
284 // @ATTR activemods|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Active Mods" list box relative to the frame.
285 placeLabeledWidget(activemods_lb, activemods_lstb, x1, y1, x2, y2, msg->get("Active Mods"));
286 activemods_lb->setJustify(FontEngine::JUSTIFY_CENTER);
287 }
288 else if (infile.key == "activemods_height") {
289 // @ATTR activemods_height|int|Number of visible rows for the "Active Mods" list box.
290 activemods_lstb->setHeight(x1);
291 }
292 else if (infile.key == "inactivemods") {
293 // @ATTR inactivemods|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Available Mods" list box relative to the frame.
294 placeLabeledWidget(inactivemods_lb, inactivemods_lstb, x1, y1, x2, y2, msg->get("Available Mods"));
295 inactivemods_lb->setJustify(FontEngine::JUSTIFY_CENTER);
296 }
297 else if (infile.key == "inactivemods_height") {
298 // @ATTR inactivemods_height|int|Number of visible rows for the "Available Mods" list box.
299 inactivemods_lstb->setHeight(x1);
300 }
301 else if (infile.key == "activemods_shiftup") {
302 // @ATTR activemods_shiftup|point|Position of the button to shift mods up in "Active Mods" relative to the frame.
303 activemods_shiftup_btn->setBasePos(x1, y1, Utils::ALIGN_TOPLEFT);
304 activemods_shiftup_btn->refresh();
305 }
306 else if (infile.key == "activemods_shiftdown") {
307 // @ATTR activemods_shiftdown|point|Position of the button to shift mods down in "Active Mods" relative to the frame.
308 activemods_shiftdown_btn->setBasePos(x1, y1, Utils::ALIGN_TOPLEFT);
309 activemods_shiftdown_btn->refresh();
310 }
311 else if (infile.key == "activemods_deactivate") {
312 // @ATTR activemods_deactivate|point|Position of the "Disable" button relative to the frame.
313 activemods_deactivate_btn->setLabel(msg->get("<< Disable"));
314 activemods_deactivate_btn->setBasePos(x1, y1, Utils::ALIGN_TOPLEFT);
315 activemods_deactivate_btn->refresh();
316 }
317 else if (infile.key == "inactivemods_activate") {
318 // @ATTR inactivemods_activate|point|Position of the "Enable" button relative to the frame.
319 inactivemods_activate_btn->setLabel(msg->get("Enable >>"));
320 inactivemods_activate_btn->setBasePos(x1, y1, Utils::ALIGN_TOPLEFT);
321 inactivemods_activate_btn->refresh();
322 }
323 else {
324 return false;
325 }
326
327 return true;
328 }
329
330 bool GameStateConfigBase::parseStub(FileParser &infile) {
331 // not used for base configuration
332 // checking them here prevents getting an "invalid key" warning
333 if (infile.key == "renderer");
334 else if (infile.key == "renderer_height");
335 else if (infile.key == "fullscreen");
336 else if (infile.key == "mouse_move");
337 else if (infile.key == "hwsurface");
338 else if (infile.key == "vsync");
339 else if (infile.key == "texture_filter");
340 else if (infile.key == "enable_joystick");
341 else if (infile.key == "change_gamma");
342 else if (infile.key == "mouse_aim");
343 else if (infile.key == "no_mouse");
344 else if (infile.key == "gamma");
345 else if (infile.key == "joystick_deadzone");
346 else if (infile.key == "resolution");
347 else if (infile.key == "joystick_device");
348 else if (infile.key == "joystick_device_height");
349 else if (infile.key == "hws_note");
350 else if (infile.key == "dbuf_note");
351 else if (infile.key == "test_note");
352 else if (infile.key == "handheld_note");
353 else if (infile.key == "secondary_offset");
354 else if (infile.key == "keybinds_bg_color");
355 else if (infile.key == "keybinds_bg_alpha");
356 else if (infile.key == "scrollpane");
357 else if (infile.key == "scrollpane_contents");
358 else if (infile.key == "cancel");
359 else if (infile.key == "accept");
360 else if (infile.key == "up");
361 else if (infile.key == "down");
362 else if (infile.key == "left");
363 else if (infile.key == "right");
364 else if (infile.key == "bar1");
365 else if (infile.key == "bar2");
366 else if (infile.key == "bar3");
367 else if (infile.key == "bar4");
368 else if (infile.key == "bar5");
369 else if (infile.key == "bar6");
370 else if (infile.key == "bar7");
371 else if (infile.key == "bar8");
372 else if (infile.key == "bar9");
373 else if (infile.key == "bar0");
374 else if (infile.key == "main1");
375 else if (infile.key == "main2");
376 else if (infile.key == "character");
377 else if (infile.key == "inventory");
378 else if (infile.key == "powers");
379 else if (infile.key == "log");
380 else if (infile.key == "ctrl");
381 else if (infile.key == "shift");
382 else if (infile.key == "alt");
383 else if (infile.key == "delete");
384 else if (infile.key == "actionbar");
385 else if (infile.key == "actionbar_back");
386 else if (infile.key == "actionbar_forward");
387 else if (infile.key == "actionbar_use");
388 else if (infile.key == "developer_menu");
389 else return false;
390
391 return true;
392 }
393
394 void GameStateConfigBase::addChildWidgets() {
395 addChildWidget(music_volume_sl, AUDIO_TAB);
396 addChildWidget(music_volume_lb, AUDIO_TAB);
397 addChildWidget(sound_volume_sl, AUDIO_TAB);
398 addChildWidget(sound_volume_lb, AUDIO_TAB);
399
400 addChildWidget(show_fps_cb, INTERFACE_TAB);
401 addChildWidget(show_fps_lb, INTERFACE_TAB);
402 addChildWidget(colorblind_cb, INTERFACE_TAB);
403 addChildWidget(colorblind_lb, INTERFACE_TAB);
404 addChildWidget(hardware_cursor_cb, INTERFACE_TAB);
405 addChildWidget(hardware_cursor_lb, INTERFACE_TAB);
406 addChildWidget(dev_mode_cb, INTERFACE_TAB);
407 addChildWidget(dev_mode_lb, INTERFACE_TAB);
408 addChildWidget(subtitles_cb, INTERFACE_TAB);
409 addChildWidget(subtitles_lb, INTERFACE_TAB);
410 addChildWidget(language_lstb, INTERFACE_TAB);
411 addChildWidget(language_lb, INTERFACE_TAB);
412
413 addChildWidget(activemods_lstb, MODS_TAB);
414 addChildWidget(activemods_lb, MODS_TAB);
415 addChildWidget(inactivemods_lstb, MODS_TAB);
416 addChildWidget(inactivemods_lb, MODS_TAB);
417 addChildWidget(activemods_shiftup_btn, MODS_TAB);
418 addChildWidget(activemods_shiftdown_btn, MODS_TAB);
419 addChildWidget(activemods_deactivate_btn, MODS_TAB);
420 addChildWidget(inactivemods_activate_btn, MODS_TAB);
421 }
422
423 void GameStateConfigBase::setupTabList() {
424 tablist.add(tab_control);
425 tablist.setPrevTabList(&tablist_main);
426
427 tablist_main.add(ok_button);
428 tablist_main.add(defaults_button);
429 tablist_main.add(cancel_button);
430 tablist_main.setPrevTabList(&tablist);
431 tablist_main.setNextTabList(&tablist);
432 tablist_main.lock();
433
434 tablist_audio.add(music_volume_sl);
435 tablist_audio.add(sound_volume_sl);
436 tablist_audio.setPrevTabList(&tablist);
437 tablist_audio.setNextTabList(&tablist_main);
438 tablist_audio.lock();
439
440 tablist_interface.add(show_fps_cb);
441 tablist_interface.add(colorblind_cb);
442 tablist_interface.add(hardware_cursor_cb);
443 tablist_interface.add(dev_mode_cb);
444 tablist_interface.add(subtitles_cb);
445 tablist_interface.add(language_lstb);
446 tablist_interface.setPrevTabList(&tablist);
447 tablist_interface.setNextTabList(&tablist_main);
448 tablist_interface.lock();
449
450 tablist_mods.add(inactivemods_lstb);
451 tablist_mods.add(activemods_lstb);
452 tablist_mods.add(inactivemods_activate_btn);
453 tablist_mods.add(activemods_deactivate_btn);
454 tablist_mods.add(activemods_shiftup_btn);
455 tablist_mods.add(activemods_shiftdown_btn);
456 tablist_mods.setPrevTabList(&tablist);
457 tablist_mods.setNextTabList(&tablist_main);
458 tablist_mods.lock();
459 }
460
461 void GameStateConfigBase::update() {
462 updateAudio();
463 updateInterface();
464 updateMods();
465 }
466
467 void GameStateConfigBase::updateAudio() {
468 if (settings->audio) {
469 music_volume_sl->set(0, 128, settings->music_volume);
470 snd->setVolumeMusic(settings->music_volume);
471 sound_volume_sl->set(0, 128, settings->sound_volume);
472 snd->setVolumeSFX(settings->sound_volume);
473 }
474 else {
475 music_volume_sl->set(0,128,0);
476 sound_volume_sl->set(0,128,0);
477 }
478 }
479
480 void GameStateConfigBase::updateInterface() {
481 show_fps_cb->setChecked(settings->show_fps);
482 colorblind_cb->setChecked(settings->colorblind);
483 hardware_cursor_cb->setChecked(settings->hardware_cursor);
484 dev_mode_cb->setChecked(settings->dev_mode);
485 subtitles_cb->setChecked(settings->subtitles);
486
487 refreshLanguages();
488 }
489
490 void GameStateConfigBase::updateMods() {
491 activemods_lstb->refresh();
492 inactivemods_lstb->refresh();
493 }
494
495 void GameStateConfigBase::logic() {
496 if (inpt->window_resized)
497 refreshWidgets();
498
499 if (defaults_confirm->visible) {
500 // reset defaults confirmation
501 logicDefaults();
502 return;
503 }
504 else {
505 if (!logicMain())
506 return;
507 }
508
509 // tab contents
510 active_tab = tab_control->getActiveTab();
511
512 if (active_tab == AUDIO_TAB) {
513 tablist.setNextTabList(&tablist_audio);
514 logicAudio();
515 }
516 else if (active_tab == INTERFACE_TAB) {
517 tablist.setNextTabList(&tablist_interface);
518 logicInterface();
519
520 if (platform.force_hardware_cursor) {
521 // for some platforms, hardware mouse cursor can not be turned off
522 settings->hardware_cursor = true;
523 hardware_cursor_cb->setChecked(settings->hardware_cursor);
524 }
525 }
526 else if (active_tab == MODS_TAB) {
527 tablist.setNextTabList(&tablist_mods);
528 logicMods();
529 }
530 }
531
532 bool GameStateConfigBase::logicMain() {
533 for (unsigned int i = 0; i < child_widget.size(); i++) {
534 if (child_widget[i]->in_focus) {
535 tab_control->setActiveTab(optiontab[i]);
536 break;
537 }
538 }
539
540 // tabs & the bottom 3 main buttons
541 tab_control->logic();
542 tablist.logic();
543 tablist_main.logic();
544 tablist_audio.logic();
545 tablist_interface.logic();
546 tablist_mods.logic();
547
548 // Ok/Cancel Buttons
549 if (ok_button->checkClick()) {
550 logicAccept();
551
552 // GameStateConfigBase deconstructed, proceed with caution
553 return false;
554 }
555 else if (defaults_button->checkClick()) {
556 defaults_confirm->visible = true;
557 return true;
558 }
559 else if (cancel_button->checkClick() || (inpt->pressing[Input::CANCEL] && !inpt->lock[Input::CANCEL])) {
560 logicCancel();
561
562 // GameStateConfigBase deconstructed, proceed with caution
563 return false;
564 }
565
566 return true;
567 }
568
569 void GameStateConfigBase::logicDefaults() {
570 defaults_confirm->logic();
571 if (defaults_confirm->confirmClicked) {
572 settings->fullscreen = false;
573 settings->loadDefaults();
574 eset->load();
575 inpt->defaultQwertyKeyBindings();
576 inpt->defaultJoystickBindings();
577 update();
578 render_device->windowResize();
579 defaults_confirm->visible = false;
580 defaults_confirm->confirmClicked = false;
581 }
582 }
583
584 void GameStateConfigBase::logicAccept() {
585 if (setMods()) {
586 snd->unloadMusic();
587 reload_music = true;
588 reload_backgrounds = true;
589 delete mods;
590 mods = new ModManager(NULL);
591 settings->prev_save_slot = -1;
592 }
593 delete msg;
594 msg = new MessageEngine();
595 inpt->saveKeyBindings();
596 inpt->setKeybindNames();
597 eset->load();
598 Stats::init();
599 refreshFont();
600 if ((settings->enable_joystick) && (inpt->getNumJoysticks() > 0)) {
601 inpt->initJoystick();
602 }
603 cleanup();
604
605 showLoading();
606 // need to delete the "Loading..." message here, as we're recreating our render context
607 if (loading_tip) {
608 delete loading_tip;
609 loading_tip = NULL;
610 }
611
612 delete tooltipm;
613
614 // we can't replace the render device in-place, so soft-reset the game
615 if (new_render_device != settings->render_device_name) {
616 settings->render_device_name = new_render_device;
617 inpt->done = true;
618 settings->soft_reset = true;
619 }
620
621 render_device->createContext();
622 tooltipm = new TooltipManager();
623 settings->saveSettings();
624 setRequestedGameState(new GameStateTitle());
625 }
626
627 void GameStateConfigBase::logicCancel() {
628 inpt->lock[Input::CANCEL] = true;
629 settings->loadSettings();
630 inpt->loadKeyBindings();
631 delete msg;
632 msg = new MessageEngine();
633 inpt->setKeybindNames();
634 eset->load();
635 Stats::init();
636 refreshFont();
637 update();
638 cleanup();
639 render_device->windowResize();
640 render_device->updateTitleBar();
641 showLoading();
642 setRequestedGameState(new GameStateTitle());
643 }
644
645 void GameStateConfigBase::logicAudio() {
646 if (settings->audio) {
647 if (music_volume_sl->checkClick()) {
648 if (settings->music_volume == 0)
649 reload_music = true;
650 settings->music_volume = static_cast<short>(music_volume_sl->getValue());
651 snd->setVolumeMusic(settings->music_volume);
652 }
653 else if (sound_volume_sl->checkClick()) {
654 settings->sound_volume = static_cast<short>(sound_volume_sl->getValue());
655 snd->setVolumeSFX(settings->sound_volume);
656 }
657 }
658 }
659
660 void GameStateConfigBase::logicInterface() {
661 if (language_lstb->checkClick()) {
662 int lang_id = language_lstb->getSelected();
663 if (lang_id != -1)
664 settings->language = language_ISO[lang_id];
665 }
666 else if (show_fps_cb->checkClick()) {
667 settings->show_fps = show_fps_cb->isChecked();
668 }
669 else if (colorblind_cb->checkClick()) {
670 settings->colorblind = colorblind_cb->isChecked();
671 }
672 else if (hardware_cursor_cb->checkClick()) {
673 settings->hardware_cursor = hardware_cursor_cb->isChecked();
674 }
675 else if (dev_mode_cb->checkClick()) {
676 settings->dev_mode = dev_mode_cb->isChecked();
677 }
678 else if (subtitles_cb->checkClick()) {
679 settings->subtitles = subtitles_cb->isChecked();
680 }
681 }
682
683 void GameStateConfigBase::logicMods() {
684 if (activemods_lstb->checkClick()) {
685 //do nothing
686 }
687 else if (inactivemods_lstb->checkClick()) {
688 //do nothing
689 }
690 else if (activemods_shiftup_btn->checkClick()) {
691 activemods_lstb->shiftUp();
692 }
693 else if (activemods_shiftdown_btn->checkClick()) {
694 activemods_lstb->shiftDown();
695 }
696 else if (activemods_deactivate_btn->checkClick()) {
697 disableMods();
698 }
699 else if (inactivemods_activate_btn->checkClick()) {
700 enableMods();
701 }
702 }
703
704 void GameStateConfigBase::render() {
705 if (requestedGameState != NULL) {
706 // we're in the process of switching game states, so skip rendering
707 return;
708 }
709
710 int tabheight = tab_control->getTabHeight();
711 Rect pos;
712 pos.x = (settings->view_w - eset->resolutions.frame_w)/2;
713 pos.y = (settings->view_h - eset->resolutions.frame_h)/2 + tabheight - tabheight/16;
714
715 if (background) {
716 background->setDestFromRect(pos);
717 render_device->render(background);
718 }
719
720 tab_control->render();
721
722 // render OK/Defaults/Cancel buttons
723 ok_button->render();
724 cancel_button->render();
725 defaults_button->render();
726
727 renderTabContents();
728 renderDialogs();
729 }
730
731 void GameStateConfigBase::renderTabContents() {
732 for (unsigned int i = 0; i < child_widget.size(); i++) {
733 if (optiontab[i] == active_tab) child_widget[i]->render();
734 }
735
736 }
737
738 void GameStateConfigBase::renderDialogs() {
739 if (defaults_confirm->visible)
740 defaults_confirm->render();
741 }
742
743 void GameStateConfigBase::placeLabeledWidget(WidgetLabel *lb, Widget *w, int x1, int y1, int x2, int y2, std::string const& str, int justify) {
744 if (w) {
745 w->setBasePos(x2, y2, Utils::ALIGN_TOPLEFT);
746 }
747
748 if (lb) {
749 lb->setBasePos(x1, y1, Utils::ALIGN_TOPLEFT);
750 lb->setText(str);
751 lb->setJustify(justify);
752 }
753 }
754
755 void GameStateConfigBase::refreshWidgets() {
756 tab_control->setMainArea(((settings->view_w - eset->resolutions.frame_w)/2) + tab_offset.x, ((settings->view_h - eset->resolutions.frame_h)/2) + tab_offset.y);
757
758 frame.x = ((settings->view_w - eset->resolutions.frame_w)/2) + frame_offset.x;
759 frame.y = ((settings->view_h - eset->resolutions.frame_h)/2) + tab_control->getTabHeight() + frame_offset.y;
760
761 for (unsigned i=0; i<child_widget.size(); ++i) {
762 child_widget[i]->setPos(frame.x, frame.y);
763 }
764
765 ok_button->setPos(0, 0);
766 defaults_button->setPos(0, 0);
767 cancel_button->setPos(0, 0);
768
769 defaults_confirm->align();
770 }
771
772 void GameStateConfigBase::addChildWidget(Widget *w, int tab) {
773 child_widget.push_back(w);
774 optiontab.push_back(tab);
775 }
776
777 void GameStateConfigBase::refreshLanguages() {
778 language_ISO.clear();
779 language_lstb->clear();
780
781 FileParser infile;
782 if (infile.open("engine/languages.txt", FileParser::MOD_FILE, FileParser::ERROR_NORMAL)) {
783 int i = 0;
784 while (infile.next()) {
785 std::string key = infile.key;
786 if (key != "") {
787 language_ISO.push_back(key);
788 language_lstb->append(infile.val, infile.val + " [" + infile.key + "]");
789
790 if (language_ISO.back() == settings->language) {
791 language_lstb->select(i);
792 }
793
794 i++;
795 }
796 }
797 infile.close();
798 }
799
800 language_lstb->jumpToSelected();
801 }
802
803 void GameStateConfigBase::refreshFont() {
804 delete font;
805 font = getFontEngine();
806 delete comb;
807 comb = new CombatText();
808 }
809
810 void GameStateConfigBase::enableMods() {
811 for (int i=0; i<inactivemods_lstb->getSize(); i++) {
812 if (inactivemods_lstb->isSelected(i)) {
813 activemods_lstb->append(inactivemods_lstb->getValue(i),inactivemods_lstb->getTooltip(i));
814 inactivemods_lstb->remove(i);
815 i--;
816 }
817 }
818 }
819
820 void GameStateConfigBase::disableMods() {
821 for (int i=0; i<activemods_lstb->getSize(); i++) {
822 if (activemods_lstb->isSelected(i) && activemods_lstb->getValue(i) != mods->FALLBACK_MOD) {
823 inactivemods_lstb->append(activemods_lstb->getValue(i),activemods_lstb->getTooltip(i));
824 activemods_lstb->remove(i);
825 i--;
826 }
827 }
828 inactivemods_lstb->sort();
829 }
830
831 bool GameStateConfigBase::setMods() {
832 // Save new mods list and return true if modlist was changed. Else return false
833
834 std::vector<Mod> temp_list = mods->mod_list;
835 mods->mod_list.clear();
836 mods->mod_list.push_back(mods->loadMod(mods->FALLBACK_MOD));
837
838 for (int i=0; i<activemods_lstb->getSize(); i++) {
839 if (activemods_lstb->getValue(i) != "")
840 mods->mod_list.push_back(mods->loadMod(activemods_lstb->getValue(i)));
841 }
842
843 mods->applyDepends();
844
845 if (mods->mod_list != temp_list) {
846 mods->saveMods();
847 return true;
848 }
849 else {
850 return false;
851 }
852 }
853
854 std::string GameStateConfigBase::createModTooltip(Mod *mod) {
855 std::string ret = "";
856 if (mod) {
857 std::string mod_ver = (*mod->version == VersionInfo::MIN) ? "" : mod->version->getString();
858 std::string engine_ver = VersionInfo::createVersionReqString(*mod->engine_min_version, *mod->engine_max_version);
859
860 ret = mod->name + '\n';
861
862 std::string mod_description = mod->getLocaleDescription(settings->language);
863 if (!mod_description.empty()) {
864 ret += '\n';
865 ret += mod_description + '\n';
866 }
867
868 bool middle_section = false;
869 if (!mod_ver.empty()) {
870 middle_section = true;
871 ret += '\n';
872 ret += msg->get("Version:") + ' ' + mod_ver;
873 }
874 if (!mod->game.empty() && mod->game != mods->FALLBACK_GAME) {
875 middle_section = true;
876 ret += '\n';
877 ret += msg->get("Game:") + ' ' + mod->game;
878 }
879 if (!engine_ver.empty()) {
880 middle_section = true;
881 ret += '\n';
882 ret += msg->get("Engine version:") + ' ' + engine_ver;
883 }
884
885 if (middle_section)
886 ret += '\n';
887
888 if (!mod->depends.empty()) {
889 ret += '\n';
890 ret += msg->get("Requires mods:") + '\n';
891 for (size_t i=0; i<mod->depends.size(); ++i) {
892 ret += "- " + mod->depends[i];
893 std::string depend_ver = VersionInfo::createVersionReqString(*mod->depends_min[i], *mod->depends_max[i]);
894 if (depend_ver != "")
895 ret += " (" + depend_ver + ")";
896 if (i < mod->depends.size()-1)
897 ret += '\n';
898 }
899 }
900
901 if (!ret.empty() && ret[ret.size() - 1] == '\n')
902 ret.erase(ret.begin() + ret.size() - 1);
903 }
904 return ret;
905 }
906
907 void GameStateConfigBase::cleanup() {
908 if (background) {
909 delete background;
910 background = NULL;
911 }
912
913 if (tab_control != NULL) {
914 delete tab_control;
915 tab_control = NULL;
916 }
917
918 if (ok_button != NULL) {
919 delete ok_button;
920 ok_button = NULL;
921 }
922 if (defaults_button != NULL) {
923 delete defaults_button;
924 defaults_button = NULL;
925 }
926 if (cancel_button != NULL) {
927 delete cancel_button;
928 cancel_button = NULL;
929 }
930
931 cleanupTabContents();
932 cleanupDialogs();
933
934 language_ISO.clear();
935 }
936
937 void GameStateConfigBase::cleanupTabContents() {
938 for (std::vector<Widget*>::iterator iter = child_widget.begin(); iter != child_widget.end(); ++iter) {
939 if (*iter != NULL) {
940 delete (*iter);
941 *iter = NULL;
942 }
943 }
944 child_widget.clear();
945 }
946
947 void GameStateConfigBase::cleanupDialogs() {
948 if (defaults_confirm != NULL) {
949 delete defaults_confirm;
950 defaults_confirm = NULL;
951 }
952 }
953
+0
-153
src/GameStateConfigBase.h less more
0 /*
1 Copyright © 2012 Clint Bellanger
2 Copyright © 2012 davidriod
3 Copyright © 2012 Igor Paliychuk
4 Copyright © 2013 Kurt Rinnert
5 Copyright © 2014-2016 Justin Jacobs
6
7 This file is part of FLARE.
8
9 FLARE is free software: you can redistribute it and/or modify it under the terms
10 of the GNU General Public License as published by the Free Software Foundation,
11 either version 3 of the License, or (at your option) any later version.
12
13 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
15 PARTICULAR PURPOSE. See the GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License along with
18 FLARE. If not, see http://www.gnu.org/licenses/
19 */
20
21 /**
22 * GameStateConfigBase
23 *
24 * Handle game Settings Menu
25 */
26
27 #ifndef GAMESTATECONFIGBASE_H
28 #define GAMESTATECONFIGBASE_H
29
30 #include "CommonIncludes.h"
31 #include "GameState.h"
32 #include "TooltipData.h"
33 #include "Widget.h"
34
35 class FileParser;
36 class MenuConfirm;
37 class Mod;
38 class Widget;
39 class WidgetButton;
40 class WidgetCheckBox;
41 class WidgetLabel;
42 class WidgetListBox;
43 class WidgetSlider;
44 class WidgetTabControl;
45
46 class GameStateConfigBase : public GameState {
47 protected:
48
49 public:
50 short AUDIO_TAB;
51 short INTERFACE_TAB;
52 short MODS_TAB;
53
54 static const bool DO_INIT = true;
55
56 explicit GameStateConfigBase(bool do_init);
57 ~GameStateConfigBase();
58
59 virtual void init();
60 virtual void readConfig();
61 bool parseKeyButtons(FileParser &infile);
62 bool parseKey(FileParser &infile, int &x1, int &y1, int &x2, int &y2);
63 bool parseStub(FileParser &infile);
64 void addChildWidgets();
65 virtual void setupTabList();
66
67 virtual void update();
68 void updateAudio();
69 void updateInterface();
70 void updateMods();
71
72 virtual void logic();
73 virtual bool logicMain();
74 void logicDefaults();
75 virtual void logicAccept();
76 void logicCancel();
77 void logicAudio();
78 void logicInterface();
79 void logicMods();
80
81 void render();
82 virtual void renderTabContents();
83 virtual void renderDialogs();
84
85 void placeLabeledWidget(WidgetLabel* lb, Widget* w, int x1, int y1, int x2, int y2, std::string const& str, int justify = 0);
86 virtual void refreshWidgets();
87 void addChildWidget(Widget *w, int tab);
88 void refreshLanguages();
89 void refreshFont();
90
91 void enableMods();
92 void disableMods();
93 bool setMods();
94 std::string createModTooltip(Mod *mod);
95
96 void cleanup();
97 virtual void cleanupTabContents();
98 virtual void cleanupDialogs();
99
100 TabList tablist;
101 TabList tablist_main;
102 TabList tablist_audio;
103 TabList tablist_interface;
104 TabList tablist_mods;
105
106 std::vector<int> optiontab;
107 std::vector<Widget*> child_widget;
108 WidgetTabControl * tab_control;
109 WidgetButton * ok_button;
110 WidgetButton * defaults_button;
111 WidgetButton * cancel_button;
112 Sprite * background;
113
114 WidgetCheckBox * show_fps_cb;
115 WidgetLabel * show_fps_lb;
116 WidgetCheckBox * hardware_cursor_cb;
117 WidgetLabel * hardware_cursor_lb;
118 WidgetCheckBox * colorblind_cb;
119 WidgetLabel * colorblind_lb;
120 WidgetCheckBox * dev_mode_cb;
121 WidgetLabel * dev_mode_lb;
122 WidgetCheckBox * subtitles_cb;
123 WidgetLabel * subtitles_lb;
124 WidgetSlider * music_volume_sl;
125 WidgetLabel * music_volume_lb;
126 WidgetSlider * sound_volume_sl;
127 WidgetLabel * sound_volume_lb;
128 WidgetListBox * activemods_lstb;
129 WidgetLabel * activemods_lb;
130 WidgetListBox * inactivemods_lstb;
131 WidgetLabel * inactivemods_lb;
132 WidgetListBox * language_lstb;
133 WidgetLabel * language_lb;
134 WidgetButton * activemods_shiftup_btn;
135 WidgetButton * activemods_shiftdown_btn;
136 WidgetButton * activemods_deactivate_btn;
137 WidgetButton * inactivemods_activate_btn;
138
139 MenuConfirm * defaults_confirm;
140
141 int active_tab;
142
143 Point frame;
144 Point frame_offset;
145 Point tab_offset;
146 std::vector<std::string> language_ISO;
147
148 std::string new_render_device;
149 };
150
151 #endif
152
+0
-976
src/GameStateConfigDesktop.cpp less more
0 /*
1 Copyright © 2014-2016 Justin Jacobs
2
3 This file is part of FLARE.
4
5 FLARE is free software: you can redistribute it and/or modify it under the terms
6 of the GNU General Public License as published by the Free Software Foundation,
7 either version 3 of the License, or (at your option) any later version.
8
9 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
10 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
11 PARTICULAR PURPOSE. See the GNU General Public License for more details.
12
13 You should have received a copy of the GNU General Public License along with
14 FLARE. If not, see http://www.gnu.org/licenses/
15 */
16
17 /**
18 * GameStateConfigDesktop
19 *
20 * Handle game Settings Menu (desktop computer settings)
21 */
22
23 #include "CommonIncludes.h"
24 #include "DeviceList.h"
25 #include "FileParser.h"
26 #include "FontEngine.h"
27 #include "GameStateConfigBase.h"
28 #include "GameStateConfigDesktop.h"
29 #include "GameStateTitle.h"
30 #include "InputState.h"
31 #include "MenuConfirm.h"
32 #include "MessageEngine.h"
33 #include "RenderDevice.h"
34 #include "Settings.h"
35 #include "SharedResources.h"
36 #include "Stats.h"
37 #include "UtilsFileSystem.h"
38 #include "UtilsParsing.h"
39 #include "WidgetButton.h"
40 #include "WidgetCheckBox.h"
41 #include "WidgetListBox.h"
42 #include "WidgetScrollBox.h"
43 #include "WidgetSlider.h"
44 #include "WidgetTabControl.h"
45
46 #include <limits.h>
47 #include <iomanip>
48
49 GameStateConfigDesktop::GameStateConfigDesktop(bool _enable_video_tab)
50 : GameStateConfigBase(!GameStateConfigBase::DO_INIT)
51 , renderer_lstb(new WidgetListBox(4, WidgetListBox::DEFAULT_FILE))
52 , renderer_lb(new WidgetLabel())
53 , fullscreen_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
54 , fullscreen_lb(new WidgetLabel())
55 , hwsurface_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
56 , hwsurface_lb(new WidgetLabel())
57 , vsync_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
58 , vsync_lb(new WidgetLabel())
59 , texture_filter_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
60 , texture_filter_lb(new WidgetLabel())
61 , dpi_scaling_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
62 , dpi_scaling_lb(new WidgetLabel())
63 , parallax_layers_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
64 , parallax_layers_lb(new WidgetLabel())
65 , change_gamma_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
66 , change_gamma_lb(new WidgetLabel())
67 , gamma_sl(new WidgetSlider(WidgetSlider::DEFAULT_FILE))
68 , gamma_lb(new WidgetLabel())
69 , joystick_device_lstb(new WidgetListBox(10, WidgetListBox::DEFAULT_FILE))
70 , joystick_device_lb(new WidgetLabel())
71 , enable_joystick_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
72 , enable_joystick_lb(new WidgetLabel())
73 , mouse_move_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
74 , mouse_move_lb(new WidgetLabel())
75 , mouse_aim_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
76 , mouse_aim_lb(new WidgetLabel())
77 , no_mouse_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
78 , no_mouse_lb(new WidgetLabel())
79 , mouse_move_swap_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
80 , mouse_move_swap_lb(new WidgetLabel())
81 , mouse_move_attack_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
82 , mouse_move_attack_lb(new WidgetLabel())
83 , joystick_deadzone_sl(new WidgetSlider(WidgetSlider::DEFAULT_FILE))
84 , joystick_deadzone_lb(new WidgetLabel())
85 , input_scrollbox(NULL)
86 , input_confirm(new MenuConfirm(msg->get("Clear"),msg->get("Assign:")))
87 , input_confirm_timer(settings->max_frames_per_sec * 10) // 10 seconds
88 , input_key(0)
89 , key_count(0)
90 , scrollpane_contents(0)
91 , enable_video_tab(_enable_video_tab)
92 , keybind_tip_timer(settings->max_frames_per_sec * 5) // 5 seconds
93 , keybind_tip(new WidgetTooltip())
94 {
95 // Allocate KeyBindings
96 for (int i = 0; i < inpt->KEY_COUNT; i++) {
97 keybinds_lb.push_back(new WidgetLabel());
98 keybinds_lb[i]->setText(inpt->binding_name[i]);
99 keybinds_lb[i]->setJustify(FontEngine::JUSTIFY_RIGHT);
100 }
101 for (int i = 0; i < inpt->KEY_COUNT * 3; i++) {
102 keybinds_btn.push_back(new WidgetButton(WidgetButton::DEFAULT_FILE));
103 }
104
105 key_count = static_cast<unsigned>(keybinds_btn.size()/3);
106
107 init();
108 }
109
110 GameStateConfigDesktop::~GameStateConfigDesktop() {
111 }
112
113 void GameStateConfigDesktop::init() {
114 if (enable_video_tab) {
115 VIDEO_TAB = 0;
116 AUDIO_TAB = 1;
117 INTERFACE_TAB = 2;
118 INPUT_TAB = 3;
119 KEYBINDS_TAB = 4;
120 MODS_TAB = 5;
121 }
122 else {
123 AUDIO_TAB = 0;
124 INTERFACE_TAB = 1;
125 INPUT_TAB = 2;
126 KEYBINDS_TAB = 3;
127 MODS_TAB = 4;
128 }
129
130 if (enable_video_tab) {
131 tab_control->setTabTitle(VIDEO_TAB, msg->get("Video"));
132 }
133 tab_control->setTabTitle(AUDIO_TAB, msg->get("Audio"));
134 tab_control->setTabTitle(INTERFACE_TAB, msg->get("Interface"));
135 tab_control->setTabTitle(INPUT_TAB, msg->get("Input"));
136 tab_control->setTabTitle(KEYBINDS_TAB, msg->get("Keybindings"));
137 tab_control->setTabTitle(MODS_TAB, msg->get("Mods"));
138
139 readConfig();
140
141 // Allocate KeyBindings ScrollBox
142 input_scrollbox = new WidgetScrollBox(scrollpane.w, scrollpane.h);
143 input_scrollbox->setBasePos(scrollpane.x, scrollpane.y, Utils::ALIGN_TOPLEFT);
144 input_scrollbox->bg = scrollpane_color;
145 input_scrollbox->resize(scrollpane.w, scrollpane_contents);
146
147 // Set positions of secondary key bindings
148 for (unsigned int i = key_count; i < key_count*2; i++) {
149 keybinds_btn[i]->pos.x = keybinds_btn[i-key_count]->pos.x + secondary_offset.x;
150 keybinds_btn[i]->pos.y = keybinds_btn[i-key_count]->pos.y + secondary_offset.y;
151 }
152
153 // Set positions of joystick bindings
154 for (unsigned int i = key_count*2; i < keybinds_btn.size(); i++) {
155 keybinds_btn[i]->pos.x = keybinds_btn[i-(key_count*2)]->pos.x + (secondary_offset.x*2);
156 keybinds_btn[i]->pos.y = keybinds_btn[i-(key_count*2)]->pos.y + (secondary_offset.y*2);
157 }
158
159 addChildWidgets();
160 addChildWidgetsDesktop();
161 setupTabList();
162
163 refreshWidgets();
164
165 update();
166 }
167
168 void GameStateConfigDesktop::readConfig() {
169 FileParser infile;
170 if (infile.open("menus/config.txt", FileParser::MOD_FILE, FileParser::ERROR_NORMAL)) {
171 while (infile.next()) {
172 if (parseKeyButtons(infile))
173 continue;
174
175 int x1 = Parse::popFirstInt(infile.val);
176 int y1 = Parse::popFirstInt(infile.val);
177 int x2 = Parse::popFirstInt(infile.val);
178 int y2 = Parse::popFirstInt(infile.val);
179
180 if (parseKeyDesktop(infile, x1, y1, x2, y2))
181 continue;
182 else if (parseKey(infile, x1, y1, x2, y2))
183 continue;
184 else {
185 infile.error("GameStateConfigDesktop: '%s' is not a valid key.", infile.key.c_str());
186 }
187 }
188 infile.close();
189 }
190
191 hwsurface_cb->tooltip = msg->get("Will try to store surfaces in video memory versus system memory. The effect this has on performance depends on the renderer.");
192 vsync_cb->tooltip = msg->get("Prevents screen tearing. Disable if you experience \"stuttering\" in windowed mode or input lag.");
193 dpi_scaling_cb->tooltip = msg->get("When enabled, this uses the screen DPI in addition to the window dimensions to scale the rendering resolution. Otherwise, only the window dimensions are used.");
194 parallax_layers_cb->tooltip = msg->get("This enables parallax (non-tile) layers. Disabling this setting can improve performance in some cases.");
195 change_gamma_cb->tooltip = msg->get("Experimental");
196 no_mouse_cb->tooltip = msg->get("For handheld devices");
197 mouse_move_swap_cb->tooltip = msg->get("When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero instead of 'Main1'.");
198 mouse_move_attack_cb->tooltip = msg->get("When 'Move hero using mouse' is enabled, this setting controls if the Power assigned to the movement button can be used by targeting an enemy. If this setting is disabled, it is required to use 'Shift' to access the Power assigned to the movement button.");
199 }
200
201 bool GameStateConfigDesktop::parseKeyDesktop(FileParser &infile, int &x1, int &y1, int &x2, int &y2) {
202 // @CLASS GameStateConfigDesktop|Description of menus/config.txt
203
204 int keybind_num = -1;
205
206 if (infile.key == "listbox_scrollbar_offset") {
207 // overrides same key in GameStateConfigBase
208 renderer_lstb->scrollbar_offset = x1;
209 joystick_device_lstb->scrollbar_offset = x1;
210 activemods_lstb->scrollbar_offset = x1;
211 inactivemods_lstb->scrollbar_offset = x1;
212 language_lstb->scrollbar_offset = x1;
213 }
214 else if (infile.key == "renderer") {
215 // @ATTR renderer|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Renderer" list box relative to the frame.
216 placeLabeledWidget(renderer_lb, renderer_lstb, x1, y1, x2, y2, msg->get("Renderer"));
217
218 renderer_lstb->can_select = true;
219 renderer_lstb->multi_select = false;
220 renderer_lstb->can_deselect = false;
221
222 refreshRenderers();
223
224 renderer_lb->setJustify(FontEngine::JUSTIFY_CENTER);
225 }
226 else if (infile.key == "renderer_height") {
227 // @ATTR renderer_height|int|Number of visible rows for the "Renderer" list box.
228 renderer_lstb->setHeight(x1);
229 }
230 else if (infile.key == "fullscreen") {
231 // @ATTR fullscreen|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Full Screen Mode" checkbox relative to the frame.
232 placeLabeledWidget(fullscreen_lb, fullscreen_cb, x1, y1, x2, y2, msg->get("Full Screen Mode"), FontEngine::JUSTIFY_RIGHT);
233 }
234 else if (infile.key == "mouse_move") {
235 // @ATTR mouse_move|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Move hero using mouse" checkbox relative to the frame.
236 placeLabeledWidget(mouse_move_lb, mouse_move_cb, x1, y1, x2, y2, msg->get("Move hero using mouse"), FontEngine::JUSTIFY_RIGHT);
237 }
238 else if (infile.key == "hwsurface") {
239 // @ATTR hwsurface|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Hardware surfaces" checkbox relative to the frame.
240 placeLabeledWidget(hwsurface_lb, hwsurface_cb, x1, y1, x2, y2, msg->get("Hardware surfaces"), FontEngine::JUSTIFY_RIGHT);
241 }
242 else if (infile.key == "vsync") {
243 // @ATTR vsync|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "V-Sync" checkbox relative to the frame.
244 placeLabeledWidget(vsync_lb, vsync_cb, x1, y1, x2, y2, msg->get("V-Sync"), FontEngine::JUSTIFY_RIGHT);
245 }
246 else if (infile.key == "texture_filter") {
247 // @ATTR texture_filter|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Texture Filtering" checkbox relative to the frame.
248 placeLabeledWidget(texture_filter_lb, texture_filter_cb, x1, y1, x2, y2, msg->get("Texture Filtering"), FontEngine::JUSTIFY_RIGHT);
249 }
250 else if (infile.key == "dpi_scaling") {
251 // @ATTR dpi_scaling|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "DPI scaling" checkbox relative to the frame.
252 placeLabeledWidget(dpi_scaling_lb, dpi_scaling_cb, x1, y1, x2, y2, msg->get("DPI scaling"), FontEngine::JUSTIFY_RIGHT);
253 }
254 else if (infile.key == "parallax_layers") {
255 // @ATTR parallax_layers|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Parallax Layers" checkbox relative to the frame.
256 placeLabeledWidget(parallax_layers_lb, parallax_layers_cb, x1, y1, x2, y2, msg->get("Parallax Layers"), FontEngine::JUSTIFY_RIGHT);
257 }
258 else if (infile.key == "change_gamma") {
259 // @ATTR change_gamma|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Allow changing gamma" checkbox relative to the frame.
260 placeLabeledWidget(change_gamma_lb, change_gamma_cb, x1, y1, x2, y2, msg->get("Allow changing gamma"), FontEngine::JUSTIFY_RIGHT);
261 }
262 else if (infile.key == "gamma") {
263 // @ATTR gamma|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Gamma" slider relative to the frame.
264 placeLabeledWidget(gamma_lb, gamma_sl, x1, y1, x2, y2, msg->get("Gamma"), FontEngine::JUSTIFY_RIGHT);
265 }
266 else if (infile.key == "enable_joystick") {
267 // @ATTR enable_joystick|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Use joystick" checkbox relative to the frame.
268 placeLabeledWidget(enable_joystick_lb, enable_joystick_cb, x1, y1, x2, y2, msg->get("Use joystick"), FontEngine::JUSTIFY_RIGHT);
269 }
270 else if (infile.key == "joystick_device") {
271 // @ATTR joystick_device|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Joystick" list box relative to the frame.
272 placeLabeledWidget(joystick_device_lb, joystick_device_lstb, x1, y1, x2, y2, msg->get("Joystick"));
273
274 for(int i = 0; i < inpt->getNumJoysticks(); i++) {
275 std::string joystick_name = inpt->getJoystickName(i);
276 if (joystick_name != "")
277 joystick_device_lstb->append(joystick_name, joystick_name);
278 }
279
280 joystick_device_lb->setJustify(FontEngine::JUSTIFY_CENTER);
281 }
282 else if (infile.key == "joystick_device_height") {
283 // @ATTR joystick_device_height|int|Number of visible rows for the "Joystick" list box.
284 joystick_device_lstb->setHeight(x1);
285 }
286 else if (infile.key == "mouse_aim") {
287 // @ATTR mouse_aim|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Mouse aim" checkbox relative to the frame.
288 placeLabeledWidget(mouse_aim_lb, mouse_aim_cb, x1, y1, x2, y2, msg->get("Mouse aim"), FontEngine::JUSTIFY_RIGHT);
289 }
290 else if (infile.key == "no_mouse") {
291 // @ATTR no_mouse|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Do not use mouse" checkbox relative to the frame.
292 placeLabeledWidget(no_mouse_lb, no_mouse_cb, x1, y1, x2, y2, msg->get("Do not use mouse"), FontEngine::JUSTIFY_RIGHT);
293 }
294 else if (infile.key == "mouse_move_swap") {
295 // @ATTR mouse_move_swap|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Swap mouse movement button" checkbox relative to the frame.
296 placeLabeledWidget(mouse_move_swap_lb, mouse_move_swap_cb, x1, y1, x2, y2, msg->get("Swap mouse movement button"), FontEngine::JUSTIFY_RIGHT);
297 }
298 else if (infile.key == "mouse_move_attack") {
299 // @ATTR mouse_move_attack|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Attack with mouse movement" checkbox relative to the frame.
300 placeLabeledWidget(mouse_move_attack_lb, mouse_move_attack_cb, x1, y1, x2, y2, msg->get("Attack with mouse movement"), FontEngine::JUSTIFY_RIGHT);
301 }
302 else if (infile.key == "joystick_deadzone") {
303 // @ATTR joystick_deadzone|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Joystick Deadzone" slider relative to the frame.
304 placeLabeledWidget(joystick_deadzone_lb, joystick_deadzone_sl, x1, y1, x2, y2, msg->get("Joystick Deadzone"), FontEngine::JUSTIFY_RIGHT);
305 }
306 else if (infile.key == "secondary_offset") {
307 // @ATTR secondary_offset|point|Offset of the second (and third) columns of keybinds.
308 secondary_offset.x = x1;
309 secondary_offset.y = y1;
310 }
311 else if (infile.key == "keybinds_bg_color") {
312 // @ATTR keybinds_bg_color|color|Background color for the keybindings scrollbox.
313 scrollpane_color.r = static_cast<Uint8>(x1);
314 scrollpane_color.g = static_cast<Uint8>(y1);
315 scrollpane_color.b = static_cast<Uint8>(x2);
316 }
317 else if (infile.key == "keybinds_bg_alpha") {
318 // @ATTR keybinds_bg_alpha|int|Alpha value for the keybindings scrollbox background color.
319 scrollpane_color.a = static_cast<Uint8>(x1);
320 }
321 else if (infile.key == "scrollpane") {
322 // @ATTR scrollpane|rectangle|Position of the keybinding scrollbox relative to the frame.
323 scrollpane.x = x1;
324 scrollpane.y = y1;
325 scrollpane.w = x2;
326 scrollpane.h = y2;
327 }
328 else if (infile.key == "scrollpane_contents") {
329 // @ATTR scrollpane_contents|int|The vertical size of the keybinding scrollbox's contents.
330 scrollpane_contents = x1;
331 }
332
333 // @ATTR cancel|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Cancel" keybind relative to the keybinding scrollbox.
334 else if (infile.key == "cancel") keybind_num = Input::CANCEL;
335 // @ATTR accept|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Accept" keybind relative to the keybinding scrollbox.
336 else if (infile.key == "accept") keybind_num = Input::ACCEPT;
337 // @ATTR up|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Up" keybind relative to the keybinding scrollbox.
338 else if (infile.key == "up") keybind_num = Input::UP;
339 // @ATTR down|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Down" keybind relative to the keybinding scrollbox.
340 else if (infile.key == "down") keybind_num = Input::DOWN;
341 // @ATTR left|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Left" keybind relative to the keybinding scrollbox.
342 else if (infile.key == "left") keybind_num = Input::LEFT;
343 // @ATTR right|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Right" keybind relative to the keybinding scrollbox.
344 else if (infile.key == "right") keybind_num = Input::RIGHT;
345 // @ATTR bar1|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Bar1" keybind relative to the keybinding scrollbox.
346 else if (infile.key == "bar1") keybind_num = Input::BAR_1;
347 // @ATTR bar2|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Bar2" keybind relative to the keybinding scrollbox.
348 else if (infile.key == "bar2") keybind_num = Input::BAR_2;
349 // @ATTR bar3|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Bar3" keybind relative to the keybinding scrollbox.
350 else if (infile.key == "bar3") keybind_num = Input::BAR_3;
351 // @ATTR bar4|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Bar4" keybind relative to the keybinding scrollbox.
352 else if (infile.key == "bar4") keybind_num = Input::BAR_4;
353 // @ATTR bar5|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Bar5" keybind relative to the keybinding scrollbox.
354 else if (infile.key == "bar5") keybind_num = Input::BAR_5;
355 // @ATTR bar6|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Bar6" keybind relative to the keybinding scrollbox.
356 else if (infile.key == "bar6") keybind_num = Input::BAR_6;
357 // @ATTR bar7|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Bar7" keybind relative to the keybinding scrollbox.
358 else if (infile.key == "bar7") keybind_num = Input::BAR_7;
359 // @ATTR Bar8|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Bar8" keybind relative to the keybinding scrollbox.
360 else if (infile.key == "bar8") keybind_num = Input::BAR_8;
361 // @ATTR bar9|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Bar9" keybind relative to the keybinding scrollbox.
362 else if (infile.key == "bar9") keybind_num = Input::BAR_9;
363 // @ATTR bar0|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Bar0" keybind relative to the keybinding scrollbox.
364 else if (infile.key == "bar0") keybind_num = Input::BAR_0;
365 // @ATTR main1|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Main1" keybind relative to the keybinding scrollbox.
366 else if (infile.key == "main1") keybind_num = Input::MAIN1;
367 // @ATTR main2|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Main2" keybind relative to the keybinding scrollbox.
368 else if (infile.key == "main2") keybind_num = Input::MAIN2;
369 // @ATTR character|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Character" keybind relative to the keybinding scrollbox.
370 else if (infile.key == "character") keybind_num = Input::CHARACTER;
371 // @ATTR inventory|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Inventory" keybind relative to the keybinding scrollbox.
372 else if (infile.key == "inventory") keybind_num = Input::INVENTORY;
373 // @ATTR powers|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Powers" keybind relative to the keybinding scrollbox.
374 else if (infile.key == "powers") keybind_num = Input::POWERS;
375 // @ATTR log|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Log" keybind relative to the keybinding scrollbox.
376 else if (infile.key == "log") keybind_num = Input::LOG;
377 // @ATTR ctrl|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Ctrl" keybind relative to the keybinding scrollbox.
378 else if (infile.key == "ctrl") keybind_num = Input::CTRL;
379 // @ATTR shift|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Shift" keybind relative to the keybinding scrollbox.
380 else if (infile.key == "shift") keybind_num = Input::SHIFT;
381 // @ATTR alt|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Alt" keybind relative to the keybinding scrollbox.
382 else if (infile.key == "alt") keybind_num = Input::ALT;
383 // @ATTR delete|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Delete" keybind relative to the keybinding scrollbox.
384 else if (infile.key == "delete") keybind_num = Input::DEL;
385 // @ATTR actionbar|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "ActionBar Accept" keybind relative to the keybinding scrollbox.
386 else if (infile.key == "actionbar") keybind_num = Input::ACTIONBAR;
387 // @ATTR actionbar_back|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "ActionBar Left" keybind relative to the keybinding scrollbox.
388 else if (infile.key == "actionbar_back") keybind_num = Input::ACTIONBAR_BACK;
389 // @ATTR actionbar_forward|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "ActionBar Right" keybind relative to the keybinding scrollbox.
390 else if (infile.key == "actionbar_forward") keybind_num = Input::ACTIONBAR_FORWARD;
391 // @ATTR actionbar_use|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "ActionBar Use" keybind relative to the keybinding scrollbox.
392 else if (infile.key == "actionbar_use") keybind_num = Input::ACTIONBAR_USE;
393 // @ATTR developer_menu|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Developer Menu" keybind relative to the keybinding scrollbox.
394 else if (infile.key == "developer_menu") keybind_num = Input::DEVELOPER_MENU;
395
396 else return false;
397
398 if (keybind_num > -1 && static_cast<unsigned>(keybind_num) < keybinds_lb.size() && static_cast<unsigned>(keybind_num) < keybinds_btn.size()) {
399 //keybindings
400 keybinds_lb[keybind_num]->setPos(x1, y1);
401 keybinds_btn[keybind_num]->pos.x = x2;
402 keybinds_btn[keybind_num]->pos.y = y2;
403 }
404
405 return true;
406 }
407
408 void GameStateConfigDesktop::addChildWidgetsDesktop() {
409 if (enable_video_tab) {
410 addChildWidget(renderer_lstb, VIDEO_TAB);
411 addChildWidget(renderer_lb, VIDEO_TAB);
412 addChildWidget(fullscreen_cb, VIDEO_TAB);
413 addChildWidget(fullscreen_lb, VIDEO_TAB);
414 addChildWidget(hwsurface_cb, VIDEO_TAB);
415 addChildWidget(hwsurface_lb, VIDEO_TAB);
416 addChildWidget(vsync_cb, VIDEO_TAB);
417 addChildWidget(vsync_lb, VIDEO_TAB);
418 addChildWidget(texture_filter_cb, VIDEO_TAB);
419 addChildWidget(texture_filter_lb, VIDEO_TAB);
420 addChildWidget(dpi_scaling_cb, VIDEO_TAB);
421 addChildWidget(dpi_scaling_lb, VIDEO_TAB);
422 addChildWidget(parallax_layers_cb, VIDEO_TAB);
423 addChildWidget(parallax_layers_lb, VIDEO_TAB);
424 addChildWidget(change_gamma_cb, VIDEO_TAB);
425 addChildWidget(change_gamma_lb, VIDEO_TAB);
426 addChildWidget(gamma_sl, VIDEO_TAB);
427 addChildWidget(gamma_lb, VIDEO_TAB);
428 }
429
430 addChildWidget(mouse_move_cb, INPUT_TAB);
431 addChildWidget(mouse_move_lb, INPUT_TAB);
432 addChildWidget(enable_joystick_cb, INPUT_TAB);
433 addChildWidget(enable_joystick_lb, INPUT_TAB);
434 addChildWidget(mouse_aim_cb, INPUT_TAB);
435 addChildWidget(mouse_aim_lb, INPUT_TAB);
436 addChildWidget(no_mouse_cb, INPUT_TAB);
437 addChildWidget(no_mouse_lb, INPUT_TAB);
438 addChildWidget(mouse_move_swap_cb, INPUT_TAB);
439 addChildWidget(mouse_move_swap_lb, INPUT_TAB);
440 addChildWidget(mouse_move_attack_cb, INPUT_TAB);
441 addChildWidget(mouse_move_attack_lb, INPUT_TAB);
442 addChildWidget(joystick_deadzone_sl, INPUT_TAB);
443 addChildWidget(joystick_deadzone_lb, INPUT_TAB);
444 addChildWidget(joystick_device_lstb, INPUT_TAB);
445 addChildWidget(joystick_device_lb, INPUT_TAB);
446
447 for (unsigned int i = 0; i < keybinds_btn.size(); i++) {
448 input_scrollbox->addChildWidget(keybinds_btn[i]);
449 }
450 }
451
452 void GameStateConfigDesktop::setupTabList() {
453 tablist.add(tab_control);
454 tablist.setPrevTabList(&tablist_main);
455
456 tablist_main.add(ok_button);
457 tablist_main.add(defaults_button);
458 tablist_main.add(cancel_button);
459 tablist_main.setPrevTabList(&tablist);
460 tablist_main.setNextTabList(&tablist);
461 tablist_main.lock();
462
463 if (enable_video_tab) {
464 tablist_video.add(fullscreen_cb);
465 tablist_video.add(hwsurface_cb);
466 tablist_video.add(vsync_cb);
467 tablist_video.add(texture_filter_cb);
468 tablist_video.add(dpi_scaling_cb);
469 tablist_video.add(parallax_layers_cb);
470 tablist_video.add(change_gamma_cb);
471 tablist_video.add(gamma_sl);
472 tablist_video.add(renderer_lstb);
473 tablist_video.setPrevTabList(&tablist);
474 tablist_video.setNextTabList(&tablist_main);
475 tablist_video.lock();
476 }
477
478 tablist_audio.add(music_volume_sl);
479 tablist_audio.add(sound_volume_sl);
480 tablist_audio.setPrevTabList(&tablist);
481 tablist_audio.setNextTabList(&tablist_main);
482 tablist_audio.lock();
483
484 tablist_interface.add(show_fps_cb);
485 tablist_interface.add(colorblind_cb);
486 tablist_interface.add(hardware_cursor_cb);
487 tablist_interface.add(dev_mode_cb);
488 tablist_interface.add(language_lstb);
489 tablist_interface.setPrevTabList(&tablist);
490 tablist_interface.setNextTabList(&tablist_main);
491 tablist_interface.lock();
492
493 tablist_input.add(enable_joystick_cb);
494 tablist_input.add(mouse_move_cb);
495 tablist_input.add(mouse_aim_cb);
496 tablist_input.add(no_mouse_cb);
497 tablist_input.add(mouse_move_swap_cb);
498 tablist_input.add(mouse_move_attack_cb);
499 tablist_input.add(joystick_deadzone_sl);
500 tablist_input.add(joystick_device_lstb);
501 tablist_input.setPrevTabList(&tablist);
502 tablist_input.setNextTabList(&tablist_main);
503 tablist_input.lock();
504
505 tablist_keybinds.add(input_scrollbox);
506 tablist_keybinds.setPrevTabList(&tablist);
507 tablist_keybinds.setNextTabList(&tablist_main);
508 tablist_keybinds.lock();
509
510 tablist_mods.add(inactivemods_lstb);
511 tablist_mods.add(activemods_lstb);
512 tablist_mods.add(inactivemods_activate_btn);
513 tablist_mods.add(activemods_deactivate_btn);
514 tablist_mods.add(activemods_shiftup_btn);
515 tablist_mods.add(activemods_shiftdown_btn);
516 tablist_mods.setPrevTabList(&tablist);
517 tablist_mods.setNextTabList(&tablist_main);
518 tablist_mods.lock();
519 }
520
521 void GameStateConfigDesktop::update() {
522 GameStateConfigBase::update();
523
524 updateVideo();
525 updateInput();
526 updateKeybinds();
527 }
528
529 void GameStateConfigDesktop::updateVideo() {
530 fullscreen_cb->setChecked(settings->fullscreen);
531 hwsurface_cb->setChecked(settings->hwsurface);
532 vsync_cb->setChecked(settings->vsync);
533 texture_filter_cb->setChecked(settings->texture_filter);
534 dpi_scaling_cb->setChecked(settings->dpi_scaling);
535 parallax_layers_cb->setChecked(settings->parallax_layers);
536 change_gamma_cb->setChecked(settings->change_gamma);
537
538 if (settings->change_gamma) {
539 render_device->setGamma(settings->gamma);
540 }
541 else {
542 settings->gamma = 1.0;
543 gamma_sl->enabled = false;
544 render_device->resetGamma();
545 }
546 gamma_sl->set(GAMMA_MIN, GAMMA_MAX, static_cast<int>(settings->gamma * 10.0));
547
548 refreshRenderers();
549 }
550
551 void GameStateConfigDesktop::updateInput() {
552 enable_joystick_cb->setChecked(settings->enable_joystick);
553 mouse_aim_cb->setChecked(settings->mouse_aim);
554 no_mouse_cb->setChecked(settings->no_mouse);
555 mouse_move_cb->setChecked(settings->mouse_move);
556 mouse_move_swap_cb->setChecked(settings->mouse_move_swap);
557 mouse_move_attack_cb->setChecked(settings->mouse_move_attack);
558
559 if (settings->enable_joystick && inpt->getNumJoysticks() > 0) {
560 inpt->initJoystick();
561 joystick_device_lstb->select(settings->joystick_device);
562 }
563 joystick_device_lstb->jumpToSelected();
564
565 joystick_deadzone_sl->set(0, 32768, settings->joy_deadzone);
566 }
567
568 void GameStateConfigDesktop::updateKeybinds() {
569 // now do labels for keybinds that are set
570 for (unsigned int i = 0; i < key_count; i++) {
571 keybinds_btn[i]->setLabel(inpt->getBindingString(i));
572 keybinds_btn[i]->refresh();
573 }
574 for (unsigned int i = key_count; i < key_count*2; i++) {
575 keybinds_btn[i]->setLabel(inpt->getBindingString(i-key_count, InputState::BINDING_ALT));
576 keybinds_btn[i]->refresh();
577 }
578 for (unsigned int i = key_count*2; i < keybinds_btn.size(); i++) {
579 keybinds_btn[i]->setLabel(inpt->getBindingString(i-(key_count*2), InputState::BINDING_JOYSTICK));
580 keybinds_btn[i]->refresh();
581 }
582 input_scrollbox->refresh();
583 }
584
585 void GameStateConfigDesktop::logic() {
586 if (inpt->window_resized)
587 refreshWidgets();
588
589 if (defaults_confirm->visible) {
590 // reset defaults confirmation
591 logicDefaults();
592 return;
593 }
594 else if (input_confirm->visible) {
595 // assign a keybind
596 input_confirm->logic();
597 scanKey(input_key);
598 input_confirm_timer.tick();
599 if (input_confirm_timer.isEnd())
600 input_confirm->visible = false;
601 return;
602 }
603 else {
604 if (!logicMain())
605 return;
606 }
607
608 // tab contents
609 active_tab = tab_control->getActiveTab();
610
611 if (enable_video_tab && active_tab == VIDEO_TAB) {
612 tablist.setNextTabList(&tablist_video);
613 logicVideo();
614 }
615 else if (active_tab == AUDIO_TAB) {
616 tablist.setNextTabList(&tablist_audio);
617 logicAudio();
618 }
619 else if (active_tab == INTERFACE_TAB) {
620 tablist.setNextTabList(&tablist_interface);
621 logicInterface();
622 }
623 else if (active_tab == INPUT_TAB) {
624 tablist.setNextTabList(&tablist_input);
625 logicInput();
626 }
627 else if (active_tab == KEYBINDS_TAB) {
628 tablist.setNextTabList(&tablist_keybinds);
629 logicKeybinds();
630 }
631 else if (active_tab == MODS_TAB) {
632 tablist.setNextTabList(&tablist_mods);
633 logicMods();
634 }
635 }
636
637 bool GameStateConfigDesktop::logicMain() {
638 if (GameStateConfigBase::logicMain()) {
639 if (enable_video_tab) {
640 tablist_video.logic();
641 }
642 tablist_input.logic();
643 tablist_keybinds.logic();
644 return true;
645 }
646
647 return false;
648 }
649
650 void GameStateConfigDesktop::logicVideo() {
651 if (fullscreen_cb->checkClick()) {
652 settings->fullscreen = fullscreen_cb->isChecked();
653 }
654 else if (hwsurface_cb->checkClick()) {
655 settings->hwsurface = hwsurface_cb->isChecked();
656 }
657 else if (vsync_cb->checkClick()) {
658 settings->vsync = vsync_cb->isChecked();
659 }
660 else if (texture_filter_cb->checkClick()) {
661 settings->texture_filter = texture_filter_cb->isChecked();
662 }
663 else if (dpi_scaling_cb->checkClick()) {
664 settings->dpi_scaling = dpi_scaling_cb->isChecked();
665 render_device->windowResize();
666 refreshWidgets();
667 force_refresh_background = true;
668 }
669 else if (parallax_layers_cb->checkClick()) {
670 settings->parallax_layers = parallax_layers_cb->isChecked();
671 }
672 else if (change_gamma_cb->checkClick()) {
673 settings->change_gamma = change_gamma_cb->isChecked();
674 if (settings->change_gamma) {
675 gamma_sl->enabled = true;
676 }
677 else {
678 settings->gamma = 1.0;
679 gamma_sl->enabled = false;
680 gamma_sl->set(GAMMA_MIN, GAMMA_MAX, static_cast<int>(settings->gamma * 10.0));
681 render_device->resetGamma();
682 }
683 }
684 else if (gamma_sl->checkClick()) {
685 settings->gamma = static_cast<float>(gamma_sl->getValue()) * 0.1f;
686 render_device->setGamma(settings->gamma);
687 }
688 else if (renderer_lstb->checkClick()) {
689 new_render_device = renderer_lstb->getValue();
690 }
691 }
692
693 void GameStateConfigDesktop::logicInput() {
694 if (inpt->joysticks_changed) {
695 disableJoystickOptions();
696 joystick_device_lstb->clear();
697 for(int i = 0; i < inpt->getNumJoysticks(); i++) {
698 std::string joystick_name = inpt->getJoystickName(i);
699 if (joystick_name != "")
700 joystick_device_lstb->append(joystick_name, joystick_name);
701 }
702 inpt->joysticks_changed = false;
703 }
704
705 if (mouse_move_cb->checkClick()) {
706 if (mouse_move_cb->isChecked()) {
707 settings->mouse_move = true;
708 enableMouseOptions();
709 }
710 else settings->mouse_move=false;
711 }
712 else if (mouse_aim_cb->checkClick()) {
713 if (mouse_aim_cb->isChecked()) {
714 settings->mouse_aim = true;
715 enableMouseOptions();
716 }
717 else settings->mouse_aim=false;
718 }
719 else if (no_mouse_cb->checkClick()) {
720 if (no_mouse_cb->isChecked()) {
721 settings->no_mouse = true;
722 disableMouseOptions();
723 }
724 else settings->no_mouse = false;
725 }
726 else if (mouse_move_swap_cb->checkClick()) {
727 settings->mouse_move_swap = mouse_move_swap_cb->isChecked();
728 }
729 else if (mouse_move_attack_cb->checkClick()) {
730 settings->mouse_move_attack = mouse_move_attack_cb->isChecked();
731 }
732 else if (enable_joystick_cb->checkClick()) {
733 if (enable_joystick_cb->isChecked()) {
734 settings->enable_joystick = true;
735 if (inpt->getNumJoysticks() > 0) {
736 settings->joystick_device = 0;
737 inpt->initJoystick();
738 joystick_device_lstb->select(settings->joystick_device);
739 }
740
741 if (inpt->getNumJoysticks() > 0)
742 joystick_device_lstb->jumpToSelected();
743 }
744 else {
745 disableJoystickOptions();
746 }
747 }
748 else if (joystick_deadzone_sl->checkClick()) {
749 settings->joy_deadzone = joystick_deadzone_sl->getValue();
750 }
751 else if (joystick_device_lstb->checkClick()) {
752 settings->joystick_device = joystick_device_lstb->getSelected();
753 if (settings->joystick_device != -1) {
754 settings->enable_joystick = true;
755 if (inpt->getNumJoysticks() > 0) {
756 inpt->initJoystick();
757 }
758 }
759 else {
760 settings->enable_joystick = false;
761 }
762 enable_joystick_cb->setChecked(settings->enable_joystick);
763 }
764 }
765
766 void GameStateConfigDesktop::logicKeybinds() {
767 input_scrollbox->logic();
768 for (unsigned int i = 0; i < keybinds_btn.size(); i++) {
769 if (i >= static_cast<unsigned int>(inpt->KEY_COUNT * 2)) {
770 keybinds_btn[i]->enabled = settings->enable_joystick;
771 keybinds_btn[i]->refresh();
772 }
773 Point mouse = input_scrollbox->input_assist(inpt->mouse);
774 if (keybinds_btn[i]->checkClickAt(mouse.x,mouse.y)) {
775 std::string confirm_msg;
776 confirm_msg = msg->get("Assign:") + ' ' + inpt->binding_name[i%key_count];
777 delete input_confirm;
778 input_confirm = new MenuConfirm(msg->get("Clear"),confirm_msg);
779 input_confirm_timer.reset(Timer::BEGIN);
780 input_confirm->visible = true;
781 input_key = i;
782 inpt->last_button = -1;
783 inpt->last_key = -1;
784 inpt->last_joybutton = -1;
785 }
786 }
787 }
788
789 void GameStateConfigDesktop::renderTabContents() {
790 if (active_tab == KEYBINDS_TAB) {
791 if (input_scrollbox->update) {
792 input_scrollbox->refresh();
793 }
794 input_scrollbox->render();
795 for (unsigned int i = 0; i < keybinds_lb.size(); i++) {
796 keybinds_lb[i]->local_frame = input_scrollbox->pos;
797 keybinds_lb[i]->local_offset.y = input_scrollbox->getCursor();
798 keybinds_lb[i]->render();
799 }
800 }
801
802 for (unsigned int i = 0; i < child_widget.size(); i++) {
803 if (optiontab[i] == active_tab) child_widget[i]->render();
804 }
805 }
806
807 void GameStateConfigDesktop::renderDialogs() {
808 GameStateConfigBase::renderDialogs();
809
810 if (input_confirm->visible)
811 input_confirm->render();
812
813 if (active_tab == KEYBINDS_TAB && !keybind_msg.empty()) {
814 TooltipData keybind_tip_data;
815 keybind_tip_data.addText(keybind_msg);
816
817 if (keybind_tip_timer.isEnd())
818 keybind_tip_timer.reset(Timer::BEGIN);
819
820 keybind_tip_timer.tick();
821
822 if (!keybind_tip_timer.isEnd()) {
823 keybind_tip->render(keybind_tip_data, Point(settings->view_w, 0), TooltipData::STYLE_FLOAT);
824 }
825 else {
826 keybind_msg.clear();
827 }
828 }
829 else {
830 keybind_msg.clear();
831 keybind_tip_timer.reset(Timer::END);
832 }
833 }
834
835 void GameStateConfigDesktop::refreshWidgets() {
836 GameStateConfigBase::refreshWidgets();
837
838 input_scrollbox->setPos(frame.x, frame.y);
839
840 input_confirm->align();
841 }
842
843 void GameStateConfigDesktop::confirmKey(int button) {
844 inpt->pressing[button] = false;
845 inpt->lock[button] = false;
846
847 input_confirm->visible = false;
848 input_confirm_timer.reset(Timer::END);
849 keybind_tip_timer.reset(Timer::END);
850
851 updateKeybinds();
852 }
853
854 void GameStateConfigDesktop::scanKey(int button) {
855 int column = button / key_count;
856 int real_button = button % key_count;
857
858 // clear the keybind if the user clicks "Clear" in the dialog
859 if (input_confirm->visible && input_confirm->confirmClicked) {
860 inpt->setKeybind(-1, real_button, column, keybind_msg);
861 confirmKey(real_button);
862 return;
863 }
864
865 if (input_confirm->visible && !input_confirm->isWithinButtons) {
866 // keyboard & mouse
867 if (column == InputState::BINDING_DEFAULT || column == InputState::BINDING_ALT) {
868 if (inpt->last_button != -1) {
869 // mouse
870 inpt->setKeybind(inpt->last_button, real_button, column, keybind_msg);
871 confirmKey(real_button);
872 }
873 else if (inpt->last_key != -1) {
874 // keyboard
875 inpt->setKeybind(inpt->last_key, real_button, column, keybind_msg);
876 confirmKey(real_button);
877 }
878 }
879 // joystick
880 else if (column == InputState::BINDING_JOYSTICK && inpt->last_joybutton != -1) {
881 inpt->setKeybind(inpt->last_joybutton, real_button, column, keybind_msg);
882 confirmKey(real_button);
883 }
884 else if (column == InputState::BINDING_JOYSTICK && inpt->last_joyaxis != -1) {
885 inpt->setKeybind(inpt->last_joyaxis, real_button, column, keybind_msg);
886 confirmKey(real_button);
887 }
888 }
889 }
890
891 void GameStateConfigDesktop::cleanupTabContents() {
892 for (std::vector<Widget*>::iterator iter = child_widget.begin(); iter != child_widget.end(); ++iter) {
893 if (*iter != NULL) {
894 delete (*iter);
895 *iter = NULL;
896 }
897 }
898 child_widget.clear();
899
900 for (unsigned int i = 0; i < keybinds_lb.size(); i++) {
901 if (keybinds_lb[i] != NULL) {
902 delete keybinds_lb[i];
903 keybinds_lb[i] = NULL;
904 }
905 }
906 for (unsigned int i = 0; i < keybinds_btn.size(); i++) {
907 if (keybinds_btn[i] != NULL) {
908 delete keybinds_btn[i];
909 keybinds_btn[i] = NULL;
910 }
911 }
912
913 if (input_scrollbox != NULL) {
914 delete input_scrollbox;
915 input_scrollbox = NULL;
916 }
917 }
918
919 void GameStateConfigDesktop::cleanupDialogs() {
920 if (defaults_confirm != NULL) {
921 delete defaults_confirm;
922 defaults_confirm = NULL;
923 }
924 if (input_confirm != NULL) {
925 delete input_confirm;
926 input_confirm = NULL;
927 }
928 if (keybind_tip != NULL) {
929 delete keybind_tip;
930 keybind_tip = NULL;
931 }
932 }
933
934 void GameStateConfigDesktop::enableMouseOptions() {
935 settings->no_mouse = false;
936 no_mouse_cb->setChecked(settings->no_mouse);
937 }
938
939 void GameStateConfigDesktop::disableMouseOptions() {
940 settings->mouse_aim = false;
941 mouse_aim_cb->setChecked(settings->mouse_aim);
942
943 settings->mouse_move = false;
944 mouse_move_cb->setChecked(settings->mouse_move);
945
946 settings->no_mouse = true;
947 no_mouse_cb->setChecked(settings->no_mouse);
948 }
949
950 void GameStateConfigDesktop::disableJoystickOptions() {
951 settings->enable_joystick = false;
952 enable_joystick_cb->setChecked(settings->enable_joystick);
953
954 for (int i=0; i<joystick_device_lstb->getSize(); i++)
955 joystick_device_lstb->deselect(i);
956
957 if (inpt->getNumJoysticks() > 0)
958 joystick_device_lstb->refresh();
959 }
960
961 void GameStateConfigDesktop::refreshRenderers() {
962 renderer_lstb->clear();
963
964 std::vector<std::string> rd_name, rd_desc;
965 createRenderDeviceList(msg, rd_name, rd_desc);
966
967 for (size_t i = 0; i < rd_name.size(); ++i) {
968 renderer_lstb->append(rd_name[i], rd_desc[i]);
969 if (rd_name[i] == settings->render_device_name) {
970 renderer_lstb->select(static_cast<int>(i));
971 }
972 }
973
974 renderer_lstb->jumpToSelected();
975 }
+0
-156
src/GameStateConfigDesktop.h less more
0 /*
1 Copyright © 2014-2016 Justin Jacobs
2
3 This file is part of FLARE.
4
5 FLARE is free software: you can redistribute it and/or modify it under the terms
6 of the GNU General Public License as published by the Free Software Foundation,
7 either version 3 of the License, or (at your option) any later version.
8
9 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
10 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
11 PARTICULAR PURPOSE. See the GNU General Public License for more details.
12
13 You should have received a copy of the GNU General Public License along with
14 FLARE. If not, see http://www.gnu.org/licenses/
15 */
16
17 /**
18 * GameStateConfigDesktop
19 *
20 * Handle game Settings Menu (desktop computer settings)
21 */
22
23 #ifndef GAMESTATECONFIGDESKTOP_H
24 #define GAMESTATECONFIGDESKTOP_H
25
26 #include "CommonIncludes.h"
27 #include "GameState.h"
28 #include "GameStateConfigBase.h"
29 #include "Utils.h"
30
31 class FileParser;
32 class MenuConfirm;
33 class Widget;
34 class WidgetButton;
35 class WidgetCheckBox;
36 class WidgetInput;
37 class WidgetLabel;
38 class WidgetListBox;
39 class WidgetScrollBox;
40 class WidgetSlider;
41 class WidgetTabControl;
42
43 class GameStateConfigDesktop : public GameStateConfigBase {
44 public:
45 static const bool ENABLE_VIDEO_TAB = true;
46
47 explicit GameStateConfigDesktop(bool _enable_video_tab);
48 ~GameStateConfigDesktop();
49
50 private:
51 static const int GAMMA_MIN = 5;
52 static const int GAMMA_MAX = 15;
53
54 short VIDEO_TAB;
55 short INPUT_TAB;
56 short KEYBINDS_TAB;
57
58 void init();
59 void readConfig();
60 bool parseKeyDesktop(FileParser &infile, int &x1, int &y1, int &x2, int &y2);
61 void addChildWidgetsDesktop();
62 void setupTabList();
63
64 void update();
65 void updateVideo();
66 void updateInput();
67 void updateKeybinds();
68
69 void logic();
70 bool logicMain();
71 void logicVideo();
72 void logicInput();
73 void logicKeybinds();
74
75 void renderTabContents();
76 void renderDialogs();
77
78 void refreshWidgets();
79
80 void cleanupTabContents();
81 void cleanupDialogs();
82
83 TabList tablist_video;
84 TabList tablist_input;
85 TabList tablist_keybinds;
86
87 void confirmKey(int button);
88 void scanKey(int button);
89
90 void enableMouseOptions();
91 void disableMouseOptions();
92 void disableJoystickOptions();
93 void refreshRenderers();
94
95 WidgetListBox * renderer_lstb;
96 WidgetLabel * renderer_lb;
97 WidgetCheckBox * fullscreen_cb;
98 WidgetLabel * fullscreen_lb;
99 WidgetCheckBox * hwsurface_cb;
100 WidgetLabel * hwsurface_lb;
101 WidgetCheckBox * vsync_cb;
102 WidgetLabel * vsync_lb;
103 WidgetCheckBox * texture_filter_cb;
104 WidgetLabel * texture_filter_lb;
105 WidgetCheckBox * dpi_scaling_cb;
106 WidgetLabel * dpi_scaling_lb;
107 WidgetCheckBox * parallax_layers_cb;
108 WidgetLabel * parallax_layers_lb;
109 WidgetCheckBox * change_gamma_cb;
110 WidgetLabel * change_gamma_lb;
111 WidgetSlider * gamma_sl;
112 WidgetLabel * gamma_lb;
113 WidgetListBox * joystick_device_lstb;
114 WidgetLabel * joystick_device_lb;
115 WidgetCheckBox * enable_joystick_cb;
116 WidgetLabel * enable_joystick_lb;
117 WidgetCheckBox * mouse_move_cb;
118 WidgetLabel * mouse_move_lb;
119 WidgetCheckBox * mouse_aim_cb;
120 WidgetLabel * mouse_aim_lb;
121 WidgetCheckBox * no_mouse_cb;
122 WidgetLabel * no_mouse_lb;
123 WidgetCheckBox * mouse_move_swap_cb;
124 WidgetLabel * mouse_move_swap_lb;
125 WidgetCheckBox * mouse_move_attack_cb;
126 WidgetLabel * mouse_move_attack_lb;
127 WidgetSlider * joystick_deadzone_sl;
128 WidgetLabel * joystick_deadzone_lb;
129
130 std::vector<Rect> video_modes;
131
132 std::vector<WidgetLabel *> keybinds_lb;
133 std::vector<WidgetButton *> keybinds_btn;
134
135 WidgetScrollBox * input_scrollbox;
136 MenuConfirm * input_confirm;
137
138 Timer input_confirm_timer;
139 int input_key;
140 unsigned key_count;
141
142 Rect scrollpane;
143 Color scrollpane_color;
144 int scrollpane_contents;
145 Point secondary_offset;
146
147 bool enable_video_tab;
148
149 std::string keybind_msg;
150 Timer keybind_tip_timer;
151 WidgetTooltip* keybind_tip;
152 };
153
154 #endif
155
7676 , scroll_offset(0)
7777 , has_scroll_bar(false)
7878 , game_slot_max(4)
79 , text_trim_boundary(0) {
79 , text_trim_boundary(0)
80 , portrait_align(Utils::ALIGN_FRAME_TOPLEFT)
81 , gameslot_align(Utils::ALIGN_FRAME_TOPLEFT) {
8082
8183 if (items == NULL)
8284 items = new ItemManager();
108110 tablist.ignore_no_mouse = true;
109111 tablist.add(button_exit);
110112 tablist.add(button_new);
113
114 // Some widgets default to being aligned to the menu frame
115 button_new->alignment = Utils::ALIGN_FRAME_TOPLEFT;
116 button_load->alignment = Utils::ALIGN_FRAME_TOPLEFT;
117 button_delete->alignment = Utils::ALIGN_FRAME_TOPLEFT;
111118
112119 // Read positions from config file
113120 FileParser infile;
119126 if (infile.key == "button_new") {
120127 int x = Parse::popFirstInt(infile.val);
121128 int y = Parse::popFirstInt(infile.val);
122 int a = Parse::toAlignment(Parse::popFirstString(infile.val));
129 int a = Parse::toAlignment(Parse::popFirstString(infile.val), Utils::ALIGN_FRAME_TOPLEFT);
123130 button_new->setBasePos(x, y, a);
124131 }
125132 // @ATTR button_load|int, int, alignment : X, Y, Alignment|Position of the "Load Game" button.
126133 else if (infile.key == "button_load") {
127134 int x = Parse::popFirstInt(infile.val);
128135 int y = Parse::popFirstInt(infile.val);
129 int a = Parse::toAlignment(Parse::popFirstString(infile.val));
136 int a = Parse::toAlignment(Parse::popFirstString(infile.val), Utils::ALIGN_FRAME_TOPLEFT);
130137 button_load->setBasePos(x, y, a);
131138 }
132139 // @ATTR button_delete|int, int, alignment : X, Y, Alignment|Position of the "Delete Save" button.
133140 else if (infile.key == "button_delete") {
134141 int x = Parse::popFirstInt(infile.val);
135142 int y = Parse::popFirstInt(infile.val);
136 int a = Parse::toAlignment(Parse::popFirstString(infile.val));
143 int a = Parse::toAlignment(Parse::popFirstString(infile.val), Utils::ALIGN_FRAME_TOPLEFT);
137144 button_delete->setBasePos(x, y, a);
138145 }
139146 // @ATTR button_exit|int, int, alignment : X, Y, Alignment|Position of the "Exit to Title" button.
249256 graphics = render_device->loadImage("images/menus/portrait_border.png", RenderDevice::ERROR_NORMAL);
250257 if (graphics) {
251258 portrait_border = graphics->createSprite();
259 portrait_border->setClip(0, 0, portrait_dest.w, portrait_dest.h);
252260 graphics->unref();
253261 }
254262 }
395403 }
396404
397405 for (unsigned int i=0; i<slot->equipped.size(); i++) {
398 if (static_cast<unsigned>(slot->equipped[i]) > items->items.size()-1) {
399 Utils::logError("GameStateLoad: Item in save slot %d with id=%d is out of bounds 1-%d. Your savegame is broken or you might be using an incompatible savegame/mod", slot->id, slot->equipped[i], static_cast<int>(items->items.size())-1);
406 if (slot->equipped[i] != 0 && !items->items[slot->equipped[i]].has_name) {
407 Utils::logError("GameStateLoad: Item in save slot %d with id=%d is unknown. Your savegame is broken or you might be using an incompatible savegame/mod", slot->id, slot->equipped[i]);
400408 continue;
401409 }
402410
403 if (slot->equipped[i] > 0 && !preview_layer.empty() && static_cast<unsigned>(slot->equipped[i]) < items->items.size()) {
411 if (slot->equipped[i] > 0 && !preview_layer.empty()) {
404412 std::vector<std::string>::iterator found = find(preview_layer.begin(), preview_layer.end(), items->items[slot->equipped[i]].type);
405413 if (found != preview_layer.end())
406414 img_gfx[distance(preview_layer.begin(), found)] = items->items[slot->equipped[i]].gfx;
613621
614622 void GameStateLoad::refreshWidgets() {
615623 button_exit->setPos(0, 0);
616 button_new->setPos((settings->view_w - eset->resolutions.frame_w)/2, (settings->view_h - eset->resolutions.frame_h)/2);
617 button_load->setPos((settings->view_w - eset->resolutions.frame_w)/2, (settings->view_h - eset->resolutions.frame_h)/2);
618 button_delete->setPos((settings->view_w - eset->resolutions.frame_w)/2, (settings->view_h - eset->resolutions.frame_h)/2);
624 button_new->setPos(0, 0);
625 button_load->setPos(0, 0);
626 button_delete->setPos(0, 0);
619627
620628 if (portrait) {
621 portrait->setDest(portrait_dest.x + ((settings->view_w - eset->resolutions.frame_w)/2), portrait_dest.y + ((settings->view_h - eset->resolutions.frame_h)/2));
629 Rect portrait_rect = portrait_dest;
630 Utils::alignToScreenEdge(portrait_align, &portrait_rect);
631 portrait->setDest(portrait_rect.x, portrait_rect.y);
622632 }
623633
624634 slot_pos.resize(visible_slots);
625635 for (size_t i=0; i<slot_pos.size(); i++) {
626 slot_pos[i].x = gameslot_pos.x + (settings->view_w - eset->resolutions.frame_w)/2;
636 slot_pos[i].x = gameslot_pos.x;
627637 slot_pos[i].h = gameslot_pos.h;
628 slot_pos[i].y = gameslot_pos.y + (settings->view_h - eset->resolutions.frame_h)/2 + (static_cast<int>(i) * gameslot_pos.h);
638 slot_pos[i].y = gameslot_pos.y + (static_cast<int>(i) * gameslot_pos.h);
629639 slot_pos[i].w = gameslot_pos.w;
640 Utils::alignToScreenEdge(gameslot_align, &slot_pos[i]);
630641 }
631642
632643 refreshScrollBar();
124124 bool has_scroll_bar;
125125 int game_slot_max;
126126 int text_trim_boundary;
127 int portrait_align;
128 int gameslot_align;
127129
128130 public:
129131 GameStateLoad();
5353 , portrait_image(NULL)
5454 , portrait_border(NULL)
5555 , show_classlist(true)
56 , show_randomize(true)
5657 , modified_name(false)
5758 , delete_items(true)
5859 , random_option(false)
103104 label_classlist->setText(msg->get("Choose a Class"));
104105 label_classlist->setColor(font->getColor(FontEngine::COLOR_MENU_NORMAL));
105106
107 // Some widgets default to being aligned to the menu frame
108 button_prev->alignment = Utils::ALIGN_FRAME_TOPLEFT;
109 button_next->alignment = Utils::ALIGN_FRAME_TOPLEFT;
110 button_permadeath->alignment = Utils::ALIGN_FRAME_TOPLEFT;
111 button_randomize->alignment = Utils::ALIGN_FRAME_TOPLEFT;
112 input_name->alignment = Utils::ALIGN_FRAME_TOPLEFT;
113 class_list->alignment = Utils::ALIGN_FRAME_TOPLEFT;
114
106115 // Read positions from config file
107116 FileParser infile;
108117
113122 if (infile.key == "button_prev") {
114123 int x = Parse::popFirstInt(infile.val);
115124 int y = Parse::popFirstInt(infile.val);
116 int a = Parse::toAlignment(Parse::popFirstString(infile.val));
125 int a = Parse::toAlignment(Parse::popFirstString(infile.val), Utils::ALIGN_FRAME_TOPLEFT);
117126 button_prev->setBasePos(x, y, a);
118127 }
119128 // @ATTR button_next|int, int, alignment : X, Y, Alignment|Position of button to choose the next preset hero.
120129 else if (infile.key == "button_next") {
121130 int x = Parse::popFirstInt(infile.val);
122131 int y = Parse::popFirstInt(infile.val);
123 int a = Parse::toAlignment(Parse::popFirstString(infile.val));
132 int a = Parse::toAlignment(Parse::popFirstString(infile.val), Utils::ALIGN_FRAME_TOPLEFT);
124133 button_next->setBasePos(x, y, a);
125134 }
126135 // @ATTR button_exit|int, int, alignment : X, Y, Alignment|Position of "Cancel" button.
141150 else if (infile.key == "button_permadeath") {
142151 int x = Parse::popFirstInt(infile.val);
143152 int y = Parse::popFirstInt(infile.val);
144 int a = Parse::toAlignment(Parse::popFirstString(infile.val));
153 int a = Parse::toAlignment(Parse::popFirstString(infile.val), Utils::ALIGN_FRAME_TOPLEFT);
145154 button_permadeath->setBasePos(x, y, a);
146155 }
147 // @ATTR bytton_randomize|int, int, alignment : X, Y, Alignment|Position of the "Randomize" button.
156 // @ATTR button_randomize|int, int, alignment : X, Y, Alignment|Position of the "Randomize" button.
148157 else if (infile.key == "button_randomize") {
149158 int x = Parse::popFirstInt(infile.val);
150159 int y = Parse::popFirstInt(infile.val);
151 int a = Parse::toAlignment(Parse::popFirstString(infile.val));
160 int a = Parse::toAlignment(Parse::popFirstString(infile.val), Utils::ALIGN_FRAME_TOPLEFT);
152161 button_randomize->setBasePos(x, y, a);
153162 }
154163 // @ATTR name_input|int, int, alignment : X, Y, Alignment|Position of the hero name textbox.
155164 else if (infile.key == "name_input") {
156165 int x = Parse::popFirstInt(infile.val);
157166 int y = Parse::popFirstInt(infile.val);
158 int a = Parse::toAlignment(Parse::popFirstString(infile.val));
167 int a = Parse::toAlignment(Parse::popFirstString(infile.val), Utils::ALIGN_FRAME_TOPLEFT);
159168 input_name->setBasePos(x, y, a);
160169 }
161170 // @ATTR portrait_label|label|Label for the "Choose a Portrait" text.
186195 else if (infile.key == "class_list") {
187196 int x = Parse::popFirstInt(infile.val);
188197 int y = Parse::popFirstInt(infile.val);
189 int a = Parse::toAlignment(Parse::popFirstString(infile.val));
198 int a = Parse::toAlignment(Parse::popFirstString(infile.val), Utils::ALIGN_FRAME_TOPLEFT);
190199 class_list->setBasePos(x, y, a);
191200 }
192201 // @ATTR show_classlist|bool|Allows hiding the class list.
193202 else if (infile.key == "show_classlist") {
194203 show_classlist = Parse::toBool(infile.val);
204 }
205 // @ATTR show_randomize|bool|Toggles the visibility of the "Randomize" button.
206 else if (infile.key == "show_randomize") {
207 show_randomize = Parse::toBool(infile.val);
195208 }
196209 // @ATTR random_option|bool|Initially picks a random character option (aka portrait/name).
197210 else if (infile.key == "random_option") {
235248 tablist.add(button_create);
236249 tablist.add(input_name);
237250 tablist.add(button_permadeath);
238 tablist.add(button_randomize);
251 if (show_randomize) {
252 tablist.add(button_randomize);
253 }
239254 tablist.add(button_prev);
240255 tablist.add(button_next);
241 tablist.add(class_list);
256 if (show_classlist) {
257 tablist.add(class_list);
258 }
242259
243260 refreshWidgets();
244261
440457 setHeroOption(OPTION_PREV);
441458 }
442459
443 if (button_randomize->checkClick()) {
460 if (show_randomize && button_randomize->checkClick()) {
444461 if (!eset->hero_classes.list.empty()) {
445462 int class_index = static_cast<int>(rand() % eset->hero_classes.list.size());
446463 class_list->select(class_index);
456473 button_exit->setPos(0, 0);
457474 button_create->setPos(0, 0);
458475
459 button_prev->setPos((settings->view_w - eset->resolutions.frame_w)/2, (settings->view_h - eset->resolutions.frame_h)/2);
460 button_next->setPos((settings->view_w - eset->resolutions.frame_w)/2, (settings->view_h - eset->resolutions.frame_h)/2);
461 button_permadeath->setPos((settings->view_w - eset->resolutions.frame_w)/2, (settings->view_h - eset->resolutions.frame_h)/2);
462 button_randomize->setPos((settings->view_w - eset->resolutions.frame_w)/2, (settings->view_h - eset->resolutions.frame_h)/2);
463 class_list->setPos((settings->view_w - eset->resolutions.frame_w)/2, (settings->view_h - eset->resolutions.frame_h)/2);
476 button_prev->setPos(0, 0);
477 button_next->setPos(0, 0);
478 button_permadeath->setPos(0, 0);
479 button_randomize->setPos(0, 0);
480 class_list->setPos(0, 0);
464481
465482 label_portrait->setPos((settings->view_w - eset->resolutions.frame_w)/2, (settings->view_h - eset->resolutions.frame_h)/2);
466483 label_name->setPos((settings->view_w - eset->resolutions.frame_w)/2, (settings->view_h - eset->resolutions.frame_h)/2);
467484 label_permadeath->setPos((settings->view_w - eset->resolutions.frame_w)/2, (settings->view_h - eset->resolutions.frame_h)/2);
468485 label_classlist->setPos((settings->view_w - eset->resolutions.frame_w)/2, (settings->view_h - eset->resolutions.frame_h)/2);
469486
470 input_name->setPos((settings->view_w - eset->resolutions.frame_w)/2, (settings->view_h - eset->resolutions.frame_h)/2);
487 input_name->setPos(0, 0);
471488 }
472489
473490 void GameStateNew::render() {
479496 button_next->render();
480497 input_name->render();
481498 button_permadeath->render();
482 button_randomize->render();
499
500 if (show_randomize) {
501 button_randomize->render();
502 }
483503
484504 // display portrait option
485505 Rect src;
8686
8787 Rect portrait_pos;
8888 bool show_classlist;
89 bool show_randomize;
8990 bool modified_name;
9091 bool delete_items;
9192 bool random_option;
3030 #include "CampaignManager.h"
3131 #include "CombatText.h"
3232 #include "CursorManager.h"
33 #include "Enemy.h"
3433 #include "EnemyGroupManager.h"
35 #include "EnemyManager.h"
34 #include "Entity.h"
35 #include "EntityManager.h"
3636 #include "EngineSettings.h"
3737 #include "FileParser.h"
3838 #include "GameState.h"
9898 powers = new PowerManager();
9999 mapr = new MapRenderer();
100100 pc = new Avatar();
101 enemym = new EnemyManager();
101 entitym = new EntityManager();
102102 enemyg = new EnemyGroupManager();
103103 hazards = new HazardManager();
104104 menu = new MenuManager();
119119 * Reset all game states to a new game.
120120 */
121121 void GameStatePlay::resetGame() {
122 mapr->load("maps/spawn.txt");
123 setLoadingFrame();
124122 camp->resetAllStatuses();
125123 pc->init();
126124 pc->stats.currency = 0;
127 menu->act->clear();
125 menu->act->clear(!MenuActionBar::CLEAR_SKIP_ITEMS);
128126 menu->inv->inventory[0].clear();
129127 menu->inv->inventory[1].clear();
130128 menu->inv->changed_equipment = true;
137135 menu->talker->setHero(pc->stats);
138136 pc->loadSounds();
139137
140 mapr->executeOnLoadEvents();
138 mapr->teleportation = true;
139 mapr->teleport_mapname = "maps/spawn.txt";
141140 }
142141
143142 /**
167166 enemy = hazards->last_enemy;
168167 }
169168 else {
170 enemy = enemym->getNearestEnemy(pc->stats.pos, !EnemyManager::GET_CORPSE, NULL, eset->misc.interact_range);
169 enemy = entitym->getNearestEntity(pc->stats.pos, !EntityManager::GET_CORPSE, NULL, eset->misc.interact_range);
171170 }
172171 }
173172 else {
176175 hazards->last_enemy = NULL;
177176 }
178177 else {
179 enemy = enemym->enemyFocus(inpt->mouse, mapr->cam, EnemyManager::IS_ALIVE);
180 if (enemy)
178 enemy = entitym->entityFocus(inpt->mouse, mapr->cam.pos, EntityManager::IS_ALIVE);
179 if (enemy) {
181180 curs->setCursor(CursorManager::CURSOR_ATTACK);
182 src_pos = Utils::screenToMap(inpt->mouse.x, inpt->mouse.y, mapr->cam.x, mapr->cam.y);
181 }
182 src_pos = Utils::screenToMap(inpt->mouse.x, inpt->mouse.y, mapr->cam.pos.x, mapr->cam.pos.y);
183183
184184 }
185185 }
193193 }
194194 else if (inpt->usingMouse()) {
195195 // if we're using a mouse and we didn't select an enemy, try selecting a dead one instead
196 Enemy *temp_enemy = enemym->enemyFocus(inpt->mouse, mapr->cam, !EnemyManager::IS_ALIVE);
196 Entity *temp_enemy = entitym->entityFocus(inpt->mouse, mapr->cam.pos, !EntityManager::IS_ALIVE);
197197 if (temp_enemy) {
198198 pc->stats.target_corpse = &(temp_enemy->stats);
199199 menu->enemy->enemy = temp_enemy;
210210 }
211211
212212 // save the positions of the nearest enemies for powers that use "target_nearest"
213 Enemy *nearest = enemym->getNearestEnemy(src_pos, !EnemyManager::GET_CORPSE, &(pc->stats.target_nearest_dist), eset->misc.interact_range);
213 Entity *nearest = entitym->getNearestEntity(src_pos, !EntityManager::GET_CORPSE, &(pc->stats.target_nearest_dist), eset->misc.interact_range);
214214 if (nearest)
215215 pc->stats.target_nearest = &(nearest->stats);
216 Enemy *nearest_corpse = enemym->getNearestEnemy(src_pos, EnemyManager::GET_CORPSE, &(pc->stats.target_nearest_corpse_dist), eset->misc.interact_range);
216 Entity *nearest_corpse = entitym->getNearestEntity(src_pos, EntityManager::GET_CORPSE, &(pc->stats.target_nearest_corpse_dist), eset->misc.interact_range);
217217 if (nearest_corpse)
218218 pc->stats.target_nearest_corpse = &(nearest_corpse->stats);
219 }
220
221 /**
222 * Similar to the above checkEnemyFocus(), but handles NPCManager instead
223 */
224 void GameStatePlay::checkNPCFocus() {
225 Entity *focus_npc;
226
227 if (!inpt->usingMouse() && (!menu->enemy->enemy || (menu->enemy->enemy && menu->enemy->enemy->stats.hero_ally))) {
228 // TODO bug? If mixed monster allies and npc allies, npc allies will always be highlighted, regardless of distance to player
229 focus_npc = npcs->getNearestNPC(pc->stats.pos);
230 }
231 else {
232 focus_npc = npcs->npcFocus(inpt->mouse, mapr->cam.pos, true);
233 }
234
235 if (focus_npc) {
236 // set the actual menu with the npc selected above
237 if (!focus_npc->stats.suppress_hp) {
238 menu->enemy->enemy = focus_npc;
239 menu->enemy->timeout.reset(Timer::BEGIN);
240 }
241 }
242 else if (inpt->usingMouse()) {
243 // if we're using a mouse and we didn't select an npc, try selecting a dead one instead
244 Entity *temp_npc = npcs->npcFocus(inpt->mouse, mapr->cam.pos, false);
245 if (temp_npc) {
246 menu->enemy->enemy = temp_npc;
247 menu->enemy->timeout.reset(Timer::BEGIN);
248 }
249 }
219250 }
220251
221252 /**
257288
258289 // Normal pickups
259290 if (!pc->using_main1) {
260 pickup = loot->checkPickup(inpt->mouse, mapr->cam, pc->stats.pos);
291 pickup = loot->checkPickup(inpt->mouse, mapr->cam.pos, pc->stats.pos);
261292 }
262293
263294 if (!pickup.empty()) {
282313 // during intermap teleport, we set the camera to the player position
283314 pc->stats.pos.x = mapr->teleport_destination.x;
284315 pc->stats.pos.y = mapr->teleport_destination.y;
316 pc->teleport_camera_lock = true;
285317 }
286318 else {
287319 pc->stats.pos.x = pc->stats.teleport_destination.x;
289321 }
290322
291323 // if we're not changing map, move allies to a the player's new position
292 // when changing maps, enemym->handleNewMap() does something similar to this
324 // when changing maps, entitym->handleNewMap() does something similar to this
293325 if (mapr->teleport_mapname.empty()) {
294326 FPoint spawn_pos = mapr->collider.getRandomNeighbor(Point(pc->stats.pos), 1, !MapCollision::IGNORE_BLOCKED);
295 for (unsigned int i=0; i < enemym->enemies.size(); i++) {
296 if(enemym->enemies[i]->stats.hero_ally && enemym->enemies[i]->stats.alive) {
297 mapr->collider.unblock(enemym->enemies[i]->stats.pos.x, enemym->enemies[i]->stats.pos.y);
298 enemym->enemies[i]->stats.pos = spawn_pos;
299 mapr->collider.block(enemym->enemies[i]->stats.pos.x, enemym->enemies[i]->stats.pos.y, MapCollision::IS_ALLY);
327 for (unsigned int i=0; i < entitym->entities.size(); i++) {
328 if(entitym->entities[i]->stats.hero_ally && entitym->entities[i]->stats.alive) {
329 mapr->collider.unblock(entitym->entities[i]->stats.pos.x, entitym->entities[i]->stats.pos.y);
330 entitym->entities[i]->stats.pos = spawn_pos;
331 mapr->collider.block(entitym->entities[i]->stats.pos.x, entitym->entities[i]->stats.pos.y, MapCollision::IS_ALLY);
300332 }
301333 }
302334 }
303335
304336 // process intermap teleport
305337 if (mapr->teleportation && !mapr->teleport_mapname.empty()) {
306 mapr->cam.x = pc->stats.pos.x;
307 mapr->cam.y = pc->stats.pos.y;
338 mapr->cam.warpTo(pc->stats.pos);
308339 std::string teleport_mapname = mapr->teleport_mapname;
309340 mapr->teleport_mapname = "";
310341 inpt->lock_all = (teleport_mapname == "maps/spawn.txt");
315346
316347 // use the default hero spawn position for this map
317348 if (mapr->teleport_destination.x == -1 && mapr->teleport_destination.y == -1) {
318 mapr->cam.x = pc->stats.pos.x = mapr->hero_pos.x;
319 mapr->cam.y = pc->stats.pos.y = mapr->hero_pos.y;
349 pc->stats.pos.x = mapr->hero_pos.x;
350 pc->stats.pos.y = mapr->hero_pos.y;
351 mapr->cam.warpTo(pc->stats.pos);
320352 }
321353
322354 // store this as the new respawn point (provided the tile is open)
343375 on_load_teleport = true;
344376
345377 // enemies and npcs should be initialized AFTER on_load events execute
346 enemym->handleNewMap();
378 entitym->handleNewMap();
347379 npcs->handleNewMap();
348380 resetNPC();
349381
350382 menu->mini->prerender(&mapr->collider, mapr->w, mapr->h);
351383
352384 // return to title (permadeath) OR auto-save
353 if (pc->stats.permadeath && pc->stats.cur_state == StatBlock::AVATAR_DEAD) {
385 if (pc->stats.permadeath && pc->stats.cur_state == StatBlock::ENTITY_DEAD) {
354386 snd->stopMusic();
355387 showLoading();
356388 setRequestedGameState(new GameStateTitle());
383415 * Also check closing the game window entirely.
384416 */
385417 void GameStatePlay::checkCancel() {
386 bool save_on_exit = eset->misc.save_onexit && !(pc->stats.permadeath && pc->stats.cur_state == StatBlock::AVATAR_DEAD);
418 bool save_on_exit = eset->misc.save_onexit && !(pc->stats.permadeath && pc->stats.cur_state == StatBlock::ENTITY_DEAD);
387419
388420 if (save_on_exit && eset->misc.save_pos_onexit) {
389421 mapr->respawn_point = pc->stats.pos;
398430
399431 // audio levels can be changed in the pause menu, so update our settings file
400432 settings->saveSettings();
433 inpt->saveKeyBindings();
401434
402435 snd->stopMusic();
403436 showLoading();
412445
413446 if (save_on_exit)
414447 save_load->saveGame();
448
449 settings->saveSettings();
450 inpt->saveKeyBindings();
415451
416452 snd->stopMusic();
417453 exitRequested = true;
478514 }
479515 else if (infile.key == "power") {
480516 // @ATTR title.power|power_id|Requires power.
481 titles.back().power = Parse::toInt(infile.val);
517 titles.back().power = Parse::toPowerID(infile.val);
482518 }
483519 else if (infile.key == "requires_status") {
484520 // @ATTR title.requires_status|list(string)|Requires status.
552588 }
553589
554590 void GameStatePlay::checkEquipmentChange() {
555 // force the actionbar to update when we change gear
556591 if (menu->inv->changed_equipment) {
592 // force the actionbar to update when we change gear
557593 menu->act->updated = true;
558 }
559
560 if (menu->inv->changed_equipment) {
561594
562595 int feet_index = -1;
563596 std::vector<Avatar::Layer_gfx> img_gfx;
630663 */
631664 void GameStatePlay::checkUsedItems() {
632665 for (unsigned i=0; i<powers->used_items.size(); i++) {
633 menu->inv->remove(powers->used_items[i]);
666 menu->inv->remove(powers->used_items[i], 1);
634667 }
635668 for (unsigned i=0; i<powers->used_equipped_items.size(); i++) {
636669 menu->inv->inventory[MenuInventory::EQUIPMENT].remove(powers->used_equipped_items[i], 1);
706739 if (npc_id != -1) {
707740 bool interact_with_npc = false;
708741 if (menu->talker->npc_from_map) {
709 float interact_distance = Utils::calcDist(pc->stats.pos, npcs->npcs[npc_id]->pos);
742 float interact_distance = Utils::calcDist(pc->stats.pos, npcs->npcs[npc_id]->stats.pos);
710743
711744 if (interact_distance < eset->misc.interact_range) {
712745 interact_with_npc = true;
743776 menu->inv->visible = true;
744777 menu->stash->visible = true;
745778 mapr->stash = false;
779 menu->stash->validate(menu->drop_stack);
746780 }
747781 else if (menu->stash->visible) {
748782 // Close stash if inventory is closed
761795 }
762796
763797 // If the stash has been updated, save the game
764 if (menu->stash->updated) {
765 menu->stash->updated = false;
798 if (menu->stash->checkUpdates()) {
766799 save_load->saveGame();
767800 }
768801 }
795828 mapr->respawn_point = pc->stats.pos;
796829 }
797830
798 if (eset->misc.save_onload)
831 if (eset->misc.save_oncutscene)
799832 save_load->saveGame();
800833
801 if (menu->devconsole) {
802 menu->devconsole->closeWindow();
803 }
834 menu->closeAll();
804835
805836 setRequestedGameState(cutscene);
806837 }
824855 for (unsigned i = index; i < menu->act->slots_count; i++) {
825856 if (menu->act->hotkeys[i] == 0) continue;
826857
827 int id = menu->inv->getPowerMod(menu->act->hotkeys_mod[i]);
858 PowerID id = menu->inv->getPowerMod(menu->act->hotkeys_mod[i]);
828859 if (id > 0) {
829860 menu->act->hotkeys_mod[i] = id;
830861 return updateActionBar(i);
839870 void GameStatePlay::logic() {
840871 if (inpt->window_resized)
841872 refreshWidgets();
873
874 curs->setLowHP(pc->isLowHpCursorEnabled() && pc->isLowHp());
842875
843876 checkCutscene();
844877
856889 // these actions only occur when the game isn't paused
857890 if (pc->stats.alive) checkLoot();
858891 checkEnemyFocus();
892 checkNPCFocus();
859893 if (pc->stats.alive) {
860894 mapr->checkHotspots();
861895 mapr->checkNearestEvent();
863897 }
864898 checkTitle();
865899
866 menu->act->checkAction(action_queue);
867 pc->logic(action_queue, restrictPowerUse());
900 menu->act->checkAction(pc->action_queue);
901 pc->logic();
868902
869903 // Transform powers change the actionbar layout,
870904 // so we need to prevent accidental clicks if a new power is placed under the slot we clicked on.
874908 }
875909
876910 // transfer hero data to enemies, for AI use
877 if (pc->stats.get(Stats::STEALTH) > 100) enemym->hero_stealth = 100;
878 else enemym->hero_stealth = pc->stats.get(Stats::STEALTH);
879
880 enemym->logic();
911 if (pc->stats.get(Stats::STEALTH) > 100) entitym->hero_stealth = 100;
912 else entitym->hero_stealth = pc->stats.get(Stats::STEALTH);
913
914 entitym->logic();
881915 hazards->logic();
882916 loot->logic();
883 enemym->checkEnemiesforXP();
884917 npcs->logic();
885918
886919 snd->logic(pc->stats.pos);
887920
888 comb->logic(mapr->cam);
921 comb->logic(mapr->cam.pos);
889922 }
890923
891924 // close menus when the player dies, but still allow them to be reopened
908941 checkCancel();
909942
910943 mapr->logic(isPaused());
911 mapr->enemies_cleared = enemym->isCleared();
944 mapr->enemies_cleared = entitym->isCleared();
912945 quests->logic();
913946
914947 pc->checkTransform();
9691002 if (pc->respawn) {
9701003 pc->stats.alive = true;
9711004 pc->stats.corpse = false;
972 pc->stats.cur_state = StatBlock::AVATAR_STANCE;
1005 pc->stats.cur_state = StatBlock::ENTITY_STANCE;
9731006 menu->inv->applyEquipment();
9741007 menu->inv->changed_equipment = true;
9751008 checkEquipmentChange();
10091042 * Render all graphics for a single frame
10101043 */
10111044 void GameStatePlay::render() {
1045 if (mapr->is_spawn_map)
1046 return;
10121047
10131048 // Create a list of Renderables from all objects not already on the map.
10141049 // split the list into the beings alive (may move) and dead beings (must not move)
10171052
10181053 pc->addRenders(rens);
10191054
1020 enemym->addRenders(rens, rens_dead);
1055 entitym->addRenders(rens, rens_dead);
10211056
10221057 npcs->addRenders(rens); // npcs cannot be dead
10231058
10301065 mapr->render(rens, rens_dead);
10311066
10321067 // mouseover tooltips
1033 loot->renderTooltips(mapr->cam);
1068 loot->renderTooltips(mapr->cam.pos);
10341069
10351070 if (mapr->map_change) {
10361071 menu->mini->prerender(&mapr->collider, mapr->w, mapr->h);
10961131 }
10971132
10981133 GameStatePlay::~GameStatePlay() {
1134 curs->setLowHP(false);
1135
10991136 delete quests;
11001137 delete npcs;
11011138 delete hazards;
1102 delete enemym;
1139 delete entitym;
11031140 delete pc;
11041141 delete mapr;
11051142 delete menu;
11151152 menu = NULL;
11161153 camp = NULL;
11171154 enemyg = NULL;
1118 enemym = NULL;
1155 entitym = NULL;
11191156 items = NULL;
11201157 loot = NULL;
11211158 mapr = NULL;
3131 #include "Utils.h"
3232
3333 class Avatar;
34 class Enemy;
34 class Entity;
3535 class MenuManager;
36 class NPCManager;
3736 class QuestLog;
3837 class WidgetLabel;
3938
4342 public:
4443 std::string title;
4544 int level;
46 int power;
45 PowerID power;
4746 std::vector<StatusID> requires_status;
4847 std::vector<StatusID> requires_not_status;
4948 std::string primary_stat_1;
6261
6362 class GameStatePlay : public GameState {
6463 private:
65 Enemy *enemy;
64 Entity *enemy;
6665
67 NPCManager *npcs;
6866 QuestLog *quests;
6967
7068 bool restrictPowerUse();
7169 void checkEnemyFocus();
70 void checkNPCFocus();
7271 void checkLoot();
7372 void checkLootDrop();
7473 void checkTeleport();
9291
9392 std::vector<Title> titles;
9493
95 std::vector<ActionData> action_queue;
96
9794 Timer second_timer;
9895
9996 bool is_first_map_load;
2020 #include "EngineSettings.h"
2121 #include "FileParser.h"
2222 #include "FontEngine.h"
23 #include "GameStateConfigBase.h"
24 #include "GameStateConfigDesktop.h"
23 #include "GameStateConfig.h"
2524 #include "GameStateCutscene.h"
2625 #include "GameStateLoad.h"
2726 #include "GameStateTitle.h"
2827 #include "InputState.h"
28 #include "MenuMovementType.h"
2929 #include "MessageEngine.h"
3030 #include "Platform.h"
3131 #include "RenderDevice.h"
4242 GameStateTitle::GameStateTitle()
4343 : GameState()
4444 , logo(NULL)
45 , button_play(new WidgetButton(WidgetButton::DEFAULT_FILE))
46 , button_exit(new WidgetButton(WidgetButton::DEFAULT_FILE))
47 , button_cfg(new WidgetButton(WidgetButton::DEFAULT_FILE))
48 , button_credits(new WidgetButton(WidgetButton::DEFAULT_FILE))
49 , label_version(new WidgetLabel())
50 , menu_movement_type(NULL)
4551 , align_logo(Utils::ALIGN_CENTER)
4652 , exit_game(false)
4753 , load_game(false)
4854 {
49
50 // set up buttons
51 button_play = new WidgetButton(WidgetButton::DEFAULT_FILE);
52 button_exit = new WidgetButton(WidgetButton::DEFAULT_FILE);
53 button_cfg = new WidgetButton(WidgetButton::DEFAULT_FILE);
54 button_credits = new WidgetButton(WidgetButton::DEFAULT_FILE);
55
5655 FileParser infile;
5756 // @CLASS GameStateTitle|Description of menus/gametitle.txt
5857 if (infile.open("menus/gametitle.txt", FileParser::MOD_FILE, FileParser::ERROR_NORMAL)) {
121120 button_exit->refresh();
122121
123122 // set up labels
124 label_version = new WidgetLabel();
125123 label_version->setJustify(FontEngine::JUSTIFY_RIGHT);
126124 label_version->setText(VersionInfo::createVersionStringFull());
127125 label_version->setColor(font->getColor(FontEngine::COLOR_MENU_NORMAL));
141139 }
142140
143141 render_device->setBackgroundColor(Color(0,0,0,0));
142
143 // NOTE The presence of the mouse move setting is used to determine if the
144 // movement type dialog is displayed. Is this adequate?
145 if (!settings->move_type_dimissed && platform.config_input[Platform::Input::MOUSE_MOVE]) {
146 menu_movement_type = new MenuMovementType();
147 menu_movement_type->visible = true;
148 }
144149 }
145150
146151 void GameStateTitle::logic() {
156161 exitRequested = true;
157162 }
158163
159 tablist.logic();
160
161 if (button_play->checkClick()) {
162 showLoading();
163 setRequestedGameState(new GameStateLoad());
164 }
165 else if (button_cfg->checkClick()) {
166 showLoading();
167 if (platform.config_menu_type == Platform::CONFIG_MENU_TYPE_DESKTOP_NO_VIDEO)
168 setRequestedGameState(new GameStateConfigDesktop(!GameStateConfigDesktop::ENABLE_VIDEO_TAB));
169 else if (platform.config_menu_type == Platform::CONFIG_MENU_TYPE_DESKTOP)
170 setRequestedGameState(new GameStateConfigDesktop(GameStateConfigDesktop::ENABLE_VIDEO_TAB));
171 else
172 setRequestedGameState(new GameStateConfigBase(GameStateConfigBase::DO_INIT));
173 }
174 else if (button_credits->checkClick()) {
175 showLoading();
176 GameStateTitle *title = new GameStateTitle();
177 GameStateCutscene *credits = new GameStateCutscene(title);
178
179 if (!credits->load("cutscenes/credits.txt")) {
180 delete credits;
181 delete title;
182 }
183 else {
184 setRequestedGameState(credits);
185 }
186 }
187 else if (platform.has_exit_button && button_exit->checkClick()) {
188 exitRequested = true;
164 if (menu_movement_type && menu_movement_type->visible) {
165 menu_movement_type->logic();
166 }
167 else {
168 tablist.logic();
169
170 if (button_play->checkClick()) {
171 showLoading();
172 setRequestedGameState(new GameStateLoad());
173 }
174 else if (button_cfg->checkClick()) {
175 showLoading();
176 setRequestedGameState(new GameStateConfig());
177 }
178 else if (button_credits->checkClick()) {
179 showLoading();
180 GameStateTitle *title = new GameStateTitle();
181 GameStateCutscene *credits = new GameStateCutscene(title);
182
183 if (!credits->load("cutscenes/credits.txt")) {
184 delete credits;
185 delete title;
186 }
187 else {
188 setRequestedGameState(credits);
189 }
190 }
191 else if (platform.has_exit_button && button_exit->checkClick()) {
192 exitRequested = true;
193 }
189194 }
190195 }
191196
206211 button_exit->setPos(0, 0);
207212
208213 label_version->setPos(settings->view_w, 0);
214
215 if (menu_movement_type)
216 menu_movement_type->align();
209217 }
210218
211219 void GameStateTitle::render() {
212 // display logo
213 render_device->render(logo);
214
215 // display buttons
216 button_play->render();
217 button_cfg->render();
218 button_credits->render();
219
220 if (platform.has_exit_button)
221 button_exit->render();
220 if (!menu_movement_type || !menu_movement_type->visible) {
221 // display logo
222 render_device->render(logo);
223
224 // display buttons
225 button_play->render();
226 button_cfg->render();
227 button_credits->render();
228
229 if (platform.has_exit_button)
230 button_exit->render();
231 }
232 else {
233 menu_movement_type->render();
234 }
222235
223236 // version number
224237 label_version->render();
231244 delete button_credits;
232245 delete button_exit;
233246 delete label_version;
234 }
247 delete menu_movement_type;
248 }
2222 #include "GameState.h"
2323 #include "Widget.h"
2424
25 class MenuMovementType;
2526 class WidgetButton;
2627 class WidgetLabel;
2728
3536 WidgetButton *button_cfg;
3637 WidgetButton *button_credits;
3738 WidgetLabel *label_version;
39 MenuMovementType *menu_movement_type;
3840
3941 TabList tablist;
4042
163163 if (activeAnimation)
164164 activeAnimation->advanceFrame();
165165
166 prev_pos = pos;
167
166168 // handle movement
167169 bool check_collide = false;
168170 if (!(speed.x == 0 && speed.y == 0)) {
4949 void setAngle(const float& _angle);
5050 bool isDangerousNow();
5151 void addRenderable(std::vector<Renderable> &r, std::vector<Renderable> &r_dead);
52 void setPower(size_t power_index);
5352
5453 bool active;
5554 bool remove_now;
7069
7170 StatBlock *src_stats;
7271 Power *power;
73 size_t power_index;
72 PowerID power_index;
7473
7574 FPoint pos;
7675 FPoint speed;
7978 // for linking hazards together, e.g. repeaters
8079 Hazard* parent;
8180 std::vector<Hazard*> children;
81
82 FPoint prev_pos;
8283
8384 private:
8485 void reflect();
2424
2525 #include "Avatar.h"
2626 #include "Animation.h"
27 #include "Enemy.h"
28 #include "EnemyManager.h"
27 #include "Entity.h"
28 #include "EntityManager.h"
2929 #include "EventManager.h"
3030 #include "Hazard.h"
3131 #include "HazardManager.h"
9191
9292 // process hazards that can hurt enemies
9393 if (h[i]->source_type != Power::SOURCE_TYPE_ENEMY) { //hero or neutral sources
94 for (unsigned int eindex = 0; eindex < enemym->enemies.size(); eindex++) {
94 for (unsigned int eindex = 0; eindex < entitym->entities.size(); eindex++) {
9595
9696 // only check living enemies
97 if (enemym->enemies[eindex]->stats.hp > 0 && h[i]->active && (enemym->enemies[eindex]->stats.hero_ally == h[i]->power->target_party)) {
98 if (Utils::isWithinRadius(h[i]->pos, h[i]->power->radius, enemym->enemies[eindex]->stats.pos)) {
99 if (!h[i]->hasEntity(enemym->enemies[eindex])) {
97 if (entitym->entities[eindex]->stats.hp > 0 && h[i]->active && (entitym->entities[eindex]->stats.hero_ally == h[i]->power->target_party)) {
98 if (Utils::isWithinRadius(h[i]->pos, h[i]->power->radius, entitym->entities[eindex]->stats.pos)) {
99 if (!h[i]->hasEntity(entitym->entities[eindex])) {
100100 // hit!
101 h[i]->addEntity(enemym->enemies[eindex]);
102 hitEntity(i, enemym->enemies[eindex]->takeHit(*h[i]));
101 h[i]->addEntity(entitym->entities[eindex]);
102 hitEntity(i, entitym->entities[eindex]->takeHit(*h[i]));
103103 if (!h[i]->power->beacon) {
104 last_enemy = enemym->enemies[eindex];
104 last_enemy = entitym->entities[eindex];
105105 }
106106 }
107107 }
123123 }
124124
125125 //now process allies
126 for (unsigned int eindex = 0; eindex < enemym->enemies.size(); eindex++) {
126 for (unsigned int eindex = 0; eindex < entitym->entities.size(); eindex++) {
127127 // only check living allies
128 if (enemym->enemies[eindex]->stats.hp > 0 && h[i]->active && enemym->enemies[eindex]->stats.hero_ally) {
129 if (Utils::isWithinRadius(h[i]->pos, h[i]->power->radius, enemym->enemies[eindex]->stats.pos)) {
130 if (!h[i]->hasEntity(enemym->enemies[eindex])) {
128 if (entitym->entities[eindex]->stats.hp > 0 && h[i]->active && entitym->entities[eindex]->stats.hero_ally) {
129 if (Utils::isWithinRadius(h[i]->pos, h[i]->power->radius, entitym->entities[eindex]->stats.pos)) {
130 if (!h[i]->hasEntity(entitym->entities[eindex])) {
131131 // hit!
132 h[i]->addEntity(enemym->enemies[eindex]);
133 hitEntity(i, enemym->enemies[eindex]->takeHit(*h[i]));
132 h[i]->addEntity(entitym->entities[eindex]);
133 hitEntity(i, entitym->entities[eindex]->takeHit(*h[i]));
134134 }
135135 }
136136 }
2828 #include "Utils.h"
2929
3030 class Avatar;
31 class Enemy;
31 class Entity;
3232 class Hazard;
3333
3434 class HazardManager {
4444 void addRenders(std::vector<Renderable> &r, std::vector<Renderable> &r_dead);
4545
4646 std::vector<Hazard*> h;
47 Enemy* last_enemy;
47 Entity* last_enemy;
4848 };
4949
5050 #endif
3030 #include "Platform.h"
3131 #include "Settings.h"
3232 #include "SharedResources.h"
33 #include "UtilsFileSystem.h"
3334 #include "UtilsParsing.h"
3435 #include "Version.h"
3536
6162 , pressing_up(false)
6263 , pressing_down(false)
6364 , joysticks_changed(false)
65 , refresh_hotkeys(false)
6466 , un_press()
6567 , current_touch()
6668 , dump_event(false)
6769 , file_version(new Version())
68 , file_version_min(new Version(1, 6, 28))
70 , file_version_min(new Version(1, 9, 20))
6971 {
7072 }
7173
114116 opened_file = true;
115117 }
116118 }
117 // if there are no mod keybinds, fall back to global config
118 else if (infile.open(settings->path_conf + "keybindings.txt", !FileParser::MOD_FILE, FileParser::ERROR_NONE)) {
119 opened_file = true;
119 else {
120 // if there are no mod keybinds, fall back to global config
121 if (infile.open(settings->path_conf + "keybindings.txt", !FileParser::MOD_FILE, FileParser::ERROR_NONE)) {
122 opened_file = true;
123 }
124
125 // clean up mod keybinds if engine/default_keybindings.txt is not present
126 if (Filesystem::fileExists(settings->path_user + "saves/" + eset->misc.save_prefix + "/keybindings.txt")) {
127 Utils::logInfo("InputState: Found unexpected save prefix keybinding file. Removing it now.");
128 Filesystem::removeFile(settings->path_user + "saves/" + eset->misc.save_prefix + "/keybindings.txt");
129 }
120130 }
121131
122132 if (!opened_file) {
258268
259269 }
260270 infile.close();
271
272 setFixedKeyBindings();
261273 }
262274
263275 /**
266278 void InputState::saveKeyBindings() {
267279 std::string out_path;
268280 if (mods->locate("engine/default_keybindings.txt") != "") {
281 Filesystem::createDir(settings->path_user + "saves/" + eset->misc.save_prefix);
269282 out_path = settings->path_user + "saves/" + eset->misc.save_prefix + "/keybindings.txt";
270283 }
271284 else {
328341 }
329342
330343 void InputState::handle() {
344 refresh_hotkeys = false;
345
331346 if (lock_all) return;
332347
333348 inkeys = "";
4848 LOG = 19,
4949 MAIN1 = 20,
5050 MAIN2 = 21,
51 CTRL = 22,
52 SHIFT = 23,
53 ALT = 24,
54 DEL = 25,
55 ACTIONBAR = 26,
56 ACTIONBAR_BACK = 27,
57 ACTIONBAR_FORWARD = 28,
58 ACTIONBAR_USE = 29,
59 DEVELOPER_MENU = 30
51 ACTIONBAR = 22,
52 ACTIONBAR_BACK = 23,
53 ACTIONBAR_FORWARD = 24,
54 ACTIONBAR_USE = 25,
55 DEVELOPER_MENU = 26,
56 CTRL = 27,
57 SHIFT = 28,
58 ALT = 29,
59 DEL = 30
6060 };
6161 }
6262
8585 BINDING_JOYSTICK = 2
8686 };
8787
88 static const bool GET_SHORT_STRING = true;
8889 static const int KEY_COUNT = 31;
90 static const int KEY_COUNT_USER = KEY_COUNT - 4; // exclude CTRL, SHIFT, etc from keybinding menu
8991 int binding[KEY_COUNT];
9092 int binding_alt[KEY_COUNT];
9193 int binding_joy[KEY_COUNT];
107109
108110 virtual void handle();
109111 virtual void defaultQwertyKeyBindings() = 0;
112 virtual void setFixedKeyBindings() = 0;
110113 virtual void hideCursor() = 0;
111114 virtual void showCursor() = 0;
112115 virtual std::string getJoystickName(int index) = 0;
113 virtual std::string getKeyName(int key) = 0;
114 virtual std::string getMouseButtonName(int button) = 0;
115 virtual std::string getJoystickButtonName(int button) = 0;
116 virtual std::string getBindingString(int key, int bindings_list = BINDING_DEFAULT) = 0;
116 virtual std::string getKeyName(int key, bool get_short_string = !GET_SHORT_STRING) = 0;
117 virtual std::string getMouseButtonName(int button, bool get_short_string = !GET_SHORT_STRING) = 0;
118 virtual std::string getJoystickButtonName(int button, bool get_short_string = !GET_SHORT_STRING) = 0;
119 virtual std::string getBindingString(int key, int bindings_list = BINDING_DEFAULT, bool get_short_string = !GET_SHORT_STRING) = 0;
117120 virtual std::string getMovementString() = 0;
118121 virtual std::string getAttackString() = 0;
119122 virtual std::string getContinueString() = 0;
151154 bool pressing_up;
152155 bool pressing_down;
153156 bool joysticks_changed;
157 bool refresh_hotkeys;
154158
155159 protected:
156160 Point scaleMouse(unsigned int x, unsigned int y);
3030 #include "FontEngine.h"
3131 #include "InputState.h"
3232 #include "ItemManager.h"
33 #include "MenuInventory.h"
3334 #include "MenuManager.h"
3435 #include "MenuPowers.h"
3536 #include "MessageEngine.h"
5253 bool compareItemStack(const ItemStack &stack1, const ItemStack &stack2) {
5354 return stack1.item < stack2.item;
5455 }
56
57 ItemStack::ItemStack(const Point& _p)
58 : item(_p.x)
59 , quantity(_p.y)
60 , can_buyback(false)
61 {}
5562
5663 Item::Item()
5764 : name("")
8087 , max_quantity(INT_MAX)
8188 , pickup_status("")
8289 , stepfx("")
83 , quest_item(false) {
90 , quest_item(false)
91 , no_stash(NO_STASH_NULL)
92 , script("") {
8493 }
8594
8695 ItemManager::ItemManager()
8796 {
88 // These values are a bit arbitrary, but they should be a good starting point.
89 items.reserve(1000);
90 item_sets.reserve(100);
91
9297 loadAll();
93
94 // make sure we have at least 1 item
95 if (items.empty()) {
96 addUnknownItem(1);
97 }
9898 }
9999
100100 /**
107107 this->loadTypes("items/types.txt");
108108 this->loadSets("items/sets.txt");
109109 this->loadQualities("items/qualities.txt");
110
111 /*
112 * Shrinks the items vector to the absolute needed size.
113 *
114 * While loading the items, the item vector grows dynamically. To have
115 * no much time overhead for reallocating the vector, a new reallocation
116 * is twice as large as the needed item id, which means in the worst case
117 * the item vector was reallocated for loading the last element, so the
118 * vector is twice as large as needed. This memory is definitly not used,
119 * so we can free it.
120 */
121 if (items.capacity() != items.size())
122 std::vector<Item>(items).swap(items);
123 if (item_sets.capacity() != item_sets.size())
124 std::vector<ItemSet>(item_sets).swap(item_sets);
125110
126111 if (items.empty())
127112 Utils::logInfo("ItemManager: No items were found.");
145130 bool clear_loot_anim = true;
146131 bool clear_replace_power = true;
147132
148 int id = 0;
133 ItemID id = 0;
149134 bool id_line = false;
150135 while (infile.next()) {
151136 if (infile.key == "id") {
152137 // @ATTR id|item_id|An uniq id of the item used as reference from other classes.
153138 id_line = true;
154 id = Parse::toInt(infile.val);
155 addUnknownItem(id);
156 items[id].max_quantity = 1;
139 id = Parse::toItemID(infile.val);
140 items[id] = Item();
141
142 // set the max quantity if it has not been done yet
143 if (items[id].max_quantity == INT_MAX)
144 items[id].max_quantity = 1;
157145
158146 clear_req_stat = true;
159147 clear_bonus = true;
167155 continue;
168156 }
169157 if (id_line) continue;
170
171 assert(items.size() > std::size_t(id));
172158
173159 if (infile.key == "name") {
174160 // @ATTR name|string|Item name displayed on long and short tooltips.
278264 else if (infile.key == "bonus_power_level") {
279265 // @ATTR bonus_power_level|repeatable(power_id, int) : Base power, Bonus levels|Grants bonus levels to a given base power.
280266 BonusData bdata;
281 bdata.power_id = Parse::popFirstInt(infile.val);
267 bdata.power_id = Parse::toPowerID(Parse::popFirstString(infile.val));
282268 bdata.value = Parse::popFirstInt(infile.val);
283269 items[id].bonus.push_back(bdata);
284270 }
315301 items[id].replace_power.clear();
316302 clear_replace_power = false;
317303 }
318 Point power_ids = Parse::toPoint(infile.val);
304 std::pair<PowerID, PowerID> power_ids;
305 power_ids.first = Parse::toPowerID(Parse::popFirstString(infile.val));
306 power_ids.second = Parse::toPowerID(Parse::popFirstString(infile.val));
319307 items[id].replace_power.push_back(power_ids);
320308 }
321309 else if (infile.key == "power_desc")
350338 }
351339 }
352340 else if (infile.key == "quest_item") {
353 // @ATTR quest_item|bool|If true, this item is a quest item and can not be dropped, stashed, or sold.
341 // @ATTR quest_item|bool|If true, this item is a quest item and can not be dropped or sold. The item also can't be stashed, unless the no_stash property is set to something other than "all".
354342 items[id].quest_item = Parse::toBool(infile.val);
343
344 // for legacy reasons, quest items can't be stashed by default
345 if (items[id].no_stash == Item::NO_STASH_NULL)
346 items[id].no_stash = Item::NO_STASH_ALL;
347 }
348 else if (infile.key == "no_stash") {
349 // @ATTR no_stash|["ignore", "private", "shared", "all"]|If not set to 'ignore', this item will not be able to be put in the corresponding stash.
350 std::string temp = Parse::popFirstString(infile.val);
351 if (temp == "ignore")
352 items[id].no_stash = Item::NO_STASH_IGNORE;
353 else if (temp == "private")
354 items[id].no_stash = Item::NO_STASH_PRIVATE;
355 else if (temp == "shared")
356 items[id].no_stash = Item::NO_STASH_SHARED;
357 else if (temp == "all")
358 items[id].no_stash = Item::NO_STASH_ALL;
359 else
360 infile.error("ItemManager: '%s' is not a valid value for 'no_stash'. Use 'ignore', 'private', 'shared', or 'all'.", temp.c_str());
361 }
362 else if (infile.key == "script") {
363 // @ATTR item.script|filename|Loads and executes a script file when the item is activated from the player's inventory.
364 items[id].script = Parse::popFirstString(infile.val);
355365 }
356366 else {
357367 infile.error("ItemManager: '%s' is not a valid key.", infile.key.c_str());
359369
360370 }
361371 infile.close();
372
373 // normal items can be stored in either stash
374 std::map<ItemID, Item>::iterator item_it;
375 for (item_it = items.begin(); item_it != items.end(); ++item_it) {
376 if (item_it->second.no_stash == Item::NO_STASH_NULL) {
377 item_it->second.no_stash = Item::NO_STASH_IGNORE;
378 }
379 }
362380 }
363381
364382 /**
451469 }
452470 }
453471
454 std::string ItemManager::getItemName(unsigned id) {
455 if (id >= items.size()) return msg->get("Unknown Item");
456
472 std::string ItemManager::getItemName(ItemID id) {
457473 if (!items[id].has_name)
458474 items[id].name = msg->get("Unknown Item");
459475
469485 return _type;
470486 }
471487
472 Color ItemManager::getItemColor(unsigned id) {
473 if (id < 1 || id > items.size())
474 return font->getColor(FontEngine::COLOR_WIDGET_NORMAL);
475
488 Color ItemManager::getItemColor(ItemID id) {
476489 if (items[id].set > 0) {
477490 return item_sets[items[id].set].color;
478491 }
488501 }
489502
490503 int ItemManager::getItemIconOverlay(size_t id) {
491 if (id < 1 || id > items.size())
492 return -1;
493
494504 for (size_t i=0; i < item_qualities.size(); ++i) {
495505 if (item_qualities[i].id == items[id].quality) {
496506 return item_qualities[i].overlay_icon;
499509
500510 // no overlay icon
501511 return -1;
502 }
503
504 void ItemManager::addUnknownItem(unsigned id) {
505 if (id > 0) {
506 size_t new_size = id+1;
507 if (items.size() <= new_size)
508 items.resize(new_size);
509 }
510512 }
511513
512514 /**
523525
524526 bool clear_bonus = true;
525527
526 int id = 0;
528 ItemSetID id = 0;
527529 bool id_line;
528530 while (infile.next()) {
529531 if (infile.key == "id") {
530532 // @ATTR id|int|A uniq id for the item set.
531533 id_line = true;
532 id = Parse::toInt(infile.val);
534 id = Parse::toSizeT(infile.val);
533535
534536 if (id > 0) {
535 size_t new_size = id+1;
536 if (item_sets.size() <= new_size)
537 item_sets.resize(new_size);
537 item_sets[id] = ItemSet();
538538 }
539539
540540 clear_bonus = true;
546546 continue;
547547 }
548548 if (id_line) continue;
549
550 assert(item_sets.size() > std::size_t(id));
551549
552550 if (infile.key == "name") {
553551 // @ATTR name|string|Name of the item set.
558556 item_sets[id].items.clear();
559557 std::string item_id = Parse::popFirstString(infile.val);
560558 while (item_id != "") {
561 int temp_id = Parse::toInt(item_id);
562 if (temp_id > 0 && temp_id < static_cast<int>(items.size())) {
563 items[temp_id].set = id;
564 item_sets[id].items.push_back(temp_id);
565 }
566 else {
567 const int maxsize = static_cast<int>(items.size()-1);
568 infile.error("ItemManager: Item index out of bounds 1-%d, skipping item.", maxsize);
569 }
559 ItemID temp_id = Parse::toItemID(item_id);
560 items[temp_id].set = id;
561 item_sets[id].items.push_back(temp_id);
570562 item_id = Parse::popFirstString(infile.val);
571563 }
572564 }
589581 // @ATTR bonus_power_level|repeatable(int, power_id, int) : Required set item count, Base power, Bonus levels|Grants bonus levels to a given base power.
590582 SetBonusData bonus;
591583 bonus.requirement = Parse::popFirstInt(infile.val);
592 bonus.power_id = Parse::popFirstInt(infile.val);
584 bonus.power_id = Parse::toPowerID(Parse::popFirstString(infile.val));
593585 bonus.value = Parse::popFirstInt(infile.val);
594586 item_sets[id].bonus.push_back(bonus);
595587 }
691683 }
692684 }
693685
694 void ItemManager::playSound(int item, const Point& pos) {
686 void ItemManager::playSound(ItemID item, const Point& pos) {
695687 std::stringstream channel_name;
696688 channel_name << "item_" << items[item].sfx_id;
697689 snd->play(items[item].sfx_id, channel_name.str(), FPoint(pos), false);
856848
857849 // buy or sell price
858850 if (items[stack.item].getPrice() > 0 && stack.item != eset->misc.currency_id) {
851 Color currency_color = getItemColor(eset->misc.currency_id);
859852
860853 int price_per_unit;
861854 if (context == VENDOR_BUY) {
863856 if (stats->currency < price_per_unit)
864857 color = font->getColor(FontEngine::COLOR_REQUIREMENTS_NOT_MET);
865858 else
866 color = font->getColor(FontEngine::COLOR_WIDGET_NORMAL);
859 color = currency_color;
867860
868861 if (items[stack.item].max_quantity <= 1)
869862 tip.addColoredText(msg->get("Buy Price: %d %s", price_per_unit, eset->loot.currency), color);
875868 if (stats->currency < price_per_unit)
876869 color = font->getColor(FontEngine::COLOR_REQUIREMENTS_NOT_MET);
877870 else
878 color = font->getColor(FontEngine::COLOR_WIDGET_NORMAL);
871 color = currency_color;
879872
880873 if (items[stack.item].max_quantity <= 1)
881874 tip.addColoredText(msg->get("Buy Price: %d %s", price_per_unit, eset->loot.currency), color);
888881 price_per_unit = 1;
889882
890883 if (items[stack.item].max_quantity <= 1)
891 tip.addText(msg->get("Sell Price: %d %s", price_per_unit, eset->loot.currency));
892 else
893 tip.addText(msg->get("Sell Price: %d %s each", price_per_unit, eset->loot.currency));
884 tip.addColoredText(msg->get("Sell Price: %d %s", price_per_unit, eset->loot.currency), currency_color);
885 else
886 tip.addColoredText(msg->get("Sell Price: %d %s each", price_per_unit, eset->loot.currency), currency_color);
894887 }
895888 }
896889
917910 // input hint for consumables/books
918911 // TODO hint when not using mouse control. The action for using an item there is hard to describe
919912 if (context == PLAYER_INV && !settings->no_mouse) {
920 int power_id = items[stack.item].power;
921 if (power_id > 0 && items[stack.item].type == "consumable") {
913 if (!items[stack.item].book.empty() && items[stack.item].book_is_readable) {
914 tip.addColoredText('\n' + msg->get("Press [%s] to read", inpt->getBindingString(Input::MAIN2)), font->getColor(FontEngine::COLOR_ITEM_BONUS));
915 }
916 else if (menu->inv->canActivateItem(stack.item)) {
922917 tip.addColoredText('\n' + msg->get("Press [%s] to use", inpt->getBindingString(Input::MAIN2)), font->getColor(FontEngine::COLOR_ITEM_BONUS));
923 }
924 else if (!items[stack.item].book.empty()) {
925 if (items[stack.item].book_is_readable)
926 tip.addColoredText('\n' + msg->get("Press [%s] to read", inpt->getBindingString(Input::MAIN2)), font->getColor(FontEngine::COLOR_ITEM_BONUS));
927 else
928 tip.addColoredText('\n' + msg->get("Press [%s] to use", inpt->getBindingString(Input::MAIN2)), font->getColor(FontEngine::COLOR_ITEM_BONUS));
929918 }
930919 }
931920
935924 /**
936925 * Check requirements on an item
937926 */
938 bool ItemManager::requirementsMet(const StatBlock *stats, int item) {
927 bool ItemManager::requirementsMet(const StatBlock *stats, ItemID item) {
939928 if (!stats) return false;
940929
941930 // level
10241013 return new_price;
10251014 }
10261015
1016 // Bonus documentation
1017
1018 // @CLASS ItemManager|Description of "bonus" attribute in items/items.txt
1019 // @TYPE speed|Movement speed. A value of 100 is 100% speed (aka normal speed).
1020 // @TYPE attack_speed|Attack animation speed. A value of 100 is 100% speed (aka normal speed).
1021 // @TYPE ${STATNAME}|Increases ${STATNAME}, where ${STATNAME} is any of the base stats. Examples: hp, avoidance, xp_gain
1022 // @TYPE ${DAMAGE_TYPE}|Increases a damage min or max, where ${DAMAGE_TYPE} is any 'min' or 'max' value found in engine/damage_types.txt. Example: dmg_melee_min
1023 // @TYPE ${ELEMENT}_resist|Increase Resistance % to ${ELEMENT}, where ${ELEMENT} is any found in engine/elements.txt. Example: fire_resist
1024 // @TYPE ${PRIMARYSTAT}|Increases ${PRIMARYSTAT}, where ${PRIMARYSTAT} is any of the primary stats defined in engine/primary_stats.txt. Example: physical
5454 bool is_speed;
5555 bool is_attack_speed;
5656 int value;
57 int power_id; // for bonus_power_level
57 PowerID power_id; // for bonus_power_level
5858 BonusData()
5959 : stat_index(-1)
6060 , damage_index_min(-1)
9797 friend class ItemManager;
9898
9999 public:
100 enum {
101 NO_STASH_NULL = 0,
102 NO_STASH_IGNORE = 1,
103 NO_STASH_PRIVATE = 2,
104 NO_STASH_SHARED = 3,
105 NO_STASH_ALL = 4
106 };
107
100108 bool has_name; // flag that is set when the item name is parsed
101109 std::string flavor; // optional flavor text describing the item
102110 int level; // rough estimate of quality, used in the loot algorithm
103 int set; // item can be attached to item set
111 ItemSetID set; // item can be attached to item set
104112 std::string quality; // should match an id from items/qualities.txt
105113 std::string type; // equipment slot or base item type
106114 std::vector<std::string> equip_flags; // common values include: melee, ranged, mental, shield
120128 SoundID sfx_id;
121129 std::string gfx; // the sprite layer shown when this item is equipped
122130 std::vector<LootAnimation> loot_animation;// the flying loot animation for this item
123 int power; // this item can be dragged to the action bar and used as a power
124 std::vector<Point> replace_power; // alter powers when this item is equipped. Power id 'x' is replaced with id 'y'
131 PowerID power; // this item can be dragged to the action bar and used as a power
132 std::vector< std::pair<PowerID, PowerID> > replace_power; // alter powers when this item is equipped. The first PowerID is replaced with the second.
125133 std::string power_desc; // shows up in green text on the tooltip
126134 int price; // if price = 0 the item cannot be sold
127135 int price_per_level; // additional price for each character level above 1
131139 std::string stepfx; // sound effect played when walking (armors only)
132140 std::vector<std::string> disable_slots; // if this item is equipped, it will disable slots that match the types in the list
133141 bool quest_item;
142 int no_stash;
143 std::string script;
134144
135145 int getPrice();
136146 int getSellPrice(bool is_new_buyback);
143153 class ItemSet {
144154 public:
145155 std::string name; // item set name displayed on long and short tool tips
146 std::vector<int> items; // items, included into set
156 std::vector<ItemID> items; // items, included into set
147157 std::vector<SetBonusData> bonus;// vector with stats to increase/decrease
148158 Color color;
149159
160170
161171 class ItemStack {
162172 public:
163 ItemStack()
164 : item(0)
165 , quantity(0)
173 ItemStack(ItemID _item = 0, int _quantity = 0)
174 : item(_item)
175 , quantity(_quantity)
166176 , can_buyback(false) {
167177 }
168178 ~ItemStack() {}
169 int item;
179 explicit ItemStack(const Point& _p);
180 bool operator > (const ItemStack &param) const;
181
182 bool empty();
183 void clear();
184
185 ItemID item;
170186 int quantity;
171187 bool can_buyback;
172 bool operator > (const ItemStack &param) const;
173 bool empty();
174 void clear();
175188 };
176189
177190 class ItemType {
208221
209222 ItemManager();
210223 ~ItemManager();
211 void playSound(int item, const Point& pos = Point(0,0));
224 void playSound(ItemID item, const Point& pos = Point(0,0));
212225 TooltipData getTooltip(ItemStack stack, StatBlock *stats, int context);
213226 TooltipData getShortTooltip(ItemStack item);
214 std::string getItemName(unsigned id);
227 std::string getItemName(ItemID id);
215228 std::string getItemType(const std::string& _type);
216 Color getItemColor(unsigned id);
229 Color getItemColor(ItemID id);
217230 int getItemIconOverlay(size_t id);
218 void addUnknownItem(unsigned id);
219 bool requirementsMet(const StatBlock *stats, int item);
220
221 std::vector<Item> items;
231 bool requirementsMet(const StatBlock *stats, ItemID item);
232
233 std::map<ItemID, Item> items;
222234 std::vector<ItemType> item_types;
223 std::vector<ItemSet> item_sets;
235 std::map<ItemSetID, ItemSet> item_sets;
224236 std::vector<ItemQuality> item_qualities;
225237 };
226238
5858 void ItemStorage::setItems(const std::string& s) {
5959 std::string item_list = s + ',';
6060 for (int i=0; i<slot_number; i++) {
61 storage[i].item = Parse::popFirstInt(item_list);
62 // check if such item exists to avoid crash if savegame was modified manually
63 if (storage[i].item < 0) {
64 Utils::logError("ItemStorage: Item on position %d has negative id, skipping", i);
65 storage[i].clear();
66 }
67 else if ((items->items.empty() && storage[i].item > 0) || static_cast<unsigned>(storage[i].item) > items->items.size()-1) {
68 Utils::logError("ItemStorage: Item id (%d) out of bounds 1-%d, marking as unknown", storage[i].item, static_cast<int>(items->items.size()));
69 items->addUnknownItem(storage[i].item);
61 storage[i].item = Parse::toItemID(Parse::popFirstString(item_list));
62 if (storage[i].item > 0 && !items->items[storage[i].item].has_name) {
63 Utils::logError("ItemStorage: Item id (%d) has no name, marking as unknown", storage[i].item);
7064 }
7165 }
7266 }
130124 */
131125 ItemStack ItemStorage::add( ItemStack stack, int slot) {
132126 if (!stack.empty()) {
133 if (items->items.empty() || stack.item <= 0 || static_cast<unsigned>(stack.item) > items->items.size()-1) {
134 items->addUnknownItem(stack.item);
135 }
136
137127 int max_quantity = items->items[stack.item].max_quantity;
138128 if (slot > -1) {
139129 // a slot is specified
198188 /**
199189 * Remove a quantity of a given item by its ID
200190 */
201 bool ItemStorage::remove(int item, int quantity) {
191 bool ItemStorage::remove(ItemID item, int quantity) {
202192 if (item == 0)
203193 return false;
204194
266256 /**
267257 * Get the number of the specified item carried (not equipped)
268258 */
269 int ItemStorage::count(int item) {
259 int ItemStorage::count(ItemID item) {
270260 int item_count=0;
271261 for (int i=0; i<slot_number; i++) {
272262 if (storage[i].item == item) {
279269 /**
280270 * Check to see if the given item is equipped
281271 */
282 bool ItemStorage::contain(int item, int quantity) {
272 bool ItemStorage::contain(ItemID item, int quantity) {
283273 int total_quantity = 0;
284274 for (int i=0; i<slot_number; i++) {
285275 if (storage[i].item == item)
4646 std::string getQuantities();
4747 ItemStack add(ItemStack stack, int slot);
4848 void subtract(int slot, int quantity);
49 bool remove(int item, int quantity);
49 bool remove(ItemID item, int quantity);
5050 void sort();
5151 void clear();
5252 void clean();
5353 bool empty();
5454
5555 bool full(ItemStack stack);
56 int count(int item);
57 bool contain(int item, int quantity);
56 int count(ItemID item);
57 bool contain(ItemID item, int quantity);
5858
5959 ItemStack * storage;
6060 };
2121 #include "AnimationSet.h"
2222 #include "Loot.h"
2323 #include "SharedResources.h"
24 #include "WidgetTooltip.h"
2425
2526 Loot::Loot()
2627 : gfx("")
2728 , animation(NULL)
29 , wtip(new WidgetTooltip())
2830 , tip_visible(false)
2931 , dropped_by_hero(false)
3032 , on_ground(false)
3537 Loot::Loot(const Loot &other)
3638 : gfx("")
3739 , animation(NULL)
40 , wtip(NULL)
3841 {
42 // operator= creates a new animation and tooltip
3943 *this = other;
4044 }
4145
5155 animation = NULL;
5256
5357 loadAnimation(other.gfx);
54 if (animation)
58 if (animation && other.animation)
5559 animation->syncTo(other.animation);
5660
5761 stack.item = other.stack.item;
5963 pos.x = other.pos.x;
6064 pos.y = other.pos.y;
6165 tip = other.tip;
62 tip_bounds = other.tip_bounds;
66 wtip = new WidgetTooltip();
6367 tip_visible = other.tip_visible;
6468 dropped_by_hero = other.dropped_by_hero;
6569 on_ground = other.on_ground;
8892 if (gfx != "")
8993 anim->decreaseCount(gfx);
9094 delete animation;
95 delete wtip;
9196 }
9297
2323 #include "ItemManager.h"
2424 #include "TooltipData.h"
2525
26 class WidgetTooltip;
27
2628 class Loot {
2729 private:
2830 std::string gfx;
3234 FPoint pos;
3335 Animation *animation;
3436 TooltipData tip;
35 Rect tip_bounds;
37 WidgetTooltip *wtip;
3638 bool tip_visible;
3739 bool dropped_by_hero;
3840 bool on_ground;
2929 #include "Avatar.h"
3030 #include "CommonIncludes.h"
3131 #include "CursorManager.h"
32 #include "Enemy.h"
33 #include "EnemyManager.h"
32 #include "Entity.h"
33 #include "EntityManager.h"
3434 #include "EngineSettings.h"
3535 #include "FileParser.h"
3636 #include "InputState.h"
4444 #include "SharedResources.h"
4545 #include "SoundManager.h"
4646 #include "Utils.h"
47 #include "UtilsFileSystem.h"
4748 #include "UtilsMath.h"
4849 #include "UtilsParsing.h"
4950 #include "WidgetTooltip.h"
5253 #include <math.h>
5354
5455 LootManager::LootManager()
55 : tip(new WidgetTooltip())
56 , sfx_loot(snd->load(eset->loot.sfx_loot, "LootManager dropping loot"))
56 : sfx_loot(snd->load(eset->loot.sfx_loot, "LootManager dropping loot"))
5757 {
5858 loadGraphics();
5959 loadLootTables();
6464 * Here we load all the animations used by the item database.
6565 */
6666 void LootManager::loadGraphics() {
67 animations.resize(items->items.size());
68
6967 // check all items in the item database
70 for (unsigned int i=0; i < items->items.size(); i++) {
71 if (items->items[i].loot_animation.empty()) continue;
72
73 animations[i].resize(items->items[i].loot_animation.size());
74
75 for (unsigned int j=0; j<items->items[i].loot_animation.size(); j++) {
76 anim->increaseCount(items->items[i].loot_animation[j].name);
77 animations[i][j] = anim->getAnimationSet(items->items[i].loot_animation[j].name)->getAnimation("");
68 std::map<ItemID, Item>::iterator item_it;
69 for (item_it = items->items.begin(); item_it != items->items.end(); ++item_it) {
70 if (item_it->second.loot_animation.empty())
71 continue;
72
73 animations[item_it->first].resize(item_it->second.loot_animation.size());
74
75 for (size_t i = 0; i < item_it->second.loot_animation.size(); ++i) {
76 anim->increaseCount(item_it->second.loot_animation[i].name);
77 animations[item_it->first][i] = anim->getAnimationSet(item_it->second.loot_animation[i].name)->getAnimation("");
7878 }
7979 }
8080 }
8181
8282 void LootManager::handleNewMap() {
8383 loot.clear();
84 enemiesDroppingLoot.clear();
8485 }
8586
8687 void LootManager::logic() {
9091 // animate flying loot
9192 if (it->animation) {
9293 it->animation->advanceFrame();
93 if (it->animation->isSecondLastFrame()) {
94 if (!it->on_ground && it->animation->isSecondLastFrame()) {
9495 it->on_ground = true;
9596 }
9697 }
122123
123124 Point dest;
124125 bool tooltip_below = true;
126 Rect screen_rect(0, 0, settings->view_w, settings->view_h);
125127
126128 std::vector<Loot>::iterator it;
127129 for (it = loot.begin(); it != loot.end(); ) {
129131
130132 if (it->on_ground) {
131133 Point p = Utils::mapToScreen(it->pos.x, it->pos.y, cam.x, cam.y);
134 if (!Utils::isWithinRect(screen_rect, p)) {
135 ++it;
136 continue;
137 }
138
132139 dest.x = p.x;
133140 dest.y = p.y + eset->tileset.tile_h_half;
134141
150157 default_visibility = false;
151158 }
152159 else {
153 Enemy* test_enemy = enemym->getNearestEnemy(it->pos, !EnemyManager::GET_CORPSE, NULL, eset->loot.hide_radius);
160 Entity* test_enemy = entitym->getNearestEntity(it->pos, !EntityManager::GET_CORPSE, NULL, eset->loot.hide_radius);
154161 if (test_enemy) {
155162 default_visibility = false;
156163 }
177184 }
178185
179186 // try to prevent tooltips from overlapping
180 tip->prerender(it->tip, dest, TooltipData::STYLE_TOPLABEL);
187 it->wtip->prerender(it->tip, dest, TooltipData::STYLE_TOPLABEL);
181188 std::vector<Loot>::iterator test_it;
182189 for (test_it = loot.begin(); test_it != it; ) {
183 if (test_it->tip_visible && Utils::rectsOverlap(test_it->tip_bounds, tip->bounds)) {
190 if (test_it->tip_visible && Utils::rectsOverlap(test_it->wtip->bounds, it->wtip->bounds)) {
184191 if (tooltip_below)
185 dest.y = test_it->tip_bounds.y + test_it->tip_bounds.h + eset->tooltips.offset;
192 dest.y = test_it->wtip->bounds.y + test_it->wtip->bounds.h + eset->tooltips.offset;
186193 else
187 dest.y = test_it->tip_bounds.y - test_it->tip_bounds.h + eset->tooltips.offset;
188
189 tip->bounds.y = dest.y;
194 dest.y = test_it->wtip->bounds.y - test_it->wtip->bounds.h + eset->tooltips.offset;
195
196 it->wtip->bounds.y = dest.y;
190197 }
191198
192199 ++test_it;
193200 }
194201
195 tip->render(it->tip, dest, TooltipData::STYLE_TOPLABEL);
196 it->tip_bounds = tip->bounds;
202 it->wtip->render(it->tip, dest, TooltipData::STYLE_TOPLABEL);
197203
198204 if (settings->loot_tooltips == Settings::LOOT_TIPS_HIDE_ALL && !inpt->pressing[Input::ALT])
199205 break;
212218 */
213219 void LootManager::checkEnemiesForLoot() {
214220 for (unsigned i=0; i < enemiesDroppingLoot.size(); ++i) {
215 Enemy *e = enemiesDroppingLoot[i];
216
217 if (e->stats.quest_loot_id != 0) {
221 StatBlock *e = enemiesDroppingLoot[i];
222
223 if (!e)
224 continue;
225
226 if (e->quest_loot_id != 0) {
218227 // quest loot
219228 std::vector<EventComponent> quest_loot_table;
220229 EventComponent ec;
221230 ec.type = EventComponent::LOOT;
222 ec.c = e->stats.quest_loot_id;
231 ec.id = e->quest_loot_id;
223232 ec.a = ec.b = 1;
224233 ec.z = 0;
225234
226235 quest_loot_table.push_back(ec);
227 checkLoot(quest_loot_table, &e->stats.pos, NULL);
228 }
229
230 if (!e->stats.loot_table.empty()) {
236 checkLoot(quest_loot_table, &e->pos, NULL);
237 }
238
239 if (!e->loot_table.empty()) {
231240 unsigned drops;
232 if (e->stats.loot_count.y != 0) {
233 drops = Math::randBetween(e->stats.loot_count.x, e->stats.loot_count.y);
241 if (e->loot_count.y != 0) {
242 drops = Math::randBetween(e->loot_count.x, e->loot_count.y);
234243 }
235244 else {
236245 drops = Math::randBetween(1, eset->loot.drop_max);
237246 }
238247
239248 for (unsigned j=0; j<drops; ++j) {
240 checkLoot(e->stats.loot_table, &e->stats.pos, NULL);
241 }
242
243 e->stats.loot_table.clear();
249 checkLoot(e->loot_table, &e->pos, NULL);
250 }
251
252 e->loot_table.clear();
244253 }
245254 }
246255 enemiesDroppingLoot.clear();
269278 }
270279 }
271280
272 void LootManager::addEnemyLoot(Enemy *e) {
281 void LootManager::addEnemyLoot(StatBlock *e) {
273282 enemiesDroppingLoot.push_back(e);
274283 }
275284
279288 ItemStack new_loot;
280289 std::vector<EventComponent*> possible_ids;
281290
282 int chance = Math::randBetween(1,100);
291 float chance = Math::randBetweenF(0,100);
283292
284293 // first drop any 'fixed' (0% chance) items
285294 for (size_t i = loot_table.size(); i > 0; i--) {
286295 ec = &loot_table[i-1];
287 if (ec->z == 0) {
296 if (ec->f == 0) {
288297 checkLootComponent(ec, pos, itemstack_vec);
289298 loot_table.erase(loot_table.begin()+i-1);
290299 }
291300 }
292301
293302 // now pick up to 1 random item to drop
294 int threshold = pc->stats.get(Stats::ITEM_FIND) + 100;
303 float threshold = static_cast<float>(pc->stats.get(Stats::ITEM_FIND) + 100);
295304 for (unsigned i = 0; i < loot_table.size(); i++) {
296305 ec = &loot_table[i];
297306
298 int real_chance = ec->z;
299
300 if (ec->c != 0 && ec->c != eset->misc.currency_id) {
301 real_chance = static_cast<int>(static_cast<float>(ec->z) * static_cast<float>(pc->stats.get(Stats::ITEM_FIND) + 100) / 100.f);
307 float real_chance = ec->f;
308
309 if (ec->id != 0) {
310 real_chance = ec->f * static_cast<float>(pc->stats.get(Stats::ITEM_FIND) + 100) / 100.f;
302311 }
303312
304313 if (real_chance >= chance) {
325334 }
326335
327336 void LootManager::addLoot(ItemStack stack, const FPoint& pos, bool dropped_by_hero) {
328 if (static_cast<size_t>(stack.item) >= items->items.size()) {
329 Utils::logError("LootManager: Loot item with id %d is not valid.", stack.item);
330 return;
331 }
332
333337 Loot ld;
334338 ld.stack = stack;
335339 ld.pos.x = pos.x;
336340 ld.pos.y = pos.y;
337341 ld.pos.align(); // prevent "rounding jitter"
338342 ld.dropped_by_hero = dropped_by_hero;
343
344 // merge stacks that have the same item id and position
345 std::vector<Loot>::iterator it;
346 for (it = loot.end(); it != loot.begin(); ) {
347 --it;
348 if (it->stack.item == ld.stack.item && it->pos.x == ld.pos.x && it->pos.y == ld.pos.y) {
349 it->stack.quantity += ld.stack.quantity;
350 it->tip.clear();
351 snd->play(sfx_loot, snd->DEFAULT_CHANNEL, pos, false);
352 return;
353 }
354 }
339355
340356 if (!items->items[stack.item].loot_animation.empty()) {
341357 size_t index = items->items[stack.item].loot_animation.size()-1;
386402 r.w = eset->tileset.tile_w;
387403 r.h = eset->tileset.tile_h;
388404
389 if (it_tip == loot.end() && it->tip_visible && Utils::isWithinRect(it->tip_bounds, mouse)) {
405 if (it_tip == loot.end() && it->tip_visible && Utils::isWithinRect(it->wtip->bounds, mouse)) {
390406 // clicked on a tooltip
391407 curs->setCursor(CursorManager::CURSOR_INTERACT);
392408 if (inpt->pressing[Input::MAIN1] && !inpt->lock[Input::MAIN1] && !it->stack.empty()) {
501517 e->s = Parse::popFirstString(val);
502518
503519 if (e->s == "currency")
504 e->c = eset->misc.currency_id;
520 e->id = eset->misc.currency_id;
505521 else if (Parse::toInt(e->s, -1) != -1)
506 e->c = Parse::toInt(e->s);
522 e->id = Parse::toItemID(e->s);
507523 else if (ec_list) {
508524 // load entire loot table
509525 std::string filename = e->s;
522538
523539 // drop chance
524540 chance = Parse::popFirstString(val);
525 if (chance == "fixed") e->z = 0;
526 else e->z = Parse::toInt(chance);
541 if (chance == "fixed") e->f = 0;
542 else e->f = Parse::toFloat(chance);
527543
528544 // quantity min/max
529545 e->a = std::max(Parse::popFirstInt(val), 1);
540556
541557 ec->s = repeat_val;
542558 if (ec->s == "currency")
543 ec->c = eset->misc.currency_id;
559 ec->id = eset->misc.currency_id;
544560 else if (Parse::toInt(ec->s, -1) != -1)
545 ec->c = Parse::toInt(ec->s);
561 ec->id = Parse::toItemID(ec->s);
546562 else {
547563 // remove the last event component, since getLootTable() will create a new one
548564 ec_list->pop_back();
554570 }
555571
556572 chance = Parse::popFirstString(val);
557 if (chance == "fixed") ec->z = 0;
558 else ec->z = Parse::toInt(chance);
573 if (chance == "fixed") ec->f = 0;
574 else ec->f = Parse::toFloat(chance);
559575
560576 ec->a = std::max(Parse::popFirstInt(val), 1);
561577 ec->b = std::max(Parse::popFirstInt(val), ec->a);
600616 ec->s = infile.val;
601617
602618 if (ec->s == "currency")
603 ec->c = eset->misc.currency_id;
619 ec->id = eset->misc.currency_id;
604620 else if (Parse::toInt(ec->s, -1) != -1)
605 ec->c = Parse::toInt(ec->s);
621 ec->id = Parse::toItemID(ec->s);
606622 else {
607623 skip_to_next = true;
608624 infile.error("LootManager: Invalid item id for loot.");
610626 }
611627 else if (infile.key == "chance") {
612628 if (infile.val == "fixed")
613 ec->z = 0;
629 ec->f = 0;
614630 else
615 ec->z = Parse::toInt(infile.val);
631 ec->f = Parse::toFloat(infile.val);
616632 }
617633 else if (infile.key == "quantity") {
618634 ec->a = std::max(Parse::popFirstInt(infile.val), 1);
631647
632648 std::map<std::string, std::vector<EventComponent> >::iterator it;
633649 for (it = loot_tables.begin(); it != loot_tables.end(); ++it) {
634 if (it->first == filename) {
650 if (it->first == Filesystem::convertSlashes(filename)) {
635651 std::vector<EventComponent> *loot_defs = &it->second;
636652 for (unsigned i=0; i<loot_defs->size(); ++i) {
637653 ec_list->push_back((*loot_defs)[i]);
674690 new_loot.quantity = Math::randBetween(ec->a,ec->b);
675691
676692 // an item id of 0 means we should drop currency instead
677 if (ec->c == 0 || ec->c == eset->misc.currency_id) {
693 if (ec->id == 0 || ec->id == eset->misc.currency_id) {
678694 new_loot.item = eset->misc.currency_id;
679695 new_loot.quantity = new_loot.quantity * (100 + pc->stats.get(Stats::CURRENCY_FIND)) / 100;
680696 }
681697 else {
682 new_loot.item = ec->c;
698 new_loot.item = ec->id;
683699 }
684700
685701 if (itemstack_vec)
688704 addLoot(new_loot, p, !DROPPED_BY_HERO);
689705 }
690706
707 void LootManager::removeFromEnemiesDroppingLoot(StatBlock* sb) {
708 for (size_t i = enemiesDroppingLoot.size(); i > 0; i--) {
709 // enemies will actually be removed the next time checkEnemiesForLoot() runs
710 if (enemiesDroppingLoot[i-1] == sb)
711 enemiesDroppingLoot[i-1] = NULL;
712 }
713 }
714
691715 LootManager::~LootManager() {
692716 // remove all items in the item database
693 for (unsigned int i=0; i < items->items.size(); i++) {
694 if (items->items[i].loot_animation.empty()) continue;
695
696 for (unsigned int j=0; j<items->items[i].loot_animation.size(); j++) {
697 anim->decreaseCount(items->items[i].loot_animation[j].name);
698 delete animations[i][j];
717 std::map<ItemID, Item>::iterator item_it;
718 for (item_it = items->items.begin(); item_it != items->items.end(); ++item_it) {
719 if (item_it->second.loot_animation.empty())
720 continue;
721
722 for (size_t i = 0; i < item_it->second.loot_animation.size(); ++i) {
723 anim->decreaseCount(item_it->second.loot_animation[i].name);
724 delete animations[item_it->first][i];
699725 }
700726 }
701727
705731 anim->cleanUp();
706732
707733 snd->unload(sfx_loot);
708
709 delete tip;
710 }
734 }
3333 #include "Utils.h"
3434
3535 class Animation;
36
3736 class EnemyManager;
38 class WidgetTooltip;
37 class StatBlock;
3938
4039 class LootManager {
4140 private:
42
43 WidgetTooltip *tip;
44
4541 // functions
4642 void loadGraphics();
4743 void checkEnemiesForLoot();
5652 std::vector<Loot> loot;
5753
5854 // enemies which should drop loot, but didnt yet.
59 std::vector<class Enemy*> enemiesDroppingLoot;
55 std::vector<class StatBlock*> enemiesDroppingLoot;
6056
6157 // loot tables defined in files under "loot/"
6258 std::map<std::string, std::vector<EventComponent> > loot_tables;
6561 // we block tiles that have loot dropped on them
6662 std::vector<Point> tiles_to_unblock;
6763
68 std::vector< std::vector<Animation*> > animations;
64 std::map< size_t, std::vector<Animation*> > animations;
6965
7066 public:
7167 static const bool DROPPED_BY_HERO = true;
7975 void renderTooltips(const FPoint& cam);
8076
8177 // called by enemy, who definitly wants to drop loot.
82 void addEnemyLoot(Enemy *e);
78 void addEnemyLoot(StatBlock *e);
8379 void addLoot(ItemStack stack, const FPoint& pos, bool dropped_by_hero);
8480 void checkLoot(std::vector<EventComponent> &loot_table, FPoint *pos, std::vector<ItemStack> *itemstack_vec);
8581 ItemStack checkPickup(const Point& mouse, const FPoint& cam, const FPoint& hero_pos);
8985 void addRenders(std::vector<Renderable> &ren, std::vector<Renderable> &ren_dead);
9086
9187 void parseLoot(std::string &val, EventComponent *e, std::vector<EventComponent> *ec_list);
88
89 void removeFromEnemiesDroppingLoot(StatBlock* sb);
9290 };
9391
9492 #endif
7777 clearQueues();
7878
7979 music_filename = "";
80 parallax_filename = "";
81 background_color = Color(0,0,0,0);
8082
8183 collision_layer = -1;
8284 w = 1;
124126 EventComponent *ec_power = events[i].getComponent(EventComponent::POWER);
125127 if (ec_power) {
126128 // store the index of this StatBlock so that we can find it when the event is activated
127 ec_power->y = addEventStatBlock(events[i]);
129 ec_power->x = addEventStatBlock(events[i]);
128130 }
129131 }
130132
394396 if (ec_damage) {
395397 for (size_t i = 0; i < eset->damage_types.count; ++i) {
396398 if (i % 2 == 0) {
397 statb->starting[Stats::COUNT + i] = ec_damage->a; // min
399 statb->starting[Stats::COUNT + i] = ec_damage->x; // min
398400 }
399401 else {
400 statb->starting[Stats::COUNT + i] = ec_damage->b; // max
402 statb->starting[Stats::COUNT + i] = ec_damage->y; // max
401403 }
402404 }
403405 }
411413 // create a temporary EffectDef for immunity; will be used for map StatBlocks
412414 EffectDef immunity_effect;
413415 immunity_effect.id = "MAP_EVENT_IMMUNITY";
414 immunity_effect.type = "immunity";
416 immunity_effect.type = Effect::IMMUNITY;
415417 statb->effects.addEffect(immunity_effect, 0, 0, Power::SOURCE_TYPE_ENEMY, EffectManager::NO_POWER);
416418
417419 // ensure the statblock will be alive
9494 int wander_radius;
9595 bool hero_ally;
9696 bool enemy_ally;
97 int summon_power_index;
97 PowerID summon_power_index;
9898 StatBlock* summoner;
9999 std::vector<StatusID> requires_status;
100100 std::vector<StatusID> requires_not_status;
516516 const int tile_x = int(map_x);
517517 const int tile_y = int(map_y);
518518
519 if (colmap[tile_x][tile_y] == BLOCKS_ENTITIES || colmap[tile_x][tile_y] == BLOCKS_ENEMIES) {
519 if (colmap[tile_x][tile_y] == BLOCKS_ENTITIES || colmap[tile_x][tile_y] == BLOCKS_ENEMIES ||
520 // TODO: check this logic
521 colmap[tile_x][tile_y] == BLOCKS_MOVEMENT_HIDDEN) {
520522 colmap[tile_x][tile_y] = BLOCKS_NONE;
521523 }
522524
2626
2727 MapParallax::MapParallax()
2828 : current_layer(0)
29 , loaded(false)
30 , current_filename("")
2931 {
3032 }
3133
3941 }
4042
4143 layers.clear();
44
45 loaded = false;
4246 }
4347
4448 void MapParallax::load(const std::string& filename) {
49 current_filename = filename;
50
51 if (loaded)
52 clear();
53
4554 if (!settings->parallax_layers)
4655 return;
47
48 clear();
4956
5057 // @CLASS MapParallax|Description of maps/parallax/
5158 FileParser infile;
8390
8491 infile.close();
8592 }
93
94 loaded = true;
8695 }
8796
8897 void MapParallax::setMapCenter(int x, int y) {
91100 }
92101
93102 void MapParallax::render(const FPoint& cam, const std::string& map_layer) {
94 if (!settings->parallax_layers)
103 if (!settings->parallax_layers) {
104 if (loaded)
105 clear();
106
95107 return;
108 }
109 else if (!loaded) {
110 load(current_filename);
111 }
96112
97113 if (map_layer.empty())
98114 current_layer = 0;
5151 std::vector<MapParallaxLayer> layers;
5252 FPoint map_center;
5353 size_t current_layer;
54 bool loaded;
55 std::string current_filename;
5456 };
5557
5658 #endif
1919 */
2020
2121 #include "Avatar.h"
22 #include "Camera.h"
2223 #include "CampaignManager.h"
2324 #include "CombatText.h"
2425 #include "CommonIncludes.h"
2526 #include "CursorManager.h"
26 #include "Enemy.h"
2727 #include "EnemyGroupManager.h"
28 #include "EnemyManager.h"
28 #include "Entity.h"
29 #include "EntityManager.h"
2930 #include "EngineSettings.h"
3031 #include "EventManager.h"
3132 #include "Hazard.h"
5556 , tip(new WidgetTooltip())
5657 , tip_pos()
5758 , show_tooltip(false)
58 , shakycam()
5959 , entity_hidden_normal(NULL)
6060 , entity_hidden_enemy(NULL)
6161 , cam()
6565 , respawn_point()
6666 , cutscene(false)
6767 , cutscene_file("")
68 , shaky_cam_timer()
6968 , stash(false)
7069 , stash_pos()
7170 , enemies_cleared(false)
7372 , npc_id(-1)
7473 , show_book("")
7574 , index_objectlayer(0)
75 , is_spawn_map(false)
7676 {
7777 // Load entity markers
7878 Image *gfx = render_device->loadImage("images/menus/entity_hidden.png", RenderDevice::ERROR_NORMAL);
195195 comb->clear();
196196
197197 show_tooltip = false;
198
199 parallax_filename = "";
200
201 background_color = Color(0,0,0,0);
198 is_spawn_map = (fname == "maps/spawn.txt");
202199
203200 Map::load(fname);
204201
250247 }
251248 }
252249
253 map_parallax.load(parallax_filename);
254 map_parallax.setMapCenter(w/2, h/2);
250 setMapParallax(parallax_filename);
255251
256252 render_device->setBackgroundColor(background_color);
257253
280276 if (paused)
281277 return;
282278
283 // handle camera shaking timer
284 shaky_cam_timer.tick();
285
286 if (shaky_cam_timer.isEnd()) {
287 shakycam.x = cam.x;
288 shakycam.y = cam.y;
289 }
290 else {
291 shakycam.x = cam.x + static_cast<float>((rand() % 16 - 8)) * 0.0078125f;
292 shakycam.y = cam.y + static_cast<float>((rand() % 16 - 8)) * 0.0078125f;
293 }
294
295
296279 // handle statblock logic for map powers
297280 for (unsigned i=0; i<statblocks.size(); ++i) {
298 statblocks[i].logic();
281 for (size_t j=0; j<statblocks[i].powers_ai.size(); ++j) {
282 statblocks[i].powers_ai[j].cooldown.tick();
283 }
299284 }
300285
301286 // handle event cooldowns
318303 it = delayed_events.erase(it);
319304 }
320305 }
306
307 cam.logic();
321308 }
322309
323310 bool priocompare(const Renderable &r1, const Renderable &r2) {
349336
350337 void MapRenderer::render(std::vector<Renderable> &r, std::vector<Renderable> &r_dead) {
351338
352 map_parallax.render(shakycam, "");
339 map_parallax.render(cam.shake, "");
353340
354341 if (eset->tileset.orientation == eset->tileset.TILESET_ORTHOGONAL) {
355342 calculatePriosOrtho(r);
372359 void MapRenderer::drawRenderable(std::vector<Renderable>::iterator r_cursor) {
373360 if (r_cursor->image != NULL) {
374361 Rect dest;
375 Point p = Utils::mapToScreen(r_cursor->map_pos.x, r_cursor->map_pos.y, shakycam.x, shakycam.y);
362 Point p = Utils::mapToScreen(r_cursor->map_pos.x, r_cursor->map_pos.y, cam.shake.x, cam.shake.y);
376363 dest.x = p.x - r_cursor->offset.x;
377364 dest.y = p.y - r_cursor->offset.y;
378365 render_device->render(*r_cursor, dest);
383370 int_fast16_t i; // first index of the map array
384371 int_fast16_t j; // second index of the map array
385372 Point dest;
386 const Point upperleft(Utils::screenToMap(0, 0, shakycam.x, shakycam.y));
373 const Point upperleft(Utils::screenToMap(0, 0, cam.shake.x, cam.shake.y));
387374 const int_fast16_t max_tiles_width = static_cast<int_fast16_t>((settings->view_w / eset->tileset.tile_w) + 2*tset.max_size_x);
388375 const int_fast16_t max_tiles_height = static_cast<int_fast16_t>((2 * settings->view_h / eset->tileset.tile_h) + 2*(tset.max_size_y+1));
389376
412399 // lower left (south west) corner is caught by having 0 in there, so j>0
413400 const int_fast16_t j_end = std::max(static_cast<int_fast16_t>(j+i-w+1), std::max(static_cast<int_fast16_t>(j - max_tiles_width), static_cast<int_fast16_t>(0)));
414401
415 Point p = Utils::mapToScreen(float(i), float(j), shakycam.x, shakycam.y);
402 Point p = Utils::mapToScreen(float(i), float(j), cam.shake.x, cam.shake.y);
416403 p = centerTile(p);
417404
418405 // draw one horizontal line
451438 void MapRenderer::renderIsoFrontObjects(std::vector<Renderable> &r) {
452439 Point dest;
453440
454 const Point upperleft(Utils::screenToMap(0, 0, shakycam.x, shakycam.y));
441 const Point upperleft(Utils::screenToMap(0, 0, cam.shake.x, cam.shake.y));
455442 const int_fast16_t max_tiles_width = static_cast<int_fast16_t>((settings->view_w / eset->tileset.tile_w) + 2 * tset.max_size_x);
456443 const int_fast16_t max_tiles_height = static_cast<int_fast16_t>(((settings->view_h / eset->tileset.tile_h) + 2 * tset.max_size_y)*2);
457444
492479 const int_fast16_t j_end = std::max(static_cast<int_fast16_t>(j+i-w+1), std::max(static_cast<int_fast16_t>(j - max_tiles_width), static_cast<int_fast16_t>(0)));
493480
494481 // draw one horizontal line
495 Point p = Utils::mapToScreen(float(i), float(j), shakycam.x, shakycam.y);
482 Point p = Utils::mapToScreen(float(i), float(j), cam.shake.x, cam.shake.y);
496483 p = centerTile(p);
497484 const Map_Layer &current_layer = layers[index_objectlayer];
498485 bool is_last_NE_tile = false;
562549 draw_NE_tile = !is_last_NE_tile;
563550
564551 // r_cursor left/right side
565 Point r_cursor_left = Utils::mapToScreen(r_cursor->map_pos.x, r_cursor->map_pos.y, shakycam.x, shakycam.y);
552 Point r_cursor_left = Utils::mapToScreen(r_cursor->map_pos.x, r_cursor->map_pos.y, cam.shake.x, cam.shake.y);
566553 r_cursor_left.y -= r_cursor->offset.y;
567554 Point r_cursor_right = r_cursor_left;
568555 r_cursor_left.x -= r_cursor->offset.x;
667654 size_t index = 0;
668655 while (index < index_objectlayer) {
669656 renderIsoLayer(layers[index]);
670 map_parallax.render(shakycam, layernames[index]);
657 map_parallax.render(cam.shake, layernames[index]);
671658 index++;
672659 }
673660
674661 renderIsoBackObjects(r_dead);
675662 renderIsoFrontObjects(r);
676 map_parallax.render(shakycam, layernames[index]);
663 map_parallax.render(cam.shake, layernames[index]);
677664
678665 index++;
679666 while (index < layers.size()) {
680667 renderIsoLayer(layers[index]);
681 map_parallax.render(shakycam, layernames[index]);
668 map_parallax.render(cam.shake, layernames[index]);
682669 index++;
683670 }
684671
691678 void MapRenderer::renderOrthoLayer(const Map_Layer& layerdata) {
692679
693680 Point dest;
694 const Point upperleft(Utils::screenToMap(0, 0, shakycam.x, shakycam.y));
681 const Point upperleft(Utils::screenToMap(0, 0, cam.shake.x, cam.shake.y));
695682
696683 short int startj = static_cast<short int>(std::max(0, upperleft.y));
697684 short int starti = static_cast<short int>(std::max(0, upperleft.x));
702689 short int j;
703690
704691 for (j = startj; j < max_tiles_height; j++) {
705 Point p = Utils::mapToScreen(starti, j, shakycam.x, shakycam.y);
692 Point p = Utils::mapToScreen(starti, j, cam.shake.x, cam.shake.y);
706693 p = centerTile(p);
707694 for (i = starti; i < max_tiles_width; i++) {
708695
733720 std::vector<Renderable>::iterator r_cursor = r.begin();
734721 std::vector<Renderable>::iterator r_end = r.end();
735722
736 const Point upperleft(Utils::screenToMap(0, 0, shakycam.x, shakycam.y));
723 const Point upperleft(Utils::screenToMap(0, 0, cam.shake.x, cam.shake.y));
737724
738725 short int startj = static_cast<short int>(std::max(0, upperleft.y));
739726 short int starti = static_cast<short int>(std::max(0, upperleft.x));
747734 return;
748735
749736 for (j = startj; j < max_tiles_height; j++) {
750 Point p = Utils::mapToScreen(starti, j, shakycam.x, shakycam.y);
737 Point p = Utils::mapToScreen(starti, j, cam.shake.x, cam.shake.y);
751738 p = centerTile(p);
752739 for (i = starti; i<max_tiles_width; i++) {
753740
777764 unsigned index = 0;
778765 while (index < index_objectlayer) {
779766 renderOrthoLayer(layers[index]);
780 map_parallax.render(shakycam, layernames[index]);
767 map_parallax.render(cam.shake, layernames[index]);
781768 index++;
782769 }
783770
784771 renderOrthoBackObjects(r_dead);
785772 renderOrthoFrontObjects(r);
786 map_parallax.render(shakycam, layernames[index]);
773 map_parallax.render(cam.shake, layernames[index]);
787774
788775 index++;
789776 while (index < layers.size()) {
790777 renderOrthoLayer(layers[index]);
791 map_parallax.render(shakycam, layernames[index]);
778 map_parallax.render(cam.shake, layernames[index]);
792779 index++;
793780 }
794781
828815 it = events.erase(it);
829816 }
830817 }
818
819 // Also check static events, as they should execute alongside on_load events
820 // Yet, this should be done *after* the on_load events to not break old behavior.
821 // That's why we don't just check static events in the above loop
822 for (it = events.end(); it != events.begin(); ) {
823 --it;
824
825 // skip inactive events
826 if (!EventManager::isActive(*it)) continue;
827
828 if ((*it).activate_type == Event::ACTIVATE_STATIC) {
829 if (EventManager::executeEvent(*it))
830 it = events.erase(it);
831 }
832 }
831833 }
832834
833835 void MapRenderer::executeOnMapExitEvents() {
893895 }
894896 }
895897 }
896 else if ((*it).activate_type == -1 || (*it).activate_type == Event::ACTIVATE_ON_TRIGGER) {
898 else if ((*it).activate_type == Event::ACTIVATE_ON_TRIGGER) {
897899 if (inside)
898900 if (EventManager::executeEvent(*it))
899901 it = events.erase(it);
922924 for (it = events.end(); it != events.begin(); ) {
923925 --it;
924926
927 // skip inactive events
928 if (!EventManager::isActive(*it)) continue;
929
930 // skip events without hotspots
931 if (it->hotspot.h == 0) continue;
932
933 // skip events on cooldown
934 if (!it->cooldown.isEnd() || !it->delay.isEnd()) continue;
935
936 EventComponent* npc = (*it).getComponent(EventComponent::NPC_HOTSPOT);
937
925938 for (int x=it->hotspot.x; x < it->hotspot.x + it->hotspot.w; ++x) {
926939 for (int y=it->hotspot.y; y < it->hotspot.y + it->hotspot.h; ++y) {
927940 bool matched = false;
928941 bool is_npc = false;
929942
930 EventComponent* npc = (*it).getComponent(EventComponent::NPC_HOTSPOT);
931943 if (npc) {
932944 is_npc = true;
933945
934 Point p = Utils::mapToScreen(float(npc->x), float(npc->y), shakycam.x, shakycam.y);
946 Point p = Utils::mapToScreen(float(npc->x), float(npc->y), cam.shake.x, cam.shake.y);
935947 p = centerTile(p);
936948
937949 Rect dest;
948960 }
949961 else {
950962 for (unsigned index = 0; index <= index_objectlayer; ++index) {
951 Point p = Utils::mapToScreen(float(x), float(y), shakycam.x, shakycam.y);
963 Point p = Utils::mapToScreen(float(x), float(y), cam.shake.x, cam.shake.y);
952964 p = centerTile(p);
953965
954966 if (const short current_tile = layers[index][x][y]) {
962974
963975 if (Utils::isWithinRect(dest, inpt->mouse)) {
964976 matched = true;
965 tip_pos = Utils::mapToScreen(it->center.x, it->center.y, shakycam.x, shakycam.y);
977 tip_pos = Utils::mapToScreen(it->center.x, it->center.y, cam.shake.x, cam.shake.y);
966978 tip_pos.y -= eset->tileset.tile_h;
967979 }
968980 }
970982 }
971983
972984 if (matched) {
973 // skip inactive events
974 if (!EventManager::isActive(*it)) continue;
975
976 // skip events without hotspots
977 if (it->hotspot.h == 0) continue;
978
979 // skip events on cooldown
980 if (!it->cooldown.isEnd() || !it->delay.isEnd()) continue;
981
982985 // new tooltip?
983986 createTooltip(it->getComponent(EventComponent::TOOLTIP));
984987
985 if (((it->reachable_from.w == 0 && it->reachable_from.h == 0) || Utils::isWithinRect(it->reachable_from, Point(cam)))
986 && Utils::calcDist(cam, it->center) < eset->misc.interact_range) {
988 if (((it->reachable_from.w == 0 && it->reachable_from.h == 0) || Utils::isWithinRect(it->reachable_from, Point(cam.pos)))
989 && Utils::calcDist(pc->stats.pos, it->center) < eset->misc.interact_range) {
987990
988991 // only check events if the player is clicking
989992 // and allowed to click
10291032 // skip events on cooldown
10301033 if (!it->cooldown.isEnd() || !it->delay.isEnd()) continue;
10311034
1032 float distance = Utils::calcDist(cam, it->center);
1033 if (((it->reachable_from.w == 0 && it->reachable_from.h == 0) || Utils::isWithinRect(it->reachable_from, Point(cam)))
1035 float distance = Utils::calcDist(pc->stats.pos, it->center);
1036 if (((it->reachable_from.w == 0 && it->reachable_from.h == 0) || Utils::isWithinRect(it->reachable_from, Point(cam.pos)))
10341037 && distance < eset->misc.interact_range && distance < best_distance) {
10351038 best_distance = distance;
10361039 nearest = it;
10421045 if (!inpt->usingMouse() || settings->touchscreen) {
10431046 // new tooltip?
10441047 createTooltip(nearest->getComponent(EventComponent::TOOLTIP));
1045 tip_pos = Utils::mapToScreen(nearest->center.x, nearest->center.y, shakycam.x, shakycam.y);
1048 tip_pos = Utils::mapToScreen(nearest->center.x, nearest->center.y, cam.shake.x, cam.shake.y);
10461049 if (nearest->getComponent(EventComponent::NPC_HOTSPOT)) {
10471050 tip_pos.y -= eset->tooltips.margin_npc;
10481051 }
10821085 /**
10831086 * Activate a power that is attached to an event
10841087 */
1085 void MapRenderer::activatePower(int power_index, unsigned statblock_index, FPoint &target) {
1086 if (power_index < 0 || static_cast<unsigned>(power_index) >= powers->powers.size()) {
1087 Utils::logError("MapRenderer: Power index is out of bounds.");
1088 void MapRenderer::activatePower(PowerID power_index, unsigned statblock_index, FPoint &target) {
1089 if (powers->powers[power_index].is_empty) {
1090 Utils::logError("MapRenderer: Power index %d is not valid.", power_index);
10881091 return;
10891092 }
10901093
11281131 const Tile_Def &tile = tset.tiles[tile_index];
11291132 if (!tile.tile)
11301133 return;
1131 center = centerTile(Utils::mapToScreen(float(x), float(y), shakycam.x, shakycam.y));
1134 center = centerTile(Utils::mapToScreen(float(x), float(y), cam.shake.x, cam.shake.y));
11321135 bounds.x = center.x - tile.offset.x;
11331136 bounds.y = center.y - tile.offset.y;
11341137 bounds.w = tile.tile->getClip().w;
11431146 return;
11441147
11451148 Color dev_cursor_color = Color(255,255,0,255);
1146 FPoint target = Utils::screenToMap(inpt->mouse.x, inpt->mouse.y, shakycam.x, shakycam.y);
1149 FPoint target = Utils::screenToMap(inpt->mouse.x, inpt->mouse.y, cam.shake.x, cam.shake.y);
11471150
11481151 if (!collider.isOutsideMap(floorf(target.x), floorf(target.y))) {
11491152 if (eset->tileset.orientation == eset->tileset.TILESET_ORTHOGONAL) {
1150 Point p_topleft = Utils::mapToScreen(floorf(target.x), floorf(target.y), shakycam.x, shakycam.y);
1153 Point p_topleft = Utils::mapToScreen(floorf(target.x), floorf(target.y), cam.shake.x, cam.shake.y);
11511154 Point p_bottomright(p_topleft.x + eset->tileset.tile_w, p_topleft.y + eset->tileset.tile_h);
11521155
11531156 render_device->drawRectangle(p_topleft, p_bottomright, dev_cursor_color);
11541157 }
11551158 else {
1156 Point p_left = Utils::mapToScreen(floorf(target.x), floorf(target.y+1), shakycam.x, shakycam.y);
1159 Point p_left = Utils::mapToScreen(floorf(target.x), floorf(target.y+1), cam.shake.x, cam.shake.y);
11571160 Point p_top(p_left.x + eset->tileset.tile_w_half, p_left.y - eset->tileset.tile_h_half);
11581161 Point p_right(p_left.x + eset->tileset.tile_w, p_left.y);
11591162 Point p_bottom(p_left.x + eset->tileset.tile_w_half, p_left.y + eset->tileset.tile_h_half);
11661169
11671170 // draw distance line
11681171 if (menu->devconsole->distance_timer.isEnd()) {
1169 Point p0 = Utils::mapToScreen(menu->devconsole->target.x, menu->devconsole->target.y, shakycam.x, shakycam.y);
1170 Point p1 = Utils::mapToScreen(pc->stats.pos.x, pc->stats.pos.y, shakycam.x, shakycam.y);
1172 Point p0 = Utils::mapToScreen(menu->devconsole->target.x, menu->devconsole->target.y, cam.shake.x, cam.shake.y);
1173 Point p1 = Utils::mapToScreen(pc->stats.pos.x, pc->stats.pos.y, cam.shake.x, cam.shake.y);
11711174 render_device->drawLine(p0.x, p0.y, p1.x, p1.y, dev_cursor_color);
11721175 }
11731176 }
11791182
11801183 Color color_hazard(255,0,0,255);
11811184 Color color_entity(0,255,0,255);
1185 Color color_cam(255,255,0,255);
11821186 int cross_size = eset->tileset.tile_h_half / 4;
11831187
11841188 // ellipses are distorted for isometric tilesets
1185 int distort = eset->tileset.orientation == eset->tileset.TILESET_ORTHOGONAL ? 0 : 2;
1189 int distort = eset->tileset.orientation == eset->tileset.TILESET_ORTHOGONAL ? 1 : 2;
1190
1191 // camera
1192 {
1193 Point p0 = Utils::mapToScreen(cam.pos.x, cam.pos.y, cam.shake.x, cam.shake.y);
1194 render_device->drawLine(p0.x - cross_size, p0.y, p0.x + cross_size, p0.y, color_cam);
1195 render_device->drawLine(p0.x, p0.y - cross_size, p0.x, p0.y + cross_size, color_cam);
1196 }
11861197
11871198 // player
11881199 {
1189 Point p0 = Utils::mapToScreen(pc->stats.pos.x, pc->stats.pos.y, shakycam.x, shakycam.y);
1200 Point p0 = Utils::mapToScreen(pc->stats.pos.x, pc->stats.pos.y, cam.shake.x, cam.shake.y);
11901201 render_device->drawLine(p0.x - cross_size, p0.y, p0.x + cross_size, p0.y, color_entity);
11911202 render_device->drawLine(p0.x, p0.y - cross_size, p0.x, p0.y + cross_size, color_entity);
11921203 }
11931204
11941205 // enemies
1195 for (size_t i = 0; i < enemym->enemies.size(); ++i) {
1196 Point p0 = Utils::mapToScreen(enemym->enemies[i]->stats.pos.x, enemym->enemies[i]->stats.pos.y, shakycam.x, shakycam.y);
1206 for (size_t i = 0; i < entitym->entities.size(); ++i) {
1207 Point p0 = Utils::mapToScreen(entitym->entities[i]->stats.pos.x, entitym->entities[i]->stats.pos.y, cam.shake.x, cam.shake.y);
11971208 render_device->drawLine(p0.x - cross_size, p0.y, p0.x + cross_size, p0.y, color_entity);
11981209 render_device->drawLine(p0.x, p0.y - cross_size, p0.x, p0.y + cross_size, color_entity);
11991210 }
12031214 if (hazards->h[i]->delay_frames != 0)
12041215 continue;
12051216
1206 float radius_c = sqrtf(powf(hazards->h[i]->power->radius, 2) + powf(hazards->h[i]->power->radius, 2));
1207 Point p0 = Utils::mapToScreen(hazards->h[i]->pos.x, hazards->h[i]->pos.y, shakycam.x, shakycam.y);
1208 Point p1 = Utils::mapToScreen(hazards->h[i]->pos.x + radius_c, hazards->h[i]->pos.y, shakycam.x, shakycam.y);
1217 Point p0 = Utils::mapToScreen(hazards->h[i]->pos.x, hazards->h[i]->pos.y, cam.shake.x, cam.shake.y);
1218 Point p1 = Utils::mapToScreen(hazards->h[i]->pos.x + hazards->h[i]->power->radius, hazards->h[i]->pos.y, cam.shake.x, cam.shake.y);
12091219 int radius = p1.x - p0.x;
12101220 render_device->drawLine(p0.x - cross_size, p0.y, p0.x + cross_size, p0.y, color_hazard);
12111221 render_device->drawLine(p0.x, p0.y - cross_size, p0.x, p0.y + cross_size, color_hazard);
12151225 }
12161226
12171227 void MapRenderer::drawHiddenEntityMarkers() {
1228 if (!settings->entity_markers)
1229 return;
1230
12181231 std::vector<std::vector<Renderable>::iterator>::iterator hero_it = hidden_entities.end();
12191232 Point hidden_hero_pos(0, settings->view_h);
12201233
12291242 continue;
12301243
12311244 Point dest;
1232 Point p = Utils::mapToScreen(hidden_entities[i]->map_pos.x, hidden_entities[i]->map_pos.y, shakycam.x, shakycam.y);
1245 Point p = Utils::mapToScreen(hidden_entities[i]->map_pos.x, hidden_entities[i]->map_pos.y, cam.shake.x, cam.shake.y);
12331246 dest.x = p.x - marker_w / 2;
12341247 dest.y = p.y - hidden_entities[i]->offset.y - marker_h;
12351248
12631276 }
12641277
12651278 void MapRenderer::checkHiddenEntities(const int_fast16_t x, const int_fast16_t y, const Map_Layer& layerdata, std::vector<Renderable> &r) {
1279 if (!settings->entity_markers)
1280 return;
1281
12661282 Rect tile_bounds;
12671283 Point tile_center;
12681284 getTileBounds(x, y, layerdata, tile_bounds, tile_center);
12961312 is_hidden = true;
12971313 }
12981314 else if (it->type != Renderable::TYPE_NORMAL) {
1299 Point p = Utils::mapToScreen(it->map_pos.x, it->map_pos.y, shakycam.x, shakycam.y);
1315 Point p = Utils::mapToScreen(it->map_pos.x, it->map_pos.y, cam.shake.x, cam.shake.y);
13001316 p.x -= it->offset.x;
13011317 if (Utils::isWithinRect(tile_bounds, p)) {
13021318 is_hidden = true;
13291345 ++it;
13301346 }
13311347 }
1348
1349 void MapRenderer::setMapParallax(const std::string& mp_filename) {
1350 map_parallax.load(mp_filename);
1351 map_parallax.setMapCenter(w/2, h/2);
1352 }
1353
13321354 MapRenderer::~MapRenderer() {
13331355 tip_buf.clear();
13341356 clearLayers();
2727 #ifndef MAP_RENDERER_H
2828 #define MAP_RENDERER_H
2929
30 #include "Camera.h"
3031 #include "CommonIncludes.h"
3132 #include "Map.h"
3233 #include "MapCollision.h"
8182
8283 void checkHiddenEntities(const int_fast16_t x, const int_fast16_t y, const Map_Layer& layerdata, std::vector<Renderable> &r);
8384
84 FPoint shakycam;
8585 TileSet tset;
8686
8787 MapParallax map_parallax;
114114 void executeOnMapExitEvents();
115115
116116 // some events can trigger powers
117 void activatePower(int power_index, unsigned statblock_index, FPoint &target);
117 void activatePower(PowerID power_index, unsigned statblock_index, FPoint &target);
118118
119119 bool isValidTile(const unsigned &tile);
120120 Point centerTile(const Point& p);
121121
122 // cam(x,y) is where on the map the camera is pointing
123 FPoint cam;
122 void setMapParallax(const std::string& mp_filename);
123
124 // cam is where on the map the camera is pointing
125 Camera cam;
124126
125127 // indicates that the map was changed by an event, so the GameStatePlay
126128 // will tell the mini map to update.
142144 // cutscene handling
143145 bool cutscene;
144146 std::string cutscene_file;
145
146 // shaky cam
147 Timer shaky_cam_timer;
148147
149148 // stash handling
150149 bool stash;
175174 * before that are painted below objects; Layers after are painted on top.
176175 */
177176 unsigned index_objectlayer;
177
178 // flag used to prevent rendering when in maps/spawn.txt
179 bool is_spawn_map;
178180 };
179181
180182
2929 #include "EngineSettings.h"
3030 #include "FileParser.h"
3131 #include "FontEngine.h"
32 #include "MapRenderer.h"
3233 #include "Menu.h"
3334 #include "MenuActionBar.h"
3435 #include "MenuInventory.h"
3536 #include "MenuManager.h"
37 #include "MenuPowers.h"
3638 #include "MenuTouchControls.h"
3739 #include "MessageEngine.h"
3840 #include "Platform.h"
5557 , sprite_disabled(NULL)
5658 , sprite_attention(NULL)
5759 , sfx_unable_to_cast(0)
60 , tooltip_length(MenuPowers::TOOLTIP_LONG_MENU)
5861 , slots_count(0)
5962 , drag_prev_slot(-1)
6063 , updated(false)
6770 tablist.setInputs(Input::ACTIONBAR_BACK, Input::ACTIONBAR_FORWARD, Input::ACTIONBAR);
6871
6972 for (unsigned i=0; i<MENU_COUNT; i++) {
70 if (i < MENU_LOOT_TIPS)
71 menus[i] = new WidgetSlot(-1, Input::ACTIONBAR, WidgetSlot::SIZE_NORMAL);
72 else
73 menus[i] = new WidgetSlot(-1, Input::ACTIONBAR, WidgetSlot::SIZE_SMALL);
73 menus[i] = new WidgetSlot(-1, Input::ACTIONBAR);
74 menus[i]->setHotkey(Input::CHARACTER + i);
7475
7576 // NOTE: This prevents these buttons from being clickable unless they get defined in the config file.
7677 // However, it doesn't prevent them from being added to the tablist, so they can still be activated there despite being invisible
8384 menu_titles[MENU_INVENTORY] = msg->get("Inventory");
8485 menu_titles[MENU_POWERS] = msg->get("Powers");
8586 menu_titles[MENU_LOG] = msg->get("Log");
86 menu_titles[MENU_LOOT_TIPS] = msg->get("Loot tooltip visibility");
87 menu_titles[MENU_MINIMAP_MODE] = msg->get("Mini-map mode");
88 menu_titles[MENU_STATBARS_LABELS] = msg->get("Always show stat bar labels");
89 menu_titles[MENU_COMBAT_TEXT] = msg->get("Show combat text");
9087
9188 // Read data from config file
9289 FileParser infile;
156153 menus[MENU_LOG]->setBasePos(x, y, Utils::ALIGN_TOPLEFT);
157154 menus[MENU_LOG]->pos.w = menus[MENU_LOG]->pos.h = eset->resolutions.icon_size;
158155 }
159 // @ATTR loot_tip_toggle|point|Position for the button used to toggle loot tooltip visibility.
160 else if (infile.key == "loot_tip_toggle") {
161 int x = Parse::popFirstInt(infile.val);
162 int y = Parse::popFirstInt(infile.val);
163 menus[MENU_LOOT_TIPS]->setBasePos(x, y, Utils::ALIGN_TOPLEFT);
164 menus[MENU_LOOT_TIPS]->pos.w = menus[MENU_LOOT_TIPS]->pos.h = eset->resolutions.icon_size / 2; // small
165 }
166 // @ATTR minimap_mode_toggle|point|Position for the button used to toggle the mini-map mode.
167 else if (infile.key == "minimap_mode_toggle") {
168 int x = Parse::popFirstInt(infile.val);
169 int y = Parse::popFirstInt(infile.val);
170 menus[MENU_MINIMAP_MODE]->setBasePos(x, y, Utils::ALIGN_TOPLEFT);
171 menus[MENU_MINIMAP_MODE]->pos.w = menus[MENU_MINIMAP_MODE]->pos.h = eset->resolutions.icon_size / 2; // small
172 }
173 // @ATTR statbar_label_toggle|point|Position for the button used to toggle always showing the statbar labels.
174 else if (infile.key == "statbar_label_toggle") {
175 int x = Parse::popFirstInt(infile.val);
176 int y = Parse::popFirstInt(infile.val);
177 menus[MENU_STATBARS_LABELS]->setBasePos(x, y, Utils::ALIGN_TOPLEFT);
178 menus[MENU_STATBARS_LABELS]->pos.w = menus[MENU_STATBARS_LABELS]->pos.h = eset->resolutions.icon_size / 2; // small
179 }
180 // @ATTR combat_text_toggle|point|Position for the button used to toggle the display of combat text.
181 else if (infile.key == "combat_text_toggle") {
182 int x = Parse::popFirstInt(infile.val);
183 int y = Parse::popFirstInt(infile.val);
184 menus[MENU_COMBAT_TEXT]->setBasePos(x, y, Utils::ALIGN_TOPLEFT);
185 menus[MENU_COMBAT_TEXT]->pos.w = menus[MENU_COMBAT_TEXT]->pos.h = eset->resolutions.icon_size / 2; // small
156 // @ATTR tooltip_length|["short", "long_menu", "long_all"]|The length of power descriptions in tooltips. 'short' will display only the power name. 'long_menu' (the default setting) will display full tooltips, but only for powers that are in the Powers menu. 'long_all' will display full tooltips for all powers.
157 else if (infile.key == "tooltip_length") {
158 if (infile.val == "short")
159 tooltip_length = MenuPowers::TOOLTIP_SHORT;
160 else if (infile.val == "long_menu")
161 tooltip_length = MenuPowers::TOOLTIP_LONG_MENU;
162 else if (infile.val == "long_all")
163 tooltip_length = MenuPowers::TOOLTIP_LONG_ALL;
164 else
165 infile.error("MenuActionBar: '%s' is not a valid tooltip_length setting.", infile.val.c_str());
186166 }
187167
188168 else infile.error("MenuActionBar: '%s' is not a valid key.", infile.key.c_str());
206186 slot_cooldown_size.resize(slots_count);
207187 slot_fail_cooldown.resize(slots_count);
208188
209 clear();
189 clear(!MenuActionBar::CLEAR_SKIP_ITEMS);
210190
211191 loadGraphics();
212192
224204 slots.resize(index+1, NULL);
225205 }
226206
227 slots[index] = new WidgetSlot(-1, Input::ACTIONBAR, WidgetSlot::SIZE_NORMAL);
207 slots[index] = new WidgetSlot(-1, Input::ACTIONBAR);
228208 slots[index]->setBasePos(x, y, Utils::ALIGN_TOPLEFT);
229209 slots[index]->pos.w = slots[index]->pos.h = eset->resolutions.icon_size;
230210 slots[index]->continuous = true;
211
212 if (index < 10)
213 slots[index]->setHotkey(Input::BAR_1 + index);
214 else if (index < 12)
215 slots[index]->setHotkey(Input::MAIN1 + index - 10);
231216
232217 prevent_changing.resize(slots.size());
233218 prevent_changing[index] = is_locked;
266251 }
267252 for (unsigned i=0; i<menu_labels.size(); i++) {
268253 menus[i]->setPos(window_area.x, window_area.y);
269 if (i < MENU_LOOT_TIPS) {
270 menu_labels[i] = msg->get("Hotkey: %s", inpt->getBindingString(i + Input::CHARACTER));
271 }
272 }
273 }
274
275 void MenuActionBar::clear() {
254 menu_labels[i] = msg->get("Hotkey: %s", inpt->getBindingString(i + Input::CHARACTER));
255 }
256 }
257
258 void MenuActionBar::clear(bool skip_items) {
276259 // clear action bar
277260 for (unsigned i = 0; i < slots_count; i++) {
261 if (skip_items && powers) {
262 if (hotkeys[i] > 0) {
263 const Power &power = powers->powers[hotkeys_mod[i]];
264 if (!power.required_items.empty()) {
265 continue;
266 }
267 }
268 }
269
278270 hotkeys[i] = 0;
279271 hotkeys_temp[i] = 0;
280272 hotkeys_mod[i] = 0;
332324 for (unsigned i = 0; i < slots_count; i++) {
333325 if (!slots[i]) continue;
334326
335 if (hotkeys[i] > 0 && static_cast<unsigned>(hotkeys_mod[i]) < powers->powers.size()) {
327 if (hotkeys[i] > 0) {
336328 const Power &power = powers->powers[hotkeys_mod[i]];
337329
338330 if (power.required_items.empty()) {
468460 else
469461 tip_data.addText(menu_titles[i]);
470462
471 if (i == MENU_LOOT_TIPS) {
472 if (settings->loot_tooltips == Settings::LOOT_TIPS_DEFAULT)
473 menu_labels[i] = msg->get("Default. Temporarily show all loot tooltips with '%s'.", inpt->getBindingString(Input::ALT));
474 else if (settings->loot_tooltips == Settings::LOOT_TIPS_SHOW_ALL)
475 menu_labels[i] = msg->get("Show All. Temporarily hide all loot tooltips with '%s'.", inpt->getBindingString(Input::ALT));
476 else if (settings->loot_tooltips == Settings::LOOT_TIPS_HIDE_ALL)
477 menu_labels[i] = msg->get("Hide All. Temporarily show all loot tooltips with '%s'.", inpt->getBindingString(Input::ALT));
478 }
479 else if (i == MENU_MINIMAP_MODE) {
480 if (settings->minimap_mode == Settings::MINIMAP_NORMAL)
481 menu_labels[i] = msg->get("Visible");
482 else if (settings->minimap_mode == Settings::MINIMAP_2X)
483 menu_labels[i] = msg->get("Visible (2x zoom)");
484 else if (settings->minimap_mode == Settings::MINIMAP_HIDDEN)
485 menu_labels[i] = msg->get("Hidden");
486 }
487 else if (i == MENU_STATBARS_LABELS) {
488 if (settings->statbar_labels)
489 menu_labels[i] = msg->get("Enabled");
490 else
491 menu_labels[i] = msg->get("Disabled");
492 }
493 else if (i == MENU_COMBAT_TEXT) {
494 if (settings->combat_text)
495 menu_labels[i] = msg->get("Enabled");
496 else
497 menu_labels[i] = msg->get("Disabled");
498 }
499
500463 if (!menu_labels[i].empty()) {
501464 tip_data.addText(menu_labels[i]);
502465 }
510473 for (unsigned i = 0; i < slots_count; i++) {
511474 if (slots[i] && Utils::isWithinRect(slots[i]->pos, position)) {
512475 if (hotkeys_mod[i] != 0) {
513 tip_data.addText(powers->powers[hotkeys_mod[i]].name);
476 menu->pow->createTooltipFromActionBar(&tip_data, i, tooltip_length);
514477 }
515478 tip_data.addText(labels[i]);
516479 }
522485 /**
523486 * After dragging a power or item onto the action bar, set as new hotkey
524487 */
525 void MenuActionBar::drop(const Point& mouse, int power_index, bool rearranging) {
488 void MenuActionBar::drop(const Point& mouse, PowerID power_index, bool rearranging) {
526489 for (unsigned i = 0; i < slots_count; i++) {
527490 if (slots[i] && !powers->powers[power_index].no_actionbar && Utils::isWithinRect(slots[i]->pos, mouse)) {
528491 if (rearranging) {
547510 /**
548511 * Return the power to the last clicked on slot
549512 */
550 void MenuActionBar::actionReturn(int power_index) {
513 void MenuActionBar::actionReturn(PowerID power_index) {
551514 drop(last_mouse, power_index, !REORDER);
552515 }
553516
649612 }
650613
651614 // a power slot was activated
652 if (action.power > 0 && static_cast<unsigned>(action.power) < powers->powers.size()) {
615 if (action.power > 0) {
653616 const Power& power = powers->powers[action.power];
654617
655618 if (pc->stats.mp < power.requires_mp && slot_fail_cooldown[i] == 0) {
712675 /**
713676 * If clicking while a menu is open, assume the player wants to rearrange the action bar
714677 */
715 int MenuActionBar::checkDrag(const Point& mouse) {
716 int power_index;
678 PowerID MenuActionBar::checkDrag(const Point& mouse) {
679 PowerID power_index;
717680
718681 for (unsigned i=0; i<slots_count; i++) {
719682 if (slots[i] && Utils::isWithinRect(slots[i]->pos, mouse)) {
752715 else if (menus[MENU_LOG]->checkClick()) {
753716 menu_l = true;
754717 menus[MENU_LOG]->deactivate();
755 }
756 else if (menus[MENU_LOOT_TIPS]->checkClick()) {
757 settings->loot_tooltips++;
758 if (settings->loot_tooltips > Settings::LOOT_TIPS_HIDE_ALL)
759 settings->loot_tooltips = Settings::LOOT_TIPS_DEFAULT;
760 menus[MENU_LOOT_TIPS]->deactivate();
761 }
762 else if (menus[MENU_MINIMAP_MODE]->checkClick()) {
763 settings->minimap_mode++;
764 if (settings->minimap_mode > Settings::MINIMAP_HIDDEN)
765 settings->minimap_mode = Settings::MINIMAP_NORMAL;
766 menus[MENU_MINIMAP_MODE]->deactivate();
767 }
768 else if (menus[MENU_STATBARS_LABELS]->checkClick()) {
769 settings->statbar_labels = !settings->statbar_labels;
770 menus[MENU_STATBARS_LABELS]->deactivate();
771 }
772 else if (menus[MENU_COMBAT_TEXT]->checkClick()) {
773 settings->combat_text = !settings->combat_text;
774 menus[MENU_COMBAT_TEXT]->deactivate();
775718 }
776719
777720 // also allow ACTIONBAR_USE to open menus
788731 menu_p = true;
789732 else if (cur_slot == tablist.size() - (MENU_COUNT - 3))
790733 menu_l = true;
791 else if (cur_slot == tablist.size() - (MENU_COUNT - 4)) {
792 settings->loot_tooltips++;
793 if (settings->loot_tooltips > Settings::LOOT_TIPS_HIDE_ALL)
794 settings->loot_tooltips = Settings::LOOT_TIPS_DEFAULT;
795 }
796 else if (cur_slot == tablist.size() - (MENU_COUNT - 5)) {
797 settings->minimap_mode++;
798 if (settings->minimap_mode > Settings::MINIMAP_HIDDEN)
799 settings->minimap_mode = Settings::MINIMAP_NORMAL;
800 menus[MENU_MINIMAP_MODE]->deactivate();
801 }
802 else if (cur_slot == tablist.size() - (MENU_COUNT - 6)) {
803 settings->statbar_labels = !settings->statbar_labels;
804 menus[MENU_STATBARS_LABELS]->deactivate();
805 }
806 else if (cur_slot == tablist.size() - (MENU_COUNT - 7)) {
807 settings->combat_text = !settings->combat_text;
808 menus[MENU_COMBAT_TEXT]->deactivate();
809 }
810734 }
811735 }
812736
813737 /**
814738 * Set all hotkeys at once e.g. when loading a game
815739 */
816 void MenuActionBar::set(std::vector<int> power_id) {
740 void MenuActionBar::set(std::vector<PowerID> power_id, bool skip_empty) {
817741 for (unsigned i = 0; i < slots_count; i++) {
818 if (static_cast<unsigned>(power_id[i]) >= powers->powers.size())
819 continue;
820
821742 if (powers->powers[power_id[i]].no_actionbar)
822743 continue;
823744
824 hotkeys[i] = power_id[i];
745 if (!skip_empty || hotkeys[i] == 0)
746 hotkeys[i] = power_id[i];
825747 }
826748 updated = true;
827749 }
842764 if (have_aim && settings->mouse_aim) {
843765 FPoint map_pos;
844766 if (pow.aim_assist)
845 map_pos = Utils::screenToMap(inpt->mouse.x, inpt->mouse.y + eset->misc.aim_assist, pc->stats.pos.x, pc->stats.pos.y);
767 map_pos = Utils::screenToMap(inpt->mouse.x, inpt->mouse.y + eset->misc.aim_assist, mapr->cam.pos.x, mapr->cam.pos.y);
846768 else
847 map_pos = Utils::screenToMap(inpt->mouse.x, inpt->mouse.y, pc->stats.pos.x, pc->stats.pos.y);
769 map_pos = Utils::screenToMap(inpt->mouse.x, inpt->mouse.y, mapr->cam.pos.x, mapr->cam.pos.y);
848770
849771 if (pow.target_nearest > 0) {
850772 if (!pow.requires_corpse && powers->checkNearestTargeting(pow, &pc->stats, false)) {
904826 * Replaces the power(s) in slots that match the target_id with the power of id
905827 * So a target_id of 0 will place the power in an empty slot, if available
906828 */
907 void MenuActionBar::addPower(const int id, const int target_id) {
908 if (static_cast<unsigned>(id) >= powers->powers.size())
909 return;
910
829 void MenuActionBar::addPower(const PowerID id, const PowerID target_id) {
911830 // some powers are explicitly prevented from being placed on the actionbar
912831 if (powers->powers[id].no_actionbar)
913832 return;
962881 return Point();
963882 }
964883
965 int MenuActionBar::getSlotPower(int slot) {
884 PowerID MenuActionBar::getSlotPower(int slot) {
966885 if (static_cast<unsigned>(slot) < hotkeys.size()) {
967886 return hotkeys_mod[slot];
968887 }
5959
6060 SoundID sfx_unable_to_cast;
6161
62 int tooltip_length;
63
6264 public:
6365 enum {
6466 MENU_CHARACTER = 0,
6567 MENU_INVENTORY = 1,
6668 MENU_POWERS = 2,
6769 MENU_LOG = 3,
68 MENU_LOOT_TIPS = 4,
69 MENU_MINIMAP_MODE = 5,
70 MENU_STATBARS_LABELS = 6,
71 MENU_COMBAT_TEXT = 7
7270 };
73 static const unsigned MENU_COUNT = 8;
71 static const unsigned MENU_COUNT = 4;
7472
7573 static const int SLOT_MAIN1 = 10;
7674 static const int SLOT_MAIN2 = 11;
7977 static const int USE_EMPTY_SLOT = 0;
8078
8179 static const bool REORDER = true;
80 static const bool CLEAR_SKIP_ITEMS = true;
81 static const bool SET_SKIP_EMPTY = true;
8282
8383 MenuActionBar();
8484 ~MenuActionBar();
8787 void logic();
8888 void render();
8989 void checkAction(std::vector<ActionData> &action_queue);
90 int checkDrag(const Point& mouse);
90 PowerID checkDrag(const Point& mouse);
9191 void checkMenu(bool &menu_c, bool &menu_i, bool &menu_p, bool &menu_l);
92 void drop(const Point& mouse, int power_index, bool rearranging);
93 void actionReturn(int power_index);
92 void drop(const Point& mouse, PowerID power_index, bool rearranging);
93 void actionReturn(PowerID power_index);
9494 void remove(const Point& mouse);
95 void set(std::vector<int> power_id);
96 void clear();
95 void set(std::vector<PowerID> power_id, bool skip_empty);
96 void clear(bool skip_items);
9797 void resetSlots();
9898 Point getSlotPos(int slot);
99 int getSlotPower(int slot);
99 PowerID getSlotPower(int slot);
100100
101101 void renderTooltips(const Point& position);
102102 bool isWithinSlots(const Point& mouse);
103103 bool isWithinMenus(const Point& mouse);
104 void addPower(const int id, const int target_id);
104 void addPower(const PowerID id, const PowerID target_id);
105105
106106 unsigned slots_count;
107 std::vector<int> hotkeys; // refer to power_index in PowerManager
108 std::vector<int> hotkeys_temp; // temp for shapeshifting
109 std::vector<int> hotkeys_mod; // hotkeys can be changed by items
107 std::vector<PowerID> hotkeys; // refer to power_index in PowerManager
108 std::vector<PowerID> hotkeys_temp; // temp for shapeshifting
109 std::vector<PowerID> hotkeys_mod; // hotkeys can be changed by items
110110 std::vector<bool> locked; // if slot is locked, you cannot drop it
111111 std::vector<bool> prevent_changing;
112112 std::vector<WidgetSlot *> slots; // hotkey slots
8989 if (pc->stats.effects.effect_list[i].icon == -1)
9090 continue;
9191
92 const Effect &ed = pc->stats.effects.effect_list[i];
92 Effect &ed = pc->stats.effects.effect_list[i];
9393
9494 size_t most_recent_id = effect_icons.size()-1;
9595 if(ed.group_stack){
104104 }else if (ed.type == Effect::HEAL){
105105 //No special behavior
106106 }else{
107 if(ed.ticks < effect_icons[most_recent_id].current){
108 if (ed.duration > 0)
109 effect_icons[most_recent_id].overlay.y = (eset->resolutions.icon_size * ed.ticks) / ed.duration;
107 if (ed.timer.getCurrent() < static_cast<unsigned>(effect_icons[most_recent_id].current)){
108 if (ed.timer.getDuration() > 0)
109 effect_icons[most_recent_id].overlay.y = (eset->resolutions.icon_size * ed.timer.getCurrent()) / ed.timer.getDuration();
110110 else
111111 effect_icons[most_recent_id].overlay.y = eset->resolutions.icon_size;
112 effect_icons[most_recent_id].current = ed.ticks;
113 effect_icons[most_recent_id].max = ed.duration;
112 effect_icons[most_recent_id].current = ed.timer.getCurrent();
113 effect_icons[most_recent_id].max = ed.timer.getDuration();
114114 }
115115 }
116116
157157 // current and max are ignored
158158 }
159159 else {
160 if (ed.duration > 0)
161 ei.overlay.y = (eset->resolutions.icon_size * ed.ticks) / ed.duration;
160 if (ed.timer.getDuration() > 0)
161 ei.overlay.y = (eset->resolutions.icon_size * ed.timer.getCurrent()) / ed.timer.getDuration();
162162 else
163163 ei.overlay.y = eset->resolutions.icon_size;
164 ei.current = ed.ticks;
165 ei.max = ed.duration;
164 ei.current = ed.timer.getCurrent();
165 ei.max = ed.timer.getDuration();
166166 }
167167 ei.overlay.h = eset->resolutions.icon_size - ei.overlay.y;
168168
0 /*
1 Copyright © 2012 Clint Bellanger
2 Copyright © 2012 davidriod
3 Copyright © 2012 Igor Paliychuk
4 Copyright © 2012 Stefan Beller
5 Copyright © 2013 Kurt Rinnert
6 Copyright © 2014 Henrik Andersson
7 Copyright © 2014-2016 Justin Jacobs
8
9 This file is part of FLARE.
10
11 FLARE is free software: you can redistribute it and/or modify it under the terms
12 of the GNU General Public License as published by the Free Software Foundation,
13 either version 3 of the License, or (at your option) any later version.
14
15 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
16 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
17 PARTICULAR PURPOSE. See the GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License along with
20 FLARE. If not, see http://www.gnu.org/licenses/
21 */
22
23 /**
24 * MenuConfig
25 *
26 * Handle game Settings Menu
27 */
28
29 #include "Avatar.h"
30 #include "CombatText.h"
31 #include "CommonIncludes.h"
32 #include "DeviceList.h"
33 #include "EngineSettings.h"
34 #include "FileParser.h"
35 #include "FontEngine.h"
36 #include "GameStateTitle.h"
37 #include "InputState.h"
38 #include "MenuConfig.h"
39 #include "MenuConfirm.h"
40 #include "MessageEngine.h"
41 #include "ModManager.h"
42 #include "Platform.h"
43 #include "RenderDevice.h"
44 #include "Settings.h"
45 #include "SharedResources.h"
46 #include "SoundManager.h"
47 #include "Stats.h"
48 #include "TooltipManager.h"
49 #include "UtilsFileSystem.h"
50 #include "UtilsParsing.h"
51 #include "Version.h"
52 #include "WidgetButton.h"
53 #include "WidgetCheckBox.h"
54 #include "WidgetHorizontalList.h"
55 #include "WidgetListBox.h"
56 #include "WidgetSlider.h"
57 #include "WidgetScrollBox.h"
58 #include "WidgetTabControl.h"
59
60 MenuConfig::ConfigOption::ConfigOption()
61 : enabled(false)
62 , label(NULL)
63 , widget(NULL) {
64 }
65
66 MenuConfig::ConfigOption::~ConfigOption() {
67 }
68
69 MenuConfig::ConfigTab::ConfigTab()
70 : scrollbox(NULL)
71 , enabled_count(0) {
72 }
73
74 MenuConfig::ConfigTab::~ConfigTab() {
75 }
76
77 void MenuConfig::ConfigTab::setOptionWidgets(int index, WidgetLabel* lb, Widget* w, const std::string& lb_text) {
78 if (!options[index].enabled) {
79 options[index].enabled = true;
80 enabled_count++;
81 }
82 options[index].label = lb;
83 options[index].label->setText(lb_text);
84 options[index].widget = w;
85 options[index].widget->tablist_nav_right = true;
86 }
87
88 void MenuConfig::ConfigTab::setOptionEnabled(int index, bool enable) {
89 if (options[index].enabled && !enable) {
90 options[index].enabled = false;
91 if (enabled_count > 0)
92 enabled_count--;
93 }
94 else if (!options[index].enabled && enable) {
95 options[index].enabled = true;
96 enabled_count++;
97 }
98 }
99
100 int MenuConfig::ConfigTab::getEnabledIndex(int option_index) {
101 int r = -1;
102 for (size_t i = 0; i < options.size(); ++i) {
103 if (options[i].enabled)
104 r++;
105 if (i == static_cast<size_t>(option_index))
106 break;
107 }
108 return (r == -1 ? 0 : r);
109 }
110
111 MenuConfig::MenuConfig (bool _is_game_state)
112 : is_game_state(_is_game_state)
113 , enable_gamestate_buttons(false)
114 , hero(NULL)
115 , child_widget()
116 , tab_control(new WidgetTabControl())
117 , ok_button(new WidgetButton(WidgetButton::DEFAULT_FILE))
118 , defaults_button(new WidgetButton(WidgetButton::DEFAULT_FILE))
119 , cancel_button(new WidgetButton(WidgetButton::DEFAULT_FILE))
120 , background(NULL)
121 , input_confirm(new MenuConfirm(msg->get("Clear"),msg->get("Assign:")))
122 , defaults_confirm(new MenuConfirm(msg->get("Defaults"), msg->get("Reset ALL settings?")))
123
124 , pause_continue_lb(new WidgetLabel())
125 , pause_continue_btn(new WidgetButton(WidgetButton::DEFAULT_FILE))
126 , pause_exit_lb(new WidgetLabel())
127 , pause_exit_btn(new WidgetButton(WidgetButton::DEFAULT_FILE))
128 , pause_save_lb(new WidgetLabel())
129 , pause_save_btn(new WidgetButton(WidgetButton::DEFAULT_FILE))
130 , pause_time_lb(new WidgetLabel())
131 , pause_time_text(new WidgetLabel())
132
133 , renderer_lstb(new WidgetHorizontalList())
134 , renderer_lb(new WidgetLabel())
135 , fullscreen_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
136 , fullscreen_lb(new WidgetLabel())
137 , hwsurface_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
138 , hwsurface_lb(new WidgetLabel())
139 , vsync_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
140 , vsync_lb(new WidgetLabel())
141 , texture_filter_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
142 , texture_filter_lb(new WidgetLabel())
143 , dpi_scaling_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
144 , dpi_scaling_lb(new WidgetLabel())
145 , parallax_layers_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
146 , parallax_layers_lb(new WidgetLabel())
147 , change_gamma_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
148 , change_gamma_lb(new WidgetLabel())
149 , gamma_sl(new WidgetSlider(WidgetSlider::DEFAULT_FILE))
150 , gamma_lb(new WidgetLabel())
151
152 , music_volume_sl(new WidgetSlider(WidgetSlider::DEFAULT_FILE))
153 , music_volume_lb(new WidgetLabel())
154 , sound_volume_sl(new WidgetSlider(WidgetSlider::DEFAULT_FILE))
155 , sound_volume_lb(new WidgetLabel())
156
157 , show_fps_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
158 , show_fps_lb(new WidgetLabel())
159 , hardware_cursor_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
160 , hardware_cursor_lb(new WidgetLabel())
161 , colorblind_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
162 , colorblind_lb(new WidgetLabel())
163 , dev_mode_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
164 , dev_mode_lb(new WidgetLabel())
165 , subtitles_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
166 , subtitles_lb(new WidgetLabel())
167 , loot_tooltip_lstb(new WidgetHorizontalList())
168 , loot_tooltip_lb(new WidgetLabel())
169 , minimap_lstb(new WidgetHorizontalList())
170 , minimap_lb(new WidgetLabel())
171 , statbar_labels_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
172 , statbar_labels_lb(new WidgetLabel())
173 , statbar_autohide_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
174 , statbar_autohide_lb(new WidgetLabel())
175 , combat_text_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
176 , combat_text_lb(new WidgetLabel())
177 , auto_equip_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
178 , auto_equip_lb(new WidgetLabel())
179 , entity_markers_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
180 , entity_markers_lb(new WidgetLabel())
181 , low_hp_warning_lstb(new WidgetHorizontalList())
182 , low_hp_warning_lb(new WidgetLabel())
183 , low_hp_threshold_lstb(new WidgetHorizontalList())
184 , low_hp_threshold_lb(new WidgetLabel())
185 , item_compare_tips_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
186 , item_compare_tips_lb(new WidgetLabel())
187
188 , joystick_device_lstb(new WidgetHorizontalList())
189 , joystick_device_lb(new WidgetLabel())
190 , mouse_move_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
191 , mouse_move_lb(new WidgetLabel())
192 , mouse_aim_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
193 , mouse_aim_lb(new WidgetLabel())
194 , no_mouse_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
195 , no_mouse_lb(new WidgetLabel())
196 , mouse_move_swap_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
197 , mouse_move_swap_lb(new WidgetLabel())
198 , mouse_move_attack_cb(new WidgetCheckBox(WidgetCheckBox::DEFAULT_FILE))
199 , mouse_move_attack_lb(new WidgetLabel())
200 , joystick_deadzone_sl(new WidgetSlider(WidgetSlider::DEFAULT_FILE))
201 , joystick_deadzone_lb(new WidgetLabel())
202
203 , activemods_lstb(new WidgetListBox(10, WidgetListBox::DEFAULT_FILE))
204 , activemods_lb(new WidgetLabel())
205 , inactivemods_lstb(new WidgetListBox(10, WidgetListBox::DEFAULT_FILE))
206 , inactivemods_lb(new WidgetLabel())
207 , language_lstb(new WidgetHorizontalList())
208 , language_lb(new WidgetLabel())
209 , activemods_shiftup_btn(new WidgetButton("images/menus/buttons/up.png"))
210 , activemods_shiftdown_btn(new WidgetButton("images/menus/buttons/down.png"))
211 , activemods_deactivate_btn(new WidgetButton(WidgetButton::DEFAULT_FILE))
212 , inactivemods_activate_btn(new WidgetButton(WidgetButton::DEFAULT_FILE))
213
214 , active_tab(0)
215 , frame(0,0)
216 , frame_offset(11,8)
217 , tab_offset(3,0)
218 , scrollpane_color(0,0,0,0)
219 , scrollpane_padding(8, 40) // appropriate defaults for fantasycore widget sizes
220 , scrollpane_separator_color(font->getColor(FontEngine::COLOR_WIDGET_DISABLED))
221 , new_render_device(settings->render_device_name)
222 , input_confirm_timer(settings->max_frames_per_sec * 10) // 10 seconds
223 , input_key(0)
224 , key_count(0)
225 , keybind_tip_timer(settings->max_frames_per_sec * 5) // 5 seconds
226 , keybind_tip(new WidgetTooltip())
227 , clicked_accept(false)
228 , clicked_cancel(false)
229 , force_refresh_background(false)
230 , reload_music(false)
231 , clicked_pause_continue(false)
232 , clicked_pause_exit(false)
233 , clicked_pause_save(false)
234 {
235
236 Image *graphics;
237 graphics = render_device->loadImage("images/menus/config.png", RenderDevice::ERROR_NORMAL);
238 if (graphics) {
239 background = graphics->createSprite();
240 graphics->unref();
241 }
242
243 ok_button->setLabel(msg->get("OK"));
244 defaults_button->setLabel(msg->get("Defaults"));
245 cancel_button->setLabel(msg->get("Cancel"));
246
247 pause_continue_btn->setLabel(msg->get("Continue"));
248 setPauseExitText(MenuConfig::ENABLE_SAVE_GAME);
249 pause_save_btn->setLabel(msg->get("Save Game"));
250 setPauseSaveEnabled(MenuConfig::ENABLE_SAVE_GAME);
251 pause_time_text->setText(Utils::getTimeString(0));
252 pause_time_text->setJustify(FontEngine::JUSTIFY_RIGHT);
253 pause_time_text->setVAlign(LabelInfo::VALIGN_CENTER);
254
255 // Finish Mods ListBoxes setup
256 activemods_lstb->multi_select = true;
257 for (unsigned int i = 0; i < mods->mod_list.size() ; i++) {
258 if (mods->mod_list[i].name != mods->FALLBACK_MOD)
259 activemods_lstb->append(mods->mod_list[i].name,createModTooltip(&mods->mod_list[i]));
260 }
261
262 inactivemods_lstb->multi_select = true;
263 for (unsigned int i = 0; i<mods->mod_dirs.size(); i++) {
264 bool skip_mod = false;
265 for (unsigned int j = 0; j<mods->mod_list.size(); j++) {
266 if (mods->mod_dirs[i] == mods->mod_list[j].name) {
267 skip_mod = true;
268 break;
269 }
270 }
271 if (!skip_mod && mods->mod_dirs[i] != mods->FALLBACK_MOD) {
272 Mod temp_mod = mods->loadMod(mods->mod_dirs[i]);
273 inactivemods_lstb->append(mods->mod_dirs[i],createModTooltip(&temp_mod));
274 }
275 }
276 inactivemods_lstb->sort();
277
278 refreshJoysticks();
279
280 // Allocate KeyBindings
281 for (int i = 0; i < inpt->KEY_COUNT_USER * 3; i++) {
282 keybinds_lb.push_back(new WidgetLabel());
283 keybinds_btn.push_back(new WidgetButton(WidgetButton::DEFAULT_FILE));
284 }
285
286 key_count = static_cast<unsigned>(keybinds_btn.size()/3);
287
288 // don't allow remapping the primary Main1 binding
289 keybinds_btn[Input::MAIN1 * 3]->enabled = false;
290
291 // set up loot tooltip setting
292 loot_tooltip_lstb->append(msg->get("Default"), msg->get("Show all loot tooltips, except for those that would be obscured by the player or an enemy. Temporarily show all loot tooltips with 'Alt'."));
293 loot_tooltip_lstb->append(msg->get("Show all"), msg->get("Always show loot tooltips. Temporarily hide all loot tooltips with 'Alt'."));
294 loot_tooltip_lstb->append(msg->get("Hidden"), msg->get("Always hide loot tooltips, except for when a piece of loot is hovered with the mouse cursor. Temporarily show all loot tooltips with 'Alt'."));
295
296 // set up minimap setting
297 minimap_lstb->append(msg->get("Visible"), "");
298 minimap_lstb->append(msg->get("Visible (2x zoom)"), "");
299 minimap_lstb->append(msg->get("Hidden"), "");
300
301 // set up low hp notification type combinantions
302 std::string lhpw_prefix = msg->get("Controls the type of warning to be activated when the player is below the low health threshold.");
303 std::string lhpw_warning1 = msg->get("- Display a message");
304 std::string lhpw_warning2 = msg->get("- Play a sound");
305 std::string lhpw_warning3 = msg->get("- Change the cursor");
306
307 low_hp_warning_lstb->append(msg->get("Disabled"), lhpw_prefix);
308 low_hp_warning_lstb->append(msg->get("All"), lhpw_prefix + "\n\n" + lhpw_warning1 + '\n' + lhpw_warning2 + '\n' + lhpw_warning3);
309 low_hp_warning_lstb->append(msg->get("Message & Cursor"), lhpw_prefix + "\n\n" + lhpw_warning1 + '\n' + lhpw_warning3);
310 low_hp_warning_lstb->append(msg->get("Message & Sound"), lhpw_prefix + "\n\n" + lhpw_warning1 + '\n' + lhpw_warning2);
311 low_hp_warning_lstb->append(msg->get("Sound & Cursor"), lhpw_prefix + "\n\n" + lhpw_warning2 + '\n' + lhpw_warning3);
312 low_hp_warning_lstb->append(msg->get("Message"), lhpw_prefix + "\n\n" + lhpw_warning1);
313 low_hp_warning_lstb->append(msg->get("Cursor"), lhpw_prefix + "\n\n" + lhpw_warning3);
314 low_hp_warning_lstb->append(msg->get("Sound"), lhpw_prefix + "\n\n" + lhpw_warning2);
315
316 // set up low hp threshold combo
317 for (unsigned int i = 1; i <= 10 ; ++i) {
318 std::stringstream ss;
319 ss << i * 5;
320 low_hp_threshold_lstb->append(ss.str() + "%", msg->get("When the player's health drops below the given threshold, the low health notifications are triggered if one or more of them is enabled."));
321 }
322
323 init();
324
325 render_device->setBackgroundColor(Color(0,0,0,0));
326 }
327
328 MenuConfig::~MenuConfig() {
329 cleanup();
330 }
331
332 void MenuConfig::init() {
333 tab_control->setTabTitle(EXIT_TAB, msg->get("Exit"));
334 tab_control->setTabTitle(VIDEO_TAB, msg->get("Video"));
335 tab_control->setTabTitle(AUDIO_TAB, msg->get("Audio"));
336 tab_control->setTabTitle(INTERFACE_TAB, msg->get("Interface"));
337 tab_control->setTabTitle(INPUT_TAB, msg->get("Input"));
338 tab_control->setTabTitle(KEYBINDS_TAB, msg->get("Keybindings"));
339 tab_control->setTabTitle(MODS_TAB, msg->get("Mods"));
340
341 readConfig();
342
343 cfg_tabs.resize(6);
344 cfg_tabs[EXIT_TAB].options.resize(4);
345 cfg_tabs[VIDEO_TAB].options.resize(Platform::Video::COUNT);
346 cfg_tabs[AUDIO_TAB].options.resize(Platform::Audio::COUNT);
347 cfg_tabs[INTERFACE_TAB].options.resize(Platform::Interface::COUNT);
348 cfg_tabs[INPUT_TAB].options.resize(Platform::Input::COUNT);
349 cfg_tabs[KEYBINDS_TAB].options.resize(inpt->KEY_COUNT_USER * 3);
350
351 cfg_tabs[EXIT_TAB].setOptionWidgets(EXIT_OPTION_CONTINUE, pause_continue_lb, pause_continue_btn, msg->get("Paused"));
352 cfg_tabs[EXIT_TAB].setOptionWidgets(EXIT_OPTION_SAVE, pause_save_lb, pause_save_btn, "");
353 cfg_tabs[EXIT_TAB].setOptionWidgets(EXIT_OPTION_EXIT, pause_exit_lb, pause_exit_btn, "");
354 cfg_tabs[EXIT_TAB].setOptionWidgets(EXIT_OPTION_TIME_PLAYED, pause_time_lb, pause_time_text, msg->get("Time Played"));
355
356 if (!(MenuConfig::ENABLE_SAVE_GAME && eset->misc.save_anywhere)) {
357 cfg_tabs[EXIT_TAB].setOptionEnabled(EXIT_OPTION_SAVE, false);
358 }
359
360 cfg_tabs[VIDEO_TAB].setOptionWidgets(Platform::Video::RENDERER, renderer_lb, renderer_lstb, msg->get("Renderer"));
361 cfg_tabs[VIDEO_TAB].setOptionWidgets(Platform::Video::FULLSCREEN, fullscreen_lb, fullscreen_cb, msg->get("Full Screen Mode"));
362 cfg_tabs[VIDEO_TAB].setOptionWidgets(Platform::Video::HWSURFACE, hwsurface_lb, hwsurface_cb, msg->get("Hardware surfaces"));
363 cfg_tabs[VIDEO_TAB].setOptionWidgets(Platform::Video::VSYNC, vsync_lb, vsync_cb, msg->get("V-Sync"));
364 cfg_tabs[VIDEO_TAB].setOptionWidgets(Platform::Video::TEXTURE_FILTER, texture_filter_lb, texture_filter_cb, msg->get("Texture Filtering"));
365 cfg_tabs[VIDEO_TAB].setOptionWidgets(Platform::Video::DPI_SCALING, dpi_scaling_lb, dpi_scaling_cb, msg->get("DPI scaling"));
366 cfg_tabs[VIDEO_TAB].setOptionWidgets(Platform::Video::PARALLAX_LAYERS, parallax_layers_lb, parallax_layers_cb, msg->get("Parallax Layers"));
367 cfg_tabs[VIDEO_TAB].setOptionWidgets(Platform::Video::ENABLE_GAMMA, change_gamma_lb, change_gamma_cb, msg->get("Allow changing gamma"));
368 cfg_tabs[VIDEO_TAB].setOptionWidgets(Platform::Video::GAMMA, gamma_lb, gamma_sl, msg->get("Gamma"));
369
370 cfg_tabs[AUDIO_TAB].setOptionWidgets(Platform::Audio::SFX, sound_volume_lb, sound_volume_sl, msg->get("Sound Volume"));
371 cfg_tabs[AUDIO_TAB].setOptionWidgets(Platform::Audio::MUSIC, music_volume_lb, music_volume_sl, msg->get("Music Volume"));
372
373 cfg_tabs[INTERFACE_TAB].setOptionWidgets(Platform::Interface::LANGUAGE, language_lb, language_lstb, msg->get("Language"));
374 cfg_tabs[INTERFACE_TAB].setOptionWidgets(Platform::Interface::SHOW_FPS, show_fps_lb, show_fps_cb, msg->get("Show FPS"));
375 cfg_tabs[INTERFACE_TAB].setOptionWidgets(Platform::Interface::HARDWARE_CURSOR, hardware_cursor_lb, hardware_cursor_cb, msg->get("Hardware mouse cursor"));
376 cfg_tabs[INTERFACE_TAB].setOptionWidgets(Platform::Interface::COLORBLIND, colorblind_lb, colorblind_cb, msg->get("Colorblind Mode"));
377 cfg_tabs[INTERFACE_TAB].setOptionWidgets(Platform::Interface::DEV_MODE, dev_mode_lb, dev_mode_cb, msg->get("Developer Mode"));
378 cfg_tabs[INTERFACE_TAB].setOptionWidgets(Platform::Interface::SUBTITLES, subtitles_lb, subtitles_cb, msg->get("Subtitles"));
379 cfg_tabs[INTERFACE_TAB].setOptionWidgets(Platform::Interface::LOOT_TOOLTIPS, loot_tooltip_lb, loot_tooltip_lstb, msg->get("Loot tooltip visibility"));
380 cfg_tabs[INTERFACE_TAB].setOptionWidgets(Platform::Interface::MINIMAP_MODE, minimap_lb, minimap_lstb, msg->get("Mini-map mode"));
381 cfg_tabs[INTERFACE_TAB].setOptionWidgets(Platform::Interface::STATBAR_LABELS, statbar_labels_lb, statbar_labels_cb, msg->get("Always show stat bar labels"));
382 cfg_tabs[INTERFACE_TAB].setOptionWidgets(Platform::Interface::STATBAR_AUTOHIDE, statbar_autohide_lb, statbar_autohide_cb, msg->get("Allow stat bar auto-hiding"));
383 cfg_tabs[INTERFACE_TAB].setOptionWidgets(Platform::Interface::COMBAT_TEXT, combat_text_lb, combat_text_cb, msg->get("Show combat text"));
384 cfg_tabs[INTERFACE_TAB].setOptionWidgets(Platform::Interface::AUTO_EQUIP, auto_equip_lb, auto_equip_cb, msg->get("Automatically equip items"));
385 cfg_tabs[INTERFACE_TAB].setOptionWidgets(Platform::Interface::ENTITY_MARKERS, entity_markers_lb, entity_markers_cb, msg->get("Show hidden entity markers"));
386 cfg_tabs[INTERFACE_TAB].setOptionWidgets(Platform::Interface::LOW_HP_WARNING_TYPE, low_hp_warning_lb, low_hp_warning_lstb, msg->get("Low health notification"));
387 cfg_tabs[INTERFACE_TAB].setOptionWidgets(Platform::Interface::LOW_HP_THRESHOLD, low_hp_threshold_lb, low_hp_threshold_lstb, msg->get("Low health threshold"));
388 cfg_tabs[INTERFACE_TAB].setOptionWidgets(Platform::Interface::ITEM_COMPARE_TIPS, item_compare_tips_lb, item_compare_tips_cb, msg->get("Show item comparison tooltips"));
389
390
391 cfg_tabs[INPUT_TAB].setOptionWidgets(Platform::Input::JOYSTICK, joystick_device_lb, joystick_device_lstb, msg->get("Joystick"));
392 cfg_tabs[INPUT_TAB].setOptionWidgets(Platform::Input::MOUSE_MOVE, mouse_move_lb, mouse_move_cb, msg->get("Move hero using mouse"));
393 cfg_tabs[INPUT_TAB].setOptionWidgets(Platform::Input::MOUSE_AIM, mouse_aim_lb, mouse_aim_cb, msg->get("Mouse aim"));
394 cfg_tabs[INPUT_TAB].setOptionWidgets(Platform::Input::NO_MOUSE, no_mouse_lb, no_mouse_cb, msg->get("Do not use mouse"));
395 cfg_tabs[INPUT_TAB].setOptionWidgets(Platform::Input::MOUSE_MOVE_SWAP, mouse_move_swap_lb, mouse_move_swap_cb, msg->get("Swap mouse movement button"));
396 cfg_tabs[INPUT_TAB].setOptionWidgets(Platform::Input::MOUSE_MOVE_ATTACK, mouse_move_attack_lb, mouse_move_attack_cb, msg->get("Attack with mouse movement"));
397 cfg_tabs[INPUT_TAB].setOptionWidgets(Platform::Input::JOYSTICK_DEADZONE, joystick_deadzone_lb, joystick_deadzone_sl, msg->get("Joystick Deadzone"));
398
399
400 for (size_t i = 0; i < keybinds_btn.size(); ++i) {
401 if (i % 3 == 0) {
402 cfg_tabs[KEYBINDS_TAB].setOptionWidgets(static_cast<int>(i), keybinds_lb[i], keybinds_btn[i], inpt->binding_name[i/3]);
403 // TODO since these are blank, don't allocate?
404 cfg_tabs[KEYBINDS_TAB].setOptionWidgets(static_cast<int>(i+1), keybinds_lb[i+1], keybinds_btn[i+1], "");
405 cfg_tabs[KEYBINDS_TAB].setOptionWidgets(static_cast<int>(i+2), keybinds_lb[i+2], keybinds_btn[i+2], "");
406
407 keybinds_btn[i]->tooltip = msg->get("Primary binding: %s", inpt->binding_name[i/3].c_str());
408 keybinds_btn[i+1]->tooltip = msg->get("Alternate binding: %s", inpt->binding_name[i/3].c_str());
409 keybinds_btn[i+2]->tooltip = msg->get("Joystick binding: %s", inpt->binding_name[i/3].c_str());
410 }
411 }
412
413 // disable some options
414 if (!is_game_state) {
415 cfg_tabs[VIDEO_TAB].setOptionEnabled(Platform::Video::RENDERER, false);
416 cfg_tabs[VIDEO_TAB].setOptionEnabled(Platform::Video::HWSURFACE, false);
417 cfg_tabs[VIDEO_TAB].setOptionEnabled(Platform::Video::VSYNC, false);
418 cfg_tabs[VIDEO_TAB].setOptionEnabled(Platform::Video::TEXTURE_FILTER, false);
419
420 cfg_tabs[INTERFACE_TAB].setOptionEnabled(Platform::Interface::LANGUAGE, false);
421 cfg_tabs[INTERFACE_TAB].setOptionEnabled(Platform::Interface::DEV_MODE, false);
422
423 tab_control->setEnabled(static_cast<unsigned>(MODS_TAB), false);
424 tab_control->setEnabled(static_cast<unsigned>(EXIT_TAB), true);
425 enable_gamestate_buttons = false;
426 }
427 else {
428 cfg_tabs[EXIT_TAB].setOptionEnabled(EXIT_OPTION_CONTINUE, false);
429 cfg_tabs[EXIT_TAB].setOptionEnabled(EXIT_OPTION_SAVE, false);
430 cfg_tabs[EXIT_TAB].setOptionEnabled(EXIT_OPTION_EXIT, false);
431 cfg_tabs[EXIT_TAB].setOptionEnabled(EXIT_OPTION_TIME_PLAYED, false);
432 tab_control->setEnabled(static_cast<unsigned>(EXIT_TAB), false);
433 enable_gamestate_buttons = true;
434 }
435
436 // disable platform-specific options
437 for (int i = 0; i < Platform::Video::COUNT; ++i) {
438 if (!platform.config_video[i])
439 cfg_tabs[VIDEO_TAB].setOptionEnabled(i, false);
440 }
441 for (int i = 0; i < Platform::Audio::COUNT; ++i) {
442 if (!platform.config_audio[i])
443 cfg_tabs[AUDIO_TAB].setOptionEnabled(i, false);
444 }
445 for (int i = 0; i < Platform::Interface::COUNT; ++i) {
446 if (!platform.config_interface[i])
447 cfg_tabs[INTERFACE_TAB].setOptionEnabled(i, false);
448 }
449 for (int i = 0; i < Platform::Input::COUNT; ++i) {
450 if (!platform.config_input[i])
451 cfg_tabs[INPUT_TAB].setOptionEnabled(i, false);
452 }
453 if (!platform.config_misc[Platform::Misc::KEYBINDS]) {
454 for (size_t i = 0; i < keybinds_btn.size(); ++i) {
455 cfg_tabs[KEYBINDS_TAB].setOptionEnabled(static_cast<int>(i), false);
456 }
457 }
458 if (!platform.config_misc[Platform::Misc::MODS]) {
459 tab_control->setEnabled(static_cast<unsigned>(MODS_TAB), false);
460 }
461
462 // place widgets
463 for (size_t i = 0; i < cfg_tabs.size(); ++i) {
464 if (cfg_tabs[i].enabled_count == 0) {
465 tab_control->setEnabled(static_cast<unsigned>(i), false);
466 }
467
468 // set up scrollbox
469 cfg_tabs[i].scrollbox = new WidgetScrollBox(scrollpane.w, scrollpane.h);
470 cfg_tabs[i].scrollbox->setBasePos(scrollpane.x, scrollpane.y, Utils::ALIGN_TOPLEFT);
471 cfg_tabs[i].scrollbox->bg = scrollpane_color;
472 cfg_tabs[i].scrollbox->resize(scrollpane.w, cfg_tabs[i].enabled_count * scrollpane_padding.y);
473
474 for (size_t j = 0; j < cfg_tabs[i].options.size(); ++j) {
475 placeLabeledWidgetAuto(static_cast<int>(i), static_cast<int>(j));
476 }
477 }
478
479 addChildWidgets();
480 setupTabList();
481
482 refreshWidgets();
483
484 update();
485 }
486
487 void MenuConfig::readConfig() {
488 //Load the menu configuration from file
489
490 FileParser infile;
491 if (infile.open("menus/config.txt", FileParser::MOD_FILE, FileParser::ERROR_NORMAL)) {
492 while (infile.next()) {
493 if (parseKeyButtons(infile))
494 continue;
495
496 int x1 = Parse::popFirstInt(infile.val);
497 int y1 = Parse::popFirstInt(infile.val);
498 int x2 = Parse::popFirstInt(infile.val);
499 int y2 = Parse::popFirstInt(infile.val);
500
501 if (parseKey(infile, x1, y1, x2, y2))
502 continue;
503 else
504 infile.error("MenuConfig: '%s' is not a valid key.", infile.key.c_str());
505 }
506 infile.close();
507 }
508
509 // add description tooltips
510 hwsurface_cb->tooltip = msg->get("Will try to store surfaces in video memory versus system memory. The effect this has on performance depends on the renderer.");
511 vsync_cb->tooltip = msg->get("Prevents screen tearing. Disable if you experience \"stuttering\" in windowed mode or input lag.");
512 dpi_scaling_cb->tooltip = msg->get("When enabled, this uses the screen DPI in addition to the window dimensions to scale the rendering resolution. Otherwise, only the window dimensions are used.");
513 parallax_layers_cb->tooltip = msg->get("This enables parallax (non-tile) layers. Disabling this setting can improve performance in some cases.");
514 change_gamma_cb->tooltip = msg->get("Enables the below setting that controls the screen gamma level. The behavior of the gamma setting can vary between platforms.");
515 colorblind_cb->tooltip = msg->get("Provides additional text for information that is primarily conveyed through color.");
516 statbar_autohide_cb->tooltip = msg->get("Some mods will automatically hide the stat bars when they are inactive. Disabling this option will keep them displayed at all times.");
517 auto_equip_cb->tooltip = msg->get("When enabled, empty equipment slots will be filled with applicable items when they are obtained.");
518 entity_markers_cb->tooltip = msg->get("Shows a marker above enemies, allies, and the player when they are obscured by tall objects.");
519 item_compare_tips_cb->tooltip = msg->get("When enabled, tooltips for equipped items of the same type are shown next to standard item tooltips.");
520 no_mouse_cb->tooltip = msg->get("This allows the game to be controlled entirely with the keyboard (or joystick).");
521 mouse_move_swap_cb->tooltip = msg->get("When 'Move hero using mouse' is enabled, this setting controls if 'Main1' or 'Main2' is used to move the hero. If enabled, 'Main2' will move the hero instead of 'Main1'.");
522 mouse_move_attack_cb->tooltip = msg->get("When 'Move hero using mouse' is enabled, this setting controls if the Power assigned to the movement button can be used by targeting an enemy. If this setting is disabled, it is required to use 'Shift' to access the Power assigned to the movement button.");
523 mouse_aim_cb->tooltip = msg->get("The player's attacks will be aimed in the direction of the mouse cursor when this is enabled.");
524 }
525
526 bool MenuConfig::parseKeyButtons(FileParser &infile) {
527 // @CLASS MenuConfig|Description of menus/config.txt
528
529 if (infile.key == "button_ok") {
530 // @ATTR button_ok|int, int, alignment : X, Y, Alignment|Position of the "OK" button. Not used in the pause menu.
531 int x = Parse::popFirstInt(infile.val);
532 int y = Parse::popFirstInt(infile.val);
533 int a = Parse::toAlignment(Parse::popFirstString(infile.val));
534 ok_button->setBasePos(x, y, a);
535 }
536 else if (infile.key == "button_defaults") {
537 // @ATTR button_defaults|int, int, alignment : X, Y, Alignment|Position of the "Defaults" button. Not used in the pause menu.
538 int x = Parse::popFirstInt(infile.val);
539 int y = Parse::popFirstInt(infile.val);
540 int a = Parse::toAlignment(Parse::popFirstString(infile.val));
541 defaults_button->setBasePos(x, y, a);
542 }
543 else if (infile.key == "button_cancel") {
544 // @ATTR button_cancel|int, int, alignment : X, Y, Alignment|Position of the "Cancel" button. Not used in the pause menu.
545 int x = Parse::popFirstInt(infile.val);
546 int y = Parse::popFirstInt(infile.val);
547 int a = Parse::toAlignment(Parse::popFirstString(infile.val));
548 cancel_button->setBasePos(x, y, a);
549 }
550 else {
551 return false;
552 }
553
554 return true;
555 }
556 bool MenuConfig::parseKey(FileParser &infile, int &x1, int &y1, int &x2, int &y2) {
557 if (infile.key == "listbox_scrollbar_offset") {
558 // @ATTR listbox_scrollbar_offset|int|Horizontal offset from the right of listboxes (mods, languages, etc) to place the scrollbar.
559 activemods_lstb->scrollbar_offset = x1;
560 inactivemods_lstb->scrollbar_offset = x1;
561 }
562 else if (infile.key == "frame_offset") {
563 // @ATTR frame_offset|point|Offset for all the widgets contained under each tab.
564 frame_offset.x = x1;
565 frame_offset.y = y1;
566 }
567 else if (infile.key == "tab_offset") {
568 // @ATTR tab_offset|point|Offset for the row of tabs.
569 tab_offset.x = x1;
570 tab_offset.y = y1;
571 }
572 else if (infile.key == "activemods") {
573 // @ATTR activemods|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Active Mods" list box relative to the frame.
574 placeLabeledWidget(activemods_lb, activemods_lstb, x1, y1, x2, y2, msg->get("Active Mods"));
575 activemods_lb->setJustify(FontEngine::JUSTIFY_CENTER);
576 }
577 else if (infile.key == "activemods_height") {
578 // @ATTR activemods_height|int|Number of visible rows for the "Active Mods" list box.
579 activemods_lstb->setHeight(x1);
580 }
581 else if (infile.key == "inactivemods") {
582 // @ATTR inactivemods|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Available Mods" list box relative to the frame.
583 placeLabeledWidget(inactivemods_lb, inactivemods_lstb, x1, y1, x2, y2, msg->get("Available Mods"));
584 inactivemods_lb->setJustify(FontEngine::JUSTIFY_CENTER);
585 }
586 else if (infile.key == "inactivemods_height") {
587 // @ATTR inactivemods_height|int|Number of visible rows for the "Available Mods" list box.
588 inactivemods_lstb->setHeight(x1);
589 }
590 else if (infile.key == "activemods_shiftup") {
591 // @ATTR activemods_shiftup|point|Position of the button to shift mods up in "Active Mods" relative to the frame.
592 activemods_shiftup_btn->setBasePos(x1, y1, Utils::ALIGN_TOPLEFT);
593 activemods_shiftup_btn->refresh();
594 }
595 else if (infile.key == "activemods_shiftdown") {
596 // @ATTR activemods_shiftdown|point|Position of the button to shift mods down in "Active Mods" relative to the frame.
597 activemods_shiftdown_btn->setBasePos(x1, y1, Utils::ALIGN_TOPLEFT);
598 activemods_shiftdown_btn->refresh();
599 }
600 else if (infile.key == "activemods_deactivate") {
601 // @ATTR activemods_deactivate|point|Position of the "Disable" button relative to the frame.
602 activemods_deactivate_btn->setLabel(msg->get("<< Disable"));
603 activemods_deactivate_btn->setBasePos(x1, y1, Utils::ALIGN_TOPLEFT);
604 activemods_deactivate_btn->refresh();
605 }
606 else if (infile.key == "inactivemods_activate") {
607 // @ATTR inactivemods_activate|point|Position of the "Enable" button relative to the frame.
608 inactivemods_activate_btn->setLabel(msg->get("Enable >>"));
609 inactivemods_activate_btn->setBasePos(x1, y1, Utils::ALIGN_TOPLEFT);
610 inactivemods_activate_btn->refresh();
611 }
612 else if (infile.key == "scrollpane") {
613 // @ATTR scrollpane|rectangle|Position of the keybinding scrollbox relative to the frame.
614 scrollpane.x = x1;
615 scrollpane.y = y1;
616 scrollpane.w = x2;
617 scrollpane.h = y2;
618 }
619 else if (infile.key == "scrollpane_padding") {
620 // @ATTR scrollpane_padding|int, int : Horizontal padding, Vertical padding|Pixel padding for each item listed in a tab's scroll box.
621 scrollpane_padding.x = x1;
622 scrollpane_padding.y = y1;
623 }
624 else if (infile.key == "scrollpane_separator_color") {
625 // @ATTR scrollpane_separator_color|color|Color of the separator line in between scroll box items.
626 scrollpane_separator_color.r = static_cast<Uint8>(x1);
627 scrollpane_separator_color.g = static_cast<Uint8>(y1);
628 scrollpane_separator_color.b = static_cast<Uint8>(x2);
629 }
630 else if (infile.key == "scrollpane_bg_color") {
631 // @ATTR keybinds_bg_color|color, int: Color, Alpha|Background color and alpha for the keybindings scrollbox.
632 scrollpane_color.r = static_cast<Uint8>(x1);
633 scrollpane_color.g = static_cast<Uint8>(y1);
634 scrollpane_color.b = static_cast<Uint8>(x2);
635 scrollpane_color.a = static_cast<Uint8>(y2);
636 }
637
638 else return false;
639
640 return true;
641 }
642
643 void MenuConfig::addChildWidgets() {
644 for (size_t i = 0; i < cfg_tabs.size(); ++i) {
645 for (size_t j = 0; j < cfg_tabs[i].options.size(); ++j) {
646 if (cfg_tabs[i].options[j].enabled) {
647 cfg_tabs[i].scrollbox->addChildWidget(cfg_tabs[i].options[j].widget);
648 cfg_tabs[i].scrollbox->addChildWidget(cfg_tabs[i].options[j].label);
649 }
650
651 // only for memory management
652 addChildWidget(cfg_tabs[i].options[j].widget, NO_TAB);
653 addChildWidget(cfg_tabs[i].options[j].label, NO_TAB);
654 }
655 }
656
657 addChildWidget(activemods_lstb, MODS_TAB);
658 addChildWidget(activemods_lb, MODS_TAB);
659 addChildWidget(inactivemods_lstb, MODS_TAB);
660 addChildWidget(inactivemods_lb, MODS_TAB);
661 addChildWidget(activemods_shiftup_btn, MODS_TAB);
662 addChildWidget(activemods_shiftdown_btn, MODS_TAB);
663 addChildWidget(activemods_deactivate_btn, MODS_TAB);
664 addChildWidget(inactivemods_activate_btn, MODS_TAB);
665 }
666
667 void MenuConfig::setupTabList() {
668 tablist.add(tab_control);
669 tablist.setPrevTabList(&tablist_main);
670
671 if (enable_gamestate_buttons) {
672 tablist_main.add(ok_button);
673 tablist_main.add(defaults_button);
674 tablist_main.add(cancel_button);
675 }
676 tablist_main.setPrevTabList(&tablist);
677 tablist_main.setNextTabList(&tablist);
678 tablist_main.lock();
679
680 tablist_exit.setScrollType(Widget::SCROLL_VERTICAL);
681 tablist_exit.add(cfg_tabs[EXIT_TAB].scrollbox);
682 tablist_exit.setPrevTabList(&tablist);
683 tablist_exit.setNextTabList(&tablist_main);
684 tablist_exit.lock();
685
686 tablist_video.setScrollType(Widget::SCROLL_VERTICAL);
687 tablist_video.add(cfg_tabs[VIDEO_TAB].scrollbox);
688 tablist_video.setPrevTabList(&tablist);
689 tablist_video.setNextTabList(&tablist_main);
690 tablist_video.lock();
691
692 tablist_audio.setScrollType(Widget::SCROLL_VERTICAL);
693 tablist_audio.add(cfg_tabs[AUDIO_TAB].scrollbox);
694 tablist_audio.setPrevTabList(&tablist);
695 tablist_audio.setNextTabList(&tablist_main);
696 tablist_audio.lock();
697
698 tablist_interface.setScrollType(Widget::SCROLL_VERTICAL);
699 tablist_interface.add(cfg_tabs[INTERFACE_TAB].scrollbox);
700 tablist_interface.setPrevTabList(&tablist);
701 tablist_interface.setNextTabList(&tablist_main);
702 tablist_interface.lock();
703
704 tablist_input.setScrollType(Widget::SCROLL_VERTICAL);
705 tablist_input.add(cfg_tabs[INPUT_TAB].scrollbox);
706 tablist_input.setPrevTabList(&tablist);
707 tablist_input.setNextTabList(&tablist_main);
708 tablist_input.lock();
709
710 tablist_keybinds.setScrollType(Widget::SCROLL_VERTICAL);
711 tablist_keybinds.add(cfg_tabs[KEYBINDS_TAB].scrollbox);
712 tablist_keybinds.setPrevTabList(&tablist);
713 tablist_keybinds.setNextTabList(&tablist_main);
714 tablist_keybinds.lock();
715
716 tablist_mods.add(inactivemods_lstb);
717 tablist_mods.add(activemods_lstb);
718 tablist_mods.add(inactivemods_activate_btn);
719 tablist_mods.add(activemods_deactivate_btn);
720 tablist_mods.add(activemods_shiftup_btn);
721 tablist_mods.add(activemods_shiftdown_btn);
722 tablist_mods.setPrevTabList(&tablist);
723 tablist_mods.setNextTabList(&tablist_main);
724 tablist_mods.lock();
725 }
726
727 void MenuConfig::update() {
728 updateVideo();
729 updateAudio();
730 updateInterface();
731 updateInput();
732 updateKeybinds();
733 updateMods();
734 }
735
736 void MenuConfig::updateVideo() {
737 fullscreen_cb->setChecked(settings->fullscreen);
738 hwsurface_cb->setChecked(settings->hwsurface);
739 vsync_cb->setChecked(settings->vsync);
740 texture_filter_cb->setChecked(settings->texture_filter);
741 dpi_scaling_cb->setChecked(settings->dpi_scaling);
742 parallax_layers_cb->setChecked(settings->parallax_layers);
743 change_gamma_cb->setChecked(settings->change_gamma);
744
745 if (settings->change_gamma) {
746 render_device->setGamma(settings->gamma);
747 }
748 else {
749 settings->gamma = 1.0;
750 gamma_sl->enabled = false;
751 render_device->resetGamma();
752 }
753 gamma_sl->set(GAMMA_MIN, GAMMA_MAX, static_cast<int>(settings->gamma * 10.0));
754
755 refreshRenderers();
756
757 cfg_tabs[VIDEO_TAB].scrollbox->refresh();
758 }
759
760 void MenuConfig::updateAudio() {
761 if (settings->audio) {
762 music_volume_sl->set(0, 128, settings->music_volume);
763 snd->setVolumeMusic(settings->music_volume);
764 sound_volume_sl->set(0, 128, settings->sound_volume);
765 snd->setVolumeSFX(settings->sound_volume);
766 }
767 else {
768 music_volume_sl->set(0,128,0);
769 sound_volume_sl->set(0,128,0);
770 }
771
772 cfg_tabs[AUDIO_TAB].scrollbox->refresh();
773 }
774
775 void MenuConfig::updateInterface() {
776 show_fps_cb->setChecked(settings->show_fps);
777 colorblind_cb->setChecked(settings->colorblind);
778 hardware_cursor_cb->setChecked(settings->hardware_cursor);
779 dev_mode_cb->setChecked(settings->dev_mode);
780 subtitles_cb->setChecked(settings->subtitles);
781 statbar_labels_cb->setChecked(settings->statbar_labels);
782 statbar_autohide_cb->setChecked(settings->statbar_autohide);
783 combat_text_cb->setChecked(settings->combat_text);
784 auto_equip_cb->setChecked(settings->auto_equip);
785 entity_markers_cb->setChecked(settings->entity_markers);
786 low_hp_warning_lstb->select(settings->low_hp_warning_type);
787 low_hp_threshold_lstb->select((settings->low_hp_threshold/5)-1);
788 item_compare_tips_cb->setChecked(settings->item_compare_tips);
789
790 loot_tooltip_lstb->select(settings->loot_tooltips);
791 minimap_lstb->select(settings->minimap_mode);
792
793 refreshLanguages();
794
795 cfg_tabs[INTERFACE_TAB].scrollbox->refresh();
796 }
797
798 void MenuConfig::updateInput() {
799 mouse_aim_cb->setChecked(settings->mouse_aim);
800 no_mouse_cb->setChecked(settings->no_mouse);
801 mouse_move_cb->setChecked(settings->mouse_move);
802 mouse_move_swap_cb->setChecked(settings->mouse_move_swap);
803 mouse_move_attack_cb->setChecked(settings->mouse_move_attack);
804
805 if (settings->enable_joystick && inpt->getNumJoysticks() > 0) {
806 inpt->initJoystick();
807 joystick_device_lstb->select(settings->joystick_device + 1);
808 }
809
810 joystick_deadzone_sl->set(0, 32768, settings->joy_deadzone);
811
812 cfg_tabs[INPUT_TAB].scrollbox->refresh();
813 }
814
815 void MenuConfig::updateKeybinds() {
816 // now do labels for keybinds that are set
817 for (unsigned int i = 0; i < keybinds_btn.size(); i++) {
818 if (i % 3 == 0) {
819 keybinds_btn[i]->setLabel(inpt->getBindingString(i/3));
820 keybinds_btn[i+1]->setLabel(inpt->getBindingString(i/3, InputState::BINDING_ALT));
821 keybinds_btn[i+2]->setLabel(inpt->getBindingString(i/3, InputState::BINDING_JOYSTICK));
822
823 keybinds_btn[i]->refresh();
824 keybinds_btn[i+1]->refresh();
825 keybinds_btn[i+2]->refresh();
826 }
827 }
828 cfg_tabs[KEYBINDS_TAB].scrollbox->refresh();
829 }
830
831 void MenuConfig::updateMods() {
832 activemods_lstb->refresh();
833 inactivemods_lstb->refresh();
834 }
835
836 void MenuConfig::logic() {
837 if (inpt->window_resized)
838 refreshWidgets();
839
840 if (defaults_confirm->visible) {
841 // reset defaults confirmation
842 logicDefaults();
843 return;
844 }
845 else if (input_confirm->visible) {
846 // assign a keybind
847 input_confirm->logic();
848 scanKey(input_key);
849 input_confirm_timer.tick();
850 if (input_confirm_timer.isEnd())
851 input_confirm->visible = false;
852 return;
853 }
854 else {
855 if (!logicMain())
856 return;
857 }
858
859 // tab contents
860 active_tab = tab_control->getActiveTab();
861
862 if (active_tab == EXIT_TAB) {
863 if (hero) {
864 pause_time_text->setText(Utils::getTimeString(hero->time_played));
865 }
866 tablist.setNextTabList(&tablist_exit);
867 logicExit();
868 }
869 if (active_tab == VIDEO_TAB) {
870 tablist.setNextTabList(&tablist_video);
871 logicVideo();
872 }
873 else if (active_tab == AUDIO_TAB) {
874 tablist.setNextTabList(&tablist_audio);
875 logicAudio();
876 }
877 else if (active_tab == INTERFACE_TAB) {
878 tablist.setNextTabList(&tablist_interface);
879 logicInterface();
880
881 // TODO remove this?
882 if (platform.force_hardware_cursor) {
883 // for some platforms, hardware mouse cursor can not be turned off
884 settings->hardware_cursor = true;
885 hardware_cursor_cb->setChecked(settings->hardware_cursor);
886 }
887 }
888 else if (active_tab == INPUT_TAB) {
889 tablist.setNextTabList(&tablist_input);
890 logicInput();
891 }
892 else if (active_tab == KEYBINDS_TAB) {
893 tablist.setNextTabList(&tablist_keybinds);
894 logicKeybinds();
895 }
896 else if (active_tab == MODS_TAB) {
897 tablist.setNextTabList(&tablist_mods);
898 logicMods();
899 }
900 }
901
902 bool MenuConfig::logicMain() {
903 for (unsigned int i = 0; i < child_widget.size(); i++) {
904 if (child_widget[i]->in_focus && optiontab[i] != NO_TAB) {
905 tab_control->setActiveTab(optiontab[i]);
906 break;
907 }
908 }
909
910 // tabs & the bottom 3 main buttons
911 tab_control->logic();
912 tablist.logic();
913 tablist_main.logic();
914 tablist_exit.logic();
915 tablist_video.logic();
916 tablist_audio.logic();
917 tablist_interface.logic();
918 tablist_input.logic();
919 tablist_keybinds.logic();
920 tablist_mods.logic();
921
922 if (enable_gamestate_buttons) {
923 // Ok/Cancel Buttons
924 if (ok_button->checkClick()) {
925 clicked_accept = true;
926
927 // MenuConfig deconstructed, proceed with caution
928 return false;
929 }
930 else if (defaults_button->checkClick()) {
931 defaults_confirm->visible = true;
932 return true;
933 }
934 else if (cancel_button->checkClick() || (inpt->pressing[Input::CANCEL] && !inpt->lock[Input::CANCEL])) {
935 clicked_cancel = true;
936
937 // MenuConfig deconstructed, proceed with caution
938 return false;
939 }
940 }
941
942 return true;
943 }
944
945 void MenuConfig::logicDefaults() {
946 defaults_confirm->logic();
947 if (defaults_confirm->confirmClicked) {
948 settings->fullscreen = false;
949 settings->loadDefaults();
950 eset->load();
951 inpt->defaultQwertyKeyBindings();
952 inpt->defaultJoystickBindings();
953 update();
954 render_device->windowResize();
955 defaults_confirm->visible = false;
956 defaults_confirm->confirmClicked = false;
957 }
958 }
959
960 void MenuConfig::logicExit() {
961 cfg_tabs[EXIT_TAB].scrollbox->logic();
962 Point mouse = cfg_tabs[EXIT_TAB].scrollbox->input_assist(inpt->mouse);
963
964 if (cfg_tabs[EXIT_TAB].options[EXIT_OPTION_CONTINUE].enabled && pause_continue_btn->checkClickAt(mouse.x, mouse.y)) {
965 clicked_pause_continue = true;
966 }
967 else if (cfg_tabs[EXIT_TAB].options[EXIT_OPTION_SAVE].enabled && pause_save_btn->checkClickAt(mouse.x, mouse.y)) {
968 clicked_pause_save = true;
969 }
970 else if (cfg_tabs[EXIT_TAB].options[EXIT_OPTION_EXIT].enabled && pause_exit_btn->checkClickAt(mouse.x, mouse.y)) {
971 clicked_pause_exit = true;
972 }
973 }
974
975 void MenuConfig::logicVideo() {
976 cfg_tabs[VIDEO_TAB].scrollbox->logic();
977 Point mouse = cfg_tabs[VIDEO_TAB].scrollbox->input_assist(inpt->mouse);
978
979 if (cfg_tabs[VIDEO_TAB].options[Platform::Video::FULLSCREEN].enabled && fullscreen_cb->checkClickAt(mouse.x, mouse.y)) {
980 settings->fullscreen = fullscreen_cb->isChecked();
981 render_device->setFullscreen(settings->fullscreen);
982 inpt->window_resized = true;
983 refreshWidgets();
984 }
985 else if (cfg_tabs[VIDEO_TAB].options[Platform::Video::HWSURFACE].enabled && hwsurface_cb->checkClickAt(mouse.x, mouse.y)) {
986 settings->hwsurface = hwsurface_cb->isChecked();
987 }
988 else if (cfg_tabs[VIDEO_TAB].options[Platform::Video::VSYNC].enabled && vsync_cb->checkClickAt(mouse.x, mouse.y)) {
989 settings->vsync = vsync_cb->isChecked();
990 }
991 else if (cfg_tabs[VIDEO_TAB].options[Platform::Video::TEXTURE_FILTER].enabled && texture_filter_cb->checkClickAt(mouse.x, mouse.y)) {
992 settings->texture_filter = texture_filter_cb->isChecked();
993 }
994 else if (cfg_tabs[VIDEO_TAB].options[Platform::Video::DPI_SCALING].enabled && dpi_scaling_cb->checkClickAt(mouse.x, mouse.y)) {
995 settings->dpi_scaling = dpi_scaling_cb->isChecked();
996 render_device->windowResize();
997 inpt->window_resized = true;
998 refreshWidgets();
999 force_refresh_background = true;
1000 }
1001 else if (cfg_tabs[VIDEO_TAB].options[Platform::Video::PARALLAX_LAYERS].enabled && parallax_layers_cb->checkClickAt(mouse.x, mouse.y)) {
1002 settings->parallax_layers = parallax_layers_cb->isChecked();
1003 }
1004 else if (cfg_tabs[VIDEO_TAB].options[Platform::Video::ENABLE_GAMMA].enabled && change_gamma_cb->checkClickAt(mouse.x, mouse.y)) {
1005 settings->change_gamma = change_gamma_cb->isChecked();
1006 if (settings->change_gamma) {
1007 gamma_sl->enabled = true;
1008 }
1009 else {
1010 settings->gamma = 1.0;
1011 gamma_sl->enabled = false;
1012 gamma_sl->set(GAMMA_MIN, GAMMA_MAX, static_cast<int>(settings->gamma * 10.0));
1013 render_device->resetGamma();
1014 }
1015 }
1016 else if (cfg_tabs[VIDEO_TAB].options[Platform::Video::GAMMA].enabled && gamma_sl->checkClickAt(mouse.x, mouse.y)) {
1017 settings->gamma = static_cast<float>(gamma_sl->getValue()) * 0.1f;
1018 render_device->setGamma(settings->gamma);
1019 }
1020 else if (cfg_tabs[VIDEO_TAB].options[Platform::Video::RENDERER].enabled && renderer_lstb->checkClickAt(mouse.x, mouse.y)) {
1021 new_render_device = renderer_lstb->getValue();
1022 }
1023 }
1024
1025 void MenuConfig::logicAudio() {
1026 cfg_tabs[AUDIO_TAB].scrollbox->logic();
1027 Point mouse = cfg_tabs[AUDIO_TAB].scrollbox->input_assist(inpt->mouse);
1028
1029 if (settings->audio) {
1030 if (cfg_tabs[AUDIO_TAB].options[Platform::Audio::MUSIC].enabled && music_volume_sl->checkClickAt(mouse.x, mouse.y)) {
1031 if (settings->music_volume == 0)
1032 reload_music = true;
1033 settings->music_volume = static_cast<short>(music_volume_sl->getValue());
1034 snd->setVolumeMusic(settings->music_volume);
1035 }
1036 else if (cfg_tabs[AUDIO_TAB].options[Platform::Audio::SFX].enabled && sound_volume_sl->checkClickAt(mouse.x, mouse.y)) {
1037 settings->sound_volume = static_cast<short>(sound_volume_sl->getValue());
1038 snd->setVolumeSFX(settings->sound_volume);
1039 }
1040 }
1041 }
1042
1043 void MenuConfig::logicInterface() {
1044 cfg_tabs[INTERFACE_TAB].scrollbox->logic();
1045 Point mouse = cfg_tabs[INTERFACE_TAB].scrollbox->input_assist(inpt->mouse);
1046
1047 if (cfg_tabs[INTERFACE_TAB].options[Platform::Interface::LANGUAGE].enabled && language_lstb->checkClickAt(mouse.x, mouse.y)) {
1048 unsigned lang_id = language_lstb->getSelected();
1049 if (lang_id != language_lstb->getSize())
1050 settings->language = language_ISO[lang_id];
1051 }
1052 else if (cfg_tabs[INTERFACE_TAB].options[Platform::Interface::SHOW_FPS].enabled && show_fps_cb->checkClickAt(mouse.x, mouse.y)) {
1053 settings->show_fps = show_fps_cb->isChecked();
1054 }
1055 else if (cfg_tabs[INTERFACE_TAB].options[Platform::Interface::COLORBLIND].enabled && colorblind_cb->checkClickAt(mouse.x, mouse.y)) {
1056 settings->colorblind = colorblind_cb->isChecked();
1057 }
1058 else if (cfg_tabs[INTERFACE_TAB].options[Platform::Interface::HARDWARE_CURSOR].enabled && hardware_cursor_cb->checkClickAt(mouse.x, mouse.y)) {
1059 settings->hardware_cursor = hardware_cursor_cb->isChecked();
1060 }
1061 else if (cfg_tabs[INTERFACE_TAB].options[Platform::Interface::DEV_MODE].enabled && dev_mode_cb->checkClickAt(mouse.x, mouse.y)) {
1062 settings->dev_mode = dev_mode_cb->isChecked();
1063 }
1064 else if (cfg_tabs[INTERFACE_TAB].options[Platform::Interface::SUBTITLES].enabled && subtitles_cb->checkClickAt(mouse.x, mouse.y)) {
1065 settings->subtitles = subtitles_cb->isChecked();
1066 }
1067 else if (cfg_tabs[INTERFACE_TAB].options[Platform::Interface::LOOT_TOOLTIPS].enabled && loot_tooltip_lstb->checkClickAt(mouse.x, mouse.y)) {
1068 settings->loot_tooltips = static_cast<int>(loot_tooltip_lstb->getSelected());
1069 }
1070 else if (cfg_tabs[INTERFACE_TAB].options[Platform::Interface::MINIMAP_MODE].enabled && minimap_lstb->checkClickAt(mouse.x, mouse.y)) {
1071 settings->minimap_mode = static_cast<int>(minimap_lstb->getSelected());
1072 }
1073 else if (cfg_tabs[INTERFACE_TAB].options[Platform::Interface::STATBAR_LABELS].enabled && statbar_labels_cb->checkClickAt(mouse.x, mouse.y)) {
1074 settings->statbar_labels = statbar_labels_cb->isChecked();
1075 }
1076 else if (cfg_tabs[INTERFACE_TAB].options[Platform::Interface::STATBAR_AUTOHIDE].enabled && statbar_autohide_cb->checkClickAt(mouse.x, mouse.y)) {
1077 settings->statbar_autohide = statbar_autohide_cb->isChecked();
1078 }
1079 else if (cfg_tabs[INTERFACE_TAB].options[Platform::Interface::COMBAT_TEXT].enabled && combat_text_cb->checkClickAt(mouse.x, mouse.y)) {
1080 settings->combat_text = combat_text_cb->isChecked();
1081 }
1082 else if (cfg_tabs[INTERFACE_TAB].options[Platform::Interface::AUTO_EQUIP].enabled && auto_equip_cb->checkClickAt(mouse.x, mouse.y)) {
1083 settings->auto_equip = auto_equip_cb->isChecked();
1084 }
1085 else if (cfg_tabs[INTERFACE_TAB].options[Platform::Interface::ENTITY_MARKERS].enabled && entity_markers_cb->checkClickAt(mouse.x, mouse.y)) {
1086 settings->entity_markers = entity_markers_cb->isChecked();
1087 }
1088 else if (cfg_tabs[INTERFACE_TAB].options[Platform::Interface::LOW_HP_WARNING_TYPE].enabled && low_hp_warning_lstb->checkClickAt(mouse.x, mouse.y)) {
1089 settings->low_hp_warning_type = (static_cast<int>(low_hp_warning_lstb->getSelected()));
1090 }
1091 else if (cfg_tabs[INTERFACE_TAB].options[Platform::Interface::LOW_HP_THRESHOLD].enabled && low_hp_threshold_lstb->checkClickAt(mouse.x, mouse.y)) {
1092 settings->low_hp_threshold = (static_cast<int>(low_hp_threshold_lstb->getSelected())+1)*5;
1093 }
1094 else if (cfg_tabs[INTERFACE_TAB].options[Platform::Interface::ITEM_COMPARE_TIPS].enabled && item_compare_tips_cb->checkClickAt(mouse.x, mouse.y)) {
1095 settings->item_compare_tips = item_compare_tips_cb->isChecked();
1096 }
1097 }
1098
1099 void MenuConfig::logicInput() {
1100 cfg_tabs[INPUT_TAB].scrollbox->logic();
1101 Point mouse = cfg_tabs[INPUT_TAB].scrollbox->input_assist(inpt->mouse);
1102
1103 if (inpt->joysticks_changed) {
1104 disableJoystickOptions();
1105 refreshJoysticks();
1106 inpt->joysticks_changed = false;
1107 }
1108
1109 if (cfg_tabs[INPUT_TAB].options[Platform::Input::MOUSE_MOVE].enabled && mouse_move_cb->checkClickAt(mouse.x, mouse.y)) {
1110 if (mouse_move_cb->isChecked()) {
1111 settings->mouse_move = true;
1112 enableMouseOptions();
1113 }
1114 else settings->mouse_move=false;
1115 }
1116 else if (cfg_tabs[INPUT_TAB].options[Platform::Input::MOUSE_AIM].enabled && mouse_aim_cb->checkClickAt(mouse.x, mouse.y)) {
1117 if (mouse_aim_cb->isChecked()) {
1118 settings->mouse_aim = true;
1119 enableMouseOptions();
1120 }
1121 else settings->mouse_aim=false;
1122 }
1123 else if (cfg_tabs[INPUT_TAB].options[Platform::Input::NO_MOUSE].enabled && no_mouse_cb->checkClickAt(mouse.x, mouse.y)) {
1124 if (no_mouse_cb->isChecked()) {
1125 settings->no_mouse = true;
1126 disableMouseOptions();
1127 }
1128 else settings->no_mouse = false;
1129 }
1130 else if (cfg_tabs[INPUT_TAB].options[Platform::Input::MOUSE_MOVE_SWAP].enabled && mouse_move_swap_cb->checkClickAt(mouse.x, mouse.y)) {
1131 settings->mouse_move_swap = mouse_move_swap_cb->isChecked();
1132 }
1133 else if (cfg_tabs[INPUT_TAB].options[Platform::Input::MOUSE_MOVE_ATTACK].enabled && mouse_move_attack_cb->checkClickAt(mouse.x, mouse.y)) {
1134 settings->mouse_move_attack = mouse_move_attack_cb->isChecked();
1135 }
1136 else if (cfg_tabs[INPUT_TAB].options[Platform::Input::JOYSTICK_DEADZONE].enabled && joystick_deadzone_sl->checkClickAt(mouse.x, mouse.y)) {
1137 settings->joy_deadzone = joystick_deadzone_sl->getValue();
1138 }
1139 else if (cfg_tabs[INPUT_TAB].options[Platform::Input::JOYSTICK].enabled && joystick_device_lstb->checkClickAt(mouse.x, mouse.y)) {
1140 settings->joystick_device = static_cast<int>(joystick_device_lstb->getSelected()) - 1;
1141 if (settings->joystick_device != -1) {
1142 settings->enable_joystick = true;
1143 if (inpt->getNumJoysticks() > 0) {
1144 inpt->initJoystick();
1145 }
1146 }
1147 else {
1148 settings->enable_joystick = false;
1149 }
1150 }
1151 }
1152
1153 void MenuConfig::logicKeybinds() {
1154 cfg_tabs[KEYBINDS_TAB].scrollbox->logic();
1155 Point mouse = cfg_tabs[KEYBINDS_TAB].scrollbox->input_assist(inpt->mouse);
1156
1157 for (unsigned int i = 0; i < keybinds_btn.size(); i++) {
1158 if ((i+1) % 3 == 0) {
1159 keybinds_btn[i]->enabled = settings->enable_joystick;
1160 keybinds_btn[i]->refresh();
1161 }
1162
1163 if (!cfg_tabs[KEYBINDS_TAB].options[i].enabled)
1164 continue;
1165
1166 if (keybinds_btn[i]->checkClickAt(mouse.x,mouse.y)) {
1167 std::string confirm_msg;
1168 confirm_msg = msg->get("Assign:") + ' ' + inpt->binding_name[i/3];
1169 delete input_confirm;
1170 input_confirm = new MenuConfirm(msg->get("Clear"),confirm_msg);
1171 input_confirm_timer.reset(Timer::BEGIN);
1172 input_confirm->visible = true;
1173 input_key = i;
1174 inpt->last_button = -1;
1175 inpt->last_key = -1;
1176 inpt->last_joybutton = -1;
1177 }
1178 }
1179 }
1180
1181 void MenuConfig::logicMods() {
1182 if (activemods_lstb->checkClick()) {
1183 //do nothing
1184 }
1185 else if (inactivemods_lstb->checkClick()) {
1186 //do nothing
1187 }
1188 else if (activemods_shiftup_btn->checkClick()) {
1189 activemods_lstb->shiftUp();
1190 }
1191 else if (activemods_shiftdown_btn->checkClick()) {
1192 activemods_lstb->shiftDown();
1193 }
1194 else if (activemods_deactivate_btn->checkClick()) {
1195 disableMods();
1196 }
1197 else if (inactivemods_activate_btn->checkClick()) {
1198 enableMods();
1199 }
1200 }
1201
1202 void MenuConfig::render() {
1203 int tabheight = tab_control->getTabHeight();
1204 Rect pos;
1205 pos.x = (settings->view_w - eset->resolutions.frame_w)/2;
1206 pos.y = (settings->view_h - eset->resolutions.frame_h)/2 + tabheight - tabheight/16;
1207
1208 if (background) {
1209 background->setDestFromRect(pos);
1210 render_device->render(background);
1211 }
1212
1213 tab_control->render();
1214
1215 if (enable_gamestate_buttons) {
1216 // render OK/Defaults/Cancel buttons
1217 ok_button->render();
1218 cancel_button->render();
1219 defaults_button->render();
1220 }
1221
1222 renderTabContents();
1223 renderDialogs();
1224 }
1225
1226 void MenuConfig::renderTabContents() {
1227 if (active_tab == EXIT_TAB) {
1228 if (cfg_tabs[active_tab].scrollbox->update) {
1229 cfg_tabs[active_tab].scrollbox->refresh();
1230
1231 // only draw a separator between the buttons and the time played text
1232 Image* render_target = cfg_tabs[active_tab].scrollbox->contents->getGraphics();
1233 int offset = (MenuConfig::ENABLE_SAVE_GAME && eset->misc.save_anywhere) ? 3 : 2;
1234 render_target->drawLine(scrollpane_padding.x, offset * scrollpane_padding.y, scrollpane.w - scrollpane_padding.x - 1, offset * scrollpane_padding.y, scrollpane_separator_color);
1235 }
1236 cfg_tabs[active_tab].scrollbox->render();
1237 }
1238 else if (active_tab <= KEYBINDS_TAB) {
1239 if (cfg_tabs[active_tab].scrollbox->update) {
1240 cfg_tabs[active_tab].scrollbox->refresh();
1241
1242 Image* render_target = cfg_tabs[active_tab].scrollbox->contents->getGraphics();
1243
1244 for (int i = 1; i < cfg_tabs[active_tab].enabled_count; ++i) {
1245 if (active_tab == KEYBINDS_TAB) {
1246 if (i % 3 != 0)
1247 continue;
1248 }
1249 render_target->drawLine(scrollpane_padding.x, i * scrollpane_padding.y, scrollpane.w - scrollpane_padding.x - 1, i * scrollpane_padding.y, scrollpane_separator_color);
1250 }
1251 }
1252 cfg_tabs[active_tab].scrollbox->render();
1253 }
1254
1255 for (unsigned int i = 0; i < child_widget.size(); i++) {
1256 if (optiontab[i] == active_tab && optiontab[i] != NO_TAB)
1257 child_widget[i]->render();
1258 }
1259
1260 }
1261
1262 void MenuConfig::renderDialogs() {
1263 if (defaults_confirm->visible)
1264 defaults_confirm->render();
1265
1266 if (input_confirm->visible)
1267 input_confirm->render();
1268
1269 if (active_tab == KEYBINDS_TAB && !keybind_msg.empty()) {
1270 TooltipData keybind_tip_data;
1271 keybind_tip_data.addText(keybind_msg);
1272
1273 if (keybind_tip_timer.isEnd())
1274 keybind_tip_timer.reset(Timer::BEGIN);
1275
1276 keybind_tip_timer.tick();
1277
1278 if (!keybind_tip_timer.isEnd()) {
1279 keybind_tip->render(keybind_tip_data, Point(settings->view_w, 0), TooltipData::STYLE_FLOAT);
1280 }
1281 else {
1282 keybind_msg.clear();
1283 }
1284 }
1285 else {
1286 keybind_msg.clear();
1287 keybind_tip_timer.reset(Timer::END);
1288 }
1289 }
1290
1291 void MenuConfig::placeLabeledWidget(WidgetLabel *lb, Widget *w, int x1, int y1, int x2, int y2, std::string const& str, int justify) {
1292 if (w) {
1293 w->setBasePos(x2, y2, Utils::ALIGN_TOPLEFT);
1294 }
1295
1296 if (lb) {
1297 lb->setBasePos(x1, y1, Utils::ALIGN_TOPLEFT);
1298 lb->setText(str);
1299 lb->setJustify(justify);
1300 }
1301 }
1302
1303 void MenuConfig::placeLabeledWidgetAuto(int tab, int cfg_index) {
1304 WidgetLabel *lb = cfg_tabs[tab].options[cfg_index].label;
1305 Widget *w = cfg_tabs[tab].options[cfg_index].widget;
1306 int enabled_index = cfg_tabs[tab].getEnabledIndex(cfg_index);
1307
1308 if (w) {
1309 int y_offset = std::max(scrollpane_padding.y - w->pos.h, 0) / 2;
1310 w->setBasePos(scrollpane.w - w->pos.w - scrollpane_padding.x, (enabled_index * scrollpane_padding.y) + y_offset, Utils::ALIGN_TOPLEFT);
1311 w->setPos(0,0);
1312 }
1313
1314 if (lb) {
1315 lb->setBasePos(scrollpane_padding.x, (enabled_index * scrollpane_padding.y) + scrollpane_padding.y / 2, Utils::ALIGN_TOPLEFT);
1316 lb->setPos(0, 0);
1317 lb->setVAlign(LabelInfo::VALIGN_CENTER);
1318 }
1319 }
1320
1321 void MenuConfig::refreshWidgets() {
1322 tab_control->setMainArea(((settings->view_w - eset->resolutions.frame_w)/2) + tab_offset.x, ((settings->view_h - eset->resolutions.frame_h)/2) + tab_offset.y);
1323
1324 frame.x = ((settings->view_w - eset->resolutions.frame_w)/2) + frame_offset.x;
1325 frame.y = ((settings->view_h - eset->resolutions.frame_h)/2) + tab_control->getTabHeight() + frame_offset.y;
1326
1327 for (unsigned i=0; i<child_widget.size(); ++i) {
1328 if (optiontab[i] != NO_TAB)
1329 child_widget[i]->setPos(frame.x, frame.y);
1330 }
1331
1332 ok_button->setPos(0, 0);
1333 defaults_button->setPos(0, 0);
1334 cancel_button->setPos(0, 0);
1335
1336 defaults_confirm->align();
1337
1338 for (size_t i = 0; i < cfg_tabs.size(); ++i) {
1339 cfg_tabs[i].scrollbox->setPos(frame.x, frame.y);
1340 }
1341
1342 input_confirm->align();
1343 }
1344
1345 void MenuConfig::addChildWidget(Widget *w, int tab) {
1346 child_widget.push_back(w);
1347 optiontab.push_back(tab);
1348 }
1349
1350 void MenuConfig::refreshLanguages() {
1351 language_ISO.clear();
1352 language_lstb->clear();
1353
1354 FileParser infile;
1355 if (infile.open("engine/languages.txt", FileParser::MOD_FILE, FileParser::ERROR_NORMAL)) {
1356 int i = 0;
1357 while (infile.next()) {
1358 std::string key = infile.key;
1359 if (key != "") {
1360 language_ISO.push_back(key);
1361 language_lstb->append(infile.val, infile.val + " [" + infile.key + "]");
1362
1363 if (language_ISO.back() == settings->language) {
1364 language_lstb->select(i);
1365 }
1366
1367 i++;
1368 }
1369 }
1370 infile.close();
1371 }
1372 }
1373
1374 void MenuConfig::refreshFont() {
1375 delete font;
1376 font = getFontEngine();
1377 delete comb;
1378 comb = new CombatText();
1379 }
1380
1381 void MenuConfig::enableMods() {
1382 for (int i=0; i<inactivemods_lstb->getSize(); i++) {
1383 if (inactivemods_lstb->isSelected(i)) {
1384 activemods_lstb->append(inactivemods_lstb->getValue(i),inactivemods_lstb->getTooltip(i));
1385 inactivemods_lstb->remove(i);
1386 i--;
1387 }
1388 }
1389 }
1390
1391 void MenuConfig::disableMods() {
1392 for (int i=0; i<activemods_lstb->getSize(); i++) {
1393 if (activemods_lstb->isSelected(i) && activemods_lstb->getValue(i) != mods->FALLBACK_MOD) {
1394 inactivemods_lstb->append(activemods_lstb->getValue(i),activemods_lstb->getTooltip(i));
1395 activemods_lstb->remove(i);
1396 i--;
1397 }
1398 }
1399 inactivemods_lstb->sort();
1400 }
1401
1402 bool MenuConfig::setMods() {
1403 // Save new mods list and return true if modlist was changed. Else return false
1404
1405 std::vector<Mod> temp_list = mods->mod_list;
1406 mods->mod_list.clear();
1407 mods->mod_list.push_back(mods->loadMod(mods->FALLBACK_MOD));
1408
1409 for (int i=0; i<activemods_lstb->getSize(); i++) {
1410 if (activemods_lstb->getValue(i) != "")
1411 mods->mod_list.push_back(mods->loadMod(activemods_lstb->getValue(i)));
1412 }
1413
1414 mods->applyDepends();
1415
1416 if (mods->mod_list != temp_list) {
1417 mods->saveMods();
1418 return true;
1419 }
1420 else {
1421 return false;
1422 }
1423 }
1424
1425 std::string MenuConfig::createModTooltip(Mod *mod) {
1426 std::string ret = "";
1427 if (mod) {
1428 std::string mod_ver = (*mod->version == VersionInfo::MIN) ? "" : mod->version->getString();
1429 std::string engine_ver = VersionInfo::createVersionReqString(*mod->engine_min_version, *mod->engine_max_version);
1430
1431 ret = mod->name + '\n';
1432
1433 std::string mod_description = mod->getLocaleDescription(settings->language);
1434 if (!mod_description.empty()) {
1435 ret += '\n';
1436 ret += mod_description + '\n';
1437 }
1438
1439 bool middle_section = false;
1440 if (!mod_ver.empty()) {
1441 middle_section = true;
1442 ret += '\n';
1443 ret += msg->get("Version:") + ' ' + mod_ver;
1444 }
1445 if (!mod->game.empty() && mod->game != mods->FALLBACK_GAME) {
1446 middle_section = true;
1447 ret += '\n';
1448 ret += msg->get("Game:") + ' ' + mod->game;
1449 }
1450 if (!engine_ver.empty()) {
1451 middle_section = true;
1452 ret += '\n';
1453 ret += msg->get("Engine version:") + ' ' + engine_ver;
1454 }
1455
1456 if (middle_section)
1457 ret += '\n';
1458
1459 if (!mod->depends.empty()) {
1460 ret += '\n';
1461 ret += msg->get("Requires mods:") + '\n';
1462 for (size_t i=0; i<mod->depends.size(); ++i) {
1463 ret += "- " + mod->depends[i];
1464 std::string depend_ver = VersionInfo::createVersionReqString(*mod->depends_min[i], *mod->depends_max[i]);
1465 if (depend_ver != "")
1466 ret += " (" + depend_ver + ")";
1467 if (i < mod->depends.size()-1)
1468 ret += '\n';
1469 }
1470 }
1471
1472 if (!ret.empty() && ret[ret.size() - 1] == '\n')
1473 ret.erase(ret.begin() + ret.size() - 1);
1474 }
1475 return ret;
1476 }
1477
1478 void MenuConfig::confirmKey(int button) {
1479 inpt->pressing[button] = false;
1480 inpt->lock[button] = false;
1481
1482 input_confirm->visible = false;
1483 input_confirm_timer.reset(Timer::END);
1484 keybind_tip_timer.reset(Timer::END);
1485
1486 inpt->refresh_hotkeys = true;
1487
1488 updateKeybinds();
1489 }
1490
1491 void MenuConfig::scanKey(int button) {
1492 int column = button % 3;
1493 int real_button = button / 3;
1494
1495 // clear the keybind if the user clicks "Clear" in the dialog
1496 if (input_confirm->visible && input_confirm->confirmClicked) {
1497 inpt->setKeybind(-1, real_button, column, keybind_msg);
1498 confirmKey(real_button);
1499 return;
1500 }
1501
1502 if (input_confirm->visible && !input_confirm->isWithinButtons) {
1503 // keyboard & mouse
1504 if (column == InputState::BINDING_DEFAULT || column == InputState::BINDING_ALT) {
1505 if (inpt->last_button != -1) {
1506 // mouse
1507 inpt->setKeybind(inpt->last_button, real_button, column, keybind_msg);
1508 confirmKey(real_button);
1509 }
1510 else if (inpt->last_key != -1) {
1511 // keyboard
1512 inpt->setKeybind(inpt->last_key, real_button, column, keybind_msg);
1513 confirmKey(real_button);
1514 }
1515 }
1516 // joystick
1517 else if (column == InputState::BINDING_JOYSTICK && inpt->last_joybutton != -1) {
1518 inpt->setKeybind(inpt->last_joybutton, real_button, column, keybind_msg);
1519 confirmKey(real_button);
1520 }
1521 else if (column == InputState::BINDING_JOYSTICK && inpt->last_joyaxis != -1) {
1522 inpt->setKeybind(inpt->last_joyaxis, real_button, column, keybind_msg);
1523 confirmKey(real_button);
1524 }
1525 }
1526 }
1527
1528 void MenuConfig::enableMouseOptions() {
1529 settings->no_mouse = false;
1530 no_mouse_cb->setChecked(settings->no_mouse);
1531 }
1532
1533 void MenuConfig::disableMouseOptions() {
1534 settings->mouse_aim = false;
1535 mouse_aim_cb->setChecked(settings->mouse_aim);
1536
1537 settings->mouse_move = false;
1538 mouse_move_cb->setChecked(settings->mouse_move);
1539
1540 settings->no_mouse = true;
1541 no_mouse_cb->setChecked(settings->no_mouse);
1542 }
1543
1544 void MenuConfig::disableJoystickOptions() {
1545 settings->enable_joystick = false;
1546
1547 joystick_device_lstb->select(0);
1548
1549 if (inpt->getNumJoysticks() > 0)
1550 joystick_device_lstb->refresh();
1551 }
1552
1553 void MenuConfig::refreshRenderers() {
1554 renderer_lstb->clear();
1555
1556 std::vector<std::string> rd_name, rd_desc;
1557 createRenderDeviceList(msg, rd_name, rd_desc);
1558
1559 for (size_t i = 0; i < rd_name.size(); ++i) {
1560 renderer_lstb->append(rd_name[i], rd_desc[i]);
1561 if (rd_name[i] == settings->render_device_name) {
1562 renderer_lstb->select(static_cast<int>(i));
1563 }
1564 }
1565 }
1566
1567 void MenuConfig::refreshJoysticks() {
1568 joystick_device_lstb->clear();
1569 joystick_device_lstb->append(msg->get("(none)"), "");
1570 joystick_device_lstb->enabled = inpt->getNumJoysticks() > 0;
1571
1572 for (int i = 0; i < inpt->getNumJoysticks(); ++i) {
1573 std::string joystick_name = inpt->getJoystickName(i);
1574 if (joystick_name != "")
1575 joystick_device_lstb->append(joystick_name, joystick_name);
1576 }
1577
1578 joystick_device_lstb->refresh();
1579 }
1580
1581 std::string MenuConfig::getRenderDevice() {
1582 return renderer_lstb->getValue();
1583 }
1584
1585 void MenuConfig::setPauseExitText(bool enable_save) {
1586 pause_exit_btn->setLabel((eset->misc.save_onexit && enable_save) ? msg->get("Save & Exit") : msg->get("Exit"));
1587 }
1588
1589 void MenuConfig::setPauseSaveEnabled(bool enable_save) {
1590 pause_save_btn->enabled = enable_save && eset->misc.save_anywhere;
1591 }
1592
1593 void MenuConfig::resetSelectedTab() {
1594 update();
1595
1596 tab_control->setActiveTab(0);
1597
1598 for (size_t i = 0; i < cfg_tabs.size(); ++i) {
1599 cfg_tabs[i].scrollbox->scrollToTop();
1600 }
1601
1602 tablist.defocus();
1603 tablist_main.defocus();
1604 tablist_exit.defocus();
1605 tablist_video.defocus();
1606 tablist_audio.defocus();
1607 tablist_interface.defocus();
1608 tablist_input.defocus();
1609 tablist_keybinds.defocus();
1610 tablist_mods.defocus();
1611
1612 input_confirm->visible = false;
1613 input_confirm_timer.reset(Timer::END);
1614 keybind_tip_timer.reset(Timer::END);
1615 }
1616
1617 void MenuConfig::cleanup() {
1618 if (background) {
1619 delete background;
1620 background = NULL;
1621 }
1622
1623 if (tab_control != NULL) {
1624 delete tab_control;
1625 tab_control = NULL;
1626 }
1627
1628 if (ok_button != NULL) {
1629 delete ok_button;
1630 ok_button = NULL;
1631 }
1632 if (defaults_button != NULL) {
1633 delete defaults_button;
1634 defaults_button = NULL;
1635 }
1636 if (cancel_button != NULL) {
1637 delete cancel_button;
1638 cancel_button = NULL;
1639 }
1640
1641 cleanupTabContents();
1642 cleanupDialogs();
1643
1644 language_ISO.clear();
1645 }
1646
1647 void MenuConfig::cleanupTabContents() {
1648 for (std::vector<Widget*>::iterator iter = child_widget.begin(); iter != child_widget.end(); ++iter) {
1649 if (*iter != NULL) {
1650 delete (*iter);
1651 *iter = NULL;
1652 }
1653 }
1654 child_widget.clear();
1655
1656 for (size_t i = 0; i < cfg_tabs.size(); ++i) {
1657 if (cfg_tabs[i].scrollbox != NULL) {
1658 delete cfg_tabs[i].scrollbox;
1659 cfg_tabs[i].scrollbox = NULL;
1660 }
1661 }
1662 }
1663
1664 void MenuConfig::cleanupDialogs() {
1665 if (defaults_confirm != NULL) {
1666 delete defaults_confirm;
1667 defaults_confirm = NULL;
1668 }
1669 if (input_confirm != NULL) {
1670 delete input_confirm;
1671 input_confirm = NULL;
1672 }
1673 if (keybind_tip != NULL) {
1674 delete keybind_tip;
1675 keybind_tip = NULL;
1676 }
1677 }
1678
1679 void MenuConfig::setHero(Avatar* _hero) {
1680 hero = _hero;
1681 }
0 /*
1 Copyright © 2012 Clint Bellanger
2 Copyright © 2012 davidriod
3 Copyright © 2012 Igor Paliychuk
4 Copyright © 2013 Kurt Rinnert
5 Copyright © 2014-2016 Justin Jacobs
6
7 This file is part of FLARE.
8
9 FLARE is free software: you can redistribute it and/or modify it under the terms
10 of the GNU General Public License as published by the Free Software Foundation,
11 either version 3 of the License, or (at your option) any later version.
12
13 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
15 PARTICULAR PURPOSE. See the GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License along with
18 FLARE. If not, see http://www.gnu.org/licenses/
19 */
20
21 /**
22 * MenuConfig
23 *
24 * Handle game Settings Menu
25 */
26
27 #ifndef MENUCONFIG_H
28 #define MENUCONFIG_H
29
30 #include "CommonIncludes.h"
31 #include "TooltipData.h"
32 #include "Widget.h"
33
34 class Avatar;
35 class FileParser;
36 class MenuConfirm;
37 class Mod;
38 class Widget;
39 class WidgetButton;
40 class WidgetCheckBox;
41 class WidgetHorizontalList;
42 class WidgetLabel;
43 class WidgetListBox;
44 class WidgetScrollBox;
45 class WidgetSlider;
46 class WidgetTabControl;
47 class WidgetTooltip;
48
49 class MenuConfig {
50 private:
51 class ConfigOption {
52 public:
53 ConfigOption();
54 ~ConfigOption();
55
56 bool enabled;
57 WidgetLabel* label;
58 Widget* widget;
59 };
60
61 class ConfigTab {
62 public:
63 ConfigTab();
64 ~ConfigTab();
65 void setOptionWidgets(int index, WidgetLabel* lb, Widget* w, const std::string& lb_text);
66 void setOptionEnabled(int index, bool enable);
67 int getEnabledIndex(int option_index);
68
69 WidgetScrollBox* scrollbox;
70 int enabled_count;
71 std::vector<ConfigOption> options;
72 };
73
74 static const int GAMMA_MIN = 5;
75 static const int GAMMA_MAX = 15;
76
77 std::vector<ConfigTab> cfg_tabs;
78
79 bool is_game_state;
80 bool enable_gamestate_buttons;
81 Avatar *hero;
82
83 public:
84 static const bool IS_GAME_STATE = true;
85 static const bool ENABLE_SAVE_GAME = true;
86
87 static const short TAB_COUNT = 7;
88 enum {
89 EXIT_TAB = 0,
90 VIDEO_TAB = 1,
91 AUDIO_TAB = 2,
92 INTERFACE_TAB = 3,
93 INPUT_TAB = 4,
94 KEYBINDS_TAB = 5,
95 MODS_TAB = 6
96 };
97 static const short NO_TAB = -1;
98
99 enum {
100 EXIT_OPTION_CONTINUE = 0,
101 EXIT_OPTION_SAVE = 1,
102 EXIT_OPTION_EXIT = 2,
103 EXIT_OPTION_TIME_PLAYED = 3,
104 };
105
106 explicit MenuConfig(bool _is_game_state);
107 ~MenuConfig();
108
109 void init();
110 void readConfig();
111 bool parseKeyButtons(FileParser &infile);
112 bool parseKey(FileParser &infile, int &x1, int &y1, int &x2, int &y2);
113 void addChildWidgets();
114 void setupTabList();
115
116 void update();
117 void updateVideo();
118 void updateAudio();
119 void updateInterface();
120 void updateInput();
121 void updateKeybinds();
122 void updateMods();
123
124 void logic();
125 bool logicMain();
126 void logicDefaults();
127 void logicExit();
128 void logicVideo();
129 void logicAudio();
130 void logicInterface();
131 void logicInput();
132 void logicKeybinds();
133 void logicMods();
134
135 void render();
136 void renderTabContents();
137 void renderDialogs();
138
139 void placeLabeledWidget(WidgetLabel* lb, Widget* w, int x1, int y1, int x2, int y2, std::string const& str, int justify = 0);
140 void placeLabeledWidgetAuto(int tab, int cfg_index);
141 void refreshWidgets();
142 void addChildWidget(Widget *w, int tab);
143 void refreshRenderers();
144 void refreshJoysticks();
145 void refreshLanguages();
146 void refreshFont();
147 std::string getRenderDevice();
148 void setPauseExitText(bool enable_save);
149 void setPauseSaveEnabled(bool enable_save);
150 void resetSelectedTab();
151
152 void confirmKey(int button);
153 void scanKey(int button);
154
155 void enableMouseOptions();
156 void disableMouseOptions();
157 void disableJoystickOptions();
158
159 void enableMods();
160 void disableMods();
161 bool setMods();
162 std::string createModTooltip(Mod *mod);
163
164 void cleanup();
165 void cleanupTabContents();
166 void cleanupDialogs();
167
168 void setHero(Avatar* _hero);
169
170 TabList tablist;
171 TabList tablist_main;
172 TabList tablist_exit;
173 TabList tablist_video;
174 TabList tablist_audio;
175 TabList tablist_interface;
176 TabList tablist_input;
177 TabList tablist_keybinds;
178 TabList tablist_mods;
179
180 std::vector<int> optiontab;
181 std::vector<Widget*> child_widget;
182
183 WidgetTabControl * tab_control;
184 WidgetButton * ok_button;
185 WidgetButton * defaults_button;
186 WidgetButton * cancel_button;
187 Sprite * background;
188 MenuConfirm * input_confirm;
189 MenuConfirm * defaults_confirm;
190
191 WidgetLabel * pause_continue_lb;
192 WidgetButton * pause_continue_btn;
193 WidgetLabel * pause_exit_lb;
194 WidgetButton * pause_exit_btn;
195 WidgetLabel * pause_save_lb;
196 WidgetButton * pause_save_btn;
197 WidgetLabel * pause_time_lb;
198 WidgetLabel * pause_time_text;
199
200 WidgetHorizontalList * renderer_lstb;
201 WidgetLabel * renderer_lb;
202 WidgetCheckBox * fullscreen_cb;
203 WidgetLabel * fullscreen_lb;
204 WidgetCheckBox * hwsurface_cb;
205 WidgetLabel * hwsurface_lb;
206 WidgetCheckBox * vsync_cb;
207 WidgetLabel * vsync_lb;
208 WidgetCheckBox * texture_filter_cb;
209 WidgetLabel * texture_filter_lb;
210 WidgetCheckBox * dpi_scaling_cb;
211 WidgetLabel * dpi_scaling_lb;
212 WidgetCheckBox * parallax_layers_cb;
213 WidgetLabel * parallax_layers_lb;
214 WidgetCheckBox * change_gamma_cb;
215 WidgetLabel * change_gamma_lb;
216 WidgetSlider * gamma_sl;
217 WidgetLabel * gamma_lb;
218
219 WidgetSlider * music_volume_sl;
220 WidgetLabel * music_volume_lb;
221 WidgetSlider * sound_volume_sl;
222 WidgetLabel * sound_volume_lb;
223
224 WidgetCheckBox * show_fps_cb;
225 WidgetLabel * show_fps_lb;
226 WidgetCheckBox * hardware_cursor_cb;
227 WidgetLabel * hardware_cursor_lb;
228 WidgetCheckBox * colorblind_cb;
229 WidgetLabel * colorblind_lb;
230 WidgetCheckBox * dev_mode_cb;
231 WidgetLabel * dev_mode_lb;
232 WidgetCheckBox * subtitles_cb;
233 WidgetLabel * subtitles_lb;
234 WidgetHorizontalList * loot_tooltip_lstb;
235 WidgetLabel * loot_tooltip_lb;
236 WidgetHorizontalList * minimap_lstb;
237 WidgetLabel * minimap_lb;
238 WidgetCheckBox * statbar_labels_cb;
239 WidgetLabel * statbar_labels_lb;
240 WidgetCheckBox * statbar_autohide_cb;
241 WidgetLabel * statbar_autohide_lb;
242 WidgetCheckBox * combat_text_cb;
243 WidgetLabel * combat_text_lb;
244 WidgetCheckBox * auto_equip_cb;
245 WidgetLabel * auto_equip_lb;
246 WidgetCheckBox * entity_markers_cb;
247 WidgetLabel * entity_markers_lb;
248 WidgetHorizontalList * low_hp_warning_lstb;
249 WidgetLabel * low_hp_warning_lb;
250 WidgetHorizontalList * low_hp_threshold_lstb;
251 WidgetLabel * low_hp_threshold_lb;
252 WidgetCheckBox * item_compare_tips_cb;
253 WidgetLabel * item_compare_tips_lb;
254
255
256 WidgetHorizontalList * joystick_device_lstb;
257 WidgetLabel * joystick_device_lb;
258 WidgetCheckBox * mouse_move_cb;
259 WidgetLabel * mouse_move_lb;
260 WidgetCheckBox * mouse_aim_cb;
261 WidgetLabel * mouse_aim_lb;
262 WidgetCheckBox * no_mouse_cb;
263 WidgetLabel * no_mouse_lb;
264 WidgetCheckBox * mouse_move_swap_cb;
265 WidgetLabel * mouse_move_swap_lb;
266 WidgetCheckBox * mouse_move_attack_cb;
267 WidgetLabel * mouse_move_attack_lb;
268 WidgetSlider * joystick_deadzone_sl;
269 WidgetLabel * joystick_deadzone_lb;
270
271 WidgetListBox * activemods_lstb;
272 WidgetLabel * activemods_lb;
273 WidgetListBox * inactivemods_lstb;
274 WidgetLabel * inactivemods_lb;
275 WidgetHorizontalList * language_lstb;
276 WidgetLabel * language_lb;
277 WidgetButton * activemods_shiftup_btn;
278 WidgetButton * activemods_shiftdown_btn;
279 WidgetButton * activemods_deactivate_btn;
280 WidgetButton * inactivemods_activate_btn;
281
282 int active_tab;
283
284 Point frame;
285 Point frame_offset;
286 Point tab_offset;
287 Rect scrollpane;
288 Color scrollpane_color;
289 Point scrollpane_padding;
290 Color scrollpane_separator_color;
291 Point secondary_offset;
292
293 std::vector<std::string> language_ISO;
294
295 std::string new_render_device;
296 std::vector<Rect> video_modes;
297
298 std::vector<WidgetLabel *> keybinds_lb;
299 std::vector<WidgetButton *> keybinds_btn;
300
301 Timer input_confirm_timer;
302 int input_key;
303 unsigned key_count;
304
305 std::string keybind_msg;
306 Timer keybind_tip_timer;
307 WidgetTooltip* keybind_tip;
308
309 // flags for GameState*
310 bool clicked_accept;
311 bool clicked_cancel;
312 bool force_refresh_background;
313 bool reload_music;
314 bool clicked_pause_continue;
315 bool clicked_pause_exit;
316 bool clicked_pause_save;
317 };
318
319 #endif
320
2020
2121 #include "Avatar.h"
2222 #include "CampaignManager.h"
23 #include "Enemy.h"
24 #include "EnemyManager.h"
23 #include "Entity.h"
24 #include "EntityManager.h"
2525 #include "EventManager.h"
2626 #include "FileParser.h"
2727 #include "FontEngine.h"
3232 #include "MenuManager.h"
3333 #include "MessageEngine.h"
3434 #include "ModManager.h"
35 #include "NPC.h"
36 #include "NPCManager.h"
3537 #include "PowerManager.h"
3638 #include "Settings.h"
3739 #include "SharedGameResources.h"
193195
194196 if (inpt->pressing[Input::MAIN2] && !inpt->lock[Input::MAIN2]) {
195197 inpt->lock[Input::MAIN2] = true;
196 target = Utils::screenToMap(inpt->mouse.x, inpt->mouse.y, pc->stats.pos.x, pc->stats.pos.y);
198 target = Utils::screenToMap(inpt->mouse.x, inpt->mouse.y, mapr->cam.pos.x, mapr->cam.pos.y);
197199
198200 log_history->addSeparator();
199201
201203 std::stringstream ss;
202204 if (!mapr->collider.isOutsideMap(floorf(target.x), floorf(target.y))) {
203205 getTileInfo();
204 getEnemyInfo();
206 getEntityInfo();
205207 getPlayerInfo();
206208
207209 ss << "X=" << target.x << ", Y=" << target.y;
274276 log_history->add(ss.str(), WidgetLog::MSG_NORMAL);
275277 }
276278
277 void MenuDevConsole::getEnemyInfo() {
279 void MenuDevConsole::getEntityInfo() {
278280 std::stringstream ss;
279 for (size_t i = 0; i < enemym->enemies.size(); ++i) {
280 const Enemy* e = enemym->enemies[i];
281 // enemies & ally creatures
282 for (size_t i = 0; i < entitym->entities.size(); ++i) {
283 const Entity* e = entitym->entities[i];
281284 if (!(static_cast<int>(target.x) == static_cast<int>(e->stats.pos.x) && static_cast<int>(target.y) == static_cast<int>(e->stats.pos.y)))
282285 continue;
283286
286289 log_history->setNextColor(font->getColor(FontEngine::COLOR_MENU_BONUS));
287290 log_history->add(ss.str(), WidgetLog::MSG_NORMAL);
288291
289 // TODO print more enemy data
292 // TODO print more entity data
293 }
294
295 // non-ally NPCs
296 for (size_t i = 0; i < npcs->npcs.size(); ++i) {
297 const Entity* e = npcs->npcs[i];
298 if (!(static_cast<int>(target.x) == static_cast<int>(e->stats.pos.x) && static_cast<int>(target.y) == static_cast<int>(e->stats.pos.y)))
299 continue;
300
301 ss.str("");
302 ss << msg->get("Entity") << ": " << e->stats.name << " | X=" << e->stats.pos.x << ", Y=" << e->stats.pos.y;
303 log_history->setNextColor(font->getColor(FontEngine::COLOR_MENU_BONUS));
304 log_history->add(ss.str(), WidgetLog::MSG_NORMAL);
305
306 // TODO print more entity data
290307 }
291308 }
292309
425442
426443 std::vector<size_t> matching_ids;
427444
428 for (size_t i=1; i<items->items.size(); ++i) {
429 if (!items->items[i].has_name)
430 continue;
431
432 std::string item_name = items->getItemName(static_cast<int>(i));
445 std::map<size_t, Item>::iterator item_it;
446 for (item_it = items->items.begin(); item_it != items->items.end(); ++item_it) {
447 if (!item_it->second.has_name)
448 continue;
449
450 std::string item_name = items->getItemName(static_cast<int>(item_it->first));
433451 if (!search_terms.empty() && Utils::stringFindCaseInsensitive(item_name, search_terms) == std::string::npos)
434452 continue;
435453
436 matching_ids.push_back(i);
454 matching_ids.push_back(item_it->first);
437455 }
438456
439457 if (!matching_ids.empty()) {
502520
503521 std::vector<size_t> matching_ids;
504522
505 for (size_t i=1; i<powers->powers.size(); ++i) {
506 if (powers->powers[i].is_empty)
507 continue;
508
509 std::string item_name = powers->powers[i].name;
510 if (!search_terms.empty() && Utils::stringFindCaseInsensitive(item_name, search_terms) == std::string::npos)
511 continue;
512
513 matching_ids.push_back(i);
523 std::map<size_t, Power>::iterator power_it;
524 for (power_it = powers->powers.begin(); power_it != powers->powers.end(); ++power_it) {
525 if (power_it->second.is_empty)
526 continue;
527
528 if (!search_terms.empty() && Utils::stringFindCaseInsensitive(power_it->second.name, search_terms) == std::string::npos)
529 continue;
530
531 matching_ids.push_back(power_it->first);
514532 }
515533
516534 if (!matching_ids.empty()) {
3636 void execute();
3737 void getPlayerInfo();
3838 void getTileInfo();
39 void getEnemyInfo();
39 void getEntityInfo();
4040 void reset();
4141
4242 WidgetButton *button_close;
2424 */
2525
2626 #include "CommonIncludes.h"
27 #include "Enemy.h"
27 #include "Entity.h"
2828 #include "FileParser.h"
2929 #include "FontEngine.h"
3030 #include "Menu.h"
4040 MenuEnemy::MenuEnemy()
4141 : bar_hp(NULL)
4242 , custom_text_pos(false)
43 , bar_fill_offset()
44 , bar_fill_size(-1, -1)
4345 , enemy(NULL)
4446 {
4547 // disappear after 10 seconds
6466 custom_text_pos = true;
6567 text_pos = Parse::popLabelInfo(infile.val);
6668 }
69 // @ATTR bar_fill_offset|point|Offset of the bar's fill graphics relative to the bar_pos X/Y.
70 else if (infile.key == "bar_fill_offset") {
71 bar_fill_offset = Parse::toPoint(infile.val);
72 }
73 // @ATTR bar_fill_size|int, int : Width, Height|Size of the bar's fill graphics. If not defined, the width/height of bar_pos is used.
74 else if (infile.key == "bar_fill_size") {
75 bar_fill_size = Parse::toPoint(infile.val);
76 }
6777 else {
6878 infile.error("MenuEnemy: '%s' is not a valid key.", infile.key.c_str());
6979 }
7080 }
7181 infile.close();
82 }
83
84 // default to bar_pos size if bar_fill_size is undefined
85 if (bar_fill_size.x == -1 || bar_fill_size.y == -1) {
86 bar_fill_size.x = bar_pos.w;
87 bar_fill_size.y = bar_pos.h;
7288 }
7389
7490 loadGraphics();
115131 int hp_bar_length = 0;
116132 if (enemy->stats.get(Stats::HP_MAX) == 0)
117133 hp_bar_length = 0;
118 else if (bar_hp)
119 hp_bar_length = (enemy->stats.hp * bar_hp->getGraphics()->getWidth()) / enemy->stats.get(Stats::HP_MAX);
134 else if (bar_hp) {
135 hp_bar_length = (enemy->stats.hp * bar_fill_size.x) / enemy->stats.get(Stats::HP_MAX);
136 if (hp_bar_length == 0 && enemy->stats.hp > 0)
137 hp_bar_length = 1;
138 }
120139
121140 // draw hp bar background
122141 setBackgroundClip(src);
126145 // draw hp bar fill
127146 if (bar_hp) {
128147 src.w = hp_bar_length;
129 src.h = bar_pos.h;
148 src.h = bar_fill_size.y;
149
150 dest.x += bar_fill_offset.x;
151 dest.y += bar_fill_offset.y;
152
130153 bar_hp->setClipFromRect(src);
131154 bar_hp->setDestFromRect(dest);
155
132156 render_device->render(bar_hp);
133157 }
134158
2929 #include "Utils.h"
3030 #include "WidgetLabel.h"
3131
32 class Enemy;
32 class Entity;
3333
3434 class MenuEnemy : public Menu {
3535 private:
3737 Rect bar_pos;
3838 LabelInfo text_pos;
3939 bool custom_text_pos;
40 Point bar_fill_offset;
41 Point bar_fill_size;
42
4043 WidgetLabel label_text;
4144 WidgetLabel label_stats;
4245 public:
4346 MenuEnemy();
4447 ~MenuEnemy();
45 Enemy *enemy;
48 Entity *enemy;
4649 void loadGraphics();
4750 void handleNewMap();
4851 void logic();
2222 */
2323
2424 #include "Avatar.h"
25 #include "EngineSettings.h"
26 #include "FileParser.h"
27 #include "FontEngine.h"
25 #include "MapRenderer.h"
26 #include "MenuConfig.h"
27 #include "MenuConfirm.h"
2828 #include "MenuExit.h"
29 #include "MessageEngine.h"
29 #include "SaveLoad.h"
30 #include "SharedGameResources.h"
3031 #include "SharedResources.h"
31 #include "SharedGameResources.h"
32 #include "Settings.h"
33 #include "SoundManager.h"
34 #include "UtilsParsing.h"
35 #include "WidgetButton.h"
36 #include "WidgetSlider.h"
3732
38 MenuExit::MenuExit() : Menu() {
39
40 buttonExit = new WidgetButton(WidgetButton::DEFAULT_FILE);
41 buttonClose = new WidgetButton(WidgetButton::DEFAULT_FILE);
42
43 // widgets for game options
44 music_volume_sl = new WidgetSlider(WidgetSlider::DEFAULT_FILE);
45 sound_volume_sl = new WidgetSlider(WidgetSlider::DEFAULT_FILE);
46
47 // Load config settings
48 FileParser infile;
49 // @CLASS MenuExit|Description of menus/exit.txt
50 if(infile.open("menus/exit.txt", FileParser::MOD_FILE, FileParser::ERROR_NORMAL)) {
51 while(infile.next()) {
52 if (parseMenuKey(infile.key, infile.val))
53 continue;
54 else if (infile.key == "title") {
55 // @ATTR title|label|Position of the "Paused" text.
56 title_lb.setFromLabelInfo(Parse::popLabelInfo(infile.val));
57 }
58 else if (infile.key == "exit") {
59 // @ATTR exit|point|Position of the "Save and Exit" button.
60 Point p = Parse::toPoint(infile.val);
61 buttonExit->setBasePos(p.x, p.y, Utils::ALIGN_TOPLEFT);
62 }
63 else if (infile.key == "continue") {
64 // @ATTR continue|point|Position of the "Continue" button.
65 Point p = Parse::toPoint(infile.val);
66 buttonClose->setBasePos(p.x, p.y, Utils::ALIGN_TOPLEFT);
67 }
68 else if (infile.key == "music_volume") {
69 // @ATTR music_volume|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Music Volume" slider relative to the frame.
70 Rect r = Parse::toRect(infile.val);
71 placeOptionWidgets(&music_volume_lb, music_volume_sl, r.x, r.y, r.w, r.h, msg->get("Music Volume"));
72 }
73 else if (infile.key == "sound_volume") {
74 // @ATTR sound_volume|int, int, int, int : Label X, Label Y, Widget X, Widget Y|Position of the "Sound Volume" slider relative to the frame.
75 Rect r = Parse::toRect(infile.val);
76 placeOptionWidgets(&sound_volume_lb, sound_volume_sl, r.x, r.y, r.w, r.h, msg->get("Sound Volume"));
77 }
78 else
79 infile.error("MenuExit: '%s' is not a valid key.", infile.key.c_str());
80 }
81 infile.close();
82 }
83
84 title_lb.setText(msg->get("Paused"));
85 title_lb.setColor(font->getColor(FontEngine::COLOR_MENU_NORMAL));
86
87 exitClicked = false;
88 reload_music = false;
89
90 exit_msg1 = msg->get("Save & Exit");
91 exit_msg2 = msg->get("Exit");
92
93 buttonExit->setLabel(eset->misc.save_onexit ? exit_msg1 : exit_msg2);
94
95 buttonClose->setLabel(msg->get("Continue"));
96
97 setBackground("images/menus/pause_menu.png");
98
99 if (settings->audio) {
100 music_volume_sl->set(0, 128, settings->music_volume);
101 sound_volume_sl->set(0, 128, settings->sound_volume);
102 }
103 else {
104 music_volume_sl->set(0, 128, 0);
105 sound_volume_sl->set(0, 128, 0);
106 }
107
108 tablist.add(buttonClose);
109 tablist.add(buttonExit);
110 tablist.add(music_volume_sl);
111 tablist.add(sound_volume_sl);
112
33 MenuExit::MenuExit()
34 : Menu()
35 , menu_config(new MenuConfig(!MenuConfig::IS_GAME_STATE))
36 , exitClicked(false)
37 , reload_music(false)
38 {
39 menu_config->setHero(pc);
11340 align();
11441 }
11542
11643 void MenuExit::align() {
11744 Menu::align();
118
119 title_lb.setPos(window_area.x, window_area.y);
120
121 buttonExit->setPos(window_area.x, window_area.y);
122 buttonExit->refresh();
123
124 buttonClose->setPos(window_area.x, window_area.y);
125 buttonClose->refresh();
126
127 for (size_t i=0; i<option_labels.size(); ++i) {
128 option_labels[i]->setPos(window_area.x, window_area.y);
129 }
130
131 for (size_t i=0; i<option_widgets.size(); ++i) {
132 option_widgets[i]->setPos(window_area.x, window_area.y);
133 }
45 menu_config->refreshWidgets();
13446 }
13547
13648 void MenuExit::logic() {
13749 if (visible) {
138 std::string title_str = msg->get("Paused") + " [" + Utils::getTimeString(pc->time_played) + "]";
139 title_lb.setText(title_str);
50 menu_config->logic();
51 }
14052
141 tablist.logic();
53 if (menu_config->reload_music) {
54 reload_music = true;
55 menu_config->reload_music = false;
56 }
14257
143 if (buttonExit->checkClick()) {
144 exitClicked = true;
145 }
146 else if (buttonClose->checkClick()) {
147 visible = false;
148 }
149 else if (settings->audio && music_volume_sl->checkClick()) {
150 if (settings->music_volume == 0)
151 reload_music = true;
152 settings->music_volume = static_cast<short>(music_volume_sl->getValue());
153 snd->setVolumeMusic(settings->music_volume);
154 }
155 else if (settings->audio && sound_volume_sl->checkClick()) {
156 settings->sound_volume = static_cast<short>(sound_volume_sl->getValue());
157 snd->setVolumeSFX(settings->sound_volume);
158 }
58 if (menu_config->clicked_pause_continue) {
59 visible = false;
60 menu_config->clicked_pause_continue = false;
61 }
62 else if (menu_config->clicked_pause_exit) {
63 exitClicked = true;
64 menu_config->clicked_pause_exit = false;
65 }
66
67 else if (menu_config->clicked_pause_save) {
68 visible = false;
69 menu_config->clicked_pause_save = false;
70
71 mapr->respawn_point = pc->stats.pos;
72 save_load->saveGame();
15973 }
16074 }
16175
16478 // background
16579 Menu::render();
16680
167 title_lb.render();
81 menu_config->render();
82 }
83 }
16884
169 buttonExit->render();
170 buttonClose->render();
85 void MenuExit::disableSave() {
86 menu_config->setPauseExitText(!MenuConfig::ENABLE_SAVE_GAME);
87 menu_config->setPauseSaveEnabled(!MenuConfig::ENABLE_SAVE_GAME);
88 }
17189
172 for (size_t i=0; i<option_labels.size(); ++i) {
173 option_labels[i]->render();
174 }
175
176 for (size_t i=0; i<option_widgets.size(); ++i) {
177 option_widgets[i]->render();
90 void MenuExit::handleCancel() {
91 if (!visible) {
92 menu_config->resetSelectedTab();
93 visible = true;
94 }
95 else {
96 if (!menu_config->input_confirm->visible) {
97 visible = false;
17898 }
17999 }
180100 }
181101
182 void MenuExit::placeOptionWidgets(WidgetLabel *lb, Widget *w, int x1, int y1, int x2, int y2, std::string const& str) {
183 if (w) {
184 w->setBasePos(x2, y2, Utils::ALIGN_TOPLEFT);
185 option_widgets.push_back(w);
186 }
187
188 if (lb) {
189 lb->setBasePos(x1, y1, Utils::ALIGN_TOPLEFT);
190 lb->setText(str);
191 lb->setJustify(FontEngine::JUSTIFY_CENTER);
192 option_labels.push_back(lb);
193 }
102 MenuExit::~MenuExit() {
103 delete menu_config;
194104 }
195105
196 void MenuExit::disableSave() {
197 if (buttonExit) {
198 buttonExit->setLabel(exit_msg2);
199 buttonExit->refresh();
200 }
201 }
202
203 MenuExit::~MenuExit() {
204 delete buttonExit;
205 delete buttonClose;
206
207 delete music_volume_sl;
208 delete sound_volume_sl;
209 }
210
2525
2626 #include "CommonIncludes.h"
2727 #include "Menu.h"
28 #include "WidgetLabel.h"
2928
30 class WidgetButton;
31 class WidgetSlider;
29 class MenuConfig;
3230
3331 class MenuExit : public Menu {
3432 protected:
35 void placeOptionWidgets(WidgetLabel *lb, Widget *w, int x1, int y1, int x2, int y2, std::string const& str);
36
37 WidgetButton *buttonExit;
38 WidgetButton *buttonClose;
39 WidgetLabel title_lb;
40
41 WidgetSlider *music_volume_sl;
42 WidgetSlider *sound_volume_sl;
43
44 WidgetLabel music_volume_lb;
45 WidgetLabel sound_volume_lb;
46
33 MenuConfig* menu_config;
4734 bool exitClicked;
48
49 std::vector<WidgetLabel*> option_labels;
50 std::vector<Widget*> option_widgets;
51
52 std::string exit_msg1;
53 std::string exit_msg2;
5435
5536 public:
5637 MenuExit();
5738 ~MenuExit();
5839 void align();
59
6040 void logic();
6141 virtual void render();
6242
6545 }
6646
6747 void disableSave();
48 void handleCancel();
6849
6950 bool reload_music;
7051 };
0 /*
1 Copyright © 2020 Justin Jacobs
2
3 This file is part of FLARE.
4
5 FLARE is free software: you can redistribute it and/or modify it under the terms
6 of the GNU General Public License as published by the Free Software Foundation,
7 either version 3 of the License, or (at your option) any later version.
8
9 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
10 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
11 PARTICULAR PURPOSE. See the GNU General Public License for more details.
12
13 You should have received a copy of the GNU General Public License along with
14 FLARE. If not, see http://www.gnu.org/licenses/
15 */
16
17 #include "FileParser.h"
18 #include "FontEngine.h"
19 #include "InputState.h"
20 #include "MenuGameOver.h"
21 #include "MessageEngine.h"
22 #include "SharedResources.h"
23 #include "UtilsParsing.h"
24 #include "WidgetButton.h"
25
26 #include <string>
27
28 MenuGameOver::MenuGameOver()
29 : Menu()
30 , button_continue(new WidgetButton(WidgetButton::DEFAULT_FILE))
31 , button_exit(new WidgetButton(WidgetButton::DEFAULT_FILE))
32 , continue_clicked(false)
33 , exit_clicked(false)
34 {
35 // default layout
36 window_area = Rect(0,0,192,100);
37 alignment = Utils::ALIGN_CENTER;
38 button_continue->setBasePos(window_area.w/2 - button_continue->pos.w/2, window_area.h/2 - button_continue->pos.h/2, Utils::ALIGN_TOPLEFT);
39 button_exit->setBasePos(window_area.w/2 - button_exit->pos.w/2, window_area.h/2 + button_exit->pos.h/2, Utils::ALIGN_TOPLEFT);
40 label.setJustify(FontEngine::JUSTIFY_CENTER);
41 label.setBasePos(window_area.w/2, 8, Utils::ALIGN_TOPLEFT);
42
43 // Load config settings
44 FileParser infile;
45 // @CLASS MenuGameOver|Description of menus/game_over.txt
46 if(infile.open("menus/game_over.txt", FileParser::MOD_FILE, FileParser::ERROR_NORMAL)) {
47 while(infile.next()) {
48 if (parseMenuKey(infile.key, infile.val))
49 continue;
50 else if (infile.key == "label_title") {
51 // @ATTR label_title|label|Position of the "Game Over" text.
52 label.setFromLabelInfo(Parse::popLabelInfo(infile.val));
53 }
54 else if (infile.key == "button_continue") {
55 // @ATTR button_continue|point|Position of the "Continue" button.
56 Point pos = Parse::toPoint(infile.val);
57 button_continue->setBasePos(pos.x, pos.y, Utils::ALIGN_TOPLEFT);
58 }
59 else if (infile.key == "button_exit") {
60 // @ATTR button_exit|point|Position of the "Exit" button.
61 Point pos = Parse::toPoint(infile.val);
62 button_exit->setBasePos(pos.x, pos.y, Utils::ALIGN_TOPLEFT);
63 }
64 }
65 infile.close();
66 }
67
68 label.setText(msg->get("Game Over"));
69 label.setColor(font->getColor(FontEngine::COLOR_MENU_NORMAL));
70
71 button_continue->setLabel(msg->get("Continue"));
72 button_exit->setLabel(msg->get("Save & Exit"));
73
74 tablist.add(button_continue);
75 tablist.add(button_exit);
76
77 setBackground("images/menus/game_over.png");
78
79 align();
80
81 visible = false;
82 }
83
84 void MenuGameOver::align() {
85 Menu::align();
86
87 button_continue->setPos(window_area.x, window_area.y);
88 button_exit->setPos(window_area.x, window_area.y);
89 label.setPos(window_area.x, window_area.y);
90 }
91
92 void MenuGameOver::logic() {
93 if (!visible)
94 return;
95
96 tablist.logic();
97
98 if (button_continue->checkClick()) {
99 continue_clicked = true;
100 }
101 else if (button_exit->checkClick()) {
102 exit_clicked = true;
103 }
104 }
105
106 void MenuGameOver::close() {
107 visible = false;
108 continue_clicked = false;
109 exit_clicked = false;
110 tablist.defocus();
111 }
112
113 void MenuGameOver::disableSave() {
114 button_continue->enabled = false;
115 button_exit->setLabel(msg->get("Exit"));
116 }
117
118 void MenuGameOver::render() {
119 if (!visible)
120 return;
121
122 // background
123 Menu::render();
124
125 label.render();
126
127 button_continue->render();
128 button_exit->render();
129 }
130
131 MenuGameOver::~MenuGameOver() {
132 delete button_continue;
133 delete button_exit;
134 }
135
0 /*
1 Copyright © 2020 Justin Jacobs
2
3 This file is part of FLARE.
4
5 FLARE is free software: you can redistribute it and/or modify it under the terms
6 of the GNU General Public License as published by the Free Software Foundation,
7 either version 3 of the License, or (at your option) any later version.
8
9 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
10 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
11 PARTICULAR PURPOSE. See the GNU General Public License for more details.
12
13 You should have received a copy of the GNU General Public License along with
14 FLARE. If not, see http://www.gnu.org/licenses/
15 */
16
17 #ifndef MENU_GAMEOVER_H
18 #define MENU_GAMEOVER_H
19
20 #include "CommonIncludes.h"
21 #include "Menu.h"
22 #include "WidgetLabel.h"
23
24 class WidgetButton;
25
26 class MenuGameOver : public Menu {
27 protected:
28 WidgetButton *button_continue;
29 WidgetButton *button_exit;
30 WidgetLabel label;
31
32 public:
33 MenuGameOver();
34 ~MenuGameOver();
35
36 void logic();
37 void align();
38 void close();
39 void disableSave();
40 virtual void render();
41
42 bool continue_clicked;
43 bool exit_clicked;
44 };
45
46 #endif
4545
4646 // Load config settings
4747 FileParser infile;
48 // @CLASS MenuHUDLog|Description of menus/hudlog.txt
4849 if(infile.open("menus/hudlog.txt", FileParser::MOD_FILE, FileParser::ERROR_NORMAL)) {
4950 while(infile.next()) {
5051 if (parseMenuKey(infile.key, infile.val))
2727 #include "CommonIncludes.h"
2828 #include "EffectManager.h"
2929 #include "EngineSettings.h"
30 #include "EventManager.h"
3031 #include "FileParser.h"
3132 #include "FontEngine.h"
3233 #include "Hazard.h"
4647 #include "TooltipManager.h"
4748 #include "UtilsParsing.h"
4849 #include "WidgetButton.h"
49 #include "WidgetCheckBox.h"
5050 #include "WidgetSlot.h"
5151
5252 MenuInventory::MenuInventory()
6868 setBackground("images/menus/inventory.png");
6969
7070 closeButton = new WidgetButton("images/menus/buttons/button_x.png");
71 autoEquipCheckBox = new WidgetCheckBox("images/menus/buttons/auto_equip.png");
72
73 autoEquipCheckBox->setChecked(settings->auto_equip);
74 autoEquipCheckBox->tooltip = msg->get("Automatically equip items");
7571
7672 // Load config settings
7773 FileParser infile;
8682 Point pos = Parse::toPoint(infile.val);
8783 closeButton->setBasePos(pos.x, pos.y, Utils::ALIGN_TOPLEFT);
8884 }
89 // @ATTR auto_equip|point|Position of the auto-equip toggle switch.
90 else if (infile.key == "auto_equip") {
91 Point pos = Parse::toPoint(infile.val);
92 autoEquipCheckBox->setBasePos(pos.x, pos.y, Utils::ALIGN_TOPLEFT);
93 }
9485 // @ATTR equipment_slot|repeatable(int, int, string) : X, Y, Slot Type|Position and item type of an equipment slot.
9586 else if(infile.key == "equipment_slot") {
9687 Rect area;
150141 tablist.add(inventory[CARRIED].slots[i]);
151142 }
152143
153 tablist.add(autoEquipCheckBox);
154
155144 align();
156145 }
157146
170159 inventory[CARRIED].setPos(window_area.x, window_area.y);
171160
172161 closeButton->setPos(window_area.x, window_area.y);
173 autoEquipCheckBox->setPos(window_area.x, window_area.y);
174162
175163 label_inventory.setPos(window_area.x, window_area.y);
176164 label_currency.setPos(window_area.x, window_area.y);
207195
208196 // remove a random carried item
209197 if (eset->death_penalty.item) {
210 std::vector<int> removable_items;
198 std::vector<ItemID> removable_items;
211199 removable_items.clear();
212200 for (int i=0; i < MAX_EQUIPPED; i++) {
213201 if (!inventory[EQUIPMENT][i].empty()) {
223211 }
224212 if (!removable_items.empty()) {
225213 size_t random_item = static_cast<size_t>(rand()) % removable_items.size();
226 remove(removable_items[random_item]);
214 remove(removable_items[random_item], 1);
227215 death_message += msg->get("Lost %s.",items->getItemName(removable_items[random_item]));
228216 }
229217 }
244232 visible = false;
245233 snd->play(sfx_close, snd->DEFAULT_CHANNEL, snd->NO_POS, !snd->LOOP);
246234 }
247 else if (autoEquipCheckBox->checkClick()) {
248 settings->auto_equip = !settings->auto_equip;
249 }
250235
251236 if (drag_prev_src == -1) {
252237 clearHighlight();
264249
265250 // close button
266251 closeButton->render();
267
268 // auto-equip toggle
269 autoEquipCheckBox->render();
270252
271253 // text overlay
272254 label_inventory.render();
561543 if (inventory[CARRIED][slot].empty())
562544 return;
563545
546 // run the item's script if it has one
547 if (!items->items[inventory[CARRIED][slot].item].script.empty()) {
548 EventManager::executeScript(items->items[inventory[CARRIED][slot].item].script, pc->stats.pos.x, pc->stats.pos.y);
549 }
564550 // if the item is a book, open it
565 if (!items->items[inventory[CARRIED][slot].item].book.empty()) {
551 else if (!items->items[inventory[CARRIED][slot].item].book.empty()) {
566552 show_book = items->items[inventory[CARRIED][slot].item].book;
567553 }
568 // use a consumable item
569 else if (!items->items[inventory[CARRIED][slot].item].quest_item &&
570 items->items[inventory[CARRIED][slot].item].type == "consumable" &&
571 items->items[inventory[CARRIED][slot].item].power > 0) {
572
573 int power_id = items->items[inventory[CARRIED][slot].item].power;
554 // use a power attached to a non-equipment item
555 else if (items->items[inventory[CARRIED][slot].item].power > 0 && getEquipSlotFromItem(inventory[CARRIED][slot].item, !ONLY_EMPTY_SLOTS) == -1) {
556 PowerID power_id = items->items[inventory[CARRIED][slot].item].power;
574557
575558 // equipment might want to replace powers, so do it here
576559 for (int i = 0; i < inventory[EQUIPMENT].getSlotNumber(); ++i) {
577 int id = inventory[EQUIPMENT][i].item;
560 ItemID id = inventory[EQUIPMENT][i].item;
578561
579562 for (size_t j = 0; j < items->items[id].replace_power.size(); ++j) {
580 if (power_id == items->items[id].replace_power[j].x) {
581 power_id = items->items[id].replace_power[j].y;
563 if (power_id == items->items[id].replace_power[j].first) {
564 power_id = items->items[id].replace_power[j].second;
582565 break;
583566 }
584567 }
779762 /**
780763 * Remove one given item from the player's inventory.
781764 */
782 bool MenuInventory::remove(int item) {
765 bool MenuInventory::remove(ItemID item, int quantity) {
783766 if (activated_item != 0 && activated_slot != -1 && item == activated_item) {
784767 inventory[CARRIED].subtract(activated_slot, 1);
785768 activated_item = 0;
786769 activated_slot = -1;
787770 }
788 else if(!inventory[CARRIED].remove(item, 1)) {
789 if (!inventory[EQUIPMENT].remove(item, 1)) {
771 else if(!inventory[CARRIED].remove(item, quantity)) {
772 if (!inventory[EQUIPMENT].remove(item, quantity)) {
790773 return false;
791774 }
792775 else {
913896 if (items->items.empty())
914897 return;
915898
916 int item_id;
899 ItemID item_id;
917900
918901 // calculate bonuses to basic stats, added by items
919902 bool checkRequired = true;
939922 }
940923
941924 // calculate bonuses. added by item sets
942 std::vector<int> set;
925 std::vector<ItemSetID> set;
926 std::vector<ItemSetID>::iterator it;
943927 std::vector<int> quantity;
944 std::vector<int>::iterator it;
945928
946929 for (int i=0; i<MAX_EQUIPPED; i++) {
947930 item_id = inventory[EQUIPMENT].storage[i].item;
979962
980963 // defaults
981964 for (unsigned i=0; i<pc->stats.powers_list_items.size(); ++i) {
982 int id = pc->stats.powers_list_items[i];
965 PowerID id = pc->stats.powers_list_items[i];
983966 // pc->stats.hp > 0 is hack to keep on_death revive passives working
984967 if (powers->powers[id].passive && pc->stats.hp > 0)
985968 pc->stats.effects.removeEffectPassive(id);
1005988 }
1006989 // disable any incompatible slots, unequipping items if neccessary
1007990 for (int i=0; i<MAX_EQUIPPED; ++i) {
1008 int id = inventory[EQUIPMENT][i].item;
991 ItemID id = inventory[EQUIPMENT][i].item;
1009992 for (unsigned j=0; j<items->items[id].disable_slots.size(); ++j) {
1010 for (int k=0; k<MAX_EQUIPPED; ++k) {
1011 if (slot_type[k] == items->items[id].disable_slots[j]) {
1012 if (!inventory[EQUIPMENT].storage[k].empty()) {
1013 add(inventory[EQUIPMENT].storage[k], CARRIED, ItemStorage::NO_SLOT, ADD_PLAY_SOUND, !ADD_AUTO_EQUIP);
1014 inventory[EQUIPMENT].storage[k].clear();
1015 updateEquipment(k);
1016 applyEquipment();
1017 }
1018 inventory[EQUIPMENT].slots[k]->enabled = false;
1019 }
1020 }
1021 }
1022 }
993 disableEquipmentSlot(items->items[id].disable_slots[j]);
994 }
995 }
996
997 // disable equipment slots via passive powers
998 for (size_t i=0; i<pc->stats.powers_passive.size(); ++i) {
999 PowerID id = pc->stats.powers_passive[i];
1000 if (!powers->powers[id].passive)
1001 continue;
1002
1003 for (size_t j=0; j<powers->powers[id].disable_equip_slots.size(); ++j) {
1004 disableEquipmentSlot(powers->powers[id].disable_equip_slots[j]);
1005 }
1006 }
1007 for (size_t i=0; i<pc->stats.powers_list_items.size(); ++i) {
1008 PowerID id = pc->stats.powers_list_items[i];
1009 if (!powers->powers[id].passive)
1010 continue;
1011
1012 for (size_t j=0; j<powers->powers[id].disable_equip_slots.size(); ++j) {
1013 disableEquipmentSlot(powers->powers[id].disable_equip_slots[j]);
1014 }
1015 }
1016
10231017 // update stat display
10241018 pc->stats.refresh_stats = true;
10251019 }
10361030
10371031 // apply stats from all items
10381032 for (int i=0; i<MAX_EQUIPPED; i++) {
1039 int item_id = inventory[EQUIPMENT].storage[i].item;
1033 ItemID item_id = inventory[EQUIPMENT].storage[i].item;
10401034 const Item &item = items->items[item_id];
10411035
10421036 // apply base stats
10721066
10731067 void MenuInventory::applyItemSetBonuses() {
10741068 // calculate bonuses. added by item sets
1075 std::vector<int> set;
1069 std::vector<ItemSetID> set;
1070 std::vector<ItemSetID>::iterator it;
10761071 std::vector<int> quantity;
1077 std::vector<int>::iterator it;
10781072
10791073 for (int i=0; i<MAX_EQUIPPED; i++) {
1080 int item_id = inventory[EQUIPMENT].storage[i].item;
1074 ItemID item_id = inventory[EQUIPMENT].storage[i].item;
10811075 it = std::find(set.begin(), set.end(), items->items[item_id].set);
10821076 if (items->items[item_id].set > 0 && it != set.end()) {
10831077 quantity[std::distance(set.begin(), it)] += 1;
11021096 EffectDef ed;
11031097
11041098 if (bdata->is_speed) {
1105 ed.id = ed.type = "speed";
1099 ed.id = "speed";
11061100 }
11071101 else if (bdata->is_attack_speed) {
1108 ed.id = ed.type = "attack_speed";
1102 ed.id = "attack_speed";
11091103 }
11101104 else if (bdata->stat_index != -1) {
1111 ed.id = ed.type = Stats::KEY[bdata->stat_index];
1105 ed.id = Stats::KEY[bdata->stat_index];
11121106 }
11131107 else if (bdata->damage_index_min != -1) {
1114 ed.id = ed.type = eset->damage_types.list[bdata->damage_index_min].min;
1108 ed.id = eset->damage_types.list[bdata->damage_index_min].min;
11151109 }
11161110 else if (bdata->damage_index_max != -1) {
1117 ed.id = ed.type = eset->damage_types.list[bdata->damage_index_max].max;
1111 ed.id = eset->damage_types.list[bdata->damage_index_max].max;
11181112 }
11191113 else if (bdata->resist_index != -1) {
1120 ed.id = ed.type = eset->elements.list[bdata->resist_index].id + "_resist";
1114 ed.id = eset->elements.list[bdata->resist_index].id + "_resist";
11211115 }
11221116 else if (bdata->base_index > -1 && static_cast<size_t>(bdata->base_index) < eset->primary_stats.list.size()) {
1123 ed.id = ed.type = eset->primary_stats.list[bdata->base_index].id;
1117 ed.id = eset->primary_stats.list[bdata->base_index].id;
11241118 }
11251119 else if (bdata->power_id > 0) {
11261120 menu->pow->addBonusLevels(bdata->power_id, bdata->value);
11271121 return; // don't add item effect
11281122 }
11291123
1124 ed.type = Effect::getTypeFromString(ed.id);
1125
11301126 pc->stats.effects.addItemEffect(ed, 0, bdata->value);
11311127 }
11321128
11491145 void MenuInventory::fillEquipmentSlots() {
11501146 // create temporary arrays
11511147 int slot_number = MAX_EQUIPPED;
1152 int *equip_item = new int[slot_number];
1148 ItemID *equip_item = new ItemID[slot_number];
11531149 int *equip_quantity = new int[slot_number];;
11541150
11551151 // initialize arrays
11971193 return 0;
11981194 }
11991195
1200 int MenuInventory::getEquipSlotFromItem(int item, bool only_empty_slots) {
1196 int MenuInventory::getEquipSlotFromItem(ItemID item, bool only_empty_slots) {
12011197 if (!items->requirementsMet(&pc->stats, item))
12021198 return -2;
12031199
12211217 return equip_slot;
12221218 }
12231219
1224 int MenuInventory::getPowerMod(int meta_power) {
1220 PowerID MenuInventory::getPowerMod(PowerID meta_power) {
12251221 for (int i = 0; i < inventory[EQUIPMENT].getSlotNumber(); ++i) {
1226 int id = inventory[EQUIPMENT][i].item;
1222 ItemID id = inventory[EQUIPMENT][i].item;
12271223
12281224 for (size_t j=0; j<items->items[id].replace_power.size(); j++) {
1229 if (items->items[id].replace_power[j].x == meta_power && items->items[id].replace_power[j].y != meta_power) {
1230 return items->items[id].replace_power[j].y;
1225 if (items->items[id].replace_power[j].first == meta_power && items->items[id].replace_power[j].second != meta_power) {
1226 return items->items[id].replace_power[j].second;
12311227 }
12321228 }
12331229 }
12341230
12351231 return 0;
1232 }
1233
1234 void MenuInventory::disableEquipmentSlot(const std::string& disable_slot_type) {
1235 for (int i=0; i<MAX_EQUIPPED; ++i) {
1236 if (slot_type[i] == disable_slot_type) {
1237 if (!inventory[EQUIPMENT].storage[i].empty()) {
1238 add(inventory[EQUIPMENT].storage[i], CARRIED, ItemStorage::NO_SLOT, ADD_PLAY_SOUND, !ADD_AUTO_EQUIP);
1239 inventory[EQUIPMENT].storage[i].clear();
1240 updateEquipment(i);
1241 applyEquipment();
1242 }
1243 inventory[EQUIPMENT].slots[i]->enabled = false;
1244 }
1245 }
1246 }
1247
1248 bool MenuInventory::canActivateItem(ItemID item) {
1249 if (!items->items[item].script.empty())
1250 return true;
1251 if (!items->items[item].book.empty())
1252 return true;
1253 if (items->items[item].power > 0 && getEquipSlotFromItem(item, !ONLY_EMPTY_SLOTS) == -1)
1254 return true;
1255
1256 return false;
12361257 }
12371258
12381259 MenuInventory::~MenuInventory() {
12391260 delete closeButton;
1240 delete autoEquipCheckBox;
1241 }
1261 }
2626 #define MENU_INVENTORY_H
2727
2828 #include "CommonIncludes.h"
29 #include "Menu.h"
2930 #include "MenuItemStorage.h"
3031 #include "Utils.h"
3132 #include "WidgetLabel.h"
3334 class BonusData;
3435 class StatBlock;
3536 class WidgetButton;
36 class WidgetCheckBox;
3737
3838 class MenuInventory : public Menu {
3939 private:
4141
4242 void loadGraphics();
4343 void updateEquipment(int slot);
44 int getEquipSlotFromItem(int item, bool only_empty_slots);
44 int getEquipSlotFromItem(ItemID item, bool only_empty_slots);
4545
4646 WidgetLabel label_inventory;
4747 WidgetLabel label_currency;
4848 WidgetButton *closeButton;
49 WidgetCheckBox *autoEquipCheckBox;
5049
5150 int MAX_EQUIPPED;
5251 int MAX_CARRIED;
6160 Timer tap_to_activate_timer;
6261
6362 int activated_slot;
64 int activated_item;
63 ItemID activated_item;
6564
6665 public:
6766 enum {
9392 void activate(const Point& position);
9493
9594 bool add(ItemStack stack, int area, int slot, bool play_sound, bool auto_equip);
96 bool remove(int item);
95 bool remove(ItemID item, int quantity);
9796 void removeFromPrevSlot(int quantity);
9897 void addCurrency(int count);
9998 void removeCurrency(int count);
10099 bool buy(ItemStack stack, int tab, bool dragging);
101100 bool sell(ItemStack stack);
102101
103 bool requirementsMet(int item);
102 bool requirementsMet(ItemID item);
104103
105104 void applyEquipment();
106105 void applyItemStats();
116115
117116 int getMaxPurchasable(ItemStack item, int vendor_tab);
118117
119 int getPowerMod(int meta_power);
118 PowerID getPowerMod(PowerID meta_power);
119
120 void disableEquipmentSlot(const std::string& slot_type);
121
122 bool canActivateItem(ItemID item);
120123
121124 Rect carried_area;
122125 std::vector<Rect> equipped_area;
3939 , drag_prev_slot(-1)
4040 , slots()
4141 , current_slot(NULL)
42 , highlight(NULL)
42 , highlight()
4343 , highlight_image(NULL)
4444 , overlay_disabled(NULL) {
4545 }
5050 grid_pos.x = _area.x;
5151 grid_pos.y = _area.y;
5252 for (int i = 0; i < _slot_number; i++) {
53 WidgetSlot *slot = new WidgetSlot(WidgetSlot::NO_ICON, Input::ACCEPT, WidgetSlot::SIZE_NORMAL);
53 WidgetSlot *slot = new WidgetSlot(WidgetSlot::NO_ICON, Input::ACCEPT);
5454 slots.push_back(slot);
5555 }
5656 nb_cols = _nb_cols;
57 highlight = new bool[_slot_number];
57 highlight.resize(_slot_number);
5858 for (int i=0; i<_slot_number; i++) {
5959 highlight[i] = false;
6060 slots[i]->pos.x = grid_area.x + (i % nb_cols * eset->resolutions.icon_size);
6868 void MenuItemStorage::initFromList(int _slot_number, const std::vector<Rect>& _area, const std::vector<std::string>& _slot_type) {
6969 ItemStorage::init( _slot_number);
7070 for (int i = 0; i < _slot_number; i++) {
71 WidgetSlot *slot = new WidgetSlot(WidgetSlot::NO_ICON, Input::ACCEPT, WidgetSlot::SIZE_NORMAL);
71 WidgetSlot *slot = new WidgetSlot(WidgetSlot::NO_ICON, Input::ACCEPT);
7272 slot->pos = _area[i];
7373 slot->setBasePos(slot->pos.x, slot->pos.y, Utils::ALIGN_TOPLEFT);
7474 slots.push_back(slot);
7575 }
7676 nb_cols = 0;
7777 slot_type = _slot_type;
78 highlight = new bool[_slot_number];
78 highlight.resize(_slot_number);
7979 for (int i=0; i<_slot_number; i++) {
8080 highlight[i] = false;
8181 }
231231 }
232232 }
233233
234 ItemStack MenuItemStorage::getItemStackAtPos(const Point& position) {
235 int slot_over = slotOver(position);
236 if (slot_over > -1) {
237 return storage[slot_over];
238 }
239 return ItemStack();
240 }
241
234242 MenuItemStorage::~MenuItemStorage() {
235243 if (highlight_image)
236244 delete highlight_image;
237245
238 delete[] highlight;
239
240246 if (overlay_disabled)
241247 delete overlay_disabled;
242248
5555 void highlightMatching(const std::string& type);
5656 void highlightClear();
5757 void setPos(int x, int y);
58 ItemStack getItemStackAtPos(const Point& position);
5859 std::vector<std::string> slot_type;
5960
6061 int drag_prev_slot;
6162 std::vector<WidgetSlot*> slots;
6263 WidgetSlot *current_slot;
6364
64 bool * highlight;
65 std::vector<bool> highlight;
6566 Sprite *highlight_image;
6667 Sprite *overlay_disabled;
6768 };
3434 #include "MenuDevConsole.h"
3535 #include "MenuEnemy.h"
3636 #include "MenuExit.h"
37 #include "MenuGameOver.h"
3738 #include "MenuHUDLog.h"
3839 #include "MenuInventory.h"
3940 #include "MenuLog.h"
5960 #include "UtilsFileSystem.h"
6061 #include "UtilsParsing.h"
6162 #include "WidgetSlot.h"
63 #include "WidgetTooltip.h"
64 #include "TooltipManager.h"
6265
6366 MenuManager::MenuManager()
6467 : key_lock(false)
6871 , drag_stack()
6972 , drag_power(0)
7073 , drag_src(DRAG_SRC_NONE)
71 , drag_icon(new WidgetSlot(WidgetSlot::NO_ICON, Input::ACCEPT, WidgetSlot::SIZE_NORMAL))
74 , drag_icon(new WidgetSlot(WidgetSlot::NO_ICON, Input::ACCEPT))
7275 , done(false)
7376 , act_drag_hover(false)
7477 , keydrag_pos(Point())
75 /*std::vector<Menu*> menus;*/
7678 , inv(NULL)
7779 , pow(NULL)
7880 , chr(NULL)
9193 , exit(NULL)
9294 , effects(NULL)
9395 , stash(NULL)
96 , game_over(NULL)
9497 , devconsole(NULL)
9598 , touch_controls(NULL)
9699 , subtitles(NULL)
97100 , pause(false)
98101 , menus_open(false) {
99102
100 hp = new MenuStatBar("hp");
101 mp = new MenuStatBar("mp");
102 xp = new MenuStatBar("xp");
103 hp = new MenuStatBar(MenuStatBar::TYPE_HP);
104 mp = new MenuStatBar(MenuStatBar::TYPE_MP);
105 xp = new MenuStatBar(MenuStatBar::TYPE_XP);
103106 effects = new MenuActiveEffects();
104107 hudlog = new MenuHUDLog();
105108 act = new MenuActionBar();
115118 stash = new MenuStash();
116119 book = new MenuBook();
117120 num_picker = new MenuNumPicker();
121 game_over = new MenuGameOver();
118122
119123 menus.push_back(hp); // menus[0]
120124 menus.push_back(mp); // menus[1]
134138 menus.push_back(stash); // menus[15]
135139 menus.push_back(book); // menus[16]
136140 menus.push_back(num_picker); // menus[17]
141 menus.push_back(game_over); // menus[18]
137142
138143 if (settings->dev_mode) {
139144 devconsole = new MenuDevConsole();
187192
188193 void MenuManager::handleKeyboardNavigation() {
189194
190 stash->tablist.setNextTabList(NULL);
195 for (size_t i = 0; i < stash->tabs.size(); ++i) {
196 stash->tabs[i].tablist.setNextTabList(NULL);
197 }
191198 vendor->tablist_buy.setNextTabList(NULL);
192199 vendor->tablist_sell.setNextTabList(NULL);
193200 chr->tablist.setNextTabList(NULL);
212219
213220 if (drag_src == DRAG_SRC_NONE) {
214221 if (inv->visible) {
215 stash->tablist.setNextTabList(&inv->tablist);
222 for (size_t i = 0; i < stash->tabs.size(); ++i) {
223 stash->tabs[i].tablist.setNextTabList(&inv->tablist);
224 }
216225 vendor->tablist_buy.setNextTabList(&inv->tablist);
217226 vendor->tablist_sell.setNextTabList(&inv->tablist);
218227 chr->tablist.setNextTabList(&inv->tablist);
232241 }
233242 }
234243 else if (pow->visible) {
235 stash->tablist.setNextTabList(&pow->tablist);
244 for (size_t i = 0; i < stash->tabs.size(); ++i) {
245 stash->tabs[i].tablist.setNextTabList(&pow->tablist);
246 }
236247 vendor->tablist_buy.setNextTabList(&pow->tablist);
237248 vendor->tablist_sell.setNextTabList(&pow->tablist);
238249 chr->tablist.setNextTabList(&pow->tablist);
249260 }
250261
251262 // stash and vendor always start locked
252 if (!stash->visible) stash->tablist.lock();
263 if (!stash->visible) {
264 stash->tablist.lock();
265 for (size_t i = 0; i < stash->tabs.size(); ++i) {
266 stash->tabs[i].tablist.lock();
267 }
268 }
253269 if (!vendor->visible) {
254270 vendor->tablist.lock();
255271 vendor->tablist_buy.lock();
270286 inpt->lock[Input::ACCEPT] = true;
271287 }
272288 }
289
273290 void MenuManager::logic() {
274291 ItemStack stack;
275292
276293 subtitles->logic(snd->getLastPlayedSID());
277294
295 // refresh statbar values from player statblock
278296 hp->update(0, pc->stats.hp, pc->stats.get(Stats::HP_MAX));
279297 mp->update(0, pc->stats.mp, pc->stats.get(Stats::MP_MAX));
280298
282300 xp->setCustomString(msg->get("XP: %d", pc->stats.xp));
283301 }
284302 else {
285 xp->setCustomString(msg->get("XP: %d/%d", pc->stats.xp, eset->xp.getLevelXP(pc->stats.level + 1)));
286 }
287 xp->update(eset->xp.getLevelXP(pc->stats.level), pc->stats.xp, eset->xp.getLevelXP(pc->stats.level + 1));
303 // displays xp relative to current pc level
304 xp->setCustomString(msg->get("XP: %d/%d", pc->stats.xp - eset->xp.getLevelXP(pc->stats.level), eset->xp.getLevelXP(pc->stats.level + 1) - eset->xp.getLevelXP(pc->stats.level)));
305 }
306 // xp relative to current level (from 0 to ammount need for next level)
307 xp->update(0, pc->stats.xp - eset->xp.getLevelXP(pc->stats.level), eset->xp.getLevelXP(pc->stats.level + 1) - eset->xp.getLevelXP(pc->stats.level));
308
309 // close talker/vendor menu if player is attacked
310 if (pc->stats.abort_npc_interact && eset->misc.combat_aborts_npc_interact) {
311 talker->setNPC(NULL);
312 vendor->setNPC(NULL);
313 }
314 pc->stats.abort_npc_interact = false;
288315
289316 // when selecting item quantities, don't process other menus
290317 if (num_picker->visible) {
330357 if (!inpt->usingMouse())
331358 handleKeyboardNavigation();
332359
360 // Check if the mouse is within any of the visible windows. Excludes the minimap and the exit/pause menu
361 bool is_within_menus = (Utils::isWithinRect(act->window_area, inpt->mouse) ||
362 (book->visible && Utils::isWithinRect(book->window_area, inpt->mouse)) ||
363 (chr->visible && Utils::isWithinRect(chr->window_area, inpt->mouse)) ||
364 (inv->visible && Utils::isWithinRect(inv->window_area, inpt->mouse)) ||
365 (vendor->visible && Utils::isWithinRect(vendor->window_area, inpt->mouse)) ||
366 (pow->visible && Utils::isWithinRect(pow->window_area, inpt->mouse)) ||
367 (questlog->visible && Utils::isWithinRect(questlog->window_area, inpt->mouse)) ||
368 (talker->visible && Utils::isWithinRect(talker->window_area, inpt->mouse)) ||
369 (stash->visible && Utils::isWithinRect(stash->window_area, inpt->mouse)) ||
370 (settings->dev_mode && devconsole->visible && Utils::isWithinRect(devconsole->window_area, inpt->mouse)));
371
333372 // Stop attacking if the cursor is inside an interactable menu
334 if (pc->using_main1 || pc->using_main2) {
335 if (Utils::isWithinRect(act->window_area, inpt->mouse) ||
336 (book->visible && Utils::isWithinRect(book->window_area, inpt->mouse)) ||
337 (chr->visible && Utils::isWithinRect(chr->window_area, inpt->mouse)) ||
338 (inv->visible && Utils::isWithinRect(inv->window_area, inpt->mouse)) ||
339 (vendor->visible && Utils::isWithinRect(vendor->window_area, inpt->mouse)) ||
340 (pow->visible && Utils::isWithinRect(pow->window_area, inpt->mouse)) ||
341 (questlog->visible && Utils::isWithinRect(questlog->window_area, inpt->mouse)) ||
342 (talker->visible && Utils::isWithinRect(talker->window_area, inpt->mouse)) ||
343 (stash->visible && Utils::isWithinRect(stash->window_area, inpt->mouse)))
344 {
345 inpt->pressing[Input::MAIN1] = false;
346 inpt->pressing[Input::MAIN2] = false;
347 }
348 }
373 if ((pc->using_main1 || pc->using_main2) && is_within_menus) {
374 inpt->pressing[Input::MAIN1] = false;
375 inpt->pressing[Input::MAIN2] = false;
376 }
377
378 if (!exit->visible && !is_within_menus)
379 mini->logic();
349380
350381 book->logic();
351382 effects->logic();
359390 questlog->logic();
360391 talker->logic();
361392 stash->logic();
393 game_over->logic();
362394
363395 if (settings->dev_mode) {
364396 devconsole->logic();
433465 else if (menus_open) {
434466 closeAll();
435467 }
436 else {
437 exit->visible = !exit->visible;
438 }
439 }
468 else if (!game_over->visible) {
469 exit->handleCancel();
470 }
471 }
472 }
473 if (mini->clicked_config) {
474 mini->clicked_config = false;
475 showExitMenu();
440476 }
441477
442478 if (exit->visible) {
443479 exit->logic();
444480 if (exit->isExitRequested()) {
481 done = true;
482 }
483 // if dpi scaling is changed, we need to realign the menus
484 if (inpt->window_resized) {
485 alignAll();
486 }
487 }
488 else if (game_over->visible) {
489 if (game_over->exit_clicked) {
490 game_over->close();
445491 done = true;
446492 }
447493 }
659705 stash->itemReturn(inv->drop_stack.front());
660706 inv->drop_stack.pop();
661707 }
662 stash->updated = true;
708 stash->tabs[stash->getTab()].updated = true;
663709 }
664710 else {
665711 // start dragging a stash item
729775 }
730776 }
731777 // action bar
732 if (!inpt->touch_locked && (act->isWithinSlots(inpt->mouse) || act->isWithinMenus(inpt->mouse))) {
778 if (!exit->visible && !inpt->touch_locked && (act->isWithinSlots(inpt->mouse) || act->isWithinMenus(inpt->mouse))) {
733779 inpt->lock[Input::MAIN1] = true;
734780
735781 // ctrl-click action bar to clear that slot
809855 }
810856 }
811857 else if (stash->visible && Utils::isWithinRect(stash->window_area, inpt->mouse)) {
812 stash->stock.drag_prev_slot = -1;
858 for (size_t i = 0; i < stash->tabs.size(); ++i) {
859 stash->tabs[i].stock.drag_prev_slot = -1;
860 }
813861 if (!stash->drop(inpt->mouse, drag_stack)) {
814862 inv->itemReturn(stash->drop_stack.front());
815863 stash->drop_stack.pop();
854902 stash->itemReturn(inv->drop_stack.front());
855903 inv->drop_stack.pop();
856904 }
857 stash->updated = true;
905 stash->tabs[stash->getTab()].updated = true;
858906 }
859907 else if (stash->visible && Utils::isWithinRect(stash->window_area, inpt->mouse)) {
860908 if (!stash->drop(inpt->mouse,drag_stack)) {
864912 }
865913 else {
866914 drop_stack.push(drag_stack);
867 stash->updated = true;
915 stash->tabs[stash->getTab()].updated = true;
868916 }
869917 }
870918
10221070 // stash menu
10231071 if (stash->visible && stash->getCurrentTabList() && drag_src != DRAG_SRC_ACTIONBAR) {
10241072 int slot_index = stash->getCurrentTabList()->getCurrent();
1025 WidgetSlot::CLICK_TYPE slotClick = stash->stock.slots[slot_index]->checkClick();
1026 Point src_slot(stash->stock.slots[slot_index]->pos.x, stash->stock.slots[slot_index]->pos.y);
1073 size_t tab = stash->getTab();
1074 WidgetSlot::CLICK_TYPE slotClick = stash->tabs[tab].stock.slots[slot_index]->checkClick();
1075 Point src_slot(stash->tabs[tab].stock.slots[slot_index]->pos.x, stash->tabs[tab].stock.slots[slot_index]->pos.y);
10271076
10281077 // pick up item
10291078 if (slotClick == WidgetSlot::CHECKED && drag_stack.empty()) {
10391088 }
10401089 // rearrange item
10411090 else if (slotClick == WidgetSlot::CHECKED && !drag_stack.empty()) {
1042 stash->stock.slots[slot_index]->checked = false;
1091 stash->tabs[tab].stock.slots[slot_index]->checked = false;
10431092 if (!stash->drop(src_slot, drag_stack)) {
10441093 drop_stack.push(stash->drop_stack.front());
10451094 stash->drop_stack.pop();
10591108 drag_stack.clear();
10601109 keyboard_dragging = false;
10611110 sticky_dragging = false;
1062 stash->updated = true;
1111 stash->tabs[stash->getTab()].updated = true;
10631112 }
10641113 }
10651114
11671216
11681217 vendor->stock[ItemManager::VENDOR_BUY].drag_prev_slot = -1;
11691218 vendor->stock[ItemManager::VENDOR_SELL].drag_prev_slot = -1;
1170 stash->stock.drag_prev_slot = -1;
1219 for (size_t i = 0; i < stash->tabs.size(); ++i) {
1220 stash->tabs[i].stock.drag_prev_slot = -1;
1221 }
11711222 inv->drag_prev_src = -1;
11721223 inv->inventory[MenuInventory::EQUIPMENT].drag_prev_slot = -1;
11731224 inv->inventory[MenuInventory::CARRIED].drag_prev_slot = -1;
12361287 else {
12371288 // Find tooltips depending on mouse position
12381289 if (!book->visible) {
1290 pushMatchingItemsOf(inpt->mouse);
1291
12391292 chr->renderTooltips(inpt->mouse);
12401293 vendor->renderTooltips(inpt->mouse);
12411294 stash->renderTooltips(inpt->mouse);
12421295 pow->renderTooltips(inpt->mouse);
12431296 inv->renderTooltips(inpt->mouse);
12441297 }
1245 effects->renderTooltips(inpt->mouse);
1246 act->renderTooltips(inpt->mouse);
1298 if (!exit->visible) {
1299 effects->renderTooltips(inpt->mouse);
1300 act->renderTooltips(inpt->mouse);
1301 }
12471302 }
12481303 }
12491304
12751330 }
12761331
12771332 void MenuManager::handleKeyboardTooltips() {
1333 if (book->visible)
1334 return;
1335
12781336 if (vendor->visible && vendor->getCurrentTabList() && vendor->getCurrentTabList() != (&vendor->tablist)) {
12791337 int slot_index = vendor->getCurrentTabList()->getCurrent();
12801338
12871345 keydrag_pos.y = vendor->stock[ItemManager::VENDOR_SELL].slots[slot_index]->pos.y;
12881346 }
12891347
1348 pushMatchingItemsOf(keydrag_pos);
12901349 vendor->renderTooltips(keydrag_pos);
12911350 }
12921351
12931352 if (stash->visible && stash->getCurrentTabList()) {
12941353 int slot_index = stash->getCurrentTabList()->getCurrent();
1295
1296 keydrag_pos.x = stash->stock.slots[slot_index]->pos.x;
1297 keydrag_pos.y = stash->stock.slots[slot_index]->pos.y;
1298
1354 size_t tab = stash->getTab();
1355
1356 keydrag_pos.x = stash->tabs[tab].stock.slots[slot_index]->pos.x;
1357 keydrag_pos.y = stash->tabs[tab].stock.slots[slot_index]->pos.y;
1358
1359 pushMatchingItemsOf(keydrag_pos);
12991360 stash->renderTooltips(keydrag_pos);
13001361 }
13011362
13251386 keydrag_pos.y = temp_widget->pos.y;
13261387 }
13271388
1389 pushMatchingItemsOf(keydrag_pos);
13281390 inv->renderTooltips(keydrag_pos);
13291391 }
13301392
13851447 }
13861448
13871449 void MenuManager::showExitMenu() {
1450 if (game_over->visible)
1451 return;
1452
13881453 pause = true;
13891454 closeAll();
1390 if (exit)
1391 exit->visible = true;
1455 if (exit) {
1456 // handleCancel() will show the menu, but only if it is already hidden
1457 // we use handleCancel() here because it will reset the menu to the "Exit" tab
1458 exit->visible = false;
1459 exit->handleCancel();
1460 }
1461 }
1462
1463 void MenuManager::pushMatchingItemsOf(const Point& hov_pos) {
1464 if (!settings->item_compare_tips)
1465 return;
1466
1467 int area = -1;
1468 ItemStack hov_stack;
1469
1470 if (inv->visible && Utils::isWithinRect(inv->window_area, hov_pos)) {
1471 area = inv->areaOver(hov_pos);
1472 if (area == MenuInventory::CARRIED)
1473 hov_stack = inv->inventory[area].getItemStackAtPos(hov_pos);
1474 }
1475 else if (vendor->visible && Utils::isWithinRect(vendor->window_area, hov_pos)) {
1476 area = vendor->getTab();
1477 if (area >= 0)
1478 hov_stack = vendor->stock[area].getItemStackAtPos(hov_pos);
1479 }
1480 else if (stash->visible && Utils::isWithinRect(stash->window_area, hov_pos)) {
1481 area = static_cast<int>(stash->getTab());
1482 if (area >= 0)
1483 hov_stack = stash->tabs[area].stock.getItemStackAtPos(hov_pos);
1484 }
1485
1486 // we assume that a non-empty item type means that there is a primary tooltip
1487 if (hov_stack.item > 0 && !items->items[hov_stack.item].type.empty()) {
1488 size_t tip_index = 1;
1489
1490 //get equipped items of the same type
1491 for (size_t i = 0; i < inv->equipped_area.size(); i++) {
1492 if (tip_index >= TooltipManager::TOOLTIP_COUNT)
1493 break; // can't show any more tooltips
1494
1495 if (inv->slot_type[i] == items->items[hov_stack.item].type) {
1496 if (!inv->inventory[MenuInventory::EQUIPMENT].storage[i].empty()) {
1497 Point match_pos(inv->equipped_area[i].x, inv->equipped_area[i].y);
1498
1499 TooltipData match = inv->inventory[MenuInventory::EQUIPMENT].checkTooltip(match_pos, &pc->stats, ItemManager::PLAYER_INV);
1500 match.addColoredText(msg->get("Equipped"), font->getColor(FontEngine::COLOR_ITEM_FLAVOR));
1501
1502 tooltipm->push(match, hov_pos, TooltipData::STYLE_FLOAT, tip_index);
1503 tip_index++;
1504 }
1505 }
1506 }
1507 }
13921508 }
13931509
13941510 MenuManager::~MenuManager() {
14111527 delete stash;
14121528 delete book;
14131529 delete num_picker;
1530 delete game_over;
14141531
14151532 if (settings->dev_mode) {
14161533 delete devconsole;
2828 #include "ItemManager.h"
2929
3030 class Menu;
31 class MenuActionBar;
32 class MenuActiveEffects;
33 class MenuBook;
34 class MenuCharacter;
35 class MenuDevConsole;
36 class MenuEnemy;
37 class MenuExit;
38 class MenuGameOver;
39 class MenuHUDLog;
3140 class MenuInventory;
32 class MenuPowers;
33 class MenuCharacter;
3441 class MenuLog;
35 class MenuHUDLog;
36 class MenuActionBar;
37 class MenuBook;
38 class MenuStatBar;
3942 class MenuMiniMap;
4043 class MenuNumPicker;
41 class MenuEnemy;
44 class MenuPowers;
45 class MenuStash;
46 class MenuStatBar;
47 class MenuTalker;
48 class MenuTouchControls;
4249 class MenuVendor;
43 class MenuTalker;
44 class MenuExit;
45 class MenuActiveEffects;
46 class MenuStash;
47 class MenuDevConsole;
48 class MenuTouchControls;
4950 class StatBlock;
5051 class Subtitles;
5152 class WidgetSlot;
6970 bool keyboard_dragging;
7071 bool sticky_dragging;
7172 ItemStack drag_stack;
72 int drag_power;
73 PowerID drag_power;
7374 int drag_src;
7475 WidgetSlot *drag_icon;
7576
8485
8586 void handleKeyboardNavigation();
8687 void dragAndDropWithKeyboard();
88 void pushMatchingItemsOf(const Point& hov_pos);
8789
8890 public:
8991 explicit MenuManager();
116118 MenuExit *exit;
117119 MenuActiveEffects *effects;
118120 MenuStash *stash;
121 MenuGameOver *game_over;
119122
120123 MenuDevConsole *devconsole;
121124 MenuTouchControls *touch_controls;
2222 * class MenuMiniMap
2323 */
2424
25 #include "Avatar.h"
2526 #include "CommonIncludes.h"
27 #include "Entity.h"
28 #include "EntityManager.h"
2629 #include "EngineSettings.h"
2730 #include "FileParser.h"
2831 #include "FontEngine.h"
32 #include "InputState.h"
2933 #include "MapCollision.h"
34 #include "MapRenderer.h"
3035 #include "Menu.h"
3136 #include "MenuMiniMap.h"
37 #include "MessageEngine.h"
3238 #include "RenderDevice.h"
3339 #include "Settings.h"
3440 #include "SharedResources.h"
41 #include "SharedGameResources.h"
3542 #include "UtilsParsing.h"
43 #include "WidgetButton.h"
3644 #include "WidgetLabel.h"
3745
3846 #include <cmath>
3947
4048 MenuMiniMap::MenuMiniMap()
41 : color_wall(128,128,128,255)
42 , color_obst(64,64,64,255)
43 , color_hero(255,255,255,255)
49 : color_wall(128,128,128)
50 , color_obst(64,64,64)
51 , color_hero(255,255,255)
52 , color_enemy(255,0,0)
53 , color_ally(255,255,0)
54 , color_npc(0,255,0)
55 , color_teleport(0,191,255)
4456 , map_surface(NULL)
4557 , map_surface_2x(NULL)
58 , map_surface_entities(NULL)
59 , map_surface_entities_2x(NULL)
4660 , label(new WidgetLabel())
4761 , compass(NULL)
62 , button_config(NULL)
4863 , current_zoom(1)
64 , lock_zoom_change(false)
65 , clicked_config(false)
4966 {
5067 std::string bg_filename;
5168
6986 else if (infile.key == "background") {
7087 bg_filename = infile.val;
7188 }
89 // @ATTR color_wall|color, int : Color, Alpha|Color used for walls.
90 else if (infile.key == "color_wall") {
91 color_wall = Parse::toRGBA(infile.val);
92 }
93 // @ATTR color_obst|color, int : Color, Alpha|Color used for small obstacles and pits.
94 else if (infile.key == "color_obst") {
95 color_obst = Parse::toRGBA(infile.val);
96 }
97 // @ATTR color_hero|color, int : Color, Alpha|Color used for the player character.
98 else if (infile.key == "color_hero") {
99 color_hero = Parse::toRGBA(infile.val);
100 }
101 // @ATTR color_enemy|color, int : Color, Alpha|Color used for enemies engaged in combat.
102 else if (infile.key == "color_enemy") {
103 color_enemy = Parse::toRGBA(infile.val);
104 }
105 // @ATTR color_ally|color, int : Color, Alpha|Color used for allies.
106 else if (infile.key == "color_ally") {
107 color_ally = Parse::toRGBA(infile.val);
108 }
109 // @ATTR color_npc|color, int : Color, Alpha|Color used for NPCs.
110 else if (infile.key == "color_npc") {
111 color_npc = Parse::toRGBA(infile.val);
112 }
113 // @ATTR color_teleport|color, int : Color, Alpha|Color used for intermap teleports.
114 else if (infile.key == "color_teleport") {
115 color_teleport = Parse::toRGBA(infile.val);
116 }
117 // @ATTR button_config|point|Position of the 'Configuration' button. The button will be hidden if not defined.
118 else if (infile.key == "button_config") {
119 if (!button_config) {
120 button_config = new WidgetButton("images/menus/buttons/button_config.png");
121 }
122 Point p = Parse::toPoint(infile.val);
123 button_config->setBasePos(p.x, p.y, Utils::ALIGN_TOPLEFT);
124 }
72125 else {
73126 infile.error("MenuMiniMap: '%s' is not a valid key.", infile.key.c_str());
74127 }
94147 gfx->unref();
95148 }
96149
150 if (button_config)
151 button_config->tooltip = msg->get("Configuration");
152
97153 align();
98154 }
99155
100156 void MenuMiniMap::align() {
101157 Menu::align();
102158 label->setPos(window_area.x, window_area.y);
159
160 if (button_config)
161 button_config->setPos(window_area.x, window_area.y);
162
163 map_area.x = window_area.x + pos.x;
164 map_area.y = window_area.y + pos.y;
165 map_area.w = pos.w;
166 map_area.h = pos.h;
103167
104168 // compass
105169 Point compass_pos(window_area.x + pos.x + pos.w - compass->getGraphicsWidth(), pos.y + window_area.y);
128192 }
129193 }
130194
195 void MenuMiniMap::logic() {
196 if (!settings->show_hud || settings->minimap_mode == Settings::MINIMAP_HIDDEN)
197 return;
198
199 if (inpt->usingMouse()) {
200 bool is_within_maparea = Utils::isWithinRect(map_area, inpt->mouse);
201
202 if (!lock_zoom_change)
203 lock_zoom_change = inpt->pressing[Input::MAIN1] && !is_within_maparea;
204 else if (!inpt->pressing[Input::MAIN1])
205 lock_zoom_change = false;
206
207 if (is_within_maparea && inpt->pressing[Input::MAIN1] && !inpt->lock[Input::MAIN1] && !lock_zoom_change) {
208 inpt->lock[Input::MAIN1] = true;
209 if (settings->minimap_mode == Settings::MINIMAP_NORMAL)
210 settings->minimap_mode = Settings::MINIMAP_2X;
211 else if (settings->minimap_mode == Settings::MINIMAP_2X)
212 settings->minimap_mode = Settings::MINIMAP_NORMAL;
213 }
214 }
215
216 if (button_config) {
217 button_config->enabled = !pc->stats.corpse;
218 if (button_config->checkClick()) {
219 clicked_config = true;
220 }
221 }
222 }
223
131224 void MenuMiniMap::render() {
132225 }
133226
149242 if (compass) {
150243 render_device->render(compass);
151244 }
245
246 if (button_config)
247 button_config->render();
152248 }
153249
154250 void MenuMiniMap::prerender(MapCollision *collider, int map_w, int map_h) {
155251 map_size.x = map_w;
156252 map_size.y = map_h;
157253
254 clearEntities();
255
158256 if (eset->tileset.orientation == eset->tileset.TILESET_ISOMETRIC) {
159 prerenderIso(collider, &map_surface, 1);
160 prerenderIso(collider, &map_surface_2x, 2);
257 prerenderIso(collider, &map_surface, &map_surface_entities, 1);
258 prerenderIso(collider, &map_surface_2x, &map_surface_entities_2x, 2);
161259 }
162260 else {
163261 // eset->tileset.TILESET_ORTHOGONAL
164 prerenderOrtho(collider, &map_surface, 1);
165 prerenderOrtho(collider, &map_surface_2x, 2);
262 prerenderOrtho(collider, &map_surface, &map_surface_entities, 1);
263 prerenderOrtho(collider, &map_surface_2x, &map_surface_entities_2x, 2);
166264 }
167265 }
168266
185283 clip.w = pos.w;
186284 clip.h = pos.h;
187285
188 Rect map_area;
189 map_area.x = window_area.x + pos.x;
190 map_area.y = window_area.y + pos.y;
191 map_area.w = pos.w;
192 map_area.h = pos.h;
193
194286 Sprite* target_surface = NULL;
287 Sprite* target_surface_entities = NULL;
195288 if (settings->minimap_mode == Settings::MINIMAP_NORMAL && map_surface) {
196289 target_surface = map_surface;
290 target_surface_entities = map_surface_entities;
197291 }
198292 else if (settings->minimap_mode == Settings::MINIMAP_2X && map_surface_2x) {
199293 target_surface = map_surface_2x;
294 target_surface_entities = map_surface_entities_2x;
200295 }
201296
202297 if (target_surface) {
203 // ensure the clip doesn't exceed the surface dimensions
204 // TODO should this be in RenderDevice?
205 const int target_w = target_surface->getGraphicsWidth();
206 const int target_h = target_surface->getGraphicsHeight();
207 if (clip.x + clip.w > target_w)
208 clip.w = target_w - clip.x;
209 if (clip.y + clip.h > target_h)
210 clip.h = target_h - clip.y;
211
212298 target_surface->setClipFromRect(clip);
213299 target_surface->setDestFromRect(map_area);
214300 render_device->render(target_surface);
215301 }
216302
217 // draw the player cursor
218 Point center(window_area.x + pos.x + pos.w/2, window_area.y + pos.y + pos.h/2);
219 render_device->drawLine(center.x - current_zoom, center.y, center.x + current_zoom, center.y, color_hero);
220 render_device->drawLine(center.x, center.y - current_zoom, center.x, center.y + current_zoom, color_hero);
221 }
222
223 void MenuMiniMap::prerenderOrtho(MapCollision *collider, Sprite** target_surface, int zoom) {
303 if (target_surface_entities) {
304 if (eset->tileset.orientation == eset->tileset.TILESET_ISOMETRIC) {
305 renderEntitiesIso(target_surface_entities, current_zoom);
306 }
307 else {
308 // eset->tileset.TILESET_ORTHOGONAL
309 renderEntitiesOrtho(target_surface_entities, current_zoom);
310 }
311
312 target_surface_entities->setClipFromRect(clip);
313 target_surface_entities->setDestFromRect(map_area);
314 render_device->render(target_surface_entities);
315 }
316 }
317
318 void MenuMiniMap::prerenderOrtho(MapCollision *collider, Sprite** tile_surface, Sprite** entity_surface, int zoom) {
224319 int surface_size = std::max(map_size.x + zoom, map_size.y + zoom) * zoom;
225 createMapSurface(target_surface, surface_size, surface_size);
226
227 if (!(*target_surface))
320 createMapSurface(tile_surface, surface_size, surface_size);
321 createMapSurface(entity_surface, surface_size, surface_size);
322
323 if (!(*tile_surface))
228324 return;
229325
230 Image* target_img = (*target_surface)->getGraphics();
231 const int target_w = (*target_surface)->getGraphicsWidth();
232 const int target_h = (*target_surface)->getGraphicsHeight();
326 Image* target_img = (*tile_surface)->getGraphics();
327 const int target_w = (*tile_surface)->getGraphicsWidth();
328 const int target_h = (*tile_surface)->getGraphicsHeight();
233329
234330 Color draw_color;
235331
244340 else if (tile_type == 2 || tile_type == 6) draw_color = color_obst;
245341 else draw_tile = false;
246342
247 if (draw_tile) {
343 if (draw_tile && draw_color.a != 0) {
248344 for (int l = 0; l < zoom; l++) {
249345 for (int k =0; k < zoom; k++) {
250346 target_img->drawPixel((zoom*i)+k, (zoom*j)+l, draw_color);
257353 target_img->endPixelBatch();
258354 }
259355
260 void MenuMiniMap::prerenderIso(MapCollision *collider, Sprite** target_surface, int zoom) {
356 void MenuMiniMap::prerenderIso(MapCollision *collider, Sprite** tile_surface, Sprite** entity_surface, int zoom) {
261357 int surface_size = std::max(map_size.x + zoom, map_size.y + zoom) * 2 * zoom;
262 createMapSurface(target_surface, surface_size, surface_size);
263
264 if (!(*target_surface))
358 createMapSurface(tile_surface, surface_size, surface_size);
359 createMapSurface(entity_surface, surface_size, surface_size);
360
361 if (!(*tile_surface))
265362 return;
266363
267364 // a 2x1 pixel area correlates to a tile, so we can traverse tiles using pixel counting
274371
275372 bool odd_row = false;
276373
277 Image* target_img = (*target_surface)->getGraphics();
278 const int target_w = (*target_surface)->getGraphicsWidth();
279 const int target_h = (*target_surface)->getGraphicsHeight();
374 Image* target_img = (*tile_surface)->getGraphics();
375 const int target_w = (*tile_surface)->getGraphicsWidth();
376 const int target_h = (*tile_surface)->getGraphicsHeight();
280377
281378 target_img->beginPixelBatch();
282379
297394 else if (tile_type == 2 || tile_type == 6) draw_color = color_obst;
298395 else draw_tile = false;
299396
300 if (draw_tile) {
397 if (draw_tile && draw_color.a != 0) {
301398 if (odd_row) {
302399 for (int l = 0; l < zoom; l++) {
303400 for (int k = 0; k < zoom * 2; k++) {
336433 target_img->endPixelBatch();
337434 }
338435
436 void MenuMiniMap::renderEntitiesOrtho(Sprite* entity_surface, int zoom) {
437 if (!entity_surface)
438 return;
439
440 Color draw_color;
441 int tile_type;
442
443 Image* target_img = entity_surface->getGraphics();
444 const int target_w = entity_surface->getGraphicsWidth();
445 const int target_h = entity_surface->getGraphicsHeight();
446
447 target_img->fillWithColor(Color(0,0,0,0));
448
449 clearEntities();
450 fillEntities();
451
452 target_img->beginPixelBatch();
453
454 for (int i=0; i<std::min(target_w, map_size.x); i++) {
455 for (int j=0; j<std::min(target_h, map_size.y); j++) {
456 bool draw_tile = true;
457 tile_type = entities[i][j];
458
459 if (tile_type == TILE_HERO) draw_color = color_hero;
460 else if (tile_type == TILE_ENEMY) draw_color = color_enemy;
461 else if (tile_type == TILE_NPC) draw_color = color_npc;
462 else if (tile_type == TILE_TELEPORT) draw_color = color_teleport;
463 else if (tile_type == TILE_ALLY) draw_color = color_ally;
464 else draw_tile = false;
465
466 if (draw_tile && draw_color.a != 0) {
467 for (int l = 0; l < zoom; l++) {
468 for (int k =0; k < zoom; k++) {
469 target_img->drawPixel((zoom*i)+k, (zoom*j)+l, draw_color);
470 }
471 }
472 }
473 }
474 }
475
476 target_img->endPixelBatch();
477 }
478
479 void MenuMiniMap::renderEntitiesIso(Sprite* entity_surface, int zoom) {
480 if (!entity_surface)
481 return;
482
483 // a 2x1 pixel area correlates to a tile, so we can traverse tiles using pixel counting
484 Color draw_color;
485 int tile_type;
486
487 Point tile_cursor;
488 tile_cursor.x = -std::max(map_size.x, map_size.y)/2;
489 tile_cursor.y = std::max(map_size.x, map_size.y)/2;
490
491 bool odd_row = false;
492
493 Image* target_img = entity_surface->getGraphics();
494 const int target_w = entity_surface->getGraphicsWidth();
495 const int target_h = entity_surface->getGraphicsHeight();
496
497 target_img->fillWithColor(Color(0,0,0,0));
498
499 clearEntities();
500 fillEntities();
501
502 target_img->beginPixelBatch();
503
504 // for each pixel row
505 for (int j=0; j<target_h; j++) {
506
507 // for each 2-px wide column
508 for (int i=0; i<target_w; i+=2) {
509
510 // if this tile is the max map size
511 if (tile_cursor.x >= 0 && tile_cursor.y >= 0 && tile_cursor.x < map_size.x && tile_cursor.y < map_size.y) {
512
513 tile_type = entities[tile_cursor.x][tile_cursor.y];
514 bool draw_tile = true;
515
516 if (tile_type == TILE_HERO) draw_color = color_hero;
517 else if (tile_type == TILE_ENEMY) draw_color = color_enemy;
518 else if (tile_type == TILE_NPC) draw_color = color_npc;
519 else if (tile_type == TILE_TELEPORT) draw_color = color_teleport;
520 else if (tile_type == TILE_ALLY) draw_color = color_ally;
521 else draw_tile = false;
522
523 if (draw_tile && draw_color.a != 0) {
524 if (odd_row) {
525 for (int l = 0; l < zoom; l++) {
526 for (int k = 0; k < zoom * 2; k++) {
527 target_img->drawPixel((zoom*i)+k, (zoom*j)+l, draw_color);
528 }
529 }
530 }
531 else {
532 for (int l = 0; l < zoom; l++) {
533 for (int k = -((zoom * 2) - zoom); k < zoom; k++) {
534 target_img->drawPixel((zoom*i)+k, (zoom*j)+l, draw_color);
535 }
536 }
537 }
538 }
539 }
540
541 // moving screen-right in isometric is +x -y in map coordinates
542 tile_cursor.x++;
543 tile_cursor.y--;
544 }
545
546 // return tile cursor to next row of tiles
547 if (odd_row) {
548 odd_row = false;
549 tile_cursor.x -= target_w/2;
550 tile_cursor.y += (target_w/2 +1);
551 }
552 else {
553 odd_row = true;
554 tile_cursor.x -= (target_w/2 -1);
555 tile_cursor.y += target_w/2;
556 }
557 }
558
559 target_img->endPixelBatch();
560 }
561
562 void MenuMiniMap::clearEntities() {
563 entities.resize(map_size.x);
564 for (size_t i=0; i<entities.size(); ++i) {
565 entities[i].resize(map_size.y);
566 for (size_t j=0; j<entities[i].size(); ++j) {
567 entities[i][j] = 0;
568 }
569 }
570 }
571
572 void MenuMiniMap::fillEntities() {
573 Point hero = Point(pc->stats.pos);
574 if (hero.x >= 0 && hero.y >= 0 && hero.x < map_size.x && hero.y < map_size.y) {
575 entities[hero.x][hero.y] = TILE_HERO;
576 }
577
578 for (size_t i=0; i<mapr->events.size(); ++i) {
579 EventComponent* ec_minimap = mapr->events[i].getComponent(EventComponent::SHOW_ON_MINIMAP);
580 if (ec_minimap && !ec_minimap->x)
581 continue;
582
583 if (mapr->events[i].getComponent(EventComponent::NPC_HOTSPOT) && EventManager::isActive(mapr->events[i])) {
584 entities[mapr->events[i].location.x][mapr->events[i].location.y] = TILE_NPC;
585 }
586 else if ((mapr->events[i].activate_type == Event::ACTIVATE_ON_TRIGGER || mapr->events[i].activate_type == Event::ACTIVATE_ON_INTERACT) && mapr->events[i].getComponent(EventComponent::INTERMAP) && EventManager::isActive(mapr->events[i])) {
587 // TODO use location when hotspot is inappropriate?
588 Point event_pos(mapr->events[i].location.x, mapr->events[i].location.y);
589 for (int j=event_pos.x; j<event_pos.x + mapr->events[i].location.w; ++j) {
590 for (int k=event_pos.y; k<event_pos.y + mapr->events[i].location.h; ++k) {
591 entities[j][k] = TILE_TELEPORT;
592 }
593 }
594 }
595 }
596
597 for (size_t i=0; i<entitym->entities.size(); ++i) {
598 Entity *e = entitym->entities[i];
599 if (e->stats.hp > 0) {
600 if (e->stats.hero_ally) {
601 entities[static_cast<int>(e->stats.pos.x)][static_cast<int>(e->stats.pos.y)] = TILE_ALLY;
602 }
603 else if (e->stats.in_combat) {
604 entities[static_cast<int>(e->stats.pos.x)][static_cast<int>(e->stats.pos.y)] = TILE_ENEMY;
605 }
606 }
607 }
608 }
609
339610 MenuMiniMap::~MenuMiniMap() {
340611 delete map_surface;
341612 delete map_surface_2x;
613 delete map_surface_entities;
614 delete map_surface_entities_2x;
342615
343616 delete label;
344617 delete compass;
345 }
618 delete button_config;
619 }
2828
2929 class MapCollision;
3030 class Sprite;
31 class WidgetButton;
3132 class WidgetLabel;
3233
3334 class MenuMiniMap : public Menu {
3435 private:
36 enum {
37 TILE_HERO = 1,
38 TILE_ENEMY = 2,
39 TILE_NPC = 3,
40 TILE_TELEPORT = 4,
41 TILE_ALLY = 5
42 };
43
3544 Color color_wall;
3645 Color color_obst;
3746 Color color_hero;
47 Color color_enemy;
48 Color color_ally;
49 Color color_npc;
50 Color color_teleport;
3851
3952 Sprite *map_surface;
4053 Sprite *map_surface_2x;
54 Sprite *map_surface_entities;
55 Sprite *map_surface_entities_2x;
4156 Point map_size;
4257
4358 Rect pos;
4459 WidgetLabel *label;
4560 Sprite *compass;
61 Rect map_area;
62 WidgetButton* button_config;
4663
4764 int current_zoom;
65 bool lock_zoom_change;
66
67 std::vector< std::vector<unsigned short> > entities;
4868
4969 void createMapSurface(Sprite** target_surface, int w, int h);
50 // void renderIso(const FPoint& hero_pos);
51 // void renderOrtho(const FPoint& hero_pos);
5270 void renderMapSurface(const FPoint& hero_pos);
53 void prerenderOrtho(MapCollision *collider, Sprite** target_surface, int zoom);
54 void prerenderIso(MapCollision *collider, Sprite** target_surface, int zoom);
71 void prerenderOrtho(MapCollision *collider, Sprite** tile_surface, Sprite** entity_surface, int zoom);
72 void prerenderIso(MapCollision *collider, Sprite** tile_surface, Sprite** entity_surface, int zoom);
73 void renderEntitiesOrtho(Sprite* entity_surface, int zoom);
74 void renderEntitiesIso(Sprite* entity_surface, int zoom);
75 void clearEntities();
76 void fillEntities();
5577
5678 public:
5779 MenuMiniMap();
5880 ~MenuMiniMap();
5981 void align();
82 void logic();
6083
6184 void render();
6285 void render(const FPoint& hero_pos);
6386 void prerender(MapCollision *collider, int map_w, int map_h);
6487 void setMapTitle(const std::string& map_title);
88
89 bool clicked_config;
6590 };
6691
6792
0 /*
1 Copyright © 2020 Justin Jacobs
2
3 This file is part of FLARE.
4
5 FLARE is free software: you can redistribute it and/or modify it under the terms
6 of the GNU General Public License as published by the Free Software Foundation,
7 either version 3 of the License, or (at your option) any later version.
8
9 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
10 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
11 PARTICULAR PURPOSE. See the GNU General Public License for more details.
12
13 You should have received a copy of the GNU General Public License along with
14 FLARE. If not, see http://www.gnu.org/licenses/
15 */
16
17 #include "FileParser.h"
18 #include "FontEngine.h"
19 #include "InputState.h"
20 #include "MenuMovementType.h"
21 #include "MessageEngine.h"
22 #include "Platform.h"
23 #include "RenderDevice.h"
24 #include "Settings.h"
25 #include "SharedResources.h"
26 #include "UtilsParsing.h"
27 #include "WidgetButton.h"
28
29 #include <string>
30
31 MenuMovementType::MenuMovementType()
32 : Menu()
33 , button_keyboard(new WidgetButton(WidgetButton::DEFAULT_FILE))
34 , button_mouse(new WidgetButton(WidgetButton::DEFAULT_FILE))
35 , button_joystick(new WidgetButton(WidgetButton::DEFAULT_FILE))
36 , icon_keyboard(NULL)
37 , icon_mouse(NULL)
38 , icon_joystick(NULL)
39 {
40 // Load config settings
41 FileParser infile;
42 // @CLASS MenuMovementType|Description of menus/movement_type.txt
43 if(infile.open("menus/movement_type.txt", FileParser::MOD_FILE, FileParser::ERROR_NORMAL)) {
44 while(infile.next()) {
45 if (parseMenuKey(infile.key, infile.val))
46 continue;
47 else if (infile.key == "label_title") {
48 // @ATTR label_title|label|Position of the "Select a Movement Type" text.
49 label_title.setFromLabelInfo(Parse::popLabelInfo(infile.val));
50 }
51 else if (infile.key == "label_config_hint") {
52 // @ATTR label_config_hint|label|Position of the "Can be changed later in the Configuration menu" text.
53 label_config_hint.setFromLabelInfo(Parse::popLabelInfo(infile.val));
54 }
55 else if (infile.key == "button_keyboard") {
56 // @ATTR button_keyboard|point|Position of the "Keyboard" button.
57 Point pos = Parse::toPoint(infile.val);
58 button_keyboard->setBasePos(pos.x, pos.y, Utils::ALIGN_TOPLEFT);
59 }
60 else if (infile.key == "button_mouse") {
61 // @ATTR button_mouse|point|Position of the "Mouse" button.
62 Point pos = Parse::toPoint(infile.val);
63 button_mouse->setBasePos(pos.x, pos.y, Utils::ALIGN_TOPLEFT);
64 }
65 else if (infile.key == "button_joystick") {
66 // @ATTR button_joystick|point|Position of the "Joystick" button.
67 Point pos = Parse::toPoint(infile.val);
68 button_joystick->setBasePos(pos.x, pos.y, Utils::ALIGN_TOPLEFT);
69 }
70 else if (infile.key == "icon_keyboard") {
71 // @ATTR icon_keyboard|point|Position of the keyboard icon.
72 icon_keyboard_pos = Parse::toPoint(infile.val);
73 }
74 else if (infile.key == "icon_mouse") {
75 // @ATTR icon_mouse|point|Position of the mouse icon.
76 icon_mouse_pos = Parse::toPoint(infile.val);
77 }
78 else if (infile.key == "icon_joystick") {
79 // @ATTR icon_joystick|point|Position of the joystick icon.
80 icon_joystick_pos = Parse::toPoint(infile.val);
81 }
82 }
83 infile.close();
84 }
85
86 label_title.setText(msg->get("Select a Movement Type"));
87 label_title.setColor(font->getColor(FontEngine::COLOR_MENU_NORMAL));
88 label_config_hint.setText(msg->get("Can be changed later in the Configuration menu."));
89 label_config_hint.setColor(font->getColor(FontEngine::COLOR_WIDGET_DISABLED));
90
91 button_keyboard->setLabel(msg->get("Keyboard"));
92 button_mouse->setLabel(msg->get("Mouse"));
93 button_joystick->setLabel(msg->get("Joystick"));
94
95 tablist.ignore_no_mouse = true;
96 tablist.add(button_keyboard);
97 tablist.add(button_mouse);
98 tablist.add(button_joystick);
99
100 setBackground("images/menus/movement_type.png");
101
102 // load icons
103 Image *graphics;
104 graphics = render_device->loadImage("images/menus/movement_type_keyboard.png", RenderDevice::ERROR_NORMAL);
105 if (graphics) {
106 icon_keyboard = graphics->createSprite();
107 graphics->unref();
108 }
109 graphics = render_device->loadImage("images/menus/movement_type_mouse.png", RenderDevice::ERROR_NORMAL);
110 if (graphics) {
111 icon_mouse = graphics->createSprite();
112 graphics->unref();
113 }
114 graphics = render_device->loadImage("images/menus/movement_type_joystick.png", RenderDevice::ERROR_NORMAL);
115 if (graphics) {
116 icon_joystick = graphics->createSprite();
117 graphics->unref();
118 }
119
120 // button tooltips
121 button_keyboard->tooltip = msg->get("Keyboard") + "\n\n" + \
122 msg->get("Up") + ": " + inpt->getBindingString(Input::UP) + "\n" + \
123 msg->get("Left") + ": " + inpt->getBindingString(Input::LEFT) + "\n" + \
124 msg->get("Down") + ": " + inpt->getBindingString(Input::DOWN) + "\n" + \
125 msg->get("Right") + ": " + inpt->getBindingString(Input::RIGHT);
126
127 button_mouse->tooltip = msg->get("Mouse") + "\n\n" + \
128 msg->get("Button") + ": " + inpt->getBindingString(settings->mouse_move_swap ? Input::MAIN2 : Input::MAIN1);
129
130 button_joystick->tooltip = msg->get("Joystick") + "\n\n" + \
131 msg->get("Up") + ": " + inpt->getBindingString(Input::UP, InputState::BINDING_JOYSTICK) + "\n" + \
132 msg->get("Left") + ": " + inpt->getBindingString(Input::LEFT, InputState::BINDING_JOYSTICK) + "\n" + \
133 msg->get("Down") + ": " + inpt->getBindingString(Input::DOWN, InputState::BINDING_JOYSTICK) + "\n" + \
134 msg->get("Right") + ": " + inpt->getBindingString(Input::RIGHT, InputState::BINDING_JOYSTICK);
135
136 align();
137
138 visible = false;
139 }
140
141 void MenuMovementType::align() {
142 Menu::align();
143
144 label_title.setPos(window_area.x, window_area.y);
145 label_config_hint.setPos(window_area.x, window_area.y);
146
147 button_keyboard->setPos(window_area.x, window_area.y);
148 button_mouse->setPos(window_area.x, window_area.y);
149 button_joystick->setPos(window_area.x, window_area.y);
150
151 if (icon_keyboard)
152 icon_keyboard->setDest(window_area.x + icon_keyboard_pos.x, window_area.y + icon_keyboard_pos.y);
153 if (icon_mouse)
154 icon_mouse->setDest(window_area.x + icon_mouse_pos.x, window_area.y + icon_mouse_pos.y);
155 if (icon_joystick)
156 icon_joystick->setDest(window_area.x + icon_joystick_pos.x, window_area.y + icon_joystick_pos.y);
157 }
158
159 void MenuMovementType::logic() {
160 if (!visible)
161 return;
162
163 tablist.logic();
164
165 button_joystick->enabled = (inpt->getNumJoysticks() > 0 && platform.config_input[Platform::Input::JOYSTICK]);
166
167 if (button_keyboard->checkClick()) {
168 settings->mouse_move = false;
169 settings->enable_joystick = false;
170 settings->joystick_device = -1;
171 close();
172 }
173 else if (button_mouse->checkClick()) {
174 settings->mouse_move = true;
175 settings->no_mouse = false;
176 settings->mouse_aim = true;
177 settings->enable_joystick = false;
178 settings->joystick_device = -1;
179 close();
180 }
181 else if (button_joystick->checkClick()) {
182 settings->mouse_move = false;
183 settings->enable_joystick = true;
184 if (settings->joystick_device == -1)
185 settings->joystick_device = 0;
186 close();
187 }
188 }
189
190 void MenuMovementType::close() {
191 visible = false;
192 tablist.defocus();
193
194 inpt->initJoystick();
195 inpt->joysticks_changed = false;
196
197 settings->move_type_dimissed = true;
198 settings->saveSettings();
199 }
200
201 void MenuMovementType::render() {
202 if (!visible)
203 return;
204
205 // background
206 Menu::render();
207
208 label_title.render();
209 label_config_hint.render();
210
211 button_keyboard->render();
212 button_mouse->render();
213 button_joystick->render();
214
215 render_device->render(icon_keyboard);
216 render_device->render(icon_mouse);
217 render_device->render(icon_joystick);
218 }
219
220 MenuMovementType::~MenuMovementType() {
221 delete button_keyboard;
222 delete button_mouse;
223 delete button_joystick;
224
225 delete icon_keyboard;
226 delete icon_mouse;
227 delete icon_joystick;
228 }
229
0 /*
1 Copyright © 2020 Justin Jacobs
2
3 This file is part of FLARE.
4
5 FLARE is free software: you can redistribute it and/or modify it under the terms
6 of the GNU General Public License as published by the Free Software Foundation,
7 either version 3 of the License, or (at your option) any later version.
8
9 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
10 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
11 PARTICULAR PURPOSE. See the GNU General Public License for more details.
12
13 You should have received a copy of the GNU General Public License along with
14 FLARE. If not, see http://www.gnu.org/licenses/
15 */
16
17 #ifndef MENU_MOVEMENT_TYPE_H
18 #define MENU_MOVEMENT_TYPE_H
19
20 #include "CommonIncludes.h"
21 #include "Menu.h"
22 #include "Utils.h"
23 #include "WidgetLabel.h"
24
25 class WidgetButton;
26
27 class MenuMovementType : public Menu {
28 protected:
29 WidgetButton *button_keyboard;
30 WidgetButton *button_mouse;
31 WidgetButton *button_joystick;
32 WidgetLabel label_title;
33 WidgetLabel label_config_hint;
34
35 Sprite *icon_keyboard;
36 Sprite *icon_mouse;
37 Sprite *icon_joystick;
38
39 Point icon_keyboard_pos;
40 Point icon_mouse_pos;
41 Point icon_joystick_pos;
42
43 public:
44 MenuMovementType();
45 ~MenuMovementType();
46
47 void logic();
48 void align();
49 void close();
50 virtual void render();
51 };
52
53 #endif
3232 #include "FontEngine.h"
3333 #include "Menu.h"
3434 #include "MenuActionBar.h"
35 #include "MenuInventory.h"
3536 #include "MenuManager.h"
3637 #include "MenuPowers.h"
3738 #include "MessageEngine.h"
5354
5455 MenuPowersCell::MenuPowersCell()
5556 : id(-1)
57 , requires_point(false)
5658 , requires_level(0)
57 , requires_point(false)
5859 , requires_primary(eset->primary_stats.list.size(), 0)
5960 , requires_power()
60 , visible_requires_status()
61 , visible_requires_not()
61 , requires_status()
62 , requires_not_status()
63 , visible(true)
64 , visible_when_locked(true)
6265 , upgrade_level(0)
6366 , passive_on(false)
6467 , is_unlocked(false)
6568 , group(0)
6669 , next(NULL) {
67 }
68
69 bool MenuPowersCell::isVisible() {
70 for (size_t i = 0; i < visible_requires_status.size(); ++i)
71 if (!camp->checkStatus(visible_requires_status[i]))
72 return false;
73
74 for (size_t i = 0; i < visible_requires_not.size(); ++i)
75 if (camp->checkStatus(visible_requires_not[i]))
76 return false;
77
78 return true;
7970 }
8071
8172 MenuPowersCellGroup::MenuPowersCellGroup()
131122 , label_unspent(new WidgetLabel)
132123 , tab_control(NULL)
133124 , tree_loaded(false)
134 , prev_powers_list_size(0)
135125 , default_power_tab(-1)
136126 , newPowerNotification(false)
137127 {
352342
353343 // create power slots
354344 for (size_t i=0; i<slots.size(); i++) {
355 if (!power_cell[i].cells.empty() && static_cast<size_t>(power_cell[i].cells[0].id) < powers->powers.size()) {
356 slots[i] = new WidgetSlot(powers->powers[power_cell[i].cells[0].id].icon, Input::ACCEPT, WidgetSlot::SIZE_NORMAL);
345 if (!power_cell[i].cells.empty() && !powers->powers[power_cell[i].cells[0].id].is_empty) {
346 slots[i] = new WidgetSlot(powers->powers[power_cell[i].cells[0].id].icon, Input::ACCEPT);
357347 slots[i]->setBasePos(power_cell[i].pos.x, power_cell[i].pos.y, Utils::ALIGN_TOPLEFT);
358348
359349 if (!tablist_pow.empty()) {
393383 }
394384
395385 void MenuPowers::loadPower(FileParser &infile) {
386 // base power cell storage hasn't been set up!
387 if (power_cell.back().cells.empty())
388 return;
389
396390 // @ATTR power.id|int|A power id from powers/powers.txt for this slot.
397391 if (infile.key == "id") {
398392 int id = Parse::popFirstInt(infile.val);
399393 if (id > 0) {
400394 skip_section = false;
401 power_cell.back().cells.back().id = id;
395 power_cell.back().cells[0].id = id;
402396 }
403397 else {
404398 infile.error("MenuPowers: Power index out of bounds 1-%d, skipping power.", INT_MAX);
406400 return;
407401 }
408402
409 if (power_cell.back().cells.back().id <= 0) {
403 if (power_cell.back().cells[0].id <= 0) {
410404 skip_section = true;
411405 power_cell.pop_back();
412406 slots.pop_back();
421415 // @ATTR power.position|point|Position of this power icon; relative to MenuPowers "pos".
422416 else if (infile.key == "position") power_cell.back().pos = Parse::toPoint(infile.val);
423417
418 // @ATTR power.requires_point|bool|Power requires a power point to unlock.
419 else if (infile.key == "requires_point") power_cell.back().cells[0].requires_point = Parse::toBool(infile.val);
420
424421 // @ATTR power.requires_primary|predefined_string, int : Primary stat name, Required value|Power requires this primary stat to be at least the specificed value.
425422 else if (infile.key == "requires_primary") {
426423 std::string prim_stat = Parse::popFirstString(infile.val);
427424 size_t prim_stat_index = eset->primary_stats.getIndexByID(prim_stat);
428425
429426 if (prim_stat_index != eset->primary_stats.list.size()) {
430 power_cell.back().cells.back().requires_primary[prim_stat_index] = Parse::toInt(infile.val);
427 power_cell.back().cells[0].requires_primary[prim_stat_index] = Parse::toInt(infile.val);
431428 }
432429 else {
433430 infile.error("MenuPowers: '%s' is not a valid primary stat.", prim_stat.c_str());
434431 }
435432 }
436 // @ATTR power.requires_point|bool|Power requires a power point to unlock.
437 else if (infile.key == "requires_point") power_cell.back().cells.back().requires_point = Parse::toBool(infile.val);
438433 // @ATTR power.requires_level|int|Power requires at least this level for the hero.
439 else if (infile.key == "requires_level") power_cell.back().cells.back().requires_level = Parse::toInt(infile.val);
434 else if (infile.key == "requires_level") power_cell.back().cells[0].requires_level = Parse::toInt(infile.val);
440435 // @ATTR power.requires_power|power_id|Power requires another power id.
441 else if (infile.key == "requires_power") power_cell.back().cells.back().requires_power.push_back(Parse::toInt(infile.val));
442
443 // @ATTR power.visible_requires_status|repeatable(string)|Hide the power if we don't have this campaign status.
444 else if (infile.key == "visible_requires_status") power_cell.back().cells.back().visible_requires_status.push_back(camp->registerStatus(infile.val));
445 // @ATTR power.visible_requires_not_status|repeatable(string)|Hide the power if we have this campaign status.
446 else if (infile.key == "visible_requires_not_status") power_cell.back().cells.back().visible_requires_not.push_back(camp->registerStatus(infile.val));
436 else if (infile.key == "requires_power") power_cell.back().cells[0].requires_power.push_back(Parse::toPowerID(infile.val));
437 // @ATTR power.requires_status|repeatable(string)|Power requires this campaign status.
438 else if (infile.key == "requires_status") power_cell.back().cells[0].requires_status.push_back(camp->registerStatus(infile.val));
439 // @ATTR power.requires_not_status|repeatable(string)|Power requires not having this campaign status.
440 else if (infile.key == "requires_not_status") power_cell.back().cells[0].requires_not_status.push_back(camp->registerStatus(infile.val));
441
442 // @ATTR power.visible_requires_status|repeatable(string)|(Deprecated as of v1.11.75) Hide the power if we don't have this campaign status.
443 else if (infile.key == "visible_requires_status") {
444 infile.error("MenuPowers: visible_requires_status is deprecated. Use requires_status and visible_when_locked=false instead.");
445 power_cell.back().cells[0].requires_status.push_back(camp->registerStatus(infile.val));
446 power_cell.back().cells[0].visible_when_locked = false;
447 }
448 // @ATTR power.visible_requires_not_status|repeatable(string)|(Deprecated as of v1.11.75) Hide the power if we have this campaign status.
449 else if (infile.key == "visible_requires_not_status") {
450 infile.error("MenuPowers: visible_requires_not_status is deprecated. Use requires_not_status and visible_when_locked=false instead.");
451 power_cell.back().cells[0].requires_not_status.push_back(camp->registerStatus(infile.val));
452 power_cell.back().cells[0].visible_when_locked = false;
453 }
447454
448455 // @ATTR power.upgrades|list(power_id)|A list of upgrade power ids that this power slot can upgrade to. Each of these powers should have a matching upgrade section.
449456 else if (infile.key == "upgrades") {
450457 std::string repeat_val = Parse::popFirstString(infile.val);
451458 while (repeat_val != "") {
452 power_cell.back().cells.push_back(MenuPowersCell());
453 power_cell.back().cells.back().id = Parse::toInt(repeat_val);
459 PowerID test_id = Parse::toPowerID(repeat_val);
460 if (test_id == power_cell.back().cells[0].id) {
461 infile.error("MenuPowers: Upgrade ID '%d' is the same as the base ID. Ignoring.", test_id);
462 }
463 else {
464 power_cell.back().cells.push_back(MenuPowersCell());
465 power_cell.back().cells.back().id = test_id;
466 }
454467 repeat_val = Parse::popFirstString(infile.val);
455468 }
456469
460473 power_cell.back().upgrade_button = new WidgetButton("images/menus/buttons/button_plus.png");
461474 }
462475 }
476
477 // @ATTR power.visible|bool|Controls whether or not a power is visible or hidden regardless of unlocked state. Defaults to true.
478 else if (infile.key == "visible") power_cell.back().cells[0].visible = Parse::toBool(infile.val);
479 // @ATTR power.visible_when_locked|bool|Controls whether or not a power is visible or hidden when the power is locked. Defaults to true.
480 else if (infile.key == "visible_when_locked") power_cell.back().cells[0].visible_when_locked = Parse::toBool(infile.val);
463481
464482 else infile.error("MenuPowers: '%s' is not a valid key.", infile.key.c_str());
465483 }
500518 // @ATTR upgrade.requires_level|int|Upgrade requires at least this level for the hero.
501519 else if (infile.key == "requires_level") power_cell_upgrade.back().requires_level = Parse::toInt(infile.val);
502520 // @ATTR upgrade.requires_power|int|Upgrade requires another power id.
503 else if (infile.key == "requires_power") power_cell_upgrade.back().requires_power.push_back(Parse::toInt(infile.val));
504
505 // @ATTR upgrade.visible_requires_status|repeatable(string)|Hide the upgrade if we don't have this campaign status.
506 else if (infile.key == "visible_requires_status") power_cell_upgrade.back().visible_requires_status.push_back(camp->registerStatus(infile.val));
507 // @ATTR upgrade.visible_requires_not_status|repeatable(string)|Hide the upgrade if we have this campaign status.
508 else if (infile.key == "visible_requires_not_status") power_cell_upgrade.back().visible_requires_not.push_back(camp->registerStatus(infile.val));
521 else if (infile.key == "requires_power") power_cell_upgrade.back().requires_power.push_back(Parse::toPowerID(infile.val));
522 // @ATTR upgrade.requires_status|repeatable(string)|Upgrade requires this campaign status.
523 else if (infile.key == "requires_status") power_cell_upgrade.back().requires_status.push_back(camp->registerStatus(infile.val));
524 // @ATTR upgrade.requires_not_status|repeatable(string)|Upgrade requires not having this campaign status.
525 else if (infile.key == "requires_not_status") power_cell_upgrade.back().requires_not_status.push_back(camp->registerStatus(infile.val));
526
527 // @ATTR upgrade.visible_requires_status|repeatable(string)|(Deprecated as of v1.11.75) Hide the upgrade if we don't have this campaign status.
528 else if (infile.key == "visible_requires_status") {
529 infile.error("MenuPowers: visible_requires_status is deprecated. Use requires_status and visible_when_locked=false instead.");
530 power_cell_upgrade.back().requires_status.push_back(camp->registerStatus(infile.val));
531 power_cell_upgrade.back().visible_when_locked = false;
532 }
533 // @ATTR upgrade.visible_requires_not_status|repeatable(string)|(Deprecated as of v1.11.75) Hide the upgrade if we have this campaign status.
534 else if (infile.key == "visible_requires_not_status") {
535 infile.error("MenuPowers: visible_requires_not_status is deprecated. Use requires_not_status and visible_when_locked=false instead.");
536 power_cell_upgrade.back().requires_not_status.push_back(camp->registerStatus(infile.val));
537 power_cell_upgrade.back().visible_when_locked = false;
538 }
539
540 // @ATTR upgrade.visible|bool|Controls whether or not a power is visible or hidden regardless of unlocked state. Defaults to true.
541 else if (infile.key == "visible") power_cell_upgrade.back().visible = Parse::toBool(infile.val);
542 // @ATTR upgrade.visible_when_locked|bool|Controls whether or not a power is visible or hidden when the power is locked. Defaults to true.
543 else if (infile.key == "visible_when_locked") power_cell_upgrade.back().visible_when_locked = Parse::toBool(infile.val);
509544
510545 else infile.error("MenuPowers: '%s' is not a valid key.", infile.key.c_str());
511546 }
514549 if (!pcell)
515550 return false;
516551
552 if (pc->stats.level < pcell->requires_level)
553 return false;
554
555 for (size_t i = 0; i < eset->primary_stats.list.size(); ++i) {
556 if (pc->stats.get_primary(i) < pcell->requires_primary[i])
557 return false;
558 }
559
560 for (size_t i = 0; i < pcell->requires_status.size(); ++i)
561 if (!camp->checkStatus(pcell->requires_status[i]))
562 return false;
563
564 for (size_t i = 0; i < pcell->requires_not_status.size(); ++i)
565 if (camp->checkStatus(pcell->requires_not_status[i]))
566 return false;
567
517568 for (size_t i = 0; i < pcell->requires_power.size(); ++i) {
518569 if (!checkUnlocked(getCellByPowerIndex(pcell->requires_power[i])))
519 return false;
520 }
521
522 if (pc->stats.level < pcell->requires_level)
523 return false;
524
525 for (size_t i = 0; i < eset->primary_stats.list.size(); ++i) {
526 if (pc->stats.get_primary(i) < pcell->requires_primary[i])
527570 return false;
528571 }
529572
541584 // If this power is not in the menu, than it has no requirements
542585 if (!pcell)
543586 return true;
544
545 if (!pcell->isVisible())
546 return false;
547587
548588 // If power_id is saved into vector, it's unlocked anyway
549589 // check if the unlocked flag is set and check the player's power list
568608 if (!pcell)
569609 return true;
570610
571 if (!pcell->isVisible())
572 return false;
573
574611 // If we already have a power, don't try to unlock it
575612 if (checkUnlocked(pcell))
576613 return false;
600637
601638 // remove passive effects
602639 if (powers->powers[pcell->id].passive && pcell->passive_on) {
603 std::vector<int>::iterator passive_it = std::find(pc->stats.powers_passive.begin(), pc->stats.powers_passive.end(), pcell->id);
640 std::vector<PowerID>::iterator passive_it = std::find(pc->stats.powers_passive.begin(), pc->stats.powers_passive.end(), pcell->id);
604641 if (passive_it != pc->stats.powers_passive.end())
605642 pc->stats.powers_passive.erase(passive_it);
606643
610647 }
611648
612649 // remove from player's power list
613 std::vector<int>::iterator it = std::find(pc->stats.powers_list.begin(), pc->stats.powers_list.end(), pcell->id);
650 std::vector<PowerID>::iterator it = std::find(pc->stats.powers_list.begin(), pc->stats.powers_list.end(), pcell->id);
614651 if (it != pc->stats.powers_list.end())
615652 pc->stats.powers_list.erase(it);
616653
617654 // remove from action bar
618655 menu->act->addPower(0, pcell->id);
619656
620 // lock higher levels as well
621 MenuPowersCell* next_cell = pcell->next;
622 while (next_cell) {
623 lockCell(next_cell);
624 next_cell = next_cell->next;
657 // lock higher levels as well (careful: recursion)
658 if (pcell->next) {
659 lockCell(pcell->next);
625660 }
626661 }
627662
635670 return pcell == power_cell[pcell->group].getBonusCurrent(power_cell[pcell->group].getCurrent());
636671 }
637672
638 MenuPowersCell* MenuPowers::getCellByPowerIndex(int power_index) {
673 bool MenuPowers::isCellVisible(MenuPowersCell* pcell) {
674 if (!pcell)
675 return false;
676
677 if (!pcell->visible)
678 return false;
679
680 if (!pcell->visible_when_locked && !checkUnlocked(pcell))
681 return false;
682
683 return true;
684 }
685
686 MenuPowersCell* MenuPowers::getCellByPowerIndex(PowerID power_index) {
639687 // Powers can not have an id of 0
640 if (power_index <= 0)
688 if (power_index == 0)
641689 return NULL;
642690
643691 // Find cell with our power
686734 }
687735
688736 if (power_cell[i].cells[j].is_unlocked) {
689 if (!power_cell[i].cells[j].isVisible() || !checkRequirements(&power_cell[i].cells[j])) {
737 if (!checkRequirements(&power_cell[i].cells[j])) {
690738 lockCell(&power_cell[i].cells[j]);
691739 did_cell_lock = true;
692740 }
720768 for (size_t j = 0; j < power_cell[i].cells.size(); ++j) {
721769 MenuPowersCell* pcell = &power_cell[i].cells[j];
722770
723 if (pcell != bonus_pcell || ((!checkRequirements(pcell) || (!pcell->is_unlocked && !isBonusCell(pcell))) && pcell->passive_on)) {
771 if (pcell != bonus_pcell || (pcell->passive_on && powers->powers[pcell->id].passive && (!checkRequirements(current_pcell) || (!pcell->is_unlocked && !isBonusCell(pcell))))) {
724772 // passive power is activated, but does not meet requirements, so remove it
725 std::vector<int>::iterator passive_it = std::find(pc->stats.powers_passive.begin(), pc->stats.powers_passive.end(), pcell->id);
726 if (passive_it != pc->stats.powers_passive.end())
773 std::vector<PowerID>::iterator passive_it = std::find(pc->stats.powers_passive.begin(), pc->stats.powers_passive.end(), pcell->id);
774 if (passive_it != pc->stats.powers_passive.end()) {
727775 pc->stats.powers_passive.erase(passive_it);
728776
729 pc->stats.effects.removeEffectPassive(pcell->id);
730 pcell->passive_on = false;
731 pc->stats.refresh_stats = true;
732 }
733 else if (pcell == bonus_pcell && checkRequirements(current_pcell) && !pcell->passive_on) {
777 pc->stats.effects.removeEffectPassive(pcell->id);
778 pcell->passive_on = false;
779 pc->stats.refresh_stats = true;
780
781 // passive powers can lock equipment slots, so update equipment here
782 menu->inv->applyEquipment();
783 }
784 }
785 else if (pcell == bonus_pcell && !pcell->passive_on && powers->powers[pcell->id].passive && checkRequirements(current_pcell)) {
734786 // passive power has not been activated, so activate it here
735 std::vector<int>::iterator passive_it = std::find(pc->stats.powers_passive.begin(), pc->stats.powers_passive.end(), pcell->id);
736 if (passive_it == pc->stats.powers_passive.end())
787 std::vector<PowerID>::iterator passive_it = std::find(pc->stats.powers_passive.begin(), pc->stats.powers_passive.end(), pcell->id);
788 if (passive_it == pc->stats.powers_passive.end()) {
737789 pc->stats.powers_passive.push_back(pcell->id);
738790
739 pcell->passive_on = true;
740 // for passives without special triggers, we need to trigger them here
741 if (pc->stats.effects.triggered_others)
742 powers->activateSinglePassive(&pc->stats, pcell->id);
791 pcell->passive_on = true;
792 // for passives without special triggers, we need to trigger them here
793 if (pc->stats.effects.triggered_others)
794 powers->activateSinglePassive(&pc->stats, pcell->id);
795
796 // passive powers can lock equipment slots, so update equipment here
797 menu->inv->applyEquipment();
798 }
743799 }
744800 }
745801
762818 return used;
763819 }
764820
765 void MenuPowers::createTooltip(TooltipData* tip_data, MenuPowersCell* pcell, bool show_unlock_prompt) {
766 if (!pcell)
821 void MenuPowers::createTooltipFromActionBar(TooltipData* tip_data, unsigned slot, int tooltip_length) {
822 if (slot >= menu->act->hotkeys.size() || slot >= menu->act->hotkeys_mod.size())
767823 return;
768824
769 MenuPowersCell* pcell_bonus = power_cell[pcell->group].getBonusCurrent(pcell);
770
771 const Power &pwr = powers->powers[pcell_bonus->id];
825 PowerID power_index = menu->act->hotkeys[slot];
826 PowerID mod_power_index = menu->act->hotkeys_mod[slot];
827
828 PowerID pindex = mod_power_index;
829 MenuPowersCell* pcell = getCellByPowerIndex(pindex);
830
831 // action bar slot is modded and not found in the menu
832 if (power_index != mod_power_index && !pcell) {
833 PowerID test_pindex = power_index;
834 MenuPowersCell* test_pcell = getCellByPowerIndex(test_pindex);
835
836 // non-modded power found in the menu; use it instead
837 if (test_pcell) {
838 pindex = test_pindex;
839 pcell = test_pcell;
840 }
841 // else, neither is found in the menu, so default to the modded power
842 }
843
844 createTooltip(tip_data, pcell, pindex, false, tooltip_length);
845 }
846
847 void MenuPowers::createTooltip(TooltipData* tip_data, MenuPowersCell* pcell, PowerID power_index, bool show_unlock_prompt, int tooltip_length) {
848
849 MenuPowersCell* pcell_bonus = NULL;
850 if (pcell) {
851 pcell_bonus = power_cell[pcell->group].getBonusCurrent(pcell);
852 }
853 const Power &pwr = pcell_bonus ? powers->powers[pcell_bonus->id] : powers->powers[power_index];
772854
773855 {
774856 std::stringstream ss;
775857 ss << pwr.name;
776 if (pcell->upgrade_level > 0) {
858 if (pcell && pcell->upgrade_level > 0) {
777859 ss << " (" << msg->get("Level %d", pcell->upgrade_level);
778860 int bonus_levels = power_cell[pcell->group].getBonusLevels();
779861 if (bonus_levels > 0)
783865 tip_data->addText(ss.str());
784866 }
785867
868 if (tooltip_length == MenuPowers::TOOLTIP_SHORT || (!pcell && tooltip_length != MenuPowers::TOOLTIP_LONG_ALL))
869 return;
870
786871 if (pwr.passive) tip_data->addText(msg->get("Passive"));
787 tip_data->addColoredText(Utils::substituteVarsInString(pwr.description, pc), font->getColor(FontEngine::COLOR_ITEM_FLAVOR));
872 if (pwr.description != "") {
873 tip_data->addColoredText(Utils::substituteVarsInString(pwr.description, pc), font->getColor(FontEngine::COLOR_ITEM_FLAVOR));
874 }
788875
789876 // add mana cost
790877 if (pwr.requires_mp > 0) {
805892 std::stringstream ss;
806893 EffectDef* effect_ptr = powers->getEffectDef(pwr.post_effects[i].id);
807894
808 // base stats
809 if (effect_ptr == NULL) {
895 int effect_type = Effect::NONE;
896 if (effect_ptr) {
897 effect_type = effect_ptr->type;
898 }
899 else {
900 effect_type = Effect::getTypeFromString(pwr.post_effects[i].id);
901 }
902
903 if (Effect::typeIsStat(effect_type) ||
904 Effect::typeIsDmgMin(effect_type) ||
905 Effect::typeIsDmgMax(effect_type) ||
906 Effect::typeIsResist(effect_type) ||
907 Effect::typeIsPrimary(effect_type))
908 {
810909 if (pwr.post_effects[i].magnitude > 0) {
811910 ss << "+";
812911 }
813
814912 ss << pwr.post_effects[i].magnitude;
815 bool found_key = false;
816
817 for (int j=0; j<Stats::COUNT; ++j) {
818 if (pwr.post_effects[i].id == Stats::KEY[j]) {
819 if (Stats::PERCENT[j])
820 ss << "%";
821
822 ss << " " << Stats::NAME[j];
823
824 found_key = true;
825 break;
826 }
827 }
828
829 if (!found_key) {
830 for (size_t j=0; j<eset->elements.list.size(); ++j) {
831 if (pwr.post_effects[i].id == eset->elements.list[j].id + "_resist") {
832 ss << "% " << msg->get("Resistance (%s)", eset->elements.list[j].name);
833 found_key = true;
834 break;
835 }
836 }
837 }
838
839 if (!found_key) {
840 for (size_t j=0; j<eset->primary_stats.list.size(); ++j) {
841 if (pwr.post_effects[i].id == eset->primary_stats.list[j].id) {
842 ss << " " << eset->primary_stats.list[j].name;
843 found_key = true;
844 break;
845 }
846 }
847 }
848
849 // NOTE don't need to set found_key after this, since this is the last set of keys to check
850 if (!found_key) {
851 for (size_t j=0; j<eset->damage_types.list.size(); ++j) {
852 if (pwr.post_effects[i].id == eset->damage_types.list[j].min) {
853 ss << " " << eset->damage_types.list[j].name_min;
854 break;
855 }
856 else if (pwr.post_effects[i].id == eset->damage_types.list[j].max) {
857 ss << " " << eset->damage_types.list[j].name_max;
858 break;
859 }
860 }
861 }
862 }
863 else {
864 if (effect_ptr->type == "damage") {
865 ss << pwr.post_effects[i].magnitude << " " << msg->get("Damage per second");
866 }
867 else if (effect_ptr->type == "damage_percent") {
868 ss << pwr.post_effects[i].magnitude << "% " << msg->get("Damage per second");
869 }
870 else if (effect_ptr->type == "hpot") {
871 ss << pwr.post_effects[i].magnitude << " " << msg->get("HP per second");
872 }
873 else if (effect_ptr->type == "hpot_percent") {
874 ss << pwr.post_effects[i].magnitude << "% " << msg->get("HP per second");
875 }
876 else if (effect_ptr->type == "mpot") {
877 ss << pwr.post_effects[i].magnitude << " " << msg->get("MP per second");
878 }
879 else if (effect_ptr->type == "mpot_percent") {
880 ss << pwr.post_effects[i].magnitude << "% " << msg->get("MP per second");
881 }
882 else if (effect_ptr->type == "speed") {
883 if (pwr.post_effects[i].magnitude == 0)
884 ss << msg->get("Immobilize");
913 }
914
915 if (Effect::typeIsStat(effect_type)) {
916 int index = Effect::getStatFromType(effect_type);
917 if (Stats::PERCENT[index]) {
918 ss << "%";
919 }
920 ss << " " << Stats::NAME[index];
921 }
922 else if (Effect::typeIsDmgMin(effect_type)) {
923 size_t index = Effect::getDmgFromType(effect_type);
924 ss << " " << eset->damage_types.list[index].name_min;
925 }
926 else if (Effect::typeIsDmgMax(effect_type)) {
927 size_t index = Effect::getDmgFromType(effect_type);
928 ss << " " << eset->damage_types.list[index].name_max;
929 }
930 else if (Effect::typeIsResist(effect_type)) {
931 size_t index = Effect::getResistFromType(effect_type);
932 ss << "% " << msg->get("Resistance (%s)", eset->elements.list[index].name);
933 }
934 else if (Effect::typeIsPrimary(effect_type)) {
935 size_t index = Effect::getPrimaryFromType(effect_type);
936 ss << " " << eset->primary_stats.list[index].name;
937 }
938 else if (effect_type == Effect::DAMAGE) {
939 ss << pwr.post_effects[i].magnitude << " " << msg->get("Damage per second");
940 }
941 else if (effect_type == Effect::DAMAGE_PERCENT) {
942 ss << pwr.post_effects[i].magnitude << "% " << msg->get("Damage per second");
943 }
944 else if (effect_type == Effect::HPOT) {
945 ss << pwr.post_effects[i].magnitude << " " << msg->get("HP per second");
946 }
947 else if (effect_type == Effect::HPOT_PERCENT) {
948 ss << pwr.post_effects[i].magnitude << "% " << msg->get("HP per second");
949 }
950 else if (effect_type == Effect::MPOT) {
951 ss << pwr.post_effects[i].magnitude << " " << msg->get("MP per second");
952 }
953 else if (effect_type == Effect::MPOT_PERCENT) {
954 ss << pwr.post_effects[i].magnitude << "% " << msg->get("MP per second");
955 }
956 else if (effect_type == Effect::SPEED) {
957 if (pwr.post_effects[i].magnitude == 0)
958 ss << msg->get("Immobilize");
959 else
960 ss << msg->get("%d%% Speed", pwr.post_effects[i].magnitude);
961 }
962 else if (effect_type == Effect::ATTACK_SPEED) {
963 ss << msg->get("%d%% Attack Speed", pwr.post_effects[i].magnitude);
964 }
965 else if (effect_type == Effect::IMMUNITY) {
966 ss << msg->get("Immunity");
967 }
968 else if (effect_type == Effect::IMMUNITY_DAMAGE) {
969 ss << msg->get("Immunity to damage over time");
970 }
971 else if (effect_type == Effect::IMMUNITY_SLOW) {
972 ss << msg->get("Immunity to slow");
973 }
974 else if (effect_type == Effect::IMMUNITY_STUN) {
975 ss << msg->get("Immunity to stun");
976 }
977 else if (effect_type == Effect::IMMUNITY_HP_STEAL) {
978 ss << msg->get("Immunity to HP steal");
979 }
980 else if (effect_type == Effect::IMMUNITY_MP_STEAL) {
981 ss << msg->get("Immunity to MP steal");
982 }
983 else if (effect_type == Effect::IMMUNITY_KNOCKBACK) {
984 ss << msg->get("Immunity to knockback");
985 }
986 else if (effect_type == Effect::IMMUNITY_DAMAGE_REFLECT) {
987 ss << msg->get("Immunity to damage reflection");
988 }
989
990 // TODO Effect::IMMUNITY_STAT_DEBUFF?
991
992 else if (effect_type == Effect::STUN) {
993 ss << msg->get("Stun");
994 }
995 else if (effect_type == Effect::REVIVE) {
996 ss << msg->get("Automatic revive on death");
997 }
998 else if (effect_type == Effect::CONVERT) {
999 ss << msg->get("Convert");
1000 }
1001 else if (effect_type == Effect::FEAR) {
1002 ss << msg->get("Fear");
1003 }
1004 else if (effect_type == Effect::DEATH_SENTENCE) {
1005 ss << msg->get("Lifespan");
1006 }
1007 else if (effect_type == Effect::SHIELD) {
1008 if (pwr.base_damage == eset->damage_types.list.size())
1009 continue;
1010
1011 if (pwr.mod_damage_mode == Power::STAT_MODIFIER_MODE_MULTIPLY) {
1012 int magnitude = pc->stats.getDamageMax(pwr.base_damage) * pwr.mod_damage_value_min / 100;
1013 ss << magnitude;
1014 }
1015 else if (pwr.mod_damage_mode == Power::STAT_MODIFIER_MODE_ADD) {
1016 int magnitude = pc->stats.getDamageMax(pwr.base_damage) + pwr.mod_damage_value_min;
1017 ss << magnitude;
1018 }
1019 else if (pwr.mod_damage_mode == Power::STAT_MODIFIER_MODE_ABSOLUTE) {
1020 if (pwr.mod_damage_value_max == 0 || pwr.mod_damage_value_min == pwr.mod_damage_value_max)
1021 ss << pwr.mod_damage_value_min;
8851022 else
886 ss << msg->get("%d%% Speed", pwr.post_effects[i].magnitude);
887 }
888 else if (effect_ptr->type == "attack_speed") {
889 ss << msg->get("%d%% Attack Speed", pwr.post_effects[i].magnitude);
890 }
891 else if (effect_ptr->type == "immunity") {
892 ss << msg->get("Immunity");
893 }
894 else if (effect_ptr->type == "immunity_damage") {
895 ss << msg->get("Immunity to damage over time");
896 }
897 else if (effect_ptr->type == "immunity_slow") {
898 ss << msg->get("Immunity to slow");
899 }
900 else if (effect_ptr->type == "immunity_stun") {
901 ss << msg->get("Immunity to stun");
902 }
903 else if (effect_ptr->type == "immunity_hp_steal") {
904 ss << msg->get("Immunity to HP steal");
905 }
906 else if (effect_ptr->type == "immunity_mp_steal") {
907 ss << msg->get("Immunity to MP steal");
908 }
909 else if (effect_ptr->type == "immunity_knockback") {
910 ss << msg->get("Immunity to knockback");
911 }
912 else if (effect_ptr->type == "immunity_damage_reflect") {
913 ss << msg->get("Immunity to damage reflection");
914 }
915 else if (effect_ptr->type == "stun") {
916 ss << msg->get("Stun");
917 }
918 else if (effect_ptr->type == "revive") {
919 ss << msg->get("Automatic revive on death");
920 }
921 else if (effect_ptr->type == "convert") {
922 ss << msg->get("Convert");
923 }
924 else if (effect_ptr->type == "fear") {
925 ss << msg->get("Fear");
926 }
927 else if (effect_ptr->type == "death_sentence") {
928 ss << msg->get("Lifespan");
929 }
930 else if (effect_ptr->type == "shield") {
931 if (pwr.base_damage == eset->damage_types.list.size())
932 continue;
933
934 if (pwr.mod_damage_mode == Power::STAT_MODIFIER_MODE_MULTIPLY) {
935 int magnitude = pc->stats.getDamageMax(pwr.base_damage) * pwr.mod_damage_value_min / 100;
936 ss << magnitude;
937 }
938 else if (pwr.mod_damage_mode == Power::STAT_MODIFIER_MODE_ADD) {
939 int magnitude = pc->stats.getDamageMax(pwr.base_damage) + pwr.mod_damage_value_min;
940 ss << magnitude;
941 }
942 else if (pwr.mod_damage_mode == Power::STAT_MODIFIER_MODE_ABSOLUTE) {
943 if (pwr.mod_damage_value_max == 0 || pwr.mod_damage_value_min == pwr.mod_damage_value_max)
944 ss << pwr.mod_damage_value_min;
945 else
946 ss << pwr.mod_damage_value_min << "-" << pwr.mod_damage_value_max;
947 }
948 else {
949 ss << pc->stats.getDamageMax(pwr.base_damage);
950 }
951
952 ss << " " << msg->get("Magical Shield");
953 }
954 else if (effect_ptr->type == "heal") {
955 if (pwr.base_damage == eset->damage_types.list.size())
956 continue;
957
958 int mag_min = pc->stats.getDamageMin(pwr.base_damage);
959 int mag_max = pc->stats.getDamageMax(pwr.base_damage);
960
961 if (pwr.mod_damage_mode == Power::STAT_MODIFIER_MODE_MULTIPLY) {
962 mag_min = mag_min * pwr.mod_damage_value_min / 100;
963 mag_max = mag_max * pwr.mod_damage_value_min / 100;
964 ss << mag_min << "-" << mag_max;
965 }
966 else if (pwr.mod_damage_mode == Power::STAT_MODIFIER_MODE_ADD) {
967 mag_min = mag_min + pwr.mod_damage_value_min;
968 mag_max = mag_max + pwr.mod_damage_value_min;
969 ss << mag_min << "-" << mag_max;
970 }
971 else if (pwr.mod_damage_mode == Power::STAT_MODIFIER_MODE_ABSOLUTE) {
972 if (pwr.mod_damage_value_max == 0 || pwr.mod_damage_value_min == pwr.mod_damage_value_max)
973 ss << pwr.mod_damage_value_min;
974 else
975 ss << pwr.mod_damage_value_min << "-" << pwr.mod_damage_value_max;
976 }
977 else {
978 ss << mag_min << "-" << mag_max;
979 }
980
981 ss << " " << msg->get("Healing");
982 }
983 else if (effect_ptr->type == "knockback") {
984 ss << pwr.post_effects[i].magnitude << " " << msg->get("Knockback");
985 }
986 else if (!effect_ptr->name.empty() && pwr.post_effects[i].magnitude > 0) {
987 if (effect_ptr->can_stack)
988 ss << "+";
989 ss << pwr.post_effects[i].magnitude << " " << msg->get(effect_ptr->name);
990 }
991 else if (pwr.post_effects[i].magnitude == 0) {
992 // nothing
993 }
1023 ss << pwr.mod_damage_value_min << "-" << pwr.mod_damage_value_max;
1024 }
1025 else {
1026 ss << pc->stats.getDamageMax(pwr.base_damage);
1027 }
1028
1029 ss << " " << msg->get("Magical Shield");
1030 }
1031 else if (effect_type == Effect::HEAL) {
1032 if (pwr.base_damage == eset->damage_types.list.size())
1033 continue;
1034
1035 int mag_min = pc->stats.getDamageMin(pwr.base_damage);
1036 int mag_max = pc->stats.getDamageMax(pwr.base_damage);
1037
1038 if (pwr.mod_damage_mode == Power::STAT_MODIFIER_MODE_MULTIPLY) {
1039 mag_min = mag_min * pwr.mod_damage_value_min / 100;
1040 mag_max = mag_max * pwr.mod_damage_value_min / 100;
1041 ss << mag_min << "-" << mag_max;
1042 }
1043 else if (pwr.mod_damage_mode == Power::STAT_MODIFIER_MODE_ADD) {
1044 mag_min = mag_min + pwr.mod_damage_value_min;
1045 mag_max = mag_max + pwr.mod_damage_value_min;
1046 ss << mag_min << "-" << mag_max;
1047 }
1048 else if (pwr.mod_damage_mode == Power::STAT_MODIFIER_MODE_ABSOLUTE) {
1049 if (pwr.mod_damage_value_max == 0 || pwr.mod_damage_value_min == pwr.mod_damage_value_max)
1050 ss << pwr.mod_damage_value_min;
1051 else
1052 ss << pwr.mod_damage_value_min << "-" << pwr.mod_damage_value_max;
1053 }
1054 else {
1055 ss << mag_min << "-" << mag_max;
1056 }
1057
1058 ss << " " << msg->get("Healing");
1059 }
1060 else if (effect_type == Effect::KNOCKBACK) {
1061 ss << pwr.post_effects[i].magnitude << " " << msg->get("Knockback");
1062 }
1063 else if (effect_ptr && !effect_ptr->name.empty() && pwr.post_effects[i].magnitude > 0) {
1064 if (effect_ptr->can_stack)
1065 ss << "+";
1066 ss << pwr.post_effects[i].magnitude << " " << msg->get(effect_ptr->name);
1067 }
1068 else if (pwr.post_effects[i].magnitude == 0) {
1069 // nothing
9941070 }
9951071
9961072 if (!ss.str().empty()) {
9971073 if (pwr.post_effects[i].duration > 0) {
998 if (effect_ptr && effect_ptr->type == "death_sentence") {
1074 if (effect_type == Effect::DEATH_SENTENCE) {
9991075 ss << ": " << Utils::getDurationString(pwr.post_effects[i].duration, 2);
10001076 }
10011077 else {
11151191 }
11161192 }
11171193
1118 // add requirement
1119 for (size_t i = 0; i < eset->primary_stats.list.size(); ++i) {
1120 if (pcell->requires_primary[i] > 0) {
1121 if (pc->stats.get_primary(i) < pcell->requires_primary[i])
1122 tip_data->addColoredText(msg->get("Requires %s %d", eset->primary_stats.list[i].name, pcell->requires_primary[i]), font->getColor(FontEngine::COLOR_MENU_PENALTY));
1194 if (pcell) {
1195 // add requirement
1196 for (size_t i = 0; i < eset->primary_stats.list.size(); ++i) {
1197 if (pcell->requires_primary[i] > 0) {
1198 if (pc->stats.get_primary(i) < pcell->requires_primary[i])
1199 tip_data->addColoredText(msg->get("Requires %s %d", eset->primary_stats.list[i].name, pcell->requires_primary[i]), font->getColor(FontEngine::COLOR_MENU_PENALTY));
1200 else
1201 tip_data->addText(msg->get("Requires %s %d", eset->primary_stats.list[i].name, pcell->requires_primary[i]));
1202 }
1203 }
1204
1205 // Draw required Level Tooltip
1206 if ((pcell->requires_level > 0) && pc->stats.level < pcell->requires_level) {
1207 tip_data->addColoredText(msg->get("Requires Level %d", pcell->requires_level), font->getColor(FontEngine::COLOR_MENU_PENALTY));
1208 }
1209 else if ((pcell->requires_level > 0) && pc->stats.level >= pcell->requires_level) {
1210 tip_data->addText(msg->get("Requires Level %d", pcell->requires_level));
1211 }
1212
1213 for (size_t j=0; j < pcell->requires_power.size(); ++j) {
1214 MenuPowersCell* req_cell = getCellByPowerIndex(pcell->requires_power[j]);
1215 if (!req_cell)
1216 continue;
1217
1218 std::string req_power_name;
1219 if (req_cell->upgrade_level > 0)
1220 req_power_name = powers->powers[req_cell->id].name + " (" + msg->get("Level %d", req_cell->upgrade_level) + ")";
11231221 else
1124 tip_data->addText(msg->get("Requires %s %d", eset->primary_stats.list[i].name, pcell->requires_primary[i]));
1125 }
1126 }
1127
1128 // Draw required Level Tooltip
1129 if ((pcell->requires_level > 0) && pc->stats.level < pcell->requires_level) {
1130 tip_data->addColoredText(msg->get("Requires Level %d", pcell->requires_level), font->getColor(FontEngine::COLOR_MENU_PENALTY));
1131 }
1132 else if ((pcell->requires_level > 0) && pc->stats.level >= pcell->requires_level) {
1133 tip_data->addText(msg->get("Requires Level %d", pcell->requires_level));
1134 }
1135
1136 for (size_t j=0; j < pcell->requires_power.size(); ++j) {
1137 MenuPowersCell* req_cell = getCellByPowerIndex(pcell->requires_power[j]);
1138 if (!req_cell)
1139 continue;
1140
1141 std::string req_power_name;
1142 if (req_cell->upgrade_level > 0)
1143 req_power_name = powers->powers[req_cell->id].name + " (" + msg->get("Level %d", req_cell->upgrade_level) + ")";
1144 else
1145 req_power_name = powers->powers[req_cell->id].name;
1146
1147
1148 // Required Power Tooltip
1149 if (!checkUnlocked(req_cell)) {
1150 tip_data->addColoredText(msg->get("Requires Power: %s", req_power_name), font->getColor(FontEngine::COLOR_MENU_PENALTY));
1151 }
1152 else {
1153 tip_data->addText(msg->get("Requires Power: %s", req_power_name));
1154 }
1155
1156 }
1157
1158 // Draw unlock power Tooltip
1159 if (pcell->requires_point && !(std::find(pc->stats.powers_list.begin(), pc->stats.powers_list.end(), pcell->id) != pc->stats.powers_list.end())) {
1160 MenuPowersCell* unlock_cell = getCellByPowerIndex(pcell->id);
1161 if (show_unlock_prompt && points_left > 0 && checkUnlock(unlock_cell)) {
1162 tip_data->addColoredText(msg->get("Click to Unlock (uses 1 Skill Point)"), font->getColor(FontEngine::COLOR_MENU_BONUS));
1163 }
1164 else {
1165 if (pcell->requires_point && points_left < 1)
1166 tip_data->addColoredText(msg->get("Requires 1 Skill Point"), font->getColor(FontEngine::COLOR_MENU_PENALTY));
1167 else
1168 tip_data->addText(msg->get("Requires 1 Skill Point"));
1222 req_power_name = powers->powers[req_cell->id].name;
1223
1224
1225 // Required Power Tooltip
1226 if (!checkUnlocked(req_cell)) {
1227 tip_data->addColoredText(msg->get("Requires Power: %s", req_power_name), font->getColor(FontEngine::COLOR_MENU_PENALTY));
1228 }
1229 else {
1230 tip_data->addText(msg->get("Requires Power: %s", req_power_name));
1231 }
1232
1233 }
1234
1235 // Draw unlock power Tooltip
1236 if (pcell->requires_point && !(std::find(pc->stats.powers_list.begin(), pc->stats.powers_list.end(), pcell->id) != pc->stats.powers_list.end())) {
1237 MenuPowersCell* unlock_cell = getCellByPowerIndex(pcell->id);
1238 if (show_unlock_prompt && points_left > 0 && checkUnlock(unlock_cell)) {
1239 tip_data->addColoredText(msg->get("Click to Unlock (uses 1 Skill Point)"), font->getColor(FontEngine::COLOR_MENU_BONUS));
1240 }
1241 else {
1242 if (pcell->requires_point && points_left < 1)
1243 tip_data->addColoredText(msg->get("Requires 1 Skill Point"), font->getColor(FontEngine::COLOR_MENU_PENALTY));
1244 else
1245 tip_data->addText(msg->get("Requires 1 Skill Point"));
1246 }
11691247 }
11701248 }
11711249 }
11811259 if (power_cell[i].tab != tab_num) continue;
11821260
11831261 MenuPowersCell* slot_cell = power_cell[i].getCurrent();
1184 if (!slot_cell || !slot_cell->isVisible())
1262 if (!slot_cell || !isCellVisible(slot_cell))
11851263 continue;
11861264
11871265 if (slots[i])
12341312
12351313 setUnlockedPowers();
12361314
1237 for (size_t i=0; i<power_cell.size(); i++) {
1238 // make sure invisible cells are skipped in the tablist
1239 if (slots[i])
1240 slots[i]->enable_tablist_nav = power_cell[i].getCurrent()->isVisible();
1241
1242 //upgrade buttons logic
1243 if (power_cell[i].upgrade_button != NULL) {
1244 power_cell[i].upgrade_button->enabled = false;
1245 if (pc->stats.hp > 0) {
1246 // enable button only if current level is unlocked and next level can be unlocked
1247 if (checkUpgrade(power_cell[i].getCurrent())) {
1248 power_cell[i].upgrade_button->enabled = true;
1249 }
1250 if ((!tab_control || power_cell[i].tab == tab_control->getActiveTab()) && power_cell[i].upgrade_button->checkClick()) {
1251 upgradePower(power_cell[i].getCurrent(), !UPGRADE_POWER_ALL_TABS);
1252 }
1253 }
1254 }
1255 }
1256
12571315 points_left = (pc->stats.level * pc->stats.power_points_per_level) - getPointsUsed();
12581316 if (points_left > 0) {
12591317 newPowerNotification = true;
1318 }
1319
1320 for (size_t i=0; i<power_cell.size(); i++) {
1321 // make sure invisible cells are skipped in the tablist
1322 if (visible && slots[i])
1323 slots[i]->enable_tablist_nav = isCellVisible(power_cell[i].getCurrent());
1324
1325 // disable upgrade buttons by default
1326 if (power_cell[i].upgrade_button != NULL) {
1327 power_cell[i].upgrade_button->enabled = false;
1328 }
1329
1330 // try to automatically upgrade powers is no power point is required
1331 MenuPowersCell* pcell = power_cell[i].getCurrent();
1332 while (checkUpgrade(pcell)) {
1333 if (pcell->next && !pcell->next->requires_point) {
1334 // automatic upgrade possible; do upgrade and re-check upgrade possibility
1335 upgradePower(pcell, UPGRADE_POWER_ALL_TABS);
1336 pcell = power_cell[i].getCurrent();
1337 if (power_cell[i].upgrade_button != NULL)
1338 power_cell[i].upgrade_button->enabled = (pc->stats.hp > 0 && isCellVisible(pcell) && checkUpgrade(pcell));
1339 }
1340 else {
1341 // power point required or no upgrade available; stop trying to upgrade
1342 if (power_cell[i].upgrade_button != NULL)
1343 power_cell[i].upgrade_button->enabled = (pc->stats.hp > 0 && isCellVisible(pcell));
1344 break;
1345 }
1346 }
1347
1348 // handle clicking of upgrade button
1349 if (visible && pc->stats.hp > 0 && power_cell[i].upgrade_button != NULL) {
1350 if ((!tab_control || power_cell[i].tab == tab_control->getActiveTab()) && power_cell[i].upgrade_button->checkClick()) {
1351 upgradePower(power_cell[i].getCurrent(), !UPGRADE_POWER_ALL_TABS);
1352 }
1353 }
12601354 }
12611355
12621356 if (!visible) return;
13761470 continue;
13771471
13781472 MenuPowersCell* tip_cell = power_cell[i].getCurrent();
1379 if (!tip_cell->isVisible())
1473 if (!isCellVisible(tip_cell))
13801474 continue;
13811475
13821476 if (slots[i] && Utils::isWithinRect(slots[i]->pos, position)) {
13831477 bool base_unlocked = checkUnlocked(tip_cell);
13841478
1385 createTooltip(&tip_data, tip_cell, !base_unlocked);
1479 createTooltip(&tip_data, tip_cell, tip_cell->id, !base_unlocked, MenuPowers::TOOLTIP_LONG_MENU);
13861480 if (tip_cell->next) {
13871481 tip_data.addText("\n" + msg->get("Next Level:"));
1388 createTooltip(&tip_data, tip_cell->next, base_unlocked);
1482 createTooltip(&tip_data, tip_cell->next, tip_cell->next->id, base_unlocked, MenuPowers::TOOLTIP_LONG_MENU);
13891483 }
13901484
13911485 tooltipm->push(tip_data, position, TooltipData::STYLE_FLOAT);
13971491 /**
13981492 * Click-to-drag a power (to the action bar)
13991493 */
1400 int MenuPowers::click(const Point& mouse) {
1494 PowerID MenuPowers::click(const Point& mouse) {
14011495 int active_tab = (tab_control) ? tab_control->getActiveTab() : 0;
14021496
14031497 for (size_t i=0; i<power_cell.size(); i++) {
14161510 }
14171511
14181512 MenuPowersCell* pcell = power_cell[i].getCurrent();
1419 if (!pcell)
1513 if (!pcell || !isCellVisible(pcell))
14201514 return 0;
14211515
14221516 if (checkUnlock(pcell) && points_left > 0 && pcell->requires_point) {
14291523 }
14301524 else if (checkUnlocked(pcell) && !powers->powers[pcell->id].passive) {
14311525 // pick up and drag power
1432 slots[i]->defocus();
1433 if (!tabs.empty()) {
1434 tablist_pow[active_tab].setCurrent(NULL);
1435 }
1436 else {
1437 tablist.setCurrent(NULL);
1526 if (inpt->usingMouse()) {
1527 slots[i]->defocus();
1528 if (!tabs.empty()) {
1529 tablist_pow[active_tab].setCurrent(NULL);
1530 }
1531 else {
1532 tablist.setCurrent(NULL);
1533 }
14381534 }
14391535 return power_cell[i].getBonusCurrent(pcell)->id;
14401536 }
14701566 /**
14711567 * Return true if required stats for power usage are met. Else return false.
14721568 */
1473 bool MenuPowers::meetsUsageStats(int power_index) {
1569 bool MenuPowers::meetsUsageStats(PowerID power_index) {
14741570 // Find cell with our power
14751571 MenuPowersCell* pcell = getCellByPowerIndex(power_index);
14761572
15091605 }
15101606 }
15111607
1512 void MenuPowers::addBonusLevels(int power_index, int bonus_levels) {
1608 void MenuPowers::addBonusLevels(PowerID power_index, int bonus_levels) {
15131609 MenuPowersCell* pcell = getCellByPowerIndex(power_index);
15141610
15151611 if (!pcell)
15291625 pgroup->bonus_levels.push_back(bonus);
15301626 }
15311627
1532 std::string MenuPowers::getItemBonusPowerReqString(int power_index) {
1628 std::string MenuPowers::getItemBonusPowerReqString(PowerID power_index) {
15331629 MenuPowersCell* pcell = getCellByPowerIndex(power_index);
15341630
15351631 if (!pcell)
5151 class MenuPowersCell {
5252 public:
5353 MenuPowersCell();
54 bool isVisible();
5554
56 int id;
55 PowerID id;
56 bool requires_point;
57
5758 int requires_level;
58 bool requires_point;
5959 std::vector<int> requires_primary;
60 std::vector<int> requires_power;
61 std::vector<StatusID> visible_requires_status;
62 std::vector<StatusID> visible_requires_not;
60 std::vector<PowerID> requires_power;
61 std::vector<StatusID> requires_status;
62 std::vector<StatusID> requires_not_status;
63
64 bool visible;
65 bool visible_when_locked;
6366
6467 int upgrade_level;
6568 bool passive_on;
102105 bool checkUpgrade(MenuPowersCell* pcell);
103106 void lockCell(MenuPowersCell* pcell);
104107 bool isBonusCell(MenuPowersCell* pcell);
108 bool isCellVisible(MenuPowersCell* pcell);
105109
106 MenuPowersCell* getCellByPowerIndex(int power_index);
110 MenuPowersCell* getCellByPowerIndex(PowerID power_index);
107111
108112 void upgradePower(MenuPowersCell* pcell, bool ignore_tab);
109113
110114 int getPointsUsed();
111115
112 void createTooltip(TooltipData* tip_data, MenuPowersCell* pcell, bool show_unlock_prompt);
116 void createTooltip(TooltipData* tip_data, MenuPowersCell* pcell, PowerID power_index, bool show_unlock_prompt, int tooltip_length);
113117 void renderPowers(int tab_num);
114118
115119 std::vector<MenuPowersCellGroup> power_cell;
133137
134138 bool tree_loaded;
135139
136 size_t prev_powers_list_size;
137
138140 int default_power_tab;
139141
140142 public:
143 enum {
144 TOOLTIP_SHORT = 0,
145 TOOLTIP_LONG_MENU = 1,
146 TOOLTIP_LONG_ALL = 2
147 };
148
141149 MenuPowers();
142150 ~MenuPowers();
143151 void align();
148156 void render();
149157
150158 void renderTooltips(const Point& position);
151 int click(const Point& mouse);
159 PowerID click(const Point& mouse);
152160 void upgradeBySlotIndex(int slot_index);
153161
154162 void setUnlockedPowers();
155163 void resetToBasePowers();
156164
157 bool meetsUsageStats(int power_index);
165 bool meetsUsageStats(PowerID power_index);
158166
159167 void clearActionBarBonusLevels();
160168 void clearBonusLevels();
161 void addBonusLevels(int power_index, int bonus_levels);
162 std::string getItemBonusPowerReqString(int power_index);
169 void addBonusLevels(PowerID power_index, int bonus_levels);
170 std::string getItemBonusPowerReqString(PowerID power_index);
171
172 void createTooltipFromActionBar(TooltipData* tip_data, unsigned slot, int tooltip_length);
163173
164174 std::vector<WidgetSlot*> slots; // power slot Widgets
165175
3838 #include "UtilsParsing.h"
3939 #include "WidgetButton.h"
4040 #include "WidgetSlot.h"
41 #include "WidgetTabControl.h"
42
43 MenuStashTab::MenuStashTab(const std::string& _id, const std::string& _name, const std::string& _filename, bool _is_private)
44 : id(_id)
45 , name(_name)
46 , filename(_filename)
47 , is_private(_is_private)
48 , is_legacy(false)
49 , updated(false)
50 , stock()
51 {}
52
53 MenuStashTab::~MenuStashTab() {
54 }
4155
4256 MenuStash::MenuStash()
4357 : Menu()
4458 , closeButton(new WidgetButton("images/menus/buttons/button_x.png"))
45 , stock()
46 , updated(false)
59 , tab_control(new WidgetTabControl())
60 , activetab(0)
61 , tabs()
4762 {
48
4963 setBackground("images/menus/stash.png");
5064
5165 int slots_cols = 8; // default if menus/stash.txt::stash_cols not set
5670 // @CLASS MenuStash|Description of menus/stash.txt
5771 if (infile.open("menus/stash.txt", FileParser::MOD_FILE, FileParser::ERROR_NORMAL)) {
5872 while(infile.next()) {
59 if (parseMenuKey(infile.key, infile.val))
60 continue;
61
62 // @ATTR close|point|Position of the close button.
63 if (infile.key == "close") {
64 Point pos = Parse::toPoint(infile.val);
65 closeButton->setBasePos(pos.x, pos.y, Utils::ALIGN_TOPLEFT);
73 if (infile.new_section) {
74 if (infile.section == "tab") {
75 std::stringstream id_str, name_str, filename_str;
76
77 // default tab settings
78 id_str << "Stash " << tabs.size();
79 name_str << msg->get("Stash") << " " << tabs.size();
80 filename_str << "stash_tab_" << tabs.size() << ".txt";
81
82 tabs.push_back(MenuStashTab(id_str.str(), name_str.str(), filename_str.str(), MenuStashTab::IS_PRIVATE));
83 }
6684 }
67 // @ATTR slots_area|point|Position of the top-left slot.
68 else if (infile.key == "slots_area") {
69 slots_area.x = Parse::popFirstInt(infile.val);
70 slots_area.y = Parse::popFirstInt(infile.val);
85
86 if (infile.section == "") {
87 if (parseMenuKey(infile.key, infile.val))
88 continue;
89
90 // @ATTR close|point|Position of the close button.
91 if (infile.key == "close") {
92 Point pos = Parse::toPoint(infile.val);
93 closeButton->setBasePos(pos.x, pos.y, Utils::ALIGN_TOPLEFT);
94 }
95 // @ATTR slots_area|point|Position of the top-left slot.
96 else if (infile.key == "slots_area") {
97 slots_area.x = Parse::popFirstInt(infile.val);
98 slots_area.y = Parse::popFirstInt(infile.val);
99 }
100 // @ATTR stash_cols|int|The number of columns for the grid of slots.
101 else if (infile.key == "stash_cols") {
102 slots_cols = std::max(1, Parse::toInt(infile.val));
103 }
104 // @ATTR stash_rows|int|The number of rows for the grid of slots.
105 else if (infile.key == "stash_rows") {
106 slots_rows = std::max(1, Parse::toInt(infile.val));
107 }
108 // @ATTR label_title|label|Position of the "Stash" label.
109 else if (infile.key == "label_title") {
110 label_title.setFromLabelInfo(Parse::popLabelInfo(infile.val));
111 }
112 // @ATTR currency|label|Position of the label displaying the amount of currency stored in the stash.
113 else if (infile.key == "currency") {
114 label_currency.setFromLabelInfo(Parse::popLabelInfo(infile.val));
115 }
116 else {
117 infile.error("MenuStash: '%s' is not a valid key.", infile.key.c_str());
118 }
71119 }
72 // @ATTR stash_cols|int|The number of columns for the grid of slots.
73 else if (infile.key == "stash_cols") {
74 slots_cols = std::max(1, Parse::toInt(infile.val));
120 else if (infile.section == "tab") {
121 // don't load any settings for the "Private" and "Shared" tabs
122 if (tabs.back().is_legacy)
123 continue;
124
125 if (infile.key == "name") {
126 // @ATTR tab.name|["Private", "Shared", string]|The displayed name of this tab. It is also used to determine the filename of the stash file that the engine will create. 'Private' and 'Shared' will use their legacy filenames for compatibility.
127 std::string name_str = infile.val;
128 tabs.back().id = name_str;
129 tabs.back().name = msg->get(name_str);
130
131 if (name_str == "Private") {
132 tabs.back().filename = "stash_HC.txt";
133 tabs.back().is_private = true;
134 tabs.back().is_legacy = true;
135 }
136 else if (name_str == "Shared") {
137 tabs.back().filename = "stash.txt";
138 tabs.back().is_private = false;
139 tabs.back().is_legacy = true;
140 }
141 else {
142 // generate a filename
143 std::stringstream ss;
144 ss << std::hex << "stash_" << Utils::hashString(name_str) << ".txt";
145 tabs.back().filename = ss.str();
146 }
147 }
148 else if (infile.key == "is_private") {
149 // @ATTR tab.is_private|bool|If true, this stash will not be shared across other saves.
150 tabs.back().is_private = Parse::toBool(infile.val);
151 }
152 else {
153 infile.error("MenuStash: '%s' is not a valid key.", infile.key.c_str());
154 }
75155 }
76 // @ATTR stash_rows|int|The number of rows for the grid of slots.
77 else if (infile.key == "stash_rows") {
78 slots_rows = std::max(1, Parse::toInt(infile.val));
79 }
80 // @ATTR label_title|label|Position of the "Stash" label.
81 else if (infile.key == "label_title") {
82 label_title.setFromLabelInfo(Parse::popLabelInfo(infile.val));
83 }
84 // @ATTR currency|label|Position of the label displaying the amount of currency stored in the stash.
85 else if (infile.key == "currency") {
86 label_currency.setFromLabelInfo(Parse::popLabelInfo(infile.val));
87 }
88 else {
89 infile.error("MenuStash: '%s' is not a valid key.", infile.key.c_str());
90 }
91156 }
92157 infile.close();
93158 }
94159
95 label_title.setText(msg->get("Shared Stash"));
160 label_title.setText(msg->get("Stash"));
96161 label_title.setColor(font->getColor(FontEngine::COLOR_MENU_NORMAL));
97162
98163 label_currency.setColor(font->getColor(FontEngine::COLOR_MENU_NORMAL));
101166 slots_area.w = slots_cols * eset->resolutions.icon_size;
102167 slots_area.h = slots_rows * eset->resolutions.icon_size;
103168
104 stock.initGrid(stash_slots, slots_area, slots_cols);
105 for (int i = 0; i < stash_slots; i++) {
106 tablist.add(stock.slots[i]);
169 tablist.add(tab_control);
170
171 // default tabs if none are defined in the config file
172 if (tabs.empty()) {
173 tabs.push_back(MenuStashTab("Private", msg->get("Private"), "stash_HC.txt", MenuStashTab::IS_PRIVATE));
174 tabs.push_back(MenuStashTab("Shared", msg->get("Shared"), "stash.txt", !MenuStashTab::IS_PRIVATE));
175 }
176
177 // ensure that characters have access to at least one private stash
178 // this needs to be done because permadeath characters ONLY have access to private stashes
179 bool private_exists = false;
180 for (size_t i = 0; i < tabs.size(); ++i) {
181 if (tabs[i].is_private) {
182 private_exists = true;
183 break;
184 }
185 }
186 if (!private_exists) {
187 tabs.push_back(MenuStashTab("Private", msg->get("Private"), "stash_HC.txt", MenuStashTab::IS_PRIVATE));
188 }
189
190 for (size_t i = 0; i < tabs.size(); ++i) {
191 tabs[i].stock.initGrid(stash_slots, slots_area, slots_cols);
192 tab_control->setTabTitle(static_cast<unsigned>(i), tabs[i].name);
193
194 // "tablist" keyboard navigation
195 tabs[i].tablist.setPrevTabList(&tablist);
196 tabs[i].tablist.lock();
197 for (int j = 0; j < stash_slots; ++j) {
198 tabs[i].tablist.add(tabs[i].stock.slots[j]);
199 }
107200 }
108201
109202 align();
112205 void MenuStash::align() {
113206 Menu::align();
114207
208 Rect tabs_area = slots_area;
209 tabs_area.x += window_area.x;
210 tabs_area.y += window_area.y;
211
212 tab_control->setMainArea(tabs_area.x, tabs_area.y - tab_control->getTabHeight());
213
115214 closeButton->setPos(window_area.x, window_area.y);
116 stock.setPos(window_area.x, window_area.y);
215
216 for (size_t i = 0; i < tabs.size(); ++i) {
217 tabs[i].stock.setPos(window_area.x, window_area.y);
218 }
117219
118220 label_title.setPos(window_area.x, window_area.y);
119221 label_currency.setPos(window_area.x, window_area.y);
123225 if (!visible) return;
124226
125227 tablist.logic();
228 for (size_t i = 0; i < tabs.size(); ++i) {
229 tabs[i].tablist.logic();
230 }
231
232 // disable tab control if we're dragging something from one of the stash stocks
233 bool dragging = false;
234 for (size_t i = 0; i < tabs.size(); ++i) {
235 if (tabs[i].stock.drag_prev_slot != -1) {
236 dragging = true;
237 break;
238 }
239 }
240 if (!dragging)
241 tab_control->logic();
242
243 if (settings->touchscreen && activetab != static_cast<size_t>(tab_control->getActiveTab())) {
244 for (size_t i = 0; i < tabs.size(); ++i) {
245 tabs[i].tablist.defocus();
246 }
247 }
248 activetab = tab_control->getActiveTab();
249
250 tablist.setNextTabList(&(tabs[activetab].tablist));
251
252 if (settings->touchscreen) {
253 if (tabs[activetab].tablist.getCurrent() == -1)
254 tabs[activetab].stock.current_slot = NULL;
255 }
126256
127257 if (closeButton->checkClick()) {
128258 visible = false;
142272 // text overlay
143273 label_title.render();
144274 if (!label_currency.isHidden()) {
145 label_currency.setText(msg->get("%d %s", stock.count(eset->misc.currency_id), eset->loot.currency));
275 label_currency.setText(msg->get("%d %s", tabs[activetab].stock.count(eset->misc.currency_id), eset->loot.currency));
146276 label_currency.render();
147277 }
148278
279 tab_control->render();
149280
150281 // show stock
151 stock.render();
282 tabs[activetab].stock.render();
152283 }
153284
154285 /**
165296
166297 items->playSound(stack.item);
167298
168 slot = stock.slotOver(position);
169 drag_prev_slot = stock.drag_prev_slot;
299 slot = tabs[activetab].stock.slotOver(position);
300 drag_prev_slot = tabs[activetab].stock.drag_prev_slot;
170301
171302 if (slot == -1) {
172303 success = add(stack, slot, !ADD_PLAY_SOUND);
173304 }
174305 else if (drag_prev_slot != -1) {
175 if (stock[slot].item == stack.item || stock[slot].empty()) {
306 if (tabs[activetab].stock[slot].item == stack.item || tabs[activetab].stock[slot].empty()) {
176307 // Drop the stack, merging if needed
177308 success = add(stack, slot, !ADD_PLAY_SOUND);
178309 }
179 else if (drag_prev_slot != -1 && stock[drag_prev_slot].empty()) {
310 else if (drag_prev_slot != -1 && tabs[activetab].stock[drag_prev_slot].empty()) {
180311 // Check if the previous slot is free (could still be used if SHIFT was used).
181312 // Swap the two stacks
182 itemReturn(stock[slot]);
183 stock[slot] = stack;
184 updated = true;
313 itemReturn(tabs[activetab].stock[slot]);
314 tabs[activetab].stock[slot] = stack;
315 tabs[activetab].updated = true;
185316 }
186317 else {
187318 itemReturn(stack);
188 updated = true;
319 tabs[activetab].updated = true;
189320 }
190321 }
191322 else {
204335 items->playSound(stack.item);
205336 }
206337
207 if (items->items[stack.item].quest_item) {
208 pc->logMsg(msg->get("Can not store quest items in the stash."), Avatar::MSG_NORMAL);
338 if (items->items[stack.item].no_stash == Item::NO_STASH_ALL) {
339 pc->logMsg(msg->get("This item can not be stored in the stash."), Avatar::MSG_NORMAL);
209340 drop_stack.push(stack);
210341 return false;
211342 }
212
213 ItemStack leftover = stock.add(stack, slot);
343 else if (tabs[activetab].is_private && items->items[stack.item].no_stash == Item::NO_STASH_PRIVATE) {
344 pc->logMsg(msg->get("This item can not be stored in the private stash."), Avatar::MSG_NORMAL);
345 drop_stack.push(stack);
346 return false;
347 }
348 else if (!tabs[activetab].is_private && items->items[stack.item].no_stash == Item::NO_STASH_SHARED) {
349 pc->logMsg(msg->get("This item can not be stored in the shared stash."), Avatar::MSG_NORMAL);
350 drop_stack.push(stack);
351 return false;
352 }
353
354 ItemStack leftover = tabs[activetab].stock.add(stack, slot);
214355 if (!leftover.empty()) {
215356 if (leftover.quantity != stack.quantity) {
216 updated = true;
357 tabs[activetab].updated = true;
217358 }
218359 pc->logMsg(msg->get("Stash is full."), Avatar::MSG_NORMAL);
219360 drop_stack.push(leftover);
220361 return false;
221362 }
222363 else {
223 updated = true;
364 tabs[activetab].updated = true;
224365 }
225366
226367 return true;
231372 * Players can drag an item to their inventory.
232373 */
233374 ItemStack MenuStash::click(const Point& position) {
234 ItemStack stack = stock.click(position);
375 ItemStack stack = tabs[activetab].stock.click(position);
235376 if (settings->touchscreen) {
236 tablist.setCurrent(stock.current_slot);
377 tabs[activetab].tablist.setCurrent(tabs[activetab].stock.current_slot);
237378 }
238379 return stack;
239380 }
242383 * Cancel the dragging initiated by the click()
243384 */
244385 void MenuStash::itemReturn(ItemStack stack) {
245 stock.itemReturn(stack);
386 tabs[activetab].stock.itemReturn(stack);
246387 }
247388
248389 void MenuStash::renderTooltips(const Point& position) {
249390 if (!visible || !Utils::isWithinRect(window_area, position))
250391 return;
251392
252 TooltipData tip_data = stock.checkTooltip(position, &pc->stats, ItemManager::PLAYER_INV);
393 TooltipData tip_data = tabs[activetab].stock.checkTooltip(position, &pc->stats, ItemManager::PLAYER_INV);
253394 tooltipm->push(tip_data, position, TooltipData::STYLE_FLOAT);
254395 }
255396
256397 void MenuStash::removeFromPrevSlot(int quantity) {
257 int drag_prev_slot = stock.drag_prev_slot;
398 int drag_prev_slot = tabs[activetab].stock.drag_prev_slot;
258399 if (drag_prev_slot > -1) {
259 stock.subtract(drag_prev_slot, quantity);
400 tabs[activetab].stock.subtract(drag_prev_slot, quantity);
401 }
402 }
403
404 void MenuStash::validate(std::queue<ItemStack>& global_drop_stack) {
405 for (size_t tab = 0; tab < tabs.size(); ++tab) {
406 for (int i = 0; i < tabs[activetab].stock.getSlotNumber(); ++i) {
407 if (tabs[tab].stock[i].empty())
408 continue;
409
410 ItemStack stack = tabs[tab].stock[i];
411 int no_stash = items->items[stack.item].no_stash;
412 if (no_stash == Item::NO_STASH_ALL || (tabs[tab].is_private && no_stash == Item::NO_STASH_PRIVATE) || (!tabs[tab].is_private && no_stash == Item::NO_STASH_SHARED)) {
413 pc->logMsg(msg->get("Can not store item in stash: %s", items->getItemName(stack.item).c_str()), Avatar::MSG_NORMAL);
414 global_drop_stack.push(stack);
415 tabs[tab].stock[i].clear();
416 tabs[tab].updated = true;
417 }
418 }
419 }
420 }
421
422 bool MenuStash::checkUpdates() {
423 bool updated = false;
424
425 for (size_t i = 0; i < tabs.size(); ++i) {
426 if (tabs[i].updated) {
427 tabs[i].updated = false;
428
429 if (eset->misc.save_onstash == EngineSettings::Misc::SAVE_ONSTASH_ALL)
430 updated = true;
431 else if (tabs[i].is_private && eset->misc.save_onstash == EngineSettings::Misc::SAVE_ONSTASH_PRIVATE)
432 updated = true;
433 else if (!tabs[i].is_private && eset->misc.save_onstash == EngineSettings::Misc::SAVE_ONSTASH_SHARED)
434 updated = true;
435 }
436 }
437
438 return updated;
439 }
440
441 void MenuStash::enableSharedTab(bool permadeath) {
442 for (size_t i = 0; i < tabs.size(); ++i) {
443 tab_control->setEnabled(static_cast<unsigned>(i), (!permadeath || (permadeath && tabs[i].is_private)));
444 }
445 }
446
447 void MenuStash::setTab(size_t tab) {
448 if (settings->touchscreen && activetab != tab) {
449 for (size_t i = 0; i < tabs.size(); ++i) {
450 tabs[i].tablist.defocus();
451 }
452 }
453 if (tab >= tabs.size()) {
454 tab_control->setActiveTab(0);
455 activetab = 0;
456 }
457 else {
458 tab_control->setActiveTab(static_cast<unsigned>(tab));
459 activetab = tab;
460 }
461 }
462
463 size_t MenuStash::getTab() {
464 return activetab;
465 }
466
467 void MenuStash::lockTabControl() {
468 for (size_t i = 0; i < tabs.size(); ++i) {
469 tabs[i].tablist.setPrevTabList(NULL);
470 }
471 }
472
473 void MenuStash::unlockTabControl() {
474 for (size_t i = 0; i < tabs.size(); ++i) {
475 tabs[i].tablist.setPrevTabList(&tablist);
476 }
477 }
478
479 TabList* MenuStash::getCurrentTabList() {
480 if (tablist.getCurrent() != -1) {
481 return (&tablist);
482 }
483 else {
484 for (size_t i = 0; i < tabs.size(); ++i) {
485 if (tabs[i].tablist.getCurrent() != -1)
486 return (&(tabs[i].tablist));
487 }
488 }
489
490 return NULL;
491 }
492
493 void MenuStash::defocusTabLists() {
494 tablist.defocus();
495 for (size_t i = 0; i < tabs.size(); ++i) {
496 tabs[i].tablist.defocus();
260497 }
261498 }
262499
263500 MenuStash::~MenuStash() {
264501 delete closeButton;
265 }
266
502 delete tab_control;
503 }
504
2929 class NPC;
3030 class StatBlock;
3131 class WidgetButton;
32 class WidgetTabControl;
33
34 class MenuStashTab {
35 public:
36 static const bool IS_PRIVATE = true;
37
38 MenuStashTab(const std::string& id, const std::string& _name, const std::string& _filename, bool _is_private);
39 ~MenuStashTab();
40
41 std::string id;
42 std::string name;
43 std::string filename;
44 bool is_private;
45 bool is_legacy;
46 bool updated;
47
48 MenuItemStorage stock;
49 TabList tablist;
50 };
3251
3352 class MenuStash : public Menu {
3453 private:
3554 WidgetButton *closeButton;
55 WidgetTabControl *tab_control;
3656 WidgetLabel label_title;
3757 WidgetLabel label_currency;
58
59 size_t activetab;
3860
3961 public:
4062 static const int NO_SLOT = -1;
5173 bool add(ItemStack stack, int slot, bool play_sound);
5274 void renderTooltips(const Point& position);
5375 bool drop(const Point& position, ItemStack stack);
76 void validate(std::queue<ItemStack>& global_drop_stack);
77 bool checkUpdates();
5478
5579 void removeFromPrevSlot(int quantity);
80 void enableSharedTab(bool permadeath);
81
82 void setTab(size_t tab);
83 size_t getTab();
84
85 void lockTabControl();
86 void unlockTabControl();
87 TabList* getCurrentTabList();
88 void defocusTabLists();
5689
5790 Rect slots_area;
58 MenuItemStorage stock;
59 bool updated;
91 std::vector<MenuStashTab> tabs;
6092
6193 std::queue<ItemStack> drop_stack;
6294 };
2828 #include "FontEngine.h"
2929 #include "InputState.h"
3030 #include "Menu.h"
31 #include "MenuExit.h"
32 #include "MenuManager.h"
3133 #include "MenuStatBar.h"
3234 #include "ModManager.h"
3335 #include "RenderDevice.h"
3436 #include "Settings.h"
37 #include "SharedGameResources.h"
3538 #include "SharedResources.h"
3639 #include "StatBlock.h"
3740 #include "WidgetLabel.h"
3942 #include "UtilsParsing.h"
4043 #include "UtilsFileSystem.h"
4144
42 MenuStatBar::MenuStatBar(const std::string& type)
45 MenuStatBar::MenuStatBar(short _type)
4346 : bar(NULL)
47 , label(new WidgetLabel())
4448 , stat_min(0)
4549 , stat_cur(0)
50 , stat_cur_prev(0)
4651 , stat_max(0)
4752 , orientation(HORIZONTAL)
4853 , custom_text_pos(false) // label will be placed in the middle of the bar
4954 , custom_string("")
5055 , bar_gfx("")
5156 , bar_gfx_background("")
57 , type(_type)
58 , bar_fill_offset()
59 , bar_fill_size(-1, -1)
5260 {
53
54 label = new WidgetLabel();
61 std::string type_filename;
62 if (type == TYPE_HP)
63 type_filename = "hp";
64 else if (type == TYPE_MP)
65 type_filename = "mp";
66 else if (type == TYPE_XP)
67 type_filename = "xp";
5568
5669 // Load config settings
5770 FileParser infile;
5871 // @CLASS MenuStatBar|Description of menus/hp.txt, menus/mp.txt, menus/xp.txt
59 if(infile.open("menus/"+type+".txt", FileParser::MOD_FILE, FileParser::ERROR_NORMAL)) {
72 if(!type_filename.empty() && infile.open("menus/" + type_filename + ".txt", FileParser::MOD_FILE, FileParser::ERROR_NORMAL)) {
6073 while(infile.next()) {
6174 if (parseMenuKey(infile.key, infile.val))
6275 continue;
8295 else if (infile.key == "bar_gfx_background") {
8396 bar_gfx_background = infile.val;
8497 }
98 // @ATTR hide_timeout|duration|Hide HP and MP bar if full mana or health, after given amount of seconds; Hide XP bar if no changes in XP points for given amount of seconds. 0 disable hiding.
99 else if (infile.key == "hide_timeout") {
100 timeout.setDuration(Parse::toDuration(infile.val));
101 }
102 // @ATTR bar_fill_offset|point|Offset of the bar's fill graphics relative to the bar_pos X/Y.
103 else if (infile.key == "bar_fill_offset") {
104 bar_fill_offset = Parse::toPoint(infile.val);
105 }
106 // @ATTR bar_fill_size|int, int : Width, Height|Size of the bar's fill graphics. If not defined, the width/height of bar_pos is used.
107 else if (infile.key == "bar_fill_size") {
108 bar_fill_size = Parse::toPoint(infile.val);
109 }
85110 else {
86111 infile.error("MenuStatBar: '%s' is not a valid key.", infile.key.c_str());
87112 }
88113 }
89114 infile.close();
115 }
116
117 // default to bar_pos size if bar_fill_size is undefined
118 if (bar_fill_size.x == -1 || bar_fill_size.y == -1) {
119 bar_fill_size.x = bar_pos.w;
120 bar_fill_size.y = bar_pos.h;
90121 }
91122
92123 loadGraphics();
111142 }
112143
113144 void MenuStatBar::update(unsigned long _stat_min, unsigned long _stat_cur, unsigned long _stat_max) {
145 stat_cur_prev = stat_cur; // save previous value
114146 stat_min = _stat_min;
115147 stat_cur = _stat_cur;
116148 stat_max = _stat_max;
120152 custom_string = _custom_string;
121153 }
122154
155 bool MenuStatBar::disappear() {
156 if (timeout.getDuration() > 0 && settings->statbar_autohide) {
157 if (type == TYPE_HP || type == TYPE_MP) {
158 // HP and MP bars disappear when full
159 if (stat_cur != stat_max) {
160 timeout.reset(Timer::BEGIN);
161 }
162 } else if (type == TYPE_XP) {
163 // XP bar disappears when value is not changing
164 if (stat_cur_prev != stat_cur) {
165 timeout.reset(Timer::BEGIN);
166 }
167 }
168
169 timeout.tick();
170 if (timeout.isEnd())
171 return true;
172 }
173 return false;
174 }
175
123176 void MenuStatBar::render() {
177
178 if (disappear()) return;
179
124180 Rect src;
125181 Rect dest;
126182
146202
147203 // draw bar progress based on orientation
148204 if (orientation == HORIZONTAL) {
149 unsigned long bar_length = (normalized_max == 0) ? 0 : (normalized_cur * static_cast<unsigned long>(bar_pos.w)) / normalized_max;
205 unsigned long bar_length = (normalized_max == 0) ? 0 : (normalized_cur * static_cast<unsigned long>(bar_fill_size.x)) / normalized_max;
206 if (bar_length == 0 && normalized_cur > 0)
207 bar_length = 1;
150208 src.x = 0;
151209 src.y = 0;
152210 src.w = static_cast<int>(bar_length);
153 src.h = bar_pos.h;
154 dest.x = bar_dest.x;
155 dest.y = bar_dest.y;
211 src.h = bar_fill_size.y;
212 dest.x = bar_dest.x + bar_fill_offset.x;
213 dest.y = bar_dest.y + bar_fill_offset.y;
156214 }
157215 else if (orientation == VERTICAL) {
158 unsigned long bar_length = (normalized_max == 0) ? 0 : (normalized_cur * static_cast<unsigned long>(bar_pos.h)) / normalized_max;
216 unsigned long bar_length = (normalized_max == 0) ? 0 : (normalized_cur * static_cast<unsigned long>(bar_fill_size.y)) / normalized_max;
217 if (bar_length == 0 && normalized_cur > 0)
218 bar_length = 1;
159219 src.x = 0;
160 src.y = bar_pos.h-static_cast<int>(bar_length);
161 src.w = bar_pos.w;
220 src.y = bar_fill_size.y-static_cast<int>(bar_length);
221 src.w = bar_fill_size.x;
162222 src.h = static_cast<int>(bar_length);
163 dest.x = bar_dest.x;
164 dest.y = bar_dest.y+src.y;
223 dest.x = bar_dest.x + bar_fill_offset.x;
224 dest.y = bar_dest.y + bar_fill_offset.y + src.y;
165225 }
166226
167227 if (bar) {
173233 // if mouseover, draw text
174234 if (!text_pos.hidden) {
175235
176 if (settings->statbar_labels || (inpt->usingMouse() && Utils::isWithinRect(bar_dest, inpt->mouse))) {
236 if (settings->statbar_labels || (inpt->usingMouse() && Utils::isWithinRect(bar_dest, inpt->mouse) && !menu->exit->visible)) {
177237 std::stringstream ss;
178238 if (!custom_string.empty())
179239 ss << custom_string;
3333
3434 class MenuStatBar : public Menu {
3535 private:
36 bool disappear();
37
3638 enum {
3739 HORIZONTAL = 0,
3840 VERTICAL = 1
4244 WidgetLabel *label;
4345 unsigned long stat_min;
4446 unsigned long stat_cur;
47 unsigned long stat_cur_prev;
4548 unsigned long stat_max;
4649 Rect bar_pos;
4750 LabelInfo text_pos;
5053 std::string custom_string;
5154 std::string bar_gfx;
5255 std::string bar_gfx_background;
56 short type;
57 Timer timeout;
58 Point bar_fill_offset;
59 Point bar_fill_size;
60
5361
5462 public:
55 explicit MenuStatBar(const std::string& type);
63 enum {
64 TYPE_HP = 0,
65 TYPE_MP = 1,
66 TYPE_XP = 2
67 };
68
69 explicit MenuStatBar(short _type);
5670 ~MenuStatBar();
5771 void loadGraphics();
5872 void update(unsigned long _stat_min, unsigned long _stat_cur, unsigned long _stat_max);
2323 */
2424
2525 #include "Avatar.h"
26 #include "Entity.h"
2627 #include "FileParser.h"
2728 #include "FontEngine.h"
2829 #include "InputState.h"
442443 // add standard topics
443444 for (size_t i = nodes.size(); i > 0; i--) {
444445 std::string topic = npc->getDialogTopic(nodes[i-1]);
445 if (topic.empty())
446 continue;
446 if (topic.empty()) {
447 topic = msg->get("<dialog node %d>", nodes[i-1]);
448 }
447449
448450 addAction(topic, nodes[i-1], !Action::IS_VENDOR);
449451 }
473475 int node_id = actions[index].node_id;
474476
475477 if (actions[index].is_vendor) {
478 // defocus the talker menu tablist. Otherwise, CANCEL needs to be pressed twice to exit the vendor screen
479 defocusTabLists();
480
476481 // begin trading
477482 NPC *temp_npc = npc;
478483 menu->closeAll();
521526 void MenuTalker::setupTabList() {
522527 tablist.clear();
523528
524 if (dialog_node == -1) {
525 for (size_t i = 0; i < actions.size(); ++i) {
526 tablist.add(actions[i].btn);
527 }
528 }
529 tablist.add(textbox);
529530
530531 if (advanceButton->enabled) {
531532 tablist.add(advanceButton);
2222 */
2323
2424 #include "Avatar.h"
25 #include "Entity.h"
2526 #include "EngineSettings.h"
2627 #include "FileParser.h"
2728 #include "FontEngine.h"
3536 #include "SharedGameResources.h"
3637 #include "SharedResources.h"
3738 #include "SoundManager.h"
39 #include "TooltipManager.h"
3840 #include "UtilsParsing.h"
3941 #include "WidgetButton.h"
4042 #include "WidgetSlot.h"
143145 tablist_buy.logic();
144146 tablist_sell.logic();
145147
146 tabControl->logic();
148 if (stock[ItemManager::VENDOR_BUY].drag_prev_slot == -1 && stock[ItemManager::VENDOR_SELL].drag_prev_slot == -1)
149 tabControl->logic();
150
147151 if (settings->touchscreen && activetab != tabControl->getActiveTab()) {
148152 tablist_buy.defocus();
149153 tablist_sell.defocus();
240244
241245 int vendor_view = (activetab == ItemManager::VENDOR_BUY) ? ItemManager::VENDOR_BUY : ItemManager::VENDOR_SELL;
242246 TooltipData tip_data = stock[activetab].checkTooltip(position, &pc->stats, vendor_view);
243 tip->render(tip_data, position, TooltipData::STYLE_FLOAT);
247 tooltipm->push(tip_data, position, TooltipData::STYLE_FLOAT);
244248 }
245249
246250 /**
171171 std::string line;
172172 std::string starts_with;
173173
174 std::string place1 = settings->path_conf + "mods.txt";
175 std::string place2 = settings->path_data + "mods/mods.txt";
174 std::string place1 = Filesystem::convertSlashes(settings->path_conf + "mods.txt");
175 std::string place2 = Filesystem::convertSlashes(settings->path_data + "mods/mods.txt");
176176
177177 infile.open(place1.c_str(), std::ios::in);
178178
238238 * Find the location (mod file name) for this data file.
239239 * Use private loc_cache to prevent excessive disk I/O
240240 */
241 std::string ModManager::locate(const std::string& filename) {
241 std::string ModManager::locate(const std::string& _filename) {
242 std::string filename = Filesystem::convertSlashes(_filename);
243
242244 // if we have this location already cached, return it
243245 if (loc_cache.find(filename) != loc_cache.end()) {
244246 return loc_cache[filename];
249251
250252 for (size_t i = mod_list.size(); i > 0; i--) {
251253 for (size_t j = 0; j < mod_paths.size(); j++) {
252 test_path = mod_paths[j] + "mods/" + mod_list[i-1].name + "/" + filename;
254 test_path = Filesystem::convertSlashes(mod_paths[j] + "mods/" + mod_list[i-1].name + "/" + filename);
253255 if (Filesystem::fileExists(test_path)) {
254256 loc_cache[filename] = test_path;
255257 return test_path;
258260 }
259261
260262 // all else failing, simply return the filename if it exists
261 test_path = settings->path_data + filename;
263 test_path = Filesystem::convertSlashes(settings->path_data + filename);
262264 if (!Filesystem::fileExists(test_path))
263265 test_path = "";
264266
282284
283285 for (size_t i = 0; i < mod_list.size(); ++i) {
284286 for (size_t j = mod_paths.size(); j > 0; j--) {
285 test_path = mod_paths[j-1] + "mods/" + mod_list[i].name + "/" + path;
287 test_path = Filesystem::convertSlashes(mod_paths[j-1] + "mods/" + mod_list[i].name + "/" + path);
286288 amendPathToVector(test_path, ret);
287289 }
288290 }
333335
334336 // @CLASS ModManager|Description of mod settings.txt
335337 for (unsigned i=0; i<mod_paths.size(); ++i) {
336 std::string path = mod_paths[i] + "mods/" + name + "/settings.txt";
338 std::string path = Filesystem::convertSlashes(mod_paths[i] + "mods/" + name + "/settings.txt");
337339 infile.open(path.c_str(), std::ios::in);
338340
339341 while (infile.good()) {
526528
527529 void ModManager::saveMods() {
528530 std::ofstream outfile;
529 outfile.open((settings->path_conf + "mods.txt").c_str(), std::ios::out);
531 outfile.open((Filesystem::convertSlashes(settings->path_conf + "mods.txt")).c_str(), std::ios::out);
530532
531533 if (outfile.is_open()) {
532534 // comment
541543 }
542544 }
543545 if (outfile.bad())
544 Utils::logError("GameStateConfigBase: Unable to save mod list into file. No write access or disk is full!");
546 Utils::logError("GameStateConfig: Unable to save mod list into file. No write access or disk is full!");
545547
546548 outfile.close();
547549 outfile.clear();
7878
7979 // Returns the filename within the latest mod, in which the provided generic
8080 // filename was found.
81 std::string locate(const std::string& filename);
81 std::string locate(const std::string& _filename);
8282
8383 // Returns a list of filenames, going through all mods, in which the provided
8484 // generic filename is found.
2525 #include "AnimationManager.h"
2626 #include "AnimationSet.h"
2727 #include "CampaignManager.h"
28 #include "EntityBehavior.h"
2829 #include "EventManager.h"
2930 #include "FileParser.h"
3031 #include "ItemManager.h"
3132 #include "LootManager.h"
33 #include "MapRenderer.h"
3234 #include "MessageEngine.h"
35 #include "ModManager.h"
3336 #include "NPC.h"
3437 #include "RenderDevice.h"
3538 #include "SharedGameResources.h"
3841 #include "UtilsMath.h"
3942 #include "UtilsParsing.h"
4043
41 NPC::NPC()
42 : Entity()
44 NPC::NPC(const Entity& e)
45 : Entity(e)
4346 , gfx("")
47 , vox_intro()
48 , vox_quests()
4449 , name("")
4550 , direction(0)
51 , show_on_minimap(true)
4652 , npc_portrait(NULL)
4753 , hero_portrait(NULL)
4854 , talker(false)
4955 , vendor(false)
50 , reset_buyback(true) {
56 , reset_buyback(true)
57 , stock()
58 , dialog()
59 {
5160 stock.init(VENDOR_MAX_STOCK);
5261 }
5362
6877 bool clear_random_table = true;
6978
7079 while (infile.next()) {
71 if (infile.section == "dialog") {
80 if (infile.section == "stats") {
81 // handled by StatBlock::load()
82 continue;
83 }
84 else if (infile.section == "dialog") {
7285 if (infile.new_section) {
7386 dialog.push_back(std::vector<EventComponent>());
7487 }
123136 e.s = infile.val;
124137 portrait_filenames.push_back(e.s);
125138 }
139 else if (infile.key == "take_a_party") {
140 // @ATTR dialog.take_a_party|bool|Start/stop taking a party with player.
141 e.type = EventComponent::NPC_TAKE_A_PARTY;
142 e.x = Parse::toBool(infile.val);
143 }
126144 else if (infile.key == "response") {
127145 // @ATTR dialog.response|repeatable(string)|A dialog ID to present as a selectable response. This key must precede the dialog text line.
128146 e.type = EventComponent::NPC_DIALOG_RESPONSE;
148166 dialog.back().push_back(e);
149167 }
150168 }
151 else {
169 else if (infile.section.empty() || infile.section == "npc") {
152170 filename = npc_id;
153171
154172 if (infile.new_section) {
161179 name = msg->get(infile.val);
162180 }
163181 else if (infile.key == "gfx") {
164 // @ATTR gfx|filename|Filename of an animation definition.
165 gfx = infile.val;
182 // TODO deprecate this!
183 // Currently handled in StatBlock::isNPCStat()
166184 }
167185 else if (infile.key == "direction") {
168186 // @ATTR direction|direction|The direction to use for this NPC's stance animation.
169187 direction = Parse::toDirection(infile.val);
188 }
189 else if (infile.key == "show_on_minimap") {
190 // @ATTR show_on_minimap|bool|If true, this NPC will be shown on the minimap. The default is true.
191 show_on_minimap = Parse::toBool(infile.val);
170192 }
171193
172194 // handle talkers
199221 else if (infile.key == "constant_stock") {
200222 // @ATTR constant_stock|repeatable(list(item_id))|A list of items this vendor has for sale. Quantity can be specified by appending ":Q" to the item_id, where Q is an integer.
201223 while (infile.val != "") {
202 std::string temp = Parse::popFirstString(infile.val);
203 temp += ':';
204 stack.item = Parse::popFirstInt(temp, ':');
205 stack.quantity = Parse::popFirstInt(temp, ':');
206 if (stack.quantity == 0)
207 stack.quantity = 1;
224 stack = Parse::toItemQuantityPair(Parse::popFirstString(infile.val));
208225 stock.add(stack, ItemStorage::NO_SLOT);
209226 }
210227 }
212229 // @ATTR status_stock|repeatable(string, list(item_id)) : Required status, Item(s)|A list of items this vendor will have for sale if the required status is met. Quantity can be specified by appending ":Q" to the item_id, where Q is an integer.
213230 if (camp->checkStatus(camp->registerStatus(Parse::popFirstString(infile.val)))) {
214231 while (infile.val != "") {
215 std::string temp = Parse::popFirstString(infile.val);
216 temp += ':';
217 stack.item = Parse::popFirstInt(temp, ':');
218 stack.quantity = Parse::popFirstInt(temp, ':');
219 if (stack.quantity == 0)
220 stack.quantity = 1;
232 stack = Parse::toItemQuantityPair(Parse::popFirstString(infile.val));
221233 stock.add(stack, ItemStorage::NO_SLOT);
222234 }
223235 }
255267 }
256268 infile.close();
257269 }
270
258271 loadGraphics();
259272
260273 // fill inventory with items from random stock table
268281 for (size_t i=0; i<rand_itemstacks.size(); ++i) {
269282 stock.add(rand_itemstacks[i], ItemStorage::NO_SLOT);
270283 }
284
285 // warn if dialog nodes lack a topic
286 std::string full_filename = mods->locate(npc_id);
287 for (size_t i=0; i<dialog.size(); ++i) {
288 std::string topic = getDialogTopic(static_cast<int>(i));
289 if (topic.empty()) {
290 Utils::logInfo("[%s] NPC: Dialog node %d does not have a topic.", full_filename.c_str(), i);
291 }
292 }
271293 }
272294
273295 void NPC::loadGraphics() {
274296
275 if (gfx != "") {
276 anim->increaseCount(gfx);
277 animationSet = anim->getAnimationSet(gfx);
297 if (stats.animations != "") {
298 anim->increaseCount(stats.animations);
299 animationSet = anim->getAnimationSet(stats.animations);
278300 activeAnimation = animationSet->getAnimation("");
279301 }
280302
318340 }
319341
320342 void NPC::logic() {
321 if (activeAnimation)
322 activeAnimation->advanceFrame();
343 mapr->collider.unblock(stats.pos.x, stats.pos.y);
344
345 Entity::logic();
346 moveMapEvents();
347
348 if (!stats.hero_ally)
349 mapr->collider.block(stats.pos.x, stats.pos.y, true);
323350 }
324351
325352 bool NPC::playSoundIntro() {
475502 return true;
476503 }
477504
505 void NPC::moveMapEvents() {
506
507 // Update event position after NPC has moved
508 for (size_t i = 0; i < mapr->events.size(); i++)
509 {
510 if (mapr->events[i].type == filename)
511 {
512 mapr->events[i].location.x = static_cast<int>(stats.pos.x);
513 mapr->events[i].location.y = static_cast<int>(stats.pos.y);
514
515 mapr->events[i].hotspot.x = static_cast<int>(stats.pos.x);
516 mapr->events[i].hotspot.y = static_cast<int>(stats.pos.y);
517
518 mapr->events[i].center.x =
519 static_cast<float>(stats.pos.x) + static_cast<float>(mapr->events[i].hotspot.w)/2;
520 mapr->events[i].center.y =
521 static_cast<float>(stats.pos.y) + static_cast<float>(mapr->events[i].hotspot.h)/2;
522
523 for (size_t ci = 0; ci < mapr->events[i].components.size(); ci++)
524 {
525 if (mapr->events[i].components[ci].type == EventComponent::NPC_HOTSPOT)
526 {
527 mapr->events[i].components[ci].x = static_cast<int>(stats.pos.x);
528 mapr->events[i].components[ci].y = static_cast<int>(stats.pos.y);
529 }
530 }
531 }
532 }
533 }
534
478535 bool NPC::checkVendor() {
479536 if (!vendor)
480537 return false;
573630 }
574631 }
575632 }
633 else if (dialog[dialog_node][event_cursor].type == EventComponent::NPC_TAKE_A_PARTY) {
634 stats.hero_ally = dialog[dialog_node][event_cursor].x == 0 ? false : true;
635 }
576636 else if (dialog[dialog_node][event_cursor].type == EventComponent::NONE) {
577637 // conversation ends
578638 return false;
601661 EventManager::executeEvent(ev);
602662 }
603663
604 Renderable NPC::getRender() {
605 Renderable r;
606 if (activeAnimation) {
607 r = activeAnimation->getCurrentFrame(direction);
608 }
609 r.map_pos.x = pos.x;
610 r.map_pos.y = pos.y;
611
612 return r;
613 }
614
615664 bool NPC::isDialogType(const int &event_type) {
616665 return event_type == EventComponent::NPC_DIALOG_THEM || event_type == EventComponent::NPC_DIALOG_YOU;
617666 }
622671 delete portraits[i];
623672 }
624673
625 if (gfx != "") {
626 anim->decreaseCount(gfx);
674 if (stats.animations != "") {
675 anim->decreaseCount(stats.animations);
627676 }
628677
629678 while (!vox_intro.empty()) {
2323 #ifndef NPC_H
2424 #define NPC_H
2525
26 #include "CommonIncludes.h"
2726 #include "Entity.h"
2827 #include "ItemStorage.h"
29 #include "Utils.h"
3028
3129 class EventComponent;
3230
6058 static const int VENDOR_MAX_STOCK = 80;
6159 static const bool GET_RESPONSE_NODES = true;
6260
63 NPC();
61 NPC(const Entity& e);
6462 ~NPC();
6563 void load(const std::string& npc_id);
6664 void logic();
6967 void getDialogResponses(std::vector<int>& result, size_t node_id, size_t event_cursor);
7068 std::string getDialogTopic(unsigned int dialog_node);
7169 bool checkMovement(unsigned int dialog_node);
70 void moveMapEvents();
7271 bool checkVendor();
7372 bool processDialog(unsigned int dialog_node, unsigned int& event_cursor);
7473 void processEvent(unsigned int dialog_node, unsigned int cursor);
75 virtual Renderable getRender();
7674
7775 // general info
7876 std::string name;
7977 std::string filename;
80 FPoint pos; // map position
8178
8279 int direction;
80 bool show_on_minimap;
8381
8482 // talker info
8583 Sprite* npc_portrait;
2424 */
2525
2626 #include "Animation.h"
27 #include "Avatar.h"
2728 #include "CampaignManager.h"
29 #include "EntityManager.h"
30 #include "EngineSettings.h"
2831 #include "EventManager.h"
2932 #include "ItemManager.h"
3033 #include "MapRenderer.h"
5356 Map_NPC mn;
5457 ItemStack item_roll;
5558
59 std::map<std::string, NPC *> allies;
60
5661 // remove existing NPCs
57 for (unsigned i=0; i<npcs.size(); i++)
58 delete(npcs[i]);
62 for (unsigned i=0; i<npcs.size(); i++) {
63 if (npcs[i]->stats.hero_ally) {
64 allies[npcs[i]->filename] = npcs[i];
65 }
66 else {
67 delete(npcs[i]);
68 }
69 }
5970
6071 npcs.clear();
6172
7788 if(!status_reqs_met)
7889 continue;
7990
80 NPC *npc = new NPC();
91 // ally npc that was moved from another map should not be loaded once again
92 if (allies.find(mn.id) != allies.end()) {
93 continue;
94 }
95
96 NPC *npc = new NPC(*entitym->getEntityPrototype(mn.id));
97
8198 npc->load(mn.id);
82 npc->pos.x = mn.pos.x;
83 npc->pos.y = mn.pos.y;
99
100 npc->stats.pos.x = mn.pos.x;
101 npc->stats.pos.y = mn.pos.y;
102 npc->stats.hero_ally = false;
84103
85104 // npc->stock.sort();
86105 npcs.push_back(npc);
87
88 mapr->collider.block(npc->pos.x, npc->pos.y, !MapCollision::IS_ALLY);
89
90 // create a map event for this npc
91 Event ev;
92 EventComponent ec;
93
94 // the event hotspot is a 1x1 tile at the npc's feet
95 ev.activate_type = Event::ACTIVATE_ON_TRIGGER;
96 ev.keep_after_trigger = true;
97 Rect location;
98 location.x = static_cast<int>(npc->pos.x);
99 location.y = static_cast<int>(npc->pos.y);
100 location.w = location.h = 1;
101 ev.location = ev.hotspot = location;
102 ev.center.x = static_cast<float>(ev.hotspot.x) + static_cast<float>(ev.hotspot.w)/2;
103 ev.center.y = static_cast<float>(ev.hotspot.y) + static_cast<float>(ev.hotspot.h)/2;
104
105 ec.type = EventComponent::NPC_ID;
106 ec.x = static_cast<int>(npcs.size())-1;
107 ev.components.push_back(ec);
108
109 ec.type = EventComponent::TOOLTIP;
110 ec.s = npc->name;
111 ev.components.push_back(ec);
112
113 // The hitbox for hovering/clicking on an npc is based on their first frame of animation
114 // This might cause some undesired behavior for npcs that have packed animations and a lot of variation
115 // However, it is sufficient for all of our current game data (fantasycore, no-name mod, polymorphable)
116 Renderable ren = npc->activeAnimation->getCurrentFrame(npc->direction);
106 createMapEvent(*npc, npcs.size());
107 }
108
109 FPoint spawn_pos = mapr->collider.getRandomNeighbor(Point(pc->stats.pos), 1, !MapCollision::IGNORE_BLOCKED);
110 while (!allies.empty()) {
111 NPC *npc = allies.begin()->second;
112 allies.erase(allies.begin());
113
114 npc->stats.pos = spawn_pos;
115 npc->stats.direction = pc->stats.direction;
116
117 npcs.push_back(npc);
118 createMapEvent(*npc, npcs.size());
119
120 mapr->collider.block(npc->stats.pos.x, npc->stats.pos.y, !MapCollision::IS_ALLY);
121 }
122
123 }
124
125 void NPCManager::createMapEvent(const NPC& npc, size_t _npcs) {
126 // create a map event for provided npc
127 Event ev;
128 EventComponent ec;
129
130 // the event hotspot is a 1x1 tile at the npc's feet
131 ev.activate_type = Event::ACTIVATE_ON_INTERACT;
132 ev.keep_after_trigger = true;
133 Rect location;
134 location.x = static_cast<int>(npc.stats.pos.x);
135 location.y = static_cast<int>(npc.stats.pos.y);
136 location.w = location.h = 1;
137 ev.location = ev.hotspot = location;
138 ev.center.x = static_cast<float>(ev.hotspot.x) + static_cast<float>(ev.hotspot.w)/2;
139 ev.center.y = static_cast<float>(ev.hotspot.y) + static_cast<float>(ev.hotspot.h)/2;
140
141 ec.type = EventComponent::NPC_ID;
142 ec.x = static_cast<int>(_npcs)-1;
143 ev.components.push_back(ec);
144
145 ec.type = EventComponent::TOOLTIP;
146 ec.s = npc.name;
147 ev.components.push_back(ec);
148
149 // The hitbox for hovering/clicking on an npc is based on their first frame of animation
150 // This might cause some undesired behavior for npcs that have packed animations and a lot of variation
151 // However, it is sufficient for all of our current game data (fantasycore, no-name mod, polymorphable)
152 if (npc.activeAnimation) {
153 Renderable ren = npc.activeAnimation->getCurrentFrame(npc.direction);
117154 ec.type = EventComponent::NPC_HOTSPOT;
118 ec.x = static_cast<int>(npc->pos.x);
119 ec.y = static_cast<int>(npc->pos.y);
155 ec.x = static_cast<int>(npc.stats.pos.x);
156 ec.y = static_cast<int>(npc.stats.pos.y);
120157 ec.z = ren.offset.x;
121158 ec.a = ren.offset.y;
122159 ec.b = ren.src.w;
123160 ec.c = ren.src.h;
124161 ev.components.push_back(ec);
125
126 mapr->events.push_back(ev);
127 }
128
162 ev.type = npc.filename;
163 }
164 else {
165 Utils::logError("NPCManager: Unable to set click hotspot for '%s' due to lack of animation.", npc.filename.c_str());
166 }
167
168 mapr->events.push_back(ev);
129169 }
130170
131171 void NPCManager::logic() {
140180 }
141181
142182 // could not find NPC, try loading it here
143 NPC *n = new NPC();
183 NPC *n = new NPC(*entitym->getEntityPrototype(npcName));
144184 if (n) {
145185 n->load(npcName);
146186 npcs.push_back(n);
150190 return -1;
151191 }
152192
193 Entity* NPCManager::npcFocus(const Point& mouse, const FPoint& cam, bool alive_only) {
194 Point p;
195 Rect r;
196 for(unsigned int i = 0; i < npcs.size(); i++) {
197 if(alive_only && (npcs[i]->stats.cur_state == StatBlock::ENTITY_DEAD || npcs[i]->stats.cur_state == StatBlock::ENTITY_CRITDEAD)) {
198 continue;
199 }
200 if (!npcs[i]->stats.hero_ally) {
201 continue;
202 }
203
204 p = Utils::mapToScreen(npcs[i]->stats.pos.x, npcs[i]->stats.pos.y, cam.x, cam.y);
205
206 Renderable ren = npcs[i]->getRender();
207 r.w = ren.src.w;
208 r.h = ren.src.h;
209 r.x = p.x - ren.offset.x;
210 r.y = p.y - ren.offset.y;
211
212 if (Utils::isWithinRect(r, mouse)) {
213 return npcs[i];
214 }
215 }
216 return NULL;
217 }
218
219 Entity* NPCManager::getNearestNPC(const FPoint& pos, bool get_corpse) {
220 Entity* nearest = NULL;
221 float best_distance = std::numeric_limits<float>::max();
222
223 for (unsigned i=0; i<npcs.size(); i++) {
224 if(!get_corpse && (npcs[i]->stats.cur_state == StatBlock::ENTITY_DEAD || npcs[i]->stats.cur_state == StatBlock::ENTITY_CRITDEAD)) {
225 continue;
226 }
227 if (get_corpse && !npcs[i]->stats.corpse) {
228 continue;
229 }
230 if (!npcs[i]->stats.hero_ally) {
231 continue;
232 }
233
234 float distance = Utils::calcDist(pos, npcs[i]->stats.pos);
235 if (distance < best_distance) {
236 best_distance = distance;
237 nearest = npcs[i];
238 }
239 }
240
241 if (best_distance > eset->misc.interact_range)
242 nearest = NULL;
243
244 return nearest;
245 }
246
153247 NPCManager::~NPCManager() {
154248 for (unsigned i=0; i<npcs.size(); i++) {
155249 delete npcs[i];
3131 class StatBlock;
3232 class NPC;
3333 class WidgetTooltip;
34 class Entity;
3435
3536 class NPCManager {
3637 private:
4445
4546 std::vector<NPC*> npcs;
4647 void handleNewMap();
48 void createMapEvent(const NPC& npc, size_t _npcs);
4749 void logic();
4850 void addRenders(std::vector<Renderable> &r);
4951 int getID(const std::string& npcName);
52 Entity* npcFocus(const Point& mouse, const FPoint& cam, bool alive_only);
53 Entity* getNearestNPC(const FPoint& pos, bool get_corpse = false);
5054 };
5155
5256 #endif
2727 CONFIG_MENU_TYPE_DESKTOP_NO_VIDEO = 2
2828 };
2929
30 class Video {
31 public:
32 static const int COUNT = 9;
33 enum {
34 RENDERER,
35 FULLSCREEN,
36 HWSURFACE,
37 VSYNC,
38 TEXTURE_FILTER,
39 DPI_SCALING,
40 PARALLAX_LAYERS,
41 ENABLE_GAMMA,
42 GAMMA
43 };
44 };
45
46 class Audio {
47 public:
48 static const int COUNT = 2;
49 enum {
50 SFX,
51 MUSIC
52 };
53 };
54
55 class Interface {
56 public:
57 static const int COUNT = 16;
58 enum {
59 LANGUAGE,
60 SUBTITLES,
61 COLORBLIND,
62 MINIMAP_MODE,
63 LOOT_TOOLTIPS,
64 AUTO_EQUIP,
65 ITEM_COMPARE_TIPS,
66 LOW_HP_WARNING_TYPE,
67 LOW_HP_THRESHOLD,
68 COMBAT_TEXT,
69 STATBAR_LABELS,
70 STATBAR_AUTOHIDE,
71 HARDWARE_CURSOR,
72 ENTITY_MARKERS,
73 SHOW_FPS,
74 DEV_MODE
75 };
76 };
77
78 class Input {
79 public:
80 static const int COUNT = 7;
81 enum {
82 MOUSE_MOVE,
83 MOUSE_MOVE_SWAP,
84 MOUSE_MOVE_ATTACK,
85 MOUSE_AIM,
86 NO_MOUSE,
87 JOYSTICK,
88 JOYSTICK_DEADZONE
89 };
90 };
91
92 class Misc {
93 public:
94 static const int COUNT = 2;
95 enum {
96 KEYBINDS,
97 MODS
98 };
99 };
100
30101 Platform();
31102 ~Platform();
32103
47118 bool has_lock_file;
48119 unsigned char config_menu_type;
49120 std::string default_renderer;
121
122 std::vector<bool> config_video;
123 std::vector<bool> config_audio;
124 std::vector<bool> config_interface;
125 std::vector<bool> config_input;
126 std::vector<bool> config_misc;
50127 };
51128
52129 extern Platform platform;
7777 , force_hardware_cursor(true)
7878 , has_lock_file(false)
7979 , config_menu_type(CONFIG_MENU_TYPE_BASE)
80 , default_renderer("sdl_hardware") {
80 , default_renderer("")
81 , config_video(Platform::Video::COUNT, true)
82 , config_audio(Platform::Audio::COUNT, true)
83 , config_interface(Platform::Interface::COUNT, true)
84 , config_input(Platform::Input::COUNT, true)
85 , config_misc(Platform::Misc::COUNT, true)
86 {
87 config_video[Platform::Video::RENDERER] = true;
88 config_video[Platform::Video::FULLSCREEN] = false;
89 config_video[Platform::Video::HWSURFACE] = false;
90 config_video[Platform::Video::VSYNC] = false;
91 config_video[Platform::Video::TEXTURE_FILTER] = false;
92 config_video[Platform::Video::ENABLE_GAMMA] = false;
93 config_video[Platform::Video::GAMMA] = false;
94
95 config_interface[Platform::Interface::HARDWARE_CURSOR] = false;
96
97 config_input[Platform::Input::JOYSTICK] = false;
98 config_input[Platform::Input::MOUSE_MOVE] = false;
99 config_input[Platform::Input::MOUSE_AIM] = false;
100 config_input[Platform::Input::NO_MOUSE] = false;
101 config_input[Platform::Input::MOUSE_MOVE_SWAP] = false;
102 config_input[Platform::Input::MOUSE_MOVE_ATTACK] = false;
103 config_input[Platform::Input::JOYSTICK_DEADZONE] = false;
104
105 config_misc[Platform::Misc::KEYBINDS] = false;
81106 }
82107
83108 Platform::~Platform() {
133158 }
134159
135160 if (settings->path_data.empty()) {
136 Utils::logError("Settings: Android external storage unavailable: %s", SDL_GetError());
161 Utils::logError("Platform: Android external storage unavailable: %s", SDL_GetError());
137162 }
138163
139164 if (settings->path_user.empty() || !Filesystem::pathExists(settings->path_user)) {
155180 settings->path_conf += "/";
156181 settings->path_user += "/";
157182 settings->path_data += "/";
183
184 // create a .nomedia file to prevent game data being added to the Android media library
185 std::ofstream nomedia;
186 nomedia.open(settings->path_user + ".nomedia", std::ios::out);
187 if (nomedia.bad()) {
188 Utils::logError("Platform: Unable to create Android .nomedia file.");
189 }
190 nomedia.close();
191 nomedia.clear();
158192 }
159193
160194 void Platform::setExitEventFilter() {
4242 , force_hardware_cursor(false)
4343 , has_lock_file(false)
4444 , config_menu_type(CONFIG_MENU_TYPE_DESKTOP_NO_VIDEO)
45 , default_renderer("sdl_hardware") {
45 , default_renderer("sdl_hardware")
46 , config_video(Platform::Video::COUNT, true)
47 , config_audio(Platform::Audio::COUNT, true)
48 , config_interface(Platform::Interface::COUNT, true)
49 , config_input(Platform::Input::COUNT, true)
50 , config_misc(Platform::Misc::COUNT, true)
51 {
52 config_video[Platform::Video::RENDERER] = false;
53 config_video[Platform::Video::FULLSCREEN] = false;
54 config_video[Platform::Video::HWSURFACE] = false;
55 config_video[Platform::Video::VSYNC] = false;
56 config_video[Platform::Video::TEXTURE_FILTER] = false;
57 config_video[Platform::Video::DPI_SCALING] = false;
58 config_video[Platform::Video::ENABLE_GAMMA] = false;
59 config_video[Platform::Video::GAMMA] = false;
60
61 config_input[Platform::Input::JOYSTICK] = false;
62 config_input[Platform::Input::JOYSTICK_DEADZONE] = false;
63
64 config_misc[Platform::Misc::MODS] = false;
4665 }
4766
4867 Platform::~Platform() {
4040 , force_hardware_cursor(true)
4141 , has_lock_file(true)
4242 , config_menu_type(CONFIG_MENU_TYPE_BASE)
43 , default_renderer("") {
43 , default_renderer("")
44 , config_video(Platform::Video::COUNT, true)
45 , config_audio(Platform::Audio::COUNT, true)
46 , config_interface(Platform::Interface::COUNT, true)
47 , config_input(Platform::Input::COUNT, true)
48 , config_misc(Platform::Misc::COUNT, true)
49 {
50 config_video[Platform::Video::RENDERER] = false;
51 config_video[Platform::Video::FULLSCREEN] = false;
52 config_video[Platform::Video::HWSURFACE] = false;
53 config_video[Platform::Video::VSYNC] = false;
54 config_video[Platform::Video::TEXTURE_FILTER] = false;
55 config_video[Platform::Video::DPI_SCALING] = false;
56 config_video[Platform::Video::ENABLE_GAMMA] = false;
57 config_video[Platform::Video::GAMMA] = false;
58
59 config_interface[Platform::Interface::HARDWARE_CURSOR] = false;
60
61 config_input[Platform::Input::JOYSTICK] = false;
62 config_input[Platform::Input::MOUSE_MOVE] = false;
63 config_input[Platform::Input::MOUSE_AIM] = false;
64 config_input[Platform::Input::NO_MOUSE] = false;
65 config_input[Platform::Input::MOUSE_MOVE_SWAP] = false;
66 config_input[Platform::Input::MOUSE_MOVE_ATTACK] = false;
67 config_input[Platform::Input::JOYSTICK_DEADZONE] = false;
68
69 config_misc[Platform::Misc::KEYBINDS] = false;
4470 }
4571
4672 Platform::~Platform() {
109135 path_data = true;
110136 }
111137 else if (!settings->custom_path_data.empty()) {
112 Utils::logError("Settings: Could not find specified game data directory.");
138 Utils::logError("Platform: Could not find specified game data directory.");
113139 settings->custom_path_data = "";
114140 }
115141
5454 , force_hardware_cursor(true)
5555 , has_lock_file(false)
5656 , config_menu_type(CONFIG_MENU_TYPE_BASE)
57 , default_renderer("sdl_hardware") {
57 , default_renderer("sdl_hardware")
58 , config_video(Platform::Video::COUNT, true)
59 , config_audio(Platform::Audio::COUNT, true)
60 , config_interface(Platform::Interface::COUNT, true)
61 , config_input(Platform::Input::COUNT, true)
62 , config_misc(Platform::Misc::COUNT, true)
63 {
64 config_video[Platform::Video::RENDERER] = false;
65 config_video[Platform::Video::FULLSCREEN] = false;
66 config_video[Platform::Video::HWSURFACE] = false;
67 config_video[Platform::Video::VSYNC] = false;
68 config_video[Platform::Video::TEXTURE_FILTER] = false;
69 config_video[Platform::Video::DPI_SCALING] = false;
70 config_video[Platform::Video::ENABLE_GAMMA] = false;
71 config_video[Platform::Video::GAMMA] = false;
72
73 config_interface[Platform::Interface::HARDWARE_CURSOR] = false;
74
75 config_input[Platform::Input::JOYSTICK] = false;
76 config_input[Platform::Input::MOUSE_MOVE] = false;
77 config_input[Platform::Input::MOUSE_AIM] = false;
78 config_input[Platform::Input::NO_MOUSE] = false;
79 config_input[Platform::Input::MOUSE_MOVE_SWAP] = false;
80 config_input[Platform::Input::MOUSE_MOVE_ATTACK] = false;
81 config_input[Platform::Input::JOYSTICK_DEADZONE] = false;
82
83 config_misc[Platform::Misc::KEYBINDS] = false;
5884 }
5985
6086 Platform::~Platform() {
125151 path_data = true;
126152 }
127153 else if (!settings->custom_path_data.empty()) {
128 Utils::logError("Settings: Could not find specified game data directory.");
154 Utils::logError("Platform: Could not find specified game data directory.");
129155 settings->custom_path_data = "";
130156 }
131157
4040 , force_hardware_cursor(false)
4141 , has_lock_file(true)
4242 , config_menu_type(CONFIG_MENU_TYPE_DESKTOP)
43 , default_renderer("") {
43 , default_renderer("")
44 , config_video(Platform::Video::COUNT, true)
45 , config_audio(Platform::Audio::COUNT, true)
46 , config_interface(Platform::Interface::COUNT, true)
47 , config_input(Platform::Input::COUNT, true)
48 , config_misc(Platform::Misc::COUNT, true)
49 {
4450 }
4551
4652 Platform::~Platform() {
109115 path_data = true;
110116 }
111117 else if (!settings->custom_path_data.empty()) {
112 Utils::logError("Settings: Could not find specified game data directory.");
118 Utils::logError("Platform: Could not find specified game data directory.");
113119 settings->custom_path_data = "";
114120 }
115121
155161 if (!path_data && Filesystem::pathExists(settings->path_data)) path_data = true;
156162
157163 // finally assume the local folder
158 if (!path_data) settings->path_data = "./";
164 if (!path_data) {
165 char abs_path[1024];
166 ssize_t len = readlink("/proc/self/exe", abs_path, 1024);
167 if (len >= 0 && len < 1024) {
168 // remove executable name from abs_path
169 const char BREAK_POINT = '/';
170 const char BREAK_STRING = '\0';
171 for(ssize_t i = len; i >= 0; --i) {
172 if(abs_path[i] == BREAK_POINT) {
173 abs_path[i + 1] = BREAK_STRING;
174 break;
175 }
176 }
177 settings->path_data = std::string(abs_path);
178 }
179 else {
180 // unable to get executable path, so just use the working directory
181 settings->path_data = "./";
182 }
183 }
159184 }
160185
161186 bool Platform::dirCreate(const std::string& path) {
3535 , force_hardware_cursor(false)
3636 , has_lock_file(true)
3737 , config_menu_type(CONFIG_MENU_TYPE_DESKTOP)
38 , default_renderer("") {
38 , default_renderer("")
39 , config_video(Platform::Video::COUNT, true)
40 , config_audio(Platform::Audio::COUNT, true)
41 , config_interface(Platform::Interface::COUNT, true)
42 , config_input(Platform::Input::COUNT, true)
43 , config_misc(Platform::Misc::COUNT, true) {
3944 }
4045
4146 Platform::~Platform() {
6671 settings->path_data = "";
6772 if (Filesystem::pathExists(settings->custom_path_data)) settings->path_data = settings->custom_path_data;
6873 else if (!settings->custom_path_data.empty()) {
69 Utils::logError("Settings: Could not find specified game data directory.");
74 Utils::logError("Platform: Could not find specified game data directory.");
7075 settings->custom_path_data = "";
7176 }
7277
2929 #include "Avatar.h"
3030 #include "CombatText.h"
3131 #include "EffectManager.h"
32 #include "EnemyManager.h"
32 #include "EntityManager.h"
3333 #include "EngineSettings.h"
3434 #include "EventManager.h"
3535 #include "FileParser.h"
8383 , requires_targeting(false)
8484 , requires_spawns(0)
8585 , cooldown(0)
86 , requires_max_hp(-1)
87 , requires_max_mp(-1)
88 , requires_not_max_hp(-1)
89 , requires_not_max_mp(-1)
86 , requires_max_hpmp()
9087 , animation_name("")
9188 , sfx_index(-1)
9289 , sfx_hit(0)
210207 }
211208 else if (infile.key == "type") {
212209 // @ATTR effect.type|string|Defines the type of effect
213 effects.back().type = infile.val;
210 effects.back().type = Effect::getTypeFromString(infile.val);
214211 }
215212 else if (infile.key == "name") {
216213 // @ATTR effect.name|string|A displayed name that is shown when hovering the mouse over the effect icon.
275272
276273 bool clear_post_effects = true;
277274
278 int input_id = 0;
279 bool skippingEntry = false;
275 PowerID input_id = 0;
276 bool id_line = false;
280277
281278 while (infile.next()) {
282279 // id needs to be the first component of each power. That is how we write
283280 // data to the correct power.
284281 if (infile.key == "id") {
285282 // @ATTR power.id|power_id|Uniq identifier for the power definition.
286 input_id = Parse::toInt(infile.val);
287 skippingEntry = input_id < 1;
288 if (skippingEntry)
289 infile.error("PowerManager: Power index out of bounds 1-%d, skipping power.", INT_MAX);
290 if (static_cast<int>(powers.size()) < input_id + 1) {
291 powers.resize(input_id + 1);
292 power_animations.resize(powers.size());
293 }
283 id_line = true;
284 input_id = Parse::toPowerID(infile.val);
285 powers[input_id] = Power();
294286
295287 clear_post_effects = true;
296288 powers[input_id].is_empty = false;
297289
298290 continue;
299291 }
300 if (skippingEntry)
292 else id_line = false;
293
294 if (input_id < 1) {
295 if (id_line) infile.error("PowerManager: Power index out of bounds 1-%d, skipping power.", INT_MAX);
296 }
297 if (id_line)
301298 continue;
302299
303300 if (infile.key == "type") {
402399 else if (infile.key == "requires_item") {
403400 // @ATTR power.requires_item|repeatable(item_id, int) : Item, Quantity|Requires a specific item of a specific quantity in inventory. If quantity > 0, then the item will be removed.
404401 PowerRequiredItem pri;
405 pri.id = Parse::popFirstInt(infile.val);
402 pri.id = Parse::toItemID(Parse::popFirstString(infile.val));
406403 pri.quantity = Parse::toInt(Parse::popFirstString(infile.val), 1);
407404 pri.equipped = false;
408405 powers[input_id].required_items.push_back(pri);
410407 else if (infile.key == "requires_equipped_item") {
411408 // @ATTR power.requires_equipped_item|repeatable(item_id, int) : Item, Quantity|Requires a specific item of a specific quantity to be equipped on hero. If quantity > 0, then the item will be removed.
412409 PowerRequiredItem pri;
413 pri.id = Parse::popFirstInt(infile.val);
410 pri.id = Parse::toItemID(Parse::popFirstString(infile.val));
414411 pri.quantity = Parse::popFirstInt(infile.val);
415412 pri.equipped = true;
416413
432429 // @ATTR power.cooldown|duration|Specify the duration for cooldown of the power in 'ms' or 's'.
433430 powers[input_id].cooldown = Parse::toDuration(infile.val);
434431 else if (infile.key == "requires_hpmp_state") {
435 // @ATTR power.requires_hpmp_state|["hp", "mp"], ["percent", "not_percent", "ignore"], int : Stat, Current state, Percentage value|Power can only be used when HP/MP matches the specified state
436 std::string stat = Parse::popFirstString(infile.val);
437 std::string cur_state = Parse::popFirstString(infile.val);
438 int percent = Parse::popFirstInt(infile.val);
439
440 bool is_req = false;
441 bool invert = false;
442 if (cur_state == "percent") {
443 is_req = true;
444 invert = false;
445 }
446 else if (cur_state == "not_percent") {
447 is_req = true;
448 invert = true;
449 }
450 else if (cur_state == "ignore") {
451 is_req = false;
432 // @ATTR power.requires_hpmp_state|["all", "any"], ["percent", "not_percent", "ignore"], int , ["percent", "not_percent", "ignore"], int: Mode, HP state, HP Percentage value, MP state, MP Percentage value|Power can only be used when HP/MP matches the specified state. In 'all' mode, both HP and MP must meet the requirements, where as only one must in 'any' mode. To check a single stat, use 'all' mode and set the 'ignore' state for the other stat.
433
434 std::string mode = Parse::popFirstString(infile.val);
435 std::string state_hp = Parse::popFirstString(infile.val);
436 std::string state_hp_val = Parse::popFirstString(infile.val);
437 std::string state_mp = Parse::popFirstString(infile.val);
438 std::string state_mp_val = Parse::popFirstString(infile.val);
439
440 powers[input_id].requires_max_hpmp.hp = state_hp_val.empty() ? -1 : Parse::toInt(state_hp_val);
441 powers[input_id].requires_max_hpmp.mp = state_mp_val.empty() ? -1 : Parse::toInt(state_mp_val);
442
443 if (state_hp == "percent") {
444 powers[input_id].requires_max_hpmp.hp_state = Power::HPMPSTATE_PERCENT;
445 }
446 else if (state_hp == "not_percent") {
447 powers[input_id].requires_max_hpmp.hp_state = Power::HPMPSTATE_NOT_PERCENT;
448 }
449 else if (state_hp == "ignore" || state_hp.empty()) {
450 powers[input_id].requires_max_hpmp.hp_state = Power::HPMPSTATE_IGNORE;
451 powers[input_id].requires_max_hpmp.hp = -1;
452452 }
453453 else {
454 is_req = false;
455 infile.error("PowerManager: '%s' is not a valid hp/mp state. Use 'percent', 'not_percent', or 'ignore'.", cur_state.c_str());
456 }
457
458 if (stat == "hp") {
459 powers[input_id].requires_max_hp = (is_req && !invert) ? percent : -1;
460 powers[input_id].requires_not_max_hp = (is_req && invert) ? percent : -1;
461 }
462 else if (stat == "mp") {
463 powers[input_id].requires_max_mp = (is_req && !invert) ? percent : -1;
464 powers[input_id].requires_not_max_mp = (is_req && invert) ? percent : -1;
454 infile.error("PowerManager: '%s' is not a valid hp/mp state. Use 'percent', 'not_percent', or 'ignore'.", state_hp.c_str());
455 }
456
457 if (state_mp == "percent") {
458 powers[input_id].requires_max_hpmp.mp_state = Power::HPMPSTATE_PERCENT;
459 }
460 else if (state_mp == "not_percent") {
461 powers[input_id].requires_max_hpmp.mp_state = Power::HPMPSTATE_NOT_PERCENT;
462 }
463 else if (state_mp == "ignore" || state_mp.empty()) {
464 powers[input_id].requires_max_hpmp.mp_state = Power::HPMPSTATE_IGNORE;
465 powers[input_id].requires_max_hpmp.mp = -1;
465466 }
466467 else {
467 infile.error("PowerManager: Please specify 'hp' or 'mp'.");
468 infile.error("PowerManager: '%s' is not a valid hp/mp state. Use 'percent', 'not_percent', or 'ignore'.", state_mp.c_str());
469 }
470
471 if (mode == "any") {
472 powers[input_id].requires_max_hpmp.mode = Power::HPMPSTATE_ANY;
473 }
474 else if (mode == "all") {
475 powers[input_id].requires_max_hpmp.mode = Power::HPMPSTATE_ALL;
476 }
477 else if (mode == "hp") {
478 // TODO deprecated
479 infile.error("PowerManager: 'hp' has been deprecated. Use 'all' or 'any'.");
480
481 powers[input_id].requires_max_hpmp.mode = Power::HPMPSTATE_ALL;
482 powers[input_id].requires_max_hpmp.mp_state = Power::HPMPSTATE_IGNORE;
483 powers[input_id].requires_max_hpmp.mp = -1;
484 }
485 else if (mode == "mp") {
486 // TODO deprecated
487 infile.error("PowerManager: 'mp' has been deprecated. Use 'any' or 'all'.");
488
489 // use the HP values for MP, then ignore the HP stat
490 powers[input_id].requires_max_hpmp.mode = Power::HPMPSTATE_ALL;
491 powers[input_id].requires_max_hpmp.mp_state = powers[input_id].requires_max_hpmp.hp_state;
492 powers[input_id].requires_max_hpmp.mp = powers[input_id].requires_max_hpmp.hp;
493 powers[input_id].requires_max_hpmp.hp_state = Power::HPMPSTATE_IGNORE;
494 powers[input_id].requires_max_hpmp.hp = -1;
495 }
496 else {
497 infile.error("PowerManager: Please specify 'any' or 'all'.");
468498 }
469499 }
470500 // animation info
685715 }
686716 }
687717 else if (infile.key == "post_power") {
688 // @ATTR power.post_power|power_id, int : Power, Chance to cast|Trigger a power if the hazard did damage.
718 // @ATTR power.post_power|power_id, int : Power, Chance to cast|Trigger a power if the hazard did damage. For 'block' type powers, this power will be triggered when the blocker takes damage.
689719 powers[input_id].post_power = Parse::popFirstInt(infile.val);
690720 std::string chance = Parse::popFirstString(infile.val);
691721 if (!chance.empty()) {
863893 // @ATTR power.target_nearest|float|Will automatically target the nearest enemy within the specified range.
864894 powers[input_id].target_nearest = Parse::toFloat(infile.val);
865895 }
896 else if (infile.key == "disable_equip_slots") {
897 // @ATTR power.disable_equip_slots|list(predefined_string)|Passive powers only. A comma separated list of equip slot types to disable when this power is active.
898 powers[input_id].disable_equip_slots.clear();
899 std::string slot_type = Parse::popFirstString(infile.val);
900
901 while (slot_type != "") {
902 powers[input_id].disable_equip_slots.push_back(slot_type);
903 slot_type = Parse::popFirstString(infile.val);
904 }
905 }
866906
867907 else infile.error("PowerManager: '%s' is not a valid key", infile.key.c_str());
868908 }
869909 infile.close();
870910
871 for (size_t i=0; i<powers.size(); ++i) {
911 std::map<PowerID, Power>::iterator power_it;
912 for (power_it = powers.begin(); power_it != powers.end(); ++power_it) {
913 Power& power = power_it->second;
914
872915 // verify wall/post power ids
873 powers[i].wall_power = verifyID(powers[i].wall_power, NULL, ALLOW_ZERO_ID);
874 powers[i].post_power = verifyID(powers[i].post_power, NULL, ALLOW_ZERO_ID);
916 power.wall_power = verifyID(power.wall_power, NULL, ALLOW_ZERO_ID);
917 power.post_power = verifyID(power.post_power, NULL, ALLOW_ZERO_ID);
875918
876919 // calculate effective combat range
877 setCombatRange(i);
920 {
921 power.combat_range = 0;
922
923 // TODO apparently, missiles and repeaters don't need to have "use_hazard=true"?
924 if (!( (!power.use_hazard && power.type == Power::TYPE_FIXED) || power.no_attack) ) {
925 if (power.type == Power::TYPE_FIXED) {
926 if (power.relative_pos) {
927 power.combat_range += power.charge_speed * static_cast<float>(power.lifespan);
928 }
929 if (power.starting_pos == Power::STARTING_POS_TARGET) {
930 power.combat_range = FLT_MAX - power.radius;
931 }
932 }
933 else if (power.type == Power::TYPE_MISSILE) {
934 power.combat_range += power.speed * static_cast<float>(power.lifespan);
935 }
936 else if (power.type == Power::TYPE_REPEATER) {
937 power.combat_range += power.speed * static_cast<float>(power.count);
938 }
939 else {
940 power.combat_range = 0;
941 }
942
943 power.combat_range += (power.radius / 2.f);
944 }
945 }
878946 }
879947 }
880948
9411009 /**
9421010 * Check if the target is valid (not an empty area or a wall)
9431011 */
944 bool PowerManager::hasValidTarget(int power_index, StatBlock *src_stats, const FPoint& target) {
1012 bool PowerManager::hasValidTarget(PowerID power_index, StatBlock *src_stats, const FPoint& target) {
9451013
9461014 if (!collider) return false;
9471015
9681036 * @param target Aim position in map coordinates
9691037 * @param haz A newly-initialized hazard
9701038 */
971 void PowerManager::initHazard(int power_index, StatBlock *src_stats, const FPoint& target, Hazard *haz) {
1039 void PowerManager::initHazard(PowerID power_index, StatBlock *src_stats, const FPoint& target, Hazard *haz) {
9721040
9731041 //the hazard holds the statblock of its source
9741042 haz->src_stats = src_stats;
10441112 * Any attack-based effects are handled by hazards.
10451113 * Self-enhancements (buffs) are handled by this function.
10461114 */
1047 void PowerManager::buff(int power_index, StatBlock *src_stats, const FPoint& target) {
1115 void PowerManager::buff(PowerID power_index, StatBlock *src_stats, const FPoint& target) {
10481116
10491117 // teleport to the target location
10501118 if (powers[power_index].buff_teleport) {
10951163 * Play the sound effect for this power
10961164 * Equipped items may have unique sounds
10971165 */
1098 void PowerManager::playSound(int power_index) {
1166 void PowerManager::playSound(PowerID power_index) {
10991167 if (powers[power_index].sfx_index != -1)
11001168 snd->play(sfx[powers[power_index].sfx_index], snd->DEFAULT_CHANNEL, snd->NO_POS, !snd->LOOP);
11011169 }
11021170
1103 bool PowerManager::effect(StatBlock *target_stats, StatBlock *caster_stats, int power_index, int source_type) {
1171 bool PowerManager::effect(StatBlock *target_stats, StatBlock *caster_stats, PowerID power_index, int source_type) {
11041172 const Power& pwr = powers[power_index];
11051173 for (unsigned i=0; i<powers[power_index].post_effects.size(); i++) {
11061174 const PostEffect& pe = pwr.post_effects[i];
11151183 int duration = pe.duration;
11161184
11171185 StatBlock *dest_stats = pe.target_src ? caster_stats : target_stats;
1118 if (dest_stats->hp <= 0 && !(effect_data.type == "revive" || (effect_data.type.empty() && pe.id == "revive")))
1186 if (dest_stats->hp <= 0 && !(effect_data.type == Effect::REVIVE || (effect_data.type == Effect::NONE && pe.id == "revive")))
11191187 continue;
11201188
11211189 if (effect_ptr != NULL) {
11221190 // effects loaded from powers/effects.txt
11231191 effect_data = (*effect_ptr);
11241192
1125 if (effect_data.type == "shield") {
1193 if (effect_data.type == Effect::SHIELD) {
11261194 if (pwr.base_damage == eset->damage_types.list.size())
11271195 continue;
11281196
11381206
11391207 comb->addString(msg->get("+%d Shield",magnitude), dest_stats->pos, CombatText::MSG_BUFF);
11401208 }
1141 else if (effect_data.type == "heal") {
1209 else if (effect_data.type == Effect::HEAL) {
11421210 if (pwr.base_damage == eset->damage_types.list.size())
11431211 continue;
11441212
11561224 dest_stats->hp += magnitude;
11571225 if (dest_stats->hp > dest_stats->get(Stats::HP_MAX)) dest_stats->hp = dest_stats->get(Stats::HP_MAX);
11581226 }
1159 else if (effect_data.type == "knockback") {
1227 else if (effect_data.type == Effect::KNOCKBACK) {
11601228 if (dest_stats->speed_default == 0) {
11611229 // enemies that can't move can't be knocked back
11621230 continue;
11671235 }
11681236 else {
11691237 // all other effects
1170 effect_data.id = effect_data.type = pe.id;
1238 effect_data.id = pe.id;
1239 effect_data.type = Effect::getTypeFromString(pe.id);
11711240 }
11721241
11731242 dest_stats->effects.addEffect(effect_data, duration, magnitude, source_type, power_index);
11841253 * @param target The mouse cursor position in map coordinates
11851254 * return boolean true if successful
11861255 */
1187 bool PowerManager::fixed(int power_index, StatBlock *src_stats, const FPoint& target) {
1256 bool PowerManager::fixed(PowerID power_index, StatBlock *src_stats, const FPoint& target) {
11881257
11891258 if (powers[power_index].use_hazard) {
11901259 int delay_iterator = 0;
12201289 * @param target The mouse cursor position in map coordinates
12211290 * return boolean true if successful
12221291 */
1223 bool PowerManager::missile(int power_index, StatBlock *src_stats, const FPoint& target) {
1292 bool PowerManager::missile(PowerID power_index, StatBlock *src_stats, const FPoint& target) {
12241293 FPoint src;
12251294 if (powers[power_index].starting_pos == Power::STARTING_POS_TARGET) {
12261295 src = target;
12751344 /**
12761345 * Repeaters are multiple hazards that spawn in a straight line
12771346 */
1278 bool PowerManager::repeater(int power_index, StatBlock *src_stats, const FPoint& target) {
1347 bool PowerManager::repeater(PowerID power_index, StatBlock *src_stats, const FPoint& target) {
12791348
12801349 payPowerCost(power_index, src_stats);
12811350
13311400 /**
13321401 * Spawn a creature. Does not create a hazard
13331402 */
1334 bool PowerManager::spawn(int power_index, StatBlock *src_stats, const FPoint& target) {
1403 bool PowerManager::spawn(PowerID power_index, StatBlock *src_stats, const FPoint& target) {
13351404 Map_Enemy espawn;
13361405 espawn.type = powers[power_index].spawn_type;
13371406 espawn.summoner = src_stats;
13871456 /**
13881457 * Transform into a creature. Fully replaces entity characteristics
13891458 */
1390 bool PowerManager::transform(int power_index, StatBlock *src_stats, const FPoint& target) {
1459 bool PowerManager::transform(PowerID power_index, StatBlock *src_stats, const FPoint& target) {
13911460 // locking the actionbar prevents power usage until after the hero is transformed
13921461 inpt->lockActionBar();
13931462
14431512 * Stationary blocking with optional buffs/debuffs
14441513 * Only the hero can block
14451514 */
1446 bool PowerManager::block(int power_index, StatBlock *src_stats) {
1515 bool PowerManager::block(PowerID power_index, StatBlock *src_stats) {
14471516 // if the hero is blocking, we can't activate any more blocking powers
14481517 if (src_stats->effects.triggered_block)
14491518 return false;
14641533 return true;
14651534 }
14661535
1536 PowerID PowerManager::checkReplaceByEffect(PowerID power_index, StatBlock *src_stats) {
1537 for (size_t i = 0; i < powers[power_index].replace_by_effect.size(); ++i) {
1538 if (src_stats->effects.hasEffect(powers[power_index].replace_by_effect[i].effect_id, powers[power_index].replace_by_effect[i].count)) {
1539 return powers[power_index].replace_by_effect[i].power_id;
1540 }
1541 }
1542
1543 return power_index;
1544 }
1545
14671546 /**
14681547 * Activate is basically a switch/redirect to the appropriate function
14691548 */
1470 bool PowerManager::activate(int power_index, StatBlock *src_stats, const FPoint& target) {
1471 if (static_cast<unsigned>(power_index) >= powers.size())
1549 bool PowerManager::activate(PowerID power_index, StatBlock *src_stats, const FPoint& target) {
1550 if (powers[power_index].is_empty)
14721551 return false;
1473
1474 for (size_t i = 0; i < powers[power_index].replace_by_effect.size(); ++i) {
1475 if (src_stats->effects.hasEffect(powers[power_index].replace_by_effect[i].effect_id, powers[power_index].replace_by_effect[i].count)) {
1476 return activate(powers[power_index].replace_by_effect[i].power_id, src_stats, target);
1477 }
1478 }
14791552
14801553 if (src_stats->hero) {
14811554 if (powers[power_index].requires_mp > src_stats->mp)
15271600 /**
15281601 * pay costs, i.e. remove mana or items.
15291602 */
1530 void PowerManager::payPowerCost(int power_index, StatBlock *src_stats) {
1603 void PowerManager::payPowerCost(PowerID power_index, StatBlock *src_stats) {
15311604 if (src_stats) {
15321605 if (src_stats->hero) {
15331606 src_stats->mp -= powers[power_index].requires_mp;
15681641 * Activate an entity's passive powers
15691642 */
15701643 void PowerManager::activatePassives(StatBlock *src_stats) {
1644 bool activated_passive = false;
15711645 bool triggered_others = false;
15721646 // unlocked powers
15731647 for (unsigned i=0; i<src_stats->powers_passive.size(); i++) {
1574 activatePassiveByTrigger(src_stats->powers_passive[i], src_stats, triggered_others);
1648 activated_passive |= activatePassiveByTrigger(src_stats->powers_passive[i], src_stats, triggered_others);
15751649 }
15761650
15771651 // item powers
15781652 for (unsigned i=0; i<src_stats->powers_list_items.size(); i++) {
1579 activatePassiveByTrigger(src_stats->powers_list_items[i], src_stats, triggered_others);
1653 activated_passive |= activatePassiveByTrigger(src_stats->powers_list_items[i], src_stats, triggered_others);
15801654 }
15811655
15821656 // Only trigger normal passives once
1583 if (triggered_others) src_stats->effects.triggered_others = true;
1657 if (triggered_others)
1658 src_stats->effects.triggered_others = true;
15841659
15851660 // the hit/death triggers can be triggered more than once, so reset them here
15861661 // the block trigger is handled in the Avatar class
15881663 src_stats->effects.triggered_death = false;
15891664
15901665 activatePassivePostPowers(src_stats);
1591 }
1592
1593 void PowerManager::activatePassiveByTrigger(int power_id, StatBlock *src_stats, bool& triggered_others) {
1666
1667 // passive powers can lock equipment slots, so update equipment here
1668 if (activated_passive && src_stats->hero)
1669 menu->inv->applyEquipment();
1670 }
1671
1672 bool PowerManager::activatePassiveByTrigger(PowerID power_id, StatBlock *src_stats, bool& triggered_others) {
15941673 if (powers[power_id].passive) {
15951674 int trigger = powers[power_id].passive_trigger;
15961675
15971676 if (trigger == -1) {
1598 if (src_stats->effects.triggered_others) return;
1599 else triggered_others = true;
1600 }
1601 else if (trigger == Power::TRIGGER_BLOCK && !src_stats->effects.triggered_block) return;
1602 else if (trigger == Power::TRIGGER_HIT && !src_stats->effects.triggered_hit) return;
1677 if (src_stats->effects.triggered_others)
1678 return false;
1679 else
1680 triggered_others = true;
1681 }
1682 else if (trigger == Power::TRIGGER_BLOCK && !src_stats->effects.triggered_block)
1683 return false;
1684 else if (trigger == Power::TRIGGER_HIT && !src_stats->effects.triggered_hit)
1685 return false;
16031686 else if (trigger == Power::TRIGGER_HALFDEATH && !src_stats->effects.triggered_halfdeath) {
1604 if (src_stats->hp > src_stats->get(Stats::HP_MAX)/2) return;
1605 else src_stats->effects.triggered_halfdeath = true;
1687 if (src_stats->hp > src_stats->get(Stats::HP_MAX)/2)
1688 return false;
1689 else
1690 src_stats->effects.triggered_halfdeath = true;
16061691 }
16071692 else if (trigger == Power::TRIGGER_JOINCOMBAT && !src_stats->effects.triggered_joincombat) {
1608 if (!src_stats->in_combat) return;
1609 else src_stats->effects.triggered_joincombat = true;
1610 }
1611 else if (trigger == Power::TRIGGER_DEATH && !src_stats->effects.triggered_death) return;
1693 if (!src_stats->in_combat)
1694 return false;
1695 else
1696 src_stats->effects.triggered_joincombat = true;
1697 }
1698 else if (trigger == Power::TRIGGER_DEATH && !src_stats->effects.triggered_death) {
1699 return false;
1700 }
16121701
16131702 activate(power_id, src_stats, src_stats->pos);
16141703 src_stats->refresh_stats = true;
16151704
1616 int post_power = powers[power_id].post_power;
1705 PowerID post_power = powers[power_id].post_power;
16171706 if (post_power > 0) {
16181707 src_stats->setPowerCooldown(post_power, powers[post_power].cooldown);
16191708 }
1620 }
1709
1710 return true;
1711 }
1712 return false;
16211713 }
16221714
16231715 /**
16241716 * Activate a single passive
16251717 * this is used when unlocking powers in MenuPowers
16261718 */
1627 void PowerManager::activateSinglePassive(StatBlock *src_stats, int id) {
1719 void PowerManager::activateSinglePassive(StatBlock *src_stats, PowerID id) {
16281720 if (!powers[id].passive) return;
16291721
16301722 if (powers[id].passive_trigger == -1) {
16321724 src_stats->refresh_stats = true;
16331725 src_stats->effects.triggered_others = true;
16341726
1635 int post_power = powers[id].post_power;
1727 PowerID post_power = powers[id].post_power;
16361728 if (post_power > 0) {
16371729 src_stats->setPowerCooldown(post_power, powers[post_power].cooldown);
16381730 }
16441736 */
16451737 void PowerManager::activatePassivePostPowers(StatBlock *src_stats) {
16461738 for (size_t i = 0; i < src_stats->powers_passive.size(); ++i) {
1647 const int post_power = powers[src_stats->powers_passive[i]].post_power;
1739 const PowerID post_power = powers[src_stats->powers_passive[i]].post_power;
16481740 if (post_power <= 0)
16491741 continue;
16501742
16511743 if (powers[post_power].new_state != Power::STATE_INSTANT)
1744 continue;
1745
1746 // blocking powers use a passive trigger, but we only want to activate their post_power when the blocker takes a hit
1747 if (powers[src_stats->powers_passive[i]].type == Power::TYPE_BLOCK)
16521748 continue;
16531749
16541750 if (src_stats->getPowerCooldown(post_power) == 0 && src_stats->canUsePower(post_power, !StatBlock::CAN_USE_PASSIVE)) {
16691765 return NULL;
16701766 }
16711767
1672 int PowerManager::verifyID(int power_id, FileParser* infile, bool allow_zero) {
1673 bool lower_bound = (allow_zero && power_id < 0) || (!allow_zero && power_id < 1);
1674 if (lower_bound || static_cast<unsigned>(power_id) >= powers.size()) {
1768 PowerID PowerManager::verifyID(PowerID power_id, FileParser* infile, bool allow_zero) {
1769 bool is_valid = (allow_zero || (!allow_zero && power_id > 0));
1770 if (!is_valid) {
16751771 if (infile != NULL)
16761772 infile->error("PowerManager: %d is not a valid power id.", power_id);
16771773 else
17091805 if (!items->requirementsMet(src_stats, pow.required_items[i].id)) {
17101806 return false;
17111807 }
1712 if (!menu->inv->inventory[MenuInventory::CARRIED].contain(pow.required_items[i].id, pow.required_items[i].quantity)) {
1808
1809 // Cap the lower bound of quantity to 1.
1810 // We can set required quantity to 0 in order to not consume the item,
1811 // but checking for presence of the item requires >0 quantity
1812 int quantity = std::max(1, pow.required_items[i].quantity);
1813 if (!menu->inv->inventory[MenuInventory::CARRIED].contain(pow.required_items[i].id, quantity)) {
17131814 return false;
17141815 }
17151816 }
17191820 return true;
17201821 }
17211822
1722 void PowerManager::setCombatRange(size_t power_index) {
1723 Power& pow = powers[power_index];
1724
1725 pow.combat_range = 0;
1726
1727 // TODO apparently, missiles and repeaters don't need to have "use_hazard=true"?
1728 if ((!pow.use_hazard && pow.type == Power::TYPE_FIXED) || pow.no_attack) {
1729 return;
1730 }
1731
1732 if (pow.type == Power::TYPE_FIXED) {
1733 if (pow.relative_pos) {
1734 pow.combat_range += pow.charge_speed * static_cast<float>(pow.lifespan);
1735 }
1736 if (pow.starting_pos == Power::STARTING_POS_TARGET) {
1737 pow.combat_range = FLT_MAX - pow.radius;
1738 }
1739 }
1740 else if (pow.type == Power::TYPE_MISSILE) {
1741 pow.combat_range += pow.speed * static_cast<float>(pow.lifespan);
1742 }
1743 else if (pow.type == Power::TYPE_REPEATER) {
1744 pow.combat_range += pow.speed * static_cast<float>(pow.count);
1745 }
1746 else {
1747 pow.combat_range = 0;
1748 }
1749
1750 pow.combat_range += (pow.radius / 2.f);
1751 }
1752
1753 bool PowerManager::checkCombatRange(int power_index, StatBlock* src_stats, FPoint target) {
1823 bool PowerManager::checkRequiredMaxHPMP(const Power &pow, const StatBlock *src_stats) {
1824 bool hp_ok = true;
1825 bool mp_ok = true;
1826
1827 if (pow.requires_max_hpmp.hp_state == Power::HPMPSTATE_PERCENT && src_stats->hp < (src_stats->get(Stats::HP_MAX) * pow.requires_max_hpmp.hp) / 100)
1828 hp_ok = false;
1829 else if (pow.requires_max_hpmp.hp_state == Power::HPMPSTATE_NOT_PERCENT && src_stats->hp >= (src_stats->get(Stats::HP_MAX) * pow.requires_max_hpmp.hp) / 100)
1830 hp_ok = false;
1831
1832 if (pow.requires_max_hpmp.mp_state == Power::HPMPSTATE_PERCENT && src_stats->mp < (src_stats->get(Stats::MP_MAX) * pow.requires_max_hpmp.mp) / 100)
1833 mp_ok = false;
1834 else if (pow.requires_max_hpmp.mp_state == Power::HPMPSTATE_NOT_PERCENT && src_stats->mp >= (src_stats->get(Stats::MP_MAX) * pow.requires_max_hpmp.mp) / 100)
1835 mp_ok = false;
1836
1837 if (pow.requires_max_hpmp.mode == Power::HPMPSTATE_ALL)
1838 return hp_ok && mp_ok;
1839 else if (pow.requires_max_hpmp.mode == Power::HPMPSTATE_ANY)
1840 return hp_ok || mp_ok;
1841 else
1842 return true;
1843 }
1844
1845 bool PowerManager::checkCombatRange(PowerID power_index, StatBlock* src_stats, FPoint target) {
17541846 Power& pow = powers[power_index];
17551847
17561848 if (pow.combat_range == 0)
17711863 }
17721864
17731865 PowerManager::~PowerManager() {
1774 for (size_t i = 0; i < powers.size(); ++i) {
1775 if (powers[i].animation_name.empty())
1866 std::map<PowerID, Power>::iterator power_it;
1867 for (power_it = powers.begin(); power_it != powers.end(); ++power_it) {
1868 if (power_it->second.animation_name.empty())
17761869 continue;
17771870
1778 anim->decreaseCount(powers[i].animation_name);
1779
1780 if (power_animations[i])
1781 delete power_animations[i];
1871 anim->decreaseCount(power_it->second.animation_name);
1872
1873 if (power_animations[power_it->first])
1874 delete power_animations[power_it->first];
17821875 }
17831876
17841877 for (size_t i = 0; i < effects.size(); ++i) {
6262
6363 class PowerRequiredItem {
6464 public:
65 int id;
65 ItemID id;
6666 int quantity;
6767 bool equipped;
6868
7575
7676 class Power {
7777 public:
78 enum {
79 HPMPSTATE_ANY = 0,
80 HPMPSTATE_ALL = 1
81 };
82 enum {
83 HPMPSTATE_IGNORE = 0,
84 HPMPSTATE_PERCENT = 1,
85 HPMPSTATE_NOT_PERCENT = 2
86 };
87 class HPMPState {
88 public:
89 int mode;
90 int hp_state;
91 int mp_state;
92 int hp;
93 int mp;
94 HPMPState()
95 : mode(HPMPSTATE_ANY)
96 , hp_state(HPMPSTATE_IGNORE)
97 , mp_state(HPMPSTATE_IGNORE)
98 , hp(-1)
99 , mp(-1)
100 {}
101 ~HPMPState() {}
102 };
103
78104 enum {
79105 TYPE_FIXED = 0,
80106 TYPE_MISSILE = 1,
168194 bool requires_targeting; // power only makes sense when using click-to-target
169195 int requires_spawns;
170196 int cooldown; // milliseconds before you can use the power again
171 int requires_max_hp;
172 int requires_max_mp;
173 int requires_not_max_hp;
174 int requires_not_max_mp;
197 HPMPState requires_max_hpmp;
175198
176199 // animation info
177200 std::string animation_name;
244267 bool buff;
245268 bool buff_teleport;
246269 bool buff_party;
247 int buff_party_power_id;
270 PowerID buff_party_power_id;
248271
249272 std::vector<PostEffect> post_effects;
250273
251 int pre_power;
274 PowerID pre_power;
252275 int pre_power_chance;
253 int post_power;
276 PowerID post_power;
254277 int post_power_chance;
255 int wall_power;
278 PowerID wall_power;
256279 int wall_power_chance;
257280 bool wall_reflect;
258281
288311
289312 float target_nearest;
290313
314 std::vector<std::string> disable_equip_slots;
315
291316 Power();
292317 ~Power() {
293318 }
304329 bool isValidEffect(const std::string& type);
305330 int loadSFX(const std::string& filename);
306331
307 void initHazard(int powernum, StatBlock *src_stats, const FPoint& target, Hazard *haz);
308 void buff(int power_index, StatBlock *src_stats, const FPoint& target);
309 void playSound(int power_index);
310
311 bool fixed(int powernum, StatBlock *src_stats, const FPoint& target);
312 bool missile(int powernum, StatBlock *src_stats, const FPoint& target);
313 bool repeater(int powernum, StatBlock *src_stats, const FPoint& target);
314 bool spawn(int powernum, StatBlock *src_stats, const FPoint& target);
315 bool transform(int powernum, StatBlock *src_stats, const FPoint& target);
316 bool block(int power_index, StatBlock *src_stats);
317
318 void payPowerCost(int power_index, StatBlock *src_stats);
319
320 void activatePassiveByTrigger(int power_id, StatBlock *src_stats, bool& triggered_others);
332 void initHazard(PowerID power_index, StatBlock *src_stats, const FPoint& target, Hazard *haz);
333 void buff(PowerID power_index, StatBlock *src_stats, const FPoint& target);
334 void playSound(PowerID power_index);
335
336 bool fixed(PowerID power_index, StatBlock *src_stats, const FPoint& target);
337 bool missile(PowerID power_index, StatBlock *src_stats, const FPoint& target);
338 bool repeater(PowerID power_index, StatBlock *src_stats, const FPoint& target);
339 bool spawn(PowerID power_index, StatBlock *src_stats, const FPoint& target);
340 bool transform(PowerID power_index, StatBlock *src_stats, const FPoint& target);
341 bool block(PowerID power_index, StatBlock *src_stats);
342
343 void payPowerCost(PowerID power_index, StatBlock *src_stats);
344
345 bool activatePassiveByTrigger(PowerID power_id, StatBlock *src_stats, bool& triggered_others);
321346 void activatePassivePostPowers(StatBlock *src_stats);
322347
323 void setCombatRange(size_t power_index);
324
325 std::vector<Animation*> power_animations;
348 std::map<PowerID, Animation*> power_animations;
326349 std::vector<Animation*> effect_animations;
327350
328351 public:
332355 ~PowerManager();
333356
334357 void handleNewMap(MapCollision *_collider);
335 bool activate(int power_index, StatBlock *src_stats, const FPoint& target);
336 bool canUsePower(unsigned id) const;
337 bool hasValidTarget(int power_index, StatBlock *src_stats, const FPoint& target);
338 bool effect(StatBlock *target_stats, StatBlock *caster_stats, int power_index, int source_type);
358 bool activate(PowerID power_index, StatBlock *src_stats, const FPoint& target);
359 bool canUsePower(PowerID id) const;
360 bool hasValidTarget(PowerID power_index, StatBlock *src_stats, const FPoint& target);
361 bool effect(StatBlock *target_stats, StatBlock *caster_stats, PowerID power_index, int source_type);
339362 void activatePassives(StatBlock *src_stats);
340 void activateSinglePassive(StatBlock *src_stats, int id);
341 int verifyID(int power_id, FileParser* infile, bool allow_zero);
363 void activateSinglePassive(StatBlock *src_stats, PowerID id);
364 PowerID verifyID(PowerID power_id, FileParser* infile, bool allow_zero);
342365 bool checkNearestTargeting(const Power &pow, const StatBlock *src_stats, bool check_corpses);
343366 bool checkRequiredItems(const Power &pow, const StatBlock *src_stats);
344 bool checkCombatRange(int power_index, StatBlock *src_stats, FPoint target);
367 bool checkRequiredMaxHPMP(const Power &pow, const StatBlock *src_stats);
368 bool checkCombatRange(PowerID power_index, StatBlock *src_stats, FPoint target);
369 PowerID checkReplaceByEffect(PowerID power_index, StatBlock *src_stats);
345370
346371 EffectDef* getEffectDef(const std::string& id);
347372
348373 std::vector<EffectDef> effects;
349 std::vector<Power> powers;
374 std::map<PowerID, Power> powers;
350375 std::queue<Hazard *> hazards; // output; read by HazardManager
351376 std::queue<Map_Enemy> map_enemies; // output; read by PowerManager
352377
353378 // shared sounds for power special effects
354379 std::vector<SoundID> sfx;
355380
356 std::vector<int> used_items;
357 std::vector<int> used_equipped_items;
381 std::vector<ItemID> used_items;
382 std::vector<ItemID> used_equipped_items;
358383 };
359384
360385 #endif
1919 #include "RenderDevice.h"
2020 #include "Settings.h"
2121 #include "SharedResources.h"
22 #include "UtilsMath.h"
2223
2324 #include <assert.h>
24 #include <math.h>
2525 #include <stdio.h>
2626
2727 /*
100100
101101 void Sprite::setClipFromRect(const Rect& clip) {
102102 src = clip;
103
104 // don't exceed the dimensions of the image
105 const int target_w = getGraphicsWidth();
106 const int target_h = getGraphicsHeight();
107 if (src.x + src.w > target_w)
108 src.w = target_w - src.x;
109 if (src.y + src.h > target_h)
110 src.h = target_h - src.y;
103111 }
104112
105113 void Sprite::setClip(const int x, const int y, const int w, const int h) {
106 src.x = x;
107 src.y = y;
108 src.w = w;
109 src.h = h;
114 setClipFromRect(Rect(x, y, w, h));
110115 }
111116
112117 const Rect& Sprite::getClip() {
157162 , texture_filter(false)
158163 , ignore_texture_filter(false)
159164 , min_screen(640, 480)
165 , destructive_fullscreen(false)
160166 , is_initialized(false)
161167 , reload_graphics(false)
162168 , ddpi(0)
173179 int status = createContextInternal();
174180
175181 if (status == -1) {
182 Utils::logError("RenderDevice: createContext() failed, trying previous settings.");
176183 // try previous setting first
177184 settings->fullscreen = fullscreen;
178185 settings->hwsurface = hwsurface;
183190 }
184191
185192 if (status == -1) {
193 Utils::logError("RenderDevice: createContext() failed, disabling all options.");
186194 // last resort, try turning everything off
187195 settings->fullscreen = false;
188196 settings->hwsurface = false;
363371 Utils::logError("RenderDevice: Renderer does not support setting background color!");
364372 }
365373
374 void RenderDevice::setFullscreen(bool enable_fullscreen) {
375 Utils::logInfo("RenderDevice: Trying to set fullscreen=%d, without recreating the rendering context, but setFullscreen() is not implemented for this renderer.", enable_fullscreen);
376 }
377
366378 void RenderDevice::drawEllipse(int x0, int y0, int x1, int y1, const Color& color, float step) {
367379 float rx = static_cast<float>(x1 - x0) / 2.f;
368380 float ry = static_cast<float>(y1 - y0) / 2.f;
112112
113113 virtual void fillWithColor(const Color& color) = 0;
114114 virtual void drawPixel(int x, int y, const Color& color) = 0;
115 virtual void drawLine(int x0, int y0, int x1, int y1, const Color& color) = 0;
115116 virtual void beginPixelBatch();
116117 virtual void endPixelBatch();
117118 virtual Image* resize(int width, int height) = 0;
227228 void drawEllipse(int x0, int y0, int x1, int y1, const Color& color, float step);
228229 virtual void windowResize() = 0;
229230 virtual void setBackgroundColor(Color color);
231 virtual void setFullscreen(bool enable_fullscreen);
230232
231233 bool reloadGraphics();
232234
251253 bool texture_filter;
252254 bool ignore_texture_filter;
253255 Point min_screen;
256 bool destructive_fullscreen;
254257
255258 bool is_initialized;
256259 bool reload_graphics;
3030 #include "Settings.h"
3131 #include "UtilsParsing.h"
3232
33 SDLFontStyle::SDLFontStyle() : FontStyle(), ttfont(NULL) {
34 }
35
36 SDLFontEngine::SDLFontEngine() : FontEngine(), active_font(NULL) {
33 SDLFontStyle::SDLFontStyle()
34 : FontStyle()
35 , ttfont(NULL)
36 {
37 }
38
39 SDLFontEngine::SDLFontEngine()
40 : FontEngine()
41 , active_font(NULL)
42 {
3743 // Initiate SDL_ttf
3844 if(!TTF_WasInit() && TTF_Init()==-1) {
3945 Utils::logError("SDLFontEngine: TTF_Init: %s", TTF_GetError());
94100
95101 // Attempt to set the default active font
96102 setFont("font_regular");
97 if (!active_font) {
103 if (!isActiveFontValid()) {
98104 Utils::logError("FontEngine: Unable to determine default font!");
99105 Utils::logErrorDialog("FontEngine: Unable to determine default font!");
100 mods->resetModConfig();
101 Utils::Exit(1);
102 }
106 }
107 }
108
109 bool SDLFontEngine::isActiveFontValid() {
110 return active_font && active_font->ttfont;
103111 }
104112
105113 int SDLFontEngine::getLineHeight() {
114 if (!isActiveFontValid())
115 return 1;
116
106117 return active_font->line_height;
107118 }
108119
109120 int SDLFontEngine::getFontHeight() {
121 if (!isActiveFontValid())
122 return 1;
123
110124 return active_font->font_height;
111125 }
112126
114128 * For single-line text, just calculate the width
115129 */
116130 int SDLFontEngine::calc_width(const std::string& text) {
131 if (!isActiveFontValid())
132 return 1;
133
117134 int w, h;
118135 TTF_SizeUTF8(active_font->ttfont, text.c_str(), &w, &h);
119136
184201
185202 void SDLFontEngine::setFont(const std::string& _font) {
186203 for (unsigned int i=0; i<font_styles.size(); i++) {
187 if (font_styles[i].name == _font) {
204 if (font_styles[i].ttfont != NULL && font_styles[i].name == _font) {
188205 active_font = &(font_styles[i]);
189206 return;
190207 }
191208 }
209
210 // Unable to find a matching font. Try the first available font style instead
211 for (unsigned int i=0; i<font_styles.size(); i++) {
212 if (font_styles[i].ttfont != NULL) {
213 Utils::logError("FontEngine: Invalid font '%s'. Falling back to '%s'.", _font.c_str(), font_styles[i].name.c_str());
214 active_font = &(font_styles[i]);
215 return;
216 }
217 }
218
219 Utils::logError("FontEngine: Invalid font '%s'. No fallback available.", _font.c_str());
192220 }
193221
194222 /**
196224 * Justify is left, right, or center
197225 */
198226 void SDLFontEngine::renderInternal(const std::string& text, int x, int y, int justify, Image *target, const Color& color) {
199 if (text.empty())
227 if (!isActiveFontValid() || text.empty())
200228 return;
201229
202230 Image *graphics;
3939
4040 class SDLFontEngine : public FontEngine {
4141 private:
42 bool isActiveFontValid();
43
4244 std::vector<SDLFontStyle> font_styles;
4345 SDLFontStyle *active_font;
4446
7777 */
7878 void SDLHardwareImage::drawPixel(int x, int y, const Color& color) {
7979 if (!surface) return;
80
81 if (x < 0 || y < 0 || x >= getWidth() || y >= getHeight())
82 return;
8083
8184 if (pixel_batch_surface) {
8285 // Taken from SDLSoftwareImage::drawPixel()
126129 SDL_SetRenderTarget(renderer, NULL);
127130 }
128131 }
132
133 void SDLHardwareImage::drawLine(int x0, int y0, int x1, int y1, const Color& color) {
134 SDL_SetRenderTarget(renderer, surface);
135 SDL_SetTextureBlendMode(surface, SDL_BLENDMODE_BLEND);
136 SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, color.a);
137 SDL_RenderDrawLine(renderer, x0, y0, x1, y1);
138 SDL_SetRenderTarget(renderer, NULL);
139 }
140
129141
130142 /**
131143 * Creates a non-accelerated SDL_Surface as a pixel buffer
207219 , texture(NULL)
208220 , titlebar_icon(NULL)
209221 , title(NULL)
210 , background_color(0,0,0,0)
222 , background_color(0,0,0,255)
211223 {
212224 Utils::logInfo("Using Render Device: SDLHardwareRenderDevice (hardware, SDL 2, %s)", SDL_GetCurrentVideoDriver());
213225
227239 }
228240
229241 int SDLHardwareRenderDevice::createContextInternal() {
230 bool settings_changed = (fullscreen != settings->fullscreen ||
242 #ifdef _WIN32
243 // We make heavy use of SDL_TEXTUREACCESS_TARGET for things such as text and the minimap
244 // If we use the 'direct3d' backend on Windows, these textures get lost on window resizing events
245 // So to bypass this, we force 'opengl' on Windows
246 SDL_SetHint(SDL_HINT_RENDER_DRIVER, "opengl");
247 #endif
248
249 bool settings_changed = ((fullscreen != settings->fullscreen && destructive_fullscreen) ||
231250 hwsurface != settings->hwsurface ||
232251 vsync != settings->vsync ||
233252 texture_filter != settings->texture_filter ||
469488 }
470489
471490 void SDLHardwareRenderDevice::blankScreen() {
472 SDL_SetRenderDrawColor(renderer, background_color.r, background_color.g, background_color.b, background_color.a);
491 SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
473492 SDL_SetRenderTarget(renderer, NULL);
474493 SDL_RenderClear(renderer);
494 SDL_SetRenderDrawColor(renderer, background_color.r, background_color.g, background_color.b, background_color.a);
475495 SDL_SetRenderTarget(renderer, texture);
476496 SDL_RenderClear(renderer);
477497 return;
623643
624644 void SDLHardwareRenderDevice::setBackgroundColor(Color color) {
625645 background_color = color;
626 }
646 background_color.a = 255; // always 100% alpha
647 }
648
649 void SDLHardwareRenderDevice::setFullscreen(bool enable_fullscreen) {
650 if (!destructive_fullscreen) {
651 if (enable_fullscreen) {
652 SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_DESKTOP);
653 }
654 else {
655 SDL_SetWindowFullscreen(window, 0);
656
657 // restore window to the default size
658 SDL_SetWindowMinimumSize(window, eset->resolutions.min_screen_w, eset->resolutions.min_screen_h);
659 SDL_SetWindowSize(window, eset->resolutions.min_screen_w, eset->resolutions.min_screen_h);
660 windowResize();
661 // setting minimum size might move the window, so set position again
662 SDL_SetWindowPosition(window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED);
663 }
664 windowResize();
665 }
666 }
4545
4646 void fillWithColor(const Color& color);
4747 void drawPixel(int x, int y, const Color& color);
48 void drawLine(int x0, int y0, int x1, int y1, const Color& color);
4849 void beginPixelBatch();
4950 void endPixelBatch();
5051 Image* resize(int width, int height);
7374 void destroyContext();
7475 void windowResize();
7576 void setBackgroundColor(Color color);
77 void setFullscreen(bool enable_fullscreen);
7678 Image *createImage(int width, int height);
7779 void setGamma(float g);
7880 void resetGamma();
153153 binding[Input::ACTIONBAR_USE] = binding_alt[Input::ACTIONBAR_USE] = SDLK_n;
154154
155155 binding[Input::DEVELOPER_MENU] = binding_alt[Input::DEVELOPER_MENU] = SDLK_F5;
156
157 // Convert SDL_Keycode to SDL_Scancode, skip mouse binding
158 for (int key=0; key<KEY_COUNT; key++) {
159 if (SDL_GetScancodeFromKey(binding[key]) > 0) binding[key] = SDL_GetScancodeFromKey(binding[key]);
160 if (SDL_GetScancodeFromKey(binding_alt[key]) > 0) binding_alt[key] = SDL_GetScancodeFromKey(binding_alt[key]);
161 }
162 }
163
164 void SDLInputState::setFixedKeyBindings() {
165 validateFixedKeyBinding(Input::MAIN1, (SDL_BUTTON_LEFT+MOUSE_BIND_OFFSET) * (-1), InputState::BINDING_DEFAULT);
166
167 validateFixedKeyBinding(Input::CTRL, SDLK_LCTRL, InputState::BINDING_DEFAULT);
168 validateFixedKeyBinding(Input::CTRL, SDLK_RCTRL, InputState::BINDING_ALT);
169 binding_joy[Input::CTRL] = -1;
170
171 validateFixedKeyBinding(Input::SHIFT, SDLK_LSHIFT, InputState::BINDING_DEFAULT);
172 validateFixedKeyBinding(Input::SHIFT, SDLK_RSHIFT, InputState::BINDING_ALT);
173 binding_joy[Input::SHIFT] = -1;
174
175 validateFixedKeyBinding(Input::DEL, SDLK_DELETE, InputState::BINDING_DEFAULT);
176 validateFixedKeyBinding(Input::DEL, SDLK_BACKSPACE, InputState::BINDING_ALT);
177 binding_joy[Input::DEL] = -1;
178
179 validateFixedKeyBinding(Input::ALT, SDLK_LALT, InputState::BINDING_DEFAULT);
180 validateFixedKeyBinding(Input::ALT, SDLK_RALT, InputState::BINDING_ALT);
181 binding_joy[Input::ALT] = -1;
182 }
183
184 void SDLInputState::validateFixedKeyBinding(int action, int key, int bindings_list) {
185 if (bindings_list != InputState::BINDING_DEFAULT && bindings_list != InputState::BINDING_ALT)
186 return;
187
188 int scan_key = (key < 0 ? key : SDL_GetScancodeFromKey(key));
189
190 for (int i = 0; i < KEY_COUNT; ++i) {
191 if (i == action) {
192 if (bindings_list == InputState::BINDING_DEFAULT)
193 binding[action] = scan_key;
194 else if (bindings_list == InputState::BINDING_ALT)
195 binding_alt[action] = scan_key;
196
197 continue;
198 }
199
200 if (binding[i] == scan_key)
201 binding[i] = -1;
202
203 if (binding_alt[i] == scan_key)
204 binding_alt[i] = -1;
205 }
156206 }
157207
158208 void SDLInputState::handle() {
304354 last_is_joystick = false;
305355
306356 for (int key=0; key<KEY_COUNT; key++) {
307 if (event.key.keysym.sym == binding[key] || event.key.keysym.sym == binding_alt[key]) {
357 if (event.key.keysym.scancode == binding[key] || event.key.keysym.scancode == binding_alt[key]) {
308358 pressing[key] = true;
309359 un_press[key] = false;
310360 }
318368 last_is_joystick = false;
319369
320370 for (int key=0; key<KEY_COUNT; key++) {
321 if (event.key.keysym.sym == binding[key] || event.key.keysym.sym == binding_alt[key]) {
371 if (event.key.keysym.scancode == binding[key] || event.key.keysym.scancode == binding_alt[key]) {
322372 un_press[key] = true;
323373 }
324374 }
325 last_key = event.key.keysym.sym;
375 last_key = event.key.keysym.scancode;
326376
327377 if (event.key.keysym.sym == SDLK_UP) pressing_up = false;
328378 if (event.key.keysym.sym == SDLK_DOWN) pressing_down = false;
517567 break;
518568 case SDL_QUIT:
519569 done = 1;
570 // Clear inputs when quit is triggered.
571 // Doing this prevents unintended actions being triggered when exiting via an OS keyboard shortcut.
572 // For example, using Win+Esc as a global "close window" command while having CANCEL bound to Esc would cause a crash if it was used on the New Game screen.
573 for (int key=0; key<KEY_COUNT; key++) {
574 pressing[key] = false;
575 un_press[key] = false;
576 lock[key] = false;
577 }
520578 break;
521579 default:
522580 break;
575633 return std::string(SDL_JoystickNameForIndex(index));
576634 }
577635
578 std::string SDLInputState::getKeyName(int key) {
636 std::string SDLInputState::getKeyName(int key, bool get_short_string) {
637 key = SDL_GetKeyFromScancode(static_cast<SDL_Scancode>(key));
638
579639 // first, we try to provide a translation of the key
580 switch (static_cast<SDL_Keycode>(key)) {
581 case SDLK_BACKSPACE: return msg->get("Backspace");
582 case SDLK_CAPSLOCK: return msg->get("CapsLock");
583 case SDLK_DELETE: return msg->get("Delete");
584 case SDLK_DOWN: return msg->get("Down");
585 case SDLK_END: return msg->get("End");
586 case SDLK_ESCAPE: return msg->get("Escape");
587 case SDLK_HOME: return msg->get("Home");
588 case SDLK_INSERT: return msg->get("Insert");
589 case SDLK_LALT: return msg->get("Left Alt");
590 case SDLK_LCTRL: return msg->get("Left Ctrl");
591 case SDLK_LEFT: return msg->get("Left");
592 case SDLK_LSHIFT: return msg->get("Left Shift");
593 case SDLK_NUMLOCKCLEAR: return msg->get("NumLock");
594 case SDLK_PAGEDOWN: return msg->get("PageDown");
595 case SDLK_PAGEUP: return msg->get("PageUp");
596 case SDLK_PAUSE: return msg->get("Pause");
597 case SDLK_PRINTSCREEN: return msg->get("PrintScreen");
598 case SDLK_RALT: return msg->get("Right Alt");
599 case SDLK_RCTRL: return msg->get("Right Ctrl");
600 case SDLK_RETURN: return msg->get("Return");
601 case SDLK_RIGHT: return msg->get("Right");
602 case SDLK_RSHIFT: return msg->get("Right Shift");
603 case SDLK_SCROLLLOCK: return msg->get("ScrollLock");
604 case SDLK_SPACE: return msg->get("Space");
605 case SDLK_TAB: return msg->get("Tab");
606 case SDLK_UP: return msg->get("Up");
640 if (get_short_string) {
641 switch (static_cast<SDL_Keycode>(key)) {
642 case SDLK_BACKSPACE: return msg->get("BkSp");
643 case SDLK_CAPSLOCK: return msg->get("Caps");
644 case SDLK_DELETE: return msg->get("Del");
645 case SDLK_DOWN: return msg->get("Down");
646 case SDLK_END: return msg->get("End");
647 case SDLK_ESCAPE: return msg->get("Esc");
648 case SDLK_HOME: return msg->get("Home");
649 case SDLK_INSERT: return msg->get("Ins");
650 case SDLK_LALT: return msg->get("LAlt");
651 case SDLK_LCTRL: return msg->get("LCtrl");
652 case SDLK_LEFT: return msg->get("Left");
653 case SDLK_LSHIFT: return msg->get("LShft");
654 case SDLK_NUMLOCKCLEAR: return msg->get("Num");
655 case SDLK_PAGEDOWN: return msg->get("PgDn");
656 case SDLK_PAGEUP: return msg->get("PgUp");
657 case SDLK_PAUSE: return msg->get("Pause");
658 case SDLK_PRINTSCREEN: return msg->get("Print");
659 case SDLK_RALT: return msg->get("RAlt");
660 case SDLK_RCTRL: return msg->get("RCtrl");
661 case SDLK_RETURN: return msg->get("Ret");
662 case SDLK_RIGHT: return msg->get("Right");
663 case SDLK_RSHIFT: return msg->get("RShft");
664 case SDLK_SCROLLLOCK: return msg->get("SLock");
665 case SDLK_SPACE: return msg->get("Spc");
666 case SDLK_TAB: return msg->get("Tab");
667 case SDLK_UP: return msg->get("Up");
668 }
669 }
670 else {
671 switch (static_cast<SDL_Keycode>(key)) {
672 case SDLK_BACKSPACE: return msg->get("Backspace");
673 case SDLK_CAPSLOCK: return msg->get("CapsLock");
674 case SDLK_DELETE: return msg->get("Delete");
675 case SDLK_DOWN: return msg->get("Down");
676 case SDLK_END: return msg->get("End");
677 case SDLK_ESCAPE: return msg->get("Escape");
678 case SDLK_HOME: return msg->get("Home");
679 case SDLK_INSERT: return msg->get("Insert");
680 case SDLK_LALT: return msg->get("Left Alt");
681 case SDLK_LCTRL: return msg->get("Left Ctrl");
682 case SDLK_LEFT: return msg->get("Left");
683 case SDLK_LSHIFT: return msg->get("Left Shift");
684 case SDLK_NUMLOCKCLEAR: return msg->get("NumLock");
685 case SDLK_PAGEDOWN: return msg->get("PageDown");
686 case SDLK_PAGEUP: return msg->get("PageUp");
687 case SDLK_PAUSE: return msg->get("Pause");
688 case SDLK_PRINTSCREEN: return msg->get("PrintScreen");
689 case SDLK_RALT: return msg->get("Right Alt");
690 case SDLK_RCTRL: return msg->get("Right Ctrl");
691 case SDLK_RETURN: return msg->get("Return");
692 case SDLK_RIGHT: return msg->get("Right");
693 case SDLK_RSHIFT: return msg->get("Right Shift");
694 case SDLK_SCROLLLOCK: return msg->get("ScrollLock");
695 case SDLK_SPACE: return msg->get("Space");
696 case SDLK_TAB: return msg->get("Tab");
697 case SDLK_UP: return msg->get("Up");
698 }
607699 }
608700
609701 // no translation for this key, so just get the name straight from SDL
610702 return std::string(SDL_GetKeyName(static_cast<SDL_Keycode>(key)));
611703 }
612704
613 std::string SDLInputState::getMouseButtonName(int button) {
705 std::string SDLInputState::getMouseButtonName(int button, bool get_short_string) {
614706 int real_button = (button + MOUSE_BIND_OFFSET) * (-1);
615707
616 if (real_button > 0 && real_button <= MOUSE_BUTTON_NAME_COUNT)
617 return mouse_button[real_button - 1];
618 else
619 return msg->get("Mouse %d", real_button);
620 }
621
622 std::string SDLInputState::getJoystickButtonName(int button) {
708 if (get_short_string) {
709 return msg->get("M%d", real_button);
710 }
711 else {
712 if (real_button > 0 && real_button <= MOUSE_BUTTON_NAME_COUNT)
713 return mouse_button[real_button - 1];
714 else
715 return msg->get("Mouse %d", real_button);
716 }
717 }
718
719 std::string SDLInputState::getJoystickButtonName(int button, bool get_short_string) {
623720 if (button < -1) {
624721 int axis = (button + JOY_AXIS_OFFSET) * (-1);
625722
626 if (axis % 2 == 0)
627 return msg->get("Axis %d -", axis/2);
723 if (axis % 2 == 0) {
724 if (get_short_string)
725 return msg->get("JX%d-", axis/2);
726 else
727 return msg->get("Axis %d -", axis/2);
728 }
729 else {
730 if (get_short_string)
731 return msg->get("JX%d+", axis/2);
732 else
733 return msg->get("Axis %d +", axis/2);
734 }
735 }
736 else {
737 if (get_short_string)
738 return msg->get("JB%d", button);
628739 else
629 return msg->get("Axis %d +", axis/2);
630 }
631 else
632 return msg->get("Button %d", button);
633 }
634
635 std::string SDLInputState::getBindingString(int key, int bindings_list) {
636 std::string none = msg->get("(none)");
740 return msg->get("Button %d", button);
741 }
742 }
743
744 std::string SDLInputState::getBindingString(int key, int bindings_list, bool get_short_string) {
745 std::string none = "";
746 if (!get_short_string)
747 none = msg->get("(none)");
637748
638749 if (bindings_list == InputState::BINDING_DEFAULT) {
639750 if (binding[key] == 0 || binding[key] == -1)
640751 return none;
641752 else if (binding[key] < -1)
642 return getMouseButtonName(binding[key]);
753 return getMouseButtonName(binding[key], get_short_string);
643754 else
644 return getKeyName(binding[key]);
755 return getKeyName(binding[key], get_short_string);
645756 }
646757 else if (bindings_list == InputState::BINDING_ALT) {
647758 if (binding_alt[key] == 0 || binding_alt[key] == -1)
648759 return none;
649760 else if (binding_alt[key] < -1)
650 return getMouseButtonName(binding_alt[key]);
761 return getMouseButtonName(binding_alt[key], get_short_string);
651762 else
652 return getKeyName(binding_alt[key]);
763 return getKeyName(binding_alt[key], get_short_string);
653764 }
654765 else if (bindings_list == InputState::BINDING_JOYSTICK) {
655766 if (binding_joy[key] == -1)
656767 return none;
657768 else
658 return getJoystickButtonName(binding_joy[key]);
769 return getJoystickButtonName(binding_joy[key], get_short_string);
659770 }
660771 else {
661772 return none;
750861
751862 // unbind duplicate bindings for this key
752863 if (key != -1) {
864
865 // prevent unmapping "fixed" keybinds
866 if (bindings_list != InputState::BINDING_JOYSTICK) {
867 if ((key == ((SDL_BUTTON_LEFT+MOUSE_BIND_OFFSET) * (-1)) && binding_button != Input::MAIN1) ||
868 key == SDL_SCANCODE_LCTRL ||
869 key == SDL_SCANCODE_RCTRL ||
870 key == SDL_SCANCODE_LSHIFT ||
871 key == SDL_SCANCODE_RSHIFT ||
872 key == SDL_SCANCODE_LALT ||
873 key == SDL_SCANCODE_RALT ||
874 key == SDL_SCANCODE_DELETE ||
875 key == SDL_SCANCODE_BACKSPACE) {
876
877 if (key < -1)
878 keybind_msg = msg->get("Can not bind: %s", getMouseButtonName(key).c_str());
879 else
880 keybind_msg = msg->get("Can not bind: %s", getKeyName(key).c_str());
881
882 return;
883 }
884 }
885
753886 for (int i = 0; i < KEY_COUNT; ++i) {
754887 // the same key can be bound to both default & alt binding lists for the same action
755888 if (bindings_list != InputState::BINDING_JOYSTICK && i == binding_button)
779912 }
780913
781914 int SDLInputState::getKeyFromName(const std::string& key_name) {
782 return SDL_GetKeyFromName(key_name.c_str());
915 return SDL_GetScancodeFromName(key_name.c_str());
783916 }
784917
785918 SDLInputState::~SDLInputState() {
3333
3434 void initJoystick();
3535 void defaultQwertyKeyBindings();
36 void setFixedKeyBindings();
3637 void handle();
3738 void hideCursor();
3839 void showCursor();
3940 std::string getJoystickName(int index);
40 std::string getKeyName(int key);
41 std::string getMouseButtonName(int button);
42 std::string getJoystickButtonName(int button);
43 std::string getBindingString(int key, int bindings_list = InputState::BINDING_DEFAULT);
41 std::string getKeyName(int key, bool get_short_string = !InputState::GET_SHORT_STRING);
42 std::string getMouseButtonName(int button, bool get_short_string = !InputState::GET_SHORT_STRING);
43 std::string getJoystickButtonName(int button, bool get_short_string = !InputState::GET_SHORT_STRING);
44 std::string getBindingString(int key, int bindings_list = InputState::BINDING_DEFAULT, bool get_short_string = !InputState::GET_SHORT_STRING);
4445 std::string getMovementString();
4546 std::string getAttackString();
4647 std::string getContinueString();
5253
5354 private:
5455 int getKeyFromName(const std::string& key_name);
56 void validateFixedKeyBinding(int action, int key, int bindings_list);
5557
5658 SDL_Joystick* joy;
5759 int joy_num;
7070 */
7171 void SDLSoftwareImage::drawPixel(int x, int y, const Color& color) {
7272 if (!surface) return;
73
74 if (x < 0 || y < 0 || x >= getWidth() || y >= getHeight())
75 return;
7376
7477 Uint32 pixel = MapRGBA(color.r, color.g, color.b, color.a);
7578
110113 }
111114 }
112115
116 void SDLSoftwareImage::drawLine(int x0, int y0, int x1, int y1, const Color& color) {
117 const int dx = abs(x1-x0);
118 const int dy = abs(y1-y0);
119 const int sx = x0 < x1 ? 1 : -1;
120 const int sy = y0 < y1 ? 1 : -1;
121 int err = dx-dy;
122
123 int max_width = getWidth();
124 int max_height = getHeight();
125
126 do {
127 //skip draw if outside screen
128 if (x0 > 0 && y0 > 0 && x0 < max_width && y0 < max_height) {
129 this->drawPixel(x0,y0,color);
130 }
131
132 int e2 = 2*err;
133 if (e2 > -dy) {
134 err = err - dy;
135 x0 = x0 + sx;
136 }
137 if (e2 < dx) {
138 err = err + dx;
139 y0 = y0 + sy;
140 }
141 }
142 while(x0 != x1 || y0 != y1);
143 }
144
145
113146 Uint32 SDLSoftwareImage::MapRGBA(Uint8 r, Uint8 g, Uint8 b, Uint8 a) {
114147 if (!surface) return 0;
115148 return SDL_MapRGBA(surface->format, r, g, b, a);
174207 }
175208
176209 int SDLSoftwareRenderDevice::createContextInternal() {
177 bool settings_changed = (fullscreen != settings->fullscreen ||
210 if (settings->safe_video) {
211 settings->safe_video = false;
212 Utils::logInfo("RenderDevice: Safe mode is enabled. Using minimum video settings.");
213 settings->fullscreen = false;
214 settings->hwsurface = false;
215 settings->vsync = false;
216 settings->texture_filter = false;
217 settings->screen_w = eset->resolutions.min_screen_w;
218 settings->screen_h = eset->resolutions.min_screen_h;
219 }
220
221 bool settings_changed = ((fullscreen != settings->fullscreen && destructive_fullscreen) ||
178222 hwsurface != settings->hwsurface ||
179223 vsync != settings->vsync ||
180224 texture_filter != settings->texture_filter ||
628672 }
629673
630674 void SDLSoftwareRenderDevice::setBackgroundColor(Color color) {
631 background_color = SDL_MapRGBA(screen->format, color.r, color.g, color.b, color.a);
632 }
675 background_color = SDL_MapRGBA(screen->format, color.r, color.g, color.b, 255);
676 }
677
678 void SDLSoftwareRenderDevice::setFullscreen(bool enable_fullscreen) {
679 if (!destructive_fullscreen) {
680 if (enable_fullscreen) {
681 SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_DESKTOP);
682 }
683 else {
684 SDL_SetWindowFullscreen(window, 0);
685
686 // restore window to the default size
687 SDL_SetWindowMinimumSize(window, eset->resolutions.min_screen_w, eset->resolutions.min_screen_h);
688 SDL_SetWindowSize(window, eset->resolutions.min_screen_w, eset->resolutions.min_screen_h);
689 windowResize();
690 // setting minimum size might move the window, so set position again
691 SDL_SetWindowPosition(window, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED);
692 }
693 windowResize();
694 }
695 }
4747
4848 void fillWithColor(const Color& color);
4949 void drawPixel(int x, int y, const Color& color);
50 void drawLine(int x0, int y0, int x1, int y1, const Color& color);
5051 Image* resize(int width, int height);
5152
5253 SDL_Surface *surface;
7374 void destroyContext();
7475 void windowResize();
7576 void setBackgroundColor(Color color);
77 void setFullscreen(bool enable_fullscreen);
7678 Image *createImage(int width, int height);
7779 void setGamma(float g);
7880 void resetGamma();
8282
8383 while(it != playback.end()) {
8484
85 /* if sound is finished add it to cleanup and continue with next */
86 if (it->second.finished) {
85 /* if sound is finished and should be unloaded add it to cleanup and continue with next */
86 if (it->second.finished && it->second.cleanup) {
8787 cleanup.push_back(it->first);
8888 ++it;
8989 continue;
202202
203203
204204
205 void SDLSoundManager::play(SoundID sid, const std::string& channel, const FPoint& pos, bool loop) {
205 void SDLSoundManager::play(SoundID sid, const std::string& channel, const FPoint& pos, bool loop, bool cleanup) {
206206
207207 SoundMapIterator it;
208208 VirtualChannelMapIterator vcit = channels.end();
225225 p.virtual_channel = channel;
226226 p.loop = loop;
227227 p.finished = false;
228 p.cleanup = cleanup;
228229
229230 if (p.virtual_channel != DEFAULT_CHANNEL) {
230231
231 /* if playback exists, stop it befor playin next sound */
232 /* if playback exists, stop it before playin next sound */
232233 vcit = channels.find(p.virtual_channel);
233 if (vcit != channels.end())
234 if (vcit != channels.end()) {
235 // temporarily disable the channel finish callback to avoid setting the 'finished' flag when stopping the channel
236 if (!cleanup)
237 Mix_ChannelFinished(NULL);
238
234239 Mix_HaltChannel(vcit->second);
240 }
235241
236242 vcit = channels.insert(std::pair<std::string, int>(p.virtual_channel, -1)).first;
237243 }
262268 playback.insert(std::pair<int, Playback>(c, p));
263269 }
264270
271 void SDLSoundManager::pauseChannel(const std::string& channel) {
272 VirtualChannelMapIterator vcit = channels.end();
273
274 vcit = channels.find(channel);
275 if (vcit != channels.end()) {
276 Mix_Pause(vcit->second);
277 }
278 }
279
265280 void SDLSoundManager::pauseAll() {
266281 Mix_Pause(-1);
267282 Mix_PauseMusic();
346361 }
347362
348363 int SDLSoundManager::SetChannelPosition(int channel, Sint16 angle, Uint8 distance) {
349 #ifdef __EMSCRIPTEN__
350 // TODO fix for Emscripten
351 return 0;
352 #else
353364 return Mix_SetPosition(channel, angle, distance);
354 #endif
355365 }
356366
357367 SoundID SDLSoundManager::getLastPlayedSID() {
2222 #ifndef SDL_SOUND_MANAGER_H
2323 #define SDL_SOUND_MANAGER_H
2424
25 #ifdef __EMSCRIPTEN__
26 #include <SDL/SDL_mixer.h>
27 #else
2825 #include <SDL_mixer.h>
29 #endif
3026
3127 #include "SoundManager.h"
3228
3733
3834 SoundID load(const std::string& filename, const std::string& errormessage);
3935 void unload(SoundID);
40 void play(SoundID, const std::string& channel, const FPoint& pos, bool loop);
36 void play(SoundID, const std::string& channel, const FPoint& pos, bool loop, bool cleanup = true);
37 void pauseChannel(const std::string& channel);
4138 void pauseAll();
4239 void resumeAll();
4340 void setVolumeSFX(int value);
8585 std::stringstream ss;
8686 ss << settings->path_user << "saves/" << eset->misc.save_prefix << "/" << game_slot << "/avatar.txt";
8787
88 outfile.open(Filesystem::path(&ss).c_str(), std::ios::out);
88 outfile.open(Filesystem::convertSlashes(ss.str()).c_str(), std::ios::out);
8989
9090 if (outfile.is_open()) {
9191
199199 }
200200 }
201201
202 outfile << "questlog_dismissed=" << !menu->act->requires_attention[MenuActionBar::MENU_LOG];
202 outfile << "questlog_dismissed=" << !menu->act->requires_attention[MenuActionBar::MENU_LOG] << "\n";
203
204 outfile << "stash_tab=" << menu->stash->getTab();
203205
204206 outfile << std::endl;
205207
210212 platform.FSCommit();
211213 }
212214
213 // Save stash
214 ss.str("");
215 if (pc->stats.permadeath)
216 ss << settings->path_user << "saves/" << eset->misc.save_prefix << "/" << game_slot << "/stash_HC.txt";
217 else
218 ss << settings->path_user << "saves/" << eset->misc.save_prefix << "/stash.txt";
219
220 outfile.open(Filesystem::path(&ss).c_str(), std::ios::out);
221
222 if (outfile.is_open()) {
223
224 // comment
225 outfile << "## flare-engine stash file ##" << "\n";
226
227 outfile << "quantity=" << menu->stash->stock.getQuantities() << "\n";
228 outfile << "item=" << menu->stash->stock.getItems() << "\n";
229
230 outfile << std::endl;
231
232 if (outfile.bad()) Utils::logError("SaveLoad: Unable to save stash. No write access or disk is full!");
233 outfile.close();
234 outfile.clear();
235
236 platform.FSCommit();
215 // Save stashes
216 for (size_t i = 0; i < menu->stash->tabs.size(); ++i) {
217 // shared stashes are not saved for permadeath characters
218 if (pc->stats.permadeath && !menu->stash->tabs[i].is_private)
219 continue;
220
221 ss.str("");
222 ss << settings->path_user << "saves/" << eset->misc.save_prefix;
223 if (menu->stash->tabs[i].is_private)
224 ss << "/" << game_slot;
225 ss << "/" << menu->stash->tabs[i].filename;
226 outfile.open(Filesystem::convertSlashes(ss.str()).c_str(), std::ios::out);
227
228 if (outfile.is_open()) {
229
230 // comment
231 outfile << "# flare-engine stash file: \"" << menu->stash->tabs[i].id << "\"\n";
232
233 outfile << "quantity=" << menu->stash->tabs[i].stock.getQuantities() << "\n";
234 outfile << "item=" << menu->stash->tabs[i].stock.getItems() << "\n";
235
236 outfile << std::endl;
237
238 if (outfile.bad()) Utils::logError("SaveLoad: Unable to save stash. No write access or disk is full!");
239 outfile.close();
240 outfile.clear();
241
242 platform.FSCommit();
243 }
237244 }
238245
239246 settings->prev_save_slot = game_slot-1;
252259 int saved_hp = 0;
253260 int saved_mp = 0;
254261 int currency = 0;
262 size_t stash_tab = 0;
255263 Version save_version(VersionInfo::MIN);
256264
257265 FileParser infile;
258 std::vector<int> hotkeys(MenuActionBar::SLOT_MAX, -1);
266 std::vector<PowerID> hotkeys(MenuActionBar::SLOT_MAX, -1);
259267
260268 std::stringstream ss;
261269 ss << settings->path_user << "saves/" << eset->misc.save_prefix << "/" << game_slot << "/avatar.txt";
262270
263 if (infile.open(Filesystem::path(&ss), !FileParser::MOD_FILE, FileParser::ERROR_NORMAL)) {
271 if (infile.open(ss.str(), !FileParser::MOD_FILE, FileParser::ERROR_NORMAL)) {
264272 while (infile.next()) {
265273 if (infile.key == "name") pc->stats.name = infile.val;
266274 else if (infile.key == "permadeath") {
326334 else if (infile.key == "actionbar") {
327335 for (int i = 0; i < MenuActionBar::SLOT_MAX; i++) {
328336 hotkeys[i] = Parse::popFirstInt(infile.val);
329 if (hotkeys[i] < 0) {
330 Utils::logError("SaveLoad: Hotkey power on position %d has negative id, skipping", i);
331 hotkeys[i] = 0;
332 }
333 else if (static_cast<unsigned>(hotkeys[i]) > powers->powers.size()-1) {
334 Utils::logError("SaveLoad: Hotkey power id (%d) out of bounds 1-%d, skipping", hotkeys[i], static_cast<int>(powers->powers.size()));
335 hotkeys[i] = 0;
336 }
337 else if (hotkeys[i] != 0 && static_cast<unsigned>(hotkeys[i]) < powers->powers.size() && powers->powers[hotkeys[i]].name == "") {
337 if (hotkeys[i] != 0 && powers->powers[hotkeys[i]].is_empty) {
338338 Utils::logError("SaveLoad: Hotkey power with id=%d, found on position %d does not exist, skipping", hotkeys[i], i);
339339 hotkeys[i] = 0;
340340 }
341341 }
342 menu->act->set(hotkeys);
342 menu->act->set(hotkeys, !MenuActionBar::SET_SKIP_EMPTY);
343343 }
344344 else if (infile.key == "transformed") {
345345 pc->stats.transform_type = Parse::popFirstString(infile.val);
373373 }
374374 }
375375 else if (infile.key == "questlog_dismissed") pc->questlog_dismissed = Parse::toBool(infile.val);
376 else if (infile.key == "stash_tab") stash_tab = Parse::toInt(infile.val);
376377 }
377378
378379 infile.close();
421422 menu->chr->refreshStats();
422423
423424 loadPowerTree();
425
426 // disable the shared stash for permadeath characters
427 menu->stash->enableSharedTab(pc->stats.permadeath);
428
429 menu->stash->setTab(stash_tab);
424430 }
425431
426432 /**
449455 StatusID class_status = camp->registerStatus(eset->hero_classes.list[index].statuses[i]);
450456 camp->setStatus(class_status);
451457 }
452 menu->act->set(eset->hero_classes.list[index].hotkeys);
458 menu->act->set(eset->hero_classes.list[index].hotkeys, !MenuActionBar::SET_SKIP_EMPTY);
453459
454460 // Add carried items
455461 std::string carried = eset->hero_classes.list[index].carried;
476482 // Load stash
477483 FileParser infile;
478484 std::stringstream ss;
479 if (pc->stats.permadeath)
480 ss << settings->path_user << "saves/" << eset->misc.save_prefix << "/" << game_slot << "/stash_HC.txt";
481 else
482 ss << settings->path_user << "saves/" << eset->misc.save_prefix << "/stash.txt";
483
484 if (infile.open(Filesystem::path(&ss), !FileParser::MOD_FILE, FileParser::ERROR_NONE)) {
485 while (infile.next()) {
486 if (infile.key == "item") {
487 menu->stash->stock.setItems(infile.val);
488 }
489 else if (infile.key == "quantity") {
490 menu->stash->stock.setQuantities(infile.val);
491 }
492 }
493 infile.close();
494 }
495 else Utils::logInfo("SaveLoad: Could not open stash file '%s'. This may be because it hasn't been created yet.", ss.str().c_str());
496
497 menu->stash->stock.clean();
485
486 for (size_t i = 0; i < menu->stash->tabs.size(); ++i) {
487 // shared stashes are not loaded for permadeath characters
488 if (pc->stats.permadeath && !menu->stash->tabs[i].is_private)
489 continue;
490
491 ss.str("");
492 ss << settings->path_user << "saves/" << eset->misc.save_prefix;
493 if (menu->stash->tabs[i].is_private)
494 ss << "/" << game_slot;
495 ss << "/" << menu->stash->tabs[i].filename;
496
497 if (infile.open(ss.str(), !FileParser::MOD_FILE, FileParser::ERROR_NONE)) {
498 while (infile.next()) {
499 if (infile.key == "item") {
500 menu->stash->tabs[i].stock.setItems(infile.val);
501 }
502 else if (infile.key == "quantity") {
503 menu->stash->tabs[i].stock.setQuantities(infile.val);
504 }
505 }
506 infile.close();
507 }
508 else Utils::logInfo("SaveLoad: Could not open stash file '%s'. This may be because it hasn't been created yet.", ss.str().c_str());
509
510 menu->stash->tabs[i].stock.clean();
511 }
498512 }
499513
500514 /**
5858 , show_hud(true)
5959 , encounter_dist(0) // set in updateScreenVars()
6060 , soft_reset(false)
61 , safe_video(false)
6162 {
62 config.resize(35);
63 setConfigDefault(0, "fullscreen", &typeid(fullscreen), "0", &fullscreen, "fullscreen mode. 1 enable, 0 disable.");
64 setConfigDefault(1, "resolution_w", &typeid(screen_w), "640", &screen_w, "display resolution. 640x480 minimum.");
65 setConfigDefault(2, "resolution_h", &typeid(screen_h), "480", &screen_h, "");
66 setConfigDefault(3, "music_volume", &typeid(music_volume), "96", &music_volume, "music and sound volume (0 = silent, 128 = max)");
67 setConfigDefault(4, "sound_volume", &typeid(sound_volume), "128", &sound_volume, "");
68 setConfigDefault(5, "combat_text", &typeid(combat_text), "1", &combat_text, "display floating damage text. 1 enable, 0 disable.");
69 setConfigDefault(6, "mouse_move", &typeid(mouse_move), "0", &mouse_move, "use mouse to move (experimental). 1 enable, 0 disable.");
70 setConfigDefault(7, "hwsurface", &typeid(hwsurface), "1", &hwsurface, "hardware surfaces, v-sync. Try disabling for performance. 1 enable, 0 disable.");
71 setConfigDefault(8, "vsync", &typeid(vsync), "1", &vsync, "");
72 setConfigDefault(9, "texture_filter", &typeid(texture_filter), "1", &texture_filter, "texture filter quality. 0 nearest neighbor (worst), 1 linear (best)");
73 setConfigDefault(10, "dpi_scaling", &typeid(dpi_scaling), "0", &dpi_scaling, "toggle DPI-based render scaling. 1 enable, 0 disable");
74 setConfigDefault(11, "parallax_layers", &typeid(parallax_layers), "1", &parallax_layers, "toggle rendering of parallax map layers. 1 enable, 0 disable");
75 setConfigDefault(12, "max_fps", &typeid(max_frames_per_sec), "60", &max_frames_per_sec, "maximum frames per second. default is 60");
76 setConfigDefault(13, "renderer", &typeid(render_device_name), "sdl_hardware", &render_device_name, "default render device. 'sdl' is the default setting");
77 setConfigDefault(14, "enable_joystick", &typeid(enable_joystick), "0", &enable_joystick, "joystick settings.");
78 setConfigDefault(15, "joystick_device", &typeid(joystick_device), "0", &joystick_device, "");
79 setConfigDefault(16, "joystick_deadzone", &typeid(joy_deadzone), "100", &joy_deadzone, "");
80 setConfigDefault(17, "language", &typeid(language), "en", &language, "2-letter language code.");
81 setConfigDefault(18, "change_gamma", &typeid(change_gamma), "0", &change_gamma, "allow changing gamma (experimental). 1 enable, 0 disable.");
82 setConfigDefault(19, "gamma", &typeid(gamma), "1.0", &gamma, "screen gamma (0.5 = darkest, 2.0 = lightest)");
83 setConfigDefault(20, "mouse_aim", &typeid(mouse_aim), "1", &mouse_aim, "use mouse to aim. 1 enable, 0 disable.");
84 setConfigDefault(21, "no_mouse", &typeid(no_mouse), "0", &no_mouse, "make using mouse secondary, give full control to keyboard. 1 enable, 0 disable.");
85 setConfigDefault(22, "show_fps", &typeid(show_fps), "0", &show_fps, "show frames per second. 1 enable, 0 disable.");
86 setConfigDefault(23, "colorblind", &typeid(colorblind), "0", &colorblind, "enable colorblind tooltips. 1 enable, 0 disable");
87 setConfigDefault(24, "hardware_cursor", &typeid(hardware_cursor), "0", &hardware_cursor, "use the system mouse cursor. 1 enable, 0 disable");
88 setConfigDefault(25, "dev_mode", &typeid(dev_mode), "0", &dev_mode, "allow opening the developer console. 1 enable, 0 disable");
89 setConfigDefault(26, "dev_hud", &typeid(dev_hud), "1", &dev_hud, "shows some additional information on-screen when developer mode is enabled. 1 enable, 0 disable");
90 setConfigDefault(27, "loot_tooltips", &typeid(loot_tooltips), "0", &loot_tooltips, "loot tooltip mode. 0 normal, 1 show all, 2 hide all");
91 setConfigDefault(28, "statbar_labels", &typeid(statbar_labels), "0", &statbar_labels, "always show labels on HP/MP/XP bars. 1 enable, 0 disable");
92 setConfigDefault(29, "auto_equip", &typeid(auto_equip), "1", &auto_equip, "automatically equip items. 1 enable, 0 disable");
93 setConfigDefault(30, "subtitles", &typeid(subtitles), "0", &subtitles, "displays subtitles. 1 enable, 0 disable");
94 setConfigDefault(31, "minimap_mode", &typeid(minimap_mode), "0", &minimap_mode, "mini-map display mode. 0 is normal, 1 is 2x zoom, 2 is hidden");
95 setConfigDefault(32, "mouse_move_swap", &typeid(mouse_move_swap), "0", &mouse_move_swap, "use 'Main2' as the movement action when using mouse movement. 1 enable, 0 disable.");
96 setConfigDefault(33, "mouse_move_attack", &typeid(mouse_move_attack), "1", &mouse_move_attack, "allows attacking with the mouse movement button if an enemy is targeted and in range. 1 enable, 0 disable.");
97 setConfigDefault(34, "prev_save_slot", &typeid(prev_save_slot), "-1", &prev_save_slot, "index of the last used save slot");
63 config.resize(41);
64 setConfigDefault(0, "move_type_dimissed", &typeid(move_type_dimissed), "0", &move_type_dimissed, "One time flag for initial movement type dialog | 0 = show dialog, 1 = no dialog");
65 setConfigDefault(1, "fullscreen", &typeid(fullscreen), "0", &fullscreen, "Fullscreen mode | 0 = disable, 1 = enable");
66 setConfigDefault(2, "resolution_w", &typeid(screen_w), "640", &screen_w, "Window size");
67 setConfigDefault(3, "resolution_h", &typeid(screen_h), "480", &screen_h, "");
68 setConfigDefault(4, "music_volume", &typeid(music_volume), "96", &music_volume, "Music and sound volume | 0 = silent, 128 = maximum");
69 setConfigDefault(5, "sound_volume", &typeid(sound_volume), "128", &sound_volume, "");
70 setConfigDefault(6, "combat_text", &typeid(combat_text), "1", &combat_text, "Display floating damage text | 0 = disable, 1 = enable");
71 setConfigDefault(7, "mouse_move", &typeid(mouse_move), "0", &mouse_move, "Use mouse to move | 0 = disable, 1 = enable");
72 setConfigDefault(8, "hwsurface", &typeid(hwsurface), "1", &hwsurface, "Hardware surfaces & V-sync. Try disabling for performance. | 0 = disable, 1 = enable");
73 setConfigDefault(9, "vsync", &typeid(vsync), "1", &vsync, "");
74 setConfigDefault(10, "texture_filter", &typeid(texture_filter), "1", &texture_filter, "Texture filter quality | 0 = nearest neighbor (worst), 1 = linear (best)");
75 setConfigDefault(11, "dpi_scaling", &typeid(dpi_scaling), "0", &dpi_scaling, "DPI-based render scaling | 0 = disable, 1 = enable");
76 setConfigDefault(12, "parallax_layers", &typeid(parallax_layers), "1", &parallax_layers, "Rendering of parallax map layers | 0 = disable, 1 = enable");
77 setConfigDefault(13, "max_fps", &typeid(max_frames_per_sec), "60", &max_frames_per_sec, "Maximum frames per second | 60 = default");
78 setConfigDefault(14, "renderer", &typeid(render_device_name), "sdl_hardware", &render_device_name, "Default render device. | sdl_hardware = default, Try sdl for compatibility");
79 setConfigDefault(15, "enable_joystick", &typeid(enable_joystick), "0", &enable_joystick, "Joystick settings.");
80 setConfigDefault(16, "joystick_device", &typeid(joystick_device), "-1", &joystick_device, "");
81 setConfigDefault(17, "joystick_deadzone", &typeid(joy_deadzone), "100", &joy_deadzone, "");
82 setConfigDefault(18, "language", &typeid(language), "en", &language, "2-letter language code.");
83 setConfigDefault(19, "change_gamma", &typeid(change_gamma), "0", &change_gamma, "Allow changing screen gamma (experimental) | 0 = disable, 1 = enable");
84 setConfigDefault(20, "gamma", &typeid(gamma), "1.0", &gamma, "Screen gamma. Requires change_gamma=1 | 0.5 = darkest, 2.0 = lightest");
85 setConfigDefault(21, "mouse_aim", &typeid(mouse_aim), "1", &mouse_aim, "Use mouse to aim | 0 = disable, 1 = enable");
86 setConfigDefault(22, "no_mouse", &typeid(no_mouse), "0", &no_mouse, "Make using mouse secondary, give full control to keyboard | 0 = disable, 1 = enable");
87 setConfigDefault(23, "show_fps", &typeid(show_fps), "0", &show_fps, "Show frames per second | 0 = disable, 1 = enable");
88 setConfigDefault(24, "colorblind", &typeid(colorblind), "0", &colorblind, "Enable colorblind help text | 0 = disable, 1 = enable");
89 setConfigDefault(25, "hardware_cursor", &typeid(hardware_cursor), "0", &hardware_cursor, "Use the system mouse cursor | 0 = disable, 1 = enable");
90 setConfigDefault(26, "dev_mode", &typeid(dev_mode), "0", &dev_mode, "Developer mode | 0 = disable, 1 = enable");
91 setConfigDefault(27, "dev_hud", &typeid(dev_hud), "1", &dev_hud, "Show additional information on-screen when dev_mode=1 | 0 = disable, 1 = enable");
92 setConfigDefault(28, "loot_tooltips", &typeid(loot_tooltips), "0", &loot_tooltips, "Loot tooltip mode | 0 = normal, 1 = show all, 2 = hide all");
93 setConfigDefault(29, "statbar_labels", &typeid(statbar_labels), "0", &statbar_labels, "Always show labels on HP/MP/XP bars | 0 = disable, 1 = enable");
94 setConfigDefault(30, "statbar_autohide", &typeid(statbar_autohide), "1", &statbar_autohide, "Allow the HP/MP/XP bars to auto-hide on inactivity | 0 = disable, 1 = enable");
95 setConfigDefault(31, "auto_equip", &typeid(auto_equip), "1", &auto_equip, "Automatically equip items | 0 = enable, 1 = enable");
96 setConfigDefault(32, "subtitles", &typeid(subtitles), "0", &subtitles, "Subtitles | 0 = disable, 1 = enable");
97 setConfigDefault(33, "minimap_mode", &typeid(minimap_mode), "0", &minimap_mode, "Mini-map display mode | 0 = normal, 1 = 2x zoom, 2 = hidden");
98 setConfigDefault(34, "mouse_move_swap", &typeid(mouse_move_swap), "0", &mouse_move_swap, "Use 'Main2' as the movement action when mouse_move=1 | 0 = disable, 1 = enable");
99 setConfigDefault(35, "mouse_move_attack", &typeid(mouse_move_attack), "1", &mouse_move_attack, "Allow attacking with the mouse movement button if an enemy is targeted and in range | 0 = disable, 1 = enable");
100 setConfigDefault(36, "entity_markers", &typeid(entity_markers), "1", &entity_markers, "Shows a marker above entities that are hidden behind tall tiles | 0 = disable, 1 = enable");
101 setConfigDefault(37, "prev_save_slot", &typeid(prev_save_slot), "-1", &prev_save_slot, "Index of the last used save slot");
102 setConfigDefault(38, "low_hp_warning_type", &typeid(low_hp_warning_type), "1", &low_hp_warning_type, "Low health warning type settings | 0 = disable, 1 = all, 2 = message & cursor, 3 = message & sound, 4 = cursor & sound , 5 = message, 6 = cursor, 7 = sound");
103 setConfigDefault(39, "low_hp_threshold", &typeid(low_hp_threshold), "20", &low_hp_threshold, "Low HP warning threshold percentage");
104 setConfigDefault(40, "item_compare_tips", &typeid(item_compare_tips), "1", &item_compare_tips, "Show comparison tooltips for equipped items of the same type | 0 = disable, 1 = enable");
98105 }
99106
100107 void Settings::setConfigDefault(size_t index, const std::string& name, const std::type_info *type, const std::string& default_val, void *storage, const std::string& comment) {
127134 }
128135
129136 // try read from file
137 bool found_settings = false;
138
130139 FileParser infile;
131 if (!infile.open(settings->path_conf + "settings.txt", !FileParser::MOD_FILE, FileParser::ERROR_NONE)) {
132 loadMobileDefaults();
133 if (!infile.open("engine/default_settings.txt", FileParser::MOD_FILE, FileParser::ERROR_NONE)) {
134 saveSettings();
135 return;
140 if (infile.open(settings->path_conf + "settings.txt", !FileParser::MOD_FILE, FileParser::ERROR_NORMAL)) {
141 found_settings = true;
142 }
143 else if (infile.open("engine/default_settings.txt", FileParser::MOD_FILE, FileParser::ERROR_NORMAL)) {
144 found_settings = true;
145 }
146
147 if (!found_settings) {
148 saveSettings();
149 }
150 else {
151 while (infile.next()) {
152 size_t entry = getConfigEntry(infile.key);
153 if (entry != config.size()) {
154 Parse::tryParseValue(*config[entry].type, infile.val, config[entry].storage);
155 }
136156 }
137 else saveSettings();
138 }
139
140 while (infile.next()) {
141 size_t entry = getConfigEntry(infile.key);
142 if (entry != config.size()) {
143 Parse::tryParseValue(*config[entry].type, infile.val, config[entry].storage);
144 }
145 }
146 infile.close();
157 infile.close();
158 }
147159
148160 loadMobileDefaults();
161
162 // Force using the software renderer if safe mode is enabled
163 if (safe_video) {
164 render_device_name = "sdl";
165 }
149166 }
150167
151168 /**
184201 * Load all default settings, except video settings.
185202 */
186203 void Settings::loadDefaults() {
187 // HACK init defaults except video
188 for (size_t i = 3; i < config.size(); i++) {
204 // HACK init defaults except video and one-time flags
205 for (size_t i = 4; i < config.size(); i++) {
189206 Parse::tryParseValue(*config[i].type, config[i].default_val, config[i].storage);
190207 }
191208
4242 MINIMAP_HIDDEN = 2
4343 };
4444
45 enum {
46 LHP_WARN_NONE = 0,
47 LHP_WARN_ALL = 1,
48 LHP_WARN_TEXT_CURSOR = 2,
49 LHP_WARN_TEXT_SOUND = 3,
50 LHP_WARN_CURSOR_SOUND = 4,
51 LHP_WARN_TEXT = 5,
52 LHP_WARN_CURSOR = 6,
53 LHP_WARN_SOUND = 7
54 };
55
4556 Settings();
4657 void loadSettings();
4758 void saveSettings();
8596 bool dev_hud;
8697 int loot_tooltips;
8798 bool statbar_labels;
99 bool statbar_autohide;
88100 bool auto_equip;
89101 bool subtitles;
90102 int minimap_mode;
103 bool entity_markers;
104 int low_hp_warning_type;
105 int low_hp_threshold;
106 bool item_compare_tips;
91107
92108 // Language Settings
93109 std::string language;
94110
95111 // Misc
96112 int prev_save_slot;
113 bool move_type_dimissed;
97114
98115 /**
99116 * NOTE Everything below is not part of the user's settings.txt, but somehow ended up here
128145
129146 bool soft_reset;
130147
148 bool safe_video;
149
131150 private:
132151 class ConfigEntry {
133152 public:
1818 #include "Avatar.h"
1919 #include "CampaignManager.h"
2020 #include "EnemyGroupManager.h"
21 #include "EntityManager.h"
2122 #include "HazardManager.h"
2223 #include "LootManager.h"
2324 #include "MenuActionBar.h"
2425 #include "MenuPowers.h"
26 #include "NPCManager.h"
2527 #include "PowerManager.h"
2628 #include "SharedGameResources.h"
2729
2931 MenuManager *menu = NULL;
3032 CampaignManager *camp = NULL;
3133 EnemyGroupManager *enemyg = NULL;
32 EnemyManager *enemym = NULL;
34 EntityManager *entitym = NULL;
3335 HazardManager *hazards = NULL;
3436 ItemManager *items = NULL;
3537 LootManager *loot = NULL;
3638 MapRenderer *mapr = NULL;
3739 MenuActionBar *menu_act= NULL;
3840 MenuPowers *menu_powers = NULL;
41 NPCManager *npcs = NULL;
3942 PowerManager *powers = NULL;
2121 class Avatar;
2222 class CampaignManager;
2323 class EnemyGroupManager;
24 class EnemyManager;
24 class EntityManager;
2525 class HazardManager;
2626 class ItemManager;
2727 class LootManager;
2929 class MenuActionBar;
3030 class MenuManager;
3131 class MenuPowers;
32 class NPCManager;
3233 class PowerManager;
3334
3435 /* These objects are created in the GameStatePlay constructor and deleted in the GameStatePlay destructor
3738 extern Avatar *pc;
3839 extern CampaignManager *camp;
3940 extern EnemyGroupManager *enemyg;
40 extern EnemyManager *enemym;
41 extern EntityManager *entitym;
4142 extern HazardManager *hazards;
4243 extern ItemManager *items;
4344 extern LootManager *loot;
4546 extern MenuActionBar *menu_act;
4647 extern MenuManager *menu;
4748 extern MenuPowers *menu_powers;
49 extern NPCManager *npcs;
4850 extern PowerManager *powers;
4951
5052 #endif // SHAREDGAMEOBJECTS_H
3434 static const std::string DEFAULT_CHANNEL;
3535 static const FPoint NO_POS;
3636 static const bool LOOP = true;
37 static const bool CLEANUP = true;
3738
3839 virtual ~SoundManager() {};
3940
4041 virtual SoundID load(const std::string& filename, const std::string& errormessage) = 0;
4142 virtual void unload(SoundID) = 0;
42 virtual void play(SoundID, const std::string& channel, const FPoint& pos, bool loop) = 0;
43 virtual void play(SoundID, const std::string& channel, const FPoint& pos, bool loop, bool cleanup = true) = 0;
44 virtual void pauseChannel(const std::string& channel) = 0;
4345 virtual void pauseAll() = 0;
4446 virtual void resumeAll() = 0;
4547 virtual void setVolumeSFX(int value) = 0;
7173 , location(FPoint())
7274 , loop(false)
7375 , paused(false)
74 , finished(false) {
76 , finished(false)
77 , cleanup(true) {
7578 }
7679
7780 SoundID sid;
8083 bool loop;
8184 bool paused;
8285 bool finished;
86 bool cleanup;
8387 };
8488
8589 #endif
2727 #include "Avatar.h"
2828 #include "CampaignManager.h"
2929 #include "CombatText.h"
30 #include "Enemy.h"
31 #include "EnemyManager.h"
30 #include "Entity.h"
31 #include "EntityManager.h"
3232 #include "EngineSettings.h"
3333 #include "FileParser.h"
3434 #include "Hazard.h"
4646 #include "UtilsParsing.h"
4747
4848 #include <limits>
49
50 #include <math.h>
51 #ifndef M_SQRT2
52 #define M_SQRT2 sqrt(2.0)
53 #endif
54
55 const float StatBlock::DIRECTION_DELTA_X[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
56 const float StatBlock::DIRECTION_DELTA_Y[8] = { 1, 0, -1, -1, -1, 0, 1, 1};
57 const float StatBlock::SPEED_MULTIPLIER[8] = { static_cast<float>(1.0/M_SQRT2), 1.0f, static_cast<float>(1.0/M_SQRT2), 1.0f, static_cast<float>(1.0/M_SQRT2), 1.0f, static_cast<float>(1.0/M_SQRT2), 1.0f};
4958
5059 StatBlock::StatBlock()
5160 : statsLoaded(false)
114123 , direction(0)
115124 , cooldown_hit()
116125 , cooldown_hit_enabled(false)
117 , cur_state(0)
126 , cur_state(ENTITY_STANCE)
118127 , state_timer()
119128 , hold_state(false)
120129 , prevent_interrupt(false)
166175 , sfx_critdie()
167176 , sfx_block()
168177 , sfx_levelup("")
178 , sfx_lowhp("")
179 , sfx_lowhp_loop(false)
169180 , max_spendable_stat_points(0)
170181 , max_points_per_stat(0)
171182 , prev_maxhp(0)
174185 , prev_mp(0)
175186 , summons()
176187 , summoner(NULL)
177 , bleed_source_type(-1)
188 , abort_npc_interact(false)
178189 {
179190 primary.resize(eset->primary_stats.list.size(), 0);
180191 primary_starting.resize(eset->primary_stats.list.size(), 0);
184195 for (size_t i = 0; i < per_primary.size(); ++i) {
185196 per_primary[i].resize(Stats::COUNT + eset->damage_types.count, 0);
186197 }
198
199 cooldown.reset(Timer::END);
200 }
201
202 StatBlock::~StatBlock() {
203 removeFromSummons();
204 if (loot)
205 loot->removeFromEnemiesDroppingLoot(this);
187206 }
188207
189208 bool StatBlock::loadCoreStat(FileParser *infile) {
298317 // @ATTR power_filter|list(power_id)|Only these powers are allowed to hit this entity.
299318 std::string power_id = Parse::popFirstString(infile->val);
300319 while (!power_id.empty()) {
301 power_filter.push_back(Parse::toInt(power_id));
320 power_filter.push_back(Parse::toPowerID(power_id));
302321 power_id = Parse::popFirstString(infile->val);
303322 }
323 return true;
324 }
325 else if (infile->key == "categories") {
326 // @ATTR categories|list(string)|Categories that this entity belongs to.
327 categories.clear();
328 std::string cat;
329 while ((cat = Parse::popFirstString(infile->val)) != "") {
330 categories.push_back(cat);
331 }
332 return true;
333 }
334 else if (infile->key == "melee_range") {
335 // @ATTR melee_range|float|Determines the distance from the caster that some powers will be placed. For AI entities, it also means the minimum distance from target required to use melee powers.
336 melee_range = Parse::toFloat(infile->val);
304337 return true;
305338 }
306339
373406 // @ATTR sfx_levelup|filename|Filename of sound effect for leveling up.
374407 sfx_levelup = infile->val;
375408 }
409 else if (infile->key == "sfx_lowhp") {
410 // @ATTR sfx_lowhp|filename, bool: Sound file, loop|Filename of sound effect for low health warning. Optionally, it can be looped.
411 sfx_lowhp = Parse::popFirstString(infile->val);
412 if (infile->val != "") sfx_lowhp_loop = Parse::toBool(infile->val);
413 }
376414 else {
377415 return false;
378416 }
379417
380418 return true;
419 }
420
421 bool StatBlock::isNPCStat(FileParser *infile) {
422 if (infile->section == "npc") return true;
423 else if (infile->section == "dialog") return true;
424
425 if (infile->key == "gfx") {
426 infile->error("StatBlock: Warning! 'gfx' is deprecated. Use 'animations' instead.");
427 animations = infile->val;
428 return true;
429 }
430 else if (infile->key == "direction") return true;
431 else if (infile->key == "talker") return true;
432 else if (infile->key == "portrait") return true;
433 else if (infile->key == "vendor") return true;
434 else if (infile->key == "vendor_requires_status") return true;
435 else if (infile->key == "vendor_requires_not_status") return true;
436 else if (infile->key == "constant_stock") return true;
437 else if (infile->key == "status_stock") return true;
438 else if (infile->key == "random_stock") return true;
439 else if (infile->key == "random_stock_count") return true;
440 else if (infile->key == "vox_intro") return true;
441
442 return false;
381443 }
382444
383445 /**
400462
401463 int num = Parse::toInt(infile.val);
402464 float fnum = Parse::toFloat(infile.val);
403 bool valid = loadCoreStat(&infile) || loadSfxStat(&infile);
465 bool valid = loadCoreStat(&infile) || loadSfxStat(&infile) || isNPCStat(&infile);
404466
405467 // @ATTR name|string|Name
406468 if (infile.key == "name") name = msg->get(infile.val);
445507 // @ATTR convert_status|string|Campaign status to set upon being converted to a player ally.
446508 else if (infile.key == "convert_status") convert_status = camp->registerStatus(infile.val);
447509 // @ATTR first_defeat_loot|item_id|Drops this item upon first death.
448 else if (infile.key == "first_defeat_loot") first_defeat_loot = num;
510 else if (infile.key == "first_defeat_loot") first_defeat_loot = Parse::toItemID(infile.val);
449511 // @ATTR quest_loot|string, string, item_id : Required status, Required not status, Item|Drops this item when campaign status is met.
450512 else if (infile.key == "quest_loot") {
451513 quest_loot_requires_status = camp->registerStatus(Parse::popFirstString(infile.val));
452514 quest_loot_requires_not_status = camp->registerStatus(Parse::popFirstString(infile.val));
453 quest_loot_id = Parse::popFirstInt(infile.val);
515 quest_loot_id = Parse::toItemID(Parse::popFirstString(infile.val));
454516 }
455517
456518 // behavior stats
477539
478540 std::string ai_type = Parse::popFirstString(infile.val);
479541
480 ai_power.id = powers->verifyID(Parse::popFirstInt(infile.val), &infile, !PowerManager::ALLOW_ZERO_ID);
542 ai_power.id = powers->verifyID(Parse::toPowerID(Parse::popFirstString(infile.val)), &infile, !PowerManager::ALLOW_ZERO_ID);
481543 if (ai_power.id == 0)
482544 continue; // verifyID() will print our error message
483545
507569 powers_passive.clear();
508570 std::string p = Parse::popFirstString(infile.val);
509571 while (p != "") {
510 powers_passive.push_back(Parse::toInt(p));
572 powers_passive.push_back(Parse::toPowerID(p));
511573 p = Parse::popFirstString(infile.val);
512574
513575 // if a passive power has a post power, add it to the AI power list so we can track its cooldown
514 int post_power = powers->powers[powers_passive.back()].post_power;
576 PowerID post_power = powers->powers[powers_passive.back()].post_power;
515577 if (post_power > 0) {
516578 AIPower passive_post_power;
517579 passive_post_power.type = AI_POWER_PASSIVE_POST;
522584 }
523585 }
524586
525 // @ATTR melee_range|float|Minimum distance from target required to use melee powers.
526 else if (infile.key == "melee_range") melee_range = fnum;
527587 // @ATTR threat_range|float, float: Engage distance, Stop distance|The first value is the radius of the area this creature will be able to start chasing the hero. The second, optional, value is the radius at which this creature will stop pursuing their target and defaults to double the first value.
528588 else if (infile.key == "threat_range") {
529589 threat_range = Parse::toFloat(Parse::popFirstString(infile.val));
553613 // @ATTR suppress_hp|bool|Hides the enemy HP bar for this creature.
554614 else if (infile.key == "suppress_hp") suppress_hp = Parse::toBool(infile.val);
555615
556 else if (infile.key == "categories") {
557 // @ATTR categories|list(string)|Categories that this enemy belongs to.
558 categories.clear();
559 std::string cat;
560 while ((cat = Parse::popFirstString(infile.val)) != "") {
561 categories.push_back(cat);
562 }
563 }
564
565616 // @ATTR flee_duration|duration|The minimum amount of time that this creature will flee. They may flee longer than the specified time.
566617 else if (infile.key == "flee_duration") flee_timer.setDuration(Parse::toDuration(infile.val));
567618 // @ATTR flee_cooldown|duration|The amount of time this creature must wait before they can start fleeing again.
589640 /**
590641 * Reduce temphp first, then hp
591642 */
592 void StatBlock::takeDamage(int dmg) {
643 void StatBlock::takeDamage(int dmg, bool crit, int source_type) {
593644 hp -= effects.damageShields(dmg);
594645 if (hp <= 0) {
595646 hp = 0;
647
648 effects.triggered_death = true;
649 // TODO should effects.clearEffects() be here as well?
650 // what about other things that happen in the "dead" entity states?
651
652 if (hero) {
653 cur_state = StatBlock::ENTITY_DEAD;
654 }
655 else {
656 // enemy died; do rewards
657 if (!hero_ally || converted) {
658 // some creatures create special loot if we're on a quest
659 if (quest_loot_requires_status != 0) {
660 // the loot manager will check quest_loot_id
661 // if set (not zero), the loot manager will 100% generate that loot.
662 if (!(camp->checkStatus(quest_loot_requires_status) && !camp->checkStatus(quest_loot_requires_not_status))) {
663 quest_loot_id = 0;
664 }
665 }
666
667 // some creatures drop special loot the first time they are defeated
668 // this must be done in conjunction with defeat status
669 if (first_defeat_loot > 0) {
670 if (!camp->checkStatus(defeat_status)) {
671 quest_loot_id = first_defeat_loot;
672 }
673 }
674
675 // defeating some creatures (e.g. bosses) affects the story
676 if (defeat_status != 0) {
677 camp->setStatus(defeat_status);
678 }
679
680 // reward XP; adjust for party exp if necessary
681 float xp_multiplier = 1;
682 if (source_type == Power::SOURCE_TYPE_ALLY)
683 xp_multiplier = static_cast<float>(eset->misc.party_exp_percentage) / 100.0f;
684
685 camp->rewardXP(static_cast<int>((static_cast<float>(xp) * xp_multiplier)), !CampaignManager::XP_SHOW_MSG);
686
687 // drop loot
688 loot->addEnemyLoot(this);
689 }
690
691 if (crit)
692 cur_state = StatBlock::ENTITY_CRITDEAD;
693 else
694 cur_state = StatBlock::ENTITY_DEAD;
695
696 mapr->collider.unblock(pos.x, pos.y);
697 }
698
596699 }
597700 }
598701
631734 */
632735 void StatBlock::calcBase() {
633736 // bonuses are skipped for the default level 1 of a stat
634 int lev0 = std::max(level - 1, 0);
635
636 for (size_t i = 0; i < Stats::COUNT + eset->damage_types.count; ++i) {
637 base[i] = starting[i];
638 base[i] += lev0 * per_level[i];
737 const int lev0 = std::max(level - 1, 0);
738
739 if (per_primary.empty()) {
740 for (size_t i = 0; i < Stats::COUNT + eset->damage_types.count; ++i) {
741 base[i] = starting[i] + (lev0 * per_level[i]);
742 }
743 }
744 else {
639745 for (size_t j = 0; j < per_primary.size(); ++j) {
640 base[i] += std::max(get_primary(j) - 1, 0) * per_primary[j][i];
746 const int current_primary = std::max(get_primary(j) - 1, 0);
747 const std::vector<int>& per_primary_vec = per_primary[j];
748 for (size_t i = 0; i < Stats::COUNT + eset->damage_types.count; ++i) {
749 if (j==0)
750 base[i] = starting[i] + (lev0 * per_level[i]);
751 base[i] += (current_primary * per_primary_vec[i]);
752 }
641753 }
642754 }
643755
660772 * Recalc derived stats from base stats + effect bonuses
661773 */
662774 void StatBlock::applyEffects() {
663
664775 // preserve hp/mp states
665776 // max HP and MP can't drop below 1
666777 prev_maxhp = std::max(get(Stats::HP_MAX), 1);
679790
680791 calcBase();
681792
682 for (size_t i=0; i<Stats::COUNT + eset->damage_types.count; i++) {
793 for (size_t i = 0; i < Stats::COUNT + eset->damage_types.count; ++i) {
683794 current[i] = base[i] + effects.bonus[i];
684795 }
685796
686 for (unsigned i=0; i<effects.bonus_resist.size(); i++) {
797 for (size_t i = 0; i < effects.bonus_resist.size(); ++i) {
687798 vulnerable[i] = vulnerable_base[i] - effects.bonus_resist[i];
688799 }
689800
707818 alive = !(hp <= 0 && !effects.triggered_death && !effects.revive);
708819
709820 // handle party buffs
710 if (enemym && powers) {
821 if (entitym && powers) {
711822 while (!party_buffs.empty()) {
712 int power_index = party_buffs.front();
823 PowerID power_index = party_buffs.front();
713824 party_buffs.pop();
714825 Power *buff_power = &powers->powers[power_index];
715826
716 for (size_t i=0; i < enemym->enemies.size(); ++i) {
717 if(enemym->enemies[i]->stats.hp > 0 &&
718 ((enemym->enemies[i]->stats.hero_ally && hero) || (enemym->enemies[i]->stats.enemy_ally && enemym->enemies[i]->stats.summoner == this)) &&
719 (buff_power->buff_party_power_id == 0 || buff_power->buff_party_power_id == enemym->enemies[i]->stats.summoned_power_index)
827 for (size_t i=0; i < entitym->entities.size(); ++i) {
828 Entity* party_member = entitym->entities[i];
829 if(party_member->stats.hp > 0 &&
830 ((party_member->stats.hero_ally && hero) || (party_member->stats.enemy_ally && party_member->stats.summoner == this)) &&
831 (buff_power->buff_party_power_id == 0 || buff_power->buff_party_power_id == party_member->stats.summoned_power_index)
720832 ) {
721 powers->effect(&enemym->enemies[i]->stats, this, power_index, (hero ? Power::SOURCE_TYPE_HERO : Power::SOURCE_TYPE_ENEMY));
833 powers->effect(&(party_member->stats), this, power_index, (hero ? Power::SOURCE_TYPE_HERO : Power::SOURCE_TYPE_ENEMY));
722834 }
723835 }
724836 }
777889
778890 // apply bleed
779891 if (effects.damage > 0 && hp > 0) {
780 takeDamage(effects.damage);
892 takeDamage(effects.damage, !StatBlock::TAKE_DMG_CRIT, effects.getDamageSourceType(Effect::DAMAGE));
781893 comb->addInt(effects.damage, pos, CombatText::MSG_TAKEDMG);
782894 }
783895 if (effects.damage_percent > 0 && hp > 0) {
784896 int damage = (get(Stats::HP_MAX)*effects.damage_percent)/100;
785 takeDamage(damage);
897 takeDamage(damage, !StatBlock::TAKE_DMG_CRIT, effects.getDamageSourceType(Effect::DAMAGE_PERCENT));
786898 comb->addInt(damage, pos, CombatText::MSG_TAKEDMG);
787899 }
788900
789901 if(effects.death_sentence)
790 hp = 0;
902 takeDamage(get(Stats::HP_MAX), !StatBlock::TAKE_DMG_CRIT, Power::SOURCE_TYPE_NEUTRAL);
791903
792904 cooldown_hit.tick();
793905
842954 mapr->collider.block(pos.x, pos.y, hero_ally);
843955 }
844956 else if (charge_speed != 0.0f) {
845 float tmp_speed = charge_speed * speedMultiplyer[direction];
846 float dx = tmp_speed * static_cast<float>(directionDeltaX[direction]);
847 float dy = tmp_speed * static_cast<float>(directionDeltaY[direction]);
957 float tmp_speed = charge_speed * SPEED_MULTIPLIER[direction];
958 float dx = tmp_speed * DIRECTION_DELTA_X[direction];
959 float dy = tmp_speed * DIRECTION_DELTA_Y[direction];
848960
849961 mapr->collider.unblock(pos.x, pos.y);
850962 mapr->collider.move(pos.x, pos.y, dx, dy, movement_type, mapr->collider.getCollideType(hero));
868980 hp = get(Stats::HP_MAX);
869981 alive = true;
870982 corpse = false;
871 if (hero)
872 cur_state = AVATAR_STANCE;
873 else
874 cur_state = ENEMY_STANCE;
875 }
876
877 // check for bleeding to death
878 if (hp <= 0 && !hero && cur_state != ENEMY_DEAD && cur_state != ENEMY_CRITDEAD) {
879 for (size_t i = 0; i < effects.effect_list.size(); ++i) {
880 if (effects.effect_list[i].type == Effect::DAMAGE || effects.effect_list[i].type == Effect::DAMAGE_PERCENT) {
881 bleed_source_type = effects.effect_list[i].source_type;
882 break;
883 }
884 }
885 effects.triggered_death = true;
886 cur_state = ENEMY_DEAD;
887 }
888 else if (hp <= 0 && hero && cur_state != AVATAR_DEAD) {
889 effects.triggered_death = true;
890 cur_state = AVATAR_DEAD;
891 }
892 }
893
894 StatBlock::~StatBlock() {
895 removeFromSummons();
896 }
897
898 bool StatBlock::canUsePower(int powerid, bool allow_passive) const {
983 cur_state = ENTITY_STANCE;
984 }
985
986 // non-hero entities can have their disposition reversed
987 if (!hero && effects.convert != converted) {
988 converted = !converted;
989 hero_ally = !hero_ally;
990 if (convert_status != 0) {
991 camp->setStatus(convert_status);
992 }
993 }
994 }
995
996 bool StatBlock::canUsePower(PowerID powerid, bool allow_passive) const {
899997 const Power& power = powers->powers[powerid];
900998
901999 if (!alive) {
9171015 && !power.meta_power
9181016 && (!effects.stun || (allow_passive && power.passive))
9191017 && (power.sacrifice || hp > power.requires_hp)
920 && (power.requires_max_hp == -1 || (power.requires_max_hp >= 0 && hp >= (current[Stats::HP_MAX] * power.requires_max_hp) / 100))
921 && (power.requires_not_max_hp == -1 || (power.requires_not_max_hp >= 0 && hp < (current[Stats::HP_MAX] * power.requires_not_max_hp) / 100))
922 && (power.requires_max_mp == -1 || (power.requires_max_mp >= 0 && mp >= (current[Stats::MP_MAX] * power.requires_max_mp) / 100))
923 && (power.requires_not_max_mp == -1 || (power.requires_not_max_mp >= 0 && mp < (current[Stats::MP_MAX]) * power.requires_not_max_mp / 100))
1018 && powers->checkRequiredMaxHPMP(power, this)
9241019 && (!power.requires_corpse || (target_corpse && !target_corpse->corpse_timer.isEnd()) || (target_nearest_corpse && powers->checkNearestTargeting(power, this, true) && !target_nearest_corpse->corpse_timer.isEnd()))
9251020 && (checkRequiredSpawns(power.requires_spawns))
9261021 && (menu_powers && menu_powers->meetsUsageStats(powerid))
9271022 && (power.type == Power::TYPE_SPAWN ? !summonLimitReached(powerid) : true)
9281023 && !(power.spawn_type == "untransform" && !transformed)
9291024 && std::includes(equip_flags.begin(), equip_flags.end(), power.requires_flags.begin(), power.requires_flags.end())
930 && (!power.buff_party || (power.buff_party && enemym && enemym->checkPartyMembers()))
1025 && (!power.buff_party || (power.buff_party && entitym && entitym->checkPartyMembers()))
9311026 && powers->checkRequiredItems(power, this)
9321027 );
9331028 }
9921087 */
9931088 void StatBlock::removeSummons() {
9941089 for (std::vector<StatBlock*>::iterator it = summons.begin(); it != summons.end(); ++it) {
995 (*it)->hp = 0;
996 (*it)->effects.triggered_death = true;
997 (*it)->effects.clearEffects();
998 if (!(*it)->hero && !(*it)->corpse) {
999 (*it)->cur_state = ENEMY_DEAD;
1000 (*it)->corpse_timer.reset(Timer::BEGIN);
1001 }
1090 (*it)->takeDamage((*it)->get(Stats::HP_MAX), !StatBlock::TAKE_DMG_CRIT, Power::SOURCE_TYPE_NEUTRAL);
10021091 (*it)->removeSummons();
10031092 (*it)->summoner = NULL;
10041093 }
10201109 removeSummons();
10211110 }
10221111
1023 bool StatBlock::summonLimitReached(int power_id) const {
1112 bool StatBlock::summonLimitReached(PowerID power_id) const {
10241113
10251114 //find the limit
10261115 Power *spawn_power = &powers->powers[power_id];
10511140
10521141 for (unsigned int i=0; i < summons.size(); i++) {
10531142 if(!summons[i]->corpse && summons[i]->summoned_power_index == power_id
1054 && summons[i]->cur_state != ENEMY_SPAWN
1055 && summons[i]->cur_state != ENEMY_DEAD
1056 && summons[i]->cur_state != ENEMY_CRITDEAD) {
1143 && summons[i]->cur_state != ENTITY_SPAWN
1144 && summons[i]->cur_state != ENTITY_DEAD
1145 && summons[i]->cur_state != ENTITY_CRITDEAD) {
10571146 qty_summons++;
10581147 }
10591148 }
11471236 return true;
11481237 }
11491238
1150 int StatBlock::getPowerCooldown(int power_id) {
1239 int StatBlock::getPowerCooldown(PowerID power_id) {
11511240 if (hero) {
11521241 return pc->power_cooldown_timers[power_id].getDuration();
11531242 }
11611250 return 0;
11621251 }
11631252
1164 void StatBlock::setPowerCooldown(int power_id, int power_cooldown) {
1253 void StatBlock::setPowerCooldown(PowerID power_id, int power_cooldown) {
11651254 if (hero) {
11661255 pc->power_cooldown_timers[power_id].setDuration(power_cooldown);
11671256 }
3737 private:
3838 bool loadCoreStat(FileParser *infile);
3939 bool loadSfxStat(FileParser *infile);
40 bool isNPCStat(FileParser *infile);
4041 void loadHeroStats();
4142 bool checkRequiredSpawns(int req_amount) const;
4243 bool statsLoaded;
5455 AI_POWER_PASSIVE_POST = 8
5556 };
5657
57 enum AvatarState {
58 AVATAR_STANCE = 0,
59 AVATAR_RUN = 1,
60 AVATAR_BLOCK = 2,
61 AVATAR_HIT = 3,
62 AVATAR_DEAD = 4,
63 AVATAR_ATTACK = 5
64 };
65
66 enum EnemyState {
67 ENEMY_STANCE = 0,
68 ENEMY_MOVE = 1,
69 ENEMY_POWER = 2,
70 ENEMY_SPAWN = 3,
71 ENEMY_BLOCK = 4,
72 ENEMY_HIT = 5,
73 ENEMY_DEAD = 6,
74 ENEMY_CRITDEAD = 7
58 enum EntityState {
59 ENTITY_STANCE = 0,
60 ENTITY_MOVE = 1,
61 ENTITY_POWER = 2,
62 ENTITY_SPAWN = 3,
63 ENTITY_BLOCK = 4,
64 ENTITY_HIT = 5,
65 ENTITY_DEAD = 6,
66 ENTITY_CRITDEAD = 7
7567 };
7668
7769 enum CombatStyle {
8375 class AIPower {
8476 public:
8577 int type;
86 int id;
78 PowerID id;
8779 int chance;
8880 Timer cooldown;
8981
9688 };
9789
9890 static const bool CAN_USE_PASSIVE = true;
91 static const bool TAKE_DMG_CRIT = true;
92
93 static const float DIRECTION_DELTA_X[8];
94 static const float DIRECTION_DELTA_Y[8];
95 static const float SPEED_MULTIPLIER[8];
9996
10097 StatBlock();
10198 ~StatBlock();
10299
103100 void load(const std::string& filename);
104 void takeDamage(int dmg);
101 void takeDamage(int dmg, bool crit, int source_type);
105102 void recalc();
106103 void applyEffects();
107104 void calcBase();
108105 void logic();
109106 void removeSummons();
110107 void removeFromSummons();
111 bool summonLimitReached(int power_id) const;
108 bool summonLimitReached(PowerID power_id) const;
112109 void setWanderArea(int r);
113110 void loadHeroSFX();
114111 std::string getShortClass();
115112 std::string getLongClass();
116113 void addXP(int amount);
117114 AIPower* getAIPower(int ai_type);
118 int getPowerCooldown(int power_id);
119 void setPowerCooldown(int power_id, int power_cooldown);
115 int getPowerCooldown(PowerID power_id);
116 void setPowerCooldown(PowerID power_id, int power_cooldown);
120117
121118 bool alive;
122119 bool corpse; // creature is dead and done animating
131128 bool refresh_stats;
132129 bool converted;
133130 bool summoned;
134 int summoned_power_index;
131 PowerID summoned_power_index;
135132 bool encountered; // enemy only
136133 StatBlock* target_corpse;
137134 StatBlock* target_nearest;
138135 StatBlock* target_nearest_corpse;
139136 float target_nearest_dist;
140137 float target_nearest_corpse_dist;
141 int block_power;
138 PowerID block_power;
142139
143140 int movement_type;
144141 bool flying;
167164 std::vector<int> per_level; // value increases each level after level 1
168165 std::vector< std::vector<int> > per_primary;
169166
170 int get(Stats::STAT stat) {
167 int get(Stats::STAT stat) const {
171168 return current[stat];
172169 }
173 int getDamageMin(size_t dmg_type) {
170 int getDamageMin(size_t dmg_type) const {
174171 return current[Stats::COUNT + (dmg_type * 2)];
175172 }
176 int getDamageMax(size_t dmg_type) {
173 int getDamageMax(size_t dmg_type) const {
177174 return current[Stats::COUNT + (dmg_type * 2) + 1];
178175 }
179176
249246 int chance_pursue;
250247 int chance_flee;
251248
252 std::vector<int> powers_list;
253 std::vector<int> powers_list_items;
254 std::vector<int> powers_passive;
249 std::vector<PowerID> powers_list;
250 std::vector<PowerID> powers_list_items;
251 std::vector<PowerID> powers_passive;
255252 std::vector<AIPower> powers_ai;
256253
257 bool canUsePower(int powerid, bool allow_passive) const;
254 bool canUsePower(PowerID powerid, bool allow_passive) const;
258255
259256 float melee_range;
260257 float threat_range;
291288 StatusID convert_status;
292289 StatusID quest_loot_requires_status;
293290 StatusID quest_loot_requires_not_status;
294 int quest_loot_id;
295 int first_defeat_loot;
291 ItemID quest_loot_id;
292 ItemID first_defeat_loot;
296293
297294 // player look options
298295 std::string gfx_base; // folder in /images/avatar
310307 std::vector<std::string> sfx_critdie;
311308 std::vector<std::string> sfx_block;
312309 std::string sfx_levelup;
310 std::string sfx_lowhp;
311 bool sfx_lowhp_loop;
313312
314313 // formula numbers
315314 int max_spendable_stat_points;
324323 // links to summoned creatures and the entity which summoned this
325324 std::vector<StatBlock*> summons;
326325 StatBlock* summoner;
327 std::queue<int> party_buffs;
328
329 std::vector<int> power_filter;
330
331 int bleed_source_type;
326 std::queue<PowerID> party_buffs;
327
328 std::vector<PowerID> power_filter;
332329
333330 std::vector<StatusID> invincible_requires_status;
334331 std::vector<StatusID> invincible_requires_not_status;
332
333 bool abort_npc_interact;
335334 };
336335
337336 #endif
120120 }
121121
122122 void Subtitles::logic(unsigned long id) {
123 if (!settings->subtitles)
124 return;
125
126123 setTextByID(id);
127124
128125 visible_timer.tick();
139136 }
140137
141138 void Subtitles::render() {
142 if (!visible)
139 if (!visible || !settings->subtitles)
143140 return;
144141
145142 if (background) {
2222 #include "WidgetTooltip.h"
2323
2424 TooltipManager::TooltipManager()
25 : tip(new WidgetTooltip())
26 , style(TooltipData::STYLE_FLOAT)
27 , context(CONTEXT_NONE)
28 {}
25 : context(CONTEXT_NONE)
26 {
27 for (size_t i = 0; i < TOOLTIP_COUNT; ++i) {
28 tip[i] = new WidgetTooltip();
29 if (i > 0) {
30 tip[i]->parent = tip[i-1];
31 }
32
33 tip_data[i] = TooltipData();
34 pos[i] = Point();
35 style[i] = 0;
36 }
37 }
2938
3039 TooltipManager::~TooltipManager() {
31 delete tip;
40 for (size_t i = 0; i < TOOLTIP_COUNT; ++i) {
41 delete tip[i];
42 }
3243 }
3344
3445 void TooltipManager::clear() {
35 tip_data.clear();
46 for (size_t i = 0; i < TOOLTIP_COUNT; ++i) {
47 tip_data[i].clear();
48 }
3649 }
3750
3851 bool TooltipManager::isEmpty() {
39 return tip_data.isEmpty();
52 for (size_t i = 0; i < TOOLTIP_COUNT; ++i) {
53 if (!tip_data[i].isEmpty())
54 return false;
55 }
56 return true;
4057 }
4158
42 void TooltipManager::push(const TooltipData& _tip_data, const Point& _pos, uint8_t _style) {
43 if (_tip_data.isEmpty())
59 void TooltipManager::push(const TooltipData& _tip_data, const Point& _pos, uint8_t _style, size_t tip_index) {
60 if (_tip_data.isEmpty() || tip_index >= TOOLTIP_COUNT)
4461 return;
4562
46 tip_data = _tip_data;
47 pos = _pos;
48 style = _style;
63 tip_data[tip_index] = _tip_data;
64 pos[tip_index] = _pos;
65 style[tip_index] = _style;
4966 }
5067
5168 void TooltipManager::render() {
5673 context = CONTEXT_NONE;
5774 }
5875
59 tip->render(tip_data, pos, style);
76 for (size_t i = 0; i < TOOLTIP_COUNT; ++i) {
77 tip[i]->render(tip_data[i], pos[i], style[i]);
78 }
6079 }
2727 class WidgetTooltip;
2828
2929 class TooltipManager {
30 private:
31 WidgetTooltip *tip;
32 TooltipData tip_data;
33 Point pos;
34 uint8_t style;
35
3630 public:
31 static const size_t TOOLTIP_COUNT = 3;
3732 enum {
3833 CONTEXT_NONE = 0,
3934 CONTEXT_MENU = 1,
4641
4742 void clear();
4843 bool isEmpty();
49 void push(const TooltipData& _tip_data, const Point& _pos, uint8_t _style);
44 void push(const TooltipData& _tip_data, const Point& _pos, uint8_t _style, size_t tip_index=0);
5045 void render();
5146
5247 uint8_t context;
48
49 private:
50 WidgetTooltip* tip[TOOLTIP_COUNT];
51 TooltipData tip_data[TOOLTIP_COUNT];
52 Point pos[TOOLTIP_COUNT];
53 uint8_t style[TOOLTIP_COUNT];
54
5355 };
5456
5557 #endif
155155 return !((*this) == other);
156156 }
157157
158 uint32_t Color::encodeRGBA() {
159 uint32_t result = static_cast<uint32_t>(a);
160 result |= static_cast<uint32_t>(r) << 24;
161 result |= static_cast<uint32_t>(g) << 16;
162 result |= static_cast<uint32_t>(b) << 8;
163 return result;
164 }
165
166 void Color::decodeRGBA(const uint32_t encoded) {
167 a = static_cast<uint8_t>(encoded);
168 r = static_cast<uint8_t>(encoded >> 24);
169 g = static_cast<uint8_t>(encoded >> 16);
170 b = static_cast<uint8_t>(encoded >> 8);
171 }
172
158173 Timer::Timer(unsigned _duration)
159174 : current(0)
160175 , duration(_duration)
202217 current = 0;
203218 else if (type == Timer::BEGIN)
204219 current = duration;
220 }
221
222 bool Timer::isWholeSecond() {
223 return current % settings->max_frames_per_sec == 0;
205224 }
206225
207226 FPoint Utils::screenToMap(int x, int y, float camx, float camy) {
381400 r->x = (settings->view_w - r->w) + r->x;
382401 r->y = (settings->view_h - r->h) + r->y;
383402 }
403 else if (alignment == ALIGN_FRAME_TOPLEFT) {
404 r->x = ((settings->view_w - eset->resolutions.frame_w)/2) + r->x;
405 r->y = ((settings->view_h - eset->resolutions.frame_h)/2) + r->y;
406 }
407 else if (alignment == ALIGN_FRAME_TOP) {
408 r->x = ((settings->view_w - eset->resolutions.frame_w)/2) + (eset->resolutions.frame_w/2 - r->w/2) + r->x;
409 r->y = ((settings->view_h - eset->resolutions.frame_h)/2) + r->y;
410 }
411 else if (alignment == ALIGN_FRAME_TOPRIGHT) {
412 r->x = ((settings->view_w - eset->resolutions.frame_w)/2) + (eset->resolutions.frame_w - r->w) + r->x;
413 r->y = ((settings->view_h - eset->resolutions.frame_h)/2) + r->y;
414 }
415 else if (alignment == ALIGN_FRAME_LEFT) {
416 r->x = ((settings->view_w - eset->resolutions.frame_w)/2) + r->x;
417 r->y = ((settings->view_h - eset->resolutions.frame_h)/2) + (eset->resolutions.frame_h/2 - r->h/2) + r->y;
418 }
419 else if (alignment == ALIGN_FRAME_CENTER) {
420 r->x = ((settings->view_w - eset->resolutions.frame_w)/2) + (eset->resolutions.frame_w/2 - r->w/2) + r->x;
421 r->y = ((settings->view_h - eset->resolutions.frame_h)/2) + (eset->resolutions.frame_h/2 - r->h/2) + r->y;
422 }
423 else if (alignment == ALIGN_FRAME_RIGHT) {
424 r->x = ((settings->view_w - eset->resolutions.frame_w)/2) + (eset->resolutions.frame_w - r->w) + r->x;
425 r->y = ((settings->view_h - eset->resolutions.frame_h)/2) + (eset->resolutions.frame_h/2 - r->h/2) + r->y;
426 }
427 else if (alignment == ALIGN_FRAME_BOTTOMLEFT) {
428 r->x = ((settings->view_w - eset->resolutions.frame_w)/2) + r->x;
429 r->y = ((settings->view_h - eset->resolutions.frame_h)/2) + (eset->resolutions.frame_h - r->h) + r->y;
430 }
431 else if (alignment == ALIGN_FRAME_BOTTOM) {
432 r->x = ((settings->view_w - eset->resolutions.frame_w)/2) + (eset->resolutions.frame_w/2 - r->w/2) + r->x;
433 r->y = ((settings->view_h - eset->resolutions.frame_h)/2) + (eset->resolutions.frame_h - r->h) + r->y;
434 }
435 else if (alignment == ALIGN_FRAME_BOTTOMRIGHT) {
436 r->x = ((settings->view_w - eset->resolutions.frame_w)/2) + (eset->resolutions.frame_w - r->w) + r->x;
437 r->y = ((settings->view_h - eset->resolutions.frame_h)/2) + (eset->resolutions.frame_h - r->h) + r->y;
438 }
384439 else {
385440 // do nothing
386441 }
503558 std::stringstream ss;
504559 ss << settings->path_user << "saves/" << eset->misc.save_prefix << "/";
505560
506 Filesystem::createDir(Filesystem::path(&ss));
561 Filesystem::createDir(ss.str());
507562
508563 ss << slot;
509 Filesystem::createDir(Filesystem::path(&ss));
564 Filesystem::createDir(ss.str());
510565 }
511566
512567 void Utils::removeSaveDir(int slot) {
516571 std::stringstream ss;
517572 ss << settings->path_user << "saves/" << eset->misc.save_prefix << "/" << slot;
518573
519 if (Filesystem::isDirectory(Filesystem::path(&ss))) {
520 Filesystem::removeDirRecursive(Filesystem::path(&ss));
574 if (Filesystem::isDirectory(ss.str())) {
575 Filesystem::removeDirRecursive(ss.str());
521576 }
522577 }
523578
711766 if (!platform.has_lock_file)
712767 return;
713768
714 std::string lock_file_path = settings->path_conf + "flare_lock";
769 std::string lock_file_path = Filesystem::convertSlashes(settings->path_conf + "flare_lock");
715770
716771 std::ifstream infile;
717772 infile.open(lock_file_path.c_str(), std::ios::in);
770825 { SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT|SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT, 0, "Quit" },
771826 { 0, 1, "Continue" },
772827 { 0, 2, "Reset" },
828 { 0, 3, "Safe Video" },
773829 };
774830 const SDL_MessageBoxData messageboxdata = {
775831 SDL_MESSAGEBOX_INFORMATION,
776832 NULL,
777833 "Flare",
778 "Flare appears to already be running.\n\nYou may either:\n- 'Quit' Flare (safe, recommended)\n- 'Continue' to launch another copy of Flare.\n- 'Reset' the counter which tracks the number of copies of Flare that are currently running.\n If this dialog is shown every time you launch Flare, this option should fix it.",
834 "Flare is unable to launch properly. This may be because it did not exit properly, or because there is another instance running.\n\nIf Flare crashed, it is recommended to try 'Safe Video' mode. This will try launching Flare with the minimum video settings.\n\nIf Flare is already running, you may:\n- 'Quit' Flare (safe, recommended)\n- 'Continue' to launch another copy of Flare.\n- 'Reset' the counter which tracks the number of copies of Flare that are currently running.\n If this dialog is shown every time you launch Flare, this option should fix it.",
779835 static_cast<int>(SDL_arraysize(buttons)),
780836 buttons,
781837 NULL
789845 else if (buttonid == 2) {
790846 LOCK_INDEX = 0;
791847 }
848 else if (buttonid == 3) {
849 LOCK_INDEX = 0;
850 settings->safe_video = true;
851 }
792852 }
793853
794854 lockFileWrite(1);
3535 typedef unsigned long SoundID;
3636 typedef unsigned long StatusID;
3737
38 typedef size_t ItemID;
39 typedef size_t ItemSetID;
40 typedef size_t PowerID;
41
3842 class Avatar;
3943 class FPoint; // needed for Point -> FPoint constructor
4044
7276 operator SDL_Color() const;
7377 bool operator ==(const Color &other);
7478 bool operator !=(const Color &other);
79 uint32_t encodeRGBA();
80 void decodeRGBA(const uint32_t encoded);
7581 };
7682
7783 class Timer {
9399 bool isEnd();
94100 bool isBegin();
95101 void reset(int type);
102 bool isWholeSecond();
96103 };
97104
98105 namespace Utils {
99 // Alignment: For aligning objects relative to the screen
106 // Alignment: For aligning objects. 0-8 are screen-relative, 9-17 are menu frame relative.
100107 enum {
101108 ALIGN_TOPLEFT = 0,
102109 ALIGN_TOP = 1,
106113 ALIGN_RIGHT = 5,
107114 ALIGN_BOTTOMLEFT = 6,
108115 ALIGN_BOTTOM = 7,
109 ALIGN_BOTTOMRIGHT = 8
116 ALIGN_BOTTOMRIGHT = 8,
117 ALIGN_FRAME_TOPLEFT = 9,
118 ALIGN_FRAME_TOP = 10,
119 ALIGN_FRAME_TOPRIGHT = 11,
120 ALIGN_FRAME_LEFT = 12,
121 ALIGN_FRAME_CENTER = 13,
122 ALIGN_FRAME_RIGHT = 14,
123 ALIGN_FRAME_BOTTOMLEFT = 15,
124 ALIGN_FRAME_BOTTOM = 16,
125 ALIGN_FRAME_BOTTOMRIGHT = 17
110126 };
111127
112128 extern int LOCK_INDEX;
3636 */
3737 bool Filesystem::pathExists(const std::string &path) {
3838 struct stat st;
39 return (stat(path.c_str(), &st) == 0);
39 return (stat(convertSlashes(path).c_str(), &st) == 0);
4040 }
4141
4242 /**
4747 if (isDirectory(path, false))
4848 return;
4949
50 platform.dirCreate(path);
50 platform.dirCreate(convertSlashes(path));
5151 }
5252
5353 /**
5555 * The filename parameter should include the entire path to this file
5656 */
5757 bool Filesystem::fileExists(const std::string &filename) {
58 if (isDirectory(filename, false)) return false;
59
60 std::ifstream infile(filename.c_str());
58 if (isDirectory(filename, false))
59 return false;
60
61 std::ifstream infile(convertSlashes(filename).c_str());
6162 bool exists = infile.is_open();
6263 if (exists) infile.close();
6364
6869 * Returns a vector containing all filenames in a given folder with the given extension
6970 */
7071 int Filesystem::getFileList(const std::string &dir, const std::string &ext, std::vector<std::string> &files) {
71
7272 DIR *dp;
7373 struct dirent *dirp;
7474
75 if((dp = opendir(dir.c_str())) == NULL)
75 if((dp = opendir(convertSlashes(dir).c_str())) == NULL)
7676 return errno;
7777
7878 size_t extlen = ext.length();
8080 std::string filename = std::string(dirp->d_name);
8181 if (filename.length() > extlen)
8282 if(filename.substr(filename.length() - extlen,extlen) == ext)
83 files.push_back(dir + "/" + filename);
83 files.push_back(convertSlashes(dir + "/" + filename));
8484 }
8585 closedir(dp);
8686 return 0;
102102 while ((dirp = readdir(dp)) != NULL) {
103103 // do not use dirp->d_type, it's not portable
104104 std::string directory = std::string(dirp->d_name);
105 std::string mod_dir = dir + "/" + directory;
105 std::string mod_dir = convertSlashes(dir + "/" + directory);
106106 if ((stat(mod_dir.c_str(), &st) != -1)
107107 && S_ISDIR(st.st_mode)
108108 && directory != "."
116116 }
117117
118118 bool Filesystem::isDirectory(const std::string &path, bool show_error) {
119 std::string clean_path = convertSlashes(path);
119120 struct stat st;
120 if (stat(path.c_str(), &st) == -1) {
121 if (stat(clean_path.c_str(), &st) == -1) {
121122 if (show_error) {
122 std::string error_msg = "Filesystem::isDirectory (" + path + ")";
123 std::string error_msg = "Filesystem::isDirectory (" + clean_path + ")";
123124 perror(error_msg.c_str());
124125 }
125126 return false;
130131 }
131132
132133 bool Filesystem::removeFile(const std::string &file) {
133 if (remove(file.c_str()) != 0) {
134 std::string error_msg = "Filesystem::removeFile (" + file + ")";
134 std::string clean_path = convertSlashes(file);
135 if (remove(clean_path.c_str()) != 0) {
136 std::string error_msg = "Filesystem::removeFile (" + clean_path + ")";
135137 perror(error_msg.c_str());
136138 return false;
137139 }
142144 if (!isDirectory(dir))
143145 return false;
144146
145 return platform.dirRemove(dir);
147 return platform.dirRemove(convertSlashes(dir));
146148 }
147149
148150 bool Filesystem::removeDirRecursive(const std::string &dir) {
167169 }
168170
169171 /**
170 * Convert from stringstream to filesystem path string in an os-independent fashion
171 */
172 std::string Filesystem::path(const std::stringstream* ss) {
173 std::string path = ss->str();
174
175 bool is_windows_path = false;
176
177 size_t len = path.length();
178 // fix mixed '\' and '/' on windows
179 for (size_t i = 0; i < len; i++) {
180 if (path[i] == '\\') {
181 is_windows_path = true;
172 * Convert from string to filesystem path string in an os-independent fashion
173 */
174 std::string Filesystem::convertSlashes(const std::string _path) {
175 std::string path = _path;
176
177 #ifdef _WIN32
178 char good_sep = '\\';
179 char bad_sep = '/';
180 #else
181 char good_sep = '/';
182 char bad_sep = '\\';
183 #endif
184
185 for (size_t i = 0; i < path.length(); i++) {
186 if (path[i] == bad_sep) {
187 path[i] = good_sep;
182188 }
183 if (is_windows_path && path[i] == '/') {
184 // isDirectory does not like trailing '\', so terminate string if last char
185 if (i == len - 1) {
186 path[i] = 0;
187 }
188 else {
189 path[i] = '\\';
190 }
191 }
192 }
193
194 return path;
195 }
196
197 bool Filesystem::renameFile(const std::string &oldfile, const std::string &newfile) {
189 }
190
191 return removeTrailingSlash(path);
192 }
193
194 bool Filesystem::renameFile(const std::string &_oldfile, const std::string &_newfile) {
195 std::string oldfile = convertSlashes(_oldfile);
196 std::string newfile = convertSlashes(_newfile);
197
198198 if (rename(oldfile.c_str(), newfile.c_str()) != 0) {
199199 std::string error_msg = "Filesystem::renameFile (" + oldfile + " -> " + newfile + ")";
200200 perror(error_msg.c_str());
201201 return false;
202202 }
203
203204 return true;
204205 }
205206
207 std::string Filesystem::removeTrailingSlash(const std::string& path) {
208 // windows
209 if (!path.empty() && path.at(path.length()-1) == '\\')
210 return path.substr(0, path.length()-1);
211
212 // everything else
213 // allow for *nix root /
214 else if (path.length() > 1 && path.at(path.length()-1) == '/')
215 return path.substr(0, path.length()-1);
216
217 // no trailing slash found
218 else
219 return path;
220 }
3939 bool removeDir(const std::string &dir);
4040 bool removeDirRecursive(const std::string &dir);
4141
42 std::string path(const std::stringstream* ss);
42 std::string convertSlashes(const std::string _path);
4343
44 bool renameFile(const std::string &oldfile, const std::string &newfile);
44 bool renameFile(const std::string &_oldfile, const std::string &_newfile);
45
46 std::string removeTrailingSlash(const std::string& path);
4547 }
4648
4749
2121
2222 #include <cstdlib>
2323 #include <algorithm> // for std::min()/std::max()
24 #include "math.h"
24 #include <math.h>
25
26 #ifdef _MSC_VER
27 #define _USE_MATH_DEFINES
28 #endif
2529
2630 #ifndef M_PI
2731 #define M_PI 3.1415926535898f
4448 return minVal + (rand() % (d + signum(d)));
4549 }
4650
51 inline float randBetweenF(float minVal, float maxVal) {
52 if (minVal == maxVal) return minVal;
53 return minVal + ((static_cast<float>(rand()) / static_cast<float>(RAND_MAX)) * (maxVal - minVal));
54 }
55
4756 /**
4857 * Returns true with random percent chance.
4958 */
1919
2020 #include "CommonIncludes.h"
2121 #include "FontEngine.h"
22 #include "ItemManager.h"
2223 #include "Settings.h"
2324 #include "SharedResources.h"
2425 #include "UtilsParsing.h"
169170 if (!(std::stringstream(s) >> result))
170171 result = default_value;
171172 return result;
173 }
174
175 size_t Parse::toSizeT(const std::string& s, size_t default_value) {
176 size_t result;
177 if (!(std::stringstream(s) >> result))
178 result = default_value;
179 return result;
180 }
181
182 ItemID Parse::toItemID(const std::string& s, ItemID default_value) {
183 return Parse::toSizeT(s, default_value);
184 }
185
186 PowerID Parse::toPowerID(const std::string& s, PowerID default_value) {
187 return Parse::toSizeT(s, default_value);
172188 }
173189
174190 bool Parse::toBool(std::string value) {
276292 return dir;
277293 }
278294
279 int Parse::toAlignment(const std::string &s) {
280 int align = Utils::ALIGN_TOPLEFT;
295 int Parse::toAlignment(const std::string &s, int default_value) {
296 int align = default_value;
281297
282298 if (s == "topleft")
283299 align = Utils::ALIGN_TOPLEFT;
297313 align = Utils::ALIGN_BOTTOM;
298314 else if (s == "bottomright")
299315 align = Utils::ALIGN_BOTTOMRIGHT;
316 else if (s == "frame_topleft")
317 align = Utils::ALIGN_FRAME_TOPLEFT;
318 else if (s == "frame_top")
319 align = Utils::ALIGN_FRAME_TOP;
320 else if (s == "frame_topright")
321 align = Utils::ALIGN_FRAME_TOPRIGHT;
322 else if (s == "frame_left")
323 align = Utils::ALIGN_FRAME_LEFT;
324 else if (s == "frame_center")
325 align = Utils::ALIGN_FRAME_CENTER;
326 else if (s == "frame_right")
327 align = Utils::ALIGN_FRAME_RIGHT;
328 else if (s == "frame_bottomleft")
329 align = Utils::ALIGN_FRAME_BOTTOMLEFT;
330 else if (s == "frame_bottom")
331 align = Utils::ALIGN_FRAME_BOTTOM;
332 else if (s == "frame_bottomright")
333 align = Utils::ALIGN_FRAME_BOTTOMRIGHT;
300334
301335 return align;
302336 }
368402 return info;
369403 }
370404
405 ItemStack Parse::toItemQuantityPair(std::string value, bool* check_pair) {
406 ItemStack r;
407
408 if (check_pair) {
409 *check_pair = (value.find_first_of(':') != std::string::npos);
410 }
411
412 value += ':';
413 r.item = toItemID(popFirstString(value, ':'));
414 r.quantity = popFirstInt(value, ':');
415
416 // quantity is always >= 1
417 if (r.quantity == 0)
418 r.quantity = 1;
419
420 return r;
421 }
2424 #include <string>
2525 #include <typeinfo>
2626
27 class ItemStack;
2728 class LabelInfo;
2829
2930 namespace Parse {
3940 int toInt(const std::string& s, int default_value = 0);
4041 float toFloat(const std::string &s, float default_value = 0.0);
4142 unsigned long toUnsignedLong(const std::string& s, unsigned long default_value = 0);
43 size_t toSizeT(const std::string& s, size_t default_value = 0);
44 ItemID toItemID(const std::string& s, ItemID default_value = 0);
45 PowerID toPowerID(const std::string& s, PowerID default_value = 0);
4246 bool toBool(std::string value);
4347
4448 Point toPoint(std::string value);
4852
4953 int toDuration(const std::string& s);
5054 int toDirection(const std::string& s);
51 int toAlignment(const std::string& s);
55 int toAlignment(const std::string& s, int default_value = Utils::ALIGN_TOPLEFT);
5256
5357 int popFirstInt(std::string& s, char separator = 0);
5458 std::string popFirstString(std::string& s, char separator = 0);
5559 LabelInfo popLabelInfo(std::string val);
60
61 ItemStack toItemQuantityPair(std::string value, bool* check_pair = NULL);
5662 }
5763
5864 #endif
2929
3030 #include <SDL.h>
3131
32 Version VersionInfo::ENGINE(1, 9, 1);
32 Version VersionInfo::ENGINE(1, 11, 87);
3333 Version VersionInfo::MIN(0, 0, 0);
3434 Version VersionInfo::MAX(USHRT_MAX, USHRT_MAX, USHRT_MAX);
3535
2525 : in_focus(false)
2626 , focusable(false)
2727 , enable_tablist_nav(true)
28 , tablist_nav_right(false)
2829 , scroll_type(SCROLL_TWO_DIRECTIONS)
2930 , alignment(Utils::ALIGN_TOPLEFT) {
3031 }
162163 }
163164
164165 Widget* TabList::getNext(bool inner, uint8_t dir) {
165 if (widgets.empty())
166 if (widgets.empty()) {
167 if (next_tablist) {
168 // WARNING: Could result in infinite loop if all tablists are empty
169 defocus();
170 locked = true;
171 next_tablist->unlock();
172 return next_tablist->getNext(!GET_INNER, WIDGET_SELECT_AUTO);
173 }
166174 return NULL;
175 }
167176
168177 if (current_is_valid()) {
169178 if (inner && widgets.at(current)->getNext())
205214 }
206215
207216 Widget* TabList::getPrev(bool inner, uint8_t dir) {
208 if (widgets.empty())
217 if (widgets.empty()) {
218 if (prev_tablist) {
219 // WARNING: Could result in infinite loop if all tablists are empty
220 defocus();
221 locked = true;
222 prev_tablist->unlock();
223 return prev_tablist->getPrev(!GET_INNER, WIDGET_SELECT_AUTO);
224 }
209225 return NULL;
226 }
210227
211228 if (current_is_valid()) {
212229 if (inner && widgets.at(current)->getPrev())
265282 if (!widgets.at(i)->enable_tablist_nav)
266283 continue;
267284
268 FPoint p1(static_cast<float>(widgets.at(current)->pos.x), static_cast<float>(widgets.at(current)->pos.y));
269 FPoint p2(static_cast<float>(widgets.at(i)->pos.x), static_cast<float>(widgets.at(i)->pos.y));
285 Rect& c_pos = widgets.at(current)->pos;
286 Rect& i_pos = widgets.at(i)->pos;
287
288 int w_div = widgets.at(i)->tablist_nav_right ? 1 : 2;
289
290 FPoint p1(static_cast<float>(c_pos.x + c_pos.w / w_div), static_cast<float>(c_pos.y + c_pos.h / 2));
291 FPoint p2(static_cast<float>(i_pos.x + i_pos.w / w_div), static_cast<float>(i_pos.y + i_pos.h / 2));
270292
271293 if (dir == WIDGET_SELECT_LEFT && p1.x <= p2.x)
272294 continue;
391413
392414 // Also defocus if we start using the mouse
393415 // we need to disable this for touchscreen devices so that item tooltips will work
394 if (!settings->touchscreen && current != -1 && inpt->usingMouse()) {
416 if (!settings->touchscreen && current != -1 && inpt->usingMouse() && !ignore_no_mouse) {
395417 defocus();
396418 }
397419 }
4848 bool in_focus;
4949 bool focusable;
5050 bool enable_tablist_nav; // when disabled, this widget will be skipped during tablist navigation
51 bool tablist_nav_right; // uses the center-right point for tablist nav instead of the center. Primarily for MenuConfig widgets
5152 uint8_t scroll_type;
5253 Rect pos; // This is the position of the button within the screen
5354 Rect local_frame; // Local reference frame is this is a daughter widget
223223 if (inpt->usingMouse() && Utils::isWithinRect(pos, mouse) && tooltip != "") {
224224 TooltipData tip_data;
225225 tip_data.addText(tooltip);
226 tooltipm->push(tip_data, mouse, TooltipData::STYLE_FLOAT);
226 Point new_mouse(mouse.x + local_frame.x - local_offset.x, mouse.y + local_frame.y - local_offset.y);
227 tooltipm->push(tip_data, new_mouse, TooltipData::STYLE_FLOAT);
227228 }
228229 }
229230
154154 tip_data.addText(tooltip);
155155 }
156156
157 if (!tip_data.isEmpty())
158 tooltipm->push(tip_data, mouse, TooltipData::STYLE_FLOAT);
157 if (!tip_data.isEmpty()) {
158 Point new_mouse(mouse.x + local_frame.x - local_offset.x, mouse.y + local_frame.y - local_offset.y);
159 tooltipm->push(tip_data, new_mouse, TooltipData::STYLE_FLOAT);
160 }
159161 }
160162
0 /*
1 Copyright © 2018 Justin Jacobs
2
3 This file is part of FLARE.
4
5 FLARE is free software: you can redistribute it and/or modify it under the terms
6 of the GNU General Public License as published by the Free Software Foundation,
7 either version 3 of the License, or (at your option) any later version.
8
9 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
10 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
11 PARTICULAR PURPOSE. See the GNU General Public License for more details.
12
13 You should have received a copy of the GNU General Public License along with
14 FLARE. If not, see http://www.gnu.org/licenses/
15 */
16
17 /**
18 * class WidgetHorizontalList
19 */
20
21 #include "EngineSettings.h"
22 #include "FontEngine.h"
23 #include "InputState.h"
24 #include "RenderDevice.h"
25 #include "SharedResources.h"
26 #include "TooltipManager.h"
27 #include "WidgetButton.h"
28 #include "WidgetHorizontalList.h"
29
30 const std::string WidgetHorizontalList::DEFAULT_FILE_LEFT = "images/menus/buttons/left.png";
31 const std::string WidgetHorizontalList::DEFAULT_FILE_RIGHT = "images/menus/buttons/right.png";
32
33 WidgetHorizontalList::WidgetHorizontalList()
34 : Widget()
35 , button_left(new WidgetButton(DEFAULT_FILE_LEFT))
36 , button_right(new WidgetButton(DEFAULT_FILE_RIGHT))
37 , cursor(0)
38 , changed_without_mouse(false)
39 , enabled(true)
40 {
41 focusable = true;
42 scroll_type = SCROLL_HORIZONTAL;
43 refresh();
44 }
45
46 // void WidgetHorizontalList::activate() {
47 // }
48
49 void WidgetHorizontalList::setPos(int offset_x, int offset_y) {
50 Widget::setPos(offset_x, offset_y);
51 refresh();
52 }
53
54 bool WidgetHorizontalList::checkClick() {
55 return checkClickAt(inpt->mouse.x,inpt->mouse.y);
56 }
57
58 bool WidgetHorizontalList::checkClickAt(int x, int y) {
59 // enable_tablist_nav = enabled;
60
61 Point mouse(x,y);
62
63 checkTooltip(mouse);
64
65 if (button_left->checkClickAt(mouse.x, mouse.y)) {
66 scrollLeft();
67 return true;
68 }
69 else if (button_right->checkClickAt(mouse.x, mouse.y)) {
70 scrollRight();
71 return true;
72 }
73 else if (changed_without_mouse) {
74 // getNext() or getPrev() was used to change the slider, so treat it as a "click"
75 changed_without_mouse = false;
76 return true;
77 }
78
79
80 return false;
81 }
82
83 void WidgetHorizontalList::render() {
84 button_left->local_frame = local_frame;
85 button_left->local_offset = local_offset;
86
87 button_right->local_frame = local_frame;
88 button_right->local_offset = local_offset;
89
90 button_left->render();
91 button_right->render();
92
93 // render label
94 label.local_frame = local_frame;
95 label.local_offset = local_offset;
96 label.render();
97
98 if (in_focus) {
99 Point topLeft;
100 Point bottomRight;
101
102 topLeft.x = pos.x + local_frame.x - local_offset.x;
103 topLeft.y = pos.y + local_frame.y - local_offset.y;
104 bottomRight.x = topLeft.x + pos.w;
105 bottomRight.y = topLeft.y + pos.h;
106
107 // Only draw rectangle if it fits in local frame
108 bool draw = true;
109 if (local_frame.w &&
110 (topLeft.x<local_frame.x || bottomRight.x>(local_frame.x+local_frame.w))) {
111 draw = false;
112 }
113 if (local_frame.h &&
114 (topLeft.y<local_frame.y || bottomRight.y>(local_frame.y+local_frame.h))) {
115 draw = false;
116 }
117 if (draw || 1) {
118 render_device->drawRectangle(topLeft, bottomRight, eset->widgets.selection_rect_color);
119 }
120 }
121 }
122
123 void WidgetHorizontalList::refresh() {
124 const int text_width = eset->widgets.horizontal_list_text_width;
125 bool is_enabled = !isEmpty() && enabled;
126
127 label.setText(getValue());
128 label.setPos(pos.x + button_left->pos.w + text_width/2, pos.y + button_left->pos.h / 2);
129 label.setMaxWidth(text_width);
130 label.setJustify(FontEngine::JUSTIFY_CENTER);
131 label.setVAlign(LabelInfo::VALIGN_CENTER);
132 label.setColor(is_enabled ? font->getColor(FontEngine::COLOR_WIDGET_NORMAL) : font->getColor(FontEngine::COLOR_WIDGET_DISABLED));
133
134 button_left->setPos(pos.x, pos.y);
135 button_right->setPos(pos.x + button_left->pos.w + text_width, pos.y);
136
137 button_left->enabled = is_enabled;
138 button_right->enabled = is_enabled;
139
140 pos.w = button_left->pos.w + button_right->pos.w + text_width;
141 pos.h = std::max(button_left->pos.h, label.getBounds()->h);
142
143 tooltip_area.x = pos.x + button_left->pos.w;
144 tooltip_area.y = std::min(pos.y, label.getBounds()->y);
145 tooltip_area.w = text_width;
146 tooltip_area.h = std::max(button_left->pos.h, label.getBounds()->h);
147 }
148
149 void WidgetHorizontalList::checkTooltip(const Point& mouse) {
150 if (isEmpty())
151 return;
152
153 if (inpt->usingMouse() && Utils::isWithinRect(tooltip_area, mouse) && !list_items[cursor].tooltip.empty()) {
154 TooltipData tip_data;
155 tip_data.addText(list_items[cursor].tooltip);
156 Point new_mouse(mouse.x + local_frame.x - local_offset.x, mouse.y + local_frame.y - local_offset.y);
157 tooltipm->push(tip_data, new_mouse, TooltipData::STYLE_FLOAT);
158 }
159 }
160
161 void WidgetHorizontalList::append(const std::string& value, const std::string& tooltip) {
162 HListItem hli;
163 hli.value = value;
164 hli.tooltip = tooltip;
165
166 list_items.push_back(hli);
167 }
168
169 void WidgetHorizontalList::clear() {
170 list_items.clear();
171 }
172
173 std::string WidgetHorizontalList::getValue() {
174 if (cursor < getSize()) {
175 return list_items[cursor].value;
176 }
177
178 return "";
179 }
180
181 unsigned WidgetHorizontalList::getSelected() {
182 if (cursor < getSize())
183 return cursor;
184 else
185 return getSize();
186 }
187
188 unsigned WidgetHorizontalList::getSize() {
189 return static_cast<unsigned>(list_items.size());
190 }
191
192 bool WidgetHorizontalList::isEmpty() {
193 return list_items.empty();
194 }
195
196 void WidgetHorizontalList::scrollLeft() {
197 if (isEmpty())
198 return;
199
200 if (cursor == 0)
201 cursor = getSize() - 1;
202 else
203 cursor--;
204
205 refresh();
206 }
207
208 void WidgetHorizontalList::select(unsigned index) {
209 if (isEmpty())
210 return;
211
212 if (index < getSize())
213 cursor = index;
214
215 refresh();
216 }
217
218 void WidgetHorizontalList::scrollRight() {
219 if (isEmpty())
220 return;
221
222 if (cursor+1 >= getSize())
223 cursor = 0;
224 else
225 cursor++;
226
227 refresh();
228 }
229
230 bool WidgetHorizontalList::getPrev() {
231 if (!isEmpty() && enabled) {
232 scrollLeft();
233 changed_without_mouse = true;
234 }
235 return true;
236 }
237
238 bool WidgetHorizontalList::getNext() {
239 if (!isEmpty() && enabled) {
240 scrollRight();
241 changed_without_mouse = true;
242 }
243 return true;
244 }
245
246 WidgetHorizontalList::~WidgetHorizontalList() {
247 delete button_left;
248 delete button_right;
249 }
250
0 /*
1 Copyright © 2018 Justin Jacobs
2
3 This file is part of FLARE.
4
5 FLARE is free software: you can redistribute it and/or modify it under the terms
6 of the GNU General Public License as published by the Free Software Foundation,
7 either version 3 of the License, or (at your option) any later version.
8
9 FLARE is distributed in the hope that it will be useful, but WITHOUT ANY
10 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
11 PARTICULAR PURPOSE. See the GNU General Public License for more details.
12
13 You should have received a copy of the GNU General Public License along with
14 FLARE. If not, see http://www.gnu.org/licenses/
15 */
16
17 /**
18 * class WidgetHorizontalList
19 */
20
21 #ifndef WIDGET_HORIZONTALLIST_H
22 #define WIDGET_HORIZONTALLIST_H
23
24 #include "CommonIncludes.h"
25 #include "Widget.h"
26 #include "WidgetLabel.h"
27
28 class WidgetButton;
29
30 class WidgetHorizontalList : public Widget {
31 private:
32 static const std::string DEFAULT_FILE_LEFT;
33 static const std::string DEFAULT_FILE_RIGHT;
34
35 class HListItem {
36 public:
37 HListItem() {}
38 ~HListItem() {}
39
40 std::string value;
41 std::string tooltip;
42 };
43
44 void checkTooltip(const Point& mouse);
45
46 WidgetLabel label;
47 WidgetButton *button_left;
48 WidgetButton *button_right;
49
50 unsigned cursor;
51 bool changed_without_mouse;
52 std::vector<HListItem> list_items;
53 Rect tooltip_area;
54
55 public:
56 explicit WidgetHorizontalList();
57 ~WidgetHorizontalList();
58
59 void setPos(int offset_x, int offset_y);
60
61 bool checkClick();
62 bool checkClickAt(int x, int y);
63 void render();
64 void refresh();
65
66 void append(const std::string& value, const std::string& tooltip);
67 void clear();
68 std::string getValue();
69 unsigned getSelected();
70 unsigned getSize();
71 bool isEmpty();
72
73 void select(unsigned index);
74 void scrollLeft();
75 void scrollRight();
76
77 bool getPrev();
78 bool getNext();
79
80 bool enabled;
81 };
82
83 #endif
4545 void WidgetInput::setPos(int offset_x, int offset_y) {
4646 pos.x = pos_base.x + offset_x + local_frame.x - local_offset.x;
4747 pos.y = pos_base.y + offset_y + local_frame.y - local_offset.y;
48 Utils::alignToScreenEdge(alignment, &pos);
4849
4950 font->setFont("font_regular");
5051 font_pos.x = pos.x + (font->getFontHeight()/2);
4747 , update_flag(UPDATE_NONE)
4848 , hidden(false)
4949 , window_resize_flag(false)
50 , alpha(255)
5051 , label(NULL)
5152 , text("")
5253 , font_style(DEFAULT_FONT)
5455 {
5556 bounds.x = bounds.y = 0;
5657 bounds.w = bounds.h = 0;
58 enable_tablist_nav = false;
5759 }
5860
5961 void WidgetLabel::setMaxWidth(int width) {
108110 if (font_style != _font) {
109111 font_style = _font;
110112 setUpdateFlag(UPDATE_RECACHE);
113 }
114 }
115
116 void WidgetLabel::setAlpha(uint8_t _alpha) {
117 if (_alpha != alpha) {
118 alpha = _alpha;
119 setUpdateFlag(UPDATE_POS);
111120 }
112121 }
113122
164173
165174 if (label) {
166175 label->setDestFromRect(bounds);
176 label->alpha_mod = alpha;
167177 }
168178 }
169179
179189 label = NULL;
180190 }
181191
182 if (text.empty())
192 if (text.empty()) {
193 bounds.w = 0;
194 bounds.h = 0;
183195 return;
196 }
184197
185198 std::string temp_text = text;
186199
6666 int update_flag;
6767 bool hidden;
6868 bool window_resize_flag;
69 uint8_t alpha;
6970 Sprite *label;
7071
7172 std::string text;
8889 void setText(const std::string& _text);
8990 void setColor(const Color& _color);
9091 void setFont(const std::string& _font);
92 void setAlpha(uint8_t _alpha);
9193 void setFromLabelInfo(const LabelInfo& label_info);
9294
9395 std::string getText();
186186 }
187187 }
188188
189 if (!tip_data.isEmpty())
190 tooltipm->push(tip_data, mouse, TooltipData::STYLE_FLOAT);
189 if (!tip_data.isEmpty()) {
190 Point new_mouse(mouse.x + local_frame.x - local_offset.x, mouse.y + local_frame.y - local_offset.y);
191 tooltipm->push(tip_data, new_mouse, TooltipData::STYLE_FLOAT);
192 }
191193 }
192194
193195 /**
100100 Image* render_target = scroll_box->contents->getGraphics();
101101
102102 if (!separators.empty() && separators[i-1]) {
103 for (int j=padding; j<padding+content_width; ++j) {
104 render_target->drawPixel(j, y2, font->getColor(FontEngine::COLOR_WIDGET_DISABLED));
105 }
106
103 render_target->drawLine(padding, y2, padding + content_width - 1, y2, font->getColor(FontEngine::COLOR_WIDGET_DISABLED));
107104 y2 += paragraph_spacing;
108105 }
109106 font->renderShadowed(messages[i-1], padding, y2, FontEngine::JUSTIFY_LEFT, render_target, content_width, colors[i-1]);
135135
136136 int WidgetScrollBar::getValue() {
137137 return value;
138 }
139
140 Rect WidgetScrollBar::getBounds() {
141 Rect r;
142 r.x = pos_up.x;
143 r.y = pos_up.y;
144 r.w = pos_up.w;
145 r.h = (pos_up.h * 2) + bar_height;
146
147 return r;
138148 }
139149
140150 void WidgetScrollBar::render() {
4949 int checkClickAt(int x, int y);
5050 void set();
5151 int getValue();
52 Rect getBounds();
5253 void render();
5354 void refresh(int x, int y, int h, int val, int max);
5455
3939 update = true;
4040 resize(width, height);
4141 tablist = TabList();
42 tablist.setScrollType(SCROLL_VERTICAL);
42 tablist.setScrollType(SCROLL_TWO_DIRECTIONS);
4343
4444 scroll_type = SCROLL_VERTICAL;
4545 }
7676 void WidgetScrollBox::clearChildWidgets() {
7777 currentChild = -1;
7878 children.clear();
79 tablist.clear();
7980 }
8081
8182 void WidgetScrollBox::scroll(int amount) {
101102 }
102103
103104 void WidgetScrollBox::scrollDown() {
104 int contents_height = (contents ? contents->getGraphicsHeight() : 0);
105 scroll((contents_height * 5) / 100);
105 int amount = pos.h / 4;
106 scroll(amount);
106107 }
107108
108109 void WidgetScrollBox::scrollUp() {
109 int contents_height = (contents ? contents->getGraphicsHeight() : 0);
110 scroll(-((contents_height * 5) / 100));
110 int amount = pos.h / 4;
111 scroll(-amount);
112 }
113
114 void WidgetScrollBox::scrollToTop() {
115 scrollTo(0);
111116 }
112117
113118 Point WidgetScrollBox::input_assist(const Point& mouse) {
126131 void WidgetScrollBox::logic() {
127132 logic(inpt->mouse.x,inpt->mouse.y);
128133 if (in_focus) {
134 if (currentChild == -1 && !children.empty())
135 getNext();
129136 tablist.logic();
137 }
138 else {
139 // TODO don't run every frame
140 tablist.defocus();
141 currentChild = -1;
130142 }
131143 }
132144
245257 }
246258 update = false;
247259
248 if (in_focus) {
260 if (in_focus && children.empty()) {
249261 Point topLeft;
250262 Point bottomRight;
251
252 topLeft.x = dest.x + local_frame.x - local_offset.x;
253 topLeft.y = dest.y + local_frame.y - local_offset.y;
254 bottomRight.x = topLeft.x + dest.w;
255 bottomRight.y = topLeft.y + dest.h;
263 Rect sb_rect = scrollbar->getBounds();
264
265 topLeft.x = sb_rect.x + local_frame.x - local_offset.x;
266 topLeft.y = sb_rect.y + local_frame.y - local_offset.y;
267 bottomRight.x = topLeft.x + sb_rect.w;
268 bottomRight.y = topLeft.y + sb_rect.h;
256269
257270 // Only draw rectangle if it fits in local frame
258271 bool draw = true;
272285
273286 bool WidgetScrollBox::getNext() {
274287 if (children.empty()) {
288 int prev_cursor = cursor;
289 int bottom = contents ? contents->getGraphicsHeight() - pos.h : 0;
290
275291 scrollDown();
292
293 if (cursor == bottom && prev_cursor == bottom)
294 return false;
295
276296 return true;
277297 }
278298
279 if (currentChild != -1)
299 if (currentChild != -1) {
280300 children[currentChild]->in_focus = false;
281 currentChild+=1;
282 currentChild = (static_cast<unsigned>(currentChild) == children.size()) ? 0 : currentChild;
283
284 if (children[currentChild]->pos.y > (cursor + pos.h) ||
285 (children[currentChild]->pos.y + children[currentChild]->pos.h) > (cursor + pos.h)) {
286 scrollTo(children[currentChild]->pos.y+children[currentChild]->pos.h-pos.h);
287 }
288 if (children[currentChild]->pos.y < cursor ||
289 (children[currentChild]->pos.y + children[currentChild]->pos.h) < cursor) {
301 currentChild = tablist.getNextRelativeIndex(TabList::WIDGET_SELECT_DOWN);
302 tablist.setCurrent(children[currentChild]);
303 }
304 else {
305 // TODO neaten this up?
306 currentChild = 0;
307 tablist.setCurrent(children[currentChild]);
308 currentChild = tablist.getNextRelativeIndex(TabList::WIDGET_SELECT_DOWN);
309 tablist.setCurrent(children[currentChild]);
310 currentChild = tablist.getNextRelativeIndex(TabList::WIDGET_SELECT_UP);
311 tablist.setCurrent(children[currentChild]);
312 }
313
314 if (currentChild != -1) {
315 children[currentChild]->in_focus = true;
290316 scrollTo(children[currentChild]->pos.y);
291317 }
292 children[currentChild]->in_focus = true;
318 else {
319 return false;
320 }
321
293322 return true;
294323 }
295324
296325 bool WidgetScrollBox::getPrev() {
297326 if (children.empty()) {
327 int prev_cursor = cursor;
328
298329 scrollUp();
330
331 if (cursor == 0 && prev_cursor == 0)
332 return false;
333
299334 return true;
300335 }
301336
302 if (currentChild != -1)
337 if (currentChild != -1) {
303338 children[currentChild]->in_focus = false;
304 currentChild-=1;
305 currentChild = (currentChild < 0) ? static_cast<int>(children.size()) - 1 : currentChild;
306
307 if (children[currentChild]->pos.y > (cursor + pos.h) ||
308 (children[currentChild]->pos.y + children[currentChild]->pos.h) > (cursor + pos.h)) {
309 scrollTo(children[currentChild]->pos.y+children[currentChild]->pos.h-pos.h);
310 }
311 if (children[currentChild]->pos.y < cursor ||
312 (children[currentChild]->pos.y + children[currentChild]->pos.h) < cursor) {
339 currentChild = tablist.getNextRelativeIndex(TabList::WIDGET_SELECT_UP);
340 tablist.setCurrent(children[currentChild]);
341 }
342 else {
343 currentChild = 0;
344 tablist.setCurrent(children[currentChild]);
345 currentChild = tablist.getNextRelativeIndex(TabList::WIDGET_SELECT_DOWN);
346 tablist.setCurrent(children[currentChild]);
347 currentChild = tablist.getNextRelativeIndex(TabList::WIDGET_SELECT_UP);
348 tablist.setCurrent(children[currentChild]);
349 }
350
351 if (currentChild != -1) {
352 children[currentChild]->in_focus = true;
313353 scrollTo(children[currentChild]->pos.y);
314354 }
315 children[currentChild]->in_focus = true;
355 else {
356 return false;
357 }
358
316359 return true;
317360 }
318361
5555 int getCursor() {
5656 return cursor;
5757 }
58 void scrollToTop();
5859
5960 private:
6061 void scroll(int amount);
206206
207207 TooltipData tip_data;
208208 tip_data.addText(ss.str());
209 tooltipm->push(tip_data, Point(pos_knob.x + pos_knob.w*2, pos_knob.y + (pos_knob.h/2)), TooltipData::STYLE_TOPLABEL);
209 Point new_mouse;
210 new_mouse.x = pos_knob.x + (pos_knob.w * 2) + local_frame.x - local_offset.x;
211 new_mouse.y = pos_knob.y + (pos_knob.h / 2) + local_frame.y - local_offset.y;
212 tooltipm->push(tip_data, new_mouse, TooltipData::STYLE_TOPLABEL);
210213 }
211214 }
212215
3030 #include "SharedResources.h"
3131 #include "WidgetSlot.h"
3232
33 WidgetSlot::WidgetSlot(int _icon_id, int _ACTIVATE, int _size)
33 WidgetSlot::WidgetSlot(int _icon_id, int _ACTIVATE)
3434 : Widget()
3535 , slot_selected(NULL)
3636 , slot_checked(NULL)
37 , label_bg(NULL)
37 , label_amount_bg(NULL)
38 , label_hotkey_bg(NULL)
3839 , icon_id(_icon_id)
3940 , overlay_id(NO_ICON)
4041 , amount(1)
4142 , max_amount(1)
4243 , amount_str("")
4344 , activate_key(_ACTIVATE)
45 , hotkey(-1)
4446 , enabled(true)
4547 , checked(false)
4648 , pressed(false)
4850 {
4951 focusable = true;
5052 label_amount.setFromLabelInfo(eset->widgets.slot_quantity_label);
53 label_amount.setColor(eset->widgets.slot_quantity_color);
54 label_hotkey.setFromLabelInfo(eset->widgets.slot_hotkey_label);
55 label_hotkey.setColor(eset->widgets.slot_hotkey_color);
56
57 // in case the hotkey string is long (we only have a fixed set of short keynames), keep the label width to the icon size
58 // TODO should this be done for the quantity as well?
59 label_hotkey.setMaxWidth(eset->resolutions.icon_size);
5160
5261 pos.x = pos.y = 0;
5362
5766 std::string selected_filename;
5867 std::string checked_filename;
5968
60 if (_size == SIZE_SMALL) {
61 // SIZE_SMALL slots are half the size of SIZE_NORMAL slots
62 pos.w = eset->resolutions.icon_size / 2;
63 pos.h = eset->resolutions.icon_size / 2;
64 src.w = src.h = eset->resolutions.icon_size / 2;
65
66 selected_filename = "images/menus/slot_selected_small.png";
67 checked_filename = "images/menus/slot_checked_small.png";
68 }
69 else {
70 // SIZE_NORMAL
71 pos.w = eset->resolutions.icon_size;
72 pos.h = eset->resolutions.icon_size;
73 src.w = src.h = eset->resolutions.icon_size;
74
75 selected_filename = "images/menus/slot_selected.png";
76 checked_filename = "images/menus/slot_checked.png";
77 }
69 pos.w = eset->resolutions.icon_size;
70 pos.h = eset->resolutions.icon_size;
71 src.w = src.h = eset->resolutions.icon_size;
72
73 selected_filename = "images/menus/slot_selected.png";
74 checked_filename = "images/menus/slot_checked.png";
7875
7976 Image *graphics;
8077 graphics = render_device->loadImage(selected_filename, RenderDevice::ERROR_NORMAL);
9693 Widget::setPos(offset_x, offset_y);
9794
9895 label_amount.setPos(pos.x + icons->text_offset.x, pos.y + icons->text_offset.y);
99
100 if (label_bg) {
96 label_hotkey.setPos(pos.x + icons->text_offset.x, pos.y + icons->text_offset.y);
97
98 if (label_amount_bg) {
10199 Rect *r = label_amount.getBounds();
102 label_bg->setDest(r->x, r->y);
100 label_amount_bg->setDest(r->x, r->y);
101 }
102
103 if (label_hotkey_bg) {
104 Rect *r = label_hotkey.getBounds();
105 label_hotkey_bg->setDest(r->x, r->y);
103106 }
104107 }
105108
208211
209212 amount_str = Utils::abbreviateKilo(amount);
210213
211 if (amount > 1 || max_amount > 1) {
214 if ((amount > 1 || max_amount > 1) && !eset->widgets.slot_quantity_label.hidden) {
212215 label_amount.setPos(pos.x + icons->text_offset.x, pos.y + icons->text_offset.y);
213216 label_amount.setText(amount_str);
214217 label_amount.local_frame = local_frame;
215218 label_amount.local_offset = local_offset;
216219
217220 Rect* r = label_amount.getBounds();
218 if (!label_bg || label_bg->getGraphicsWidth() != r->w || label_bg->getGraphicsHeight() != r->h) {
219 if (label_bg) {
220 delete label_bg;
221 label_bg = NULL;
221 if (!label_amount_bg || label_amount_bg->getGraphicsWidth() != r->w || label_amount_bg->getGraphicsHeight() != r->h) {
222 if (label_amount_bg) {
223 delete label_amount_bg;
224 label_amount_bg = NULL;
222225 }
223226
224227 if (eset->widgets.slot_quantity_bg_color.a != 0) {
225228 Image *temp = render_device->createImage(r->w, r->h);
226229 if (temp) {
227230 temp->fillWithColor(eset->widgets.slot_quantity_bg_color);
228 label_bg = temp->createSprite();
231 label_amount_bg = temp->createSprite();
229232 temp->unref();
230233 }
231234 }
232235
233 if (label_bg) {
234 label_bg->setDest(r->x, r->y);
236 if (label_amount_bg) {
237 label_amount_bg->setDest(r->x, r->y);
238 }
239 }
240 }
241 }
242
243 void WidgetSlot::setHotkey(int key) {
244 hotkey = key;
245
246 if (hotkey != -1 && !eset->widgets.slot_hotkey_label.hidden) {
247 label_hotkey.setPos(pos.x + icons->text_offset.x, pos.y + icons->text_offset.y);
248 label_hotkey.setText(inpt->getBindingString(hotkey, InputState::BINDING_DEFAULT, InputState::GET_SHORT_STRING));
249 label_hotkey.local_frame = local_frame;
250 label_hotkey.local_offset = local_offset;
251
252 Rect* r = label_hotkey.getBounds();
253 if (!label_hotkey_bg || label_hotkey_bg->getGraphicsWidth() != r->w || label_hotkey_bg->getGraphicsHeight() != r->h) {
254 if (label_hotkey_bg) {
255 delete label_hotkey_bg;
256 label_hotkey_bg = NULL;
257 }
258
259 if (eset->widgets.slot_hotkey_bg_color.a != 0) {
260 Image *temp = render_device->createImage(r->w, r->h);
261 if (temp) {
262 temp->fillWithColor(eset->widgets.slot_hotkey_bg_color);
263 label_hotkey_bg = temp->createSprite();
264 temp->unref();
265 }
266 }
267
268 if (label_hotkey_bg) {
269 label_hotkey_bg->setDest(r->x, r->y);
235270 }
236271 }
237272 }
250285 }
251286
252287 if (amount > 1 || max_amount > 1) {
253 render_device->render(label_bg);
288 if (label_amount_bg)
289 render_device->render(label_amount_bg);
254290 label_amount.render();
255291 }
292 }
293 if (hotkey != -1) {
294 // reload the hotkey label if keybindings have changed
295 if (inpt->refresh_hotkeys)
296 setHotkey(hotkey);
297
298 if (label_hotkey_bg)
299 render_device->render(label_hotkey_bg);
300 label_hotkey.render();
256301 }
257302 renderSelection();
258303 }
280325 WidgetSlot::~WidgetSlot() {
281326 delete slot_selected;
282327 delete slot_checked;
283 delete label_bg;
284 }
328 delete label_amount_bg;
329 delete label_hotkey_bg;
330 }
3333 private:
3434 Sprite *slot_selected;
3535 Sprite *slot_checked;
36 Sprite *label_bg;
36 Sprite *label_amount_bg;
37 Sprite *label_hotkey_bg;
3738
3839 WidgetLabel label_amount;
40 WidgetLabel label_hotkey;
3941 int icon_id; // current slot id
4042 int overlay_id; // icon id for the overlay image
4143 int amount; // entries amount in slot
4244 int max_amount; // if > 1 always display amount
4345 std::string amount_str; // formatted display of amount
4446 int activate_key;
47 int hotkey; // for display in label_hotkey only
4548
4649 public:
4750 enum CLICK_TYPE {
5053 ACTIVATED = 2
5154 };
5255
53 enum {
54 SIZE_NORMAL = 0,
55 SIZE_SMALL = 1
56 };
57
5856 static const int NO_ICON = -1;
5957 static const int NO_OVERLAY = -1;
6058
61 WidgetSlot(int _icon_id, int _activate_key, int _size);
59 WidgetSlot(int _icon_id, int _activate_key);
6260 ~WidgetSlot();
6361
6462 void setPos(int offset_x, int offset_y);
7472 int getIcon();
7573 void setIcon(int _icon_id, int _overlay_id);
7674 void setAmount(int _amount, int _max_amount);
75 void setHotkey(int key);
7776 void render();
7877 void renderSelection();
7978
5555 tabs.resize(index+1);
5656 active_labels.resize(index+1);
5757 inactive_labels.resize(index+1);
58 enabled.resize(index+1);
5859 }
5960
6061 titles[index] = title;
62 enabled[index] = true;
6163 }
6264
6365 /**
7476 */
7577 void WidgetTabControl::setActiveTab(unsigned tab) {
7678 if (tab > tabs.size())
77 active_tab = 0;
79 tab = 0;
7880 else if (tab == tabs.size())
79 active_tab = static_cast<unsigned>(tabs.size())-1;
80 else
81 active_tab = tab;
81 tab = static_cast<unsigned>(tabs.size()-1);
82
83 // Set the tab. If the specified tab is not enabled, get the first enabled tab.
84 for (unsigned i = tab; tab < tabs.size(); ++i) {
85 if (enabled[i]) {
86 active_tab = i;
87 return;
88 }
89 }
90 for (unsigned i = 0; i < tab; ++i) {
91 if (enabled[i]) {
92 active_tab = i;
93 return;
94 }
95 }
96
97 // no enabled tabs, just return what we started with
98 active_tab = tab;
8299 }
83100
84101 /**
95112 tabs_area.w = 0;
96113 tabs_area.h = getTabHeight();
97114
115 int x_offset = tabs_area.x;
116
98117 // update individual tabs
99118 for (unsigned i=0; i<tabs.size(); i++) {
100119 tabs[i].y = tabs_area.y;
101120 tabs[i].h = tabs_area.h;
102121
103 if (i==0) tabs[i].x = tabs_area.x;
104 else tabs[i].x = tabs[i-1].x + tabs[i-1].w;
122 tabs[i].x = x_offset;
105123
106124 active_labels[i].setPos(tabs[i].x + eset->widgets.tab_padding.x, tabs[i].y + tabs[i].h/2 + eset->widgets.tab_padding.y);
107125 active_labels[i].setVAlign(LabelInfo::VALIGN_CENTER);
113131 inactive_labels[i].setText(titles[i]);
114132 inactive_labels[i].setColor(font->getColor(FontEngine::COLOR_WIDGET_DISABLED));
115133
116 tabs[i].w = active_labels[i].getBounds()->w + (eset->widgets.tab_padding.x * 2);
117 tabs_area.w += tabs[i].w;
118 }
134 if (enabled[i]) {
135 tabs[i].w = active_labels[i].getBounds()->w + (eset->widgets.tab_padding.x * 2);
136 tabs_area.w += tabs[i].w;
137 x_offset += tabs[i].w;
138 }
139 }
140
141 if (!enabled[active_tab])
142 getNext();
119143 }
120144
121145 /**
151175 if(Utils::isWithinRect(tabs_area, mouse) && inpt->pressing[Input::MAIN1]) {
152176 // Mark the clicked tab as active_tab.
153177 for (unsigned i=0; i<tabs.size(); i++) {
154 if(Utils::isWithinRect(tabs[i], mouse)) {
178 if(Utils::isWithinRect(tabs[i], mouse) && enabled[i]) {
155179 active_tab = i;
156180 return;
157181 }
187211 * Renders the given tab on the widget header.
188212 */
189213 void WidgetTabControl::renderTab(unsigned number) {
214 if (!enabled[number])
215 return;
216
190217 unsigned i = number;
191218 Rect src;
192219 Rect dest;
264291 }
265292
266293 bool WidgetTabControl::getNext() {
267 setActiveTab(++active_tab);
294 setActiveTab(getNextEnabledTab(active_tab));
268295 return true;
269296 }
270297
271298 bool WidgetTabControl::getPrev() {
272 setActiveTab(--active_tab);
299 setActiveTab(getPrevEnabledTab(active_tab));
273300 return true;
301 }
302
303 unsigned WidgetTabControl::getNextEnabledTab(unsigned tab) {
304 for (unsigned i = tab+1; i < tabs.size(); ++i) {
305 if (enabled[i])
306 return i;
307 }
308 return tab;
309 }
310
311 unsigned WidgetTabControl::getPrevEnabledTab(unsigned tab) {
312 for (unsigned i = tab-1; i < tabs.size(); i--) {
313 if (enabled[i])
314 return i;
315 }
316 return tab;
274317 }
275318
276319 int WidgetTabControl::getTabHeight() {
277320 return (active_tab_surface ? active_tab_surface->getGraphicsHeight() : 0);
278321 }
322
323 void WidgetTabControl::setEnabled(unsigned index, bool val) {
324 if (index >= enabled.size())
325 return;
326
327 enabled[index] = val;
328 }
2828 void loadGraphics();
2929 void renderTab(unsigned number);
3030
31 unsigned getNextEnabledTab(unsigned tab);
32 unsigned getPrevEnabledTab(unsigned tab);
33
3134 Sprite *active_tab_surface;
3235 Sprite *inactive_tab_surface;
3336
3538 std::vector<Rect> tabs; // Rectangles for each tab title on the tab header.
3639 std::vector<WidgetLabel> active_labels;
3740 std::vector<WidgetLabel> inactive_labels;
41 std::vector<bool> enabled;
3842
3943
4044 unsigned active_tab; // Index of the currently active tab.
5357
5458 int getTabHeight();
5559
60 void setEnabled(unsigned index, bool val);
61
5662 void logic();
5763 void logic(int x, int y);
5864 void render();
3030 #include "Utils.h"
3131 #include "WidgetTooltip.h"
3232
33 WidgetTooltip::WidgetTooltip() {
34 background = render_device->loadImage("images/menus/tooltips.png", RenderDevice::ERROR_NONE);
35 sprite_buf = NULL;
33 WidgetTooltip::WidgetTooltip()
34 : parent(NULL)
35 , background(render_device->loadImage("images/menus/tooltips.png", RenderDevice::ERROR_NONE))
36 , sprite_buf(NULL)
37 {
3638 }
3739
3840 WidgetTooltip::~WidgetTooltip() {
4749 * calculate the starting position of the background and text
4850 */
4951 Point WidgetTooltip::calcPosition(uint8_t style, const Point& pos, const Point& size) {
50
5152 Point tip_pos;
5253
5354 // TopLabel style is fixed and centered over the origin
6162 else if (style == TooltipData::STYLE_FLOAT) {
6263 // upper left
6364 if (pos.x < settings->view_w_half && pos.y < settings->view_h_half) {
64 tip_pos.x = pos.x + eset->tooltips.offset;
65 if (parent)
66 tip_pos.x = parent->bounds.x + parent->bounds.w;
67 else
68 tip_pos.x = pos.x + eset->tooltips.offset;
69
6570 tip_pos.y = pos.y + eset->tooltips.offset;
6671 }
6772 // upper right
6873 else if (pos.x >= settings->view_w_half && pos.y < settings->view_h_half) {
69 tip_pos.x = pos.x - eset->tooltips.offset - size.x;
74 if (parent)
75 tip_pos.x = parent->bounds.x - size.x;
76 else
77 tip_pos.x = pos.x - eset->tooltips.offset - size.x;
78
7079 tip_pos.y = pos.y + eset->tooltips.offset;
7180 }
7281 // lower left
7382 else if (pos.x < settings->view_w_half && pos.y >= settings->view_h_half) {
74 tip_pos.x = pos.x + eset->tooltips.offset;
83 if (parent)
84 tip_pos.x = parent->bounds.x + parent->bounds.w;
85 else
86 tip_pos.x = pos.x + eset->tooltips.offset;
87
7588 tip_pos.y = pos.y - eset->tooltips.offset - size.y;
7689 }
7790 // lower right
7891 else if (pos.x >= settings->view_w_half && pos.y >= settings->view_h_half) {
79 tip_pos.x = pos.x - eset->tooltips.offset - size.x;
92 if (parent)
93 tip_pos.x = parent->bounds.x - size.x;
94 else
95 tip_pos.x = pos.x - eset->tooltips.offset - size.x;
96
8097 tip_pos.y = pos.y - eset->tooltips.offset - size.y;
8198 }
8299
83100 // very large tooltips might still be off screen at this point
84101 // so we try to constrain them to the screen bounds
85102 // we give priority to being able to read the top-left of the tooltip over the bottom-right
86 if (tip_pos.x + size.x > settings->view_w) tip_pos.x = settings->view_w - size.x;
87 if (tip_pos.y + size.y > settings->view_h) tip_pos.y = settings->view_h - size.y;
88 if (tip_pos.x < 0) tip_pos.x = 0;
89 if (tip_pos.y < 0) tip_pos.y = 0;
103 // EXCEPTION: If the tooltip is a child of another, we don't constrain the x-axis
104 if (tip_pos.x + size.x > settings->view_w && !parent)
105 tip_pos.x = settings->view_w - size.x;
106
107 if (tip_pos.y + size.y > settings->view_h)
108 tip_pos.y = settings->view_h - size.y;
109
110 if (tip_pos.x < 0 && !parent)
111 tip_pos.x = 0;
112
113 if (tip_pos.y < 0)
114 tip_pos.y = 0;
90115 }
91116
92117 return tip_pos;
3838 bool createBuffer(TooltipData &tip);
3939
4040 Rect bounds;
41 WidgetTooltip *parent;
4142
4243 private:
4344 Image *background;
1414 FLARE. If not, see http://www.gnu.org/licenses/
1515 */
1616
17 #ifdef FLARE_MAP_SAVER
18
1719 #include "MapSaver.h"
1820 #include "Settings.h"
1921
2022 MapSaver::MapSaver(Map *_map) : map(_map)
2123 {
22 EVENT_COMPONENT_NAME[EC_TOOLTIP] = "tooltip";
23 EVENT_COMPONENT_NAME[EC_POWER_PATH] = "power_path";
24 EVENT_COMPONENT_NAME[EC_POWER_DAMAGE] = "power_damage";
25 EVENT_COMPONENT_NAME[EC_INTERMAP] = "intermap";
26 EVENT_COMPONENT_NAME[EC_INTRAMAP] = "intramap";
27 EVENT_COMPONENT_NAME[EC_MAPMOD] = "mapmod";
28 EVENT_COMPONENT_NAME[EC_SOUNDFX] = "soundfx";
29 EVENT_COMPONENT_NAME[EC_LOOT] = "loot"; // HALF-IMPLEMENTED
30 EVENT_COMPONENT_NAME[EC_LOOT_COUNT] = "loot_count"; // UNIMPLEMENTED
31 EVENT_COMPONENT_NAME[EC_MSG] = "msg";
32 EVENT_COMPONENT_NAME[EC_SHAKYCAM] = "shakycam";
33 EVENT_COMPONENT_NAME[EC_REQUIRES_STATUS] = "requires_status";
34 EVENT_COMPONENT_NAME[EC_REQUIRES_NOT_STATUS] = "requires_not_status";
35 EVENT_COMPONENT_NAME[EC_REQUIRES_LEVEL] = "requires_level";
36 EVENT_COMPONENT_NAME[EC_REQUIRES_NOT_LEVEL] = "requires_not_level";
37 EVENT_COMPONENT_NAME[EC_REQUIRES_CURRENCY] = "requires_currency";
38 EVENT_COMPONENT_NAME[EC_REQUIRES_NOT_CURRENCY] = "requires_not_currency";
39 EVENT_COMPONENT_NAME[EC_REQUIRES_ITEM] = "requires_item";
40 EVENT_COMPONENT_NAME[EC_REQUIRES_NOT_ITEM] = "requires_not_item";
41 EVENT_COMPONENT_NAME[EC_REQUIRES_CLASS] = "requires_class";
42 EVENT_COMPONENT_NAME[EC_REQUIRES_NOT_CLASS] = "requires_not_class";
43 EVENT_COMPONENT_NAME[EC_SET_STATUS] = "set_status";
44 EVENT_COMPONENT_NAME[EC_UNSET_STATUS] = "unset_status";
45 EVENT_COMPONENT_NAME[EC_REMOVE_CURRENCY] = "remove_currency";
46 EVENT_COMPONENT_NAME[EC_REMOVE_ITEM] = "remove_item";
47 EVENT_COMPONENT_NAME[EC_REWARD_XP] = "reward_xp";
48 EVENT_COMPONENT_NAME[EC_REWARD_CURRENCY] = "reward_currency";
49 EVENT_COMPONENT_NAME[EC_REWARD_ITEM] = "reward_item";
50 EVENT_COMPONENT_NAME[EC_RESTORE] = "restore";
51 EVENT_COMPONENT_NAME[EC_POWER] = "power";
52 EVENT_COMPONENT_NAME[EC_SPAWN] = "spawn";
53 EVENT_COMPONENT_NAME[EC_STASH] = "stash";
54 EVENT_COMPONENT_NAME[EC_NPC] = "npc";
55 EVENT_COMPONENT_NAME[EC_MUSIC] = "music";
56 EVENT_COMPONENT_NAME[EC_CUTSCENE] = "cutscene";
57 EVENT_COMPONENT_NAME[EC_REPEAT] = "repeat";
58 EVENT_COMPONENT_NAME[EC_SAVE_GAME] = "save_game";
59 EVENT_COMPONENT_NAME[EC_BOOK] = "book";
24 EVENT_COMPONENT_NAME[EC::TOOLTIP] = "tooltip";
25 EVENT_COMPONENT_NAME[EC::POWER_PATH] = "power_path";
26 EVENT_COMPONENT_NAME[EC::POWER_DAMAGE] = "power_damage";
27 EVENT_COMPONENT_NAME[EC::INTERMAP] = "intermap";
28 EVENT_COMPONENT_NAME[EC::INTRAMAP] = "intramap";
29 EVENT_COMPONENT_NAME[EC::MAPMOD] = "mapmod";
30 EVENT_COMPONENT_NAME[EC::SOUNDFX] = "soundfx";
31 EVENT_COMPONENT_NAME[EC::LOOT] = "loot"; // HALF-IMPLEMENTED
32 EVENT_COMPONENT_NAME[EC::LOOT_COUNT] = "loot_count"; // UNIMPLEMENTED
33 EVENT_COMPONENT_NAME[EC::MSG] = "msg";
34 EVENT_COMPONENT_NAME[EC::SHAKYCAM] = "shakycam";
35 EVENT_COMPONENT_NAME[EC::REQUIRES_STATUS] = "requires_status";
36 EVENT_COMPONENT_NAME[EC::REQUIRES_NOT_STATUS] = "requires_not_status";
37 EVENT_COMPONENT_NAME[EC::REQUIRES_LEVEL] = "requires_level";
38 EVENT_COMPONENT_NAME[EC::REQUIRES_NOT_LEVEL] = "requires_not_level";
39 EVENT_COMPONENT_NAME[EC::REQUIRES_CURRENCY] = "requires_currency";
40 EVENT_COMPONENT_NAME[EC::REQUIRES_NOT_CURRENCY] = "requires_not_currency";
41 EVENT_COMPONENT_NAME[EC::REQUIRES_ITEM] = "requires_item";
42 EVENT_COMPONENT_NAME[EC::REQUIRES_NOT_ITEM] = "requires_not_item";
43 EVENT_COMPONENT_NAME[EC::REQUIRES_CLASS] = "requires_class";
44 EVENT_COMPONENT_NAME[EC::REQUIRES_NOT_CLASS] = "requires_not_class";
45 EVENT_COMPONENT_NAME[EC::SET_STATUS] = "set_status";
46 EVENT_COMPONENT_NAME[EC::UNSET_STATUS] = "unset_status";
47 EVENT_COMPONENT_NAME[EC::REMOVE_CURRENCY] = "remove_currency";
48 EVENT_COMPONENT_NAME[EC::REMOVE_ITEM] = "remove_item";
49 EVENT_COMPONENT_NAME[EC::REWARD_XP] = "reward_xp";
50 EVENT_COMPONENT_NAME[EC::REWARD_CURRENCY] = "reward_currency";
51 EVENT_COMPONENT_NAME[EC::REWARD_ITEM] = "reward_item";
52 EVENT_COMPONENT_NAME[EC::RESTORE] = "restore";
53 EVENT_COMPONENT_NAME[EC::POWER] = "power";
54 EVENT_COMPONENT_NAME[EC::SPAWN] = "spawn";
55 EVENT_COMPONENT_NAME[EC::STASH] = "stash";
56 EVENT_COMPONENT_NAME[EC::NPC] = "npc";
57 EVENT_COMPONENT_NAME[EC::MUSIC] = "music";
58 EVENT_COMPONENT_NAME[EC::CUTSCENE] = "cutscene";
59 EVENT_COMPONENT_NAME[EC::REPEAT] = "repeat";
60 EVENT_COMPONENT_NAME[EC::SAVE_GAME] = "save_game";
61 EVENT_COMPONENT_NAME[EC::BOOK] = "book";
62 EVENT_COMPONENT_NAME[EC::SCRIPT] = "script";
63 EVENT_COMPONENT_NAME[EC::CHANCE_EXEC] = "chance_exec";
64 EVENT_COMPONENT_NAME[EC::RESPEC] = "respec";
6065
6166 dest_file = map->getFilename();
6267 }
360365 {
361366 Event_Component e = components[i];
362367
363 if (e.type > 0 && e.type < 39)
368 if (e.type > 0 && e.type < EC_COUNT)
364369 {
365370 map_file << EVENT_COMPONENT_NAME[e.type] << "=";
366371 }
369374 continue;
370375 }
371376
372 if (e.type == EC_TOOLTIP) {
373 map_file << e.s << std::endl;
374 }
375 else if (e.type == EC_POWER_PATH) {
377 if (e.type == EC::TOOLTIP) {
378 map_file << e.s << std::endl;
379 }
380 else if (e.type == EC::POWER_PATH) {
376381 map_file << e.x << "," << e.y << ",";
377382 if (e.s == "hero")
378383 {
383388 map_file << e.a << "," << e.b << std::endl;
384389 }
385390 }
386 else if (e.type == EC_POWER_DAMAGE) {
391 else if (e.type == EC::POWER_DAMAGE) {
387392 map_file << e.a << "," << e.b << std::endl;
388393 }
389 else if (e.type == EC_INTERMAP) {
394 else if (e.type == EC::INTERMAP) {
390395 map_file << e.s << "," << e.x << "," << e.y << std::endl;
391396 }
392 else if (e.type == EC_INTRAMAP) {
397 else if (e.type == EC::INTRAMAP) {
393398 map_file << e.x << "," << e.y << std::endl;
394399 }
395 else if (e.type == EC_MAPMOD) {
400 else if (e.type == EC::MAPMOD) {
396401 map_file << e.s << "," << e.x << "," << e.y << "," << e.z;
397402
398 while (i+1 < components.size() && components[i+1].type == EC_MAPMOD)
403 while (i+1 < components.size() && components[i+1].type == EC::MAPMOD)
399404 {
400405 i++;
401406 e = components[i];
403408 }
404409 map_file << std::endl;
405410 }
406 else if (e.type == EC_SOUNDFX) {
411 else if (e.type == EC::SOUNDFX) {
407412 map_file << e.s;
408413 if (e.x != -1 && e.y != -1)
409414 {
411416 }
412417 map_file << std::endl;
413418 }
414 else if (e.type == EC_LOOT) {
419 else if (e.type == EC::LOOT) {
415420
416421 std::stringstream chance;
417422
422427
423428 map_file << e.s << "," << chance.str() << "," << e.a << "," << e.b;
424429
425 while (i+1 < components.size() && components[i+1].type == EC_LOOT)
430 while (i+1 < components.size() && components[i+1].type == EC::LOOT)
426431 {
427432 i++;
428433 e = components[i];
438443 // UNIMPLEMENTED
439444 // Loot tables not supported
440445 }
441 else if (e.type == EC_LOOT_COUNT) {
446 else if (e.type == EC::LOOT_COUNT) {
442447 // UNIMPLEMENTED
443448 // Loot count not supported
444449 map_file << std::endl;
445450 }
446 else if (e.type == EC_MSG) {
447 map_file << e.s << std::endl;
448 }
449 else if (e.type == EC_SHAKYCAM) {
451 else if (e.type == EC::MSG) {
452 map_file << e.s << std::endl;
453 }
454 else if (e.type == EC::SHAKYCAM) {
450455 std::string suffix = "ms";
451456 int value = static_cast<int>(1000.f * e.x / MAX_FRAMES_PER_SEC);
452457 if (value % 1000 == 0)
456461 }
457462 map_file << value << suffix << std::endl;
458463 }
459 else if (e.type == EC_REQUIRES_STATUS) {
464 else if (e.type == EC::REQUIRES_STATUS) {
460465 map_file << e.s;
461466
462 while (i+1 < components.size() && components[i+1].type == EC_REQUIRES_STATUS)
467 while (i+1 < components.size() && components[i+1].type == EC::REQUIRES_STATUS)
463468 {
464469 i++;
465470 e = components[i];
467472 }
468473 map_file << std::endl;
469474 }
470 else if (e.type == EC_REQUIRES_NOT_STATUS) {
475 else if (e.type == EC::REQUIRES_NOT_STATUS) {
471476 map_file << e.s;
472477
473 while (i+1 < components.size() && components[i+1].type == EC_REQUIRES_NOT_STATUS)
478 while (i+1 < components.size() && components[i+1].type == EC::REQUIRES_NOT_STATUS)
474479 {
475480 i++;
476481 e = components[i];
478483 }
479484 map_file << std::endl;
480485 }
481 else if (e.type == EC_REQUIRES_LEVEL) {
482 map_file << e.x << std::endl;
483 }
484 else if (e.type == EC_REQUIRES_NOT_LEVEL) {
485 map_file << e.x << std::endl;
486 }
487 else if (e.type == EC_REQUIRES_CURRENCY) {
488 map_file << e.x << std::endl;
489 }
490 else if (e.type == EC_REQUIRES_NOT_CURRENCY) {
491 map_file << e.x << std::endl;
492 }
493 else if (e.type == EC_REQUIRES_ITEM) {
486 else if (e.type == EC::REQUIRES_LEVEL) {
487 map_file << e.x << std::endl;
488 }
489 else if (e.type == EC::REQUIRES_NOT_LEVEL) {
490 map_file << e.x << std::endl;
491 }
492 else if (e.type == EC::REQUIRES_CURRENCY) {
493 map_file << e.x << std::endl;
494 }
495 else if (e.type == EC::REQUIRES_NOT_CURRENCY) {
496 map_file << e.x << std::endl;
497 }
498 else if (e.type == EC::REQUIRES_ITEM) {
494499 map_file << e.x;
495500
496 while (i+1 < components.size() && components[i+1].type == EC_REQUIRES_ITEM)
501 while (i+1 < components.size() && components[i+1].type == EC::REQUIRES_ITEM)
497502 {
498503 i++;
499504 e = components[i];
501506 }
502507 map_file << std::endl;
503508 }
504 else if (e.type == EC_REQUIRES_NOT_ITEM) {
509 else if (e.type == EC::REQUIRES_NOT_ITEM) {
505510 map_file << e.x;
506511
507 while (i+1 < components.size() && components[i+1].type == EC_REQUIRES_NOT_ITEM)
512 while (i+1 < components.size() && components[i+1].type == EC::REQUIRES_NOT_ITEM)
508513 {
509514 i++;
510515 e = components[i];
512517 }
513518 map_file << std::endl;
514519 }
515 else if (e.type == EC_REQUIRES_CLASS) {
516 map_file << e.s << std::endl;
517 }
518 else if (e.type == EC_REQUIRES_NOT_CLASS) {
519 map_file << e.s << std::endl;
520 }
521 else if (e.type == EC_SET_STATUS) {
520 else if (e.type == EC::REQUIRES_CLASS) {
521 map_file << e.s << std::endl;
522 }
523 else if (e.type == EC::REQUIRES_NOT_CLASS) {
524 map_file << e.s << std::endl;
525 }
526 else if (e.type == EC::SET_STATUS) {
522527 map_file << e.s;
523528
524 while (i+1 < components.size() && components[i+1].type == EC_SET_STATUS)
529 while (i+1 < components.size() && components[i+1].type == EC::SET_STATUS)
525530 {
526531 i++;
527532 e = components[i];
529534 }
530535 map_file << std::endl;
531536 }
532 else if (e.type == EC_UNSET_STATUS) {
537 else if (e.type == EC::UNSET_STATUS) {
533538 map_file << e.s;
534539
535 while (i+1 < components.size() && components[i+1].type == EC_UNSET_STATUS)
540 while (i+1 < components.size() && components[i+1].type == EC::UNSET_STATUS)
536541 {
537542 i++;
538543 e = components[i];
540545 }
541546 map_file << std::endl;
542547 }
543 else if (e.type == EC_REMOVE_CURRENCY) {
544 map_file << e.x << std::endl;
545 }
546 else if (e.type == EC_REMOVE_ITEM) {
548 else if (e.type == EC::REMOVE_CURRENCY) {
549 map_file << e.x << std::endl;
550 }
551 else if (e.type == EC::REMOVE_ITEM) {
547552 map_file << e.x;
548553
549 while (i+1 < components.size() && components[i+1].type == EC_REMOVE_ITEM)
554 while (i+1 < components.size() && components[i+1].type == EC::REMOVE_ITEM)
550555 {
551556 i++;
552557 e = components[i];
554559 }
555560 map_file << std::endl;
556561 }
557 else if (e.type == EC_REWARD_XP) {
558 map_file << e.x << std::endl;
559 }
560 else if (e.type == EC_REWARD_CURRENCY) {
561 map_file << e.x << std::endl;
562 }
563 else if (e.type == EC_REWARD_ITEM) {
562 else if (e.type == EC::REWARD_XP) {
563 map_file << e.x << std::endl;
564 }
565 else if (e.type == EC::REWARD_CURRENCY) {
566 map_file << e.x << std::endl;
567 }
568 else if (e.type == EC::REWARD_ITEM) {
564569 map_file << e.x << ",";
565570 map_file << e.y << std::endl;
566571 }
567 else if (e.type == EC_RESTORE) {
568 map_file << e.s << std::endl;
569 }
570 else if (e.type == EC_POWER) {
571 map_file << e.x << std::endl;
572 }
573 else if (e.type == EC_SPAWN) {
572 else if (e.type == EC::RESTORE) {
573 map_file << e.s << std::endl;
574 }
575 else if (e.type == EC::POWER) {
576 map_file << e.x << std::endl;
577 }
578 else if (e.type == EC::SPAWN) {
574579 map_file << e.s << "," << e.x << "," << e.y;
575580
576 while (i+1 < components.size() && components[i+1].type == EC_SPAWN)
581 while (i+1 < components.size() && components[i+1].type == EC::SPAWN)
577582 {
578583 i++;
579584 e = components[i];
581586 }
582587 map_file << std::endl;
583588 }
584 else if (e.type == EC_STASH) {
585 map_file << e.s << std::endl;
586 }
587 else if (e.type == EC_NPC) {
588 map_file << e.s << std::endl;
589 }
590 else if (e.type == EC_MUSIC) {
591 map_file << e.s << std::endl;
592 }
593 else if (e.type == EC_CUTSCENE) {
594 map_file << e.s << std::endl;
595 }
596 else if (e.type == EC_REPEAT) {
597 map_file << e.s << std::endl;
598 }
599 else if (e.type == EC_SAVE_GAME) {
600 map_file << e.s << std::endl;
601 }
602 else if (e.type == EC_BOOK) {
603 map_file << e.s << std::endl;
604 }
589 else if (e.type == EC::STASH) {
590 map_file << e.s << std::endl;
591 }
592 else if (e.type == EC::NPC) {
593 map_file << e.s << std::endl;
594 }
595 else if (e.type == EC::MUSIC) {
596 map_file << e.s << std::endl;
597 }
598 else if (e.type == EC::CUTSCENE) {
599 map_file << e.s << std::endl;
600 }
601 else if (e.type == EC::REPEAT) {
602 map_file << e.s << std::endl;
603 }
604 else if (e.type == EC::SAVE_GAME) {
605 map_file << e.s << std::endl;
606 }
607 else if (e.type == EC::BOOK) {
608 map_file << e.s << std::endl;
609 }
610 else if (e.type == EC::SCRIPT) {
611 map_file << e.s << std::endl;
612 }
613 else if (e.type == EC::CHANCE_EXEC) {
614 map_file << e.x << std::endl;
615 }
616 else if (e.type == EC::RESPEC) {
617 if (e.x == 3)
618 map_file << "xp";
619 else if (e.x == 2)
620 map_file << "stats";
621 else if (e.x == 1)
622 map_file << "powers";
623
624 map_file << "," << e.y << endl;
605625 }
606626 }
627
628 #endif //FLARE_MAP_SAVER
629
1717 /*
1818 * class MapSaver
1919 */
20
21 #ifdef FLARE_MAP_SAVER
2022
2123 #ifndef MAP_SAVER_H
2224 #define MAP_SAVER_H
4345 Map* map;
4446 std::string dest_file;
4547
46 std::string EVENT_COMPONENT_NAME[39];
48 static const int EC_COUNT = 43;
49
50 std::string EVENT_COMPONENT_NAME[EC_COUNT];
51
52 class EC {
53 public:
54 enum {
55 NONE = 0,
56 TOOLTIP = 1,
57 POWER_PATH = 2,
58 POWER_DAMAGE = 3,
59 INTERMAP = 4,
60 INTRAMAP = 5,
61 MAPMOD = 6,
62 SOUNDFX = 7,
63 LOOT = 8,
64 LOOT_COUNT = 9,
65 MSG = 10,
66 SHAKYCAM = 11,
67 REQUIRES_STATUS = 12,
68 REQUIRES_NOT_STATUS = 13,
69 REQUIRES_LEVEL = 14,
70 REQUIRES_NOT_LEVEL = 15,
71 REQUIRES_CURRENCY = 16,
72 REQUIRES_NOT_CURRENCY = 17,
73 REQUIRES_ITEM = 18,
74 REQUIRES_NOT_ITEM = 19,
75 REQUIRES_CLASS = 20,
76 REQUIRES_NOT_CLASS = 21,
77 SET_STATUS = 22,
78 UNSET_STATUS = 23,
79 REMOVE_CURRENCY = 24,
80 REMOVE_ITEM = 25,
81 REWARD_XP = 26,
82 REWARD_CURRENCY = 27,
83 REWARD_ITEM = 28,
84 REWARD_LOOT = 29,
85 REWARD_LOOT_COUNT = 30,
86 RESTORE = 31,
87 POWER = 32,
88 SPAWN = 33,
89 STASH = 34,
90 NPC = 35,
91 MUSIC = 36,
92 CUTSCENE = 37,
93 REPEAT = 38,
94 SAVE_GAME = 39,
95 BOOK = 40,
96 SCRIPT = 41,
97 CHANCE_EXEC = 42,
98 RESPEC = 43,
99 };
100
101 int type;
102 std::string s;
103 StatusID status;
104 int x;
105 int y;
106 int z;
107 int a;
108 int b;
109 int c;
110 float f;
111
112 EC()
113 : type(NONE)
114 , s("")
115 , status(0)
116 , x(0)
117 , y(0)
118 , z(0)
119 , a(0)
120 , b(0)
121 , c(0)
122 , f(0) {
123 }
124 };
125
47126 };
48127
49128 #endif //MAP_SAVER
129
130 #endif //FLARE_MAP_SAVER
8888 Utils::createLogFile();
8989 Utils::logInfo(VersionInfo::createVersionStringFull().c_str());
9090
91 // log common paths
92 Utils::logInfo("main: PATH_CONF = '%s'", settings->path_conf.c_str());
93 Utils::logInfo("main: PATH_USER = '%s'", settings->path_user.c_str());
94 Utils::logInfo("main: PATH_DATA = '%s'", settings->path_data.c_str());
95
9196 // SDL Inits
9297 if ( SDL_Init (SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK) < 0 ) {
9398 Utils::logError("main: Could not initialize SDL: %s", SDL_GetError());
117122 font = getFontEngine();
118123 anim = new AnimationManager();
119124 comb = new CombatText();
120 inpt = getInputManager();
121 icons = NULL;
122125
123126 // Load miscellaneous settings
124127 eset = new EngineSettings();
125128 eset->load();
129
130 inpt = getInputManager();
131 icons = NULL;
132
126133 Stats::init();
127134
128135 // platform-specific default screen size
129136 platform.setScreenSize();
130137
131138 // Create render Device and Rendering Context.
132 if (platform.default_renderer != "")
139 if (settings->safe_video)
140 render_device = getRenderDevice(settings->render_device_name);
141 else if (platform.default_renderer != "")
133142 render_device = getRenderDevice(platform.default_renderer);
134143 else if (cmd_line_args.render_device_name != "")
135144 render_device = getRenderDevice(cmd_line_args.render_device_name);
357366 settings->custom_path_data = std::string(getenv("HOME")) + "/" + path_end;
358367 }
359368
360 if (!settings->custom_path_data.empty() && settings->custom_path_data.at(settings->custom_path_data.length()-1) != '/')
361 settings->custom_path_data += "/";
369 if (!settings->custom_path_data.empty()) {
370 settings->custom_path_data = Filesystem::removeTrailingSlash(settings->custom_path_data);
371 }
362372
363373 if (Filesystem::pathExists(settings->custom_path_data)) {
364374 Utils::logInfo("Custom data path: \"%s\"", settings->custom_path_data.c_str());
375 settings->custom_path_data += "/";
365376 }
366377 else {
367378 Utils::logError("Invalid custom data path: \"%s\"", settings->custom_path_data.c_str());
369380 }
370381 }
371382 else if (arg == "version") {
372 printf("%s\n", VersionInfo::createVersionStringFull().c_str());
383 Utils::logInfo("%s", VersionInfo::createVersionStringFull().c_str());
373384 done = true;
374385 }
375386 else if (arg == "renderer") {
390401 else if (arg == "load-script") {
391402 settings->load_script = parseArgValue(arg_full);
392403 }
404 else if (arg == "safe-video") {
405 settings->safe_video = true;
406 }
393407 else if (arg == "help") {
394 printf("\
408 Utils::logInfo("Command line options:\n\
395409 --help Prints this message.\n\
396410 --version Prints the release version.\n\
397411 --data-path=<PATH> Specifies an exact path to look for mod data.\n\
402416 --mods=<MOD>,... Starts the game with only these mods enabled.\n\
403417 --load-slot=<SLOT> Loads a save slot by numerical index.\n\
404418 --load-script=<SCRIPT> Execute's a script upon loading a saved game.\n\
405 The script path is mod-relative.\n");
419 The script path is mod-relative.\n\
420 --safe-video Launches with the minimum video settings.");
406421 done = true;
407422 }
408423 else {
415430 srand(static_cast<unsigned int>(time(NULL)));
416431 #ifdef __EMSCRIPTEN__
417432 platform.FSInit();
418 emscripten_set_main_loop(EmscriptenMainLoop, 0, 1);
433 emscripten_set_main_loop(EmscriptenMainLoop, settings->max_frames_per_sec, 1);
419434 #else
420435 init(cmd_line_args);
421436
0 <?xml version="1.0"?>
1 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
2
3 <xsl:template name="escape_underscore">
4 <xsl:param name="text" />
5 <xsl:choose>
6 <xsl:when test="contains($text, '_')">
7 <xsl:value-of select="substring-before($text,'_')" />
8 <xsl:value-of select="'\_'" />
9 <xsl:call-template name="escape_underscore">
10 <xsl:with-param name="text" select="substring-after($text,'_')" />
11 </xsl:call-template>
12 </xsl:when>
13 <xsl:otherwise>
14 <xsl:value-of select="$text" />
15 </xsl:otherwise>
16 </xsl:choose>
17 </xsl:template>
18
19 <xsl:template match="/classes">
20 <xsl:for-each select="class">
21 <xsl:text>&#xa;</xsl:text>
22 <xsl:variable name="class-name">
23 <xsl:call-template name="escape_underscore">
24 <xsl:with-param name="text" select="@name" />
25 </xsl:call-template>
26 </xsl:variable>
27 <xsl:variable name="class-desc">
28 <xsl:call-template name="escape_underscore">
29 <xsl:with-param name="text" select="description" />
30 </xsl:call-template>
31 </xsl:variable>
32 <xsl:if test="attributes/attribute">
33 ***
34 #### <xsl:value-of select="$class-name"/>
35 <xsl:text>&#xa;</xsl:text>
36 <xsl:value-of select="$class-desc"/>
37 <xsl:text>&#xa;</xsl:text>
38 </xsl:if>
39 <xsl:for-each select="attributes/attribute">
40 <xsl:variable name="attr-name">
41 <xsl:call-template name="escape_underscore">
42 <xsl:with-param name="text" select="@name" />
43 </xsl:call-template>
44 </xsl:variable>
45 <xsl:variable name="attr-type">
46 <!-- Don't need to escape this because we put it in code tags -->
47 <xsl:value-of select="@type"/>
48 </xsl:variable>
49 <xsl:variable name="attr-vars">
50 <!-- Don't need to escape this because we put it in code tags -->
51 <xsl:value-of select="@vars"/>
52 </xsl:variable>
53 <xsl:variable name="attr-desc">
54 <xsl:call-template name="escape_underscore">
55 <xsl:with-param name="text" select="." />
56 </xsl:call-template>
57 </xsl:variable>
58 **<xsl:value-of select="$attr-name"/>** | `<xsl:value-of select="$attr-type"/><xsl:if test="$attr-vars != ''"> : <xsl:value-of select="$attr-vars"/></xsl:if>` | <xsl:value-of select="$attr-desc"/>
59 <xsl:text>&#xa;</xsl:text>
60 </xsl:for-each>
61 <xsl:text>&#xa;</xsl:text>
62 </xsl:for-each>
63 ***
64 ### Predefined Strings
65 <xsl:text>&#xa;</xsl:text>
66 Below are some strings that are used in various attributes.
67 <xsl:for-each select="class">
68 <xsl:text>&#xa;</xsl:text>
69 <xsl:variable name="class-name">
70 <xsl:call-template name="escape_underscore">
71 <xsl:with-param name="text" select="@name" />
72 </xsl:call-template>
73 </xsl:variable>
74 <xsl:variable name="class-desc">
75 <xsl:call-template name="escape_underscore">
76 <xsl:with-param name="text" select="description" />
77 </xsl:call-template>
78 </xsl:variable>
79 <xsl:if test="attributes/type">
80 ***
81 #### <xsl:value-of select="$class-name"/>
82 <xsl:text>&#xa;</xsl:text>
83 <xsl:value-of select="$class-desc"/>
84 <xsl:text>&#xa;</xsl:text>
85 </xsl:if>
86 <xsl:for-each select="attributes/type">
87 <xsl:variable name="type-name">
88 <xsl:call-template name="escape_underscore">
89 <xsl:with-param name="text" select="@name" />
90 </xsl:call-template>
91 </xsl:variable>
92 <xsl:variable name="type-desc">
93 <xsl:call-template name="escape_underscore">
94 <xsl:with-param name="text" select="." />
95 </xsl:call-template>
96 </xsl:variable>
97 **<xsl:value-of select="$type-name"/>** | <xsl:value-of select="$type-desc"/>
98 <xsl:text>&#xa;</xsl:text>
99 </xsl:for-each>
100 <xsl:text>&#xa;</xsl:text>
101 </xsl:for-each>
102 <xsl:text>&#xa;</xsl:text>
103 </xsl:template>
104
105 </xsl:stylesheet>
106