diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index 02bfc3d065ca..e8423a5704ce 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -5,7 +5,17 @@ NOTE: Please grant permission for repository maintainers to edit your PR. It is
CODE STYLE: please follow below guide.
JSON: https://github.com/cataclysmbnteam/Cataclysm-BN/blob/upload/doc/JSON_STYLE.md
-C++: https://github.com/cataclysmbnteam/Cataclysm-BN/blob/upload/doc/CODE_STYLE.md
+C++ and Markdown: https://github.com/cataclysmbnteam/Cataclysm-BN/blob/upload/doc/CODE_STYLE.md
+
+!!!!!!!!!! WARNING !!!!!!!!!!
+
+If you forget to format the PR, autofix.ci app will run automated format commit for you.
+When this happens, YOU MUST DO EITHER OF THE FOLLOWING:
+
+- Run `git pull` to merge the automated commit into your PR branch.
+- Format your code locally, and force push to your PR branch.
+
+If you don't do this, your following work will be based on the old commit, and cause MERGE CONFLICT.
-->
#### Summary
diff --git a/.github/workflows/autofix.yml b/.github/workflows/autofix.yml
new file mode 100644
index 000000000000..5446dbae4a90
--- /dev/null
+++ b/.github/workflows/autofix.yml
@@ -0,0 +1,37 @@
+name: autofix.ci # needed to securely identify the workflow
+
+on:
+ pull_request:
+ paths: ["**.json", "**.cpp", "**.hpp", "**.h", "**.c"]
+
+permissions:
+ contents: read
+
+jobs:
+ autofix:
+ runs-on: ubuntu-22.04
+ permissions:
+ contents: write
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - run: sudo apt-get install astyle
+
+ - uses: denoland/setup-deno@v1
+ with:
+ deno-version: v1.x
+
+ - name: format C++ files
+ run: make astyle
+
+ - name: format markdown files
+ run: deno fmt
+
+ - name: json formatting
+ run: make style-all-json-parallel RELEASE=1
+
+ - uses: autofix-ci/action@8caa572fd27b0019a65e4c695447089c8d3138b9
+ if: ${{ always() }}
+ with:
+ commit-message: "style(autofix.ci): automated formatting"
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
deleted file mode 100644
index 95cdfb373bcb..000000000000
--- a/.github/workflows/lint.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-name: Code Style Check
-
-on:
- pull_request_target:
- paths: ["**.json", "**.cpp", "**.hpp", "**.h", "**.c"]
- pull_request:
- paths: ["**.json", "**.cpp", "**.hpp", "**.h", "**.c"]
-
-concurrency:
- group: ${{ github.workflow }}-${{ github.event.pull_request.number }}-${{ github.event_name }}
- cancel-in-progress: true
-
-jobs:
- lint:
- if: ${{ github.event_name == 'pull_request_target' }}
- runs-on: ubuntu-22.04
- steps:
- - uses: actions/checkout@v3
- with:
- ref: ${{ github.event.pull_request.head.sha }}
-
- - run: sudo apt-get install astyle
- - run: make astyle
- - run: make style-all-json-parallel RELEASE=1
-
- - uses: reviewdog/action-suggester@v1
- if: ${{ always() }}
- with:
- tool_name: astyle, style-json
diff --git a/.github/workflows/matrix.yml b/.github/workflows/matrix.yml
index a59936cd6507..3e2f8d71acb8 100644
--- a/.github/workflows/matrix.yml
+++ b/.github/workflows/matrix.yml
@@ -33,6 +33,7 @@ jobs:
sound: 0
lua: 0
test-stage: 1
+ libbacktrace: 1
title: GCC 12, Ubuntu, Curses
native: linux64
- compiler: g++-12
@@ -51,9 +52,10 @@ jobs:
sound: 1
lua: 1
test-stage: 1
- title: GCC 11, Ubuntu, Tiles, Sound, Lua
+ libbacktrace: 1
+ title: GCC 12, Ubuntu, Tiles, Sound, Lua
native: linux64
- - compiler: g++-11
+ - compiler: g++-12
os: ubuntu-22.04
cmake: 0
tiles: 1
@@ -95,6 +97,7 @@ jobs:
TEST_STAGE: ${{ matrix.test-stage }}
LANGUAGES: ${{ matrix.languages }}
EXTRA_TEST_OPTS:
+ LIBBACKTRACE: ${{ matrix.libbacktrace }}
NATIVE: ${{ matrix.native }}
RELEASE: 1
SKIP: ${{ needs.skip-duplicates.outputs.should_skip == 'true' }}
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b17c6c399481..295b46baf743 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -31,6 +31,7 @@ set(CATA_CLANG_TIDY_INCLUDE_DIR "" CACHE STRING "Path to internal clang-tidy hea
set(CATA_CHECK_CLANG_TIDY "" CACHE STRING "Path to check_clang_tidy.py for plugin tests")
set(GIT_BINARY "" CACHE STRING "Git binary name or path.")
set(PREFIX "" CACHE STRING "Location of Data & GFX directories")
+set(LINKER "" CACHE STRING "Custom Linker to use")
include(CTest)
@@ -52,6 +53,10 @@ MESSAGE(STATUS "${PROJECT} build environment -- \n")
MESSAGE(STATUS "Build realm is : ${CMAKE_SYSTEM_NAME} ${CMAKE_HOST_SYSTEM_PROCESSOR}")
+IF(LINKER)
+ add_link_options("-fuse-ld=${LINKER}")
+ENDIF()
+
IF(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Debug)
ENDIF(NOT CMAKE_BUILD_TYPE)
@@ -62,7 +67,7 @@ if (NOT ${GIT_VERSION} MATCHES GIT-NOTFOUND)
string(REPLACE "-NOTFOUND" "" GIT_VERSION ${GIT_VERSION})
FILE(WRITE ${CMAKE_SOURCE_DIR}/src/version.h
"// NOLINT(cata-header-guard)\n\#define VERSION \"${GIT_VERSION}\"\n")
- MESSAGE(STATUS "${PROJECT_NAME} build version is : ${GIT_VERSION}\n")
+ MESSAGE(STATUS "${PROJECT_NAME} build version is : ${GIT_VERSION}\n")
ADD_DEFINITIONS(-DGIT_VERSION)
ELSE (NOT ${GIT_VERSION} MATCHES GIT-NOTFOUND)
MESSAGE("")
@@ -196,22 +201,27 @@ ELSE (CMAKE_BUILD_TYPE STREQUAL Debug)
ADD_DEFINITIONS(-DDATA_DIR_PREFIX)
ENDIF (PREFIX AND NOT WIN32)
ENDIF (CMAKE_BUILD_TYPE STREQUAL Debug)
- MESSAGE(STATUS "GIT_BINARY : ${GIT_EXECUTABLE}")
- MESSAGE(STATUS "DYNAMIC_LINKING : ${DYNAMIC_LINKING}")
- MESSAGE(STATUS "TILES : ${TILES}")
- MESSAGE(STATUS "CURSES : ${CURSES}")
- MESSAGE(STATUS "SOUND : ${SOUND}")
- MESSAGE(STATUS "LUA : ${LUA}")
- MESSAGE(STATUS "BACKTRACE : ${BACKTRACE}")
- MESSAGE(STATUS "USE_HOME_DIR : ${USE_HOME_DIR}\n")
+MESSAGE(STATUS "GIT_BINARY : ${GIT_EXECUTABLE}")
+MESSAGE(STATUS "DYNAMIC_LINKING : ${DYNAMIC_LINKING}")
- MESSAGE(STATUS "UNITY_BUILD : ${USE_UNITY_BUILD}")
- MESSAGE(STATUS "PCH_HEADER : ${USE_PCH_HEADER}")
+MESSAGE(STATUS "TILES : ${TILES}")
+MESSAGE(STATUS "CURSES : ${CURSES}")
+MESSAGE(STATUS "SOUND : ${SOUND}")
+MESSAGE(STATUS "LUA : ${LUA}")
+MESSAGE(STATUS "BACKTRACE : ${BACKTRACE}")
+MESSAGE(STATUS "LIBBACKTRACE : ${LIBBACKTRACE}")
+MESSAGE(STATUS "USE_HOME_DIR : ${USE_HOME_DIR}\n")
- MESSAGE(STATUS "LANGUAGES : ${LANGUAGES}\n")
+MESSAGE(STATUS "UNITY_BUILD : ${USE_UNITY_BUILD}")
+MESSAGE(STATUS "PCH_HEADER : ${USE_PCH_HEADER}")
+MESSAGE(STATUS "LANGUAGES : ${LANGUAGES}\n")
+
+IF(LINKER)
+ MESSAGE(STATUS "LINKER : ${LINKER}\n")
+ENDIF()
- MESSAGE(STATUS "See INSTALL file for details and more info --\n")
+MESSAGE(STATUS "See INSTALL file for details and more info --\n")
IF(MSVC)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index a2a234c9910b..d13c0b815ef3 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -1,24 +1,34 @@
## Our Pledge
-In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
+In the interest of fostering an open and welcoming environment, we as contributors and maintainers
+pledge to making participation in our project and our community a harassment-free experience for
+everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity
+and expression, level of experience, education, socio-economic status, nationality, personal
+appearance, race, religion, or sexual identity and orientation.
## Our Standards
1. Assume other participants are posting in good faith, even if you disagree with what they say.
2. Make an effort to treat other participants with respect.
- 1. Do not take a harsh tone towards other participants, and especially don't make personal attacks against them.
- 2. Recognize that criticism of your statements is not a personal attack on you.
- 3. Avoid statements about the presumed typical desires, capabilities or actions of some demographic group.
+ 1. Do not take a harsh tone towards other participants, and especially don't make personal
+ attacks against them.
+ 2. Recognize that criticism of your statements is not a personal attack on you.
+ 3. Avoid statements about the presumed typical desires, capabilities or actions of some
+ demographic group.
3. Be especially kind to other contributors when saying they made a mistake.
-4. Don't argue unceasingly for your preferred course of action when a decision for some other course has already been made.
-5. If other participants complain about the way you express your ideas, please make an effort to cater to them.
+4. Don't argue unceasingly for your preferred course of action when a decision for some other course
+ has already been made.
+5. If other participants complain about the way you express your ideas, please make an effort to
+ cater to them.
6. Don't raise unrelated political issues.
-7. If you feel these standards are being violated, please alert the project's "ombudsman" Jakob at lamandus@hotmail.com
+7. If you feel these standards are being violated, please alert the project's "ombudsman" Jakob at
+ lamandus@hotmail.com
## Attribution
-This Code of Conduct is adapted from the [Contributor Covenant][CoC homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][CoC version] and the [GNU Kind Communications Guidelines][GKCG homepage].
-
+This Code of Conduct is adapted from the [Contributor Covenant][CoC homepage], version 1.4,
+available at [http://contributor-covenant.org/version/1/4][CoC version] and the
+[GNU Kind Communications Guidelines][GKCG homepage].
[CoC homepage]: http://contributor-covenant.org
[CoC version]: http://contributor-covenant.org/version/1/4/
diff --git a/ISSUES.md b/ISSUES.md
index dd800f72d7a6..5fa8ba6ce18f 100644
--- a/ISSUES.md
+++ b/ISSUES.md
@@ -2,24 +2,28 @@
## How to create new issues properly
-GitHub issues are used for everything from bug reporting to suggesting long-term ideas. You can make everything run much smoother by following some simple rules.
+GitHub issues are used for everything from bug reporting to suggesting long-term ideas. You can make
+everything run much smoother by following some simple rules.
### Rule zero
Always give your issue a meaningful title as this is the first thing anyone will see.
-Note: `[CR]` and `[WIP]` "tags" are meaningful only for PRs. All open issues by definition are request for comments and work in progress.
+Note: `[CR]` and `[WIP]` "tags" are meaningful only for PRs. All open issues by definition are
+request for comments and work in progress.
### Bug reports
-Before you submit a bug always search the current list of issues to see if it has been reported already.
+Before you submit a bug always search the current list of issues to see if it has been reported
+already.
Your bug report has to include:
- On what OS did you experience the problem (Windows, Linux, OS X etc.)
- What version were you playing:
- - Tiles or Curses (text-based)
- - Version string (preferably full version e.g. "0.C-4547-g3f1c109", or Jenkins build number e.g. 3245)
+- Tiles or Curses (text-based)
+- Version string (preferably full version e.g. "0.C-4547-g3f1c109", or Jenkins build number
+ e.g. 3245)
- Description of the problem written in a way that enables anyone to try and recreate it
Your bug report may include:
@@ -32,24 +36,42 @@ Bonus points for:
- Checking if the bug exists under latest experimental build
- Checking if it is OS specific
-The OS and BN version are very important - with the pace of changes here it is possible the bug you have encountered has already been fixed. After that reproducibility is the key, so write your report with all the necessary details.
+The OS and BN version are very important - with the pace of changes here it is possible the bug you
+have encountered has already been fixed. After that reproducibility is the key, so write your report
+with all the necessary details.
### Enhancements and addition ideas
-We have hundreds of issues open - most of them are ideas and suggestions. If you have a general idea or anything that can't be easily described in terms of *current* code changes you'd be better off suggesting it in the appropriate section of [the forum](https://discourse.cataclysmdda.org/). You'll also get much broader exposure for your idea there. After developing a polished idea on the forum, it should be easy to make a GitHub issue for it.
+We have hundreds of issues open - most of them are ideas and suggestions. If you have a general idea
+or anything that can't be easily described in terms of _current_ code changes you'd be better off
+suggesting it in the appropriate section of [the forum](https://discourse.cataclysmdda.org/). You'll
+also get much broader exposure for your idea there. After developing a polished idea on the forum,
+it should be easy to make a GitHub issue for it.
-Please first search if something like what you have on mind has been already proposed. If so, feel free to join the discussion! If your idea is related but sufficiently different, open a new issue and refer to the older discussion (use GitHub's `#issue_number` reference system).
+Please first search if something like what you have on mind has been already proposed. If so, feel
+free to join the discussion! If your idea is related but sufficiently different, open a new issue
+and refer to the older discussion (use GitHub's `#issue_number` reference system).
Remember to take part in the discussion of your suggestions.
### Questions
-You should direct your questions to the forum or ask on IRC. You should also read the included documentation and additional text files, e.g. [COMPILING.md](doc/COMPILING/COMPILING.md) if you have problems building.
+You should direct your questions to the forum or ask on IRC. You should also read the included
+documentation and additional text files, e.g. [COMPILING.md](doc/COMPILING/COMPILING.md) if you have
+problems building.
## Bounties
-Placing a bounty *does not* necessarily mean that change will be incorporated into the main game. Please coordinate in the issue you intend to place a bounty on to determine if it is a change the project will accept, and keep in mind that placing a bounty will not confer special status on the issue. A good way of thinking about bounties is as encouragement for contributors to work on a particular issue, and certainly not as "paying for features".
+Placing a bounty _does not_ necessarily mean that change will be incorporated into the main game.
+Please coordinate in the issue you intend to place a bounty on to determine if it is a change the
+project will accept, and keep in mind that placing a bounty will not confer special status on the
+issue. A good way of thinking about bounties is as encouragement for contributors to work on a
+particular issue, and certainly not as "paying for features".
## Issue resolution
-We do not assign people to issues. If you plan to work on a bug fix or a validated idea feel free to just comment about that. Actual PRs are of much greater value than any assignments. In general the first correct PR about something will be the PR that will get merged, but remember: we are using Git - you can collaborate with someone else easily by sending them patches or PRs against their PR branch.
+We do not assign people to issues. If you plan to work on a bug fix or a validated idea feel free to
+just comment about that. Actual PRs are of much greater value than any assignments. In general the
+first correct PR about something will be the PR that will get merged, but remember: we are using
+Git - you can collaborate with someone else easily by sending them patches or PRs against their PR
+branch.
diff --git a/Makefile b/Makefile
index 5a8982bbb5a5..d4ebcb583b60 100644
--- a/Makefile
+++ b/Makefile
@@ -53,7 +53,7 @@
# make TILES=1 SOUND=1
# Disable backtrace support, not available on all platforms
# make BACKTRACE=0
-# Use libbacktrace. Only has effect if BACKTRACE=1. (currently only for MinGW builds)
+# Use libbacktrace. Only has effect if BACKTRACE=1. (currently only for MinGW and Linux builds)
# make LIBBACKTRACE=1
# Compile localization files for specified languages
# make localization LANGUAGES="[ lang_id_2][ ...]"
@@ -399,7 +399,11 @@ ifeq ($(RELEASE), 1)
OTHERS += $(RELEASE_FLAGS)
DEBUG =
ifndef DEBUG_SYMBOLS
- DEBUGSYMS =
+ ifeq ($(LIBBACKTRACE), 1)
+ DEBUGSYMS = -g1
+ else
+ DEBUGSYMS =
+ endif
endif
DEFINES += -DRELEASE
# Check for astyle or JSON regressions on release builds.
@@ -763,9 +767,6 @@ ifeq ($(TARGETSYSTEM),WINDOWS)
LDFLAGS += -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lversion
ifeq ($(BACKTRACE),1)
LDFLAGS += -ldbghelp
- ifeq ($(LIBBACKTRACE),1)
- LDFLAGS += -lbacktrace
- endif
endif
endif
@@ -773,6 +774,7 @@ ifeq ($(BACKTRACE),1)
DEFINES += -DBACKTRACE
ifeq ($(LIBBACKTRACE),1)
DEFINES += -DLIBBACKTRACE
+ LDFLAGS += -lbacktrace
endif
endif
@@ -827,7 +829,7 @@ ifeq ($(LUA), 1)
DEFINES += -DLUA
LUA_OBJS = $(sort $(LUA_SOURCES:$(LUA_SRC_DIR)/%.c=$(ODIRLUA)/%.o))
else
- LUA_OBJS =
+ LUA_OBJS =
endif
ifdef LANGUAGES
diff --git a/README.ko.md b/README.ko.md
index 22db839ce565..fd39ffe1f0c4 100644
--- a/README.ko.md
+++ b/README.ko.md
@@ -3,8 +3,7 @@
- [![en][icon-en]][en]
- [![ko][icon-ko]][ko]
+[![en][icon-en]][en] [![ko][icon-ko]][ko]
@@ -13,36 +12,48 @@
[ko]: ./README.ko.md
[icon-ko]: https://img.shields.io/badge/lang-ko-orange?style=flat-square
-
-
카타클리즘: 밝은 밤은 포스트 아포칼립스 세계에서 벌어지는 공상과학 로그라이크입니다.
-"좀비 게임"이라 불리기도 하지만, 그뿐만이 아닙니다. 험난하고, 절차적으로 생성되는 세계에서 살아남아야 합니다. 이제는 죽어버린 문명의 잔해를 뒤져 음식, 장비, 운이 좋다면 연료가 가득 찬 차량을 찾아 탈출하세요.
+"좀비 게임"이라 불리기도 하지만, 그뿐만이 아닙니다. 험난하고, 절차적으로 생성되는 세계에서
+살아남아야 합니다. 이제는 죽어버린 문명의 잔해를 뒤져 음식, 장비, 운이 좋다면 연료가 가득 찬 차량을
+찾아 탈출하세요.
-좀비, 거대 곤충, 킬러 로봇, 더 이상하고 치명적인 것들, 그리고 당신이 가진 것을 노리는 이들까지, 강력한 괴물들과 싸우거나 도망치세요.
+좀비, 거대 곤충, 킬러 로봇, 더 이상하고 치명적인 것들, 그리고 당신이 가진 것을 노리는 이들까지,
+강력한 괴물들과 싸우거나 도망치세요.
카타클리즘을 멈출 방법을 찾거나.... 가장 강력한 괴물 중 하나가 되세요.
-> 카타클리즘: 밝은 밤(Cataclysm: Bright Nights)은 카타클리즘: 어두운 나날(Cataclysm: Dark Days Ahead)의 포크입니다. [위키](https://github.com/cataclysmbnteam/cataclysm-BN/wiki/Changes-so-far)에서 어떤 차이가 있는지 확인하세요.
+> 카타클리즘: 밝은 밤(Cataclysm: Bright Nights)은 카타클리즘: 어두운 나날(Cataclysm: Dark Days
+> Ahead)의 포크입니다.
+> [위키](https://github.com/cataclysmbnteam/cataclysm-BN/wiki/Changes-so-far)에서 어떤 차이가 있는지
+> 확인하세요.
## 다운로드
-[![안정판][stable-releases-badge]][stable-releases] [![최신 릴리즈][all-releases-badge]][all-releases]
+### 실행 파일
+
+[![Stable][stable-releases-badge]][stable-releases] [![Recent][all-releases-badge]][all-releases]
-[stable-releases]: https://github.com/cataclysmbnteam/cataclysm-BN/releases/tag/cbn-0.3
-[stable-releases-badge]: https://img.shields.io/github/v/release/cataclysmbnteam/cataclysm-BN?style=for-the-badge&color=success&label=stable
-[all-releases]: https://github.com/cataclysmbnteam/Cataclysm-BN/releases?q=prerelease%3Atrue&expanded=true
-[all-releases-badge]: https://img.shields.io/github/v/release/cataclysmbnteam/cataclysm-BN?style=for-the-badge&color=important&label=Latest%20Release&include_prereleases&sort=date
+### 소스 코드
-| [소스 코드][source-zip-archive] | [저장소에서 클론하기][clone] |
-| :-----------------------------: | :--------------------------: |
+[![Source Code][source-badge]][source] [![Zip Archive][clone-badge]][clone]
-[source-zip-archive]: https://github.com/cataclysmbnteam/cataclysm-BN/archive/master.zip "소스 코드를 .zip 아카이브로 다운로드할 수 있습니다"
-[clone]: https://github.com/cataclysmbnteam/cataclysm-BN/ "GitHub 저장소에서 클론할 수 있습니다"
+[stable-releases]: https://github.com/cataclysmbnteam/Cataclysm-BN/releases/latest "안정판 실행 파일 내려받기"
+[stable-releases-badge]: https://img.shields.io/github/v/release/cataclysmbnteam/Cataclysm-BN?style=for-the-badge&color=success&label=안정판
+[all-releases]: https://github.com/cataclysmbnteam/Cataclysm-BN/releases?q=prerelease%3Atrue&expanded=true "실험판 실행 파일 내려받기"
+[all-releases-badge]: https://img.shields.io/github/v/release/cataclysmbnteam/Cataclysm-BN?style=for-the-badge&color=important&label=최신%20실험판&include_prereleases&sort=date
+[source]: https://github.com/cataclysmbnteam/Cataclysm-BN/archive/master.zip "소스 코드를 .zip 아카이브로 다운로드할 수 있습니다"
+[source-badge]: https://img.shields.io/badge/ZIP%20아카이브로%20내려받기-black?style=for-the-badge&logo=github
+[clone]: https://github.com/cataclysmbnteam/Cataclysm-BN/ "GitHub 저장소에서 클론할 수 있습니다"
+[clone-badge]: https://img.shields.io/badge/저장소에서%20클론하기-black?style=for-the-badge&logo=github
## 빌드하기
-[COMPILING.md](doc/COMPILING/COMPILING.md)를 참고하세요 - 리눅스, OS X, 윈도우즈와 BSD에서 빌드하기 위한 일반적인 정보부터 보다 자세한 레시피가 담겨있습니다. [COMPILER_SUPPORT.md](doc/COMPILING/COMPILER_SUPPORT.md)에서 지원하는 컴파일러를 확인할 수 있습니다. 더 자세한 정보는 [doc/](https://github.com/cataclysmbnteam/cataclysm-BN/tree/upload/doc)에서도 찾아볼 수 있습니다.
+[COMPILING.md](doc/COMPILING/COMPILING.md)를 참고하세요 - 리눅스, OS X, 윈도우즈와 BSD에서 빌드하기
+위한 일반적인 정보부터 보다 자세한 레시피가 담겨있습니다.
+[COMPILER_SUPPORT.md](doc/COMPILING/COMPILER_SUPPORT.md)에서 지원하는 컴파일러를 확인할 수 있습니다.
+더 자세한 정보는 [doc/](https://github.com/cataclysmbnteam/cataclysm-BN/tree/upload/doc)에서도
+찾아볼 수 있습니다.
또한 다음 빌드 가이드도 있습니다.
@@ -52,17 +63,20 @@
## 기여하기
-> 카타클리즘: 밝은 밤은 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 개발되고 있습니다. 소스 코드와 게임 내용물은 어떠한 목적으로든 사용, 수정, 재배포가 가능합니다. 자세한 내용은 를 참고하세요.
-> 일부 코드는 프로젝트와 함께 배포되지만, 다른 소프트웨어 라이선스에 따라 배포됩니다. 다른 소프트웨어 라이선스에 따라 배포되는 파일들은 각 파일에 라이선스 공지가 포함되어 있습니다.
+> 카타클리즘: 밝은 밤은 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 개발되고
+> 있습니다. 소스 코드와 게임 내용물은 어떠한 목적으로든 사용, 수정, 재배포가 가능합니다. 자세한
+> 내용은 를 참고하세요. 일부 코드는 프로젝트와 함께
+> 배포되지만, 다른 소프트웨어 라이선스에 따라 배포됩니다. 다른 소프트웨어 라이선스에 따라 배포되는
+> 파일들은 각 파일에 라이선스 공지가 포함되어 있습니다.
[CONTRIBUTING.ko.md](./doc/CONTRIBUTING.ko.md)에서 자세한 내용을 확인할 수 있습니다.
## 커뮤니티
-| [저장소][repo] | [토론][discussion] | [공식 저장소][discord] | [BN 채널@모딩 커뮤니티][modding] |
-| :------------: | :----------------: | :--------------------: | :------------------------------: |
+[![Discussions](https://img.shields.io/badge/포럼에서%20토론하기-black?style=for-the-badge&logo=github)][discussion]
+[![Discord](https://img.shields.io/discord/830879262763909202?style=for-the-badge&logo=discord&label=공식%20디스코드%20서버)][discord]
+[![Discussions](https://img.shields.io/badge/CDDA%20모딩%20커뮤니티-green?style=for-the-badge&logo=discord)][modding]
-[repo]: https://github.com/cataclysmbnteam/cataclysm-BN
[discussion]: https://github.com/cataclysmbnteam/cataclysm-BN/discussions
[discord]: https://discord.gg/XW7XhXuZ89
[modding]: https://discord.gg/B5q4XCa "비공식 DDA모딩 커뮤니티에도 BN 채널이 있습니다."
@@ -71,11 +85,13 @@
#### 튜토리얼이 있나요?
-메인 메뉴의 **Special** 메뉴에서 찾을 수 있습니다. (코드 변경으로 인해 튜토리얼이 작동하지 않을 수 있습니다.) 게임 내에서도 `?` 키를 눌러 도움 메뉴에 접근할 수 있습니다.
+메인 메뉴의 **Special** 메뉴에서 찾을 수 있습니다. (코드 변경으로 인해 튜토리얼이 작동하지 않을 수
+있습니다.) 게임 내에서도 `?` 키를 눌러 도움 메뉴에 접근할 수 있습니다.
#### 단축키를 어떻게 바꾸나요?
-`?` 키를 누르고 `1` 키를 눌러 전체 단축키 목록을 확인할 수 있습니다. `+` 키를 눌러 단축키를 추가할 수 있고, `a-w` 키를 눌러 해당 행동을 선택한 후, 할당할 키를 누르면 됩니다.
+`?` 키를 누르고 `1` 키를 눌러 전체 단축키 목록을 확인할 수 있습니다. `+` 키를 눌러 단축키를 추가할
+수 있고, `a-w` 키를 눌러 해당 행동을 선택한 후, 할당할 키를 누르면 됩니다.
#### 새 세계를 어떻게 시작하나요?
@@ -83,7 +99,9 @@
#### 버그를 발견했어요. 어떻게 해야 하나요?
-디버그 메뉴에서 [버그 리포트](https://github.com/cataclysmbnteam/cataclysm-BN/issues/new?template=bug_report.yml)를 제출할 수 있습니다.
+디버그 메뉴에서
+[버그 리포트](https://github.com/cataclysmbnteam/cataclysm-BN/issues/new?template=bug_report.yml)를
+제출할 수 있습니다.
게임 내에서 `Submit a bug report on github`를 실행하여 이슈를 제출할 수 있습니다.
@@ -97,4 +115,5 @@
#### 제안을 하고 싶어요. 어떻게 해야 하나요?
-[토론 페이지](https://github.com/cataclysmbnteam/cataclysm-BN/discussions/categories/ideas)에서 아이디어를 제안할 수 있습니다. 새 기능, 포팅 요청, 모드 아이디어, 무엇이든지요!
+[토론 페이지](https://github.com/cataclysmbnteam/cataclysm-BN/discussions/categories/ideas)에서
+아이디어를 제안할 수 있습니다. 새 기능, 포팅 요청, 모드 아이디어, 무엇이든지요!
diff --git a/README.md b/README.md
index 083b1770cc60..e03b4a2754b5 100644
--- a/README.md
+++ b/README.md
@@ -3,8 +3,7 @@
- [![en][icon-en]][en]
- [![ko][icon-ko]][ko]
+[![en][icon-en]][en] [![ko][icon-ko]][ko]
@@ -13,12 +12,16 @@
[ko]: ./README.ko.md
[icon-ko]: https://img.shields.io/badge/lang-ko-orange?style=flat-square
-
Cataclysm: Bright Nights is a roguelike with sci-fi elements set in a post-apocalyptic world.
-While some have described it as a "zombie game", there is far more to Cataclysm than that. Struggle to survive in a harsh, persistent, procedurally generated world. Scavenge the remnants of a dead civilization for food, equipment, or, if you are lucky, a vehicle with a full tank of gas to get you the hell out of there.
+While some have described it as a "zombie game", there is far more to Cataclysm than that. Struggle
+to survive in a harsh, persistent, procedurally generated world. Scavenge the remnants of a dead
+civilization for food, equipment, or, if you are lucky, a vehicle with a full tank of gas to get you
+the hell out of there.
-Fight to defeat or escape from a wide variety of powerful monstrosities, from zombies to giant insects to killer robots and things far stranger and deadlier, and against the others like yourself, who want what you have.
+Fight to defeat or escape from a wide variety of powerful monstrosities, from zombies to giant
+insects to killer robots and things far stranger and deadlier, and against the others like yourself,
+who want what you have.
Find a way to stop the Cataclysm ... or become one of its strongest monsters.
@@ -27,42 +30,54 @@ Find a way to stop the Cataclysm ... or become one of its strongest monsters.
## Downloads
+### Executables
+
[![Stable][stable-releases-badge]][stable-releases] [![Recent][all-releases-badge]][all-releases]
-[stable-releases]: https://github.com/cataclysmbnteam/Cataclysm-BN/releases/tag/cbn-0.3
-[stable-releases-badge]:
-[all-releases]: https://github.com/cataclysmbnteam/Cataclysm-BN/releases?q=prerelease%3Atrue&expanded=true
-[all-releases-badge]: https://img.shields.io/github/v/release/cataclysmbnteam/Cataclysm-BN?style=for-the-badge&color=important&label=Latest%20Release&include_prereleases&sort=date
+### Source Code
-| [Source Code][source-zip-archive] | [Clone From Repo][clone] |
-| :-------------------------------: | :----------------------: |
+[![Source Code][source-badge]][source] [![Zip Archive][clone-badge]][clone]
-[source-zip-archive]: https://github.com/cataclysmbnteam/Cataclysm-BN/archive/master.zip "The source can be downloaded as a .zip archive"
+[stable-releases]: https://github.com/cataclysmbnteam/Cataclysm-BN/releases/latest "Download stable executable"
+[stable-releases-badge]: https://img.shields.io/github/v/release/cataclysmbnteam/Cataclysm-BN?style=for-the-badge&color=success&label=stable "Download experimental executable"
+[all-releases]: https://github.com/cataclysmbnteam/Cataclysm-BN/releases?q=prerelease%3Atrue&expanded=true
+[all-releases-badge]: https://img.shields.io/github/v/release/cataclysmbnteam/Cataclysm-BN?style=for-the-badge&color=important&label=Latest%20Release&include_prereleases&sort=date
+[source]: https://github.com/cataclysmbnteam/Cataclysm-BN/archive/master.zip "The source can be downloaded as a .zip archive"
+[source-badge]: https://img.shields.io/badge/Zip%20Archive-black?style=for-the-badge&logo=github
[clone]: https://github.com/cataclysmbnteam/Cataclysm-BN/ "clone from our GitHub repo"
+[clone-badge]: https://img.shields.io/badge/Clone%20From%20Repo-black?style=for-the-badge&logo=github
## Compile
-Please read [COMPILING.md](doc/COMPILING/COMPILING.md) - it covers general information and more specific recipes for Linux, OS X, Windows and BSD. See [COMPILER_SUPPORT.md](doc/COMPILING/COMPILER_SUPPORT.md) for details on which compilers we support. And you can always dig for more information in [doc/](https://github.com/cataclysmbnteam/Cataclysm-BN/tree/upload/doc).
+Please read [COMPILING.md](doc/COMPILING/COMPILING.md) - it covers general information and more
+specific recipes for Linux, OS X, Windows and BSD. See
+[COMPILER_SUPPORT.md](doc/COMPILING/COMPILER_SUPPORT.md) for details on which compilers we support.
+And you can always dig for more information in
+[doc/](https://github.com/cataclysmbnteam/Cataclysm-BN/tree/upload/doc).
We also have the following build guides:
- Building on Windows with `MSYS2` at [COMPILING-MSYS.md](doc/COMPILING/COMPILING-MSYS.md)
- Building on Windows with `vcpkg` at [COMPILING-VS-VCPKG.md](doc/COMPILING/COMPILING-VS-VCPKG.md)
-- Building with `cmake` at [COMPILING-CMAKE.md](doc/COMPILING/COMPILING-CMAKE.md) (_unofficial guide_)
+- Building with `cmake` at [COMPILING-CMAKE.md](doc/COMPILING/COMPILING-CMAKE.md) (_unofficial
+ guide_)
## Contribute
-> Cataclysm: Bright Nights developed under Creative Commons Attribution ShareAlike 3.0 license. The code and content of the game is free to use, modify, and redistribute for any purpose whatsoever. See http://creativecommons.org/licenses/by-sa/3.0/ for details.
-> Some code distributed with the project is not part of the project and is released under different software licenses, the files covered by different software licenses have their own license notices.
+> Cataclysm: Bright Nights developed under Creative Commons Attribution ShareAlike 3.0 license. The
+> code and content of the game is free to use, modify, and redistribute for any purpose whatsoever.
+> See http://creativecommons.org/licenses/by-sa/3.0/ for details. Some code distributed with the
+> project is not part of the project and is released under different software licenses, the files
+> covered by different software licenses have their own license notices.
Please see [CONTRIBUTING.md](./doc/CONTRIBUTING.md) for details.
## Community
-| [Repository][repo] | [Discussions][discussion] | [Official Discord][discord] | [BN Channel@Modding Community][modding] |
-| :----------------: | :-----------------------: | :-------------------------: | :-------------------------------------: |
+[![Discussions](https://img.shields.io/badge/Discussions-black?style=for-the-badge&logo=github)][discussion]
+[![Discord](https://img.shields.io/discord/830879262763909202?style=for-the-badge&logo=discord)][discord]
+[![Discussions](https://img.shields.io/badge/CDDA%20Modding-green?style=for-the-badge&logo=discord)][modding]
-[repo]: https://github.com/cataclysmbnteam/Cataclysm-BN
[discussion]: https://github.com/cataclysmbnteam/Cataclysm-BN/discussions
[discord]: https://discord.gg/XW7XhXuZ89
[modding]: https://discord.gg/B5q4XCa "Unofficial DDA modding community discord has a BN channel"
@@ -71,11 +86,15 @@ Please see [CONTRIBUTING.md](./doc/CONTRIBUTING.md) for details.
#### Is there a tutorial?
-Yes, you can find the tutorial in the **Special** menu at the main menu (be aware that due to many code changes the tutorial may not function). You can also access documentation in-game via the `?` key.
+Yes, you can find the tutorial in the **Special** menu at the main menu (be aware that due to many
+code changes the tutorial may not function). You can also access documentation in-game via the `?`
+key.
#### How can I change the key bindings?
-Press the `?` key, followed by the `1` key to see the full list of key commands. Press the `+` key to add a key binding, select which action with the corresponding letter key `a-w`, and then the key you wish to assign to that action.
+Press the `?` key, followed by the `1` key to see the full list of key commands. Press the `+` key
+to add a key binding, select which action with the corresponding letter key `a-w`, and then the key
+you wish to assign to that action.
#### How can I start a new world?
@@ -83,7 +102,8 @@ Press the `?` key, followed by the `1` key to see the full list of key commands.
#### I've found a bug. What should I do?
-[Bug report](https://github.com/cataclysmbnteam/Cataclysm-BN/issues/new?template=bug_report.yml) can be submitted via debug menu.
+[Bug report](https://github.com/cataclysmbnteam/Cataclysm-BN/issues/new?template=bug_report.yml) can
+be submitted via debug menu.
Run `Submit a bug report on github` inside the game to submit an issue.
@@ -97,5 +117,9 @@ It will open a bug report on browser with `Version and configuration` filled in.
#### I would like to make a suggestion. What should I do?
-- For simple ideas: please visit [our Discussions page](https://github.com/cataclysmbnteam/Cataclysm-BN/discussions/categories/ideas). It could be a new feature, a port request, a mod idea, or anything else.
-- Please submit an issue on [our GitHub page](https://github.com/cataclysmbnteam/Cataclysm-BN/issues/) using [feature request form](https://github.com/cataclysmbnteam/Cataclysm-BN/issues/new?template=feature_request.yml).
+- For simple ideas: please visit
+ [our Discussions page](https://github.com/cataclysmbnteam/Cataclysm-BN/discussions/categories/ideas).
+ It could be a new feature, a port request, a mod idea, or anything else.
+- Please submit an issue on
+ [our GitHub page](https://github.com/cataclysmbnteam/Cataclysm-BN/issues/) using
+ [feature request form](https://github.com/cataclysmbnteam/Cataclysm-BN/issues/new?template=feature_request.yml).
diff --git a/build-scripts/build.sh b/build-scripts/build.sh
index c85b2fa18754..20b89748c375 100755
--- a/build-scripts/build.sh
+++ b/build-scripts/build.sh
@@ -80,6 +80,7 @@ then
-DCMAKE_BUILD_TYPE="$build_type" \
-DTILES=${TILES:-0} \
-DSOUND=${SOUND:-0} \
+ -DLIBBACKTRACE=${LIBBACKTRACE:-0} \
"${cmake_extra_opts[@]}" \
..
if [ -n "$CATA_CLANG_TIDY" ]
@@ -149,7 +150,7 @@ else
else
export BACKTRACE=1
fi
- make -j "$num_jobs" RELEASE=1 CCACHE=1 CROSS="$CROSS_COMPILATION" LANGUAGES="all" LINTJSON=0
+ make -j "$num_jobs" RELEASE=1 CCACHE=1 CROSS="$CROSS_COMPILATION" LANGUAGES="all" LINTJSON=0 LIBBACKTRACE="$LIBBACKTRACE"
export UBSAN_OPTIONS=print_stacktrace=1
if [ "$OS" == "macos-12" ]
diff --git a/build-scripts/requirements.sh b/build-scripts/requirements.sh
index f659c59937d4..6b228a0e9eb6 100644
--- a/build-scripts/requirements.sh
+++ b/build-scripts/requirements.sh
@@ -8,6 +8,17 @@ set -x
echo "::add-matcher::build-scripts/problem-matchers/catch2.json"
echo "::add-matcher::build-scripts/problem-matchers/debugmsg.json"
+if [[ "$LIBBACKTRACE" == "1" ]]; then
+ git clone https://github.com/ianlancetaylor/libbacktrace.git
+ (
+ cd libbacktrace
+ git checkout 4d2dd0b172f2c9192f83ba93425f868f2a13c553
+ ./configure
+ make -j$(nproc)
+ sudo make install
+ )
+fi
+
if [ -n "$CATA_CLANG_TIDY" ]; then
pip install --user wheel --upgrade
pip install --user 'lit==0.11.1' 'click==7.1.2'
diff --git a/data/json/LOADING_ORDER.md b/data/json/LOADING_ORDER.md
index 5459b38c5d31..9f48a405678e 100644
--- a/data/json/LOADING_ORDER.md
+++ b/data/json/LOADING_ORDER.md
@@ -1,18 +1,16 @@
-# JSON Loading Order #
+# JSON Loading Order
-All files here in data/json are read eventually, but the order in which they're
-read can be important for objects with dependencies on other kinds of objects
-(e.g. recipes depend on skills). Ensuring the proper loading order will prevent
-surprises that, most often, manifest as crash-to-desktop with segfault (a very
-bad thing).
+All files here in data/json are read eventually, but the order in which they're read can be
+important for objects with dependencies on other kinds of objects (e.g. recipes depend on skills).
+Ensuring the proper loading order will prevent surprises that, most often, manifest as
+crash-to-desktop with segfault (a very bad thing).
-The way Cataclysm finds and loads json files is by running a breadth-first
-search in the tree data/json/. This means `data/json/whatever.json` will
-**always** be read before `data/json/subdir/whatever.json`. This tells us how to
-ensure dependency loading order.
+The way Cataclysm finds and loads json files is by running a breadth-first search in the tree
+data/json/. This means `data/json/whatever.json` will **always** be read before
+`data/json/subdir/whatever.json`. This tells us how to ensure dependency loading order.
-For instance, if you have scenarios that depend on professions that depend on
-skills, you'll want a directory structure such as the following:
+For instance, if you have scenarios that depend on professions that depend on skills, you'll want a
+directory structure such as the following:
```
data/json/
@@ -23,13 +21,12 @@ data/json/
scenarios.json
```
-Which results in a loading order of: `skills.json` then `professions.json` and
-then `scenarios.json`.
+Which results in a loading order of: `skills.json` then `professions.json` and then
+`scenarios.json`.
-## Same-depth loading order ##
+## Same-depth loading order
-Note that, when files (or directories) are at the same depth
-(i.e. all in `data/json/`), they will be read in lexical order, which is
-more or less equivalent to alphabetical order for file names that use only
-ascii characters. For UTF-8 or otherwise non-ascii file names, the names will be
-ordered by codepoint.
+Note that, when files (or directories) are at the same depth (i.e. all in `data/json/`), they will
+be read in lexical order, which is more or less equivalent to alphabetical order for file names that
+use only ascii characters. For UTF-8 or otherwise non-ascii file names, the names will be ordered by
+codepoint.
diff --git a/data/json/body_parts.json b/data/json/body_parts.json
index 8814df467454..667e2cb672f8 100644
--- a/data/json/body_parts.json
+++ b/data/json/body_parts.json
@@ -39,7 +39,7 @@
"essential": true,
"hit_size": 6,
"hit_size_relative": [ 0, 2.33, 5.71 ],
- "hit_difficulty": 1.35,
+ "hit_difficulty": 1.4,
"stylish_bonus": 3,
"hot_morale_mod": 2,
"cold_morale_mod": 2,
@@ -57,7 +57,7 @@
"main_part": "head",
"hit_size": 1,
"hit_size_relative": [ 0, 0.33, 0.57 ],
- "hit_difficulty": 1.15,
+ "hit_difficulty": 1.2,
"stylish_bonus": 2,
"squeamish_penalty": 8,
"bionic_slots": 4
@@ -95,7 +95,7 @@
"opposite_part": "arm_r",
"hit_size": 9,
"hit_size_relative": [ 15, 20, 22.86 ],
- "hit_difficulty": 0.95,
+ "hit_difficulty": 0.75,
"side": "left",
"hot_morale_mod": 0.5,
"cold_morale_mod": 0.5,
@@ -117,7 +117,7 @@
"opposite_part": "arm_l",
"hit_size": 9,
"hit_size_relative": [ 15, 20, 22.86 ],
- "hit_difficulty": 0.95,
+ "hit_difficulty": 0.75,
"side": "right",
"hot_morale_mod": 0.5,
"cold_morale_mod": 0.5,
@@ -183,7 +183,7 @@
"opposite_part": "leg_r",
"hit_size": 9,
"hit_size_relative": [ 25, 12, 5.71 ],
- "hit_difficulty": 0.975,
+ "hit_difficulty": 0.9,
"side": "left",
"stylish_bonus": 1,
"hot_morale_mod": 0.5,
@@ -206,7 +206,7 @@
"opposite_part": "leg_l",
"hit_size": 9,
"hit_size_relative": [ 25, 12, 5.71 ],
- "hit_difficulty": 0.975,
+ "hit_difficulty": 0.9,
"side": "right",
"stylish_bonus": 1,
"hot_morale_mod": 0.5,
diff --git a/data/json/furniture_and_terrain/terrain-manufactured.json b/data/json/furniture_and_terrain/terrain-manufactured.json
index 355a4b89e607..e6840e358eff 100644
--- a/data/json/furniture_and_terrain/terrain-manufactured.json
+++ b/data/json/furniture_and_terrain/terrain-manufactured.json
@@ -411,6 +411,10 @@
"move_cost": 0,
"coverage": 50,
"flags": [ "TRANSPARENT", "MOUNTABLE", "PERMEABLE", "THIN_OBSTACLE", "MINEABLE" ],
+ "deconstruct": {
+ "ter_set": "t_bridge",
+ "items": [ { "item": "scrap", "count": [ 4, 8 ] }, { "item": "steel_plate", "count": [ 0, 2 ] } ]
+ },
"bash": {
"str_min": 30,
"str_max": 210,
@@ -431,6 +435,14 @@
"move_cost": 0,
"coverage": 50,
"flags": [ "NOITEM", "REDUCE_SCENT", "MOUNTABLE" ],
+ "deconstruct": {
+ "ter_set": "t_bridge",
+ "items": [
+ { "item": "steel_lump", "count": [ 0, 1 ] },
+ { "item": "steel_chunk", "count": [ 1, 4 ] },
+ { "item": "scrap", "count": [ 3, 7 ] }
+ ]
+ },
"bash": {
"str_min": 20,
"str_max": 150,
diff --git a/data/json/furniture_and_terrain/terrain-walls.json b/data/json/furniture_and_terrain/terrain-walls.json
index c94a78f85f19..fb2b0aa7a351 100644
--- a/data/json/furniture_and_terrain/terrain-walls.json
+++ b/data/json/furniture_and_terrain/terrain-walls.json
@@ -340,7 +340,11 @@
"sound": "crash!",
"sound_fail": "whump!",
"ter_set": "t_rock_floor",
- "items": [ { "item": "rock", "count": [ 6, 12 ] }, { "item": "material_rocksalt", "count": [ 0, 1 ], "prob": 10 } ]
+ "items": [
+ { "item": "rock", "count": [ 35, 50 ] },
+ { "item": "sharp_rock", "count": [ 3, 7 ] },
+ { "item": "material_rocksalt", "count": [ 0, 1 ], "prob": 10 }
+ ]
}
},
{
@@ -846,7 +850,7 @@
"sound": "heavy rumbling!",
"sound_fail": "thump",
"ter_set": "t_fence_post",
- "items": [ { "item": "material_soil", "count": [ 100, 150 ] } ]
+ "items": [ { "item": "material_soil", "count": [ 50, 75 ] } ]
}
},
{
@@ -1139,7 +1143,8 @@
"ter_set": "t_rock_floor",
"ter_set_bashed_from_above": "t_rock_floor_no_roof",
"items": [
- { "item": "rock", "count": [ 3, 7 ] },
+ { "item": "rock", "count": [ 65, 85 ] },
+ { "item": "sharp_rock", "count": [ 5, 9 ] },
{ "item": "coal_lump", "charges": [ 250, 500 ], "prob": 10 },
{ "item": "material_limestone", "charges": [ 10, 25 ], "prob": 80 },
{ "item": "material_rocksalt", "count": [ 0, 1 ], "prob": 20 },
@@ -1164,7 +1169,7 @@
"sound": "crash!",
"sound_fail": "whump!",
"ter_set": "t_rock_floor",
- "items": [ { "item": "rock", "count": [ 3, 7 ] } ]
+ "items": [ { "item": "rock", "count": [ 35, 50 ] }, { "item": "sharp_rock", "count": [ 3, 7 ] } ]
}
},
{
@@ -1183,7 +1188,7 @@
"sound": "crash!",
"sound_fail": "whump!",
"ter_set": "t_rock_floor",
- "items": [ { "item": "rock", "count": [ 3, 7 ] } ]
+ "items": [ { "item": "rock", "count": [ 35, 50 ] }, { "item": "sharp_rock", "count": [ 3, 7 ] } ]
}
},
{
@@ -1202,7 +1207,7 @@
"sound": "crash!",
"sound_fail": "whump!",
"ter_set": "t_rock_floor",
- "items": [ { "item": "rock", "count": [ 3, 7 ] } ]
+ "items": [ { "item": "rock", "count": [ 35, 50 ] }, { "item": "sharp_rock", "count": [ 3, 7 ] } ]
}
},
{
diff --git a/data/json/items/ammo/20x66mm.json b/data/json/items/ammo/20x66mm.json
index 5ef3bee49f18..3df875137e00 100644
--- a/data/json/items/ammo/20x66mm.json
+++ b/data/json/items/ammo/20x66mm.json
@@ -67,7 +67,7 @@
"price_postapoc": 4000,
"flags": [ "IRREPLACEABLE_CONSUMABLE" ],
"count": 10,
- "range": 20,
+ "range": 28,
"damage": { "damage_type": "heat", "amount": 16 },
"dispersion": 200,
"recoil": 100,
@@ -129,8 +129,8 @@
"count": 20,
"stack_size": 20,
"ammo_type": "20x66mm",
- "range": 12,
- "damage": { "damage_type": "bullet", "amount": 60 },
+ "range": 20,
+ "damage": { "damage_type": "bullet", "amount": 100 },
"recoil": 2500,
"effects": [ "COOKOFF", "SHOT", "NEVER_MISFIRES" ]
},
@@ -152,8 +152,8 @@
"price_postapoc": 4000,
"flags": [ "IRREPLACEABLE_CONSUMABLE" ],
"//": "Balanced as FMJ",
- "damage": { "damage_type": "bullet", "amount": 48, "armor_penetration": 21 },
- "relative": { "range": 12 },
+ "damage": { "damage_type": "bullet", "amount": 84, "armor_penetration": 21 },
+ "relative": { "range": 20 },
"proportional": { "dispersion": 1.3 },
"delete": { "effects": [ "SHOT" ] }
}
diff --git a/data/json/items/ammo/410shot.json b/data/json/items/ammo/410shot.json
index ffb7db607245..20c86dcf3e8c 100644
--- a/data/json/items/ammo/410shot.json
+++ b/data/json/items/ammo/410shot.json
@@ -16,8 +16,8 @@
"stack_size": 20,
"ammo_type": "410shot",
"casing": "410shot_hull",
- "range": 12,
- "damage": { "damage_type": "bullet", "amount": 30 },
+ "range": 20,
+ "damage": { "damage_type": "bullet", "amount": 53 },
"recoil": 1350,
"loudness": 90,
"effects": [ "COOKOFF", "SHOT" ]
diff --git a/data/json/items/ammo/flintlock.json b/data/json/items/ammo/flintlock.json
index c51ab370e4ad..f68c9b72e099 100644
--- a/data/json/items/ammo/flintlock.json
+++ b/data/json/items/ammo/flintlock.json
@@ -14,7 +14,7 @@
"count": 30,
"stack_size": 10,
"ammo_type": "flintlock",
- "range": 6,
+ "range": 12,
"//": "Balanced as FMJ",
"damage": { "damage_type": "bullet", "amount": 50, "armor_penetration": 22 },
"dispersion": 90,
@@ -37,7 +37,7 @@
"count": 30,
"stack_size": 10,
"ammo_type": "flintlock",
- "range": 4,
+ "range": 8,
"damage": { "damage_type": "bullet", "amount": 63 },
"dispersion": 20,
"recoil": 1500,
diff --git a/data/json/items/ammo/shot.json b/data/json/items/ammo/shot.json
index 6282520ffe47..fe30e82e7b9d 100644
--- a/data/json/items/ammo/shot.json
+++ b/data/json/items/ammo/shot.json
@@ -60,8 +60,8 @@
"stack_size": 20,
"ammo_type": "shot",
"casing": "shot_hull",
- "range": 12,
- "damage": { "damage_type": "bullet", "amount": 50 },
+ "range": 20,
+ "damage": { "damage_type": "bullet", "amount": 80, "armor_multiplier": 2.0 },
"recoil": 2500,
"loudness": 160,
"effects": [ "COOKOFF", "SHOT" ]
@@ -96,7 +96,7 @@
"price": 100,
"price_postapoc": 400,
"range": 0,
- "damage": { "damage_type": "bullet", "amount": 20, "armor_multiplier": 2.0 },
+ "damage": { "damage_type": "bullet", "amount": 50, "armor_multiplier": 3.0 },
"dispersion": 1000,
"loudness": 80,
"shape": [ "cone", { "half_angle": 15, "length": 8 } ],
@@ -111,7 +111,7 @@
"price": 1000,
"price_postapoc": 1600,
"flags": [ "IRREPLACEABLE_CONSUMABLE" ],
- "damage": { "damage_type": "heat", "amount": 10 },
+ "damage": { "damage_type": "heat", "amount": 30 },
"proportional": { "recoil": 0.6, "loudness": 0.8, "dispersion": 1.2 },
"range": 0,
"shape": [ "cone", { "half_angle": 15, "length": 8 } ],
@@ -128,7 +128,7 @@
"flags": [ "IRREPLACEABLE_CONSUMABLE" ],
"count": 10,
"//": "Balanced as standard AP.",
- "relative": { "damage": { "damage_type": "bullet", "amount": -15, "armor_penetration": 30 } }
+ "relative": { "damage": { "damage_type": "bullet", "amount": -20, "armor_penetration": 30, "armor_multiplier": -1.0 } }
},
{
"id": "shot_he",
@@ -141,7 +141,7 @@
"price_postapoc": 1600,
"flags": [ "IRREPLACEABLE_CONSUMABLE" ],
"count": 5,
- "damage": { "damage_type": "bullet", "amount": 10, "armor_penetration": 0 },
+ "damage": { "damage_type": "bullet", "amount": 30, "armor_penetration": 0 },
"extend": { "effects": [ "EXPLOSIVE" ] }
},
{
@@ -172,9 +172,9 @@
"price": 400,
"price_postapoc": 400,
"flags": [ "IRREPLACEABLE_CONSUMABLE" ],
- "dispersion": 100,
+ "dispersion": 80,
"//": "Balanced as FMJ",
- "relative": { "range": 12, "damage": { "damage_type": "bullet", "amount": -10, "armor_penetration": 18 } },
+ "relative": { "range": 12, "damage": { "damage_type": "bullet", "amount": -15, "armor_penetration": 18, "armor_multiplier": -0.5 } },
"proportional": { "recoil": 1.4 },
"delete": { "effects": [ "SHOT" ] }
}
diff --git a/data/json/items/ammo/shotpaper.json b/data/json/items/ammo/shotpaper.json
index 533c9e0ae9ff..c9d1a2ed5889 100644
--- a/data/json/items/ammo/shotpaper.json
+++ b/data/json/items/ammo/shotpaper.json
@@ -5,7 +5,7 @@
"type": "AMMO",
"name": { "str": "birdshot paper cartridge" },
"description": "A paper cartridge containing a premeasured amount of black powder and an equal volume of birdshot. Used mostly for hunting small game or fowl.",
- "damage": { "damage_type": "bullet", "amount": 10 },
+ "damage": { "damage_type": "bullet", "amount": 40 },
"proportional": { "recoil": 0.6, "loudness": 0.8 },
"extend": { "effects": [ "NOGIB" ] }
},
diff --git a/data/json/items/armor/holster.json b/data/json/items/armor/holster.json
index 4d329db52647..1dde0589a60f 100644
--- a/data/json/items/armor/holster.json
+++ b/data/json/items/armor/holster.json
@@ -45,7 +45,7 @@
"flags": [ "BELTED", "OVERSIZE", "ALLOWS_NATURAL_ATTACKS" ],
"use_action": {
"type": "holster",
- "max_volume": "400 ml",
+ "max_volume": "500 ml",
"min_volume": "100 ml",
"max_weight": 1000,
"draw_cost": 150,
@@ -89,7 +89,7 @@
"coverage": 2,
"encumbrance": 2,
"material_thickness": 1,
- "use_action": { "type": "holster", "max_volume": "800 ml", "min_volume": "300 ml", "skills": [ "pistol", "smg", "shotgun" ] },
+ "use_action": { "type": "holster", "max_volume": "1 L", "min_volume": "250 ml", "skills": [ "pistol", "smg", "shotgun" ] },
"flags": [ "WAIST", "OVERSIZE" ]
},
{
@@ -163,7 +163,7 @@
"coverage": 10,
"encumbrance": 4,
"material_thickness": 1,
- "use_action": { "type": "holster", "min_volume": "750 ml", "max_volume": "1250 ml", "skills": [ "pistol", "smg", "shotgun" ] },
+ "use_action": { "type": "holster", "min_volume": "750 ml", "max_volume": "1500 ml", "skills": [ "pistol", "smg", "shotgun" ] },
"flags": [ "WAIST", "OVERSIZE" ]
}
]
diff --git a/data/json/items/comestibles/meat_dishes.json b/data/json/items/comestibles/meat_dishes.json
index 7091d286a58d..dedfeaf32909 100644
--- a/data/json/items/comestibles/meat_dishes.json
+++ b/data/json/items/comestibles/meat_dishes.json
@@ -467,7 +467,7 @@
"volume": "500 ml",
"charges": 6,
"flags": [ "EATEN_HOT" ],
- "fun": -8,
+ "fun": -2,
"vitamins": [ [ "iron", 3 ] ]
},
{
diff --git a/data/json/items/gun/monster_gun.json b/data/json/items/gun/monster_gun.json
index 67ca08407369..8772f71aa5fc 100644
--- a/data/json/items/gun/monster_gun.json
+++ b/data/json/items/gun/monster_gun.json
@@ -78,8 +78,8 @@
"weight": "3402 g",
"volume": "2450 ml",
"bashing": 3,
- "dispersion": 3250,
- "range": 65,
+ "dispersion": 6500,
+ "range": 30,
"durability": 9
},
{
diff --git a/data/json/items/gunmod/accessories.json b/data/json/items/gunmod/accessories.json
index 836a38dee3ee..8eabe0fe386f 100644
--- a/data/json/items/gunmod/accessories.json
+++ b/data/json/items/gunmod/accessories.json
@@ -23,6 +23,7 @@
"description": "A counterweight placed forward of the bow's grip allows for greater accuracy. Aside from increased weight and size, there are no drawbacks.",
"weight": "88 g",
"volume": "500 ml",
+ "integral_volume": "400 ml",
"price": 4000,
"price_postapoc": 500,
"material": [ "aluminum", "plastic" ],
@@ -39,6 +40,7 @@
"description": "A set of three stabilizing, dampened rods with a spring-loaded bracket to mount on modern bows. Takes extra time to set up when wielding, but doesn't take much extra space.",
"weight": "300 g",
"volume": "500 ml",
+ "integral_volume": "400 ml",
"price": 15000,
"price_postapoc": 750,
"material": [ "aluminum", "plastic" ],
@@ -56,6 +58,7 @@
"description": "A set of simple pads and strips of fur or rubber with adhesive backing, designed to stick on the limbs and string of a bow to absorb vibrations. This substantially reduces noise during firing and can help with accuracy.",
"weight": "50 g",
"volume": "250 ml",
+ "integral_volume": "0 ml",
"price": 500,
"price_postapoc": 250,
"material": [ "plastic" ],
diff --git a/data/json/items/gunmod/brass_catcher.json b/data/json/items/gunmod/brass_catcher.json
index f49e16f1a17f..eec4e121c05f 100644
--- a/data/json/items/gunmod/brass_catcher.json
+++ b/data/json/items/gunmod/brass_catcher.json
@@ -6,6 +6,7 @@
"description": "A bag that hangs off the side of your gun and catches ejected casings so you don't have to pick them up.",
"weight": "114 g",
"volume": "250 ml",
+ "integral_volume": "50 ml",
"price": 2000,
"price_postapoc": 50,
"material": [ "cotton" ],
diff --git a/data/json/items/gunmod/loading_port.json b/data/json/items/gunmod/loading_port.json
index 43ff44a8ba19..4373aa122db9 100644
--- a/data/json/items/gunmod/loading_port.json
+++ b/data/json/items/gunmod/loading_port.json
@@ -6,7 +6,7 @@
"description": "A metal ramp that is installed near a shotgun's feeding port to index speedloader tubes.",
"weight": "135 g",
"volume": "149 ml",
- "integral_volume": "149 ml",
+ "integral_volume": "50 ml",
"price": 15700,
"price_postapoc": 250,
"install_time": "8 m",
diff --git a/data/json/items/gunmod/rail.json b/data/json/items/gunmod/rail.json
index 8d03190698e6..c579fea22ad5 100644
--- a/data/json/items/gunmod/rail.json
+++ b/data/json/items/gunmod/rail.json
@@ -81,6 +81,7 @@
"description": "An additional rail set at 45° for attaching a secondary optic.",
"weight": "40 g",
"volume": "125 ml",
+ "integral_volume": "25 ml",
"price": 6000,
"price_postapoc": 500,
"material": [ "steel" ],
diff --git a/data/json/items/gunmod/sights.json b/data/json/items/gunmod/sights.json
index 7146fe1c3a43..924f12b5ed0f 100644
--- a/data/json/items/gunmod/sights.json
+++ b/data/json/items/gunmod/sights.json
@@ -62,6 +62,7 @@
"description": "Used extensively by military forces, it increases accuracy and weight. This is a step up from a red dot sight.",
"weight": "255 g",
"volume": "335 ml",
+ "integral_volume": "200 ml",
"price": 68000,
"price_postapoc": 750,
"material": [ "plastic", "steel" ],
@@ -126,6 +127,7 @@
"description": "A small scope intended for use on a handgun. Increases weight but improves accuracy greatly.",
"weight": "212 g",
"volume": "250 ml",
+ "integral_volume": "200 ml",
"price": 54000,
"price_postapoc": 500,
"material": [ "aluminum", "glass" ],
@@ -177,6 +179,7 @@
"description": "A 3-18x44 rifle scope. It is adjustable for windage and elevation in 1/10th mrad increments and is remarkably small and light for its magnification.",
"weight": "669 g",
"volume": "435 ml",
+ "integral_volume": "400 ml",
"price": 68000,
"price_postapoc": 750,
"material": [ "aluminum", "glass" ],
@@ -221,6 +224,7 @@
"description": "A 4x32 TA01 Advanced Combat Optical Gunsight with a tritium illuminated crosshair.",
"weight": "280 g",
"volume": "112 ml",
+ "integral_volume": "50 ml",
"price": 68000,
"price_postapoc": 750,
"material": [ "aluminum", "glass" ],
@@ -279,6 +283,7 @@
"description": "A simple hand-crafted telescopic sight, essentially a small telescope with crosshairs. Not as good as the ones made before the Cataclysm. Increases weight but improves accuracy.",
"weight": "300 g",
"volume": "250 ml",
+ "integral_volume": "200 ml",
"price": 30000,
"price_postapoc": 250,
"material": [ "plastic", "steel", "glass" ],
@@ -307,6 +312,7 @@
"description": "A simple telescopic sight intended for use on a handgun. Increases weight but improves accuracy greatly.",
"weight": "220 g",
"volume": "250 ml",
+ "integral_volume": "200 ml",
"price": 27000,
"price_postapoc": 500,
"material": [ "plastic", "steel", "glass" ],
diff --git a/data/json/items/gunmod/sling.json b/data/json/items/gunmod/sling.json
index 683531e4ae6a..e80dc0508fc1 100644
--- a/data/json/items/gunmod/sling.json
+++ b/data/json/items/gunmod/sling.json
@@ -6,7 +6,7 @@
"description": "A shoulder strap allows the rifle to be worn over your shoulders like a piece of clothing. However, it offers no protection.",
"weight": "100 g",
"volume": "250 ml",
- "integral_volume": "250 ml",
+ "integral_volume": "100 ml",
"price": 480,
"price_postapoc": 10,
"material": "cotton",
diff --git a/data/json/items/melee/spears_and_polearms.json b/data/json/items/melee/spears_and_polearms.json
index 1651ce433078..9cf4cdd3acb5 100644
--- a/data/json/items/melee/spears_and_polearms.json
+++ b/data/json/items/melee/spears_and_polearms.json
@@ -315,6 +315,27 @@
"qualities": [ [ "CUT", 1 ], [ "BUTCHER", -22 ] ],
"flags": [ "DURABLE_MELEE", "NONCONDUCTIVE", "POLEARM", "SHEATH_SPEAR", "REACH_ATTACK", "ALWAYS_TWOHAND" ]
},
+ {
+ "id": "makeshift_halberd",
+ "type": "GENERIC",
+ "category": "weapons",
+ "name": { "str": "makeshift glaive" },
+ "//": "Name changed to glaive, but changing the id would break e.g. tilesets.",
+ "description": "This is a large blade attached to a long stick. It could do a considerable amount of damage.",
+ "weight": "1800 g",
+ "volume": "3 L",
+ "price": 5000,
+ "price_postapoc": 250,
+ "to_hit": 2,
+ "bashing": 13,
+ "cutting": 36,
+ "material": [ "steel", "wood" ],
+ "symbol": "/",
+ "color": "light_gray",
+ "techniques": "WBLOCK_1",
+ "qualities": [ [ "CUT", 1 ], [ "BUTCHER", -42 ] ],
+ "flags": [ "REACH_ATTACK", "POLEARM", "NONCONDUCTIVE", "SHEATH_SPEAR", "FRAGILE_MELEE" ]
+ },
{
"id": "glaive",
"type": "GENERIC",
diff --git a/data/json/items/tool/misc.json b/data/json/items/tool/misc.json
index 845b113009db..18a9ffdb187a 100644
--- a/data/json/items/tool/misc.json
+++ b/data/json/items/tool/misc.json
@@ -511,27 +511,6 @@
"charges_per_use": 1,
"use_action": "WATER_PURIFIER"
},
- {
- "id": "makeshift_halberd",
- "type": "GENERIC",
- "category": "tools",
- "name": { "str": "makeshift glaive" },
- "//": "Name changed to glaive, but changing the id would break e.g. tilesets.",
- "description": "This is a large blade attached to a long stick. It could do a considerable amount of damage.",
- "weight": "1800 g",
- "volume": "3 L",
- "price": 5000,
- "price_postapoc": 250,
- "to_hit": 2,
- "bashing": 13,
- "cutting": 36,
- "material": [ "steel", "wood" ],
- "symbol": "/",
- "color": "light_gray",
- "techniques": "WBLOCK_1",
- "qualities": [ [ "CUT", 1 ], [ "BUTCHER", -42 ] ],
- "flags": [ "REACH_ATTACK", "POLEARM", "NONCONDUCTIVE", "SHEATH_SPEAR", "FRAGILE_MELEE" ]
- },
{
"type": "GENERIC",
"category": "tools",
diff --git a/data/json/mapgen/hospital.json b/data/json/mapgen/hospital.json
index 46d72391eac6..f706ed72ff28 100644
--- a/data/json/mapgen/hospital.json
+++ b/data/json/mapgen/hospital.json
@@ -236,7 +236,7 @@
";": "t_door_locked",
"x": "t_wall_glass",
"4": "t_sidewalk",
- "5": "t_elevator_control_off"
+ "5": "t_elevator_control"
},
"place_vehicles": [ { "vehicle": "helicopters", "x": 10, "y": 56, "chance": 80, "rotation": 270 } ]
}
diff --git a/data/mods/Aftershock/maps/mapgen/municipal_microreactor.json b/data/mods/Aftershock/maps/mapgen/municipal_microreactor.json
index 1d3b30d7649c..da4821a94107 100644
--- a/data/mods/Aftershock/maps/mapgen/municipal_microreactor.json
+++ b/data/mods/Aftershock/maps/mapgen/municipal_microreactor.json
@@ -117,11 +117,11 @@
"#########-% -##########",
"#########-% -##########",
"######-----55-----------",
- "######-**%% ****2**2 ",
- "######-** M 2 2 ",
- "######- M ---- ",
- "######-*** ** ****-``- ",
- "######-*** ** ****-``- ",
+ "######-**%% ****2***2 ",
+ "######-** M 2 2 ",
+ "######- M ----- ",
+ "######-*** ** ****-```- ",
+ "######-*** ** ****-```- ",
"######------------------",
"########################"
],
@@ -224,9 +224,9 @@
"####- ^ 6-G55--l b l-#",
"####--2----- 2 l-#",
"####- -(22(-------#",
- "####- d YYY 2eE-##",
- "####- hd 2ee-##",
- "####------------------##",
+ "####- d YYY 2eeE-#",
+ "####- hd 2eee-#",
+ "####-------------------#",
"########################"
],
"set": [
diff --git a/data/mods/Magiclysm/Spells/animist.json b/data/mods/Magiclysm/Spells/animist.json
index d437e715b648..c9794fa2912c 100644
--- a/data/mods/Magiclysm/Spells/animist.json
+++ b/data/mods/Magiclysm/Spells/animist.json
@@ -1,34 +1,110 @@
[
+ {
+ "id": "bless",
+ "type": "SPELL",
+ "name": { "str": "Bless" },
+ "description": "A spell of blessing that gives you energy and boosts your abilities.",
+ "valid_targets": [ "self", "ally" ],
+ "flags": [ "VERBAL", "SOMATIC", "NO_LEGS" ],
+ "effect": "target_attack",
+ "effect_str": "bless",
+ "affected_body_parts": [ "torso" ],
+ "base_casting_time": 100,
+ "base_energy_cost": 100,
+ "energy_source": "MANA",
+ "spell_class": "ANIMIST",
+ "difficulty": 1,
+ "max_level": 30,
+ "min_aoe": 3,
+ "max_aoe": 10,
+ "aoe_increment": 0.25,
+ "min_range": 8,
+ "max_range": 23,
+ "range_increment": 0.75,
+ "//": "duration is in moves",
+ "min_duration": 12000,
+ "max_duration": 36000,
+ "duration_increment": 400,
+ "//2": "Something doesn't add up with that increment, but it's not like it really messes with anything"
+ },
+ {
+ "id": "holy_blade",
+ "type": "SPELL",
+ "name": { "str": "Holy Blade" },
+ "description": "This blade of light will cut through any evil it makes contact with!",
+ "valid_targets": [ "self" ],
+ "flags": [ "VERBAL", "NO_LEGS", "CONCENTRATE" ],
+ "min_range": 0,
+ "max_range": 0,
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "longsword",
+ "base_casting_time": 350,
+ "base_energy_cost": 375,
+ "min_duration": 48000,
+ "max_duration": 58500,
+ "duration_increment": 3000,
+ "//": "That MUST be a typo and meant to be an increment of 300",
+ "difficulty": 5,
+ "max_level": 30,
+ "spell_class": "ANIMIST",
+ "energy_source": "MANA"
+ },
+ {
+ "id": "spirit_armor",
+ "type": "SPELL",
+ "name": { "str": "Spiritual Armor" },
+ "description": "Evil will not make it through your defenses if your faith is strong enough!",
+ "valid_targets": [ "self" ],
+ "flags": [ "VERBAL", "NO_LEGS", "CONCENTRATE", "SOMATIC" ],
+ "min_range": 0,
+ "max_range": 0,
+ "min_damage": 1,
+ "max_damage": 1,
+ "effect": "spawn_item",
+ "effect_str": "armor_lightplate",
+ "spell_class": "ANIMIST",
+ "energy_source": "MANA",
+ "difficulty": 5,
+ "max_level": 30,
+ "base_casting_time": 350,
+ "base_energy_cost": 375,
+ "min_duration": 48000,
+ "max_duration": 58500,
+ "duration_increment": 3000
+ },
{
"id": "smite",
"type": "SPELL",
- "name": "Smite",
+ "name": { "str": "Smite" },
"description": "Evil has become pervasive throughout the world. Let your power be the light that shines in the darkness!",
"valid_targets": [ "hostile" ],
- "min_damage": 10,
- "max_damage": 200,
+ "min_damage": 175,
+ "max_damage": 465,
"damage_increment": 15.0,
"min_range": 1,
"max_range": 1,
"effect": "target_attack",
"base_casting_time": 85,
"base_energy_cost": 250,
+ "damage_type": "none",
"spell_class": "ANIMIST",
"difficulty": 8,
- "max_level": 15,
+ "max_level": 22,
"flags": [ "VERBAL", "SOMATIC", "LOUD" ],
"energy_source": "MANA"
},
{
"id": "recover_mana",
"type": "SPELL",
- "name": "Life Conversion",
+ "name": { "str": "Life Conversion" },
"description": "You channel your life force itself into your spiritual energy. You spend hp to regain mana.",
"valid_targets": [ "self" ],
- "min_damage": 250,
- "damage_increment": 50.0,
- "max_damage": 2000,
- "max_level": 35,
+ "min_damage": 90,
+ "damage_increment": 15.0,
+ "max_damage": 1000,
+ "max_level": 50,
"effect": "recover_energy",
"effect_str": "MANA",
"spell_class": "ANIMIST",
@@ -36,20 +112,20 @@
"base_casting_time": 500,
"base_energy_cost": 5,
"energy_increment": 1.0,
- "final_energy_cost": 40,
+ "final_energy_cost": 60,
"flags": [ "SOMATIC", "VERBAL", "SILENT", "NO_LEGS" ],
"difficulty": 3
},
{
"id": "recover_pain",
"type": "SPELL",
- "name": "Mind over Pain",
+ "name": { "str": "Mind over Pain" },
"description": "With an intense ritual that resembles crossfit, you manage to put some of your pain at bay.",
"valid_targets": [ "self" ],
"min_damage": 10,
- "max_damage": 100,
+ "max_damage": 150,
"damage_increment": 2.0,
- "max_level": 45,
+ "max_level": 67,
"spell_class": "ANIMIST",
"effect": "recover_energy",
"effect_str": "PAIN",
@@ -58,19 +134,19 @@
"base_energy_cost": 5000,
"energy_increment": 500.0,
"flags": [ "SOMATIC", "VERBAL", "PAIN_NORESIST" ],
- "final_energy_cost": 10000
+ "final_energy_cost": 15000
},
{
"id": "summon_zombie",
"type": "SPELL",
- "name": "Summon Zombie",
+ "name": { "str": "Summon Zombie" },
"description": "An ethereal-looking zombie rises from the depths of the earth to fight for you. You may be able to summon more with a higher level in this spell.",
"valid_targets": [ "ground" ],
"min_damage": 1,
- "max_damage": 3,
+ "max_damage": 5,
"//": "level 20 will max out your number of summons",
"damage_increment": 0.1,
- "max_level": 30,
+ "max_level": 45,
"difficulty": 2,
"spell_class": "ANIMIST",
"effect": "summon",
@@ -84,21 +160,21 @@
"min_aoe": 2,
"max_aoe": 2,
"flags": [ "SOMATIC", "VERBAL", "CONCENTRATE" ],
- "min_duration": 30000,
- "max_duration": 150000,
+ "min_duration": 120000,
+ "max_duration": 315000,
"duration_increment": 4000
},
{
"id": "summon_skeleton",
"type": "SPELL",
- "name": "Summon Skeleton",
+ "name": { "str": "Summon Skeleton" },
"description": "A ghostly skeleton rises from the depths of the earth to fight for you. You may be able to summon more with a higher level in this spell.",
"valid_targets": [ "ground" ],
"min_damage": 1,
- "max_damage": 3,
+ "max_damage": 5,
"//": "level 20 will max out your number of summons",
"damage_increment": 0.1,
- "max_level": 30,
+ "max_level": 45,
"difficulty": 5,
"spell_class": "ANIMIST",
"effect": "summon",
@@ -112,21 +188,21 @@
"min_aoe": 2,
"max_aoe": 2,
"flags": [ "SOMATIC", "VERBAL", "CONCENTRATE" ],
- "min_duration": 30000,
- "max_duration": 150000,
+ "min_duration": 120000,
+ "max_duration": 315000,
"duration_increment": 4000
},
{
"id": "summon_decayed_pouncer",
"type": "SPELL",
- "name": "Summon Decayed Pouncer",
+ "name": { "str": "Summon Decayed Pouncer" },
"description": "A decrepit looking large cat rises from the depths of the earth to fight for you. You may be able to summon more with a higher level in this spell.",
"valid_targets": [ "ground" ],
"min_damage": 1,
- "max_damage": 3,
+ "max_damage": 5,
"//": "level 20 will max out your number of summons",
"damage_increment": 0.1,
- "max_level": 30,
+ "max_level": 45,
"difficulty": 12,
"spell_class": "ANIMIST",
"effect": "summon",
@@ -140,27 +216,27 @@
"min_aoe": 2,
"max_aoe": 2,
"flags": [ "SOMATIC", "VERBAL", "CONCENTRATE" ],
- "min_duration": 30000,
- "max_duration": 150000,
+ "min_duration": 120000,
+ "max_duration": 315000,
"duration_increment": 4000
},
{
"id": "necrotic_gaze",
"type": "SPELL",
- "name": "Necrotic Gaze",
+ "name": { "str": "Necrotic Gaze" },
"description": "You use the power of your own blood to imbue necrotic energy into your gaze, damaging the target you look at.",
"valid_targets": [ "hostile" ],
"effect": "target_attack",
"spell_class": "ANIMIST",
"energy_source": "HP",
"flags": [ "NO_LEGS", "CONCENTRATE", "SOMATIC" ],
- "min_damage": 10,
- "max_damage": 160,
- "damage_increment": 5.0,
- "min_range": 3,
- "max_range": 5,
+ "min_damage": 121,
+ "max_damage": 411,
+ "damage_increment": 6.0,
+ "min_range": 5,
+ "max_range": 10,
"range_increment": 0.1,
- "max_level": 20,
+ "max_level": 37,
"difficulty": 3,
"base_casting_time": 100,
"base_energy_cost": 2,
@@ -190,7 +266,7 @@
{
"id": "summon_wisps",
"type": "SPELL",
- "name": "Ignus Fatuus",
+ "name": { "str": "Ignus Fatuus" },
"description": "Summons ghostly foxfire worked from living marsh vapor, to lead your enemies astray. With more experience, this spell can conjure multiple ghost lights.",
"valid_targets": [ "ground" ],
"effect": "summon",
@@ -201,17 +277,17 @@
"difficulty": 2,
"base_casting_time": 250,
"base_energy_cost": 300,
- "max_level": 25,
- "min_damage": 1,
- "max_damage": 8,
+ "max_level": 37,
+ "min_damage": 5,
+ "max_damage": 17,
"damage_increment": 0.28,
"min_aoe": 3,
"max_aoe": 3,
- "min_range": 3,
- "max_range": 7,
+ "min_range": 6,
+ "max_range": 14,
"range_increment": 0.16,
- "min_duration": 6000,
- "max_duration": 60000,
+ "min_duration": 45960,
+ "max_duration": 129960,
"duration_increment": 2160
}
]
diff --git a/data/mods/Magiclysm/Spells/biomancer.json b/data/mods/Magiclysm/Spells/biomancer.json
index a802505b24e8..f9135ccf3f8c 100644
--- a/data/mods/Magiclysm/Spells/biomancer.json
+++ b/data/mods/Magiclysm/Spells/biomancer.json
@@ -2,15 +2,15 @@
{
"id": "light_healing",
"type": "SPELL",
- "name": "Cure Light Wounds",
+ "name": { "str": "Cure Light Wounds" },
"description": "Heals a little bit of damage on the target.",
"valid_targets": [ "self", "ally" ],
- "min_damage": -5,
- "max_damage": -20,
+ "min_damage": -16,
+ "max_damage": -41,
"damage_increment": -1.0,
- "max_level": 10,
- "min_range": 0,
- "max_range": 4,
+ "max_level": 22,
+ "min_range": 9,
+ "max_range": 17,
"range_increment": 0.75,
"effect": "target_attack",
"base_casting_time": 300,
@@ -23,7 +23,7 @@
{
"id": "pain_split",
"type": "SPELL",
- "name": "Pain Split",
+ "name": { "str": "Pain Split" },
"description": "Evens out damage among your limbs.",
"valid_targets": [ "self" ],
"effect": "pain_split",
@@ -38,7 +38,7 @@
{
"id": "vicious_tentacle",
"type": "SPELL",
- "name": "Vicious Tentacle",
+ "name": { "str": "Vicious Tentacle" },
"description": "This spell extrudes a long nasty whiplike tentacle of sharp bones and oozing acid from your body, it has a long reach attack and vicious damage.",
"valid_targets": [ "self" ],
"min_damage": 1,
@@ -47,11 +47,11 @@
"effect_str": "tentacle_whip",
"base_casting_time": 250,
"base_energy_cost": 550,
- "min_duration": 30000,
- "max_duration": 90000,
+ "min_duration": 75000,
+ "max_duration": 180000,
"duration_increment": 3000,
"difficulty": 6,
- "max_level": 20,
+ "max_level": 30,
"flags": [ "SOMATIC", "LOUD" ],
"spell_class": "BIOMANCER",
"energy_source": "MANA"
@@ -59,7 +59,7 @@
{
"id": "bio_grotesque",
"type": "SPELL",
- "name": "Grotesque Enhancement",
+ "name": { "str": "Grotesque Enhancement" },
"description": "A spell that warps your body in alien ways to increase your physical abilities and strength.",
"valid_targets": [ "self" ],
"effect": "target_attack",
@@ -69,11 +69,11 @@
"energy_source": "MANA",
"spell_class": "BIOMANCER",
"difficulty": 6,
- "max_level": 20,
+ "max_level": 30,
"flags": [ "SOMATIC", "LOUD" ],
"//": "duration is in moves",
- "min_duration": 6000,
- "max_duration": 12000,
+ "min_duration": 15000,
+ "max_duration": 27000,
"duration_increment": 300
},
{
@@ -89,23 +89,23 @@
"energy_source": "MANA",
"spell_class": "BIOMANCER",
"difficulty": 2,
- "max_level": 20,
- "min_damage": 8,
- "max_damage": 65,
+ "max_level": 30,
+ "min_damage": 68,
+ "max_damage": 157,
"damage_increment": 4.0,
"damage_type": "acid",
- "min_range": 3,
- "max_range": 5,
+ "min_range": 7,
+ "max_range": 12,
"flags": [ "VERBAL", "NO_HANDS" ],
"range_increment": 0.25,
- "min_aoe": 25,
- "max_aoe": 60,
+ "min_aoe": 100,
+ "max_aoe": 165,
"aoe_increment": 5.0
},
{
"id": "bio_fleshpouch",
"type": "SPELL",
- "name": "Flesh Pouch",
+ "name": { "str": "Flesh Pouch" },
"description": "This spell grows a large pouch out of your skin on your back, allowing you to store your gear in it.",
"valid_targets": [ "none" ],
"min_damage": 1,
@@ -114,11 +114,11 @@
"effect_str": "fleshpouch",
"base_casting_time": 250,
"base_energy_cost": 300,
- "min_duration": 60000,
- "max_duration": 360000,
+ "min_duration": 285000,
+ "max_duration": 765000,
"duration_increment": 15000,
"difficulty": 4,
- "max_level": 20,
+ "max_level": 30,
"flags": [ "NO_HANDS", "NO_LEGS", "SOMATIC" ],
"spell_class": "BIOMANCER",
"energy_source": "MANA"
@@ -126,7 +126,7 @@
{
"id": "bio_bonespear",
"type": "SPELL",
- "name": "Conjure Bonespear",
+ "name": { "str": "Conjure Bonespear" },
"description": "This spell creates a long shaft of bone with a wicked point and blades along its length.",
"valid_targets": [ "self" ],
"min_damage": 1,
@@ -135,11 +135,11 @@
"effect_str": "bonespear",
"base_casting_time": 300,
"base_energy_cost": 350,
- "min_duration": 30000,
- "max_duration": 90000,
+ "min_duration": 75000,
+ "max_duration": 180000,
"duration_increment": 3000,
"difficulty": 14,
- "max_level": 20,
+ "max_level": 30,
"flags": [ "LOUD", "SOMATIC" ],
"spell_class": "BIOMANCER",
"energy_source": "MANA"
@@ -168,7 +168,7 @@
{
"id": "biomancer_paralytic_dart",
"type": "SPELL",
- "name": "Paralytic Dart",
+ "name": { "str": "Paralytic Dart" },
"description": "Spits a warped needle of sinew and bone, carrying with it a sting that slows your victim.",
"valid_targets": [ "ally", "hostile" ],
"effect": "projectile_attack",
@@ -179,22 +179,22 @@
"difficulty": 3,
"base_casting_time": 100,
"base_energy_cost": 80,
- "max_level": 15,
- "min_damage": 4,
- "max_damage": 28,
+ "max_level": 22,
+ "min_damage": 22,
+ "max_damage": 60,
"damage_increment": 1.6,
"damage_type": "stab",
- "min_range": 3,
- "max_range": 9,
+ "min_range": 7,
+ "max_range": 17,
"range_increment": 0.4,
- "min_duration": 1200,
- "max_duration": 12000,
+ "min_duration": 9120,
+ "max_duration": 25920,
"duration_increment": 720
},
{
"id": "biomancer_visceral_projection",
"type": "SPELL",
- "name": "Visceral Projection",
+ "name": { "str": "Visceral Projection" },
"description": "Projects a spray of acrid blood and gore all around you, growing to ensnare your prey in in a field of twitching poisonous tendrils.",
"sprite": "fd_gibs_flesh",
"valid_targets": [ "ally", "hostile", "ground" ],
@@ -207,46 +207,46 @@
"difficulty": 4,
"base_casting_time": 200,
"base_energy_cost": 150,
- "max_level": 20,
- "min_damage": 1,
- "max_damage": 10,
+ "max_level": 30,
+ "min_damage": 8,
+ "max_damage": 22,
"damage_increment": 0.45,
"damage_type": "bio",
- "min_aoe": 2,
- "max_aoe": 6,
+ "min_aoe": 5,
+ "max_aoe": 12,
"aoe_increment": 0.2,
"field_id": "fd_blood",
"field_chance": 1,
- "min_field_intensity": 1,
- "max_field_intensity": 3,
+ "min_field_intensity": 3,
+ "max_field_intensity": 5,
"field_intensity_increment": 0.1
},
{
"id": "biomancer_visceral_paralyze",
"type": "SPELL",
- "name": "Visceral Paralysis",
+ "name": { "str": "Visceral Paralysis" },
"description": "Paralytic side effect of Projection.",
"valid_targets": [ "ally", "hostile" ],
"effect": "target_attack",
"effect_str": "biomancer_dart_venom",
"flags": [ "SILENT" ],
- "max_level": 20,
- "min_aoe": 2,
- "max_aoe": 6,
+ "max_level": 30,
+ "min_aoe": 5,
+ "max_aoe": 12,
"aoe_increment": 0.2,
- "min_duration": 6000,
- "max_duration": 18000,
+ "min_duration": 12750,
+ "max_duration": 33750,
"duration_increment": 450,
"field_id": "fd_gibs_flesh",
"field_chance": 1,
- "min_field_intensity": 1,
- "max_field_intensity": 3,
+ "min_field_intensity": 3,
+ "max_field_intensity": 5,
"field_intensity_increment": 0.1
},
{
"id": "biomancer_visceral_backlash",
"type": "SPELL",
- "name": "Visceral Backlash",
+ "name": { "str": "Visceral Backlash" },
"description": "Hits the user with side effects too.",
"valid_targets": [ "self" ],
"effect": "target_attack",
@@ -258,7 +258,7 @@
{
"id": "biomancer_coagulant_weave",
"type": "SPELL",
- "name": "Coagulant Weave",
+ "name": { "str": "Coagulant Weave" },
"description": "Turns your biological mastery inwards, medically enhancing your flesh. Rather than strength of healing, it staves off blood loss and purges wounds before they can turn septic, at the cost of increased hunger and thirst.",
"valid_targets": [ "self" ],
"effect": "target_attack",
@@ -269,9 +269,9 @@
"difficulty": 5,
"base_casting_time": 400,
"base_energy_cost": 150,
- "max_level": 20,
- "min_duration": 6000,
- "max_duration": 12000,
+ "max_level": 30,
+ "min_duration": 10500,
+ "max_duration": 22500,
"duration_increment": 300
}
]
diff --git a/data/mods/Magiclysm/Spells/classless.json b/data/mods/Magiclysm/Spells/classless.json
index 4f39507a29dc..752485eb53ba 100644
--- a/data/mods/Magiclysm/Spells/classless.json
+++ b/data/mods/Magiclysm/Spells/classless.json
@@ -2,7 +2,7 @@
{
"id": "crystallize_mana",
"type": "SPELL",
- "name": "Crystallize Mana",
+ "name": { "str": "Crystallize Mana" },
"description": "Crystallizes mana into solid form",
"valid_targets": [ "self" ],
"spell_class": "NONE",
@@ -23,7 +23,7 @@
{
"id": "mana_fatigue",
"type": "SPELL",
- "name": "Mana Fatigue",
+ "name": { "str": "Mana Fatigue" },
"description": "Secondary effect of Crystallize Mana",
"valid_targets": [ "self" ],
"effect": "target_attack",
@@ -36,7 +36,7 @@
{
"id": "dark_sight",
"type": "SPELL",
- "name": "Dark Sight",
+ "name": { "str": "Dark Sight" },
"description": "Gives you the power to see in the dark",
"message": "Your eyes glow green for a moment. Now your sight can pierce the darkest shadows.",
"valid_targets": [ "self" ],
@@ -48,15 +48,15 @@
"base_energy_cost": 500,
"energy_source": "MANA",
"difficulty": 6,
- "max_level": 20,
- "min_duration": 100000,
- "max_duration": 1000000,
+ "max_level": 30,
+ "min_duration": 130000,
+ "max_duration": 1530000,
"duration_increment": 2000
},
{
"id": "megablast",
"type": "SPELL",
- "name": "Megablast",
+ "name": { "str": "Megablast" },
"description": "You always wanted to fire energy beams like in the animes you watched as a kid. Now you can!",
"valid_targets": [ "ally", "hostile", "ground" ],
"effect": "line_attack",
@@ -67,21 +67,21 @@
"spell_class": "NONE",
"flags": [ "LOUD", "SOMATIC", "VERBAL" ],
"difficulty": 10,
- "max_level": 20,
- "min_damage": 30,
- "max_damage": 100,
- "damage_increment": 3.25,
- "min_range": 3,
- "max_range": 12,
+ "max_level": 30,
+ "min_damage": 83,
+ "max_damage": 203,
+ "damage_increment": 3.5,
+ "min_range": 10,
+ "max_range": 25,
"range_increment": 0.45,
- "min_aoe": 1,
- "max_aoe": 5,
+ "min_aoe": 4,
+ "max_aoe": 11,
"aoe_increment": 0.2
},
{
"id": "create_atomic_light",
"type": "SPELL",
- "name": "Magical Light",
+ "name": { "str": "Magical Light" },
"description": "Creates a magical light.",
"valid_targets": [ "none" ],
"min_range": 0,
@@ -93,12 +93,12 @@
"energy_source": "MANA",
"flags": [ "VERBAL", "NO_LEGS" ],
"difficulty": 1,
- "max_level": 20,
+ "max_level": 30,
"base_casting_time": 1000,
- "base_energy_cost": 500,
- "min_duration": 100000,
- "max_duration": 1000000,
- "duration_increment": 2000
+ "base_energy_cost": 200,
+ "min_duration": 775000,
+ "max_duration": 2175000,
+ "duration_increment": 45000
},
{
"id": "blinding_flash",
@@ -109,18 +109,18 @@
"effect_str": "blind",
"affected_body_parts": [ "eyes" ],
"valid_targets": [ "hostile" ],
- "max_level": 20,
- "min_damage": 1,
- "max_damage": 10,
+ "max_level": 30,
+ "min_damage": 9,
+ "max_damage": 23,
"damage_increment": 0.5,
- "min_aoe": 0,
- "max_aoe": 3,
+ "min_aoe": 2,
+ "max_aoe": 7,
"aoe_increment": 0.15,
- "min_range": 4,
- "max_range": 16,
+ "min_range": 13,
+ "max_range": 33,
"range_increment": 0.6,
- "min_duration": 1000,
- "max_duration": 3000,
+ "min_duration": 2500,
+ "max_duration": 6000,
"duration_increment": 100,
"spell_class": "NONE",
"flags": [ "SOMATIC", "NO_LEGS" ],
@@ -133,24 +133,24 @@
{
"id": "ethereal_grasp",
"type": "SPELL",
- "name": "Ethereal Grasp",
+ "name": { "str": "Ethereal Grasp" },
"description": "A mass of spectral hands emerge from the ground, slowing everything in range. Higher levels allow a bigger AoE, and longer effect.",
"effect": "target_attack",
"effect_str": "effect_ethereal_grasp",
"affected_body_parts": [ "foot_l", "foot_r" ],
"valid_targets": [ "hostile" ],
- "max_level": 20,
- "min_damage": 10,
- "max_damage": 30,
+ "max_level": 30,
+ "min_damage": 25,
+ "max_damage": 60,
"damage_increment": 1.0,
- "min_aoe": 2,
- "max_aoe": 20,
+ "min_aoe": 10,
+ "max_aoe": 38,
"aoe_increment": 0.5,
- "min_range": 5,
- "max_range": 20,
+ "min_range": 35,
+ "max_range": 60,
"range_increment": 2.0,
- "min_duration": 1000,
- "max_duration": 5000,
+ "min_duration": 4000,
+ "max_duration": 10500,
"duration_increment": 200,
"spell_class": "NONE",
"flags": [ "SOMATIC" ],
@@ -163,7 +163,7 @@
{
"id": "obfuscated_body",
"type": "SPELL",
- "name": "Obfuscated Body",
+ "name": { "str": "Obfuscated Body" },
"description": "A magical aura distorts light around your body, increasing the amount of attacks you might dodge in a given turn.",
"valid_targets": [ "self" ],
"effect": "spawn_item",
@@ -172,11 +172,11 @@
"spell_class": "NONE",
"flags": [ "CONCENTRATE", "NO_LEGS" ],
"difficulty": 4,
- "max_level": 15,
+ "max_level": 22,
"base_casting_time": 200,
"base_energy_cost": 400,
- "min_duration": 21000,
- "max_duration": 90000,
+ "min_duration": 70500,
+ "max_duration": 184500,
"duration_increment": 4500
},
{
@@ -185,27 +185,29 @@
"name": { "str": "Aura of Protection" },
"description": "Encases your whole body in a magical aura that protects you from the environment.",
"valid_targets": [ "self" ],
+ "min_damage": 1,
+ "max_damage": 1,
"effect": "spawn_item",
"effect_str": "protect_env",
"energy_source": "MANA",
"difficulty": 1,
- "max_level": 20,
+ "max_level": 30,
"flags": [ "CONCENTRATE", "VERBAL", "NO_LEGS" ],
"base_casting_time": 350,
"base_energy_cost": 375,
- "min_duration": 10000,
- "max_duration": 50000,
+ "min_duration": 55000,
+ "max_duration": 120000,
"duration_increment": 3000
},
{
"id": "translocate_self",
"type": "SPELL",
- "name": "Translocate Self",
+ "name": { "str": "Translocate Self" },
"description": "Translocates the user to an attuned gate.",
"valid_targets": [ "self" ],
"effect": "translocate",
"difficulty": 15,
- "max_level": 25,
+ "max_level": 35,
"base_casting_time": 6000,
"base_energy_cost": 675,
"energy_source": "MANA",
@@ -227,18 +229,18 @@
"spell_class": "NONE",
"flags": [ "CONCENTRATE", "NO_LEGS" ],
"difficulty": 4,
- "max_level": 15,
+ "max_level": 22,
"base_casting_time": 200,
"base_energy_cost": 150,
- "min_duration": 84000,
- "max_duration": 360000,
- "duration_increment": 18000,
+ "min_duration": 286400,
+ "max_duration": 742400,
+ "duration_increment": 18400,
"learn_spells": { "acid_resistance_greater": 15 }
},
{
"id": "acid_resistance_greater",
"type": "SPELL",
- "name": "Greater Acid Resistance",
+ "name": { "str": "Greater Acid Resistance" },
"description": "Protects the user from acid.",
"valid_targets": [ "none" ],
"min_range": 0,
diff --git a/data/mods/Magiclysm/Spells/druid.json b/data/mods/Magiclysm/Spells/druid.json
index f359687fe9dd..f360f9974208 100644
--- a/data/mods/Magiclysm/Spells/druid.json
+++ b/data/mods/Magiclysm/Spells/druid.json
@@ -2,7 +2,7 @@
{
"id": "druid_veggrasp",
"type": "SPELL",
- "name": "Vegetative Grasp",
+ "name": { "str": "Vegetative Grasp" },
"description": "This spell causes roots and vines to burst forth from the ground and grab your foes, slowing them and doing a small amount of damage as they dig in.",
"sprite": "fd_gibs_veggy",
"valid_targets": [ "hostile", "ground" ],
@@ -14,31 +14,31 @@
"base_energy_cost": 175,
"energy_source": "MANA",
"difficulty": 2,
- "max_level": 20,
- "min_damage": 1,
- "max_damage": 20,
+ "max_level": 30,
+ "min_damage": 16,
+ "max_damage": 45,
"damage_increment": 1.0,
- "min_aoe": 4,
- "max_aoe": 15,
+ "min_aoe": 19,
+ "max_aoe": 37,
"aoe_increment": 1.0,
- "min_range": 3,
- "max_range": 10,
+ "min_range": 18,
+ "max_range": 25,
"range_increment": 1.0,
- "min_dot": 0,
- "max_dot": 2,
+ "min_dot": 2,
+ "max_dot": 5,
"dot_increment": 0.1,
- "min_duration": 1000,
- "max_duration": 10000,
+ "min_duration": 8500,
+ "max_duration": 22500,
"duration_increment": 500,
- "min_pierce": 1,
- "max_pierce": 5,
+ "min_pierce": 5,
+ "max_pierce": 12,
"pierce_increment": 0.25,
"damage_type": "stab"
},
{
"id": "druid_rootstrike",
"type": "SPELL",
- "name": "Root Strike",
+ "name": { "str": "Root Strike" },
"description": "This spell causes roots to spear out the ground and stab into your foes in an arc, impaling them.",
"valid_targets": [ "hostile", "ground" ],
"flags": [ "LOUD", "SOMATIC", "VERBAL", "NO_LEGS" ],
@@ -49,31 +49,31 @@
"base_energy_cost": 100,
"energy_source": "MANA",
"difficulty": 4,
- "max_level": 20,
- "min_damage": 15,
- "max_damage": 60,
+ "max_level": 30,
+ "min_damage": 53,
+ "max_damage": 128,
"damage_increment": 2.5,
- "min_aoe": 25,
- "max_aoe": 45,
+ "min_aoe": 40,
+ "max_aoe": 80,
"aoe_increment": 1.0,
- "min_range": 4,
- "max_range": 10,
+ "min_range": 12,
+ "max_range": 23,
"range_increment": 0.5,
- "min_dot": 1,
- "max_dot": 2,
+ "min_dot": 3,
+ "max_dot": 5,
"dot_increment": 0.1,
- "min_duration": 1000,
- "max_duration": 10000,
+ "min_duration": 8500,
+ "max_duration": 22500,
"duration_increment": 500,
- "min_pierce": 10,
- "max_pierce": 20,
+ "min_pierce": 18,
+ "max_pierce": 38,
"pierce_increment": 0.5,
"damage_type": "stab"
},
{
"id": "druid_woodshaft",
"type": "SPELL",
- "name": "Wooden Shaft",
+ "name": { "str": "Wooden Shaft" },
"description": "This spell creates a projectile of hardwood that shoots forth from the caster's hand at high speed to stab into an enemy.",
"valid_targets": [ "hostile" ],
"flags": [ "LOUD", "SOMATIC", "VERBAL", "NO_LEGS" ],
@@ -83,22 +83,22 @@
"base_energy_cost": 50,
"energy_source": "MANA",
"difficulty": 1,
- "max_level": 20,
- "min_damage": 1,
- "max_damage": 25,
+ "max_level": 30,
+ "min_damage": 24,
+ "max_damage": 60,
"damage_increment": 1.5,
- "min_range": 5,
- "max_range": 15,
+ "min_range": 16,
+ "max_range": 33,
"range_increment": 0.75,
- "min_pierce": 1,
- "max_pierce": 5,
+ "min_pierce": 9,
+ "max_pierce": 16,
"pierce_increment": 0.5,
"damage_type": "bash"
},
{
"id": "druid_naturebow1",
"type": "SPELL",
- "name": "Nature's Bow",
+ "name": { "str": "Nature's Bow" },
"description": "This spell conjures a magical wooden recurve bow that fires endless arrows for as long as it lasts.",
"valid_targets": [ "none" ],
"flags": [ "CONCENTRATE", "SOMATIC", "VERBAL", "NO_LEGS" ],
@@ -108,18 +108,18 @@
"effect_str": "druid_recurve",
"base_casting_time": 200,
"base_energy_cost": 250,
- "min_duration": 10000,
- "max_duration": 30000,
+ "min_duration": 25000,
+ "max_duration": 60000,
"duration_increment": 1000,
"difficulty": 6,
- "max_level": 20,
+ "max_level": 30,
"spell_class": "DRUID",
"energy_source": "MANA"
},
{
"id": "recover_fatigue",
"type": "SPELL",
- "name": "Nature's Trance",
+ "name": { "str": "Nature's Trance" },
"description": "Your connection to living things allows you to go into a magical trance. This allows you to recover fatige quickly in exchange for mana.",
"valid_targets": [ "self" ],
"flags": [ "CONCENTRATE", "SILENT", "NO_HANDS" ],
@@ -130,11 +130,11 @@
"base_casting_time": 10000,
"min_damage": 50,
"damage_increment": 10.0,
- "max_damage": 300,
- "max_level": 25,
+ "max_damage": 450,
+ "max_level": 35,
"base_energy_cost": 500,
"energy_increment": 25.0,
- "final_energy_cost": 1125,
+ "final_energy_cost": 1685,
"difficulty": 4
},
{
@@ -145,19 +145,19 @@
"valid_targets": [ "ground" ],
"flags": [ "LOUD", "SOMATIC" ],
"min_damage": 1,
- "max_damage": 12,
+ "max_damage": 18,
"damage_increment": 1.0,
- "min_range": 3,
+ "min_range": 17,
"range_increment": 0.8,
- "max_range": 7,
+ "max_range": 24,
"min_aoe": 3,
"max_aoe": 3,
"spell_class": "DRUID",
"base_casting_time": 250,
"energy_source": "MANA",
- "max_level": 25,
- "min_duration": 6000,
- "max_duration": 60000,
+ "max_level": 35,
+ "min_duration": 23500,
+ "max_duration": 107500,
"duration_increment": 1000,
"difficulty": 1,
"base_energy_cost": 265,
@@ -167,22 +167,22 @@
{
"id": "summon_bear",
"type": "SPELL",
- "name": "Cause Bear",
+ "name": { "str": "Cause Bear" },
"description": "This spell appears to be very smudged. You're fairly sure the name should be Cause Fear, but you're also fairly sure it won't have the desired effect because the instructions are hardly legible. No time like the Cataclysm to find out, though!",
"valid_targets": [ "ground" ],
"min_damage": 1,
"max_damage": 1,
- "min_range": 3,
- "max_range": 5,
+ "min_range": 6,
+ "max_range": 11,
"spell_class": "DRUID",
"base_casting_time": 500,
"energy_source": "MANA",
- "max_level": 25,
+ "max_level": 35,
"difficulty": 10,
- "min_duration": 6000,
- "max_duration": 30000,
+ "min_duration": 25500,
+ "max_duration": 64500,
"base_energy_cost": 675,
- "final_energy_cost": 475,
+ "final_energy_cost": 425,
"energy_increment": -5.0,
"flags": [ "HOSTILE_50", "CONCENTRATE", "SOMATIC", "VERBAL", "NO_LEGS" ],
"effect": "summon",
@@ -191,15 +191,15 @@
{
"id": "fungicide",
"type": "SPELL",
- "name": "Kill Fungus",
+ "name": { "str": "Kill Fungus" },
"description": "Kills fungus affected areas",
"valid_targets": [ "ground", "hostile" ],
"effect": "ter_transform",
"effect_str": "fungicide",
- "min_aoe": 5,
- "max_aoe": 25,
+ "min_aoe": 20,
+ "max_aoe": 50,
"aoe_increment": 1.0,
- "max_level": 20,
+ "max_level": 30,
"difficulty": 4,
"energy_source": "MANA",
"base_energy_cost": 175,
@@ -209,7 +209,7 @@
{
"id": "create_rune_druid",
"type": "SPELL",
- "name": "Druid Rune",
+ "name": { "str": "Druid Rune" },
"description": "This ritual creates a small pebble attuned to Druids. You can use the rune as a catalyst for recipes.",
"valid_targets": [ "self" ],
"min_damage": 1,
@@ -230,7 +230,7 @@
{
"id": "purify_seed",
"type": "SPELL",
- "name": "Purification Seed",
+ "name": { "str": "Purification Seed" },
"description": "You summon a gift of the earth which will purify water. Rapidly degrades if not utilized.",
"valid_targets": [ "self" ],
"min_damage": 1,
@@ -253,7 +253,7 @@
{
"id": "druidic_regrowth",
"type": "SPELL",
- "name": "Sacrificial Regrowth",
+ "name": { "str": "Sacrificial Regrowth" },
"description": "Through giving of one's own life force, you restore withered and barren plant life nearby. What remains will need time to regrow its full strength.",
"valid_targets": [ "ground" ],
"effect": "ter_transform",
@@ -264,18 +264,18 @@
"difficulty": 6,
"base_casting_time": 600,
"base_energy_cost": 25,
- "max_level": 20,
- "min_aoe": 1,
- "max_aoe": 5,
+ "max_level": 30,
+ "min_aoe": 4,
+ "max_aoe": 11,
"aoe_increment": 0.2,
- "min_range": 3,
- "max_range": 6,
+ "min_range": 8,
+ "max_range": 14,
"range_increment": 0.3
},
{
"id": "druidic_healing",
"type": "SPELL",
- "name": "Sacrificial Healing",
+ "name": { "str": "Sacrificial Healing" },
"description": "Channels some of the user's own life force into healing energy, for the sake of ones allies.",
"valid_targets": [ "ally" ],
"effect": "target_attack",
@@ -285,15 +285,17 @@
"difficulty": 5,
"base_casting_time": 400,
"base_energy_cost": 35,
- "max_level": 10,
+ "final_energy_cost": 10,
+ "energy_increment": -1.5,
+ "max_level": 15,
"min_damage": -4,
- "max_damage": -12,
+ "max_damage": -18,
"damage_increment": -0.8,
"min_aoe": 0,
- "max_aoe": 2,
+ "max_aoe": 3,
"aoe_increment": 0.2,
"min_range": 2,
- "max_range": 4,
+ "max_range": 6,
"range_increment": 0.2
}
]
diff --git a/data/mods/Magiclysm/Spells/earthshaper.json b/data/mods/Magiclysm/Spells/earthshaper.json
index c5aa0fa10bcb..0e4e48028b28 100644
--- a/data/mods/Magiclysm/Spells/earthshaper.json
+++ b/data/mods/Magiclysm/Spells/earthshaper.json
@@ -2,7 +2,7 @@
{
"id": "stonefist",
"type": "SPELL",
- "name": "Stonefist",
+ "name": { "str": "Stonefist" },
"description": "Encases your arms and hands in a sheath of magical stone, you can punch and defend yourself with it in melee combat.",
"valid_targets": [ "self" ],
"flags": [ "SOMATIC", "LOUD" ],
@@ -13,32 +13,32 @@
"spell_class": "EARTHSHAPER",
"energy_source": "MANA",
"difficulty": 2,
- "max_level": 20,
+ "max_level": 30,
"base_casting_time": 200,
"base_energy_cost": 100,
- "min_duration": 10000,
- "max_duration": 100000,
+ "min_duration": 40000,
+ "max_duration": 180000,
"duration_increment": 2000
},
{
"id": "seismic_stomp",
"type": "SPELL",
- "name": "Seismic Stomp",
+ "name": { "str": "Seismic Stomp" },
"description": "Focusing mana into your leg, you stomp your foot and send out a shockwave, knocking enemies around you onto the ground.",
"sprite": "fd_rubble",
"effect": "target_attack",
"effect_str": "downed",
"valid_targets": [ "hostile", "ground", "none" ],
"flags": [ "SOMATIC", "LOUD" ],
- "max_level": 10,
- "min_damage": 2,
- "max_damage": 10,
+ "max_level": 15,
+ "min_damage": 8,
+ "max_damage": 21,
"damage_increment": 0.8,
- "min_aoe": 3,
- "max_aoe": 12,
+ "min_aoe": 11,
+ "max_aoe": 26,
"aoe_increment": 1,
- "min_duration": 1000,
- "max_duration": 6000,
+ "min_duration": 4750,
+ "max_duration": 12750,
"duration_increment": 500,
"spell_class": "EARTHSHAPER",
"base_casting_time": 100,
@@ -50,30 +50,30 @@
{
"id": "recover_stamina",
"type": "SPELL",
- "name": "Stone's Endurance",
+ "name": { "str": "Stone's Endurance" },
"description": "You focus on the stones beneath you and draw from their agelessness. Your mana is converted to stamina.",
"effect": "recover_energy",
"effect_str": "STAMINA",
"valid_targets": [ "self" ],
"flags": [ "NO_HANDS", "CONCENTRATE", "SILENT" ],
"min_damage": 1500,
- "max_damage": 10000,
- "damage_increment": 750,
- "max_level": 12,
+ "max_damage": 15000,
+ "damage_increment": 750.0,
+ "max_level": 18,
"spell_class": "EARTHSHAPER",
"base_casting_time": 500,
- "final_casting_time": 300,
+ "final_casting_time": 198,
"casting_time_increment": -17,
"energy_source": "MANA",
"base_energy_cost": 150,
"energy_increment": 75,
- "final_energy_cost": 1000,
+ "final_energy_cost": 1500,
"difficulty": 5
},
{
"id": "eshaper_shardspray",
"type": "SPELL",
- "name": "Shardspray",
+ "name": { "str": "Shardspray" },
"description": "This spell projects a wide spray of sharp metal shards, cutting into your foes and friends alike.",
"valid_targets": [ "hostile", "ground", "ally" ],
"flags": [ "SOMATIC", "LOUD" ],
@@ -83,22 +83,25 @@
"difficulty": 3,
"base_casting_time": 100,
"base_energy_cost": 100,
- "max_level": 20,
- "min_damage": 10,
- "max_damage": 60,
- "damage_increment": 2,
+ "max_level": 30,
+ "min_damage": 68,
+ "max_damage": 158,
+ "damage_increment": 2.5,
"damage_type": "cut",
- "min_aoe": 25,
- "max_aoe": 60,
+ "min_aoe": 100,
+ "max_aoe": 165,
"aoe_increment": 5,
- "min_range": 1,
- "max_range": 10,
- "range_increment": 0.5
+ "min_range": 10,
+ "max_range": 22,
+ "range_increment": 0.5,
+ "min_pierce": 6,
+ "max_pierce": 14,
+ "pierce_increment": 0.4
},
{
"id": "eshaper_piercing_bolt",
"type": "SPELL",
- "name": "Piercing Bolt",
+ "name": { "str": "Piercing Bolt" },
"description": "This spell projects a piercing rod of conjured iron at those that dare oppose you.",
"valid_targets": [ "hostile" ],
"flags": [ "SOMATIC", "LOUD" ],
@@ -108,33 +111,33 @@
"base_casting_time": 100,
"base_energy_cost": 115,
"difficulty": 2,
- "max_level": 20,
- "min_damage": 20,
- "max_damage": 50,
- "damage_increment": 3,
+ "max_level": 30,
+ "min_damage": 65,
+ "max_damage": 120,
+ "damage_increment": 3.0,
"damage_type": "stab",
- "min_range": 8,
- "max_range": 26,
+ "min_range": 30,
+ "max_range": 61,
"range_increment": 1.5
},
{
"id": "eshaper_shardstorm",
"type": "SPELL",
- "name": "Shardstorm",
+ "name": { "str": "Shardstorm" },
"description": "Creates an omnidirectional spray of razor sharp metal shards all around you.",
"valid_targets": [ "hostile", "ally", "ground" ],
"flags": [ "SOMATIC", "LOUD" ],
- "min_damage": 20,
- "max_damage": 60,
- "damage_increment": 1.5,
+ "min_damage": 48,
+ "max_damage": 118,
+ "damage_increment": 1.85,
"damage_type": "cut",
- "min_aoe": 1,
- "max_aoe": 6,
+ "min_aoe": 5,
+ "max_aoe": 13,
"aoe_increment": 0.25,
"base_energy_cost": 200,
"spell_class": "EARTHSHAPER",
"difficulty": 4,
- "max_level": 20,
+ "max_level": 30,
"base_casting_time": 100,
"energy_source": "MANA",
"effect": "target_attack"
@@ -142,21 +145,21 @@
{
"id": "eshaper_rockbolt",
"type": "SPELL",
- "name": "Rockbolt",
+ "name": { "str": "Rockbolt" },
"description": "Fires a conjured stone projectile at high velocity.",
"valid_targets": [ "hostile", "ally" ],
"flags": [ "SOMATIC", "LOUD" ],
- "min_damage": 5,
+ "min_damage": 28,
"damage_increment": 1.5,
"damage_type": "bash",
- "max_damage": 26,
- "min_range": 5,
+ "max_damage": 62,
+ "min_range": 13,
"range_increment": 0.5,
- "max_range": 15,
+ "max_range": 31,
"base_energy_cost": 50,
"spell_class": "EARTHSHAPER",
"difficulty": 1,
- "max_level": 20,
+ "max_level": 30,
"base_casting_time": 100,
"energy_source": "MANA",
"effect": "projectile_attack"
@@ -164,7 +167,7 @@
{
"id": "move_earth",
"type": "SPELL",
- "name": "Move Earth",
+ "name": { "str": "Move Earth" },
"description": "Your essense flows around you, and the earth follows.",
"valid_targets": [ "hostile", "ally", "ground", "self" ],
"flags": [ "SOMATIC", "LOUD" ],
@@ -188,7 +191,7 @@
{
"id": "create_rune_earthshaper",
"type": "SPELL",
- "name": "Earthshaper Rune",
+ "name": { "str": "Earthshaper Rune" },
"description": "This ritual creates a small pebble attuned to Earthshapers. You can use the rune as a catalyst for recipes.",
"valid_targets": [ "self" ],
"min_damage": 1,
@@ -209,45 +212,45 @@
{
"id": "lava_bomb_shrapnel",
"type": "SPELL",
- "name": "Lava Bomb Shrapnel",
+ "name": { "str": "Lava Bomb Shrapnel" },
"description": "This is a sub spell for the Lava Bomb spell.",
"effect": "projectile_attack",
"valid_targets": [ "hostile", "ally", "self", "ground" ],
"damage_type": "cut",
- "max_level": 30,
- "min_damage": 5,
- "max_damage": 65,
+ "max_level": 45,
+ "min_damage": 50,
+ "max_damage": 143,
"damage_increment": 2,
- "min_aoe": 1,
- "max_aoe": 3,
+ "min_aoe": 3,
+ "max_aoe": 9,
"aoe_increment": 0.1
},
{
"id": "lava_bomb_heat",
"type": "SPELL",
- "name": "Lava Bomb Heat",
+ "name": { "str": "Lava Bomb Heat" },
"description": "This is a sub spell for the Lava Bomb spell.",
"effect": "projectile_attack",
"valid_targets": [ "hostile", "ally", "self", "ground" ],
"damage_type": "fire",
- "max_level": 30,
- "min_damage": 10,
- "max_damage": 90,
+ "max_level": 45,
+ "min_damage": 61,
+ "max_damage": 186,
"damage_increment": 2.25,
- "min_aoe": 3,
- "max_aoe": 5,
+ "min_aoe": 5,
+ "max_aoe": 9,
"aoe_increment": 0.1
},
{
"id": "lava_bomb_ter",
"type": "SPELL",
- "name": "Lava Bomb Terrain",
+ "name": { "str": "Lava Bomb Terrain" },
"description": "This is a sub spell for the Lava Bomb spell.",
"effect": "ter_transform",
"effect_str": "lava_bomb",
- "max_level": 30,
+ "max_level": 45,
"min_aoe": 0,
- "max_aoe": 2,
+ "max_aoe": 3,
"aoe_increment": 0.15,
"valid_targets": [ "hostile", "ally", "self", "ground" ]
},
@@ -255,18 +258,18 @@
"id": "lava_bomb_main",
"//": "The main part of the spell that causes all of the side effects.",
"type": "SPELL",
- "name": "Lava Bomb",
+ "name": { "str": "Lava Bomb" },
"description": "You tear up the ground beneath you to fire a lava bomb: a globe of lava surrounded by hot, solid rock. It shatters upon impact, spraying shards of rock and lava everywhere.",
"effect": "projectile_attack",
"valid_targets": [ "hostile", "ground", "ally" ],
"damage_type": "bash",
- "max_level": 30,
+ "max_level": 45,
"difficulty": 12,
- "min_damage": 20,
- "max_damage": 140,
+ "min_damage": 110,
+ "max_damage": 300,
"damage_increment": 4,
- "min_range": 6,
- "max_range": 10,
+ "min_range": 11,
+ "max_range": 20,
"range_increment": 0.2,
"base_casting_time": 350,
"base_energy_cost": 1000,
@@ -277,7 +280,7 @@
{
"id": "earthshaper_stoneskin",
"type": "SPELL",
- "name": "Stoneskin",
+ "name": { "str": "Stoneskin" },
"description": "Envelops your entire body in armor formed from living rock, encumbering yet protective.",
"valid_targets": [ "self" ],
"effect": "spawn_item",
@@ -288,17 +291,17 @@
"difficulty": 4,
"base_casting_time": 200,
"base_energy_cost": 200,
- "max_level": 20,
+ "max_level": 30,
"min_damage": 1,
"max_damage": 1,
- "min_duration": 10000,
- "max_duration": 100000,
+ "min_duration": 40000,
+ "max_duration": 180000,
"duration_increment": 2000
},
{
"id": "earthshaper_pillar",
"type": "SPELL",
- "name": "Pillar of Stone",
+ "name": { "str": "Pillar of Stone" },
"description": "Drawing upon the surrounding earth, you form a pillar of solid rock. Experience will make the task easier, and less disruptive to the surrounding area.",
"valid_targets": [ "ground" ],
"effect": "ter_transform",
@@ -313,14 +316,14 @@
"casting_time_increment": -2400,
"base_energy_cost": 500,
"max_level": 10,
- "min_range": 3,
- "max_range": 6,
+ "min_range": 5,
+ "max_range": 8,
"range_increment": 0.3
},
{
"id": "earthshaper_pillar_side_effect",
"type": "SPELL",
- "name": "Pillar Side Effect",
+ "name": { "str": "Pillar Side Effect" },
"description": "Bash effect that follows, levels reduce damage and AoE.",
"valid_targets": [ "ground" ],
"effect": "bash",
diff --git a/data/mods/Magiclysm/Spells/item_only.json b/data/mods/Magiclysm/Spells/item_only.json
index da4a4c9de0b8..e35a7967a97a 100644
--- a/data/mods/Magiclysm/Spells/item_only.json
+++ b/data/mods/Magiclysm/Spells/item_only.json
@@ -2,7 +2,7 @@
{
"id": "twisted_restore",
"type": "SPELL",
- "name": "Twisted Restoration",
+ "name": { "str": "Twisted Restoration" },
"//": "Used for potion of Twisted Restoration, not castable",
"description": "This spell overclocks your heart, generating new flesh and muscle. It is unwise to use this in immediate danger, and may be fatal if done in critical condition.",
"valid_targets": [ "self" ],
@@ -30,7 +30,7 @@
{
"id": "twisted_restore_improved",
"type": "SPELL",
- "name": "Improved Twisted Restoration",
+ "name": { "str": "Improved Twisted Restoration" },
"//": "Used for Animist-exclusive potion, not castable",
"description": "This spell overclocks your heart, generating new flesh and muscle. It is unwise to use this in immediate danger, and may be fatal if done in critical condition. Improved brewing mitigates the strain of the spell.",
"valid_targets": [ "self" ],
@@ -51,7 +51,7 @@
{
"id": "conj_throwing_blade1",
"type": "SPELL",
- "name": "Conjure Throwing Blade I",
+ "name": { "str": "Conjure Throwing Blade I" },
"description": "conjures 3 throwing knives",
"valid_targets": [ "self" ],
"effect": "spawn_item",
@@ -68,13 +68,13 @@
{
"id": "potion_recover_mana",
"type": "SPELL",
- "name": "Recover Mana",
+ "name": { "str": "Recover Mana" },
"description": "You regain mana.",
"valid_targets": [ "self" ],
"min_damage": 250,
"damage_increment": 50.0,
- "max_damage": 2000,
- "max_level": 35,
+ "max_damage": 3000,
+ "max_level": 53,
"effect": "recover_energy",
"effect_str": "MANA",
"spell_class": "NONE",
diff --git a/data/mods/Magiclysm/Spells/kelvinist.json b/data/mods/Magiclysm/Spells/kelvinist.json
index 9299e3a53683..c3a0f389b49b 100644
--- a/data/mods/Magiclysm/Spells/kelvinist.json
+++ b/data/mods/Magiclysm/Spells/kelvinist.json
@@ -2,29 +2,29 @@
{
"id": "point_flare",
"type": "SPELL",
- "name": "Point Flare",
+ "name": { "str": "Point Flare" },
"description": "Causes an intense heat at the location, damaging the target.",
"valid_targets": [ "hostile" ],
"flags": [ "CONCENTRATE", "SOMATIC", "LOUD" ],
"effect": "target_attack",
"damage_type": "fire",
- "min_damage": 16,
+ "min_damage": 60,
"damage_increment": 4.0,
- "max_damage": 80,
- "min_range": 3,
+ "max_damage": 164,
+ "min_range": 9,
"range_increment": 0.5,
- "max_range": 11,
+ "max_range": 23,
"base_energy_cost": 75,
"spell_class": "KELVINIST",
"difficulty": 4,
- "max_level": 16,
+ "max_level": 22,
"base_casting_time": 300,
"energy_source": "MANA"
},
{
"id": "create_lighter",
"type": "SPELL",
- "name": "Finger Firelighter",
+ "name": { "str": "Finger Firelighter" },
"description": "Summons a small flame that does not burn you, but you can use it to light things on fire. It seems to need you to have some intent to light things on fire, because you are able to put it in your pocket with no issue.",
"valid_targets": [ "none" ],
"flags": [ "NO_LEGS" ],
@@ -32,10 +32,10 @@
"effect_str": "finger_firelighter",
"min_damage": 1,
"max_damage": 1,
- "min_duration": 6000,
- "max_duration": 60000,
+ "min_duration": 46500,
+ "max_duration": 130500,
"duration_increment": 5400,
- "max_level": 10,
+ "max_level": 15,
"spell_class": "KELVINIST",
"energy_source": "MANA",
"base_casting_time": 250,
@@ -47,19 +47,19 @@
{
"id": "ice_spike",
"type": "SPELL",
- "name": "Ice Spike",
+ "name": { "str": "Ice Spike" },
"description": "Causes jagged icicles to form in the air above the target, falling and damaging it.",
"valid_targets": [ "hostile" ],
"flags": [ "CONCENTRATE", "SOMATIC", "LOUD", "VERBAL" ],
"effect": "target_attack",
"damage_type": "cold",
- "min_damage": 30,
- "max_damage": 100,
+ "min_damage": 83,
+ "max_damage": 203,
"damage_increment": 3.5,
- "min_range": 4,
- "max_range": 12,
+ "min_range": 13,
+ "max_range": 27,
"range_increment": 0.6,
- "max_level": 20,
+ "max_level": 30,
"difficulty": 6,
"spell_class": "KELVINIST",
"base_casting_time": 200,
@@ -69,20 +69,20 @@
{
"id": "fireball",
"type": "SPELL",
- "name": "Fireball",
+ "name": { "str": "Fireball" },
"description": "You hurl a pea-sized glowing orb that when reaches its target or an obstacle produces a pressure-less blast of searing heat.",
"effect": "projectile_attack",
"valid_targets": [ "self", "ally", "hostile", "ground" ],
"flags": [ "SOMATIC", "VERBAL", "NO_LEGS" ],
- "max_level": 20,
- "min_damage": 24,
- "max_damage": 68,
- "damage_increment": 1.2,
- "min_aoe": 3,
- "max_aoe": 5,
+ "max_level": 30,
+ "min_damage": 54,
+ "max_damage": 132,
+ "damage_increment": 2.0,
+ "min_aoe": 5,
+ "max_aoe": 9,
"aoe_increment": 0.1,
- "min_range": 6,
- "max_range": 20,
+ "min_range": 21,
+ "max_range": 45,
"range_increment": 1.0,
"spell_class": "KELVINIST",
"base_casting_time": 200,
@@ -94,20 +94,20 @@
{
"id": "cone_cold",
"type": "SPELL",
- "name": "Cone of Cold",
+ "name": { "str": "Cone of Cold" },
"description": "You blast a cone of frigid air toward the target.",
"effect": "cone_attack",
"valid_targets": [ "ally", "hostile", "ground" ],
"flags": [ "SOMATIC", "VERBAL" ],
- "max_level": 20,
- "min_damage": 24,
- "max_damage": 68,
- "damage_increment": 1.2,
- "min_aoe": 30,
- "max_aoe": 60,
+ "max_level": 30,
+ "min_damage": 54,
+ "max_damage": 132,
+ "damage_increment": 2.0,
+ "min_aoe": 51,
+ "max_aoe": 111,
"aoe_increment": 1.4,
- "min_range": 6,
- "max_range": 20,
+ "min_range": 21,
+ "max_range": 45,
"range_increment": 1.0,
"spell_class": "KELVINIST",
"base_casting_time": 200,
@@ -115,8 +115,9 @@
"energy_source": "MANA",
"difficulty": 4,
"field_id": "fd_cold_air2",
- "min_field_intensity": 0,
- "max_field_intensity": 4,
+ "min_field_intensity": 2,
+ "max_field_intensity": 6,
+ "//": "Look, this isn't technically using the same system as the rest of the stat adjustments, but field intensity is something I probably shouldn't fuck with too much.",
"field_intensity_increment": 0.5,
"damage_type": "cold"
},
@@ -128,15 +129,16 @@
"effect": "cone_attack",
"valid_targets": [ "ally", "hostile", "ground" ],
"flags": [ "SOMATIC", "VERBAL" ],
- "max_level": 20,
- "min_damage": 8,
- "max_damage": 65,
+ "max_level": 30,
+ "min_damage": 69,
+ "//": "Haha funny number, yes I gave into the inner demons",
+ "max_damage": 156,
"damage_increment": 4.0,
- "min_range": 3,
- "max_range": 5,
+ "min_range": 7,
+ "max_range": 12,
"range_increment": 0.25,
- "min_aoe": 25,
- "max_aoe": 60,
+ "min_aoe": 100,
+ "max_aoe": 165,
"aoe_increment": 5.0,
"spell_class": "KELVINIST",
"base_casting_time": 100,
@@ -148,22 +150,22 @@
{
"id": "frost_spray",
"type": "SPELL",
- "name": "Frost Spray",
+ "name": { "str": "Frost Spray" },
"description": "You're pretty sure you saw this in a game somewhere. You fire a short-range cone of ice and cold.",
"effect": "cone_attack",
"effect_str": "cold",
"affected_body_parts": [ "torso" ],
"valid_targets": [ "ally", "hostile", "ground" ],
"flags": [ "SOMATIC", "VERBAL" ],
- "max_level": 20,
- "min_damage": 8,
- "max_damage": 65,
+ "max_level": 30,
+ "min_damage": 69,
+ "max_damage": 156,
"damage_increment": 4.0,
- "min_range": 3,
- "max_range": 5,
+ "min_range": 7,
+ "max_range": 12,
"range_increment": 0.25,
- "min_aoe": 25,
- "max_aoe": 60,
+ "min_aoe": 100,
+ "max_aoe": 165,
"aoe_increment": 5.0,
"spell_class": "KELVINIST",
"base_casting_time": 100,
@@ -175,7 +177,7 @@
{
"id": "chilling_touch",
"type": "SPELL",
- "name": "Chilling Touch",
+ "name": { "str": "Chilling Touch" },
"description": "Freezes the touched target with intense cold.",
"valid_targets": [ "hostile" ],
"flags": [ "SOMATIC" ],
@@ -183,22 +185,22 @@
"effect_str": "cold",
"affected_body_parts": [ "torso" ],
"damage_type": "cold",
- "min_damage": 3,
+ "min_damage": 33,
"damage_increment": 4.0,
- "max_damage": 40,
+ "max_damage": 90,
"min_range": 1,
"max_range": 1,
"base_energy_cost": 50,
"spell_class": "KELVINIST",
"difficulty": 1,
- "max_level": 10,
+ "max_level": 15,
"base_casting_time": 100,
"energy_source": "MANA"
},
{
"id": "glide_ice",
"type": "SPELL",
- "name": "Glide on Ice",
+ "name": { "str": "Glide on Ice" },
"description": "Encases your feet in a magical coating of ice, allowing you to glide along smooth surfaces faster.",
"valid_targets": [ "none" ],
"flags": [ "VERBAL", "NO_HANDS", "NO_LEGS", "CONCENTRATE" ],
@@ -209,32 +211,32 @@
"energy_source": "MANA",
"spell_class": "KELVINIST",
"difficulty": 2,
- "max_level": 20,
+ "max_level": 30,
"base_casting_time": 650,
"base_energy_cost": 100,
- "min_duration": 10000,
- "max_duration": 100000,
+ "min_duration": 40000,
+ "max_duration": 180000,
"duration_increment": 2000
},
{
"id": "hoary_blast",
"type": "SPELL",
- "name": "Hoary Blast",
+ "name": { "str": "Hoary Blast" },
"description": "You project a glowing white crystal of ice and it explodes on impact into a blossom of shattering cold.",
"effect": "projectile_attack",
"effect_str": "cold",
"affected_body_parts": [ "torso" ],
"valid_targets": [ "self", "ally", "hostile", "ground" ],
"flags": [ "SOMATIC", "VERBAL", "NO_LEGS" ],
- "max_level": 20,
- "min_damage": 24,
- "max_damage": 68,
- "damage_increment": 1.2,
- "min_aoe": 3,
- "max_aoe": 5,
+ "max_level": 30,
+ "min_damage": 54,
+ "max_damage": 132,
+ "damage_increment": 2.0,
+ "min_aoe": 5,
+ "max_aoe": 10,
"aoe_increment": 0.1,
- "min_range": 6,
- "max_range": 20,
+ "min_range": 21,
+ "max_range": 45,
"range_increment": 1.0,
"spell_class": "KELVINIST",
"base_casting_time": 200,
@@ -246,7 +248,7 @@
{
"id": "ice_shield",
"type": "SPELL",
- "name": "Ice Shield",
+ "name": { "str": "Ice Shield" },
"description": "Creates a magical shield of ice on your arm, you can defend yourself with it in melee combat and use it to bash.",
"valid_targets": [ "none" ],
"flags": [ "NO_LEGS", "CONCENTRATE", "VERBAL" ],
@@ -257,17 +259,17 @@
"energy_source": "MANA",
"spell_class": "KELVINIST",
"difficulty": 2,
- "max_level": 20,
+ "max_level": 30,
"base_casting_time": 150,
"base_energy_cost": 100,
- "min_duration": 10000,
- "max_duration": 50000,
+ "min_duration": 55000,
+ "max_duration": 120000,
"duration_increment": 3000
},
{
"id": "frost_armor",
"type": "SPELL",
- "name": "Frost Armor",
+ "name": { "str": "Frost Armor" },
"description": "Covers you in a thin layer of magical ice to protect you from harm.",
"valid_targets": [ "self" ],
"flags": [ "NO_LEGS", "CONCENTRATE", "VERBAL", "SOMATIC" ],
@@ -277,17 +279,17 @@
"energy_source": "MANA",
"spell_class": "KELVINIST",
"difficulty": 3,
- "max_level": 20,
+ "max_level": 30,
"base_casting_time": 200,
"base_energy_cost": 550,
- "min_duration": 10000,
- "max_duration": 50000,
+ "min_duration": 55000,
+ "max_duration": 120000,
"duration_increment": 3000
},
{
"id": "create_rune_kelvinist",
"type": "SPELL",
- "name": "Kelvinist Rune",
+ "name": { "str": "Kelvinist Rune" },
"description": "This ritual creates a small pebble attuned to Kelvinists. You can use the rune as a catalyst for recipes.",
"valid_targets": [ "self" ],
"min_damage": 1,
diff --git a/data/mods/Magiclysm/Spells/magus.json b/data/mods/Magiclysm/Spells/magus.json
index f6d54d304ffb..20f5aeff1a8f 100644
--- a/data/mods/Magiclysm/Spells/magus.json
+++ b/data/mods/Magiclysm/Spells/magus.json
@@ -2,21 +2,21 @@
{
"id": "magic_missile",
"type": "SPELL",
- "name": "Magic Missile",
+ "name": { "str": "Magic Missile" },
"description": "I cast Magic Missile at the darkness!",
"valid_targets": [ "hostile" ],
"flags": [ "VERBAL", "SOMATIC", "NO_LEGS", "SILENT" ],
- "min_damage": 1,
+ "min_damage": 18,
"damage_increment": 1.5,
"damage_type": "none",
- "max_damage": 20,
- "min_range": 8,
+ "max_damage": 47,
+ "min_range": 17,
"range_increment": 0.8,
- "max_range": 20,
+ "max_range": 39,
"base_energy_cost": 50,
"spell_class": "MAGUS",
"difficulty": 1,
- "max_level": 15,
+ "max_level": 22,
"base_casting_time": 100,
"energy_source": "MANA",
"effect": "target_attack"
@@ -24,18 +24,18 @@
{
"id": "phase_door",
"type": "SPELL",
- "name": "Phase Door",
+ "name": { "str": "Phase Door" },
"description": "Teleports you in a random direction a short distance.",
"effect": "teleport_random",
"valid_targets": [ "none" ],
"flags": [ "SOMATIC", "SILENT", "NO_LEGS" ],
- "min_range": 3,
- "max_range": 4,
+ "min_range": 4,
+ "max_range": 7,
"range_increment": 0.1,
- "min_aoe": 2,
- "max_aoe": 4,
+ "min_aoe": 4,
+ "max_aoe": 8,
"aoe_increment": 0.2,
- "max_level": 10,
+ "max_level": 15,
"difficulty": 2,
"spell_class": "MAGUS",
"base_casting_time": 100,
@@ -45,22 +45,22 @@
{
"id": "gravity_well",
"type": "SPELL",
- "name": "Gravity Well",
+ "name": { "str": "Gravity Well" },
"description": "Summons a well of gravity with the epicenter at the location. Deals bashing damage to all creatures in the affected area.",
"effect": "target_attack",
"valid_targets": [ "self", "ally", "hostile", "ground" ],
"flags": [ "SOMATIC", "VERBAL", "CONCENTRATE" ],
- "min_damage": 20,
- "max_damage": 45,
+ "min_damage": 38,
+ "max_damage": 83,
"damage_increment": 1.2,
"damage_type": "bash",
- "min_range": 5,
- "max_range": 15,
+ "min_range": 13,
+ "max_range": 30,
"range_increment": 0.5,
- "min_aoe": 1,
- "max_aoe": 6,
+ "min_aoe": 5,
+ "max_aoe": 13,
"aoe_increment": 0.25,
- "max_level": 20,
+ "max_level": 30,
"difficulty": 10,
"spell_class": "MAGUS",
"base_casting_time": 600,
@@ -70,7 +70,7 @@
{
"id": "magus_mana_blast",
"type": "SPELL",
- "name": "Mana Blast",
+ "name": { "str": "Mana Blast" },
"description": "A blast of concentrated magical power that obliterates a large area.",
"valid_targets": [ "hostile", "ground" ],
"flags": [ "VERBAL", "SOMATIC", "NO_LEGS" ],
@@ -80,22 +80,22 @@
"base_casting_time": 150,
"base_energy_cost": 200,
"difficulty": 5,
- "max_level": 20,
- "min_damage": 20,
- "max_damage": 80,
- "damage_increment": 3,
+ "max_level": 30,
+ "min_damage": 65,
+ "max_damage": 165,
+ "damage_increment": 3.0,
"damage_type": "none",
- "min_aoe": 1,
- "max_aoe": 3,
+ "min_aoe": 5,
+ "max_aoe": 9,
"aoe_increment": 0.25,
- "min_range": 5,
- "max_range": 20,
+ "min_range": 20,
+ "max_range": 45,
"range_increment": 1
},
{
"id": "magus_mana_bolt",
"type": "SPELL",
- "name": "Mana Bolt",
+ "name": { "str": "Mana Bolt" },
"description": "A bolt of magical power that only damages your foes.",
"valid_targets": [ "hostile" ],
"flags": [ "VERBAL", "SOMATIC", "NO_LEGS" ],
@@ -105,19 +105,19 @@
"base_casting_time": 100,
"base_energy_cost": 150,
"difficulty": 5,
- "max_level": 20,
- "min_damage": 20,
- "max_damage": 120,
- "damage_increment": 5,
+ "max_level": 30,
+ "min_damage": 95,
+ "max_damage": 255,
+ "damage_increment": 5.0,
"damage_type": "none",
- "min_range": 5,
- "max_range": 30,
+ "min_range": 28,
+ "max_range": 68,
"range_increment": 1.5
},
{
"id": "magus_haste",
"type": "SPELL",
- "name": "Haste",
+ "name": { "str": "Haste" },
"description": "This spell gives you an enormous boost of speed lasting a short period of time.",
"valid_targets": [ "self" ],
"flags": [ "LOUD", "VERBAL", "SOMATIC" ],
@@ -128,15 +128,15 @@
"difficulty": 4,
"base_casting_time": 200,
"base_energy_cost": 300,
- "max_level": 20,
- "min_duration": 600,
- "max_duration": 12000,
+ "max_level": 30,
+ "min_duration": 9600,
+ "max_duration": 27000,
"duration_increment": 600
},
{
"id": "magus_mana_beam",
"type": "SPELL",
- "name": "Mana Beam",
+ "name": { "str": "Mana Beam" },
"description": "A beam of focused magical power that damages any foes in its path.",
"valid_targets": [ "hostile", "ground" ],
"flags": [ "VERBAL", "SOMATIC", "NO_LEGS", "LOUD" ],
@@ -146,32 +146,32 @@
"base_casting_time": 150,
"base_energy_cost": 200,
"difficulty": 4,
- "max_level": 20,
- "min_damage": 15,
- "max_damage": 60,
- "damage_increment": 3,
+ "max_level": 30,
+ "min_damage": 60,
+ "max_damage": 135,
+ "damage_increment": 3.0,
"damage_type": "none",
"min_aoe": 1,
"max_aoe": 1,
- "min_range": 5,
- "max_range": 20,
+ "min_range": 20,
+ "max_range": 45,
"range_increment": 1
},
{
"id": "magus_escape",
"type": "SPELL",
- "name": "Escape",
+ "name": { "str": "Escape" },
"description": "Teleports you in a random direction a medium distance, to help escape your foes in dangerous situations.",
"effect": "teleport_random",
"valid_targets": [ "none" ],
"flags": [ "SOMATIC", "SILENT", "NO_LEGS", "VERBAL" ],
- "min_aoe": 5,
- "max_aoe": 10,
+ "min_aoe": 9,
+ "max_aoe": 19,
"aoe_increment": 0.25,
- "min_range": 25,
- "max_range": 35,
+ "min_range": 33,
+ "max_range": 60,
"range_increment": 0.5,
- "max_level": 10,
+ "max_level": 30,
"difficulty": 5,
"spell_class": "MAGUS",
"base_casting_time": 100,
@@ -181,7 +181,7 @@
{
"id": "create_rune_magus",
"type": "SPELL",
- "name": "Magus Rune",
+ "name": { "str": "Magus Rune" },
"description": "This ritual creates a small pebble attuned to Magi. You can use the rune as a catalyst for recipes.",
"valid_targets": [ "self" ],
"min_damage": 1,
@@ -202,13 +202,13 @@
{
"id": "cats_grace",
"type": "SPELL",
- "name": "Cat's Grace",
+ "name": { "str": "Cat's Grace" },
"description": "You become more graceful, agile, and coordinated.",
"valid_targets": [ "self" ],
- "min_duration": 6000,
- "max_duration": 360000,
+ "min_duration": 141000,
+ "max_duration": 675000,
"duration_increment": 6000,
- "max_level": 30,
+ "max_level": 45,
"spell_class": "MAGUS",
"energy_source": "MANA",
"base_energy_cost": 500,
@@ -221,13 +221,13 @@
{
"id": "eagles_sight",
"type": "SPELL",
- "name": "Eagle's Sight",
+ "name": { "str": "Eagle's Sight" },
"description": "You gain the perception of an eagle.",
"valid_targets": [ "self" ],
- "min_duration": 6000,
- "max_duration": 360000,
+ "min_duration": 141000,
+ "max_duration": 675000,
"duration_increment": 6000,
- "max_level": 30,
+ "max_level": 45,
"spell_class": "MAGUS",
"energy_source": "MANA",
"base_energy_cost": 500,
@@ -240,13 +240,13 @@
{
"id": "ogres_strength",
"type": "SPELL",
- "name": "Ogre's Strength",
+ "name": { "str": "Ogre's Strength" },
"description": "You gain the strength of an ogre.",
"valid_targets": [ "self" ],
- "min_duration": 6000,
- "max_duration": 360000,
+ "min_duration": 141000,
+ "max_duration": 675000,
"duration_increment": 6000,
- "max_level": 30,
+ "max_level": 45,
"spell_class": "MAGUS",
"energy_source": "MANA",
"base_energy_cost": 500,
@@ -259,13 +259,13 @@
{
"id": "foxs_cunning",
"type": "SPELL",
- "name": "Fox's Cunning",
+ "name": { "str": "Fox's Cunning" },
"description": "You become wily like a fox.",
"valid_targets": [ "self" ],
- "min_duration": 6000,
- "max_duration": 360000,
+ "min_duration": 141000,
+ "max_duration": 675000,
"duration_increment": 6000,
- "max_level": 30,
+ "max_level": 45,
"spell_class": "MAGUS",
"energy_source": "MANA",
"base_energy_cost": 500,
diff --git a/data/mods/Magiclysm/Spells/manatouched.json b/data/mods/Magiclysm/Spells/manatouched.json
index 108b40cded18..aed8ae81f777 100644
--- a/data/mods/Magiclysm/Spells/manatouched.json
+++ b/data/mods/Magiclysm/Spells/manatouched.json
@@ -2,7 +2,7 @@
{
"id": "manatouched_crystal",
"type": "SPELL",
- "name": "Crystallize Mana",
+ "name": { "str": "Crystallize Mana" },
"description": "Crystallizes mana into solid form. Your physiological changes have made this spell much more efficient and easier to cast.",
"valid_targets": [ "self" ],
"spell_class": "MANA_CRYST_MANA",
@@ -24,17 +24,17 @@
{
"id": "manatouched_seeker_bolts",
"type": "SPELL",
- "name": "Seeker Bolts",
+ "name": { "str": "Seeker Bolts" },
"effect": "projectile_attack",
"description": "Fires bolts of mana from your fingertips that home in on randomly selected targets in range.",
"valid_targets": [ "hostile" ],
"spell_class": "MANA_SEEKER_BOLTS",
- "min_damage": 6,
- "max_damage": 18,
- "damage_increment": 1,
- "max_level": 12,
- "min_range": 6,
- "max_range": 12,
+ "min_damage": 15,
+ "max_damage": 36,
+ "damage_increment": 1.0,
+ "max_level": 18,
+ "min_range": 11,
+ "max_range": 23,
"range_increment": 0.5,
"energy_source": "MANA",
"base_energy_cost": 250,
diff --git a/data/mods/Magiclysm/Spells/monsterspells.json b/data/mods/Magiclysm/Spells/monsterspells.json
index f9e5eab85b21..c1ad78faf0bc 100644
--- a/data/mods/Magiclysm/Spells/monsterspells.json
+++ b/data/mods/Magiclysm/Spells/monsterspells.json
@@ -110,5 +110,30 @@
"base_casting_time": 160,
"effect": "summon",
"effect_str": "mon_demon_spiderling"
+ },
+ {
+ "id": "monster_burning_hands",
+ "type": "SPELL",
+ "name": { "str": "Burning Hands" },
+ "description": "Separated from the player burning hands, because I'm not trying to accidentally buff Demon Spiders again.",
+ "effect": "cone_attack",
+ "valid_targets": [ "ally", "hostile", "ground" ],
+ "flags": [ "SOMATIC", "VERBAL" ],
+ "max_level": 20,
+ "min_damage": 8,
+ "max_damage": 65,
+ "damage_increment": 4.0,
+ "min_range": 3,
+ "max_range": 5,
+ "range_increment": 0.25,
+ "min_aoe": 25,
+ "max_aoe": 60,
+ "aoe_increment": 5.0,
+ "spell_class": "KELVINIST",
+ "base_casting_time": 100,
+ "base_energy_cost": 150,
+ "energy_source": "MANA",
+ "difficulty": 2,
+ "damage_type": "fire"
}
]
diff --git a/data/mods/Magiclysm/Spells/stormshaper.json b/data/mods/Magiclysm/Spells/stormshaper.json
index 5a077e3b8c1a..8e19a1b0dcf7 100644
--- a/data/mods/Magiclysm/Spells/stormshaper.json
+++ b/data/mods/Magiclysm/Spells/stormshaper.json
@@ -2,20 +2,20 @@
{
"id": "jolt",
"type": "SPELL",
- "name": "Jolt",
+ "name": { "str": "Jolt" },
"description": "A short-ranged fan of electricity shoots from your fingers.",
"effect": "cone_attack",
"valid_targets": [ "ally", "hostile", "ground" ],
"flags": [ "LOUD", "SOMATIC" ],
- "max_level": 20,
- "min_damage": 8,
- "max_damage": 65,
- "damage_increment": 4,
- "min_range": 3,
- "max_range": 5,
+ "max_level": 30,
+ "min_damage": 68,
+ "max_damage": 155,
+ "damage_increment": 4.0,
+ "min_range": 7,
+ "max_range": 12,
"range_increment": 0.25,
- "min_aoe": 25,
- "max_aoe": 60,
+ "min_aoe": 100,
+ "max_aoe": 165,
"aoe_increment": 5,
"spell_class": "STORMSHAPER",
"base_casting_time": 100,
@@ -28,24 +28,24 @@
{
"id": "lightning_bolt",
"type": "SPELL",
- "name": "Lightning Bolt",
+ "name": { "str": "Lightning Bolt" },
"description": "The goto spell for many Stormshapers, this iconic spell does just what you expect: you shoot lightning from your fingertips. However, this lightning is more directed than most lightning, and travels in a line through most non-solid targets.",
"effect": "line_attack",
"valid_targets": [ "ally", "hostile", "ground" ],
"flags": [ "LOUD", "SOMATIC", "NO_LEGS" ],
- "max_level": 35,
- "min_damage": 8,
- "max_damage": 200,
- "damage_increment": 6,
- "min_range": 4,
- "max_range": 8,
+ "max_level": 50,
+ "min_damage": 158,
+ "max_damage": 450,
+ "damage_increment": 6.0,
+ "min_range": 10,
+ "max_range": 18,
"range_increment": 0.25,
"difficulty": 6,
"min_aoe": 1,
"max_aoe": 1,
"spell_class": "STORMSHAPER",
"base_casting_time": 200,
- "final_casting_time": 100,
+ "final_casting_time": 50,
"casting_time_increment": -5,
"base_energy_cost": 140,
"field_id": "fd_electricity",
@@ -59,7 +59,7 @@
{
"id": "windstrike",
"type": "SPELL",
- "name": "Windstrike",
+ "name": { "str": "Windstrike" },
"description": "A powerful blast of wind slams into anything in front of your outstretched hand.",
"sprite": "fd_insecticidal_gas",
"effect": "cone_attack",
@@ -67,18 +67,18 @@
"affected_body_parts": [ "leg_l", "leg_r" ],
"valid_targets": [ "ally", "hostile", "ground" ],
"flags": [ "SOMATIC", "NO_LEGS" ],
- "max_level": 10,
- "min_damage": 24,
- "max_damage": 68,
- "damage_increment": 1.2,
- "min_aoe": 30,
- "max_aoe": 60,
+ "max_level": 30,
+ "min_damage": 57,
+ "max_damage": 169,
+ "damage_increment": 2.2,
+ "min_aoe": 51,
+ "max_aoe": 111,
"aoe_increment": 1.4,
- "min_range": 6,
- "max_range": 20,
- "range_increment": 1,
- "min_duration": 200,
- "max_duration": 1000,
+ "min_range": 19,
+ "max_range": 43,
+ "range_increment": 0.85,
+ "min_duration": 1700,
+ "max_duration": 4000,
"duration_increment": 100,
"base_casting_time": 125,
"base_energy_cost": 285,
@@ -91,7 +91,7 @@
{
"id": "windrun",
"type": "SPELL",
- "name": "Windrunning",
+ "name": { "str": "Windrunning" },
"description": "A magical wind pushes you forward as you move, easing your movements and increasing speed.",
"base_casting_time": 125,
"base_energy_cost": 100,
@@ -103,18 +103,18 @@
"affected_body_parts": [ "torso" ],
"valid_targets": [ "ally", "self" ],
"flags": [ "CONCENTRATE", "SILENT", "VERBAL", "NO_HANDS" ],
- "max_level": 10,
- "min_duration": 2000,
- "max_duration": 10000,
+ "max_level": 15,
+ "min_duration": 9500,
+ "max_duration": 22500,
"duration_increment": 1000,
- "min_range": 1,
- "max_range": 20,
+ "min_range": 9,
+ "max_range": 38,
"range_increment": 1
},
{
"id": "storm_hammer",
"type": "SPELL",
- "name": "Call Stormhammer",
+ "name": { "str": "Call Stormhammer" },
"description": "Creates a crackling magical warhammer full of lightning to smite your foes with, and of course, smash things to bits!",
"valid_targets": [ "self" ],
"flags": [ "CONCENTRATE", "LOUD", "VERBAL", "NO_LEGS" ],
@@ -125,17 +125,17 @@
"energy_source": "MANA",
"spell_class": "STORMSHAPER",
"difficulty": 3,
- "max_level": 20,
+ "max_level": 30,
"base_casting_time": 150,
"base_energy_cost": 100,
- "min_duration": 10000,
- "max_duration": 50000,
+ "min_duration": 40000,
+ "max_duration": 105000,
"duration_increment": 2000
},
{
"id": "create_rune_stormshaper",
"type": "SPELL",
- "name": "Stormshaper Rune",
+ "name": { "str": "Stormshaper Rune" },
"description": "This ritual creates a small pebble attuned to Stormshapers. You can use the rune as a catalyst for recipes.",
"valid_targets": [ "self" ],
"min_damage": 1,
@@ -156,25 +156,25 @@
{
"id": "lightning_blast",
"type": "SPELL",
- "name": "Lightning Blast",
+ "name": { "str": "Lightning Blast" },
"description": "You fire a small concentrated ball of lightning at the target. The electricity diffuses quickly, so it doesn't do much damage, but you're able to fire off several quick ones in a row.",
"valid_targets": [ "hostile", "ground", "self", "ally" ],
"flags": [ "LOUD", "SOMATIC", "NO_LEGS" ],
- "min_aoe": 1,
- "max_aoe": 2,
+ "min_aoe": 2,
+ "max_aoe": 4,
"aoe_increment": 0.05,
- "max_level": 35,
- "min_damage": 4,
- "max_damage": 100,
- "min_range": 6,
- "max_range": 12,
- "range_increment": 0.02,
- "damage_increment": 3,
+ "max_level": 50,
+ "min_damage": 79,
+ "max_damage": 225,
+ "min_range": 11,
+ "max_range": 23,
+ "range_increment": 0.2,
+ "damage_increment": 3.0,
"difficulty": 10,
"spell_class": "STORMSHAPER",
"energy_source": "MANA",
"base_casting_time": 120,
- "final_casting_time": 50,
+ "final_casting_time": 25,
"casting_time_increment": -5,
"base_energy_cost": 55,
"damage_type": "electric",
@@ -184,20 +184,21 @@
{
"id": "lightning_storm",
"type": "SPELL",
- "name": "Lightning Storm",
+ "name": { "str": "Lightning Storm" },
"description": "You call the power of the sky to strike the earth. Several lightning blasts fire from your finger tips to strike the target.",
"valid_targets": [ "hostile", "ground", "self", "ally" ],
"flags": [ "CONCENTRATE", "LOUD", "VERBAL", "SOMATIC", "NO_LEGS" ],
- "min_aoe": 1,
- "max_aoe": 2,
+ "min_aoe": 2,
+ "max_aoe": 4,
"aoe_increment": 0.05,
- "max_level": 35,
- "min_damage": 30,
- "max_damage": 150,
- "min_range": 6,
- "max_range": 8,
- "range_increment": 0.01,
- "damage_increment": 4,
+ "max_level": 52,
+ "min_damage": 134,
+ "max_damage": 329,
+ "min_range": 9,
+ "max_range": 15,
+ "range_increment": 0.1,
+ "//": "0.01 range increment *must have been a typo*. It would at absolute most increase the range by 1. Now it at least has a chance",
+ "damage_increment": 4.0,
"difficulty": 20,
"spell_class": "STORMSHAPER",
"energy_source": "MANA",
@@ -210,7 +211,7 @@
{
"id": "stormshaper_ionization",
"type": "SPELL",
- "name": "Ionization",
+ "name": { "str": "Ionization" },
"description": "By manipulating the charge in the air, you can conjure a sharp snap of lightning over a wide area. While its destructive potential is a far cry from natural lightning, the light and thunderclap produced will leave your foes reeling.",
"sprite": "fd_electricity",
"valid_targets": [ "hostile", "ground", "self", "ally" ],
@@ -221,18 +222,18 @@
"spell_class": "STORMSHAPER",
"difficulty": 8,
"base_casting_time": 350,
- "final_casting_time": 200,
+ "final_casting_time": 140,
"casting_time_increment": -5,
"base_energy_cost": 300,
- "max_level": 30,
- "min_damage": 15,
- "max_damage": 60,
+ "max_level": 45,
+ "min_damage": 49,
+ "max_damage": 124,
"damage_increment": 1.5,
"damage_type": "electric",
"min_aoe": 7,
"max_aoe": 7,
- "min_range": 12,
- "max_range": 24,
+ "min_range": 21,
+ "max_range": 45,
"range_increment": 0.4,
"field_id": "fd_electricity",
"field_chance": 3,
@@ -244,20 +245,20 @@
{
"type": "SPELL",
"id": "stormshaper_ionization_thunderclap",
- "name": "Ionization Thunderclap",
+ "name": { "str": "Ionization Thunderclap" },
"description": "Adds the actual flashbang effect.",
"valid_targets": [ "hostile", "ground", "self", "ally" ],
"effect": "flashbang",
"flags": [ "LOUD" ],
- "max_level": 30,
- "min_range": 12,
- "max_range": 24,
+ "max_level": 45,
+ "min_range": 21,
+ "max_range": 45,
"range_increment": 0.4
},
{
"id": "stormshaper_wall_of_fog",
"type": "SPELL",
- "name": "Wall of Fog",
+ "name": { "str": "Wall of Fog" },
"description": "Draws forth a broad wall of thick fog. While the sudden force of air pressure will floor any enemies caught in it, the conjuration is otherwise harmless.",
"valid_targets": [ "hostile", "ground", "ally" ],
"effect": "line_attack",
@@ -268,15 +269,15 @@
"difficulty": 2,
"base_casting_time": 125,
"base_energy_cost": 150,
- "max_level": 10,
- "min_aoe": 5,
- "max_aoe": 10,
+ "max_level": 15,
+ "min_aoe": 9,
+ "max_aoe": 19,
"aoe_increment": 0.5,
- "min_range": 2,
- "max_range": 4,
+ "min_range": 4,
+ "max_range": 8,
"range_increment": 0.2,
- "min_duration": 200,
- "max_duration": 800,
+ "min_duration": 650,
+ "max_duration": 1650,
"duration_increment": 60,
"field_id": "fd_fog",
"field_chance": 1,
diff --git a/data/mods/Magiclysm/Spells/technomancer.json b/data/mods/Magiclysm/Spells/technomancer.json
index 47214f73b72f..0ad6dc57a713 100644
--- a/data/mods/Magiclysm/Spells/technomancer.json
+++ b/data/mods/Magiclysm/Spells/technomancer.json
@@ -1,35 +1,8 @@
[
- {
- "id": "bless",
- "type": "SPELL",
- "name": { "str": "Bless" },
- "description": "A spell of blessing that gives you energy and boosts your abilities.",
- "valid_targets": [ "self", "ally" ],
- "flags": [ "VERBAL", "SOMATIC", "NO_LEGS" ],
- "effect": "target_attack",
- "effect_str": "bless",
- "affected_body_parts": [ "torso" ],
- "base_casting_time": 100,
- "base_energy_cost": 100,
- "energy_source": "MANA",
- "spell_class": "TECHNOMANCER",
- "difficulty": 1,
- "max_level": 10,
- "min_aoe": 0,
- "max_aoe": 5,
- "aoe_increment": 0.1,
- "min_range": 1,
- "max_range": 10,
- "range_increment": 2.0,
- "//": "duration is in moves",
- "min_duration": 6000,
- "max_duration": 10000,
- "duration_increment": 400
- },
{
"id": "invisibility",
"type": "SPELL",
- "name": "Invisibility",
+ "name": { "str": "Invisibility" },
"description": "Creates a magical field that hides your visual presence to others. Colloquially known as invisibility, but without all the science mumbo jumbo.",
"message": "To the outside world, your body fades away and you cease to exist!",
"valid_targets": [ "self" ],
@@ -40,61 +13,15 @@
"base_casting_time": 100,
"base_energy_cost": 400,
"energy_source": "MANA",
- "min_duration": 1250,
- "max_duration": 6000,
+ "min_duration": 5000,
+ "max_duration": 12750,
"duration_increment": 250,
- "max_level": 20
- },
- {
- "id": "holy_blade",
- "type": "SPELL",
- "name": "Holy Blade",
- "description": "This blade of light will cut through any evil it makes contact with!",
- "valid_targets": [ "self" ],
- "flags": [ "VERBAL", "NO_LEGS", "CONCENTRATE" ],
- "min_range": 0,
- "max_range": 0,
- "min_damage": 1,
- "max_damage": 1,
- "effect": "spawn_item",
- "effect_str": "longsword",
- "base_casting_time": 350,
- "base_energy_cost": 375,
- "min_duration": 3000,
- "max_duration": 9000,
- "duration_increment": 3000,
- "difficulty": 5,
- "max_level": 20,
- "spell_class": "TECHNOMANCER",
- "energy_source": "MANA"
- },
- {
- "id": "spirit_armor",
- "type": "SPELL",
- "name": "Spiritual Armor",
- "description": "Evil will not make it through your defenses if your faith is strong enough!",
- "valid_targets": [ "self" ],
- "flags": [ "VERBAL", "NO_LEGS", "CONCENTRATE", "SOMATIC" ],
- "min_range": 0,
- "max_range": 0,
- "min_damage": 1,
- "max_damage": 1,
- "effect": "spawn_item",
- "effect_str": "armor_lightplate",
- "spell_class": "TECHNOMANCER",
- "energy_source": "MANA",
- "difficulty": 5,
- "max_level": 20,
- "base_casting_time": 350,
- "base_energy_cost": 375,
- "min_duration": 3000,
- "max_duration": 9000,
- "duration_increment": 3000
+ "max_level": 30
},
{
"id": "create_atomic_lamp",
"type": "SPELL",
- "name": "Lamp",
+ "name": { "str": "Lamp" },
"description": "Creates a magical lamp.",
"valid_targets": [ "none" ],
"flags": [ "VERBAL", "NO_LEGS", "CONCENTRATE" ],
@@ -107,27 +34,27 @@
"energy_source": "MANA",
"spell_class": "TECHNOMANCER",
"difficulty": 2,
- "max_level": 20,
+ "max_level": 30,
"base_casting_time": 200,
"base_energy_cost": 750,
- "min_duration": 100000,
- "max_duration": 1000000,
- "duration_increment": 2000
+ "min_duration": 775000,
+ "max_duration": 2175000,
+ "duration_increment": 45000
},
{
"id": "recover_bionic_power",
"type": "SPELL",
- "name": "Manatricity",
+ "name": { "str": "Manatricity" },
"description": "You have found a way to convert your spiritual energy into power you can use for your bionics.",
"valid_targets": [ "self" ],
"flags": [ "NO_LEGS", "NO_HANDS", "SOMATIC", "VERBAL", "SILENT" ],
"min_damage": 250,
"damage_increment": 50.0,
- "max_damage": 15000,
+ "max_damage": 22500,
"base_energy_cost": 250,
"energy_increment": 50.0,
- "final_energy_cost": 15000,
- "max_level": 10,
+ "final_energy_cost": 22500,
+ "max_level": 37,
"spell_class": "TECHNOMANCER",
"effect": "recover_energy",
"effect_str": "BIONIC",
@@ -138,7 +65,7 @@
{
"id": "create_rune_technomancer",
"type": "SPELL",
- "name": "Technomancer Rune",
+ "name": { "str": "Technomancer Rune" },
"description": "This ritual creates a small pebble attuned to Technomancers. You can use the rune as a catalyst for recipes.",
"valid_targets": [ "self" ],
"min_damage": 1,
@@ -159,7 +86,7 @@
{
"id": "taze",
"type": "SPELL",
- "name": "Taze",
+ "name": { "str": "Taze" },
"description": "This spell creates a very short range bolt of electricity to shock your foes.",
"valid_targets": [ "hostile", "ground", "ally" ],
"flags": [ "NO_LEGS", "LOUD", "SOMATIC" ],
@@ -169,23 +96,23 @@
"difficulty": 1,
"base_casting_time": 100,
"casting_time_increment": -1.0,
- "final_casting_time": 80,
+ "final_casting_time": 70,
"base_energy_cost": 50,
"energy_increment": -1.0,
- "final_energy_cost": 30,
- "max_level": 20,
+ "final_energy_cost": 20,
+ "max_level": 30,
"damage_type": "electric",
- "min_damage": 10,
- "max_damage": 30,
+ "min_damage": 25,
+ "max_damage": 60,
"damage_increment": 1.0,
- "min_range": 1,
- "max_range": 4,
+ "min_range": 4,
+ "max_range": 9,
"range_increment": 0.2
},
{
"id": "quantum_tunnel_lesser",
"type": "SPELL",
- "name": "Lesser Quantum Tunnel",
+ "name": { "str": "Lesser Quantum Tunnel" },
"description": "This spell manipulates some quantum something or other to tunnel you through a short distance of space, and even matter, unfortunately there's that whole uncertainty thing as to where you come out. It leaves you a little dazed on the other side as you reorient yourself.",
"valid_targets": [ "none" ],
"flags": [ "NO_LEGS", "NO_HANDS", "SILENT" ],
@@ -194,18 +121,18 @@
"spell_class": "TECHNOMANCER",
"energy_source": "MANA",
"difficulty": 2,
- "max_level": 20,
+ "max_level": 30,
"base_casting_time": 100,
"casting_time_increment": -1.0,
- "final_casting_time": 80,
+ "final_casting_time": 70,
"base_energy_cost": 100,
"energy_increment": -1.0,
- "final_energy_cost": 80,
+ "final_energy_cost": 70,
"min_aoe": 4,
"max_aoe": 1,
"aoe_increment": -0.25,
- "min_range": 5,
- "max_range": 10,
+ "min_range": 9,
+ "max_range": 19,
"range_increment": 0.25,
"min_duration": 100,
"max_duration": 100
@@ -213,7 +140,7 @@
{
"id": "synaptic_stimulation",
"type": "SPELL",
- "name": "Synaptic Stimulation",
+ "name": { "str": "Synaptic Stimulation" },
"description": "This spell stimulates the synapses in your brain beyond normal processing speeds, giving you a large boost in mental processing capability, including enhancing your reflexes, speed, and raw intellectual power. Use responsibly!",
"valid_targets": [ "self" ],
"flags": [ "NO_LEGS", "VERBAL" ],
@@ -222,21 +149,21 @@
"spell_class": "TECHNOMANCER",
"energy_source": "MANA",
"difficulty": 5,
- "max_level": 20,
+ "max_level": 30,
"base_casting_time": 500,
"casting_time_increment": -2.5,
- "final_casting_time": 450,
+ "final_casting_time": 425,
"base_energy_cost": 500,
"energy_increment": -5.0,
- "final_energy_cost": 400,
- "min_duration": 180000,
- "max_duration": 360000,
+ "final_energy_cost": 350,
+ "min_duration": 330000,
+ "max_duration": 690000,
"duration_increment": 10000
},
{
"id": "laze",
"type": "SPELL",
- "name": "Laze",
+ "name": { "str": "Laze" },
"description": "You concentrate and release a focused beam of photons at a target, also known as a laser.",
"valid_targets": [ "hostile", "ground", "ally" ],
"flags": [ "NO_LEGS", "LOUD", "SOMATIC" ],
@@ -244,19 +171,19 @@
"spell_class": "TECHNOMANCER",
"energy_source": "BIONIC",
"difficulty": 3,
- "max_level": 20,
+ "max_level": 30,
"base_casting_time": 100,
"casting_time_increment": -1.0,
- "final_casting_time": 80,
+ "final_casting_time": 70,
"base_energy_cost": 150,
"energy_increment": -2.0,
- "final_energy_cost": 110,
- "min_damage": 15,
- "max_damage": 60,
+ "final_energy_cost": 90,
+ "min_damage": 53,
+ "max_damage": 128,
"damage_increment": 2.5,
"damage_type": "fire",
- "min_range": 10,
- "max_range": 25,
+ "min_range": 25,
+ "max_range": 50,
"range_increment": 1.0
},
{
@@ -271,29 +198,29 @@
"spell_class": "TECHNOMANCER",
"energy_source": "MANA",
"difficulty": 6,
- "max_level": 20,
+ "max_level": 30,
"base_casting_time": 200,
"casting_time_increment": -2.0,
- "final_casting_time": 160,
+ "final_casting_time": 140,
"base_energy_cost": 350,
"energy_increment": -2.0,
- "final_energy_cost": 310,
+ "final_energy_cost": 290,
"min_damage": 1,
- "max_damage": 2,
+ "max_damage": 3,
"damage_increment": 0.15,
"min_range": 1,
- "max_range": 5,
+ "max_range": 7,
"range_increment": 0.25,
"min_aoe": 3,
"max_aoe": 3,
- "min_duration": 1000,
- "max_duration": 4500,
+ "min_duration": 4000,
+ "max_duration": 9750,
"duration_increment": 200
},
{
"id": "mirror_image",
"type": "SPELL",
- "name": "Mirror Image",
+ "name": { "str": "Mirror Image" },
"description": "This spell manipulates light into barely tangible duplicates of a living being, a magical hologram in short.",
"valid_targets": [ "ground" ],
"flags": [ "SOMATIC", "VERBAL", "CONCENTRATE" ],
@@ -302,29 +229,29 @@
"spell_class": "TECHNOMANCER",
"energy_source": "MANA",
"difficulty": 4,
- "max_level": 20,
+ "max_level": 30,
"base_casting_time": 150,
"casting_time_increment": -1.0,
- "final_casting_time": 130,
+ "final_casting_time": 120,
"base_energy_cost": 200,
"energy_increment": -2.0,
- "final_energy_cost": 160,
+ "final_energy_cost": 140,
"min_damage": 1,
- "max_damage": 5,
+ "max_damage": 8,
"damage_increment": 0.5,
- "min_range": 1,
- "max_range": 10,
+ "min_range": 8,
+ "max_range": 23,
"range_increment": 0.5,
"min_aoe": 3,
"max_aoe": 3,
- "min_duration": 3000,
- "max_duration": 6000,
+ "min_duration": 6000,
+ "max_duration": 12000,
"duration_increment": 200
},
{
"id": "holographic_transposition",
"type": "SPELL",
- "name": "Holographic Transposition",
+ "name": { "str": "Holographic Transposition" },
"description": "Allows you to swap places with a previously existing holographic image of yourself. If the universe itself can't tell you apart, who could?",
"valid_targets": [ "hostile", "ally" ],
"targeted_monster_ids": [ "mon_mirror_image", "mon_hologram" ],
@@ -333,21 +260,21 @@
"spell_class": "TECHNOMANCER",
"energy_source": "MANA",
"difficulty": 3,
- "max_level": 20,
+ "max_level": 30,
"base_casting_time": 100,
"casting_time_increment": -1.0,
- "final_casting_time": 80,
+ "final_casting_time": 70,
"base_energy_cost": 150,
"energy_increment": -2.0,
- "final_energy_cost": 100,
- "min_range": 20,
- "max_range": 30,
+ "final_energy_cost": 80,
+ "min_range": 35,
+ "max_range": 60,
"range_increment": 1.0
},
{
"id": "summon_floating_disk",
"type": "SPELL",
- "name": "Summon floating disk",
+ "name": { "str": "Summon floating disk" },
"description": "Summons a floating disk that is sworn to carry your burdens.",
"valid_targets": [ "ground" ],
"flags": [ "SOMATIC", "VERBAL", "CONCENTRATE" ],
@@ -356,20 +283,21 @@
"energy_source": "MANA",
"effect_str": "floating_disk",
"difficulty": 5,
- "max_level": 20,
+ "max_level": 30,
"base_casting_time": 120,
"base_energy_cost": 500,
- "min_range": 1,
- "max_range": 10,
+ "min_range": 16,
+ "max_range": 30,
"range_increment": 1,
- "min_duration": 400000,
- "max_duration": 9600000,
- "duration_increment": 200
+ "min_duration": 403000,
+ "max_duration": 14403000,
+ "duration_increment": 200,
+ "//": "Looks suspiciously low, might be a typo of 2000?"
},
{
"id": "overcharge_burn",
"type": "SPELL",
- "name": "Overcharge Burn",
+ "name": { "str": "Overcharge Burn" },
"description": "The side effects of casting the overcharge spell.",
"message": "",
"effect": "spawn_item",
@@ -378,36 +306,36 @@
"max_damage": 1,
"min_duration": 500,
"duration_increment": -10,
- "max_duration": 200,
- "max_level": 30,
+ "max_duration": 50,
+ "max_level": 45,
"valid_targets": [ "none" ]
},
{
"id": "overcharge_eyes",
"type": "SPELL",
- "name": "Optical Sneeze Beam",
+ "name": { "str": "Optical Sneeze Beam" },
"description": "You overcharge your internal batteries to send a semi-directed beam from your face. The inventor of this spell must have had some weird sense of humor.",
"message": "You overcharge your bionic energy through what ley lines you have left, and channel it through the center of your face.",
"sound_description": "bzzzzzzt!",
"sound_ambient": true,
"effect": "cone_attack",
"extra_effects": [ { "id": "overcharge_burn", "hit_self": true } ],
- "min_damage": 90,
+ "min_damage": 203,
"damage_increment": 5.0,
- "max_damage": 200,
- "min_range": 8,
+ "max_damage": 413,
+ "min_range": 16,
"range_increment": 0.35,
- "max_range": 20,
- "min_aoe": 10,
+ "max_range": 38,
+ "min_aoe": 14,
"aoe_increment": 0.17,
- "max_aoe": 15,
+ "max_aoe": 26,
"base_energy_cost": 500,
"final_energy_cost": 500,
"spell_class": "TECHNOMANCER",
"energy_source": "BIONIC",
"damage_type": "cut",
"difficulty": 1,
- "max_level": 30,
+ "max_level": 45,
"base_casting_time": 120,
"final_casting_time": 120,
"valid_targets": [ "hostile", "ground" ],
diff --git a/data/mods/Magiclysm/modinfo.json b/data/mods/Magiclysm/modinfo.json
index 25b088a951b3..cd22403922cf 100644
--- a/data/mods/Magiclysm/modinfo.json
+++ b/data/mods/Magiclysm/modinfo.json
@@ -4,8 +4,8 @@
"id": "magiclysm",
"name": "Magiclysm",
"authors": [ "KorGgenT", "Aptronym", "LaVeyanFiend" ],
- "maintainers": [ "KorGgenT" ],
- "description": "Cataclysm but with magic spells!",
+ "maintainers": [ "Robbietheneko" ],
+ "description": "Cataclysm but with magic spells, BN Edition!",
"category": "content",
"dependencies": [ "bn" ]
},
diff --git a/data/mods/Magiclysm/monsters/demon_spider.json b/data/mods/Magiclysm/monsters/demon_spider.json
index cc5fdd31357a..010acd4a2a07 100644
--- a/data/mods/Magiclysm/monsters/demon_spider.json
+++ b/data/mods/Magiclysm/monsters/demon_spider.json
@@ -34,17 +34,17 @@
"diff": 2,
"volume": "30000 ml",
"weight": "40750 g",
- "hp": 45,
+ "hp": 30,
"speed": 150,
"symbol": "s",
"color": "red",
"aggression": -10,
"morale": 100,
- "melee_skill": 6,
+ "melee_skill": 3,
"melee_dice": 1,
"melee_dice_sides": 8,
"melee_cut": 4,
- "dodge": 7,
+ "dodge": 3,
"armor_bash": 1,
"armor_cut": 8,
"armor_stab": 8,
@@ -71,17 +71,17 @@
"weight": "125 kg",
"//": "monster can't be any bigger because of limits of volume on tiles. if there is a way designed around this, it should be about 3500 L",
"volume": "1000 L",
- "hp": 435,
+ "hp": 325,
"speed": 95,
"symbol": "S",
"color": "red",
"aggression": 50,
"morale": 100,
- "melee_skill": 9,
- "melee_dice": 20,
- "melee_dice_sides": 8,
+ "melee_skill": 5,
+ "melee_dice": 5,
+ "melee_dice_sides": 10,
"melee_cut": 12,
- "dodge": 4,
+ "dodge": 1,
"armor_bash": 5,
"armor_cut": 45,
"armor_stab": 60,
@@ -91,7 +91,7 @@
"vision_day": 6,
"vision_night": 12,
"harvest": "demon_spider",
- "special_attacks": [ { "type": "spell", "spell_data": { "id": "burning_hands", "min_level": 4 }, "cooldown": 20 } ],
+ "special_attacks": [ { "type": "spell", "spell_data": { "id": "monster_burning_hands", "min_level": 4 }, "cooldown": 20 } ],
"anger_triggers": [ "FRIEND_ATTACKED", "FRIEND_DIED", "HURT", "STALK", "PLAYER_WEAK", "PLAYER_CLOSE" ],
"death_function": [ "NORMAL" ],
"flags": [ "SEES", "SMELLS", "HEARS", "VENOM", "WEBWALK", "CLIMBS", "HARDTOSHOOT", "PUSH_MON" ]
@@ -103,16 +103,16 @@
"description": "This gigantic spider is the size of a moving van: you have no idea how it manages to stay together, much less move with that bulk. Its abdomen is huge and swollen-looking, and an evil intelligence burns in its eyes even as magic crackles around its chitinous barbs.",
"copy-from": "mon_demon_spider",
"weight": "250 kg",
- "hp": 5600,
- "speed": 28,
+ "hp": 1400,
+ "speed": 25,
"aggression": 100,
- "melee_skill": 10,
+ "melee_skill": 8,
"melee_dice_sides": 20,
"melee_cut": 30,
"vision_day": 12,
"vision_night": 18,
"harvest": "demon_spider_queen",
"flags": [ "SEES", "SMELLS", "HEARS", "VENOM", "WEBWALK", "CLIMBS", "HARDTOSHOOT", "PUSH_MON", "STUN_IMMUNE" ],
- "special_attacks": [ { "type": "spell", "spell_data": { "id": "mon_summon_demon_spiderlings" }, "cooldown": 14 } ]
+ "special_attacks": [ { "type": "spell", "spell_data": { "id": "mon_summon_demon_spiderlings" }, "cooldown": 256 } ]
}
]
diff --git a/data/mods/Magiclysm/monsters/golems.json b/data/mods/Magiclysm/monsters/golems.json
index cd3499e0deca..6701b7705778 100644
--- a/data/mods/Magiclysm/monsters/golems.json
+++ b/data/mods/Magiclysm/monsters/golems.json
@@ -15,7 +15,7 @@
"material": [ "clay" ],
"symbol": "X",
"color": "brown",
- "aggression": 10,
+ "aggression": 8,
"morale": 100,
"melee_skill": 6,
"melee_dice": 2,
@@ -76,7 +76,7 @@
"material": [ "stone" ],
"symbol": "X",
"color": "light_gray",
- "aggression": 10,
+ "aggression": 8,
"morale": 100,
"melee_skill": 6,
"melee_dice": 3,
@@ -110,7 +110,7 @@
"material": [ "iron" ],
"symbol": "X",
"color": "dark_gray",
- "aggression": 10,
+ "aggression": 9,
"morale": 100,
"melee_skill": 6,
"melee_dice": 3,
diff --git a/data/mods/Magiclysm/monsters/lizardfolk.json b/data/mods/Magiclysm/monsters/lizardfolk.json
index 8622404c106b..131d566e7bbb 100644
--- a/data/mods/Magiclysm/monsters/lizardfolk.json
+++ b/data/mods/Magiclysm/monsters/lizardfolk.json
@@ -9,7 +9,7 @@
"species": [ "LIZARDFOLK" ],
"volume": "80 L",
"weight": "100 kg",
- "hp": 70,
+ "hp": 80,
"speed": 105,
"material": [ "flesh" ],
"symbol": "L",
@@ -21,7 +21,7 @@
"melee_skill": 4,
"melee_dice": 2,
"melee_dice_sides": 4,
- "dodge": 5,
+ "dodge": 1,
"armor_bash": 2,
"armor_cut": 12,
"armor_bullet": 10,
@@ -60,6 +60,7 @@
"description": "The hunter is a smaller lizardfolk than a warrior, but equally as deadly, with their lithe figures and accurate javelin throws.",
"copy-from": "mon_lizardfolk_warrior",
"symbol": "L",
+ "dodge": 3,
"special_attacks": [
{
"type": "gun",
@@ -89,7 +90,7 @@
"description": "Lizardfolk are very intelligent and cunning, but magical ability is a rare quality. Shamans are chosen from the tribe during childhood, when magical abilities mark the fate of the young tribesman. Not much is known about the initiation ritual they must undergo, but few survive the experience. Shamans are druidic spellcasters that can use the forces of nature to battle enemies, as well as summoning assistance when needed.",
"copy-from": "mon_lizardfolk_warrior",
"symbol": "L",
- "hp": 80,
+ "hp": 100,
"melee_skill": 3,
"melee_dice": 2,
"melee_dice_sides": 6,
@@ -115,7 +116,7 @@
"hp": 200,
"melee_skill": 4,
"melee_dice": 3,
- "melee_dice_sides": 3,
+ "melee_dice_sides": 8,
"special_attacks": [ [ "skewer", 2 ], { "type": "bite", "cooldown": 5 } ],
"death_drops": [
{ "item": "lizardfolk_trident", "prob": 30 },
diff --git a/data/mods/Magiclysm/monsters/monsters.json b/data/mods/Magiclysm/monsters/monsters.json
index a604ed8a2e02..c50811e1dba4 100644
--- a/data/mods/Magiclysm/monsters/monsters.json
+++ b/data/mods/Magiclysm/monsters/monsters.json
@@ -14,7 +14,7 @@
"material": [ "flesh" ],
"symbol": "W",
"color": "brown",
- "aggression": 100,
+ "aggression": 8,
"morale": 100,
"melee_skill": 6,
"melee_dice": 5,
@@ -25,6 +25,7 @@
"armor_cut": 2,
"armor_bullet": 2,
"vision_night": 20,
+ "anger_triggers": [ "HURT", "PLAYER_NEAR_BABY", "PLAYER_CLOSE" ],
"path_settings": { "max_dist": 25 },
"harvest": "owlbear",
"reproduction": { "baby_egg": "egg_owlbear_rock", "baby_count": 1, "baby_timer": 20 },
@@ -49,7 +50,8 @@
"hp": 100,
"speed": 75,
"phase": "LIQUID",
- "aggression": 100,
+ "aggression": 8,
+ "anger_triggers": [ "HURT", "PLAYER_CLOSE" ],
"morale": 100,
"melee_skill": 5,
"melee_dice": 2,
@@ -234,7 +236,8 @@
"material": [ "flesh" ],
"symbol": "T",
"color": "light_green",
- "aggression": 100,
+ "aggression": 8,
+ "anger_triggers": [ "HURT", "PLAYER_CLOSE" ],
"morale": 100,
"melee_skill": 5,
"melee_dice": 5,
diff --git a/data/mods/Magiclysm/professions.json b/data/mods/Magiclysm/professions.json
index b54c8499f03a..0ce1bb613ff0 100644
--- a/data/mods/Magiclysm/professions.json
+++ b/data/mods/Magiclysm/professions.json
@@ -29,7 +29,7 @@
"id": "druid",
"name": "Druid",
"description": "The ancient circle of druids is gone with the Cataclysm. Nature must thrive.",
- "points": 4,
+ "points": 2,
"items": {
"both": [ "druid_spellbook", "leathersandals", "robe", "rope_makeshift_30", "hide_bag", "hat_fur", "gloves_wraps_fur" ]
},
diff --git a/data/mods/Magiclysm/requirements/cooking_components.json b/data/mods/Magiclysm/requirements/cooking_components.json
index 24a28514f5c0..8628d93a98df 100644
--- a/data/mods/Magiclysm/requirements/cooking_components.json
+++ b/data/mods/Magiclysm/requirements/cooking_components.json
@@ -10,7 +10,8 @@
[ "human_flesh", 1 ],
[ "mutant_human_flesh", 1 ],
[ "purified_meat", 1 ],
- [ "impure_meat", 1 ]
+ [ "impure_meat", 1 ],
+ [ "meat_dragon", 1 ]
]
]
}
diff --git a/deno.jsonc b/deno.jsonc
index 6f78ace93c48..af42dc86124e 100644
--- a/deno.jsonc
+++ b/deno.jsonc
@@ -1,11 +1,12 @@
{
- "tasks": {
- "tools": "deno run --watch -A"
- },
- "test": { "files": { "include": ["./tools"] } },
- "lint": { "files": { "include": ["./tools"] } },
- "fmt": {
- "files": { "include": ["./tools"] },
- "options": { "semiColons": false, "lineWidth": 100 }
- }
+ "tasks": {
+ "tools": "deno run --watch -A"
+ },
+ "test": { "include": ["./tools"] },
+ "lint": { "include": ["./tools"] },
+ "fmt": {
+ "include": ["./tools", "./doc", "*.md"],
+ "semiColons": false,
+ "lineWidth": 100
+ }
}
diff --git a/doc/ACCESSIBILITY.md b/doc/ACCESSIBILITY.md
index 5a4c511464d8..a3d75e415445 100644
--- a/doc/ACCESSIBILITY.md
+++ b/doc/ACCESSIBILITY.md
@@ -1,17 +1,15 @@
### Compatibility with screen readers
-There are people who uses screen readers to play Cataclysm DDA. In order for screen
-readers to announce the most important information in a UI, the terminal cursor has
-to be placed at the correct location. This information may be text such as selected
-item names in a list, etc, and the cursor has to be placed exactly at the beginning
-of the text for screen readers to announce it.
+There are people who uses screen readers to play Cataclysm DDA. In order for screen readers to
+announce the most important information in a UI, the terminal cursor has to be placed at the correct
+location. This information may be text such as selected item names in a list, etc, and the cursor
+has to be placed exactly at the beginning of the text for screen readers to announce it.
-`wmove` in `output.h|cpp` is the function to move the cursor to a specific location.
-After calling `wmove` with the target `catacurses::window` and cursor position,
-`wrefresh` needs to be called immediately afterwards for `wmove` to take effect.
+`wmove` in `output.h|cpp` is the function to move the cursor to a specific location. After calling
+`wmove` with the target `catacurses::window` and cursor position, `wrefresh` needs to be called
+immediately afterwards for `wmove` to take effect.
-Here is an example of placing the cursor explicitly at the beginning of a piece
-of text:
+Here is an example of placing the cursor explicitly at the beginning of a piece of text:
```cpp
catacurses::window win = ...; // target window
@@ -34,6 +32,5 @@ wrefresh( win );
// no output code should follow as they might change the cursor position
```
-As shown in the above example, it is preferable to record the intended cursor
-position in a variable when the text is printed, and move the cursor later using
-the variable to ensure consisitency.
+As shown in the above example, it is preferable to record the intended cursor position in a variable
+when the text is printed, and move the cursor later using the variable to ensure consisitency.
diff --git a/doc/BASECAMP.md b/doc/BASECAMP.md
index a0fececdc6e2..2b3cbe31c26a 100644
--- a/doc/BASECAMP.md
+++ b/doc/BASECAMP.md
@@ -1,195 +1,257 @@
# Recommended reading
-Basecamps leverage many existing aspects of JSON data such as recipes and mapgen. It's recommended to be familiar with those:
-* [JSON info](JSON_INFO.md) has information on common fields for recipes
-* [mapgen](MAPGEN.md), see section 3 about `update_mapgen`
+Basecamps leverage many existing aspects of JSON data such as recipes and mapgen. It's recommended
+to be familiar with those:
+
+- [JSON info](JSON_INFO.md) has information on common fields for recipes
+- [mapgen](MAPGEN.md), see section 3 about `update_mapgen`
# Adding alternate basecamp upgrade paths
-A basecamp upgrade path is a series of basecamp upgrade missions that upgrade the camp. Upgrade missions are generally performed sequentially, but there is an option to have them branch. Branched missions optionally can have further missions that require missions from other branches.
+A basecamp upgrade path is a series of basecamp upgrade missions that upgrade the camp. Upgrade
+missions are generally performed sequentially, but there is an option to have them branch. Branched
+missions optionally can have further missions that require missions from other branches.
Bascamp upgrade paths are defined by several related files:
-* The recipe JSONs that define what the material, tool, and skill requirements to perform an upgrade mission and the blueprint mapgen, blueprint requirements, blueprint provides, and blueprint resources associated with each upgrade mission.
-* The mapgen_update JSONs that define how the map will change when the upgrade mission is complete. These may include shared instances of nested mapgen, such a standard room or tent.
-* The recipe_group JSONs that define what recipes can be crafted after completing the upgrade mission and what camps and expansions are available.
+
+- The recipe JSONs that define what the material, tool, and skill requirements to perform an upgrade
+ mission and the blueprint mapgen, blueprint requirements, blueprint provides, and blueprint
+ resources associated with each upgrade mission.
+- The mapgen_update JSONs that define how the map will change when the upgrade mission is complete.
+ These may include shared instances of nested mapgen, such a standard room or tent.
+- The recipe_group JSONs that define what recipes can be crafted after completing the upgrade
+ mission and what camps and expansions are available.
## recipe JSONs
+
The recipe JSONs are standard recipe JSONs, with the addition of a few fields.
-New field | Description
--- | --
-`"construction_blueprint"` | string, the `"update_mapgen_id"` of the mapgen_update JSON that will be performed when the upgrade mission is complete.
-`"construction_name"` | string, a short description/name of the upgrade mission that is displayed in the base camp mission selector. The recipe's `"description"` field has the extended description that explains why a player might want to have an NPC perform this upgrade mission.
-`"blueprint_provides"` | array of objects, with each object having an `"id"` string and an optional `"amount"` integer. These are the camp features that are available when the upgrade mission is complete. Every upgrade mission provides its recipe `"result"` with an amount of 1 automatically and that string does not need to be listed in `"blueprint_provides"`.
-`"blueprint_requires"` | array of objects, with each object having an `"id"` string and an optional `"amount"` integer. These are the camp features that are required before the upgrade mission can be attempted.
-`"blueprint_excludes"` | array of objects, with each object having an `"id"` string and an optional `"amount"` integer. These are the camp features that prevent the upgrade mission from being attempted if they exist.
-`"blueprint_resources"` | array of `"itype_id"`s. Items with those ids will be added to the camp inventory after the upgrade mission is completed and can be used for crafting or additional upgrade missions.
+| New field | Description |
+| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `"construction_blueprint"` | string, the `"update_mapgen_id"` of the mapgen_update JSON that will be performed when the upgrade mission is complete. |
+| `"construction_name"` | string, a short description/name of the upgrade mission that is displayed in the base camp mission selector. The recipe's `"description"` field has the extended description that explains why a player might want to have an NPC perform this upgrade mission. |
+| `"blueprint_provides"` | array of objects, with each object having an `"id"` string and an optional `"amount"` integer. These are the camp features that are available when the upgrade mission is complete. Every upgrade mission provides its recipe `"result"` with an amount of 1 automatically and that string does not need to be listed in `"blueprint_provides"`. |
+| `"blueprint_requires"` | array of objects, with each object having an `"id"` string and an optional `"amount"` integer. These are the camp features that are required before the upgrade mission can be attempted. |
+| `"blueprint_excludes"` | array of objects, with each object having an `"id"` string and an optional `"amount"` integer. These are the camp features that prevent the upgrade mission from being attempted if they exist. |
+| `"blueprint_resources"` | array of `"itype_id"`s. Items with those ids will be added to the camp inventory after the upgrade mission is completed and can be used for crafting or additional upgrade missions. |
### blueprint requires, provides, and excludes
-blueprint requires, blueprint provides, and blueprint exlcudes are abstract concepts or flags that an upgrade mission requires to start, or that are provided by a previous upgrade mission to satisfy the blueprint requirements of a current upgrade mission, or that prevent an upgrade mission from being available. Each one has an `"id"` and an `"amount"`. Multiple requires, provides, or excludes with the same `"id"` sum their `"amount"` if they're on the same basecamp expansion.
-
-Every upgrade mission has its recipe `"result"` as a blueprint_provides and a blueprint_excludes, so upgrade missions will automatically prevent themselves from being repeatable.
-
-These are arbitrary strings and can be used to control the branching of the upgrade paths. However, some strings have meaning within the basecamp code:
-
-provides `"id"` | meaning
--- | --
-`"bed"` | every 2 `"amount"`' of `"bed"` allows another expansion in the camp, to a maximum of 8, not include the camp center.
-`"tool_storage"` | after this upgrade mission is complete, the Store Tools mission will be available
-.
-`"radio"` | after this upgrade mission is complete, two way radios communicating to the camp have extended range.
-`"pantry"` | after this upgrade mission is complete, the Distribute Food mission is more efficient when dealing with short term spoilage items.
-`"gathering"` | after this upgrade mission is complete, the Gather Materials, Distribute Food, and Reset Sort Points basecamp missions will be available.
-`"firewood"` | after this upgrade mission is complete, the Gather Firewood basecamp mission will be available.
-`"sorting"` | after this upgrade mission is complete, the Menial Labor basecamp mission will be available.
-`"logging"` | after this upgrade mission is complete, the Cut Logs and Clear a Forest basecamp missions will be available.
-`"relaying"` | after this upgrade mission is complete, the Setup Hide Site and Relay Hide Site basecamp missions will be available.
-`"foraging"` | after this upgrade mission is complete, the Forage for Plants basecamp mission will be available.
-`"trapping"` | after this upgrade mission is complete, the Trap Small Game basecamp mission will be available.
-`"hunting"` | after this upgrade mission is complete, the Hunt Large Animals basecamp mission will be available.
-`"walls"` | after this upgrade mission is complete, the Construct Map Fortifications basecamp mission will be available.
-`"recruiting"` | after this upgrade mission is complete, the Recruit Companions basecamp mission will be available.
-`"scouting"` | after this upgrade mission is complete, the Scout Mission basecamp mission will be available.
-`"patrolling"` | after this upgrade mission is complete, the Combat Patrol basecamp mission will be available.
-`"dismantling"` | after this upgrade mission is complete, the Chop Shop basecamp mission will be available.
-`"farming"` | after this upgrade mission is complete, the Plow Fields, Plant Fields, Fertilize Fields, and Harvest Fields basecamp missions will be available.
-
-`blueprint_provides` can also be used to name objects from `recipe_group.json`. The recipes will be craftable by NPCs at that expansion, allowing the creation of custom recipes that can be performed exclusively at faction camps.
+
+blueprint requires, blueprint provides, and blueprint exlcudes are abstract concepts or flags that
+an upgrade mission requires to start, or that are provided by a previous upgrade mission to satisfy
+the blueprint requirements of a current upgrade mission, or that prevent an upgrade mission from
+being available. Each one has an `"id"` and an `"amount"`. Multiple requires, provides, or excludes
+with the same `"id"` sum their `"amount"` if they're on the same basecamp expansion.
+
+Every upgrade mission has its recipe `"result"` as a blueprint_provides and a blueprint_excludes, so
+upgrade missions will automatically prevent themselves from being repeatable.
+
+These are arbitrary strings and can be used to control the branching of the upgrade paths. However,
+some strings have meaning within the basecamp code:
+
+| provides `"id"` | meaning |
+| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
+| `"bed"` | every 2 `"amount"`' of `"bed"` allows another expansion in the camp, to a maximum of 8, not include the camp center. |
+| `"tool_storage"` | after this upgrade mission is complete, the Store Tools mission will be available |
+| . | |
+| `"radio"` | after this upgrade mission is complete, two way radios communicating to the camp have extended range. |
+| `"pantry"` | after this upgrade mission is complete, the Distribute Food mission is more efficient when dealing with short term spoilage items. |
+| `"gathering"` | after this upgrade mission is complete, the Gather Materials, Distribute Food, and Reset Sort Points basecamp missions will be available. |
+| `"firewood"` | after this upgrade mission is complete, the Gather Firewood basecamp mission will be available. |
+| `"sorting"` | after this upgrade mission is complete, the Menial Labor basecamp mission will be available. |
+| `"logging"` | after this upgrade mission is complete, the Cut Logs and Clear a Forest basecamp missions will be available. |
+| `"relaying"` | after this upgrade mission is complete, the Setup Hide Site and Relay Hide Site basecamp missions will be available. |
+| `"foraging"` | after this upgrade mission is complete, the Forage for Plants basecamp mission will be available. |
+| `"trapping"` | after this upgrade mission is complete, the Trap Small Game basecamp mission will be available. |
+| `"hunting"` | after this upgrade mission is complete, the Hunt Large Animals basecamp mission will be available. |
+| `"walls"` | after this upgrade mission is complete, the Construct Map Fortifications basecamp mission will be available. |
+| `"recruiting"` | after this upgrade mission is complete, the Recruit Companions basecamp mission will be available. |
+| `"scouting"` | after this upgrade mission is complete, the Scout Mission basecamp mission will be available. |
+| `"patrolling"` | after this upgrade mission is complete, the Combat Patrol basecamp mission will be available. |
+| `"dismantling"` | after this upgrade mission is complete, the Chop Shop basecamp mission will be available. |
+| `"farming"` | after this upgrade mission is complete, the Plow Fields, Plant Fields, Fertilize Fields, and Harvest Fields basecamp missions will be available. |
+
+`blueprint_provides` can also be used to name objects from `recipe_group.json`. The recipes will be
+craftable by NPCs at that expansion, allowing the creation of custom recipes that can be performed
+exclusively at faction camps.
### Sample recipe JSON
+
```JSON
- {
- "type": "recipe",
- "result": "faction_base_camp_8",
- "description": "We need to expand our base to include basic dining facilities.",
- "category": "CC_BUILDING",
- "subcategory": "CSC_BUILDING_BASES",
- "skill_used": "fabrication",
- "difficulty": 5,
- "autolearn": false,
- "never_learn": true,
- "comment": "2hrs*4wall + .5 hr*2tables + .5hr*4benches+ 1hrs pits = 12 hrs (12hrs on/off) 1 days total",
- "time": "1440 m",
- "construction_blueprint": "faction_base_field_camp_8",
- "blueprint_name": "basic central kitchen",
- "blueprint_resources": [ "fake_stove" ],
- "blueprint_provides": [ { "id": "trapping", "amount": 1 }, { "id": "hunting", "amount": 1 }, { "id": "walls", "amount": 1 }, { "id": "recruiting", "amount": 1 }
- ],
- "blueprint_requires": [ { "id": "faction_base_camp_6", "amount": 1 } ],
- "qualities": [ [ { "id": "DIG", "level": 1 } ], [ { "id": "SAW_M", "level": 1 } ], [ { "id": "HAMMER", "level": 2 } ] ],
- "components": [ [ [ "2x4", 28 ] ], [ [ "log", 16 ] ], [ [ "nail", 56 ] ], [ [ "stick", 24 ] ], [ [ "metal_tank", 1 ] ], [ [ "pipe", 1 ] ]
- ]
- },
+{
+ "type": "recipe",
+ "result": "faction_base_camp_8",
+ "description": "We need to expand our base to include basic dining facilities.",
+ "category": "CC_BUILDING",
+ "subcategory": "CSC_BUILDING_BASES",
+ "skill_used": "fabrication",
+ "difficulty": 5,
+ "autolearn": false,
+ "never_learn": true,
+ "comment": "2hrs*4wall + .5 hr*2tables + .5hr*4benches+ 1hrs pits = 12 hrs (12hrs on/off) 1 days total",
+ "time": "1440 m",
+ "construction_blueprint": "faction_base_field_camp_8",
+ "blueprint_name": "basic central kitchen",
+ "blueprint_resources": [ "fake_stove" ],
+ "blueprint_provides": [ { "id": "trapping", "amount": 1 }, { "id": "hunting", "amount": 1 }, { "id": "walls", "amount": 1 }, { "id": "recruiting", "amount": 1 }
+ ],
+ "blueprint_requires": [ { "id": "faction_base_camp_6", "amount": 1 } ],
+ "qualities": [ [ { "id": "DIG", "level": 1 } ], [ { "id": "SAW_M", "level": 1 } ], [ { "id": "HAMMER", "level": 2 } ] ],
+ "components": [ [ [ "2x4", 28 ] ], [ [ "log", 16 ] ], [ [ "nail", 56 ] ], [ [ "stick", 24 ] ], [ [ "metal_tank", 1 ] ], [ [ "pipe", 1 ] ]
+ ]
+},
```
-The `"faction_base_camp_8"` upgrade mission can be performed after `"faction_base_camp_6"` and enables the trapping, hunting, fortification, and recruiting basecamp missions. It adds a camp stove to the camp's inventory to represent the iron stove.
+The `"faction_base_camp_8"` upgrade mission can be performed after `"faction_base_camp_6"` and
+enables the trapping, hunting, fortification, and recruiting basecamp missions. It adds a camp stove
+to the camp's inventory to represent the iron stove.
-`"blueprint_autocalc": true` could be used instead of `components` to let the cost be calculated automatically from the mapgen\_update data.
+`"blueprint_autocalc": true` could be used instead of `components` to let the cost be calculated
+automatically from the mapgen\_update data.
## mapgen_update JSON
-These are standard mapgen_update JSON; see doc/MAPGEN.md for more details. Each one should change a localized portion of the camp map and should, as much as possible, be independent of any other pieces of mapgen_update for the basecamp upgrade path. Obviously, some bits are going to expand other bits, in which case their `"blueprint_requires"` should include the `"blueprint_provides"` of the previous upgrade missions.
+These are standard mapgen_update JSON; see doc/MAPGEN.md for more details. Each one should change a
+localized portion of the camp map and should, as much as possible, be independent of any other
+pieces of mapgen_update for the basecamp upgrade path. Obviously, some bits are going to expand
+other bits, in which case their `"blueprint_requires"` should include the `"blueprint_provides"` of
+the previous upgrade missions.
### Sample mapgen_update JSON
```json
- {
- "type": "mapgen",
- "update_mapgen_id": "faction_base_field_camp_7",
- "method": "json",
- "object": { "place_nested": [ { "chunks": [ "basecamp_large_tent_east" ], "x": 2, "y": 10 } ] }
- },
- {
- "type": "mapgen",
- "method": "json",
- "nested_mapgen_id": "basecamp_large_tent_east",
- "object": {
- "mapgensize": [ 5, 5 ],
- "rows": [
- "WWWWW",
- "Wbb$W",
- "Wr;;D",
- "Wbb$W",
- "WWWWW"
- ],
- "palettes": [ "acidia_camp_palette" ]
- }
- },
+{
+ "type": "mapgen",
+ "update_mapgen_id": "faction_base_field_camp_7",
+ "method": "json",
+ "object": { "place_nested": [ { "chunks": [ "basecamp_large_tent_east" ], "x": 2, "y": 10 } ] }
+},
+{
+ "type": "mapgen",
+ "method": "json",
+ "nested_mapgen_id": "basecamp_large_tent_east",
+ "object": {
+ "mapgensize": [ 5, 5 ],
+ "rows": [
+ "WWWWW",
+ "Wbb$W",
+ "Wr;;D",
+ "Wbb$W",
+ "WWWWW"
+ ],
+ "palettes": [ "acidia_camp_palette" ]
+ }
+},
```
-This mapgen_update places a large tent in the west central portion of the camp. The `"place_nested"` references a standard map used in the primitive field camp.
+This mapgen_update places a large tent in the west central portion of the camp. The `"place_nested"`
+references a standard map used in the primitive field camp.
## Recipe groups
-Recipe groups serve two purposes: they indicate what recipes can produced by the camp after an upgrade mission is completed, and they indicate what upgrade paths are available and where camps can be placed.
+
+Recipe groups serve two purposes: they indicate what recipes can produced by the camp after an
+upgrade mission is completed, and they indicate what upgrade paths are available and where camps can
+be placed.
### Upgrade Paths and Expansions
-There are two special recipe groups, `"all_faction_base_types"` and `"all_faction_base_expansions"`. They both look like this:
+
+There are two special recipe groups, `"all_faction_base_types"` and `"all_faction_base_expansions"`.
+They both look like this:
+
```json
- {
- "type": "recipe_group",
- "name": "all_faction_base_expansions",
- "building_type": "NONE",
- "recipes": [
- { "id": "faction_base_farm_0", "description": "Farm", "om_terrains": [ "field" ] },
- { "id": "faction_base_garage_0", "description": "Garage", "om_terrains": [ "field" ] },
- { "id": "faction_base_kitchen_0", "description": "Kitchen", "om_terrains": [ "field" ] },
- { "id": "faction_base_blacksmith_0", "description": "Blacksmith Shop", "om_terrains": [ "field" ] }
- ]
- },
+{
+ "type": "recipe_group",
+ "name": "all_faction_base_expansions",
+ "building_type": "NONE",
+ "recipes": [
+ { "id": "faction_base_farm_0", "description": "Farm", "om_terrains": [ "field" ] },
+ { "id": "faction_base_garage_0", "description": "Garage", "om_terrains": [ "field" ] },
+ { "id": "faction_base_kitchen_0", "description": "Kitchen", "om_terrains": [ "field" ] },
+ { "id": "faction_base_blacksmith_0", "description": "Blacksmith Shop", "om_terrains": [ "field" ] }
+ ]
+},
```
-Each entry in the `"recipes"` array must be a dictionary with the `"id"`, `"description"`, and `"om_terrains"` fields. `"id"` is the recipe `"id"` of the recipe that starts that basecamp or basecamp expansion upgrade path. `"description"` is a short name of the basecamp or basecamp expansion. `"om_terrains"` is a list of overmap terrain ids which can be used as the basis for the basecamp or basecamp expansion.
+Each entry in the `"recipes"` array must be a dictionary with the `"id"`, `"description"`, and
+`"om_terrains"` fields. `"id"` is the recipe `"id"` of the recipe that starts that basecamp or
+basecamp expansion upgrade path. `"description"` is a short name of the basecamp or basecamp
+expansion. `"om_terrains"` is a list of overmap terrain ids which can be used as the basis for the
+basecamp or basecamp expansion.
-All recipes that start an upgrade path or expansion should have a blueprint requirement that can never be met, such as "not_an_upgrade", to prevent them from showing up as available upgrades.
+All recipes that start an upgrade path or expansion should have a blueprint requirement that can
+never be met, such as "not_an_upgrade", to prevent them from showing up as available upgrades.
-If the player attempts to start a basecamp on an overmap terrain that has two or more valid basecamp expansion paths, she will allowed to choose which path to start.
+If the player attempts to start a basecamp on an overmap terrain that has two or more valid basecamp
+expansion paths, she will allowed to choose which path to start.
## Sample basecamp upgrade path
The primitive field camp has the following upgrade path:
+
1. `"faction_base_camp_0"` - the initial camp survey and the bulletin board.
2. `"faction_base_camp_1"` - setting up the northeast tent
3. `"faction_base_camp_2"` - digging the fire pit and constructing a bed
4. `"faction_base_camp_3"` - adding the bookshelves to store stuff
5. `"faction_base_camp_4"` - adding the second bed to the tent
-6. any of:
-`"faction_base_camp_5"`, `"faction_base_camp_7"`, `"faction_base_camp_9"`, `"faction_base_camp_15"`, `"faction_base_camp_18"` - add additional tents with beds in any order.
-or `"faction_base_camp_6"` - build the central kitchen. `"faction_base_camp_8"`, `"faction_base_camp_10"`, `"faction_base_camp_11"`, `"faction_base_camp_16"` must be built in that sequence afterwards, though interleaved with the other optional upgrade missions after `"faction_base_camp_4"`.
-or `"faction_base_camp_12"` - the central camp well.
-or `"faction_base_camp_13"` - building the camp's outer wall, which can be followed by `"faction_base_camp_14"` to complete the wall.
-or `"faction_base_camp_19"` - building the camp's radio tower, which can be followed by `"faction_base_camp_20"` to build the radio tower console and make it operational.
-7. `"faction_base_camp_17"` - adding better doors to camp wall and the central building must be built after `"faction_base_camp_14"` and `"faction_base_camp_16"`.
-
-After setting up the first tent, the player has a lot of options: they can build additional tents to enable expansions, they can build the well for water, they can build as much or as little of the central kitchen as they desire, or add the wall to give the camp defenses, or the radio tower to improve the range of their two-way radios.
+6. any of: `"faction_base_camp_5"`, `"faction_base_camp_7"`, `"faction_base_camp_9"`,
+ `"faction_base_camp_15"`, `"faction_base_camp_18"` - add additional tents with beds in any order.
+ or `"faction_base_camp_6"` - build the central kitchen. `"faction_base_camp_8"`,
+ `"faction_base_camp_10"`, `"faction_base_camp_11"`, `"faction_base_camp_16"` must be built in
+ that sequence afterwards, though interleaved with the other optional upgrade missions after
+ `"faction_base_camp_4"`. or `"faction_base_camp_12"` - the central camp well. or
+ `"faction_base_camp_13"` - building the camp's outer wall, which can be followed by
+ `"faction_base_camp_14"` to complete the wall. or `"faction_base_camp_19"` - building the camp's
+ radio tower, which can be followed by `"faction_base_camp_20"` to build the radio tower console
+ and make it operational.
+7. `"faction_base_camp_17"` - adding better doors to camp wall and the central building must be
+ built after `"faction_base_camp_14"` and `"faction_base_camp_16"`.
+
+After setting up the first tent, the player has a lot of options: they can build additional tents to
+enable expansions, they can build the well for water, they can build as much or as little of the
+central kitchen as they desire, or add the wall to give the camp defenses, or the radio tower to
+improve the range of their two-way radios.
## Modular Basecamp conventions
-The modular basecamp is a structure for designing basecamp upgrade paths. You don't have to use it, but elements of the design might get more code support in the future.
+
+The modular basecamp is a structure for designing basecamp upgrade paths. You don't have to use it,
+but elements of the design might get more code support in the future.
### Layout
-A modular camp is laid out on a 24x24 overmap tile. The outer 3 map squares on each side are reserved for fortifications and movement corridors, and the inner 18x18 map squares are divided into a 3x3 grid of 6x6 areas.
-
-Area | upper left position | lower right position
--- | -- | --
-northwest | 3, 3 | 8, 8
-north | 9, 3 | 14, 8
-northeast | 15, 3 | 20, 8
-west | 3, 9 | 8, 14
-center | 9, 9 | 14, 14
-east | 15, 9, | 20, 14
-southwest | 3, 15 | 8, 20
-south | 9, 15 | 14, 20
-southeast | 15, 15 | 20, 20
+
+A modular camp is laid out on a 24x24 overmap tile. The outer 3 map squares on each side are
+reserved for fortifications and movement corridors, and the inner 18x18 map squares are divided into
+a 3x3 grid of 6x6 areas.
+
+| Area | upper left position | lower right position |
+| --------- | ------------------- | -------------------- |
+| northwest | 3, 3 | 8, 8 |
+| north | 9, 3 | 14, 8 |
+| northeast | 15, 3 | 20, 8 |
+| west | 3, 9 | 8, 14 |
+| center | 9, 9 | 14, 14 |
+| east | 15, 9, | 20, 14 |
+| southwest | 3, 15 | 8, 20 |
+| south | 9, 15 | 14, 20 |
+| southeast | 15, 15 | 20, 20 |
Ideally, nested mapgen chunks should fit entirely into a 6x6 area.
### Naming scheme
-Modular bases use the following naming scheme for recipes. Each element is separated by an `_`
-
-* `"faction_base"` <-- encouraged for all basecamp recipes, _and_
-* `"modular"` <-- indicates a modular construction, _and_
-* overmap terrain id <-- the base terrain that this modular base is built upon, _and_
-* DESCRIPTOR <-- arbitrary string that describes what is being built. For buildings, "room" is used to mean a construction that is intended to be part of a larger building and might share walls with other parts of the building in adjacent areas; "shack" means a free standing building. Numbers indicate stages of construction, with 4 usually meaning a complete structure, with walls and roof, _and_
-* MATERIAL <-- the type of material used in construction, such as metal, wood, brick, or wad (short for wattle-and-daub), _and_
-* AREA <-- the area in the 3x3 grid of the modular camp layout.
-blueprint keywords follow a similar scheme, but `"faction_base_modular"` is collapsed into `"fbm"` and the overmap terrain id is collapsed into a short identifier. ie, `"fbmf"` is the keyword identifier for elements of the modular field base.
+Modular bases use the following naming scheme for recipes. Each element is separated by an `_`
+
+- `"faction_base"` <-- encouraged for all basecamp recipes, _and_
+- `"modular"` <-- indicates a modular construction, _and_
+- overmap terrain id <-- the base terrain that this modular base is built upon, _and_
+- DESCRIPTOR <-- arbitrary string that describes what is being built. For buildings, "room" is used
+ to mean a construction that is intended to be part of a larger building and might share walls with
+ other parts of the building in adjacent areas; "shack" means a free standing building. Numbers
+ indicate stages of construction, with 4 usually meaning a complete structure, with walls and roof,
+ _and_
+- MATERIAL <-- the type of material used in construction, such as metal, wood, brick, or wad (short
+ for wattle-and-daub), _and_
+- AREA <-- the area in the 3x3 grid of the modular camp layout.
+
+blueprint keywords follow a similar scheme, but `"faction_base_modular"` is collapsed into `"fbm"`
+and the overmap terrain id is collapsed into a short identifier. ie, `"fbmf"` is the keyword
+identifier for elements of the modular field base.
diff --git a/doc/CHANGELOG_GUIDELINES.md b/doc/CHANGELOG_GUIDELINES.md
index a88828ee2624..153791c55438 100644
--- a/doc/CHANGELOG_GUIDELINES.md
+++ b/doc/CHANGELOG_GUIDELINES.md
@@ -1,38 +1,39 @@
# Changelog Guidelines
-- categories used by `Pull Request Summary` in the [PR Template](../.github/pull_request_template.md).
-- these are only guidelines, not rules. choose the best category for your PR freely.
+- categories used by `Pull Request Summary` in the
+ [PR Template](../.github/pull_request_template.md).
+- these are only guidelines, not rules. choose the best category for your PR freely.
## Features
Changes related to player:
-- player can do something new (e.g: mutations, skills)
-- something new can happen to the player (e.g: new disease)
+- player can do something new (e.g: mutations, skills)
+- something new can happen to the player (e.g: new disease)
## Content
Added new contents like:
-- new monsters
-- new map areas
-- new items
-- new vehicles
-- new doohickeys
+- new monsters
+- new map areas
+- new items
+- new vehicles
+- new doohickeys
## Interface
UI/UX changes like:
-- adding/adjusting menus
-- change shortcuts
-- streamlining workflows
-- quality of life improvements
+- adding/adjusting menus
+- change shortcuts
+- streamlining workflows
+- quality of life improvements
## Mods
-- changes contained within a mod
-- extends what is capable within a mod
+- changes contained within a mod
+- extends what is capable within a mod
## Balance
@@ -50,18 +51,18 @@ Improvements to game performance.
Make development easier:
-- `C++` refactorings and overhaul
-- `Json` reorganizations
-- `docs/`, `.github/` and repository changes
-- other development tools
+- `C++` refactorings and overhaul
+- `Json` reorganizations
+- `docs/`, `.github/` and repository changes
+- other development tools
## Build
Improve build process:
-- more robust
-- easier to use
-- faster compile time
+- more robust
+- easier to use
+- faster compile time
## I18N
diff --git a/doc/CODE_STYLE.md b/doc/CODE_STYLE.md
index a9678abf60b6..b871a759a1d9 100644
--- a/doc/CODE_STYLE.md
+++ b/doc/CODE_STYLE.md
@@ -1,14 +1,17 @@
# Code Style Guide
-All of the C++ code in the project is styled, you should run any changes you make through astyle before pushing a pull request.
+All of the C++ code in the project is styled, you should run any changes you make through astyle
+before pushing a pull request.
-We are using astyle version 3.0.1. Version 3.1 should also work, though there are a few cases where they disagree and require annotation.
+We are using astyle version 3.0.1. Version 3.1 should also work, though there are a few cases where
+they disagree and require annotation.
Blocks of code can be passed through astyle to ensure that their formatting is correct:
astyle --style=1tbs --attach-inlines --indent=spaces=4 --align-pointer=name --max-code-length=100 --break-after-logical --indent-classes --indent-preprocessor --indent-switches --indent-col1-comments --min-conditional-indent=0 --pad-oper --unpad-paren --pad-paren-in --add-brackets --convert-tabs
-These options are mirrored in `.astylerc`, `doc/CODE_STYLE.txt` and `msvc-full-features/AStyleExtension-Cataclysm-BN.cfg`
+These options are mirrored in `.astylerc`, `doc/CODE_STYLE.txt` and
+`msvc-full-features/AStyleExtension-Cataclysm-BN.cfg`
For example, from `vi`, set marks a and b around the block, then:
@@ -20,7 +23,7 @@ See [DEVELOPER_TOOLING.md](DEVELOPER_TOOLING.md) for other environments.
Here's an example that illustrates the most common points of style:
-````c++
+```c++
int foo( int arg1, int *arg2 )
{
if( arg1 < 5 ) {
@@ -44,19 +47,22 @@ int foo( int arg1, int *arg2 )
}
return 0;
}
-````
+```
## Code Guidelines
These are less generic guidelines and more pain points we've stumbled across over time.
1. Use int for everything.
- 1. Long in particular is problematic since it is *not* a larger type than int on platforms we care about.
- 1. If you need an integral value larger than 32 bits, you don't. But if you do, use int64_t.
- 2. Uint is also a problem, it has poor behavior when overflowing and should be avoided for general purpose programming.
- 1. If you need binary data, unsigned int or unsigned char are fine, but you should probably use a std::bitset instead.
- 3. Float is to be avoided, but has valid uses.
+ 1. Long in particular is problematic since it is _not_ a larger type than int on platforms we
+ care about.
+ 1. If you need an integral value larger than 32 bits, you don't. But if you do, use int64_t.
+ 2. Uint is also a problem, it has poor behavior when overflowing and should be avoided for
+ general purpose programming.
+ 1. If you need binary data, unsigned int or unsigned char are fine, but you should probably
+ use a std::bitset instead.
+ 3. Float is to be avoided, but has valid uses.
2. Auto Almost Nothing. Auto has two uses, others should be avoided.
- 1. Aliasing for extremely long iterator or functional declarations.
- 2. Generic code support (but decltype is better).
+ 1. Aliasing for extremely long iterator or functional declarations.
+ 2. Generic code support (but decltype is better).
3. Avoid using declaration for standard namespaces.
diff --git a/doc/COLOR.md b/doc/COLOR.md
index 4babaf72cd25..442414a9f2ee 100644
--- a/doc/COLOR.md
+++ b/doc/COLOR.md
@@ -2,40 +2,48 @@
DDA is colorful game. You can use several foreground and background colors in various places:
-* map data (terrain and furniture);
-* item data;
-* text data;
-* etc.
+- map data (terrain and furniture);
+- item data;
+- text data;
+- etc.
-**Note:** Map data objects can only have one color-related node defined (either `color` or `bgcolor`).
+**Note:** Map data objects can only have one color-related node defined (either `color` or
+`bgcolor`).
## Color string format
-Whenever color is defined in JSON it should be defined in following format: `Prefix_Foreground_Background`.
+Whenever color is defined in JSON it should be defined in following format:
+`Prefix_Foreground_Background`.
`Prefix` can take one of following values:
-* `c_` - default color prefix (can be omitted);
-* `i_` - optional prefix which indicates that foreground color should be inverted (special rules will be applied to foreground and background colors);
-* `h_` - optional prefix which indicates that foreground color should be highlighted (special rules will be applied to foreground and background colors).
+- `c_` - default color prefix (can be omitted);
+- `i_` - optional prefix which indicates that foreground color should be inverted (special rules
+ will be applied to foreground and background colors);
+- `h_` - optional prefix which indicates that foreground color should be highlighted (special rules
+ will be applied to foreground and background colors).
`Foreground` - defines mandatory color of foreground/ink/font.
`Background` - defines optional color of background/paper.
-**Note:** Not all foreground + background pairs are defined by their full name. Use in-game Color manager to see all color names.
+**Note:** Not all foreground + background pairs are defined by their full name. Use in-game Color
+manager to see all color names.
-**Note:** If color was not found by its name, then `c_unset` is used for `Foreground` and `i_white` for `Background`.
+**Note:** If color was not found by its name, then `c_unset` is used for `Foreground` and `i_white`
+for `Background`.
## Examples of color strings
- `c_white` - `white` color (with default prefix `c_`);
-- `black` - `black` color (default prefix `c_` is omitted);
+- `black` - `black` color (default prefix `c_` is omitted);
- `i_red` - inverted `red` color;
- `dark_gray_white` - `dark_gray` foreground color with `white` background color;
- `light_gray_light_red` - `light_gray` foreground color with `light_red` background color;
-- `dkgray_red` - `dark_gray` foreground color with `red` background color (deprecated prefix `dk` instead of `dark_`);
-- `ltblue_red` - `light_blue` foreground color with `red` background color (deprecated prefix `lt` instead of `light_`).
+- `dkgray_red` - `dark_gray` foreground color with `red` background color (deprecated prefix `dk`
+ instead of `dark_`);
+- `ltblue_red` - `light_blue` foreground color with `red` background color (deprecated prefix `lt`
+ instead of `light_`).
## Color code
@@ -43,33 +51,35 @@ Color code is short string which defines color and can be used, for example, in
## Possible colors
-| Color (image) | Color name (dda) | Color name (curses) | Default R,G,B values | Color code | Notes |
-|:--------------------------------------------------------:|:------------------:|:-------------------:|:--------------------:|:----------:|:------------------------------------------------------:|
-| ![#000000](https://placehold.it/20/000000/000000?text=+) | `black` | `BLACK` | `0,0,0` | | |
-| ![#ff0000](https://placehold.it/20/ff0000/000000?text=+) | `red` | `RED` | `255,0,0` | `R` | |
-| ![#006e00](https://placehold.it/20/006e00/000000?text=+) | `green` | `GREEN` | `0,110,0` | `G` | |
-| ![#5c3317](https://placehold.it/20/5c3317/000000?text=+) | `brown` | `BROWN` | `92,51,23` | `br` | |
-| ![#0000c8](https://placehold.it/20/0000c8/000000?text=+) | `blue` | `BLUE` | `0,0,200` | `B` | |
-| ![#8b3a62](https://placehold.it/20/8b3a62/000000?text=+) | `magenta` or `pink`| `MAGENTA` | `139,58,98` | `P` | |
-| ![#0096b4](https://placehold.it/20/0096b4/000000?text=+) | `cyan` | `CYAN` | `0,150,180` | `C` | |
-| ![#969696](https://placehold.it/20/969696/000000?text=+) | `light_gray` | `GRAY` | `150,150,150` | `lg` | deprecated `lt` prefix can be used instead of `light_` |
-| ![#636363](https://placehold.it/20/636363/000000?text=+) | `dark_gray` | `DGRAY` | `99,99,99` | `dg` | deprecated `dk` prefix can be used instead of `dark_` |
-| ![#ff9696](https://placehold.it/20/ff9696/000000?text=+) | `light_red` | `LRED` | `255,150,150` | | deprecated `lt` prefix can be used instead of `light_` |
-| ![#00ff00](https://placehold.it/20/00ff00/000000?text=+) | `light_green` | `LGREEN` | `0,255,0` | `g` | deprecated `lt` prefix can be used instead of `light_` |
-| ![#ffff00](https://placehold.it/20/ffff00/000000?text=+) | `light_yellow` | `YELLOW` | `255,255,0` | | deprecated `lt` prefix can be used instead of `light_` |
-| ![#6464ff](https://placehold.it/20/6464ff/000000?text=+) | `light_blue` | `LBLUE` | `100,100,255` | `b` | deprecated `lt` prefix can be used instead of `light_` |
-| ![#fe00fe](https://placehold.it/20/fe00fe/000000?text=+) | `light_magenta` | `LMAGENTA` | `254,0,254` | `lm` | deprecated `lt` prefix can be used instead of `light_` |
-| ![#00f0ff](https://placehold.it/20/00f0ff/000000?text=+) | `light_cyan` | `LCYAN` | `0,240,255` | `c` | deprecated `lt` prefix can be used instead of `light_` |
-| ![#ffffff](https://placehold.it/20/ffffff/000000?text=+) | `white` | `WHITE` | `255,255,255` | `W` | |
-
-**Note:** Default RGB values are taken from file `\data\raw\colors.json`.
-**Note:** RGB values can be redefined in file `\config\base_colors.json`.
+| Color (image) | Color name (dda) | Color name (curses) | Default R,G,B values | Color code | Notes |
+| :------------------------------------------------------: | :-----------------: | :-----------------: | :------------------: | :--------: | :----------------------------------------------------: |
+| ![#000000](https://placehold.it/20/000000/000000?text=+) | `black` | `BLACK` | `0,0,0` | | |
+| ![#ff0000](https://placehold.it/20/ff0000/000000?text=+) | `red` | `RED` | `255,0,0` | `R` | |
+| ![#006e00](https://placehold.it/20/006e00/000000?text=+) | `green` | `GREEN` | `0,110,0` | `G` | |
+| ![#5c3317](https://placehold.it/20/5c3317/000000?text=+) | `brown` | `BROWN` | `92,51,23` | `br` | |
+| ![#0000c8](https://placehold.it/20/0000c8/000000?text=+) | `blue` | `BLUE` | `0,0,200` | `B` | |
+| ![#8b3a62](https://placehold.it/20/8b3a62/000000?text=+) | `magenta` or `pink` | `MAGENTA` | `139,58,98` | `P` | |
+| ![#0096b4](https://placehold.it/20/0096b4/000000?text=+) | `cyan` | `CYAN` | `0,150,180` | `C` | |
+| ![#969696](https://placehold.it/20/969696/000000?text=+) | `light_gray` | `GRAY` | `150,150,150` | `lg` | deprecated `lt` prefix can be used instead of `light_` |
+| ![#636363](https://placehold.it/20/636363/000000?text=+) | `dark_gray` | `DGRAY` | `99,99,99` | `dg` | deprecated `dk` prefix can be used instead of `dark_` |
+| ![#ff9696](https://placehold.it/20/ff9696/000000?text=+) | `light_red` | `LRED` | `255,150,150` | | deprecated `lt` prefix can be used instead of `light_` |
+| ![#00ff00](https://placehold.it/20/00ff00/000000?text=+) | `light_green` | `LGREEN` | `0,255,0` | `g` | deprecated `lt` prefix can be used instead of `light_` |
+| ![#ffff00](https://placehold.it/20/ffff00/000000?text=+) | `light_yellow` | `YELLOW` | `255,255,0` | | deprecated `lt` prefix can be used instead of `light_` |
+| ![#6464ff](https://placehold.it/20/6464ff/000000?text=+) | `light_blue` | `LBLUE` | `100,100,255` | `b` | deprecated `lt` prefix can be used instead of `light_` |
+| ![#fe00fe](https://placehold.it/20/fe00fe/000000?text=+) | `light_magenta` | `LMAGENTA` | `254,0,254` | `lm` | deprecated `lt` prefix can be used instead of `light_` |
+| ![#00f0ff](https://placehold.it/20/00f0ff/000000?text=+) | `light_cyan` | `LCYAN` | `0,240,255` | `c` | deprecated `lt` prefix can be used instead of `light_` |
+| ![#ffffff](https://placehold.it/20/ffffff/000000?text=+) | `white` | `WHITE` | `255,255,255` | `W` | |
+
+**Note:** Default RGB values are taken from file `\data\raw\colors.json`. **Note:** RGB values can
+be redefined in file `\config\base_colors.json`.
## Color rules
-There are two types of special color transformation which can affect both foreground and background color:
+There are two types of special color transformation which can affect both foreground and background
+color:
-* inversion;
-* highlight.
+- inversion;
+- highlight.
-**Note:** Color rules can be redefined (for example, `\data\raw\color_templates\no_bright_background.json`).
+**Note:** Color rules can be redefined (for example,
+`\data\raw\color_templates\no_bright_background.json`).
diff --git a/doc/COMPILING/COMPILER_SUPPORT.md b/doc/COMPILING/COMPILER_SUPPORT.md
index 22e1f79df182..8c9d8a3bf4e8 100644
--- a/doc/COMPILING/COMPILER_SUPPORT.md
+++ b/doc/COMPILING/COMPILER_SUPPORT.md
@@ -1,20 +1,18 @@
# Compilers Supported
-Our goal with compiler support is to make it as easy as possible for new
-contributors to get started with development of the game, while also using the
-newest compilers (and thus language standards) that we can.
+Our goal with compiler support is to make it as easy as possible for new contributors to get started
+with development of the game, while also using the newest compilers (and thus language standards)
+that we can.
-To that end, we aim to support gcc and clang up to the newest stable versions
-and back to those shipping in any supported version of a popular distribution
-or relevant development environment, including Ubuntu, Debian, MSYS, and XCode.
+To that end, we aim to support gcc and clang up to the newest stable versions and back to those
+shipping in any supported version of a popular distribution or relevant development environment,
+including Ubuntu, Debian, MSYS, and XCode.
-In practice, compiler support is often determined by what is covered in our
-automated testing.
+In practice, compiler support is often determined by what is covered in our automated testing.
-At time of writing, the oldest relevant compiler is gcc 5.3, shipped in the
-Ubuntu Xenial LTS release. Ubuntu is likely to remain the limiting factor, so
-the set of supported compilers should be reviewed when Xenial ceases support in
-2021-05.
+At time of writing, the oldest relevant compiler is gcc 5.3, shipped in the Ubuntu Xenial LTS
+release. Ubuntu is likely to remain the limiting factor, so the set of supported compilers should be
+reviewed when Xenial ceases support in 2021-05.
## GCC
@@ -26,16 +24,16 @@ We support and test Clang from version 14.
## Mingw and Mingw-w64
-We use Mingw for cross-compilation of Windows versions on Linux. gcc 5.4 is
-currently used both in the tests and for the Windows release binaries.
+We use Mingw for cross-compilation of Windows versions on Linux. gcc 5.4 is currently used both in
+the tests and for the Windows release binaries.
## MSYS2
-MSYS2 is [a way to build the project](COMPILING-MSYS.md) on Windows. It
-currently offers gcc at versions 7 or higher.
+MSYS2 is [a way to build the project](COMPILING-MSYS.md) on Windows. It currently offers gcc at
+versions 7 or higher.
-MSYS also provides clang. We don't currently support using clang here, but
-work to that end is welcome.
+MSYS also provides clang. We don't currently support using clang here, but work to that end is
+welcome.
## Visual Studio
diff --git a/doc/COMPILING/COMPILING-CMAKE.md b/doc/COMPILING/COMPILING-CMAKE.md
index 9759e51734ed..cb6c9e26d08a 100644
--- a/doc/COMPILING/COMPILING-CMAKE.md
+++ b/doc/COMPILING/COMPILING-CMAKE.md
@@ -1,333 +1,354 @@
# Disclaimer
-**WARNING**: CMake build is **NOT** official and should be used for *dev purposes ONLY*.
+**WARNING**: CMake build is **NOT** official and should be used for _dev purposes ONLY_.
For official way to build CataclysmBN See:
- * [COMPILING.md](COMPILING.md)
+- [COMPILING.md](COMPILING.md)
# Contents
- * [Prerequisites](#prerequisites)
- * [Build Environment](#build-environment)
- * [UNIX Environment](#unix-environment)
- * [Windows Environment](#windows-environment-msys2)
- * [CMake Build](#cmake-build)
- * [MinGW,MSYS,MSYS2](#cmake-build-for-msys2-mingw)
- * [MSBuild, VisualStudio](#cmake-build-for-visual-studio--msbuild)
- * [Build Options](#build-options)
- * [CMake specific options](#cmake-specific-options)
- * [CataclysmBN specific options])(#cataclysmbn-specific-options)
-
# Prerequisites
-You'll need to have these libraries and their development headers installed in
-order to build CataclysmBN:
-
- * General
- * `cmake` >= 3.0.0
- * `gcc-libs`
- * `glibc`
- * `zlib`
- * `bzip2`
- * Curses
- * `ncurses`
- * Tiles
- * `SDL` >= 2.0.0
- * `SDL_image` >= 2.0.0 (with PNG and JPEG support)
- * `SDL_mixer` >= 2.0.0 (with Ogg Vorbis support)
- * `SDL_ttf` >= 2.0.0
- * `freetype`
- * Sound
- * `vorbis`
- * `libbz2`
- * `libz`
+You'll need to have these libraries and their development headers installed in order to build
+CataclysmBN:
+
+- General
+ - `cmake` >= 3.0.0
+ - `gcc-libs`
+ - `glibc`
+ - `zlib`
+ - `bzip2`
+- Curses
+ - `ncurses`
+- Tiles
+ - `SDL` >= 2.0.0
+ - `SDL_image` >= 2.0.0 (with PNG and JPEG support)
+ - `SDL_mixer` >= 2.0.0 (with Ogg Vorbis support)
+ - `SDL_ttf` >= 2.0.0
+ - `freetype`
+- Sound
+ - `vorbis`
+ - `libbz2`
+ - `libz`
In order to compile localization files, you'll also need `gettext` package.
# Build Environment
-You can obtain the source code tarball for the latest version from [git](https://github.com/cataclysmbnteam/Cataclysm-BN).
-
+You can obtain the source code tarball for the latest version from
+[git](https://github.com/cataclysmbnteam/Cataclysm-BN).
## UNIX Environment
Obtain packages specified above with your system package manager.
-
## Windows Environment (MSYS2)
- 1. Follow steps from here: https://msys2.github.io/
- 2. Install CataclysmBN build deps:
-
- ```
- pacman -S mingw-w64-i686-toolchain msys/git \
- mingw-w64-i686-cmake \
- mingw-w64-i686-SDL2_{image,mixer,ttf} \
- ncurses-devel \
- gettext
- ```
+1. Follow steps from here: https://msys2.github.io/
+2. Install CataclysmBN build deps:
- This should get your environment set up to build console and tiles version of windows.
+```
+pacman -S mingw-w64-i686-toolchain msys/git \
+ mingw-w64-i686-cmake \
+ mingw-w64-i686-SDL2_{image,mixer,ttf} \
+ ncurses-devel \
+ gettext
+```
- **NOTE**: This is only for 32bit builds. 64bit requires the x86_64 instead of the i686
- packages listed above:
+This should get your environment set up to build console and tiles version of windows.
- ```
- pacman -S mingw-w64-x86_64-toolchain msys/git \
- mingw-w64-x86_64-cmake \
- mingw-w64-x86_64-SDL2_{image,mixer,ttf} \
- ncurses-devel \
- gettext
- ```
+**NOTE**: This is only for 32bit builds. 64bit requires the x86_64 instead of the i686 packages
+listed above:
- **NOTE**: If you're trying to test with Jetbrains CLion, point to the cmake version in the
- msys32/mingw32 path instead of using the built in. This will let cmake detect the
- installed packages.
+```
+pacman -S mingw-w64-x86_64-toolchain msys/git \
+ mingw-w64-x86_64-cmake \
+ mingw-w64-x86_64-SDL2_{image,mixer,ttf} \
+ ncurses-devel \
+ gettext
+```
+**NOTE**: If you're trying to test with Jetbrains CLion, point to the cmake version in the
+msys32/mingw32 path instead of using the built in. This will let cmake detect the installed
+packages.
# CMake Build
- CMake has separate configuration and build steps. Configuration
- is done using CMake itself, and the actual build is done using either `make`
- (for Makefiles generator) or build-system agnostic `cmake --build . ` .
-
- There are two ways to build CataclysmBN with CMake: inside the source tree or
- outside of it. Out-of-source builds have the advantage that you can have
- multiple builds with different options from one source directory.
+CMake has separate configuration and build steps. Configuration is done using CMake itself, and the
+actual build is done using either `make` (for Makefiles generator) or build-system agnostic
+`cmake --build .` .
- **WARNING**: Inside the source tree build is **NOT** supported.
+There are two ways to build CataclysmBN with CMake: inside the source tree or outside of it.
+Out-of-source builds have the advantage that you can have multiple builds with different options
+from one source directory.
- To build CataclysmBN out of source:
+**WARNING**: Inside the source tree build is **NOT** supported.
- ```
- $ mkdir build && cd build
- $ cmake .. -DCMAKE_BUILD_TYPE=Release
- $ make
- ```
+To build CataclysmBN out of source:
-The above example creates a build directory inside the source directory, but that's not required - you can just as easily create it in a completely different location.
+```
+$ mkdir build && cd build
+ $ cmake .. -DCMAKE_BUILD_TYPE=Release
+ $ make
+```
- To install CataclysmBN after building (as root using su or sudo if necessary):
+The above example creates a build directory inside the source directory, but that's not required -
+you can just as easily create it in a completely different location.
- ```
- # make install
- ```
+To install CataclysmBN after building (as root using su or sudo if necessary):
- To change build options, you can either pass the options on the command line:
+```
+# make install
+```
- ```
- $ cmake .. -DOPTION_NAME=option_value
- ```
+To change build options, you can either pass the options on the command line:
- Or use either the `ccmake` or `cmake-gui` front-ends, which display all options
- and their cached values on a console and graphical UI, respectively.
+```
+$ cmake .. -DOPTION_NAME=option_value
+```
- ```
- $ ccmake ..
- $ cmake-gui ..
- ```
+Or use either the `ccmake` or `cmake-gui` front-ends, which display all options and their cached
+values on a console and graphical UI, respectively.
+```
+$ ccmake ..
+ $ cmake-gui ..
+```
## CMake Build for MSYS2 (MinGW)
- **NOTE**: For development purposes it is preferred to use `MinGW Win64 Shell` or `MinGW Win32 Shell` instead of `MSYS2 Shell`. In other case, you will need to set `PATH` variable manually.
-
- For Mingw,MSYS,MSYS2 you should set [Makefiles generator](https://cmake.org/cmake/help/v3.0/manual/cmake-generators.7.html) to "MSYS Makefiles".
- Setting it to "MinGW Makefiles" might work as well, but might also require additional hackery.
-
- Example:
-
- ```
- $ cd
- $ mkdir build
- $ cd build
- $ cmake .. -G "MSYS Makefiles"
- $ make # or $ cmake --build .
- ```
-
- The resulting binary will be placed inside the source code directory.
-
- Shared libraries:
-
- If you got `libgcc_s_dw2-1.dll not found` error you need to copy shared libraries
- to directory with CataclysmBN executables.
-
- **NOTE**: For `-DRELEASE=OFF` development builds, You can automate copy process with:
-
- ```
- $ make install
- ```
-
- However, it likely will fail b/c you have different build environment setup :)
-
- Currently known depends (Maybe outdated use ldd.exe to correct it for Your system)
-
- * MINGW deps:
- * `libwinpthread-1.dll`
- * `libgcc_s_dw2-1.dll`
- * `libstdc++-6.dll`
-
- * TILES deps:
- * `SDL2.dll`
- * `SDL2_ttf.dll`
- * `libfreetype-6.dll`
- * `libbz2-1.dll`
- * `libharfbuzz-0.dll`
- * `SDL2_image.dll`
- * `libpng16-16.dll`
- * `libjpeg-8.dll`
- * `libtiff-5.dll`
- * `libjbig-0.dll`
- * `liblzma-5.dll`
- * `libwebp-5.dll`
- * `zlib1.dll`
- * `libglib-2.0-0.dll`
-
- * SOUND deps:
- * `SDL2_mixer.dll`
- * `libFLAC-8.dll`
- * `libogg-0.dll`
- * `libfluidsynth-1.dll`
- * `libportaudio-2.dll`
- * `libsndfile-1.dll`
- * `libvorbis-0.dll`
- * `libvorbisenc-2.dll`
- * `libmodplug-1.dll`
- * `smpeg2.dll`
- * `libvorbisfile-3.dll`
+**NOTE**: For development purposes it is preferred to use `MinGW Win64 Shell` or `MinGW Win32 Shell`
+instead of `MSYS2 Shell`. In other case, you will need to set `PATH` variable manually.
+
+For Mingw,MSYS,MSYS2 you should set
+[Makefiles generator](https://cmake.org/cmake/help/v3.0/manual/cmake-generators.7.html) to "MSYS
+Makefiles". Setting it to "MinGW Makefiles" might work as well, but might also require additional
+hackery.
+
+Example:
+
+```
+$ cd
+ $ mkdir build
+ $ cd build
+ $ cmake .. -G "MSYS Makefiles"
+ $ make # or $ cmake --build .
+```
+
+The resulting binary will be placed inside the source code directory.
+
+Shared libraries:
+
+If you got `libgcc_s_dw2-1.dll not found` error you need to copy shared libraries to directory with
+CataclysmBN executables.
+**NOTE**: For `-DRELEASE=OFF` development builds, You can automate copy process with:
+
+```
+$ make install
+```
+
+However, it likely will fail b/c you have different build environment setup :)
+
+Currently known depends (Maybe outdated use ldd.exe to correct it for Your system)
+
+- MINGW deps:
+ - `libwinpthread-1.dll`
+ - `libgcc_s_dw2-1.dll`
+ - `libstdc++-6.dll`
+
+- TILES deps:
+ - `SDL2.dll`
+ - `SDL2_ttf.dll`
+ - `libfreetype-6.dll`
+ - `libbz2-1.dll`
+ - `libharfbuzz-0.dll`
+ - `SDL2_image.dll`
+ - `libpng16-16.dll`
+ - `libjpeg-8.dll`
+ - `libtiff-5.dll`
+ - `libjbig-0.dll`
+ - `liblzma-5.dll`
+ - `libwebp-5.dll`
+ - `zlib1.dll`
+ - `libglib-2.0-0.dll`
+
+- SOUND deps:
+ - `SDL2_mixer.dll`
+ - `libFLAC-8.dll`
+ - `libogg-0.dll`
+ - `libfluidsynth-1.dll`
+ - `libportaudio-2.dll`
+ - `libsndfile-1.dll`
+ - `libvorbis-0.dll`
+ - `libvorbisenc-2.dll`
+ - `libmodplug-1.dll`
+ - `smpeg2.dll`
+ - `libvorbisfile-3.dll`
## CMake Build for Visual Studio / MSBuild
-CMake can generate `.sln` and `.vcxproj` files used either by Visual Studio itself or by MSBuild command line compiler (if you don't want
-a full fledged IDE) and have more "native" binaries than what MSYS/Cygwin can provide.
+CMake can generate `.sln` and `.vcxproj` files used either by Visual Studio itself or by MSBuild
+command line compiler (if you don't want a full fledged IDE) and have more "native" binaries than
+what MSYS/Cygwin can provide.
-At the moment only a limited combination of options is supported (tiles only, no localizations, no backtrace).
+At the moment only a limited combination of options is supported (tiles only, no localizations, no
+backtrace).
Get the tools:
- * CMake from the official site - https://cmake.org/download/.
- * Microsoft compiler - https://visualstudio.microsoft.com/downloads/?q=build+tools , choose "Build Tools for Visual Studio 2017". When installing chose "Visual C++ Build Tools" options.
- * alternatively, you can get download and install the complete Visual Studio, but that's not required.
+
+- CMake from the official site - https://cmake.org/download/.
+- Microsoft compiler - https://visualstudio.microsoft.com/downloads/?q=build+tools , choose "Build
+ Tools for Visual Studio 2017". When installing chose "Visual C++ Build Tools" options.
+ - alternatively, you can get download and install the complete Visual Studio, but that's not
+ required.
Get the required libraries:
- * `SDL2` - https://www.libsdl.org/download-2.0.php (you need the "(Visual C++ 32/64-bit)" version. Same below)
- * `SDL2_ttf` - https://www.libsdl.org/projects/SDL_ttf/
- * `SDL2_image` - https://www.libsdl.org/projects/SDL_image/
- * `SDL2_mixer` (optional, for sound support) - https://www.libsdl.org/projects/SDL_mixer/
- * Unsupported (and unused in the following instructions) optional libs:
- * `ncurses` - ???
+
+- `SDL2` - https://www.libsdl.org/download-2.0.php (you need the "(Visual C++ 32/64-bit)" version.
+ Same below)
+- `SDL2_ttf` - https://www.libsdl.org/projects/SDL_ttf/
+- `SDL2_image` - https://www.libsdl.org/projects/SDL_image/
+- `SDL2_mixer` (optional, for sound support) - https://www.libsdl.org/projects/SDL_mixer/
+- Unsupported (and unused in the following instructions) optional libs:
+ - `ncurses` - ???
Unpack the archives with the libraries.
-Open windows command line (or powershell), set the environment variables to point to the libs above as follows (adjusting the paths as appropriate):
+Open windows command line (or powershell), set the environment variables to point to the libs above
+as follows (adjusting the paths as appropriate):
+
```
- > set SDL2DIR=C:\path\to\SDL2-devel-2.0.9-VC
- > set SDL2TTFDIR=C:\path\to\SDL2_ttf-devel-2.0.15-VC
- > set SDL2IMAGEDIR=C:\path\to\SDL2_image-devel-2.0.4-VC
- > set SDL2MIXERDIR=C:\path\to\SDL2_mixer-devel-2.0.4-VC
+> set SDL2DIR=C:\path\to\SDL2-devel-2.0.9-VC
+> set SDL2TTFDIR=C:\path\to\SDL2_ttf-devel-2.0.15-VC
+> set SDL2IMAGEDIR=C:\path\to\SDL2_image-devel-2.0.4-VC
+> set SDL2MIXERDIR=C:\path\to\SDL2_mixer-devel-2.0.4-VC
```
+
(for powershell the syntax is `$env:SDL2DIR="C:\path\to\SDL2-devel-2.0.9-VC"`).
Make a build directory and run cmake configuration step
+
```
- > cd
- > mkdir build
- > cd build
- > cmake .. -DTILES=ON -DLANGUAGES=none -DBACKTRACE=OFF -DSOUND=ON
+> cd
+> mkdir build
+> cd build
+> cmake .. -DTILES=ON -DLANGUAGES=none -DBACKTRACE=OFF -DSOUND=ON
```
-
Build!
+
```
- > cmake --build . -j 2 -- /p:Configuration=Release
+> cmake --build . -j 2 -- /p:Configuration=Release
```
- The `-j 2` flag controls build parallelism - you can omit it if you wish. The `/p:Configuration=Release` flag is passed directly to MSBuild and
- controls optimizations. If you omit it, the `Debug` configuration would be built instead. For powershell you'll need to have an extra ` -- ` after the first one.
-The resulting files will be put into a `Release` directory inside your source Cataclysm-BN folder. To make them run you'd need to first move them to the
-source Cataclysm-BN directory itself (so that the binary has access to the game data), and second put the required `.dll`s into the same folder -
-you can find those inside the directories for dev libraries under `lib/x86/` or `lib/x64/` (you likely need the `x86` ones even if you're on 64-bit machine).
+The `-j 2` flag controls build parallelism - you can omit it if you wish. The
+`/p:Configuration=Release` flag is passed directly to MSBuild and controls optimizations. If you
+omit it, the `Debug` configuration would be built instead. For powershell you'll need to have an
+extra `--` after the first one.
-The copying of dlls is a one-time task, but you'd need to move the binary out of `Release/` each time it's built. To automate it a bit, you can configure cmake and set the desired binaries destination directory with `-DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE=` option (and similar for `CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG`).
+The resulting files will be put into a `Release` directory inside your source Cataclysm-BN folder.
+To make them run you'd need to first move them to the source Cataclysm-BN directory itself (so that
+the binary has access to the game data), and second put the required `.dll`s into the same folder -
+you can find those inside the directories for dev libraries under `lib/x86/` or `lib/x64/` (you
+likely need the `x86` ones even if you're on 64-bit machine).
-Run the game. Should work.
+The copying of dlls is a one-time task, but you'd need to move the binary out of `Release/` each
+time it's built. To automate it a bit, you can configure cmake and set the desired binaries
+destination directory with `-DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE=` option (and similar for
+`CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG`).
+Run the game. Should work.
# Build Options
- A full list of options supported by CMake, you may either run the `ccmake`
- or `cmake-gui` front-ends, or run `cmake` and open the generated CMakeCache.txt
- from the build directory in a text editor.
-
- ```
- $ cmake -DOPTION_NAME1=option_value1 [-DOPTION_NAME2=option_value2 [...]]
- ```
+A full list of options supported by CMake, you may either run the `ccmake` or `cmake-gui`
+front-ends, or run `cmake` and open the generated CMakeCache.txt from the build directory in a text
+editor.
+```
+$ cmake -DOPTION_NAME1=option_value1 [-DOPTION_NAME2=option_value2 [...]]
+```
## CMake specific options
- * CMAKE_BUILD_TYPE=``
+- CMAKE_BUILD_TYPE=``
- Selects a specific build configuration when compiling. `release` produces
- the default, optimized (-Os) build for regular use. `debug` produces a
- slower and larger unoptimized (-O0) build with full debug symbols, which is
- often needed for obtaining detailed backtraces when reporting bugs.
+Selects a specific build configuration when compiling. `release` produces the default, optimized
+(-Os) build for regular use. `debug` produces a slower and larger unoptimized (-O0) build with full
+debug symbols, which is often needed for obtaining detailed backtraces when reporting bugs.
- **NOTE**: By default, CMake will produce `debug` builds unless a different
- configuration option is passed in the command line.
+**NOTE**: By default, CMake will produce `debug` builds unless a different configuration option is
+passed in the command line.
+- CMAKE_INSTALL_PREFIX=``
- * CMAKE_INSTALL_PREFIX=``
+Installation prefix for binaries, resources, and documentation files.
- Installation prefix for binaries, resources, and documentation files.
+## CataclysmBN specific options
+- CURSES=``
-## CataclysmBN specific options
+Build curses version.
+
+- TILES=``
- * CURSES=``
+Build graphical tileset version.
- Build curses version.
+- SOUND=``
+Support for in-game sounds & music.
- * TILES=``
+- USE_HOME_DIR=``
- Build graphical tileset version.
+Use user's home directory for save files.
+- LANGUAGES=``
- * SOUND=``
+Compile localization files for specified languages. Example:
- Support for in-game sounds & music.
+```
+-DLANGUAGES="cs;de;el;es_AR;es_ES"
+```
+Note that language files are only compiled automatically when building the `RELEASE` build type. For
+other build types, you need to add the `translations_compile` target to the `make` command, for
+example `make all translations_compile`.
- * USE_HOME_DIR=``
+- DYNAMIC_LINKING=``
- Use user's home directory for save files.
+Use dynamic linking. Or use static to remove MinGW dependency instead.
+- CUSTOM LINKER=``
- * LANGUAGES=``
+Choose custom linkers such as [gold], [lld] or [mold].
- Compile localization files for specified languages. Example:
- ```
- -DLANGUAGES="cs;de;el;es_AR;es_ES"
- ```
+- Choose ld if you don't use libbacktrace.
+- Choose mold if use libbacktrace. It's the fastest linker, outperforming gold by 24x.
- Note that language files are only compiled automatically when building the
- `RELEASE` build type. For other build types, you need to add the `translations_compile`
- target to the `make` command, for example `make all translations_compile`.
+[gold]: https://en.wikipedia.org/wiki/Gold_(linker)
+[lld]: https://lld.llvm.org
+[mold]: https://github.com/rui314/mold
+- BACKTRACE=``
- * DYNAMIC_LINKING=``
+On crash, print a backtrace to the console. Defaults to `ON` for debug builds.
- Use dynamic linking. Or use static to remove MinGW dependency instead.
+- LIBBACKTRACE=``
+Print backtrace with [libbacktrace]. This allows lld and mold to print backtrace, and is generally
+much faster.
- * GIT_BINARY=``
+[libbacktrace]: https://github.com/ianlancetaylor/libbacktrace
- Override default Git binary name or path.
+- GIT_BINARY=``
- So a CMake command for building Cataclysm-BN in release mode with tiles and sound support will look as follows, provided it is run in build directory located in the project.
-```
+Override default Git binary name or path.
+
+So a CMake command for building Cataclysm-BN in release mode with tiles and sound support will look
+as follows, provided it is run in build directory located in the project.
+
+```sh
cmake ../ -DCMAKE_BUILD_TYPE=Release -DTILES=ON -DSOUND=ON
```
-
diff --git a/doc/COMPILING/COMPILING-CYGWIN.md b/doc/COMPILING/COMPILING-CYGWIN.md
index 9ccf4c6bb47d..c2540409c77f 100644
--- a/doc/COMPILING/COMPILING-CYGWIN.md
+++ b/doc/COMPILING/COMPILING-CYGWIN.md
@@ -1,22 +1,32 @@
# Compilation guide for 64 bit Windows (using Cygwin)
-This guide contains instructions for compiling Cataclysm-BN on Windows under Cygwin. **PLEASE NOTE:** These instructions *are not intended* to produce a redistributable copy of CBN. Please download the official builds from the website or [cross-compile from Linux](https://github.com/cataclysmbnteam/Cataclysm-BN/blob/master/doc/COMPILING/COMPILING.md#cross-compile-to-windows-from-linux) if that is your intention.
+This guide contains instructions for compiling Cataclysm-BN on Windows under Cygwin. **PLEASE
+NOTE:** These instructions _are not intended_ to produce a redistributable copy of CBN. Please
+download the official builds from the website or
+[cross-compile from Linux](https://github.com/cataclysmbnteam/Cataclysm-BN/blob/master/doc/COMPILING/COMPILING.md#cross-compile-to-windows-from-linux)
+if that is your intention.
-These instructions were written using 64-bit Windows 7 and the 64-bit version of Cygwin; the steps should be the same for other versions of Windows.
+These instructions were written using 64-bit Windows 7 and the 64-bit version of Cygwin; the steps
+should be the same for other versions of Windows.
-Due to slow environment setup and execution of the resulting binary, compilation using MSYS2 is preferred.
+Due to slow environment setup and execution of the resulting binary, compilation using MSYS2 is
+preferred.
## Prerequisites:
-* 64-bit version of Windows 7, 8, 8.1, or 10
-* NTFS partition with ~10 Gb free space (~2 Gb for Cygwin installation, ~3 Gb for repository and ~5 Gb for ccache)
-* 64-bit version of Cygwin
+- 64-bit version of Windows 7, 8, 8.1, or 10
+- NTFS partition with ~10 Gb free space (~2 Gb for Cygwin installation, ~3 Gb for repository and ~5
+ Gb for ccache)
+- 64-bit version of Cygwin
## Installation:
-1. Go to the [Cygwin homepage](https://cygwin.com/) and download the 64-bit installer (e.g. [setup-x86_64.exe](https://cygwin.com/setup-x86_64.exe)).
+1. Go to the [Cygwin homepage](https://cygwin.com/) and download the 64-bit installer (e.g.
+ [setup-x86_64.exe](https://cygwin.com/setup-x86_64.exe)).
-2. Run downloaded file and install Cygwin. Select `Install from Internet` and select the desired installation directory. It is suggested that you install into a dev-specific directory (e.g. `C:\dev\cygwin64`), but it's not strictly necessary. Install for all users.
+2. Run downloaded file and install Cygwin. Select `Install from Internet` and select the desired
+ installation directory. It is suggested that you install into a dev-specific directory (e.g.
+ `C:\dev\cygwin64`), but it's not strictly necessary. Install for all users.
3. Give the `\downloads\` folder as the local package directory (e.g. `C:\dev\cygwin64\downloads`).
@@ -24,9 +34,11 @@ Due to slow environment setup and execution of the resulting binary, compilation
5. On the next screen, select any mirror you like.
-6. Enter `wget` into the search box, expand the "Web" category and select the latest version in the drop-down (1.21.1-1 as of the time this guide was written).
+6. Enter `wget` into the search box, expand the "Web" category and select the latest version in the
+ drop-down (1.21.1-1 as of the time this guide was written).
-7. Confirm that wget is shown in the following screen by scrolling to the bottom. This is the full list of packages that Cygwin will download and install.
+7. Confirm that wget is shown in the following screen by scrolling to the bottom. This is the full
+ list of packages that Cygwin will download and install.
8. Retry any packages that throw errors.
@@ -49,13 +61,16 @@ chmod 755 /bin/apt-cyg
apt-cyg install astyle ccache gcc-g++ intltool git libSDL2_image-devel libSDL2_mixer-devel libSDL2_ttf-devel make xinit
```
-You will see messages saying packages are already installed, as well as Cygwin installing packages you didn't ask for; this is the result of Cygwin's package manager automatically resolving dependencies.
+You will see messages saying packages are already installed, as well as Cygwin installing packages
+you didn't ask for; this is the result of Cygwin's package manager automatically resolving
+dependencies.
## Cloning and compilation:
1. Clone the Cataclysm-BN repository with following command:
-**Note:** This will download the entire CBN repository and all of its history (3GB). If you're just testing, you should probably add `--depth=1` (~350MB).
+**Note:** This will download the entire CBN repository and all of its history (3GB). If you're just
+testing, you should probably add `--depth=1` (~350MB).
```bash
cd /cygdrive/c/dev
@@ -69,15 +84,19 @@ cd Cataclysm-BN
make -j$((`nproc`+0)) CCACHE=1 RELEASE=1 CYGWIN=1 DYNAMIC_LINKING=1 SDL=1 TILES=1 SOUND=1 LANGUAGES=all LINTJSON=0 ASTYLE=0 BACKTRACE=0 RUNTESTS=0
```
-You will receive warnings about unterminated character constants; they do not impact the compilation as far as this writer is aware.
+You will receive warnings about unterminated character constants; they do not impact the compilation
+as far as this writer is aware.
-**Note**: This will compile release version with Sound and Tiles support and all localization languages, skipping checks and tests and using ccache for faster build. You can use other switches, but `CYGWIN=1`, `DYNAMIC_LINKING=1` and `BACKTRACE=0` are required to compile without issues.
+**Note**: This will compile release version with Sound and Tiles support and all localization
+languages, skipping checks and tests and using ccache for faster build. You can use other switches,
+but `CYGWIN=1`, `DYNAMIC_LINKING=1` and `BACKTRACE=0` are required to compile without issues.
## Running:
1. Execute the XWin Server from the Start menu.
-2. When the icons appear in the system tray, right-click the one that looks like a black C (X Applications Menu.)
+2. When the icons appear in the system tray, right-click the one that looks like a black C (X
+ Applications Menu.)
3. Point to System Tools, then click UXTerm.
diff --git a/doc/COMPILING/COMPILING-MSYS.md b/doc/COMPILING/COMPILING-MSYS.md
index 9a12ae803d41..d40984040c13 100644
--- a/doc/COMPILING/COMPILING-MSYS.md
+++ b/doc/COMPILING/COMPILING-MSYS.md
@@ -1,14 +1,20 @@
# Compilation guide for 64-bit Windows (using MSYS2)
-This guide contains instructions for compiling Cataclysm-BN on Windows under MSYS2. **PLEASE NOTE:** These instructions *are not intended* to produce a redistributable copy of CBN. Please download the official builds from the website or [cross-compile from Linux](https://github.com/cataclysmbnteam/Cataclysm-BN/blob/master/doc/COMPILING/COMPILING.md#cross-compile-to-windows-from-linux) if that is your intention.
+This guide contains instructions for compiling Cataclysm-BN on Windows under MSYS2. **PLEASE NOTE:**
+These instructions _are not intended_ to produce a redistributable copy of CBN. Please download the
+official builds from the website or
+[cross-compile from Linux](https://github.com/cataclysmbnteam/Cataclysm-BN/blob/master/doc/COMPILING/COMPILING.md#cross-compile-to-windows-from-linux)
+if that is your intention.
-These instructions were written using 64-bit Windows 7 and the 64-bit version of MSYS2; the steps should be the same for other versions of Windows.
+These instructions were written using 64-bit Windows 7 and the 64-bit version of MSYS2; the steps
+should be the same for other versions of Windows.
## Prerequisites:
-* Windows 7, 8, 8.1, or 10
-* NTFS partition with ~10 Gb free space (~2 Gb for MSYS2 installation, ~3 Gb for repository and ~5 Gb for ccache)
-* 64-bit version of MSYS2
+- Windows 7, 8, 8.1, or 10
+- NTFS partition with ~10 Gb free space (~2 Gb for MSYS2 installation, ~3 Gb for repository and ~5
+ Gb for ccache)
+- 64-bit version of MSYS2
**Note:** Windows XP is unsupported!
@@ -16,7 +22,8 @@ These instructions were written using 64-bit Windows 7 and the 64-bit version of
1. Go to the [MSYS2 homepage](http://www.msys2.org/) and download the installer.
-2. Run the installer. It is suggested that you install to a dev-specific folder (C:\dev\msys64\ or similar), but it's not strictly necessary.
+2. Run the installer. It is suggested that you install to a dev-specific folder (C:\dev\msys64\ or
+ similar), but it's not strictly necessary.
3. After installation, run MSYS2 64bit now.
@@ -28,7 +35,10 @@ These instructions were written using 64-bit Windows 7 and the 64-bit version of
pacman -Syyu
```
-2. MSYS may inform you of a cygheap base mismatch and inform you a forked process died unexpectedly; these errors appear to be due to the nature of `pacman`'s upgrades and *may be safely ignored.* You will be prompted to close the terminal window; do so, then re-start using the MSYS2 MinGW 64-bit menu item.
+2. MSYS may inform you of a cygheap base mismatch and inform you a forked process died unexpectedly;
+ these errors appear to be due to the nature of `pacman`'s upgrades and _may be safely ignored._
+ You will be prompted to close the terminal window; do so, then re-start using the MSYS2 MinGW
+ 64-bit menu item.
3. Update remaining packages:
@@ -44,34 +54,35 @@ pacman -S git make mingw-w64-x86_64-{astyle,ccache,gcc,libmad,libwebp,pkg-config
5. Close MSYS2.
-6. Update path variables in the system-wide profile file (e.g. `C:\dev\msys64\etc\profile`) as following:
+6. Update path variables in the system-wide profile file (e.g. `C:\dev\msys64\etc\profile`) as
+ following:
- find lines:
```
- MSYS2_PATH="/usr/local/bin:/usr/bin:/bin"
- MANPATH='/usr/local/man:/usr/share/man:/usr/man:/share/man'
- INFOPATH='/usr/local/info:/usr/share/info:/usr/info:/share/info'
+MSYS2_PATH="/usr/local/bin:/usr/bin:/bin"
+MANPATH='/usr/local/man:/usr/share/man:/usr/man:/share/man'
+INFOPATH='/usr/local/info:/usr/share/info:/usr/info:/share/info'
```
and
```
- PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/share/pkgconfig:/lib/pkgconfig"
+PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/share/pkgconfig:/lib/pkgconfig"
```
- and replace them with:
```
- MSYS2_PATH="/usr/local/bin:/usr/bin:/bin:/mingw64/bin"
- MANPATH='/usr/local/man:/usr/share/man:/usr/man:/share/man:/mingw64/share/man'
- INFOPATH='/usr/local/info:/usr/share/info:/usr/info:/share/info:/mingw64/share/man'
+MSYS2_PATH="/usr/local/bin:/usr/bin:/bin:/mingw64/bin"
+MANPATH='/usr/local/man:/usr/share/man:/usr/man:/share/man:/mingw64/share/man'
+INFOPATH='/usr/local/info:/usr/share/info:/usr/info:/share/info:/mingw64/share/man'
```
and
```
- PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/share/pkgconfig:/lib/pkgconfig:/mingw64/lib/pkgconfig:/mingw64/share/pkgconfig"
+PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/share/pkgconfig:/lib/pkgconfig:/mingw64/lib/pkgconfig:/mingw64/share/pkgconfig"
```
## Cloning and compilation:
@@ -84,7 +95,8 @@ git clone https://github.com/cataclysmbnteam/Cataclysm-BN.git
cd Cataclysm-BN
```
-**Note:** This will download the entire CBN repository and all of its history (3GB). If you're just testing, you should probably add `--depth=1` (~350MB).
+**Note:** This will download the entire CBN repository and all of its history (3GB). If you're just
+testing, you should probably add `--depth=1` (~350MB).
2. Compile with following command line:
@@ -92,9 +104,12 @@ cd Cataclysm-BN
make -j$((`nproc`+0)) CCACHE=1 RELEASE=1 MSYS2=1 DYNAMIC_LINKING=1 SDL=1 TILES=1 SOUND=1 LANGUAGES=all LINTJSON=0 ASTYLE=0 RUNTESTS=0
```
-You will receive warnings about unterminated character constants; they do not impact the compilation as far as this writer is aware.
+You will receive warnings about unterminated character constants; they do not impact the compilation
+as far as this writer is aware.
-**Note**: This will compile a release version with Sound and Tiles support and all localization languages, skipping checks and tests, and using ccache for build acceleration. You can use other switches, but `MSYS2=1` and `DYNAMIC_LINKING=1` are required to compile without issues.
+**Note**: This will compile a release version with Sound and Tiles support and all localization
+languages, skipping checks and tests, and using ccache for build acceleration. You can use other
+switches, but `MSYS2=1` and `DYNAMIC_LINKING=1` are required to compile without issues.
## Running:
@@ -104,4 +119,6 @@ You will receive warnings about unterminated character constants; they do not im
./cataclysm-tiles
```
-**Note:** If you want to run the compiled executable outside of MSYS2, you will also need to update your user or system `PATH` variable with the path to MSYS2's runtime binaries (e.g. `C:\dev\msys64\mingw64\bin`).
+**Note:** If you want to run the compiled executable outside of MSYS2, you will also need to update
+your user or system `PATH` variable with the path to MSYS2's runtime binaries (e.g.
+`C:\dev\msys64\mingw64\bin`).
diff --git a/doc/COMPILING/COMPILING-VS-VCPKG.md b/doc/COMPILING/COMPILING-VS-VCPKG.md
index d15b766f1e28..2b02b8fcd8ba 100644
--- a/doc/COMPILING/COMPILING-VS-VCPKG.md
+++ b/doc/COMPILING/COMPILING-VS-VCPKG.md
@@ -1,32 +1,45 @@
# Compilation guide for Windows (using Visual Studio and vcpkg)
-This guide contains steps required to allow compilation of Cataclysm-BN on Windows using Visual Studio and vcpkg.
+This guide contains steps required to allow compilation of Cataclysm-BN on Windows using Visual
+Studio and vcpkg.
-Steps from current guide were tested on Windows 10 and 11 (64 bit), Visual Studio 2019 and 2022 (64 bit), but should as well work with slight modifications for other versions of Windows and Visual Studio.
+Steps from current guide were tested on Windows 10 and 11 (64 bit), Visual Studio 2019 and 2022 (64
+bit), but should as well work with slight modifications for other versions of Windows and Visual
+Studio.
## Prerequisites:
-* Computer with modern Windows operating system installed (Windows 10 or 11), Windows 7 and 8.1 are not guaranteed to work;
-* NTFS partition with ~15 Gb free space (~10 Gb for Visual Studio, ~1 Gb for vcpkg installation, ~3 Gb for repository and ~1 Gb for build cache);
-* Git for Windows (installer can be downloaded from [Git homepage](https://git-scm.com/));
-* Visual Studio 2019 or 2022
- * **Note**: If you are using Visual Studio 2022, you must install the Visual Studio 2019 compilers to work around a vcpkg bug. In the Visual Studio Installer, select the 'Individual components' tab and search for / select the component that looks like 'MSVC v142 - VS 2019 C++ x64/x86 Build Tools'. See https://github.com/microsoft/vcpkg/issues/22287.
-* Latest version of vcpkg (see instructions on [vcpkg homepage](https://github.com/Microsoft/vcpkg)).
-* If you plan on contributing your changes to Bright Nights, you'll also have to install a code formatter, see [Code style](#code-style) section for more info.
+- Computer with modern Windows operating system installed (Windows 10 or 11), Windows 7 and 8.1 are
+ not guaranteed to work;
+- NTFS partition with ~15 Gb free space (~10 Gb for Visual Studio, ~1 Gb for vcpkg installation, ~3
+ Gb for repository and ~1 Gb for build cache);
+- Git for Windows (installer can be downloaded from [Git homepage](https://git-scm.com/));
+- Visual Studio 2019 or 2022
+ - **Note**: If you are using Visual Studio 2022, you must install the Visual Studio 2019 compilers
+ to work around a vcpkg bug. In the Visual Studio Installer, select the 'Individual components'
+ tab and search for / select the component that looks like 'MSVC v142 - VS 2019 C++ x64/x86 Build
+ Tools'. See https://github.com/microsoft/vcpkg/issues/22287.
+- Latest version of vcpkg (see instructions on
+ [vcpkg homepage](https://github.com/Microsoft/vcpkg)).
+- If you plan on contributing your changes to Bright Nights, you'll also have to install a code
+ formatter, see [Code style](#code-style) section for more info.
**Note:** Windows XP is unsupported!
## Installation and configuration:
-1. Install `Visual Studio` (installer can be downloaded from [Visual Studio homepage](https://visualstudio.microsoft.com/)).
+1. Install `Visual Studio` (installer can be downloaded from
+ [Visual Studio homepage](https://visualstudio.microsoft.com/)).
- Select the "Desktop development with C++" and "Game development with C++" workloads.
-2. Install `Git for Windows` (installer can be downloaded from [Git homepage](https://git-scm.com/)).
+2. Install `Git for Windows` (installer can be downloaded from
+ [Git homepage](https://git-scm.com/)).
3. Install and configure latest `vcpkg`:
-***WARNING: It is important that, wherever you decide to clone this repo, the path does not include whitespace. That is, `C:/dev/vcpkg` is acceptable, but `C:/dev test/vcpkg` is not.***
+_**WARNING: It is important that, wherever you decide to clone this repo, the path does not include
+whitespace. That is, `C:/dev/vcpkg` is acceptable, but `C:/dev test/vcpkg` is not.**_
```cmd
git clone https://github.com/Microsoft/vcpkg.git
@@ -39,36 +52,57 @@ vcpkg integrate install
1. Clone Cataclysm-BN repository with following command line:
-**Note:** This will download the entire CBN repository; 3+ GB of data. If you're just testing you should probably add `--depth=1`.
+**Note:** This will download the entire CBN repository; 3+ GB of data. If you're just testing you
+should probably add `--depth=1`.
```cmd
git clone https://github.com/cataclysmbnteam/Cataclysm-BN.git
cd Cataclysm-BN
```
-2. Open the provided solution (`msvc-full-features\Cataclysm-vcpkg-static.sln`) in `Visual Studio`, select configuration (`Release` is advised if you just want to compile, `Debug` is if you're planning on editing code) and platform (`x64` or `x86`) and build it. All necessary dependencies will be built and cached for future use by vcpkg automatically.
+2. Open the provided solution (`msvc-full-features\Cataclysm-vcpkg-static.sln`) in `Visual Studio`,
+ select configuration (`Release` is advised if you just want to compile, `Debug` is if you're
+ planning on editing code) and platform (`x64` or `x86`) and build it. All necessary dependencies
+ will be built and cached for future use by vcpkg automatically.
-3. Open the `Build > Configuration Manager` menu and adjust `Active solution configuration` and `Active solution platform` to match your intended target.
+3. Open the `Build > Configuration Manager` menu and adjust `Active solution configuration` and
+ `Active solution platform` to match your intended target.
-This will configure Visual Studio to compile the release version, with support for Sound, Tiles, and Localization (note, however, that language files themselves are not automatically compiled; this will be done later).
+This will configure Visual Studio to compile the release version, with support for Sound, Tiles, and
+Localization (note, however, that language files themselves are not automatically compiled; this
+will be done later).
-4. Start the build process by selecting either `Build > Build Solution` or `Build > Build > Cataclysm-vcpkg-static`. The process may take a long period of time, so you'd better prepare a cup of coffee and some books in front of your computer :) The first build of each architecture will also download and install dependencies through vcpkg, which can take an especially long time.
+4. Start the build process by selecting either `Build > Build Solution` or
+ `Build > Build > Cataclysm-vcpkg-static`. The process may take a long period of time, so you'd
+ better prepare a cup of coffee and some books in front of your computer :) The first build of
+ each architecture will also download and install dependencies through vcpkg, which can take an
+ especially long time.
-5. If you want to launch the game directly from Visual Studio, make sure you have specified correct working directory as explained below. Otherwise, you'll only be able to launch the game from the file explorer.
+5. If you want to launch the game directly from Visual Studio, make sure you have specified correct
+ working directory as explained below. Otherwise, you'll only be able to launch the game from the
+ file explorer.
-6. If you need localization support, execute the bash script `lang/compile_mo.sh` inside Git Bash GUI just like on a UNIX-like system. This will compile the language files that were not automatically compiled in step 2 above.
+6. If you need localization support, execute the bash script `lang/compile_mo.sh` inside Git Bash
+ GUI just like on a UNIX-like system. This will compile the language files that were not
+ automatically compiled in step 2 above.
### Running from Visual Studio and debugging
-1. Ensure that the Cataclysm game binary project (`Cataclysm-vcpkg-static`) is the selected startup project (right click on it in Solution Explorer -> `Set as Startup Project`)
+1. Ensure that the Cataclysm game binary project (`Cataclysm-vcpkg-static`) is the selected startup
+ project (right click on it in Solution Explorer -> `Set as Startup Project`)
-2. Configure the working directory in the project properties to `$(ProjectDir)..` (right click on it in Solution Explorer -> `Properties` -> select `All Configurations` and `All Platforms` at the top -> `Debugging` -> `Working Directory`)
+2. Configure the working directory in the project properties to `$(ProjectDir)..` (right click on it
+ in Solution Explorer -> `Properties` -> select `All Configurations` and `All Platforms` at the
+ top -> `Debugging` -> `Working Directory`)
-3. Press the debug button (green right-facing triangle near the top, or use the appropriate shortcut, e.g. F5)
+3. Press the debug button (green right-facing triangle near the top, or use the appropriate
+ shortcut, e.g. F5)
-If you discover that after pressing the debug button in Visual Studio, Cataclysm just exits after launch with return code 1, that is because of the wrong working directory.
+If you discover that after pressing the debug button in Visual Studio, Cataclysm just exits after
+launch with return code 1, that is because of the wrong working directory.
### Debug vs Release builds
+
`Debug` builds run significantly slower than `Release` builds, but provide additional safety checks.
If you just want to build the executable and play the game, `Release` is advised.
@@ -76,26 +110,43 @@ If you just want to build the executable and play the game, `Release` is advised
If you plan on editing the code, `Debug` is advised.
If you have enough experience with C++ to know:
+
- under-the-hood differences between `Debug` and `Release`
- how `Release` optimizations may affect the debugger
- how to avoid undefined behavior in code
-Then you might want to use `Release` build all the time to speed up dev process, and disable optimizations on a file-by-file basis by adding
+Then you might want to use `Release` build all the time to speed up dev process, and disable
+optimizations on a file-by-file basis by adding
+
```c++
#pragma optimize("", off)
```
+
line at the top of the file.
### Running unit tests
-Ensure that the Cataclysm test binary project (`Cataclysm-test-vcpkg-static`) is the selected startup project, configure the working directory in the project properties to `$(ProjectDir)..`, and then press the debug button (or use the appropriate shortcut, e.g. F5). This will run all of the unit tests. Additional command line arguments may be configured in the project's command line arguments setting, or if you are using a compatible unit test runner (e.g. Resharper) you can run or debug individual tests from the unit test sessions.
+Ensure that the Cataclysm test binary project (`Cataclysm-test-vcpkg-static`) is the selected
+startup project, configure the working directory in the project properties to `$(ProjectDir)..`, and
+then press the debug button (or use the appropriate shortcut, e.g. F5). This will run all of the
+unit tests. Additional command line arguments may be configured in the project's command line
+arguments setting, or if you are using a compatible unit test runner (e.g. Resharper) you can run or
+debug individual tests from the unit test sessions.
### Code style
-We use `Artistic Style` source code formatter to keep the style of our C++ code consistent. While it's available as pre-built Windows executables, which you could install and run or configure to automatically format the code before commit, a much more convenient option for Visual Studio users is to install a specific extension, see ["Astyle extensions for Visual Studio" in doc/DEVELOPER_TOOLING.md](../DEVELOPER_TOOLING.md#astyle-extensions-for-visual-studio) for more info.
+We use `Artistic Style` source code formatter to keep the style of our C++ code consistent. While
+it's available as pre-built Windows executables, which you could install and run or configure to
+automatically format the code before commit, a much more convenient option for Visual Studio users
+is to install a specific extension, see
+["Astyle extensions for Visual Studio" in doc/DEVELOPER_TOOLING.md](../DEVELOPER_TOOLING.md#astyle-extensions-for-visual-studio)
+for more info.
-As of October 2022, the code style check is run automatically on each PR on GitHub, so if you forgot to style your changes you'll see the corresponsing check failing.
+As of October 2022, the code style check is run automatically on each PR on GitHub, so if you forgot
+to style your changes you'll see the corresponsing check failing.
### Make a distribution
-There is a batch script in `msvc-full-features` folder `distribute.bat`. It will create a sub folder `distribution` and copy all required files(eg. `data/`, `Cataclysm.exe` and dlls) into that folder. Then you can zip it and share the archive on the Internet.
+There is a batch script in `msvc-full-features` folder `distribute.bat`. It will create a sub folder
+`distribution` and copy all required files(eg. `data/`, `Cataclysm.exe` and dlls) into that folder.
+Then you can zip it and share the archive on the Internet.
diff --git a/doc/COMPILING/COMPILING.md b/doc/COMPILING/COMPILING.md
index 54596af3d589..9a73208bf9e3 100644
--- a/doc/COMPILING/COMPILING.md
+++ b/doc/COMPILING/COMPILING.md
@@ -46,26 +46,32 @@
- [Building with CYGWIN](#building-with-cygwin)
- [Building with Clang and MinGW64](#building-with-clang-and-mingw64)
- [BSDs](#bsds)
- - [Building on FreeBSD/amd64 10.1 with the system compiler](#building-on-freebsdamd64-101-with-the-system-compiler)
- - [Building ncurses version on FreeBSD/amd64 9.3 with GCC 4.8.4 from ports](#building-ncurses-version-on-freebsdamd64-93-with-gcc-484-from-ports)
- - [Building on OpenBSD/amd64 5.8 with GCC 4.9.2 from ports/packages](#building-on-openbsdamd64-58-with-gcc-492-from-portspackages)
- - [Building on NetBSD/amd64 7.0RC1 with the system compiler](#building-on-netbsdamd64-70rc1-with-the-system-compiler)
+ - [Building on FreeBSD/amd64 10.1 with the system compiler](#building-on-freebsdamd64-101-with-the-system-compiler)
+ - [Building ncurses version on FreeBSD/amd64 9.3 with GCC 4.8.4 from ports](#building-ncurses-version-on-freebsdamd64-93-with-gcc-484-from-ports)
+ - [Building on OpenBSD/amd64 5.8 with GCC 4.9.2 from ports/packages](#building-on-openbsdamd64-58-with-gcc-492-from-portspackages)
+ - [Building on NetBSD/amd64 7.0RC1 with the system compiler](#building-on-netbsdamd64-70rc1-with-the-system-compiler)
# General Linux Guide
-To build Cataclysm from source you will need at least a C++ compiler, some basic developer tools, and necessary build dependencies. The exact package names vary greatly from distro to distro, so this part of the guide is intended to give you higher-level understanding of the process.
+To build Cataclysm from source you will need at least a C++ compiler, some basic developer tools,
+and necessary build dependencies. The exact package names vary greatly from distro to distro, so
+this part of the guide is intended to give you higher-level understanding of the process.
## Compiler
You have three major choices here: GCC, Clang and MXE.
- * GCC is almost always the default on Linux systems so it's likely you already have it
- * Clang is usually faster than GCC, so it's worth installing if you plan to keep up with the latest experimentals
- * MXE is a cross-compiler, so of any importance only if you plan to compile for Windows on your Linux machine
+- GCC is almost always the default on Linux systems so it's likely you already have it
+- Clang is usually faster than GCC, so it's worth installing if you plan to keep up with the latest
+ experimentals
+- MXE is a cross-compiler, so of any importance only if you plan to compile for Windows on your
+ Linux machine
-(Note that your distro may have separate packages e.g. `gcc` only includes the C compiler and for C++ you'll need to install `g++`.)
+(Note that your distro may have separate packages e.g. `gcc` only includes the C compiler and for
+C++ you'll need to install `g++`.)
-Cataclysm is targeting C++14 standard and that means you'll need a compiler that supports it. You can easily check if your version of `g++` supports C++14 by running:
+Cataclysm is targeting C++14 standard and that means you'll need a compiler that supports it. You
+can easily check if your version of `g++` supports C++14 by running:
$ g++ --std=c++14
g++: fatal error: no input files
@@ -81,82 +87,97 @@ The general rule is the newer the compiler the better.
## Tools
-Most distros seem to package essential build tools as either a single package (Debian and derivatives have `build-essential`) or a package group (Arch has `base-devel`). You should use the above if available. Otherwise you'll at least need `make` and figure out the missing dependencies as you go (if any).
+Most distros seem to package essential build tools as either a single package (Debian and
+derivatives have `build-essential`) or a package group (Arch has `base-devel`). You should use the
+above if available. Otherwise you'll at least need `make` and figure out the missing dependencies as
+you go (if any).
Besides the essentials you will need `git`.
-If you plan on keeping up with experimentals you should also install `ccache`, which will considerably speed-up partial builds.
+If you plan on keeping up with experimentals you should also install `ccache`, which will
+considerably speed-up partial builds.
## Dependencies
-There are some general dependencies, optional dependencies and then specific dependencies for either curses or tiles builds. The exact package names again depend on the distro you're using, and whether your distro packages libraries and their development files separately (e.g. Debian and derivatives).
+There are some general dependencies, optional dependencies and then specific dependencies for either
+curses or tiles builds. The exact package names again depend on the distro you're using, and whether
+your distro packages libraries and their development files separately (e.g. Debian and derivatives).
Rough list based on building on Arch:
- * General: `gcc-libs`, `glibc`, `zlib`, `bzip2`
- * Optional: `intltool`
- * Curses: `ncurses`
- * Tiles: `sdl2`, `sdl2_image`, `sdl2_ttf`, `sdl2_mixer`, `freetype2`
+- General: `gcc-libs`, `glibc`, `zlib`, `bzip2`
+- Optional: `intltool`
+- Curses: `ncurses`
+- Tiles: `sdl2`, `sdl2_image`, `sdl2_ttf`, `sdl2_mixer`, `freetype2`
-E.g. for curses build on Debian and derivatives you'll also need `libncurses5-dev` or `libncursesw5-dev`.
+E.g. for curses build on Debian and derivatives you'll also need `libncurses5-dev` or
+`libncursesw5-dev`.
Note on optional dependencies:
- * `intltool` - for building localization files; if you plan to only use English you can skip it
+- `intltool` - for building localization files; if you plan to only use English you can skip it
-You should be able to figure out what you are missing by reading the compilation errors and/or the output of `ldd` for compiled binaries.
+You should be able to figure out what you are missing by reading the compilation errors and/or the
+output of `ldd` for compiled binaries.
## Make flags
Given you're building from source you have a number of choices to make:
- * `NATIVE=` - you should only care about this if you're cross-compiling
- * `RELEASE=1` - without this you'll get a debug build (see note below)
- * `LTO=1` - enables link-time optimization with GCC/Clang
- * `TILES=1` - with this you'll get the tiles version, without it the curses version
- * `SOUND=1` - if you want sound; this requires `TILES=1`
- * `LANGUAGES=` - specifies localizations. See details [here](#compiling-localization-files)
- * `CLANG=1` - use Clang instead of GCC
- * `CCACHE=1` - use ccache
- * `USE_LIBCXX=1` - use libc++ instead of libstdc++ with Clang (default on OS X)
+- `NATIVE=` - you should only care about this if you're cross-compiling
+- `RELEASE=1` - without this you'll get a debug build (see note below)
+- `LTO=1` - enables link-time optimization with GCC/Clang
+- `TILES=1` - with this you'll get the tiles version, without it the curses version
+- `SOUND=1` - if you want sound; this requires `TILES=1`
+- `LANGUAGES=` - specifies localizations. See details [here](#compiling-localization-files)
+- `CLANG=1` - use Clang instead of GCC
+- `CCACHE=1` - use ccache
+- `USE_LIBCXX=1` - use libc++ instead of libstdc++ with Clang (default on OS X)
There is a couple of other possible options - feel free to read the `Makefile`.
-If you have a multi-core computer you'd probably want to add `-jX` to the options, where `X` should roughly be twice the number of cores you have available.
+If you have a multi-core computer you'd probably want to add `-jX` to the options, where `X` should
+roughly be twice the number of cores you have available.
Example: `make -j4 CLANG=1 CCACHE=1 NATIVE=linux64 RELEASE=1 TILES=1`
-The above will build a tiles release explicitly for 64 bit Linux, using Clang and ccache and 4 parallel processes.
+The above will build a tiles release explicitly for 64 bit Linux, using Clang and ccache and 4
+parallel processes.
Example: `make -j2`
-The above will build a debug-enabled curses version for the architecture you are using, using GCC and 2 parallel processes.
+The above will build a debug-enabled curses version for the architecture you are using, using GCC
+and 2 parallel processes.
-**Note on debug**:
-You should probably always build with `RELEASE=1` unless you experience segfaults and are willing to provide stack traces.
+**Note on debug**: You should probably always build with `RELEASE=1` unless you experience segfaults
+and are willing to provide stack traces.
## Compiling localization files
By default, only English language is available, and it does not require localization file.
-If you want to compile files for specific languages, you should add `LANGUAGES=" [lang_id_2] [...]"` option to make command:
+If you want to compile files for specific languages, you should add
+`LANGUAGES=" [lang_id_2] [...]"` option to make command:
make LANGUAGES="zh_CN zh_TW"
-You can get the language ID from the filenames of `*.po` in `lang/po` directory or use `LANGUAGES="all"` to compile all available localizations.
+You can get the language ID from the filenames of `*.po` in `lang/po` directory or use
+`LANGUAGES="all"` to compile all available localizations.
# Debian
-Instructions for compiling on a Debian-based system. The package names here are valid for Ubuntu 12.10 and may or may not work on your system.
+Instructions for compiling on a Debian-based system. The package names here are valid for Ubuntu
+12.10 and may or may not work on your system.
-Building instructions, below, always assume you are running them from the Cataclysm:BN source directory.
+Building instructions, below, always assume you are running them from the Cataclysm:BN source
+directory.
## Linux (native) ncurses builds
Dependencies:
- * ncurses or ncursesw (for multi-byte locales)
- * build essentials
+- ncurses or ncursesw (for multi-byte locales)
+- build essentials
Install:
@@ -172,22 +193,25 @@ Run:
Dependencies:
- * SDL
- * SDL_ttf
- * freetype
- * build essentials
- * libsdl2-mixer-dev - Used if compiling with sound support.
+- SDL
+- SDL_ttf
+- freetype
+- build essentials
+- libsdl2-mixer-dev - Used if compiling with sound support.
Install:
sudo apt-get install libsdl2-dev libsdl2-ttf-dev libsdl2-image-dev libsdl2-mixer-dev libfreetype6-dev build-essential
check correct version of SDL2 is installed by running:
+
```sh
> sdl2-config --version
2.0.22
```
-using old version of SDL could result in [IME not working.](https://github.com/cataclysmbnteam/Cataclysm-BN/issues/1497)
+
+using old version of SDL could result in
+[IME not working.](https://github.com/cataclysmbnteam/Cataclysm-BN/issues/1497)
### Building
@@ -199,16 +223,17 @@ A more comprehensive alternative is:
make -j2 TILES=1 SOUND=1 RELEASE=1 USE_HOME_DIR=1
-The -j2 flag means it will compile with two parallel processes. It can be omitted or changed to -j4 in a more modern processor. If there is no desire to have sound, those flags can also be omitted. The USE_HOME_DIR flag places the user files, like configurations and saves into the home folder, making It easier for backups, and can also be omitted.
-
-
+The -j2 flag means it will compile with two parallel processes. It can be omitted or changed to -j4
+in a more modern processor. If there is no desire to have sound, those flags can also be omitted.
+The USE_HOME_DIR flag places the user files, like configurations and saves into the home folder,
+making It easier for backups, and can also be omitted.
## Cross-compiling to linux 32-bit from linux 64-bit
Dependencies:
- * 32-bit toolchain
- * 32-bit ncursesw (compatible with both multi-byte and 8-bit locales)
+- 32-bit toolchain
+- 32-bit ncursesw (compatible with both multi-byte and 8-bit locales)
Install:
@@ -221,9 +246,11 @@ Run:
make NATIVE=linux32
## Cross-compile to Windows from Linux
+
To cross-compile to Windows from Linux, you will need [MXE](http://mxe.cc).
-These instructions were written for Ubuntu 20.04, but should be applicable to any Debian-based environment. Please adjust all package manager instructions to match your environment.
+These instructions were written for Ubuntu 20.04, but should be applicable to any Debian-based
+environment. Please adjust all package manager instructions to match your environment.
MXE can be either installed from MXE apt repository (much faster) or compiled from source.
@@ -234,7 +261,8 @@ MXE can be either installed from MXE apt repository (much faster) or compiled fr
sudo apt-get update
sudo apt-get install astyle bzip2 git make mxe-{i686,x86-64}-w64-mingw32.static-{sdl2,sdl2-ttf,sdl2-image,sdl2-mixer}
-If you are not planning on building for both 32-bit and 64-bit, you might want to adjust the last apt-get invocation to install only `i686` or `x86-64` packages.
+If you are not planning on building for both 32-bit and 64-bit, you might want to adjust the last
+apt-get invocation to install only `i686` or `x86-64` packages.
Edit your `~/.profile` as follows:
@@ -244,6 +272,7 @@ Edit your `~/.profile` as follows:
This is to ensure that the variables for the `make` command will not get reset after a power cycle.
### Installing MXE from source
+
Install [MXE requirements](http://mxe.cc/#requirements) and build dependencies:
sudo apt install astyle autoconf automake autopoint bash bison bzip2 cmake flex gettext git g++ gperf intltool libffi-dev libgdk-pixbuf2.0-dev libtool libltdl-dev libssl-dev libxml-parser-perl lzip make mingw-w64 openssl p7zip-full patch perl pkg-config python ruby scons sed unzip wget xz-utils g++-multilib libc6-dev-i386 libtool-bin
@@ -256,9 +285,11 @@ Clone MXE repo and build packages required for CBN:
cd mxe
make -j$((`nproc`+0)) MXE_TARGETS='x86_64-w64-mingw32.static i686-w64-mingw32.static' sdl2 sdl2_ttf sdl2_image sdl2_mixer
-Building all these packages from MXE might take a while, even on a fast computer. Be patient; the `-j` flag will take advantage of all your processor cores.
+Building all these packages from MXE might take a while, even on a fast computer. Be patient; the
+`-j` flag will take advantage of all your processor cores.
-If you are not planning on building for both 32-bit and 64-bit, you might want to adjust your MXE_TARGETS.
+If you are not planning on building for both 32-bit and 64-bit, you might want to adjust your
+MXE_TARGETS.
Edit your `~/.profile` as follows:
@@ -266,6 +297,7 @@ Edit your `~/.profile` as follows:
export PLATFORM_64="~/src/mxe/usr/bin/x86_64-w64-mingw32.static-"
This is to ensure that the variables for the `make` command will not get reset after a power cycle.
+
### Building (SDL)
Run one of the following commands based on your targeted environment:
@@ -275,29 +307,34 @@ Run one of the following commands based on your targeted environment:
## Cross-compile to Mac OS X from Linux
-The procedure is very much similar to cross-compilation to Windows from Linux.
-Tested on ubuntu 14.04 LTS but should work on other distros as well.
+The procedure is very much similar to cross-compilation to Windows from Linux. Tested on ubuntu
+14.04 LTS but should work on other distros as well.
+
+Please note that due to historical difficulties with cross-compilation errors, run-time
+optimizations are disabled for cross-compilation to Mac OS X targets. (`-O0` is specified as a
+compilation flag.) See
+[Pull Request #26564](https://github.com/CleverRaven/Cataclysm-DDA/pull/26564) for details.
-Please note that due to historical difficulties with cross-compilation errors, run-time optimizations are disabled for cross-compilation to Mac OS X targets. (`-O0` is specified as a compilation flag.) See [Pull Request #26564](https://github.com/CleverRaven/Cataclysm-DDA/pull/26564) for details.
### Dependencies
- * OSX cross-compiling toolchain [osxcross](https://github.com/tpoechtrager/osxcross)
+- OSX cross-compiling toolchain [osxcross](https://github.com/tpoechtrager/osxcross)
- * `genisoimage` and [libdmg-hfsplus](https://github.com/planetbeing/libdmg-hfsplus.git) to create dmg distributions
+- `genisoimage` and [libdmg-hfsplus](https://github.com/planetbeing/libdmg-hfsplus.git) to create
+ dmg distributions
Make sure that all dependency tools are in search `PATH` before compiling.
### Setup
To set up the compiling environment execute the following commands
-`git clone https://github.com/tpoechtrager/osxcross.git` to clone the toolchain
-`cd osxcross`
-`cp ~/MacOSX10.11.sdk.tar.bz2 ./tarballs/` copy prepared MacOSX SDK tarball on place. [Read more about it](https://github.com/tpoechtrager/osxcross/blob/master/README.md#packaging-the-sdk)
-`OSX_VERSION_MIN=10.7 ./build.sh to build everything`
-Note the targeted minimum supported version of OSX.
+`git clone https://github.com/tpoechtrager/osxcross.git` to clone the toolchain `cd osxcross`
+`cp ~/MacOSX10.11.sdk.tar.bz2 ./tarballs/` copy prepared MacOSX SDK tarball on place.
+[Read more about it](https://github.com/tpoechtrager/osxcross/blob/master/README.md#packaging-the-sdk)
+`OSX_VERSION_MIN=10.7 ./build.sh to build everything` Note the targeted minimum supported version of
+OSX.
-Have a prepackaged set of libs and frameworks in place, since compiling with `osxcross` built-in MacPorts is rather difficult and not supported at the moment.
-Your directory tree should look like:
+Have a prepackaged set of libs and frameworks in place, since compiling with `osxcross` built-in
+MacPorts is rather difficult and not supported at the moment. Your directory tree should look like:
~/
├── Frameworks
@@ -310,10 +347,9 @@ Your directory tree should look like:
├── include
└── lib
-Populated with respective frameworks, dylibs and headers.
-Tested with lib version libncurses.5.4.dylib for ncurses.
-These libs were obtained from `homebrew` binary distribution at OS X 10.11
-Frameworks were obtained from SDL official website as described in the next [section](#sdl)
+Populated with respective frameworks, dylibs and headers. Tested with lib version
+libncurses.5.4.dylib for ncurses. These libs were obtained from `homebrew` binary distribution at OS
+X 10.11 Frameworks were obtained from SDL official website as described in the next [section](#sdl)
### Building (SDL)
@@ -336,17 +372,24 @@ Make sure that `x86_64-apple-darwin15-clang++` is in `PATH` environment variable
## Cross-compile to Android from Linux
-The Android build uses [Gradle](https://gradle.org/) to compile the java and native C++ code, and is based heavily off SDL's [Android project template](https://hg.libsdl.org/SDL/file/f1084c419f33/android-project). See the official SDL documentation [README-android.md](https://hg.libsdl.org/SDL/file/f1084c419f33/docs/README-android.md) for further information.
+The Android build uses [Gradle](https://gradle.org/) to compile the java and native C++ code, and is
+based heavily off SDL's
+[Android project template](https://hg.libsdl.org/SDL/file/f1084c419f33/android-project). See the
+official SDL documentation
+[README-android.md](https://hg.libsdl.org/SDL/file/f1084c419f33/docs/README-android.md) for further
+information.
-The Gradle project lives in the repository under `android/`. You can build it via the command line or open it in [Android Studio](https://developer.android.com/studio/). For simplicity, it only builds the SDL version with all features enabled, including tiles, sound and localization.
+The Gradle project lives in the repository under `android/`. You can build it via the command line
+or open it in [Android Studio](https://developer.android.com/studio/). For simplicity, it only
+builds the SDL version with all features enabled, including tiles, sound and localization.
### Dependencies
- * Java JDK 8
- * SDL2 (tested with 2.0.8, though a custom fork is recommended with project-specific bugfixes)
- * SDL2_ttf (tested with 2.0.14)
- * SDL2_mixer (tested with 2.0.2)
- * SDL2_image (tested with 2.0.3)
+- Java JDK 8
+- SDL2 (tested with 2.0.8, though a custom fork is recommended with project-specific bugfixes)
+- SDL2_ttf (tested with 2.0.14)
+- SDL2_mixer (tested with 2.0.2)
+- SDL2_image (tested with 2.0.3)
The Gradle build process automatically installs dependencies from [deps.zip](android/app/deps.zip).
@@ -383,14 +426,18 @@ You can also use this additional variables if you want to use `ccache` to speed
### Android device setup
-Enable [Developer options on your Android device](https://developer.android.com/studio/debug/dev-options). Connect your device to your PC via USB cable and run:
+Enable
+[Developer options on your Android device](https://developer.android.com/studio/debug/dev-options).
+Connect your device to your PC via USB cable and run:
adb devices
adb connect
### Building
-To build an APK, use the Gradle wrapper command line tool (gradlew). The Android Studio documentation provides a good summary of how to [build your app from the command line](https://developer.android.com/studio/build/building-cmdline).
+To build an APK, use the Gradle wrapper command line tool (gradlew). The Android Studio
+documentation provides a good summary of how to
+[build your app from the command line](https://developer.android.com/studio/build/building-cmdline).
To build a debug APK, from the `android/` subfolder of the repository run:
@@ -402,15 +449,21 @@ To build a debug APK and immediately deploy to your connected device over adb ru
./gradlew installDebug
-To build a signed release APK (ie. one that can be installed on a device), [build an unsigned release APK and sign it manually](https://developer.android.com/studio/publish/app-signing#signing-manually).
+To build a signed release APK (ie. one that can be installed on a device),
+[build an unsigned release APK and sign it manually](https://developer.android.com/studio/publish/app-signing#signing-manually).
### Additional notes
-The app stores data files on the device in `/sdcard/Android/data/com.cleverraven/cataclysmdda/files`. The data is backwards compatible with the desktop version.
+The app stores data files on the device in
+`/sdcard/Android/data/com.cleverraven/cataclysmdda/files`. The data is backwards compatible with the
+desktop version.
# Mac OS X
-To build Cataclysm on Mac you'll need [Command Line Tools for Xcode](https://developer.apple.com/downloads/) and the [Homebrew](http://brew.sh) package manager. With Homebrew, you can easily install or build Cataclysm using the [cataclysm](https://formulae.brew.sh/formula/cataclysm) forumla.
+To build Cataclysm on Mac you'll need
+[Command Line Tools for Xcode](https://developer.apple.com/downloads/) and the
+[Homebrew](http://brew.sh) package manager. With Homebrew, you can easily install or build Cataclysm
+using the [cataclysm](https://formulae.brew.sh/formula/cataclysm) forumla.
## Simple build using Homebrew
@@ -422,11 +475,14 @@ For a stable tiles build:
brew install cataclysm
-For an experimental tiles build built from the current HEAD of [upload](https://github.com/cataclysmbnteam/Cataclysm-BN/tree/upload/):
+For an experimental tiles build built from the current HEAD of
+[upload](https://github.com/cataclysmbnteam/Cataclysm-BN/tree/upload/):
brew install cataclysm --HEAD
-Whichever build you choose, Homebrew will install the appropriate dependencies as needed. The installation will be in `/usr/local/Cellar/cataclysm` with a symlink named `cataclysm` in `/usr/local/bin`.
+Whichever build you choose, Homebrew will install the appropriate dependencies as needed. The
+installation will be in `/usr/local/Cellar/cataclysm` with a symlink named `cataclysm` in
+`/usr/local/bin`.
To launch Cataclysm, just open Terminal and run `cataclysm`.
@@ -434,31 +490,35 @@ To update a stable tiles build simply run:
brew upgrade cataclysm
-To update an experimental build, you must uninstall Cataclysm then reinstall with `--HEAD`, triggering a new build from source.
+To update an experimental build, you must uninstall Cataclysm then reinstall with `--HEAD`,
+triggering a new build from source.
brew uninstall cataclysm
brew install cataclysm --HEAD
## Advanced info for Developers
-For most people, the simple Homebrew installation is enough. For developers, here are some more technical details on building Cataclysm on Mac OS X.
+For most people, the simple Homebrew installation is enough. For developers, here are some more
+technical details on building Cataclysm on Mac OS X.
### SDL
-SDL2, SDL2_image, and SDL2_ttf are needed for the tiles build. Optionally, you can add SDL2_mixer for sound support. Cataclysm can be built using either the SDL framework, or shared libraries built from source.
+SDL2, SDL2_image, and SDL2_ttf are needed for the tiles build. Optionally, you can add SDL2_mixer
+for sound support. Cataclysm can be built using either the SDL framework, or shared libraries built
+from source.
The SDL framework files can be downloaded here:
-* [**SDL2**](http://www.libsdl.org/download-2.0.php)
-* [**SDL2_image**](http://www.libsdl.org/projects/SDL_image/)
-* [**SDL2_ttf**](http://www.libsdl.org/projects/SDL_ttf/)
+- [**SDL2**](http://www.libsdl.org/download-2.0.php)
+- [**SDL2_image**](http://www.libsdl.org/projects/SDL_image/)
+- [**SDL2_ttf**](http://www.libsdl.org/projects/SDL_ttf/)
-Copy `SDL2.framework`, `SDL2_image.framework`, and `SDL2_ttf.framework`
-to `/Library/Frameworks` or `/Users/name/Library/Frameworks`.
+Copy `SDL2.framework`, `SDL2_image.framework`, and `SDL2_ttf.framework` to `/Library/Frameworks` or
+`/Users/name/Library/Frameworks`.
If you want sound support, you will need an additional SDL framework:
-* [**SDL2_mixer**](https://www.libsdl.org/projects/SDL_mixer/)
+- [**SDL2_mixer**](https://www.libsdl.org/projects/SDL_mixer/)
Copy `SDL2_mixer.framework` to `/Library/Frameworks` or `/Users/name/Library/Frameworks`.
@@ -482,7 +542,8 @@ with sound:
### ncurses
-ncurses with wide character support enabled is needed since Cataclysm makes extensive use of Unicode characters
+ncurses with wide character support enabled is needed since Cataclysm makes extensive use of Unicode
+characters
For Homebrew:
@@ -495,11 +556,17 @@ For MacPorts:
### gcc
-The version of gcc/g++ installed with the [Command Line Tools for Xcode](https://developer.apple.com/downloads/) is actually just a front end for the same Apple LLVM as clang. This doesn't necessarily cause issues, but this version of gcc/g++ will have clang error messages and essentially produce the same results as if using clang. To compile with the "real" gcc/g++, install it with homebrew:
+The version of gcc/g++ installed with the
+[Command Line Tools for Xcode](https://developer.apple.com/downloads/) is actually just a front end
+for the same Apple LLVM as clang. This doesn't necessarily cause issues, but this version of gcc/g++
+will have clang error messages and essentially produce the same results as if using clang. To
+compile with the "real" gcc/g++, install it with homebrew:
brew install gcc
-However, homebrew installs gcc as gcc-{version} (where {version} is the version) to avoid conflicts. The simplest way to use the homebrew version at `/usr/local/bin/gcc-{version}` instead of the Apple LLVM version at `/usr/bin/gcc` is to symlink the necessary.
+However, homebrew installs gcc as gcc-{version} (where {version} is the version) to avoid conflicts.
+The simplest way to use the homebrew version at `/usr/local/bin/gcc-{version}` instead of the Apple
+LLVM version at `/usr/bin/gcc` is to symlink the necessary.
cd /usr/local/bin
ln -s gcc-12 gcc
@@ -510,7 +577,8 @@ Or, to do this for everything in `/usr/local/bin/` ending with `-12`,
find /usr/local/bin -name "*-12" -exec sh -c 'ln -s "$1" $(echo "$1" | sed "s/..$//")' _ {} \;
-Also, you need to make sure that `/usr/local/bin` appears before `/usr/bin` in your `$PATH`, or else this will not work.
+Also, you need to make sure that `/usr/local/bin` appears before `/usr/bin` in your `$PATH`, or else
+this will not work.
Check that `gcc -v` shows the homebrew version you installed.
@@ -520,19 +588,28 @@ The Cataclysm source is compiled using `make`.
### Make options
-* `NATIVE=osx` build for OS X. Required for all Mac builds.
-* `OSX_MIN=version` sets `-mmacosx-version-min=`; default is 11.
-* `TILES=1` build the SDL version with graphical tiles (and graphical ASCII); omit to build with `ncurses`.
-* `SOUND=1` - if you want sound; this requires `TILES=1` and the additional dependencies mentioned above.
-* `FRAMEWORK=1` (tiles only) link to SDL libraries under the OS X Frameworks folders; omit to use SDL shared libraries from Homebrew or Macports.
-* `LANGUAGES="[lang_id_2][...]"` compile localization files for specified languages. e.g. `LANGUAGES="zh_CN zh_TW"`. You can also use `LANGUAGES=all` to compile all localization files.
-* `RELEASE=1` build an optimized release version; omit for debug build.
-* `CLANG=1` build with [Clang](http://clang.llvm.org/), the compiler that's included with the latest Command Line Tools for Xcode; omit to build using gcc/g++.
-* `MACPORTS=1` build against dependencies installed via Macports, currently only `ncurses`.
-* `USE_HOME_DIR=1` places user files (config, saves, graveyard, etc) in the user's home directory. For curses builds, this is `/Users//.cataclysm-bn`, for SDL builds it is `/Users//Library/Application Support/Cataclysm`.
-* `DEBUG_SYMBOLS=1` retains debug symbols when building an optimized release binary, making it easy for developers to spot the crash site.
-
-In addition to the options above, there is an `app` make target which will package the tiles build into `Cataclysm.app`, a complete tiles build in a Mac application that can run without Terminal.
+- `NATIVE=osx` build for OS X. Required for all Mac builds.
+- `OSX_MIN=version` sets `-mmacosx-version-min=`; default is 11.
+- `TILES=1` build the SDL version with graphical tiles (and graphical ASCII); omit to build with
+ `ncurses`.
+- `SOUND=1` - if you want sound; this requires `TILES=1` and the additional dependencies mentioned
+ above.
+- `FRAMEWORK=1` (tiles only) link to SDL libraries under the OS X Frameworks folders; omit to use
+ SDL shared libraries from Homebrew or Macports.
+- `LANGUAGES="[lang_id_2][...]"` compile localization files for specified languages. e.g.
+ `LANGUAGES="zh_CN zh_TW"`. You can also use `LANGUAGES=all` to compile all localization files.
+- `RELEASE=1` build an optimized release version; omit for debug build.
+- `CLANG=1` build with [Clang](http://clang.llvm.org/), the compiler that's included with the latest
+ Command Line Tools for Xcode; omit to build using gcc/g++.
+- `MACPORTS=1` build against dependencies installed via Macports, currently only `ncurses`.
+- `USE_HOME_DIR=1` places user files (config, saves, graveyard, etc) in the user's home directory.
+ For curses builds, this is `/Users//.cataclysm-bn`, for SDL builds it is
+ `/Users//Library/Application Support/Cataclysm`.
+- `DEBUG_SYMBOLS=1` retains debug symbols when building an optimized release binary, making it easy
+ for developers to spot the crash site.
+
+In addition to the options above, there is an `app` make target which will package the tiles build
+into `Cataclysm.app`, a complete tiles build in a Mac application that can run without Terminal.
For more info, see the comments in the `Makefile`.
@@ -542,7 +619,8 @@ Build a release SDL version using Clang:
make NATIVE=osx RELEASE=1 TILES=1 CLANG=1
-Build a release SDL version using Clang, link to libraries in the OS X Frameworks folders, build all language files, and package it into `Cataclysm.app`:
+Build a release SDL version using Clang, link to libraries in the OS X Frameworks folders, build all
+language files, and package it into `Cataclysm.app`:
make app NATIVE=osx RELEASE=1 TILES=1 FRAMEWORK=1 LANGUAGES=all CLANG=1
@@ -564,20 +642,26 @@ For `app` builds, launch Cataclysm.app from Finder.
### Test suite
-The build will also generate a test executable at tests/cata_test.
-Invoke it as you would any other executable and it will run the full suite of tests.
-Pass the ``--help`` flag to list options.
+The build will also generate a test executable at tests/cata_test. Invoke it as you would any other
+executable and it will run the full suite of tests. Pass the `--help` flag to list options.
### dmg distribution
-You can build a nice dmg distribution file with the `dmgdist` target. You will need a tool called [dmgbuild](https://pypi.python.org/pypi/dmgbuild). To install this tool, you will need Python first. If you are on Mac OS X >= 10.8, Python 2.7 is pre-installed with the OS. If you are on an older version of OS X, you can download Python [on their official website](https://www.python.org/downloads/) or install it with homebrew `brew install python`. Once you have Python, you should be able to install `dmgbuild` by running:
+You can build a nice dmg distribution file with the `dmgdist` target. You will need a tool called
+[dmgbuild](https://pypi.python.org/pypi/dmgbuild). To install this tool, you will need Python first.
+If you are on Mac OS X >= 10.8, Python 2.7 is pre-installed with the OS. If you are on an older
+version of OS X, you can download Python
+[on their official website](https://www.python.org/downloads/) or install it with homebrew
+`brew install python`. Once you have Python, you should be able to install `dmgbuild` by running:
# This install pip. It might not be required if it is already installed.
curl --silent --show-error --retry 5 https://bootstrap.pypa.io/get-pip.py | sudo python
# dmgbuild install
sudo pip install dmgbuild pyobjc-framework-Quartz
-Once `dmgbuild` is installed, you will be able to use the `dmgdist` target like this. The use of `USE_HOME_DIR=1` is important here because it will allow for an easy upgrade of the game while keeping the user config and his saves in his home directory.
+Once `dmgbuild` is installed, you will be able to use the `dmgdist` target like this. The use of
+`USE_HOME_DIR=1` is important here because it will allow for an easy upgrade of the game while
+keeping the user config and his saves in his home directory.
make dmgdist NATIVE=osx RELEASE=1 TILES=1 FRAMEWORK=1 CLANG=1 USE_HOME_DIR=1
@@ -587,38 +671,54 @@ You should see a `Cataclysm.dmg` file.
### ISSUE: Colors don't show up correctly
-Open Terminal's preferences, turn on "Use bright colors for bold text" in "Preferences -> Settings -> Text"
-
+Open Terminal's preferences, turn on "Use bright colors for bold text" in "Preferences -> Settings
+-> Text"
# Windows
-See [COMPILING-VS-VCPKG.md](COMPILING-VS-VCPKG.md) for instructions on how to set up and use a build environment using Visual Studio on windows.
+See [COMPILING-VS-VCPKG.md](COMPILING-VS-VCPKG.md) for instructions on how to set up and use a build
+environment using Visual Studio on windows.
-This is probably the easiest solution for someone used to working with Visual Studio and similar IDEs. -->
+This is probably the easiest solution for someone used to working with Visual Studio and similar
+IDEs. -->
## Building with MSYS2
-See [COMPILING-MSYS.md](COMPILING-MSYS.md) for instructions on how to set up and use a build environment using MSYS2 on windows.
+See [COMPILING-MSYS.md](COMPILING-MSYS.md) for instructions on how to set up and use a build
+environment using MSYS2 on windows.
-MSYS2 strikes a balance between a native Windows application and a UNIX-like environment. There's some command-line tools that our project uses (notably our JSON linter) that are harder to use without a command-line environment such as what MSYS2 or CYGWIN provide.
+MSYS2 strikes a balance between a native Windows application and a UNIX-like environment. There's
+some command-line tools that our project uses (notably our JSON linter) that are harder to use
+without a command-line environment such as what MSYS2 or CYGWIN provide.
## Building with CYGWIN
-See [COMPILING-CYGWIN.md](COMPILING-CYGWIN.md) for instructions on how to set up and use a build environment using CYGWIN on windows.
+See [COMPILING-CYGWIN.md](COMPILING-CYGWIN.md) for instructions on how to set up and use a build
+environment using CYGWIN on windows.
-CYGWIN attempts to more fully emulate a POSIX environment, to be "more unix" than MSYS2. It is a little less modern in some respects, and lacks the convenience of the MSYS2 package manager.
+CYGWIN attempts to more fully emulate a POSIX environment, to be "more unix" than MSYS2. It is a
+little less modern in some respects, and lacks the convenience of the MSYS2 package manager.
## Building with Clang and MinGW64
-Clang by default uses MSVC on Windows, but also supports the MinGW64 library. Simply replace `CLANG=1` with `"CLANG=clang++ -target x86_64-pc-windows-gnu -pthread"` in your batch script, and make sure MinGW64 is in your path. You may also need to apply [a patch](https://sourceforge.net/p/mingw-w64/mailman/message/36386405/) to `float.h` of MinGW64 for the unit test to compile.
+Clang by default uses MSVC on Windows, but also supports the MinGW64 library. Simply replace
+`CLANG=1` with `"CLANG=clang++ -target x86_64-pc-windows-gnu -pthread"` in your batch script, and
+make sure MinGW64 is in your path. You may also need to apply
+[a patch](https://sourceforge.net/p/mingw-w64/mailman/message/36386405/) to `float.h` of MinGW64 for
+the unit test to compile.
# BSDs
-There are reports of CBN building fine on recent OpenBSD and FreeBSD machines (with appropriately recent compilers), and there is some work being done on making the `Makefile` "just work", however we're far from that and BSDs support is mostly based on user contributions. Your mileage may vary. So far essentially all testing has been on amd64, but there is no (known) reason that other architectures shouldn't work, in principle.
+There are reports of CBN building fine on recent OpenBSD and FreeBSD machines (with appropriately
+recent compilers), and there is some work being done on making the `Makefile` "just work", however
+we're far from that and BSDs support is mostly based on user contributions. Your mileage may vary.
+So far essentially all testing has been on amd64, but there is no (known) reason that other
+architectures shouldn't work, in principle.
### Building on FreeBSD/amd64 10.1 with the system compiler
-FreeBSD uses clang as the default compiler as of 10.0, and combines it with libc++ to provide C++14 support out of the box. You will however need gmake (examples for binary packages):
+FreeBSD uses clang as the default compiler as of 10.0, and combines it with libc++ to provide C++14
+support out of the box. You will however need gmake (examples for binary packages):
`pkg install gmake`
@@ -626,7 +726,8 @@ Tiles builds will also require SDL2:
`pkg install sdl2 sdl2_image sdl2_mixer sdl2_ttf`
-Then you should be able to build with something like this (you can of course set CXXFLAGS and LDFLAGS in your .profile or something):
+Then you should be able to build with something like this (you can of course set CXXFLAGS and
+LDFLAGS in your .profile or something):
```
export CXXFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib"
@@ -634,7 +735,8 @@ gmake # ncurses builds
gmake TILES=1 # tiles builds
```
-The author has not tested tiles builds, as the build VM lacks X; they do at least compile/link successfully.
+The author has not tested tiles builds, as the build VM lacks X; they do at least compile/link
+successfully.
### Building ncurses version on FreeBSD/amd64 9.3 with GCC 4.8.4 from ports
@@ -646,21 +748,24 @@ CXX = g++48
CXXFLAGS += -I/usr/local/lib/gcc48/include
LDFLAGS += -rpath=/usr/local/lib/gcc48
```
+
Note: or you can `setenv` the above (merging `OTHERS` into `CXXFLAGS`), but you knew that.
And then build with `gmake RELEASE=1`.
### Building on OpenBSD/amd64 5.8 with GCC 4.9.2 from ports/packages
-First, install g++, gmake, and libexecinfo from packages (g++ 4.8 or 4.9 should work; 4.9 has been tested):
+First, install g++, gmake, and libexecinfo from packages (g++ 4.8 or 4.9 should work; 4.9 has been
+tested):
`pkg_add g++ gmake libexecinfo`
-Then you should be able to build with something like:
+Then you should be able to build with something like:
`CXX=eg++ gmake`
-Only an ncurses build is possible on 5.8-release, as SDL2 is broken. On recent -current or snapshots, however, you can install the SDL2 packages:
+Only an ncurses build is possible on 5.8-release, as SDL2 is broken. On recent -current or
+snapshots, however, you can install the SDL2 packages:
`pkg_add sdl2 sdl2-image sdl2-mixer sdl2-ttf`
@@ -670,11 +775,14 @@ and build with:
### Building on NetBSD/amd64 7.0RC1 with the system compiler
-NetBSD has (or will have) gcc 4.8.4 as of version 7.0, which is new enough to build cataclysm. You will need to install gmake and ncursesw:
+NetBSD has (or will have) gcc 4.8.4 as of version 7.0, which is new enough to build cataclysm. You
+will need to install gmake and ncursesw:
`pkgin install gmake ncursesw`
-Then you should be able to build with something like this (LDFLAGS for ncurses builds are taken care of by the ncurses configuration script; you can of course set CXXFLAGS/LDFLAGS in your .profile or something):
+Then you should be able to build with something like this (LDFLAGS for ncurses builds are taken care
+of by the ncurses configuration script; you can of course set CXXFLAGS/LDFLAGS in your .profile or
+something):
```
export CXXFLAGS="-I/usr/pkg/include"
@@ -682,4 +790,5 @@ gmake # ncurses builds
LDFLAGS="-L/usr/pkg/lib" gmake TILES=1 # tiles builds
```
-SDL builds currently compile, but did not run in my testing - not only do they segfault, but gdb segfaults when reading the debug symbols! Perhaps your mileage will vary.
+SDL builds currently compile, but did not run in my testing - not only do they segfault, but gdb
+segfaults when reading the debug symbols! Perhaps your mileage will vary.
diff --git a/doc/CONTRIBUTING.ko.md b/doc/CONTRIBUTING.ko.md
index ba7f538b4bf2..f23090e04480 100644
--- a/doc/CONTRIBUTING.ko.md
+++ b/doc/CONTRIBUTING.ko.md
@@ -1,7 +1,6 @@
# 기여하기
-[![en][icon-en]][en]
-[![ko][icon-ko]][ko]
+[![en][icon-en]][en] [![ko][icon-ko]][ko]
[en]: ./CONTRIBUTING.md
[icon-en]: https://img.shields.io/badge/lang-en-red?style=flat-square
@@ -11,6 +10,9 @@
- [기여하기](#기여하기)
- [가이드라인](#가이드라인)
- [코드 스타일](#코드-스타일)
+ - [C++](#c)
+ - [JSON 스타일](#json-스타일)
+ - [마크다운](#마크다운)
- [번역](#번역)
- [공식 문서](#공식-문서)
- [독시젠(Doxygen) 주석](#독시젠doxygen-주석)
@@ -44,15 +46,18 @@
[pr]: https://docs.github.com/ko/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests
-> 카타클리즘: 밝은 밤은 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스에 따라 배포됩니다. 게임의 코드와 콘텐츠는 어떠한 목적에도 사용, 수정, 재배포할 수 있습니다. 자세한 내용은 http://creativecommons.org/licenses/by-sa/3.0/ 를 참고해주세요.
-> 그 말은, 이 프로젝트에 기여하면, 그 기여물도 동일한 라이선스에 의해 보호받는다는 것이며, 이 라이선스는 취소될 수 없다는 것입니다.
+> 카타클리즘: 밝은 밤은 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스에 따라
+> 배포됩니다. 게임의 코드와 콘텐츠는 어떠한 목적에도 사용, 수정, 재배포할 수 있습니다. 자세한 내용은
+> http://creativecommons.org/licenses/by-sa/3.0/ 를 참고해주세요. 그 말은, 이 프로젝트에 기여하면,
+> 그 기여물도 동일한 라이선스에 의해 보호받는다는 것이며, 이 라이선스는 취소될 수 없다는 것입니다.
## 가이드라인
몇 가지 지켰으면 하는 가이드라인이 있습니다:
- 이 저장소를 `upstream` [리모트][remote]로 추가해주세요.
-- `upload` 브랜치를 수정사항 없이 깨끗하게 유지해주세요. 원격 저장소의 최신 변경사항을 바로 끌어올 수 있게 하기 위함입니다.
+- `upload` 브랜치를 수정사항 없이 깨끗하게 유지해주세요. 원격 저장소의 최신 변경사항을 바로 끌어올
+ 수 있게 하기 위함입니다.
- 새 기능이나 버그 수정을 할 때마다 새 브랜치를 만들어주세요.
- 절대로 `upload` 브랜치에 로컬 브랜치를 병합하지 마세요. `upstream/upload`에서 끌어오기만 해주세요.
@@ -60,13 +65,37 @@
## 코드 스타일
-`astyle`로 일관된 코드 스타일을 강제하고 있습니다.
-자세한 내용은 [CODE_STYLE](../doc/CODE_STYLE.md)을 참고해주세요.
+### C++
+
+`astyle`로 일관된 코드 스타일을 강제하고 있습니다. 자세한 내용은
+[CODE_STYLE](../doc/CODE_STYLE.md)을 참고해주세요.
+
+### JSON 스타일
+
+`tools/format` 경로에 있는 포매터로 일관된 JSON 스타일을 강제하고 있습니다.
+[JSON Style Guide](../doc/JSON_STYLE.md) 을 참고해주세요.
+
+### 마크다운
+
+`doc/`같은 마크다운 파일들은 [`deno`](https://deno.com)를 사용해 포매팅하고 있습니다.
+[`deno fmt`](https://deno.land/manual/tools/formatter) 을 실행해 자동으로 마크다운 파일을
+포매팅하세요. VsCode를 사용중이라면 다음 설정으로 저장할 때마다 자동 포매팅을 실행할 수 있습니다:
+
+```json
+// .vscode/settings.json
+{
+ "[markdown]": {
+ "editor.formatOnSave": true,
+ "editor.defaultFormatter": "denoland.vscode-deno"
+ }
+}
+```
## 번역
카타클리즘: 밝은 밤의 번역은 Transifex에서 진행중입니다.
-[번역 프로젝트](https://app.transifex.com/bn-team/cataclysm-bright-nights/)에서 지원되는 언어를 실시간으로 확인할 수 있습니다.
+[번역 프로젝트](https://app.transifex.com/bn-team/cataclysm-bright-nights/)에서 지원되는 언어를
+실시간으로 확인할 수 있습니다.
[TRANSLATING](../doc/TRANSLATING.md)에서 더 자세한 내용을 확인할 수 있습니다:
@@ -81,11 +110,13 @@
-자동 생성된 문서를 [깃허브 페이지](https://cataclysmbnteam.github.io/Cataclysm-BN)에서 읽을 수 있습니다.
+자동 생성된 문서를 [깃허브 페이지](https://cataclysmbnteam.github.io/Cataclysm-BN)에서 읽을 수
+있습니다.
### 독시젠(Doxygen) 주석
-클래스와 클래스 멤버에 대한 상세한 문서가 있으면 새로운 기여자들이 코드를 읽고 이해하는데 도움이 됩니다. 기존 클래스에 독시젠 주석을 다는 것도 환영입니다.
+클래스와 클래스 멤버에 대한 상세한 문서가 있으면 새로운 기여자들이 코드를 읽고 이해하는데 도움이
+됩니다. 기존 클래스에 독시젠 주석을 다는 것도 환영입니다.
클래스에 주석을 달 때는 다음 템플릿을 사용해주세요:
@@ -120,15 +151,18 @@ int foo;
### 문서 추가 가이드라인
-- 독시젠 주석은 '밖에서 보았을 때' 동작을 설명해야 합니다. 숨겨진 내부 구현에 대한 설명은 하지 말아야 합니다. 하지만 카타클리즘의 많은 클래스들이 서로 연결되어 있어서, 구현에 대한 설명이 필요할 때도 있을 것입니다.
+- 독시젠 주석은 '밖에서 보았을 때' 동작을 설명해야 합니다. 숨겨진 내부 구현에 대한 설명은 하지
+ 말아야 합니다. 하지만 카타클리즘의 많은 클래스들이 서로 연결되어 있어서, 구현에 대한 설명이 필요할
+ 때도 있을 것입니다.
- 새 기여자들이 이름만으로는 이해하기 어려운 것들에 대해서만 설명해주세요.
- 동어 반복은 피해주세요: `/** Map **/; map* map;`는 도움이 되지 않습니다.
-- `X`에 대한 설명을 할 때, `X`와 다른 컴포넌트들 간의 상호작용에 대해서만 설명해주세요. `X` 자체가 하는 일에 대해서는 설명하지 말아주세요.
+- `X`에 대한 설명을 할 때, `X`와 다른 컴포넌트들 간의 상호작용에 대해서만 설명해주세요. `X` 자체가
+ 하는 일에 대해서는 설명하지 말아주세요.
### 문서를 로컬에서 빌드하기
- [독시젠 설치](https://www.doxygen.nl)
-- `doxygen doxygen_doc/doxygen_conf.txt `
+- `doxygen doxygen_doc/doxygen_conf.txt`
- `firefox doxygen_doc/html/index.html` (또는 다른 브라우저)
## 예시 워크플로우
@@ -149,7 +183,7 @@ $ git clone https://github.com/깃허브_사용자명/Cataclysm-BN.git
3. 커밋 메시지 템플릿을 설정합니다.
```sh
- $ git config --local commit.template .gitmessage
+$ git config --local commit.template .gitmessage
```
4. 원본 저장소를 원격 저장소로 추가합니다.
@@ -182,7 +216,8 @@ $ git pull --ff-only upstream upload
# "upstream" 원격 저장소의 "upload" 브랜치에서 변경사항을 가져옵니다.
```
-> **Note** 오류가 발생했다면, 로컬 `upload` 브랜치에 직접 커밋을 했다는 뜻입니다. [이 문제를 해결하는 방법을 보려면 여기를 클릭하세요](#git-pull---ff-only을-했더니-에러가-나요).
+> **Note** 오류가 발생했다면, 로컬 `upload` 브랜치에 직접 커밋을 했다는 뜻입니다.
+> [이 문제를 해결하는 방법을 보려면 여기를 클릭하세요](#git-pull---ff-only을-했더니-에러가-나요).
### 변경사항 만들기
@@ -204,28 +239,38 @@ $ git push origin new_feature
# origin은 복제할 때 자동으로 포크를 가리키도록 설정되어 있습니다.
```
-3. 브랜치에서 작업을 마치고, 모든 변경사항을 커밋하고 푸시했다면, `new_feature` 브랜치에서 이 저장소의 `upload` 브랜치로 풀 리퀘스트를 보내주세요.
+3. 브랜치에서 작업을 마치고, 모든 변경사항을 커밋하고 푸시했다면, `new_feature` 브랜치에서 이
+ 저장소의 `upload` 브랜치로 풀 리퀘스트를 보내주세요.
-> **Note** 깃허브의 `new_feature` 브랜치에 새 커밋이 생기면, 풀 리퀘스트에 자동으로 포함됩니다. 따라서 같은 브랜치에 관련된 변경사항만 커밋해주세요.
+> **Note** 깃허브의 `new_feature` 브랜치에 새 커밋이 생기면, 풀 리퀘스트에 자동으로 포함됩니다.
+> 따라서 같은 브랜치에 관련된 변경사항만 커밋해주세요.
## 풀 리퀘스트 초안
-풀 리퀘스트를 만들었지만 아직 작업 중이라면, [초안(draft)](https://docs.github.com/ko/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests#draft-pull-requests)으로 표시해주세요. 이렇게 하면 준비된 상태가 아니라는 것을 리뷰어에게 알려줘 리뷰 진행 속도를 높일 수 있습니다.
+풀 리퀘스트를 만들었지만 아직 작업 중이라면,
+[초안(draft)](https://docs.github.com/ko/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests#draft-pull-requests)으로
+표시해주세요. 이렇게 하면 준비된 상태가 아니라는 것을 리뷰어에게 알려줘 리뷰 진행 속도를 높일 수
+있습니다.
-풀 리퀘스트를 만들 때 이슈를 참조할 필요는 없지만, 참조하지 않느나면 PR이 어떤 문제룰 해결하려는지 자세히 설명해야 합니다.
+풀 리퀘스트를 만들 때 이슈를 참조할 필요는 없지만, 참조하지 않느나면 PR이 어떤 문제룰 해결하려는지
+자세히 설명해야 합니다.
### 모든 풀 리퀘스트에는 `"Summary"`줄이 있어야 합니다.
-개요(summary)는 [변경 내역](https://github.com/cataclysmbnteam/Cataclysm-BN/blob/upload/data/changelog.txt)에 추가할 한 줄 요약입니다.
+개요(summary)는
+[변경 내역](https://github.com/cataclysmbnteam/Cataclysm-BN/blob/upload/data/changelog.txt)에 추가할
+한 줄 요약입니다.
개요 형식: `SUMMARY: 카테고리 "설명"`
-고를 수 있는 카테고리는 Features, Content, Interface, Mods, Balance, Bugfixes, Performance, Infrastructure, Build, I18N이 있습니다.
+고를 수 있는 카테고리는 Features, Content, Interface, Mods, Balance, Bugfixes, Performance,
+Infrastructure, Build, I18N이 있습니다.
-예시: `SUMMARY: Content "Adds new mutation category 'Mouse'"`
-(해석: `SUMMARY: Content "새로운 변이 카테고리 'Mouse'를 추가합니다."`)
+예시: `SUMMARY: Content "Adds new mutation category 'Mouse'"` (해석:
+`SUMMARY: Content "새로운 변이 카테고리 'Mouse'를 추가합니다."`)
-[변경 내역 가이드라인](https://github.com/cataclysmbnteam/Cataclysm-BN/blob/upload/doc/CHANGELOG_GUIDELINES.md)에서 카테고리에 대한 설명을 볼 수 있습니다.
+[변경 내역 가이드라인](https://github.com/cataclysmbnteam/Cataclysm-BN/blob/upload/doc/CHANGELOG_GUIDELINES.md)에서
+카테고리에 대한 설명을 볼 수 있습니다.
### 키워드로 이슈 닫기
@@ -257,11 +302,14 @@ $ git push origin new_feature
- {키워드} #{이슈 번호}, {키워드} #{이슈 번호}
```
-더 자세한 설명은 [깃허브 공식 문서](https://docs.github.com/ko/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)를 참고해주세요.
+더 자세한 설명은
+[깃허브 공식 문서](https://docs.github.com/ko/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue)를
+참고해주세요.
## 개발 도구 지원
-코딩 스타일을 지키도록 도와주는 여러 도구들이 있습니다. 자세한 내용은 [DEVELOPER_TOOLING](../doc/DEVELOPER_TOOLING.md)을 참고해주세요.
+코딩 스타일을 지키도록 도와주는 여러 도구들이 있습니다. 자세한 내용은
+[DEVELOPER_TOOLING](../doc/DEVELOPER_TOOLING.md)을 참고해주세요.
## 고급
@@ -269,8 +317,9 @@ $ git push origin new_feature
### 원격 추적 브랜치 사용하기
-Remote tracking branches allow you to easily stay in touch with this repository's `upload` branch, as they automatically know which remote branch to get changes from.
-원본 저장소의 `upload` 브랜치에 대한 원격 추적 브랜치를 설정하면 쉽게 최신 변경사항을 가져올 수 있습니다.
+Remote tracking branches allow you to easily stay in touch with this repository's `upload` branch,
+as they automatically know which remote branch to get changes from. 원본 저장소의 `upload` 브랜치에
+대한 원격 추적 브랜치를 설정하면 쉽게 최신 변경사항을 가져올 수 있습니다.
```sh
$ git branch -vv
@@ -278,7 +327,9 @@ $ git branch -vv
new_feature xxxx ....
```
-`upload` 브랜치는 `origin/upload` 브랜치를 추적하고 있고, `new_feature` 브랜치는 아무 브랜치도 추적하고 있지 않습니다. 그 말은 git이 어디에서 `new_feature` 에 대한 변경사항을 가져올지 모른다는 뜻입니다.
+`upload` 브랜치는 `origin/upload` 브랜치를 추적하고 있고, `new_feature` 브랜치는 아무 브랜치도
+추적하고 있지 않습니다. 그 말은 git이 어디에서 `new_feature` 에 대한 변경사항을 가져올지 모른다는
+뜻입니다.
```sh
$ git checkout new_feature
@@ -288,7 +339,8 @@ $ git pull
어떤 브랜치를 대상으로 병합할지 지정하십시오.
```
-`new_feature` 브랜치에서 `upstream/upload` 브랜치의 변경사항을 쉽게 가져오려면, git에 어떤 브랜치를 추적할지 알려줘야 합니다. (로컬 `upload` 브랜치에도 적용할 수 있습니다.)
+`new_feature` 브랜치에서 `upstream/upload` 브랜치의 변경사항을 쉽게 가져오려면, git에 어떤 브랜치를
+추적할지 알려줘야 합니다. (로컬 `upload` 브랜치에도 적용할 수 있습니다.)
```sh
$ git branch -u upstream/upload new_feature
@@ -305,7 +357,9 @@ $ git branch new_feature_2 --track upstream/upload
Branch new_feature_2 set up to track remote branch upload from upstream.
```
-> **Note** : 이렇게 하면 `upstream/upload` 브랜치에서 변경사항을 가져오는 것은 쉬워지지만, `git push`는 여전히 실패합니다. `git push`는 `upstream/upload` 브랜치에 변경사항을 푸시할 권한이 없기 때문입니다.
+> **Note** : 이렇게 하면 `upstream/upload` 브랜치에서 변경사항을 가져오는 것은 쉬워지지만,
+> `git push`는 여전히 실패합니다. `git push`는 `upstream/upload` 브랜치에 변경사항을 푸시할 권한이
+> 없기 때문입니다.
```sh
$ git push
@@ -319,8 +373,10 @@ xxxx..xxxx new_feature -> new_feature
## 단위 테스트
-`tests/` 경로에 단위 테스트가 있습니다. 게임 소스를 변경한 후에는 반드시 테스트를 실행해야 합니다. `make` 명령을 실행하면 `tests/cata_test` 실행 파일이 생성됩니다. 이 파일은 일반적인 실행 파일처럼 실행할 수 있습니다. `make check` 명령으로도 실행할 수 있습니다.
-아무 인자 없이 실행하면 전체 테스트를 실행합니다. `--help` 인자를 사용하면 실행 옵션을 볼 수 있습니다.
+`tests/` 경로에 단위 테스트가 있습니다. 게임 소스를 변경한 후에는 반드시 테스트를 실행해야 합니다.
+`make` 명령을 실행하면 `tests/cata_test` 실행 파일이 생성됩니다. 이 파일은 일반적인 실행 파일처럼
+실행할 수 있습니다. `make check` 명령으로도 실행할 수 있습니다. 아무 인자 없이 실행하면 전체
+테스트를 실행합니다. `--help` 인자를 사용하면 실행 옵션을 볼 수 있습니다.
```sh
$ make
@@ -337,9 +393,13 @@ The test took 41.772 seconds
## 게임 내에서 테스트하기, 테스트 환경, 디버그 메뉴
-새 기능을 구현하거나 버그를 수정하는 경우, 게임 내에서 변경사항을 테스트하는 것이 좋습니다. 평소처럼 게임을 플레이해서 정확한 조건을 만들어내기는 힘들지만, 디버그 메뉴를 사용하면 쉽게 테스트할 수 있습니다. 기본적으로 메뉴를 띄우는 단축키가 없으므로 먼저 단축키를 지정해야 합니다.
+새 기능을 구현하거나 버그를 수정하는 경우, 게임 내에서 변경사항을 테스트하는 것이 좋습니다. 평소처럼
+게임을 플레이해서 정확한 조건을 만들어내기는 힘들지만, 디버그 메뉴를 사용하면 쉽게 테스트할 수
+있습니다. 기본적으로 메뉴를 띄우는 단축키가 없으므로 먼저 단축키를 지정해야 합니다.
-단축키 설정 메뉴를 띄웁니다. (`Esc`키를 누른 다음 `1`키를 누릅니다.) 아래로 스크롤해서 _디버그 메뉴_ 항목을 찾고, `+` 키를 눌러 새로운 단축키를 추가합니다. 테스트를 한 다면 새 캐릭터로 하는 것이 좋습니다. 방금 설정한 단축키를 누르면 다음과 같은 화면이 나타날 것입니다.
+단축키 설정 메뉴를 띄웁니다. (`Esc`키를 누른 다음 `1`키를 누릅니다.) 아래로 스크롤해서 _디버그 메뉴_
+항목을 찾고, `+` 키를 눌러 새로운 단축키를 추가합니다. 테스트를 한 다면 새 캐릭터로 하는 것이
+좋습니다. 방금 설정한 단축키를 누르면 다음과 같은 화면이 나타날 것입니다.
```
┌─────────────────────────────────────────────────────┐
@@ -354,13 +414,17 @@ The test took 41.772 seconds
└─────────────────────────────────────────────────────┘
```
-위 명령어들을 사용해서 변경사항을 테스트할 수 있습니다. [DDA 위키](http://cddawiki.chezzo.com/cdda_wiki/index.php)에도 디버그 메뉴에 대한 정보가 있습니다.
+위 명령어들을 사용해서 변경사항을 테스트할 수 있습니다.
+[DDA 위키](http://cddawiki.chezzo.com/cdda_wiki/index.php)에도 디버그 메뉴에 대한 정보가 있습니다.
## 자주 묻는 질문
### `git pull --ff-only`을 했더니 에러가 나요
-`git pull --ff-only`를 실행했더니 에러가 났다면, `upload` 브랜치에 직접 커밋을 했기 때문입니다. 그 이유는 `upload` 브랜치의 내용이 원격과 로컬에서 각각 달라졌기 때문에, git이 원격과 로컬 중 무엇을 유지하고 무엇을 버릴 지 모르기 때문입니다. 이를 고치려면, 새 브랜치를 만들고, `upstream/upload` 브랜치와 분기된 지점을 찾은 다음, `upload` 브랜치를 그 지점으로 되돌려야 합니다.
+`git pull --ff-only`를 실행했더니 에러가 났다면, `upload` 브랜치에 직접 커밋을 했기 때문입니다. 그
+이유는 `upload` 브랜치의 내용이 원격과 로컬에서 각각 달라졌기 때문에, git이 원격과 로컬 중 무엇을
+유지하고 무엇을 버릴 지 모르기 때문입니다. 이를 고치려면, 새 브랜치를 만들고, `upstream/upload`
+브랜치와 분기된 지점을 찾은 다음, `upload` 브랜치를 그 지점으로 되돌려야 합니다.
```sh
$ git pull --ff-only upstream upload
@@ -374,7 +438,8 @@ $ git reset --hard cc31d0....
HEAD is now at cc31d0... ...
```
-이제 `upload`가 정리되었으니 `upstream/upload`에서 변경 내역을 끌어오고, `new_branch`에서 계속 작업할 수 있습니다.
+이제 `upload`가 정리되었으니 `upstream/upload`에서 변경 내역을 끌어오고, `new_branch`에서 계속
+작업할 수 있습니다.
```sh
$ git pull --ff-only upstream upload
diff --git a/doc/CONTRIBUTING.md b/doc/CONTRIBUTING.md
index 86948f56091f..5cb202d96e08 100644
--- a/doc/CONTRIBUTING.md
+++ b/doc/CONTRIBUTING.md
@@ -1,7 +1,6 @@
# Contribute
-[![en][icon-en]][en]
-[![ko][icon-ko]][ko]
+[![en][icon-en]][en] [![ko][icon-ko]][ko]
[en]: ./CONTRIBUTING.md
[icon-en]: https://img.shields.io/badge/lang-en-red?style=flat-square
@@ -11,6 +10,9 @@
- [Contribute](#contribute)
- [Guidelines](#guidelines)
- [Code Style](#code-style)
+ - [C++](#c)
+ - [JSON](#json)
+ - [Markdown](#markdown)
- [Translations](#translations)
- [Documentation](#documentation)
- [Doxygen Comments](#doxygen-comments)
@@ -42,27 +44,56 @@ Contributing to Cataclysm: Bright Nights is easy:
1. Make your changes.
1. Send us a pull request.
-> Cataclysm: Bright Nights is released under the Creative Commons Attribution ShareAlike 3.0 license. The code and content of the game is free to use, modify, and redistribute for any purpose whatsoever. See http://creativecommons.org/licenses/by-sa/3.0/ for details.
-> This means any contribution you make to the project will also be covered by the same license, and this license is irrevocable.
+> Cataclysm: Bright Nights is released under the Creative Commons Attribution ShareAlike 3.0
+> license. The code and content of the game is free to use, modify, and redistribute for any purpose
+> whatsoever. See http://creativecommons.org/licenses/by-sa/3.0/ for details. This means any
+> contribution you make to the project will also be covered by the same license, and this license is
+> irrevocable.
## Guidelines
There are a couple of guidelines we suggest sticking to:
- Add this repository as an `upstream` remote.
-- Keep your `upload` branch clean. This means you can easily pull changes made to this repository into yours.
+- Keep your `upload` branch clean. This means you can easily pull changes made to this repository
+ into yours.
- Create a new branch for each new feature or set of related bug fixes.
-- Never merge from your local branches into your `upload` branch. Only update that by pulling from `upstream/upload`.
+- Never merge from your local branches into your `upload` branch. Only update that by pulling from
+ `upstream/upload`.
## Code Style
-Code style is enforced across the codebase by `astyle`.
-See [CODE_STYLE](../doc/CODE_STYLE.md) for details.
+### C++
+
+Code style is enforced across the codebase by `astyle`. See [CODE_STYLE](../doc/CODE_STYLE.md) for
+details.
+
+### JSON
+
+JSON files are formatted using custom formatter available in `tools/format`. Visit
+[JSON Style Guide](../doc/JSON_STYLE.md) for details.
+
+### Markdown
+
+Markdown files such as `doc/` are formatted using [`deno`](https://deno.com)'s built-in formatter.
+Run [`deno fmt`](https://deno.land/manual/tools/formatter) anywhere to format markdown files. On
+VSCode, you can set following configuration to auto-format markdown files on save:
+
+```json
+// .vscode/settings.json
+{
+ "[markdown]": {
+ "editor.formatOnSave": true,
+ "editor.defaultFormatter": "denoland.vscode-deno"
+ }
+}
+```
## Translations
-The translation of Cataclysm: BN is done using Transifex.
-Look at the [translation project](https://app.transifex.com/bn-team/cataclysm-bright-nights/) for an up-to-date list of supported languages.
+The translation of Cataclysm: BN is done using Transifex. Look at the
+[translation project](https://app.transifex.com/bn-team/cataclysm-bright-nights/) for an up-to-date
+list of supported languages.
See [TRANSLATING](../doc/TRANSLATING.md) for more information:
@@ -77,11 +108,13 @@ See [TRANSLATING](../doc/TRANSLATING.md) for more information:
-Autogenerated documentation is hosted on [GitHub Pages](https://cataclysmbnteam.github.io/Cataclysm-BN).
+Autogenerated documentation is hosted on
+[GitHub Pages](https://cataclysmbnteam.github.io/Cataclysm-BN).
### Doxygen Comments
-Extensive documentation of classes and class members will make the code more readable to new contributors. New doxygen comments for existing classes are a welcomed contribution.
+Extensive documentation of classes and class members will make the code more readable to new
+contributors. New doxygen comments for existing classes are a welcomed contribution.
Use the following template for commenting classes:
@@ -116,7 +149,8 @@ int foo;
### Guidelines for adding documentation
-- Doxygen comments should describe behavior towards the outside, not implementation, but since many classes in Cataclysm are intertwined, it's often necessary to describe implementation.
+- Doxygen comments should describe behavior towards the outside, not implementation, but since many
+ classes in Cataclysm are intertwined, it's often necessary to describe implementation.
- Describe things that aren't obvious to newcomers just from the name.
- Don't describe redundantly: `/** Map **/; map* map;` is not a helpful comment.
- When documenting X, describe how X interacts with other components, not just what X itself does.
@@ -124,7 +158,7 @@ int foo;
### Building the documentation for viewing it locally
- Install doxygen
-- `doxygen doxygen_doc/doxygen_conf.txt `
+- `doxygen doxygen_doc/doxygen_conf.txt`
- `firefox doxygen_doc/html/index.html` (replace firefox with your browser of choice)
## Example Workflow
@@ -145,7 +179,7 @@ $ git clone https://github.com/YOUR_USERNAME/Cataclysm-BN.git
3. Set commit message template.
```sh
- $ git config --local commit.template .gitmessage
+$ git config --local commit.template .gitmessage
```
4. Add this repository as a remote.
@@ -178,7 +212,9 @@ $ git pull --ff-only upstream upload
# gets changes from "upload" branch on the "upstream" remote
```
-> **Note** If this gives you an error, it means you have committed directly to your local `upload` branch. [Click here for instructions on how to fix this issue](#why-does-git-pull---ff-only-result-in-an-error).
+> **Note** If this gives you an error, it means you have committed directly to your local `upload`
+> branch.
+> [Click here for instructions on how to fix this issue](#why-does-git-pull---ff-only-result-in-an-error).
### Make your changes
@@ -200,31 +236,42 @@ $ git push origin new_feature
# origin was automatically set to point to your fork when you cloned it
```
-3. Once you're finished working on your branch, and have committed and pushed all your changes, submit a pull request from your `new_feature` branch to this repository's `upload` branch.
+3. Once you're finished working on your branch, and have committed and pushed all your changes,
+ submit a pull request from your `new_feature` branch to this repository's `upload` branch.
-> **Note** any new commits to the `new_feature` branch on GitHub will automatically be included in the pull request, so make sure to only commit related changes to the same branch.
+> **Note** any new commits to the `new_feature` branch on GitHub will automatically be included in
+> the pull request, so make sure to only commit related changes to the same branch.
## Pull Request Notes
-If you file a PR but you're still working on it, please mark it as [draft](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests#draft-pull-requests). This can help speed up our review process by allowing us to only review the things that are ready for it, and will prevent anything that isn't completely ready from being merged in.
+If you file a PR but you're still working on it, please mark it as
+[draft](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests#draft-pull-requests).
+This can help speed up our review process by allowing us to only review the things that are ready
+for it, and will prevent anything that isn't completely ready from being merged in.
-It is not required to solve or reference an open issue to file a PR, however, if you do so, you need to explain the problem your PR is solving in full detail.
+It is not required to solve or reference an open issue to file a PR, however, if you do so, you need
+to explain the problem your PR is solving in full detail.
### All PRs should have a `"Summary"` line
-Summary is a one-line description of your change that will be extracted and added to the project changelog at
+Summary is a one-line description of your change that will be extracted and added to the project
+changelog at
The format is: `SUMMARY: Category "description"`
-The categories to choose from are: Features, Content, Interface, Mods, Balance, Bugfixes, Performance, Infrastructure, Build, I18N.
+The categories to choose from are: Features, Content, Interface, Mods, Balance, Bugfixes,
+Performance, Infrastructure, Build, I18N.
Example: `SUMMARY: Content "Adds new mutation category 'Mouse'"`
-See the [Changelog Guidelines](https://github.com/cataclysmbnteam/Cataclysm-BN/blob/upload/doc/CHANGELOG_GUIDELINES.md) for explanations of the categories.
+See the
+[Changelog Guidelines](https://github.com/cataclysmbnteam/Cataclysm-BN/blob/upload/doc/CHANGELOG_GUIDELINES.md)
+for explanations of the categories.
### Closing issues using keywords
-One more thing: when marking your PR as closing, fixing, or resolving issues, please include this somewhere in the description:
+One more thing: when marking your PR as closing, fixing, or resolving issues, please include this
+somewhere in the description:
```
- {keyword} #{issue}
@@ -244,7 +291,8 @@ for example: `- fixed #12345`
and `{issue}` is the number of the issue you're closing after PR gets merged.
-This would automatically close the issue when the PR is pulled in, and allows merges to work slightly faster.
+This would automatically close the issue when the PR is pulled in, and allows merges to work
+slightly faster.
### closing multiple issues at once
@@ -256,7 +304,8 @@ See for more.
## Tooling support
-Various tools are available to help you keep your contributions conforming to the appropriate style. See [DEVELOPER_TOOLING](../doc/DEVELOPER_TOOLING.md) for more details.
+Various tools are available to help you keep your contributions conforming to the appropriate style.
+See [DEVELOPER_TOOLING](../doc/DEVELOPER_TOOLING.md) for more details.
## Advanced Techniques
@@ -264,7 +313,8 @@ These guidelines aren't essential, but they can make keeping things in order muc
### Using remote tracking branches
-Remote tracking branches allow you to easily stay in touch with this repository's `upload` branch, as they automatically know which remote branch to get changes from.
+Remote tracking branches allow you to easily stay in touch with this repository's `upload` branch,
+as they automatically know which remote branch to get changes from.
```sh
$ git branch -vv
@@ -272,7 +322,9 @@ $ git branch -vv
new_feature xxxx ....
```
-Here you can see we have two branches; `upload` which is tracking `origin/upload`, and `new_feature` which isn't tracking any branch. In practice, what this means is that git won't know where to get changes from.
+Here you can see we have two branches; `upload` which is tracking `origin/upload`, and `new_feature`
+which isn't tracking any branch. In practice, what this means is that git won't know where to get
+changes from.
```sh
$ git checkout new_feature
@@ -282,7 +334,8 @@ There is no tracking information for the current branch.
Please specify which branch you want to merge with.
```
-In order to easily pull changes from `upstream/upload` into the `new_feature` branch, we can tell git which branch it should track. (You can even do this for your local upload branch.)
+In order to easily pull changes from `upstream/upload` into the `new_feature` branch, we can tell
+git which branch it should track. (You can even do this for your local upload branch.)
```sh
$ git branch -u upstream/upload new_feature
@@ -299,7 +352,9 @@ $ git branch new_feature_2 --track upstream/upload
Branch new_feature_2 set up to track remote branch upload from upstream.
```
-> **Note**: Although this makes it easier to pull from `upstream/upload`, it doesn't change anything with regards to pushing. `git push` fails because you don't have permission to push to `upstream/upload`.
+> **Note**: Although this makes it easier to pull from `upstream/upload`, it doesn't change anything
+> with regards to pushing. `git push` fails because you don't have permission to push to
+> `upstream/upload`.
```sh
$ git push
@@ -313,11 +368,11 @@ xxxx..xxxx new_feature -> new_feature
## Unit tests
-There is a suite of tests built into the source tree at tests/
-You should run the test suite after ANY change to the game source.
-An ordinary invocation of `make` will build the test executable at tests/cata_test, and it can be invoked like any ordinary executable, or via `make check`.
-With no arguments it will run the entire test suite.
-With `--help` it will print a number of invocation options you can use to adjust its operation.
+There is a suite of tests built into the source tree at tests/ You should run the test suite after
+ANY change to the game source. An ordinary invocation of `make` will build the test executable at
+tests/cata_test, and it can be invoked like any ordinary executable, or via `make check`. With no
+arguments it will run the entire test suite. With `--help` it will print a number of invocation
+options you can use to adjust its operation.
```sh
$ make
@@ -334,9 +389,16 @@ I recommend habitually invoking make like `make YOUR BUILD OPTIONS && make check
## In-game testing, test environment and the debug menu
-Whether you are implementing a new feature or whether you are fixing a bug, it is always a good practice to test your changes in-game. It can be a hard task to create the exact conditions by playing a normal game to be able to test your changes, which is why there is a debug menu. There is no default key to bring up the menu so you will need to assign one first.
+Whether you are implementing a new feature or whether you are fixing a bug, it is always a good
+practice to test your changes in-game. It can be a hard task to create the exact conditions by
+playing a normal game to be able to test your changes, which is why there is a debug menu. There is
+no default key to bring up the menu so you will need to assign one first.
-Bring up the keybindings menu (press `Escape` then `1`), scroll down almost to the bottom and press `+` to add a new key binding. Press the letter that corresponds to the _Debug menu_ item, then press the key you want to use to bring up the debug menu. To test your changes, create a new world with a new character. Once you are in that world, press the key you just assigned for the debug menu and you should see something like this:
+Bring up the keybindings menu (press `Escape` then `1`), scroll down almost to the bottom and press
+`+` to add a new key binding. Press the letter that corresponds to the _Debug menu_ item, then press
+the key you want to use to bring up the debug menu. To test your changes, create a new world with a
+new character. Once you are in that world, press the key you just assigned for the debug menu and
+you should see something like this:
```
┌─────────────────────────────────────────────────────┐
@@ -351,13 +413,17 @@ Bring up the keybindings menu (press `Escape` then `1`), scroll down almost to t
└─────────────────────────────────────────────────────┘
```
-With these commands, you should be able to recreate the proper conditions to test your changes. The [DDA wiki](http://cddawiki.chezzo.com/cdda_wiki/index.php) may have useful informations regarding debug menu.
+With these commands, you should be able to recreate the proper conditions to test your changes. The
+[DDA wiki](http://cddawiki.chezzo.com/cdda_wiki/index.php) may have useful informations regarding
+debug menu.
## Frequently Asked Questions
### Why does `git pull --ff-only` result in an error?
-If `git pull --ff-only` shows an error, it means that you've committed directly to your local `upload` branch. To fix this, we create a new branch with these commits, find the point at which we diverged from `upstream/upload`, and then reset `upload` to that point.
+If `git pull --ff-only` shows an error, it means that you've committed directly to your local
+`upload` branch. To fix this, we create a new branch with these commits, find the point at which we
+diverged from `upstream/upload`, and then reset `upload` to that point.
```sh
$ git pull --ff-only upstream upload
@@ -371,7 +437,8 @@ $ git reset --hard cc31d0....
HEAD is now at cc31d0... ...
```
-Now that `upload` has been cleaned up, we can easily pull from `upstream/upload`, and then continue working on `new_branch`.
+Now that `upload` has been cleaned up, we can easily pull from `upstream/upload`, and then continue
+working on `new_branch`.
```sh
$ git pull --ff-only upstream upload
diff --git a/doc/DEVELOPER_FAQ.md b/doc/DEVELOPER_FAQ.md
index ca011146ce34..cb2d88693077 100644
--- a/doc/DEVELOPER_FAQ.md
+++ b/doc/DEVELOPER_FAQ.md
@@ -2,23 +2,40 @@
## Adding a monster
-1. Edit `data/json/monsters.json` or create a new json file and insert the definition of your new monster there (probably copy an existing entry).
+1. Edit `data/json/monsters.json` or create a new json file and insert the definition of your new
+ monster there (probably copy an existing entry).
2. Make sure the id value is unique among all other monster types.
-3. Your monster type is now valid, but won't be spawned. If you want it to be spawned among similar monsters, edit monstergroups.json. Find the appropriate array, and insert the identifier for your monster (e.g, `mon_zombie`). `cost_multiplier`, makes it more expensive to spawn. The higher the cost, the more 'slots' it takes up, and freq is how frequent they spawn. See `mongroupdef.cpp`
-4. If you want your monster to drop items, edit `monster_drops.json`. Make a new array for your monster type with all the map item groups it may carry, and a chance value for each.
-5. Your monster may have a special attack, a `monattack::function` reference. Edit `monattack.h` and include the function in the class definition; edit `monstergenerator.cpp` and add the translation, then edit `monattack.cpp` and define your function. Functions may be shared among different monster types. Be aware that the function should contain a statement that the monster uses to decide whether or not to use the attack, and if they do, should reset the monster's attack timer.
-6. Just like attacks, some monsters may have a special function called when they die. This works the same as attacks, but the relevant files are `mondeath.h` and `mondeath.cpp`.
-7. If you add flags, document them in `JSON_FLAGS.md`, and `mtype.h`. Please. Or we will replace your blood with acid in the night.
+3. Your monster type is now valid, but won't be spawned. If you want it to be spawned among similar
+ monsters, edit monstergroups.json. Find the appropriate array, and insert the identifier for your
+ monster (e.g, `mon_zombie`). `cost_multiplier`, makes it more expensive to spawn. The higher the
+ cost, the more 'slots' it takes up, and freq is how frequent they spawn. See `mongroupdef.cpp`
+4. If you want your monster to drop items, edit `monster_drops.json`. Make a new array for your
+ monster type with all the map item groups it may carry, and a chance value for each.
+5. Your monster may have a special attack, a `monattack::function` reference. Edit `monattack.h` and
+ include the function in the class definition; edit `monstergenerator.cpp` and add the
+ translation, then edit `monattack.cpp` and define your function. Functions may be shared among
+ different monster types. Be aware that the function should contain a statement that the monster
+ uses to decide whether or not to use the attack, and if they do, should reset the monster's
+ attack timer.
+6. Just like attacks, some monsters may have a special function called when they die. This works the
+ same as attacks, but the relevant files are `mondeath.h` and `mondeath.cpp`.
+7. If you add flags, document them in `JSON_FLAGS.md`, and `mtype.h`. Please. Or we will replace
+ your blood with acid in the night.
## Adding structures to the map
-Most "regular" buildings are spawned in cities (large clusters of buildings which are located rather close to each other).
+Most "regular" buildings are spawned in cities (large clusters of buildings which are located rather
+close to each other).
-In file `omdata.h` in the enum `oter_id` structure define names (code identifiers) for your building.
+In file `omdata.h` in the enum `oter_id` structure define names (code identifiers) for your
+building.
-If you want your building to be displayed at overmap in different orientations, you should add 4 identifiers for each orientation (`south`, `east`, `west` and `north` correspondingly).
+If you want your building to be displayed at overmap in different orientations, you should add 4
+identifiers for each orientation (`south`, `east`, `west` and `north` correspondingly).
-In the same file in structure `const oter_t oterlist[num_ter_types]` we should define how these buildings will be displayed, how much they obscure vision and which extras set they have. For example:
+In the same file in structure `const oter_t oterlist[num_ter_types]` we should define how these
+buildings will be displayed, how much they obscure vision and which extras set they have. For
+example:
```C++
{"mil. surplus", '^', c_white, 5, build_extras, false, false},
@@ -27,37 +44,54 @@ In the same file in structure `const oter_t oterlist[num_ter_types]` we should d
{"mil. surplus", '<', c_white, 5, build_extras, false, false}
```
-Comments at the beginning of this structure are rather useful. In the file `mapgen.cpp` find the subroutine called `draw_map(...);` where you should find a huge variant operator ("switch"). This is where you should put your code defining the new building by adding new case-statement.
+Comments at the beginning of this structure are rather useful. In the file `mapgen.cpp` find the
+subroutine called `draw_map(...);` where you should find a huge variant operator ("switch"). This is
+where you should put your code defining the new building by adding new case-statement.
It should be mentioned that most buildings are built on the square `SEEX*2 x SEEY*2` tiles.
-If you want your building to be spawned not only in city limits you should refer to structures in file `omdata.h` (starting from the line `#define OMSPEC_FREQ 7`).
+If you want your building to be spawned not only in city limits you should refer to structures in
+file `omdata.h` (starting from the line `#define OMSPEC_FREQ 7`).
-These structures are also commented in source code. Add new identifier in enum `omspec_id` structure before `NUM_OMSPECS` and then add a record in `const overmap_special overmap_specials[NUM_OMSPECS]` array. For example:
+These structures are also commented in source code. Add new identifier in enum `omspec_id` structure
+before `NUM_OMSPECS` and then add a record in `const overmap_special overmap_specials[NUM_OMSPECS]`
+array. For example:
```C++
{ot_toxic_dump, 0, 5, 15, -1, mcat_null, 0, 0, 0, 0, &omspec_place::wilderness,0}
```
-The comments given in source code to structure `struct overmap_special` explain the meaning of these constants in the example above.
+The comments given in source code to structure `struct overmap_special` explain the meaning of these
+constants in the example above.
## Adding a bionic
-1. Edit `data/json/bionics.json` and add your bionic near similar types. See `JSON_INFO.md` for a more in-depth review of the individual fields.
-2. If you want the bionic to be available in the game world as an item, add it to `item_groups.json`, and add a bionic item to `data/json/items/bionics.json`.
-3. Manually code in effects into the appropriate files, for activated bionics edit the `player::activate_bionic` function in `bionics.cpp`.
-4. For bionic ranged weapons add the bionic weapon counterparts to `ranged.json`, give them the `BIONIC_WEAPON` flags.
-5. For bionic close combat weapons add the bionic weapon to `data/json/items/melee.json` give them `NON_STUCK`, `NO_UNWIELD` at least.
+1. Edit `data/json/bionics.json` and add your bionic near similar types. See `JSON_INFO.md` for a
+ more in-depth review of the individual fields.
+2. If you want the bionic to be available in the game world as an item, add it to
+ `item_groups.json`, and add a bionic item to `data/json/items/bionics.json`.
+3. Manually code in effects into the appropriate files, for activated bionics edit the
+ `player::activate_bionic` function in `bionics.cpp`.
+4. For bionic ranged weapons add the bionic weapon counterparts to `ranged.json`, give them the
+ `BIONIC_WEAPON` flags.
+5. For bionic close combat weapons add the bionic weapon to `data/json/items/melee.json` give them
+ `NON_STUCK`, `NO_UNWIELD` at least.
## How armor protection is calculated
-1. When the player is hit at a specific body part, armor coverage determines whether the armor is hit, or an uncovered part of the player is hit (roll `1d100` against coverage).
-2. If the above roll fails (ie roll value is above coverage), then the armor does not absorb any damage from the blow, neither does it become damaged.
-3. If the above roll succeeds, the armor is hit, possibly absorbing some damage and possibly getting damaged in the process.
+1. When the player is hit at a specific body part, armor coverage determines whether the armor is
+ hit, or an uncovered part of the player is hit (roll `1d100` against coverage).
+2. If the above roll fails (ie roll value is above coverage), then the armor does not absorb any
+ damage from the blow, neither does it become damaged.
+3. If the above roll succeeds, the armor is hit, possibly absorbing some damage and possibly getting
+ damaged in the process.
4. The above steps are repeated for each layer of armor on the body part.
-5. Armor protects against bash and cut damage. These are determined by multiplying the armor thickness by the material bash/cut resistance factor respectively, given in `materials.json`.
-6. If the armor is made from 2 materials types, then it takes a weighted average of the primary material (`66%`) and secondary material (`33%`).
-7. Materials resistance factors are given relative to `PAPER` as a material (this probably needs some fine-tuning for balance).
+5. Armor protects against bash and cut damage. These are determined by multiplying the armor
+ thickness by the material bash/cut resistance factor respectively, given in `materials.json`.
+6. If the armor is made from 2 materials types, then it takes a weighted average of the primary
+ material (`66%`) and secondary material (`33%`).
+7. Materials resistance factors are given relative to `PAPER` as a material (this probably needs
+ some fine-tuning for balance).
## Adding an iuse function.
@@ -67,7 +101,8 @@ The comments given in source code to structure `struct overmap_special` explain
## Acid resistance
-This determines how items react to acid fields. Item acid resistances are a weighted average of the materials acid resistance (see `item::acid_resist`):
+This determines how items react to acid fields. Item acid resistances are a weighted average of the
+materials acid resistance (see `item::acid_resist`):
- An item acid resistance of zero means it will get corroded every turn;
- An item acid resistance above zero means it has a chance of getting corroded every turn;
@@ -88,8 +123,22 @@ A: Add the `TRADER_AVOID` flag to it.
**Q: What the heck is up with the map objects?**
-A: The pertinent map objects are submap, mapbuffer, map, and overmap. The submap contains the actual map data, in SEEXxSEEY chunks. Vehicles and spawns are stored in vectors because they are relatively sparse. Submaps live in the single global mapbuffer, MAPBUFFER. Map encapsulates the area around the player that is currently active. It contains an array of MAPSIZE * MAPSIZE submap pointers called grid. This is a 2D array, but is mapped to a 1D array for (questionable) indexing purposes. When the player moves from one submap to another, `map::shift()` is called. It moves the pointers in grid to keep the player centered. The leading edge of grid is populated by `map::load()`. If the submap has been visited before, it's loaded from MAPBUFFER. Otherwise a 2x2 chunk of submaps is generated based on the corresponding overmap square type. An overmap encapsulates the large-scale structure of a map (such as location and layout of cities, forests, rivers, roads, etc...). There are an arbitrary number of overmaps. Additional overmaps are generated as the player enters new areas.
-
-**Q: What is the relation of NPCs/Monsters vs maps. How are they stored, where are they stored? Are they stored?**
-
-A: All npcs are now stored in the overmap. Active npcs only contain the currently active npcs. There is a difference between npc active npc coordinates, and overmap coordinates. So these will need to be changed when saving the npcs. Or else the npcs will be saved at the wrong location. And yes they are stored.
+A: The pertinent map objects are submap, mapbuffer, map, and overmap. The submap contains the actual
+map data, in SEEXxSEEY chunks. Vehicles and spawns are stored in vectors because they are relatively
+sparse. Submaps live in the single global mapbuffer, MAPBUFFER. Map encapsulates the area around the
+player that is currently active. It contains an array of MAPSIZE * MAPSIZE submap pointers called
+grid. This is a 2D array, but is mapped to a 1D array for (questionable) indexing purposes. When the
+player moves from one submap to another, `map::shift()` is called. It moves the pointers in grid to
+keep the player centered. The leading edge of grid is populated by `map::load()`. If the submap has
+been visited before, it's loaded from MAPBUFFER. Otherwise a 2x2 chunk of submaps is generated based
+on the corresponding overmap square type. An overmap encapsulates the large-scale structure of a map
+(such as location and layout of cities, forests, rivers, roads, etc...). There are an arbitrary
+number of overmaps. Additional overmaps are generated as the player enters new areas.
+
+**Q: What is the relation of NPCs/Monsters vs maps. How are they stored, where are they stored? Are
+they stored?**
+
+A: All npcs are now stored in the overmap. Active npcs only contain the currently active npcs. There
+is a difference between npc active npc coordinates, and overmap coordinates. So these will need to
+be changed when saving the npcs. Or else the npcs will be saved at the wrong location. And yes they
+are stored.
diff --git a/doc/DEVELOPER_TOOLING.md b/doc/DEVELOPER_TOOLING.md
index 05dc810f8d3e..afd3da703686 100644
--- a/doc/DEVELOPER_TOOLING.md
+++ b/doc/DEVELOPER_TOOLING.md
@@ -1,8 +1,10 @@
## Code style (astyle)
-Automatic formatting of the source code is performed by [Artistic Style](http://astyle.sourceforge.net/), or `astyle` for short.
+Automatic formatting of the source code is performed by
+[Artistic Style](http://astyle.sourceforge.net/), or `astyle` for short.
-There are multiple ways to invoke it on the codebase, depending on your system or personal preferences.
+There are multiple ways to invoke it on the codebase, depending on your system or personal
+preferences.
### Invoking astyle directly
@@ -22,9 +24,9 @@ make astyle
### Invoking astyle via pre-commit hook
-If you have all the relevant tools installed, you can have git automatically
-check the style of code and json by adding these commands to your git
-pre-commit hook (typically at `.git/hooks/pre-commit`):
+If you have all the relevant tools installed, you can have git automatically check the style of code
+and json by adding these commands to your git pre-commit hook (typically at
+`.git/hooks/pre-commit`):
```BASH
git diff --cached --name-only -z HEAD | grep -z 'data/.*\.json' | \
@@ -35,33 +37,49 @@ make astyle-check || exit 1
### Astyle extensions for Visual Studio
-There are astyle extensions in the Visual Studio Marketplace, but none of them have been confirmed (yet) to correctly work for our purposes on VS2019 or VS2022.
+There are astyle extensions in the Visual Studio Marketplace, but none of them have been confirmed
+(yet) to correctly work for our purposes on VS2019 or VS2022.
#### Visual Studio 2022
-Head over to https://github.com/olanti-p/BN_Astyle and follow instructions in the [README.md](https://github.com/olanti-p/BN_Astyle/blob/master/README.md). You may compile and install the extension from source, or take advantage of the pre-built version in [releases section](https://github.com/olanti-p/BN_Astyle/releases).
+Head over to https://github.com/olanti-p/BN_Astyle and follow instructions in the
+[README.md](https://github.com/olanti-p/BN_Astyle/blob/master/README.md). You may compile and
+install the extension from source, or take advantage of the pre-built version in
+[releases section](https://github.com/olanti-p/BN_Astyle/releases).
#### Visual Studio 2019
-Extensions's source code lives over at https://github.com/lukamicoder/astyle-extension.
-To install and compile it:
-1. Add the `Visual Studio extension development` workload through Visual Studio installer to your VS2019
-2. Download and extract the source code, or clone the repository (a simple `git clone --depth 1 https://github.com/lukamicoder/astyle-extension.git` should do).
+Extensions's source code lives over at https://github.com/lukamicoder/astyle-extension. To install
+and compile it:
+
+1. Add the `Visual Studio extension development` workload through Visual Studio installer to your
+ VS2019
+2. Download and extract the source code, or clone the repository (a simple
+ `git clone --depth 1 https://github.com/lukamicoder/astyle-extension.git` should do).
3. From the root folder, open `astyle-extension/AStyleExtension2017.sln`
-4. Select `Release` build configuration (most likely VS will select `Debug` configuration by default)
+4. Select `Release` build configuration (most likely VS will select `Debug` configuration by
+ default)
5. Build the solution
-6. If the build succeeded, you'll see the compiled extension in `AStyleExtension\bin\Release`. Double click it to install.
-7. Configure the extension according to [Configuration instructions (Visual Studio 2019 or older)](#configuration-instructions-visual-studio-2019-or-older) section.
+6. If the build succeeded, you'll see the compiled extension in `AStyleExtension\bin\Release`.
+ Double click it to install.
+7. Configure the extension according to
+ [Configuration instructions (Visual Studio 2019 or older)](#configuration-instructions-visual-studio-2019-or-older)
+ section.
#### Visual Studio 2017 or earlier
-You may follow the steps for VS2019 to compile from source, but there are pre-built versions [available](https://marketplace.visualstudio.com/items?itemName=Lukamicoder.AStyleExtension2017) on Visual Studio Marketplace, you should be able to install the extension through VS's extension manager and then configure it the same way.
+You may follow the steps for VS2019 to compile from source, but there are pre-built versions
+[available](https://marketplace.visualstudio.com/items?itemName=Lukamicoder.AStyleExtension2017) on
+Visual Studio Marketplace, you should be able to install the extension through VS's extension
+manager and then configure it the same way.
#### Configuration instructions (Visual Studio 2019 or older):
1. Go to `Tools` - `Options` - `AStyle Formatter` - `General`.
-2. Import `https://github.com/CleverRaven/Cataclysm-DDA/blob/master/msvc-full-features/AStyleExtension-Cataclysm-DDA.cfg` on `Export/Import` tab using `Import` button:
+2. Import
+ `https://github.com/CleverRaven/Cataclysm-DDA/blob/master/msvc-full-features/AStyleExtension-Cataclysm-DDA.cfg`
+ on `Export/Import` tab using `Import` button:
![image](img/VS_Astyle_Step_1.png)
@@ -69,11 +87,13 @@ You may follow the steps for VS2019 to compile from source, but there are pre-bu
![image](img/VS_Astyle_Step_2.png)
-4. Close `Options` menu, open file to be astyled and use `Format Document (Astyle)` or `Format Selection (Astyle)` commands from `Edit` - `Advanced` menu.
+4. Close `Options` menu, open file to be astyled and use `Format Document (Astyle)` or
+ `Format Selection (Astyle)` commands from `Edit` - `Advanced` menu.
![image](img/VS_Astyle_Step_3.png)
-*Note:* You can also configure keybindings for aforementioned commands in `Tools` - `Options` - `Environment` - `Keybindings` menu:
+_Note:_ You can also configure keybindings for aforementioned commands in `Tools` - `Options` -
+`Environment` - `Keybindings` menu:
![image](img/VS_Astyle_Step_4.png)
@@ -83,78 +103,81 @@ See the [JSON style guide](JSON_STYLE.md).
## ctags
-In addition to the usual means of creating a `tags` file via e.g. [`ctags`](http://ctags.sourceforge.net/), we provide `tools/json_tools/cddatags.py` to augment a `tags` file with locations of definitions taken from CDDA JSON data. `cddatags.py` is designed to safely update a tags file containing source code tags, so if you want both types of tag in your `tags` file then you can run `ctags -R . && tools/json_tools/cddatags.py`. Alternatively, there is a rule in the `Makefile` to do this for you; just run `make ctags` or `make etags`.
-
+In addition to the usual means of creating a `tags` file via e.g.
+[`ctags`](http://ctags.sourceforge.net/), we provide `tools/json_tools/cddatags.py` to augment a
+`tags` file with locations of definitions taken from CDDA JSON data. `cddatags.py` is designed to
+safely update a tags file containing source code tags, so if you want both types of tag in your
+`tags` file then you can run `ctags -R . && tools/json_tools/cddatags.py`. Alternatively, there is a
+rule in the `Makefile` to do this for you; just run `make ctags` or `make etags`.
## clang-tidy
-Cataclysm has a [clang-tidy configuration file](../.clang-tidy) and if you have
-`clang-tidy` available you can run it to perform static analysis of the
-codebase. We test with `clang-tidy` from LLVM 12.0.0 with CI, so for the most
-consistent results, you might want to use that version.
+Cataclysm has a [clang-tidy configuration file](../.clang-tidy) and if you have `clang-tidy`
+available you can run it to perform static analysis of the codebase. We test with `clang-tidy` from
+LLVM 12.0.0 with CI, so for the most consistent results, you might want to use that version.
To run it, you have a few options.
-* `clang-tidy` ships with a wrapper script `run-clang-tidy.py`.
+- `clang-tidy` ships with a wrapper script `run-clang-tidy.py`.
-* Use CMake's built-in support by adding `-DCMAKE_CXX_CLANG_TIDY=clang-tidy`
- or similar, pointing it to your chosen clang-tidy version.
+- Use CMake's built-in support by adding `-DCMAKE_CXX_CLANG_TIDY=clang-tidy` or similar, pointing it
+ to your chosen clang-tidy version.
+
+- To run `clang-tidy` directly try something like
-* To run `clang-tidy` directly try something like
```sh
grep '"file": "' build/compile_commands.json | \
sed "s+.*$PWD/++;s+\"$++" | \
egrep '.' | \
xargs -P 9 -n 1 clang-tidy -quiet
```
-To focus on a subset of files add their names into the `egrep` regex in the
-middle of the command-line.
+
+To focus on a subset of files add their names into the `egrep` regex in the middle of the
+command-line.
### Custom clang-tidy plugin
-We have written our own clang-tidy checks in a custom plugin. Unfortunately,
-`clang-tidy` as distributed by LLVM doesn't support plugins, so making this
-work requires some extra steps.
+We have written our own clang-tidy checks in a custom plugin. Unfortunately, `clang-tidy` as
+distributed by LLVM doesn't support plugins, so making this work requires some extra steps.
#### Ubuntu Focal
-If you are on Ubuntu Focal then you might be able to get it working the same
-way our CI does. Add the LLVM 12 Focal source [listed
-here](https://apt.llvm.org/) to your `sources.list`, install the needed packages (`clang-12
-libclang-12-dev llvm-12-dev llvm-12-tools`), and build Cataclysm with CMake,
-adding `-DCATA_CLANG_TIDY_PLUGIN=ON`.
+If you are on Ubuntu Focal then you might be able to get it working the same way our CI does. Add
+the LLVM 12 Focal source [listed here](https://apt.llvm.org/) to your `sources.list`, install the
+needed packages (`clang-12 libclang-12-dev llvm-12-dev llvm-12-tools`), and build Cataclysm with
+CMake, adding `-DCATA_CLANG_TIDY_PLUGIN=ON`.
On other distributions you will probably need to build `clang-tidy` yourself.
-* Check out the `llvm`, `clang`, and `clang-tools-extra` repositories in the
- required layout (as described for example
+
+- Check out the `llvm`, `clang`, and `clang-tools-extra` repositories in the required layout (as
+ described for example
[here](https://quuxplusone.github.io/blog/2018/04/16/building-llvm-from-source/).
-* Patch in plugin support for `clang-tidy` using [this
- patch](https://github.com/jbytheway/clang-tidy-plugin-support/blob/master/plugin-support.patch).
-* Configure LLVM using CMake, including the
- `-DCMAKE_EXE_LINKER_FLAGS="-rdynamic"` option.
-* Add the `build/bin` directory to your path so that `clang-tidy` and
- `FileCheck` are found from there.
-
-Then you can use your locally build `clang-tidy` to compile Cataclysm. You'll
-need to use the CMake version of the Cataclysm build rather than the `Makefile`
-build. Add the following CMake options:
+- Patch in plugin support for `clang-tidy` using
+ [this patch](https://github.com/jbytheway/clang-tidy-plugin-support/blob/master/plugin-support.patch).
+- Configure LLVM using CMake, including the `-DCMAKE_EXE_LINKER_FLAGS="-rdynamic"` option.
+- Add the `build/bin` directory to your path so that `clang-tidy` and `FileCheck` are found from
+ there.
+
+Then you can use your locally build `clang-tidy` to compile Cataclysm. You'll need to use the CMake
+version of the Cataclysm build rather than the `Makefile` build. Add the following CMake options:
+
```sh
-DCATA_CLANG_TIDY_PLUGIN=ON
-DCATA_CLANG_TIDY_INCLUDE_DIR="$extra_dir/clang-tidy"
-DCATA_CHECK_CLANG_TIDY="$extra_dir/test/clang-tidy/check_clang_tidy.py"
```
+
where `$extra_dir` is the location of your `clang-tools-extra` checkout.
To run `clang-tidy` with this plugin enabled add the
-`'-plugins=$build_dir/tools/clang-tidy-plugin/libCataAnalyzerPlugin.so'` option
-to your `clang-tidy` command line.
+`'-plugins=$build_dir/tools/clang-tidy-plugin/libCataAnalyzerPlugin.so'` option to your `clang-tidy`
+command line.
-If you wish to run the tests for the custom clang-tidy plugin you will also
-need `lit`. This will be built as part of LLVM, or you can install it via
-`pip` or your local package manager if you prefer.
+If you wish to run the tests for the custom clang-tidy plugin you will also need `lit`. This will be
+built as part of LLVM, or you can install it via `pip` or your local package manager if you prefer.
+
+Then, assuming `build` is your Cataclysm build directory, you can run the tests with
-Then, assuming `build` is your Cataclysm build directory, you can run the tests
-with
```sh
lit -v build/tools/clang-tidy-plugin/test
```
@@ -164,32 +187,33 @@ lit -v build/tools/clang-tidy-plugin/test
##### Build LLVM
To build LLVM on Windows, you'll first need to get some tools installed.
+
- Cmake
- Python 3
-- MinGW-w64 (other compilers may or may not work. Clang itself does not seem to be
-building LLVM on Windows correctly.)
+- MinGW-w64 (other compilers may or may not work. Clang itself does not seem to be building LLVM on
+ Windows correctly.)
- A shell environment
-After the tools are installed, a patch still needs to be applied before building
-LLVM, since `clang-tidy` as distributed by LLVM doesn't support plugins.
+After the tools are installed, a patch still needs to be applied before building LLVM, since
+`clang-tidy` as distributed by LLVM doesn't support plugins.
-First, clone the LLVM repo from, for example, [the official github repo](https://github.com/llvm/llvm-project.git).
-Checkout the `release/12.x` branch, since that's what our patch was based on.
+First, clone the LLVM repo from, for example,
+[the official github repo](https://github.com/llvm/llvm-project.git). Checkout the `release/12.x`
+branch, since that's what our patch was based on.
On Windows, in addition to applying `plugin-support.patch` mentioned in the previous section, you
should also apply
[`clang-tidy-scripts.patch`](https://github.com/jbytheway/clang-tidy-plugin-support/blob/master/clang-tidy-scripts.patch)
-so you can run the lit test with the custom clang-tidy executable and let
-clang-tidy apply suggestions automatically.
+so you can run the lit test with the custom clang-tidy executable and let clang-tidy apply
+suggestions automatically.
-After the patch is applied, you can then build the LLVM code. Unfortunately, it
-seems that clang itself cannot correctly compile the LLVM code on Windows (gives
-some sort of relocation error). Luckily, MinGW-w64 can be used instead to compile
-the code.
+After the patch is applied, you can then build the LLVM code. Unfortunately, it seems that clang
+itself cannot correctly compile the LLVM code on Windows (gives some sort of relocation error).
+Luckily, MinGW-w64 can be used instead to compile the code.
-The first step to build the code is to run CMake to generate the makefile. On
-the root dir of LLVM, run the following script (substitute values inside `<>`
-with the actual paths). Make sure CMake, python, and MinGW-w64 are on the path.
+The first step to build the code is to run CMake to generate the makefile. On the root dir of LLVM,
+run the following script (substitute values inside `<>` with the actual paths). Make sure CMake,
+python, and MinGW-w64 are on the path.
```sh
mkdir -p build
@@ -204,10 +228,10 @@ cmake \
../llvm
```
-The next step is to call `make` to actually build clang-tidy as a library.
-When using MinGW-w64 to build, you should call `mingw32-make` instead.
-Also, because `FileCheck` is not shipped with Windows, you'll also need to build
-it yourself using LLVM sources by adding the `FileCheck` target to the make command.
+The next step is to call `make` to actually build clang-tidy as a library. When using MinGW-w64 to
+build, you should call `mingw32-make` instead. Also, because `FileCheck` is not shipped with
+Windows, you'll also need to build it yourself using LLVM sources by adding the `FileCheck` target
+to the make command.
```sh
mkdir -p build
@@ -215,31 +239,33 @@ cd build
mingw32-make -j4 clang-tidy clangTidyMain FileCheck
```
-Here `clang-tidy` is only added to trigger the building of several targets that
-are needed to build our custom clang-tidy executable later.
+Here `clang-tidy` is only added to trigger the building of several targets that are needed to build
+our custom clang-tidy executable later.
##### Build clang-tidy with custom checks
-After building clang-tidy as a library from the LLVM source, the next step is to
-build clang-tidy as an executable, with the custom checks from the CDDA source.
+After building clang-tidy as a library from the LLVM source, the next step is to build clang-tidy as
+an executable, with the custom checks from the CDDA source.
In this step, the following tools are required.
+
- Python 3
- CMake
- MinGW-w64
- FileCheck (built from the LLVM source)
- A shell environment
-You also need to install yaml for python 3 to work. Download the `.whl` installer
-corresponding to your python version from [here](https://pyyaml.org/wiki/PyYAML)
-and execute the following command inside the `/Scripts` directory
+You also need to install yaml for python 3 to work. Download the `.whl` installer corresponding to
+your python version from [here](https://pyyaml.org/wiki/PyYAML) and execute the following command
+inside the `/Scripts` directory
+
```sh
pip install path/to/your/downloaded/file.whl
```
-Currently, the CDDA source is still building the custom checks as a plugin,
-which unfortunately is not supported on Windows, so the following patch needs to
-be applied before the custom checks can be built as an executable.
+Currently, the CDDA source is still building the custom checks as a plugin, which unfortunately is
+not supported on Windows, so the following patch needs to be applied before the custom checks can be
+built as an executable.
```patch
diff --git a/tools/clang-tidy-plugin/CMakeLists.txt b/tools/clang-tidy-plugin/CMakeLists.txt
@@ -309,18 +335,17 @@ index 496804316a..43beb49653 100644
config.substitutions.append(('%cata_plugin', cata_plugin))
```
-The next step is to run CMake to generate the compilation database. The compilation
-database contains compiler flags that clang-tidy uses to check the source files.
+The next step is to run CMake to generate the compilation database. The compilation database
+contains compiler flags that clang-tidy uses to check the source files.
-Make sure Python 3, CMake, MinGW-w64, and FileCheck are on the path.
-Note that two `bin` directories of MinGW-w64 should be on the path: `/bin`,
-and `/x86_64-w64-mingw32/bin`. FileCheck's path is `/build/bin`,
-if you built it with the instructions in the previous section.
+Make sure Python 3, CMake, MinGW-w64, and FileCheck are on the path. Note that two `bin` directories
+of MinGW-w64 should be on the path: `/bin`, and
+`/x86_64-w64-mingw32/bin`. FileCheck's path is `/build/bin`, if
+you built it with the instructions in the previous section.
-Then add the following CMake options to generate the compilation database
-(substitute values inside `<>` with the actual paths), and build the CDDA source
-and the custom clang-tidy executable with `mingw32-make`. In this tutorial we
-run CMake and `mingw32-make` in the `build` subdirectory.
+Then add the following CMake options to generate the compilation database (substitute values inside
+`<>` with the actual paths), and build the CDDA source and the custom clang-tidy executable with
+`mingw32-make`. In this tutorial we run CMake and `mingw32-make` in the `build` subdirectory.
```sh
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
@@ -333,22 +358,20 @@ run CMake and `mingw32-make` in the `build` subdirectory.
-DCATA_CHECK_CLANG_TIDY="/clang-tools-extra/test/clang-tidy/check_clang_tidy.py -clang-tidy=/build/tools/clang-tidy-plugin/CataAnalyzerPlugin.exe"
```
-Next, change the directory back to the source root, and run `tools/fix-compilation-database.py`
-with Python 3 to fix some errors in the compilation database. Then the compilation
-database should be usable by clang-tidy.
+Next, change the directory back to the source root, and run `tools/fix-compilation-database.py` with
+Python 3 to fix some errors in the compilation database. Then the compilation database should be
+usable by clang-tidy.
-If you want to check if the custom checks are working correctly, run the following
-script.
+If you want to check if the custom checks are working correctly, run the following script.
```sh
python3 /llvm/utils/lit/lit.py -v build/tools/clang-tidy-plugin/test
```
-Finally, use the following command to run clang-tidy with the custom checks.
-In the following command, the first line of "-extra-arg"s are used to tell
-clang-tidy to mimic g++ behavior, and the second line of "-extra-arg"s are
-used to tell clang-tidy to use clang's x86intrin.h instead of g++'s, so as
-to avoid compiler errors.
+Finally, use the following command to run clang-tidy with the custom checks. In the following
+command, the first line of "-extra-arg"s are used to tell clang-tidy to mimic g++ behavior, and the
+second line of "-extra-arg"s are used to tell clang-tidy to use clang's x86intrin.h instead of
+g++'s, so as to avoid compiler errors.
```sh
python3 /clang-tools-extra/clang-tidy/tool/run-clang-tidy.py \
@@ -358,24 +381,24 @@ python3 /clang-tools-extra/clang-tidy/tool/run-clang-tidy.py \
-extra-arg=-isystem -extra-arg=/clang/lib/Headers
```
-You can also add `-fix-errors` to apply fixes reported by the checks, or
-`-checks="-*,xxx,yyy"` to specify the checks you would like to run.
+You can also add `-fix-errors` to apply fixes reported by the checks, or `-checks="-*,xxx,yyy"` to
+specify the checks you would like to run.
## include-what-you-use
-[include-what-you-use](https://github.com/include-what-you-use/include-what-you-use)
-(IWYU) is a project intended to optimise includes. It will calculate the
-required headers and add and remove includes as appropriate.
+[include-what-you-use](https://github.com/include-what-you-use/include-what-you-use) (IWYU) is a
+project intended to optimise includes. It will calculate the required headers and add and remove
+includes as appropriate.
-Running on this codebase revealed some issues. You will need a version of IWYU
-where the following PR has been merged (which has not yet happened at time of
-writing, but with luck might make it into the clang-10 release of IWYU):
+Running on this codebase revealed some issues. You will need a version of IWYU where the following
+PR has been merged (which has not yet happened at time of writing, but with luck might make it into
+the clang-10 release of IWYU):
-* https://github.com/include-what-you-use/include-what-you-use/pull/775
+- https://github.com/include-what-you-use/include-what-you-use/pull/775
-Once you have IWYU built, build the codebase using cmake, with
-`CMAKE_EXPORT_COMPILE_COMMANDS=ON` on to create a compilation database
-(Look for `compile_commands.json` in the build dir to see whether that worked).
+Once you have IWYU built, build the codebase using cmake, with `CMAKE_EXPORT_COMPILE_COMMANDS=ON` on
+to create a compilation database (Look for `compile_commands.json` in the build dir to see whether
+that worked).
Then run:
@@ -383,46 +406,40 @@ Then run:
iwyu_tool.py -p $CMAKE_BUILD_DIR/compile_commands.json -- -Xiwyu --mapping_file=$PWD/tools/iwyu/cata.imp | fix_includes.py --nosafe_headers --reorder
```
-IWYU will sometimes add C-style library headers which clang-tidy doesn't like,
-so you might need to run clang-tidy (as described above) and then re-run IWYU a
-second time.
-
-There are mapping files in `tools/iwyu` intended to help IWYU pick the right
-headers. Mostly they should be fairly obvious, but the SDL mappings might
-warrant further explanation. We want to force most SDL includes to go via
-`sdl_wrappers.h`, because that handles the platform-dependence issues (the
-include paths are different on Windows). There are a couple of exceptions
-(`SDL_version.h` and `SDL_mixer.h`). The former is because `main.cpp` can't
-include all SDL headers, because they `#define WinMain`. All the mappings in
-`sdl.imp` are designed to make this happen.
-
-We have to use IWYU pragmas in some situations. Some of the reasons are:
-
-* IWYU has a concept of [associated
- headers](https://github.com/include-what-you-use/include-what-you-use/blob/master/docs/IWYUPragmas.md#iwyu-pragma-associated),
- where each cpp file can have some number of such headers. The cpp file is
- expected to define the things declared in those headers. In Cata, the
- mapping between headers and cpp files is not nearly so simple, so there are
- files with multiple associated headers, and files with none. Headers that
- are not the associated header of any cpp file will not get their includes
- updated, which could lead to broken builds, so ideally all headers would be
- associated to some cpp file. You can use the following command to get a list
- of headers which are not currently associated to any cpp file (requires GNU
- sed):
+IWYU will sometimes add C-style library headers which clang-tidy doesn't like, so you might need to
+run clang-tidy (as described above) and then re-run IWYU a second time.
+
+There are mapping files in `tools/iwyu` intended to help IWYU pick the right headers. Mostly they
+should be fairly obvious, but the SDL mappings might warrant further explanation. We want to force
+most SDL includes to go via `sdl_wrappers.h`, because that handles the platform-dependence issues
+(the include paths are different on Windows). There are a couple of exceptions (`SDL_version.h` and
+`SDL_mixer.h`). The former is because `main.cpp` can't include all SDL headers, because they
+`#define WinMain`. All the mappings in `sdl.imp` are designed to make this happen.
+
+We have to use IWYU pragmas in some situations. Some of the reasons are:
+
+- IWYU has a concept of
+ [associated headers](https://github.com/include-what-you-use/include-what-you-use/blob/master/docs/IWYUPragmas.md#iwyu-pragma-associated),
+ where each cpp file can have some number of such headers. The cpp file is expected to define the
+ things declared in those headers. In Cata, the mapping between headers and cpp files is not nearly
+ so simple, so there are files with multiple associated headers, and files with none. Headers that
+ are not the associated header of any cpp file will not get their includes updated, which could
+ lead to broken builds, so ideally all headers would be associated to some cpp file. You can use
+ the following command to get a list of headers which are not currently associated to any cpp file
+ (requires GNU sed):
```
diff <(ls src/*.h | sed 's!.*/!!') <(for i in src/*.cpp; do echo $i; sed -n '/^#include/{p; :loop n; p; /^$/q; b loop}' $i; done | grep 'e "' | grep -o '"[^"]*"' | sort -u | tr -d '"')
```
-* Due to a [clang bug](https://bugs.llvm.org/show_bug.cgi?id=20666), uses in
- template arguments to explicit instantiations are not counted, which leads to
- some need for `IWYU pragma: keep`.
+- Due to a [clang bug](https://bugs.llvm.org/show_bug.cgi?id=20666), uses in template arguments to
+ explicit instantiations are not counted, which leads to some need for `IWYU pragma: keep`.
-* Due to
+- Due to
[these](https://github.com/include-what-you-use/include-what-you-use/blob/4909f206b46809775e9b5381f852eda62cbf4bf7/iwyu.cc#L1617)
[missing](https://github.com/include-what-you-use/include-what-you-use/blob/4909f206b46809775e9b5381f852eda62cbf4bf7/iwyu.cc#L1629)
- features of IWYU, it does not count uses in template arguments to return
- types, which leads to other requirements for `IWYU pragma: keep`.
+ features of IWYU, it does not count uses in template arguments to return types, which leads to
+ other requirements for `IWYU pragma: keep`.
-* IWYU seems to have particular trouble with types used in maps. Have not looked into this in detail, but again worked
- around it with pragmas.
+- IWYU seems to have particular trouble with types used in maps. Have not looked into this in
+ detail, but again worked around it with pragmas.
diff --git a/doc/EFFECTS_JSON.md b/doc/EFFECTS_JSON.md
index 5ac83156ad3a..0d7d3e2e3416 100644
--- a/doc/EFFECTS_JSON.md
+++ b/doc/EFFECTS_JSON.md
@@ -1,31 +1,39 @@
# Effect data
## How to give effects in-game?
+
### Comestibles
-The first way to give a player an effect in-game is through the drug system. To do this your item must have a use_action of type "consume_drug".
-```C++
- "use_action" : {
- "type" : "consume_drug",
- "activation_message" : "You take some oxycodone.",
- "effects" : [
- {
- "id": "pkill3",
- "duration": 20
- },
- {
- "id": "pkill2",
- "duration": 200
- }
- ]
- },
+
+The first way to give a player an effect in-game is through the drug system. To do this your item
+must have a use_action of type "consume_drug".
+
+```C++
+"use_action" : {
+ "type" : "consume_drug",
+ "activation_message" : "You take some oxycodone.",
+ "effects" : [
+ {
+ "id": "pkill3",
+ "duration": 20
+ },
+ {
+ "id": "pkill2",
+ "duration": 200
+ }
+ ]
+},
```
+
Notice the "effects" field. Each effect has four potential fields:
+
```C++
"id" - Required
"duration" - Required
"bp" - This will cause the effect to target this body part specifically
```
+
Valid "bp" entries are (no entry means the effect is untargeted):
+
```C++
"torso"
"head"
@@ -42,120 +50,145 @@ Valid "bp" entries are (no entry means the effect is untargeted):
```
### Creature attacks
-Creatures have an effect field similar to the "consume_drug" entry for items. You can make a creature's attacks apply effects by adding an "attack_effs" entry for the creature.
+
+Creatures have an effect field similar to the "consume_drug" entry for items. You can make a
+creature's attacks apply effects by adding an "attack_effs" entry for the creature.
+
```C++
- "attack_effs": [
- {
- "//": "applying this multiple times makes intensity go up by 3 instead of 1",
- "id": "paralyzepoison",
- "duration": 33
- },
- {
- "id": "paralyzepoison",
- "duration": 33
- },
- {
- "id": "paralyzepoison",
- "duration": 33
- }
- ],
+"attack_effs": [
+ {
+ "//": "applying this multiple times makes intensity go up by 3 instead of 1",
+ "id": "paralyzepoison",
+ "duration": 33
+ },
+ {
+ "id": "paralyzepoison",
+ "duration": 33
+ },
+ {
+ "id": "paralyzepoison",
+ "duration": 33
+ }
+],
```
-The fields for "attack_effs" function identically to the ones for "consume_drug". However, creatures have an additional field:
+
+The fields for "attack_effs" function identically to the ones for "consume_drug". However, creatures
+have an additional field:
+
```C++
"chance" - The percentage chance of the effect being applied on a good hit, defaults to 100%
```
-If a creature successfully damages the player and their chance roll succeeds they will apply
-all of the listed effects to the player. The effects are added one after another.
+
+If a creature successfully damages the player and their chance roll succeeds they will apply all of
+the listed effects to the player. The effects are added one after another.
## Required fields
+
```C++
- "type": "effect_type", - Required
- "id": "xxxx" - Must be unique
+"type": "effect_type", - Required
+"id": "xxxx" - Must be unique
```
## Optional fields
### Max intensity
+
```C++
- "max_intensity": 3 - Used for many later fields, defaults to 1
- "max_effective_intensity" - How many intensity levels will apply effects.
- Other intensity levels will only increase duration.
+"max_intensity": 3 - Used for many later fields, defaults to 1
+"max_effective_intensity" - How many intensity levels will apply effects.
+ Other intensity levels will only increase duration.
```
### Name
+
```C++
- "name": ["XYZ"]
- or
- "name": [
- "ABC",
- "XYZ",
- "123"
- ]
+"name": ["XYZ"]
+or
+"name": [
+ "ABC",
+ "XYZ",
+ "123"
+]
```
-If "max_intensity" > 1 and the number of entries in "name" >= "max_intensity" then
-it will attempt to use the proper intensity name. In this case that means an intensity
-of 1 would give the name "ABC", 2 would give "XYZ", and 3 would give "123". If "max_intensity" == 1
-or the number of entries in "name" is less than "max_intensity", it will use the first entry followed by
-the intensity in brackets if the current intensity > 1, i.e. "ABC", "ABC [2]", "ABC [3]". If the desired
-entry of "name" is the empty string ("") or "name" is missing then the effect will not display to the player
+
+If "max_intensity" > 1 and the number of entries in "name" >= "max_intensity" then it will attempt
+to use the proper intensity name. In this case that means an intensity of 1 would give the name
+"ABC", 2 would give "XYZ", and 3 would give "123". If "max_intensity" == 1 or the number of entries
+in "name" is less than "max_intensity", it will use the first entry followed by the intensity in
+brackets if the current intensity > 1, i.e. "ABC", "ABC [2]", "ABC [3]". If the desired entry of
+"name" is the empty string ("") or "name" is missing then the effect will not display to the player
in the status screen.
Each entry in "name" can also have an optional context:
+
```JSON
- "name": [ { "ctxt": "ECIG", "str": "Smoke" } ]
+"name": [ { "ctxt": "ECIG", "str": "Smoke" } ]
```
-In this case, the game will translate the name with the given context "ECIG",
-which makes it possible to distinguish the verb "Smoke" from the noun "Smoke"
-in other languages.
+
+In this case, the game will translate the name with the given context "ECIG", which makes it
+possible to distinguish the verb "Smoke" from the noun "Smoke" in other languages.
```C++
- "speed_name" : "XYZ" - Defaults to the first name value
+"speed_name" : "XYZ" - Defaults to the first name value
```
-This is the value used in the list of modifiers on a player's speed. It will default to the first entry in "name"
-if it doesn't exist, and if neither one exists or if "speed_name" is the empty string (""), then it will not
-appear in the list of modifiers on the players speed (though the effect might still have an effect).
+
+This is the value used in the list of modifiers on a player's speed. It will default to the first
+entry in "name" if it doesn't exist, and if neither one exists or if "speed_name" is the empty
+string (""), then it will not appear in the list of modifiers on the players speed (though the
+effect might still have an effect).
### Descriptions
+
```C++
- "desc": ["XYZ"]
- or
- "desc": [
- "ABC",
- "XYZ",
- "123"
- ]
+"desc": ["XYZ"]
+or
+"desc": [
+ "ABC",
+ "XYZ",
+ "123"
+]
```
-Descriptions operate identically to the name field when picking which one to use. In general, descriptions
-should be only 1 line. Stats and effects do not need to be included, and will be automatically generated
-from the other effect data. Should a description line be the empty string ("") it will only display the
-stat changes in the effect description.
+
+Descriptions operate identically to the name field when picking which one to use. In general,
+descriptions should be only 1 line. Stats and effects do not need to be included, and will be
+automatically generated from the other effect data. Should a description line be the empty string
+("") it will only display the stat changes in the effect description.
Descriptions also have a second field that can act as a modifier:
+
```C++
- "part_descs": true - Defaults to false if not present
+"part_descs": true - Defaults to false if not present
```
-If "part_descs" == true then descriptions are preceded by "Your X", where X is the body part name, meaning
-the prior descriptions would appear as "Your left arm ABC".
+
+If "part_descs" == true then descriptions are preceded by "Your X", where X is the body part name,
+meaning the prior descriptions would appear as "Your left arm ABC".
Descriptions can also have a reduced form:
+
```C++
- "reduced_desc": ["XYZ"]
- or
- "reduced_desc": [
- "ABC",
- "XYZ",
- "123"
- ]
+"reduced_desc": ["XYZ"]
+or
+"reduced_desc": [
+ "ABC",
+ "XYZ",
+ "123"
+]
```
-This is the description that will be used if an effect is reduced. By default this will use the normal description
-if it doesn't exist.
+
+This is the description that will be used if an effect is reduced. By default this will use the
+normal description if it doesn't exist.
### Rating
+
```C++
- "rating": "good" - Defaults to "neutral" if missing
+"rating": "good" - Defaults to "neutral" if missing
```
-This is used for how the messages when the effect is applied and removed are displayed. Also this affects "blood_analysis_description" (see below) field: effects with "good" rating will be colored green, effects with any other rating will be colored red when character conducts a blood analysis through some means.
-Valid entries are:
+
+This is used for how the messages when the effect is applied and removed are displayed. Also this
+affects "blood_analysis_description" (see below) field: effects with "good" rating will be colored
+green, effects with any other rating will be colored red when character conducts a blood analysis
+through some means. Valid entries are:
+
```C++
"good"
"neutral"
@@ -164,154 +197,195 @@ Valid entries are:
```
### Messages
+
```C++
- "apply_message": "message",
- "remove_message": "message"
+"apply_message": "message",
+"remove_message": "message"
```
-If the "apply_message" or "remove_message" fields exist, the respective message will be
-displayed upon the addition or removal of the effect. Note: "apply_message" will only display
-if the effect is being added, not if it is simply incrementing a current effect (so only new bites, etc.).
+
+If the "apply_message" or "remove_message" fields exist, the respective message will be displayed
+upon the addition or removal of the effect. Note: "apply_message" will only display if the effect is
+being added, not if it is simply incrementing a current effect (so only new bites, etc.).
### Memorial Log
+
```C++
- "apply_memorial_log": "log",
- "remove_memorial_log": "log"
+"apply_memorial_log": "log",
+"remove_memorial_log": "log"
```
-If the "apply_memorial_log" or "remove_memorial_log" fields exist, the game will add the
-respective message to the memorial log on addition or removal of the effect. Similar to
-the message fields the "apply_memorial_log" will only be added to the log for new effect additions.
+
+If the "apply_memorial_log" or "remove_memorial_log" fields exist, the game will add the respective
+message to the memorial log on addition or removal of the effect. Similar to the message fields the
+"apply_memorial_log" will only be added to the log for new effect additions.
### Resistances
+
```C++
- "resist_trait": "NOPAIN",
- "resist_effect": "flumed"
+"resist_trait": "NOPAIN",
+"resist_effect": "flumed"
```
+
These fields are used to determine if an effect is being resisted or not. If the player has the
-matching trait or effect then they are "resisting" the effect, which changes its effects and description.
-Effects can only have one "resist_trait" and one "resist_effect" at a time.
+matching trait or effect then they are "resisting" the effect, which changes its effects and
+description. Effects can only have one "resist_trait" and one "resist_effect" at a time.
### Removes effects
+
```C++
- "removes_effects": ["bite", "flu"]
+"removes_effects": ["bite", "flu"]
```
-This field will cause an effect to automatically remove any other copies of the listed effects if they are present.
-In the example above the placed effect would automatically cure any bite wounds or flu the player had. Any values here
-automatically count for "blocks_effects" as well, no need to duplicate them there.
+
+This field will cause an effect to automatically remove any other copies of the listed effects if
+they are present. In the example above the placed effect would automatically cure any bite wounds or
+flu the player had. Any values here automatically count for "blocks_effects" as well, no need to
+duplicate them there.
### Blocks effects
+
```C++
- "blocks_effects": ["cold", "flu"]
+"blocks_effects": ["cold", "flu"]
```
-This field will cause an effect to prevent the placement of the listed effects. In the example above the effect would
-prevent the player from catching the cold or the flu (BUT WOULD NOT CURE ANY ONGOING COLDS OR FLUS). Any effects present
-in "removes_effects" are automatically added to "blocks_effects", no need for manual duplication.
+
+This field will cause an effect to prevent the placement of the listed effects. In the example above
+the effect would prevent the player from catching the cold or the flu (BUT WOULD NOT CURE ANY
+ONGOING COLDS OR FLUS). Any effects present in "removes_effects" are automatically added to
+"blocks_effects", no need for manual duplication.
### Effect limiters
+
```C++
- "max_duration": 100,
- "dur_add_perc": 150 - Defaults to 100%
+"max_duration": 100,
+"dur_add_perc": 150 - Defaults to 100%
```
-These are utilized when adding to currently existing effects. "max_duration" limits the overall duration of the effect.
-"dur_add_perc" is the percentage value of the normal duration for adding to an existing. An example:
-1) I add effect A to the player for 100 ticks.
-2) I add effect A to the player again for 100 ticks.
-Because the "dur_add_perc" = 150 in the example above, the second addition adds a total of 100 * 150% = 150 ticks, for
-a total value of 250 ticks from the two. This can also be below 100%, and should be able to even be negative, leading to
-future applications decreasing the overall time left.
+
+These are utilized when adding to currently existing effects. "max_duration" limits the overall
+duration of the effect. "dur_add_perc" is the percentage value of the normal duration for adding to
+an existing. An example:
+
+1. I add effect A to the player for 100 ticks.
+2. I add effect A to the player again for 100 ticks. Because the "dur_add_perc" = 150 in the example
+ above, the second addition adds a total of 100 * 150% = 150 ticks, for a total value of 250 ticks
+ from the two. This can also be below 100%, and should be able to even be negative, leading to
+ future applications decreasing the overall time left.
### Intensities
+
Intensities are used to control effect effects, names, and descriptions. They are defined with:
+
```C++
- "int_add_val": 2 - Defaults to 0! This means future applications will not increase intensity unless changed!
- and/or
- "int_decay_step": -2, - Defaults to -1
- "int_decay_tick": 10
- or
- "int_dur_factor": 700
+"int_add_val": 2 - Defaults to 0! This means future applications will not increase intensity unless changed!
+and/or
+"int_decay_step": -2, - Defaults to -1
+"int_decay_tick": 10
+or
+"int_dur_factor": 700
```
-The first value is the amount an intensity will be incremented if adding to an already existing effect. As an example:
-1) I add effect A to the player
-2) I add effect A to the player again
-Because "int_add_val" = 2, the second addition will change the effect intensity from 1 to 1 + 2 = 3.
-NOTE: You must have at least one of the 3 intensity data sets for intensity to do anything!
-"int_decay_step" and "int_decay_tick" require one another to do anything. If both exist then the game will automatically
-increment the current effect intensities by "int_decay_step" every "int_decay_tick" ticks, capping the result at [1, "max_intensity"].
-This can be used to make effects automatically increase or decrease in intensity over time.
+The first value is the amount an intensity will be incremented if adding to an already existing
+effect. As an example:
+
+1. I add effect A to the player
+2. I add effect A to the player again Because "int_add_val" = 2, the second addition will change the
+ effect intensity from 1 to 1 + 2 = 3. NOTE: You must have at least one of the 3 intensity data
+ sets for intensity to do anything!
+
+"int_decay_step" and "int_decay_tick" require one another to do anything. If both exist then the
+game will automatically increment the current effect intensities by "int_decay_step" every
+"int_decay_tick" ticks, capping the result at [1, "max_intensity"]. This can be used to make effects
+automatically increase or decrease in intensity over time.
-"int_dur_factor" overrides the other three intensities fields, and forces the intensity to be a number defined as
-intensity = duration / "int_dur_factor" rounded up (so from 0 to "int_dur_factor" is intensity 1).
+"int_dur_factor" overrides the other three intensities fields, and forces the intensity to be a
+number defined as intensity = duration / "int_dur_factor" rounded up (so from 0 to "int_dur_factor"
+is intensity 1).
### Permanence
-An effect that is permanent does not lose duration with time.
-That is, even if its duration is 1 turn, it will last until removed.
+
+An effect that is permanent does not lose duration with time. That is, even if its duration is 1
+turn, it will last until removed.
+
```C++
- "permanent": true
+"permanent": true
```
### Miss messages
+
```C++
- "miss_messages": [["Your blisters distract you", 1]]
- or
- "miss_messages": [
- ["Your blisters distract you", 1],
- ["Your blisters don't like you", 10],
- ]
+"miss_messages": [["Your blisters distract you", 1]]
+or
+"miss_messages": [
+ ["Your blisters distract you", 1],
+ ["Your blisters don't like you", 10],
+]
```
+
This will add the following miss messages at the given chances while the effect is in effect.
### Decay messages
+
```C++
- "decay_messages": [["The jet injector's chemicals wear off. You feel AWFUL!", "bad"]]
- or
- "decay_messages": [
- ["The jet injector's chemicals wear off. You feel AWFUL!", "bad"],
- ["OOGA-BOOGA. You feel AWFUL!", "bad"],
- ]
+"decay_messages": [["The jet injector's chemicals wear off. You feel AWFUL!", "bad"]]
+or
+"decay_messages": [
+ ["The jet injector's chemicals wear off. You feel AWFUL!", "bad"],
+ ["OOGA-BOOGA. You feel AWFUL!", "bad"],
+]
```
-The messages are matched to intensities, so the first message is for intensity 1, the second for intensity 2, and
-so on. The messages will print whenever the intensity decreases to their matching intensity from a higher intensity,
-whether through decay ticks or through "int_dur_factor". So if it decayed to intensity 2 from 3+ it would display
-"OOGA-BOOGA. You feel AWFUL!" as a bad message to the player.
+
+The messages are matched to intensities, so the first message is for intensity 1, the second for
+intensity 2, and so on. The messages will print whenever the intensity decreases to their matching
+intensity from a higher intensity, whether through decay ticks or through "int_dur_factor". So if it
+decayed to intensity 2 from 3+ it would display "OOGA-BOOGA. You feel AWFUL!" as a bad message to
+the player.
### Targeting modifiers
+
```C++
- "main_parts_only": true - Defaults to false
+"main_parts_only": true - Defaults to false
```
+
This automatically retargets any effect on a non-main part (hands, eyes, feet, etc.) to the matching
main part (arms, head, legs, etc.).
### Effect modifiers
+
```C++
- "pkill_addict_reduces": true, - Defaults to false
- "pain_sizing": true, - Defaults to false
- "hurt_sizing": true, - Defaults to false
- "harmful_cough": true - Defaults to false
+"pkill_addict_reduces": true, - Defaults to false
+"pain_sizing": true, - Defaults to false
+"hurt_sizing": true, - Defaults to false
+"harmful_cough": true - Defaults to false
```
-"pkill_addict_reduces" makes a player's addiction to painkillers reduce the chance of the effect giving
-them more pkill. "pain_sizing" and "hurt_sizing" cause large/huge mutations to affect the chance of pain
-and hurt effects triggering. "harmful_cough" means that the coughs caused by this effect can hurt the player.
+
+"pkill_addict_reduces" makes a player's addiction to painkillers reduce the chance of the effect
+giving them more pkill. "pain_sizing" and "hurt_sizing" cause large/huge mutations to affect the
+chance of pain and hurt effects triggering. "harmful_cough" means that the coughs caused by this
+effect can hurt the player.
### Morale
+
```C++
- "morale": "morale_high"
+"morale": "morale_high"
```
-Type of morale effect provided. Mandatory if there is a morale effect, must not be specified otherwise.
+
+Type of morale effect provided. Mandatory if there is a morale effect, must not be specified
+otherwise.
### Effect effects
+
```C++
- "base_mods" : {
- arguments
- },
- "scaling_mods": {
- arguments
- }
+"base_mods" : {
+ arguments
+},
+"scaling_mods": {
+ arguments
+}
```
-This is where the real meat of the effect JSON definition lies. Each one can take a variety of arguments.
-Decimals are valid but must be formatted as "0.X" or "-0.X". The game will round towards zero at the end
-when calculating actually applied values
+
+This is where the real meat of the effect JSON definition lies. Each one can take a variety of
+arguments. Decimals are valid but must be formatted as "0.X" or "-0.X". The game will round towards
+zero at the end when calculating actually applied values
Basic definitions:
+
```C++
"X_amount" - Amount applied of X when effect is placed. Like apply messages it will only trigger on new effects
"X_min" - Minimum amount of X applied when roll triggers
@@ -324,6 +398,7 @@ Basic definitions:
```
Valid arguments:
+
```C++
"str_mod" - Positive values raises stat, negative values lowers stat
"dex_mod" - Positive values raises stat, negative values lowers stat
@@ -445,73 +520,79 @@ Valid arguments:
"healing_torso" - Percentage of healing value for torso
"morale" - Amount of morale provided. Must be a single number (resistance not supported).
-
```
+
Each argument can also take either one or two values.
+
```C++
- "thirst_min": [1]
- or
- "thirst_min": [1, 2]
+"thirst_min": [1]
+or
+"thirst_min": [1, 2]
```
-If an effect is "resisted" (either through "resist_effect" or "resist_trait") then it will use the second
-value. If there is only one value given it will always use that amount.
-Base mods and Scaling mods:
-While on intensity = 1 an effect will only have the basic effects of its "base_mods". However for each
-additional intensity it gains it adds the value of each of its "scaling_mods" to the calculations. So:
+If an effect is "resisted" (either through "resist_effect" or "resist_trait") then it will use the
+second value. If there is only one value given it will always use that amount.
+
+Base mods and Scaling mods: While on intensity = 1 an effect will only have the basic effects of its
+"base_mods". However for each additional intensity it gains it adds the value of each of its
+"scaling_mods" to the calculations. So:
+
```C++
Intensity 1 values = base_mods values
Intensity 2 values = base_mods values + scaling_mods values
Intensity 3 values = base_mods values + 2 * scaling_mods values
Intensity 4 values = base_mods values + 3 * scaling_mods values
```
+
and so on.
-Special case:
-The only special case is if base_mods' "X_chance_bot" + intensity * scaling_mods' "X_chance_bot" = 0 then it treats it
-as if it were equal to 1 (i.e. trigger every time)
+Special case: The only special case is if base_mods' "X_chance_bot" + intensity * scaling_mods'
+"X_chance_bot" = 0 then it treats it as if it were equal to 1 (i.e. trigger every time)
## Example Effect
+
```C++
- "type": "effect_type",
- "id": "drunk",
- "name": [
- "Tipsy",
- "Drunk",
- "Trashed",
- "Wasted"
- ],
- "max_intensity": 4,
- "apply_message": "You feel lightheaded.",
- "int_dur_factor": 1000,
- "miss_messages": [["You feel woozy.", 1]],
- "morale": "morale_drunk",
- "base_mods": {
- "str_mod": [1],
- "vomit_chance": [-43],
- "sleep_chance": [-1003],
- "sleep_min": [2500],
- "sleep_max": [3500],
- "morale": [ 5 ]
- },
- "scaling_mods": {
- "str_mod": [-0.67],
- "per_mod": [-1],
- "dex_mod": [-1],
- "int_mod": [-1.42],
- "vomit_chance": [21],
- "sleep_chance": [501],
- "morale": [ 10 ]
- }
-```
-First when "drunk" is applied to the player if they aren't already drunk it prints the message,
-"You feel lightheaded". It also adds the "You feel woozy" miss message for as long as it is applied.
-It has "int_dur_factor": 1000, meaning that its intensity will always be equal to its duration / 1000 rounded up, and
-it has "max_intensity": 4 meaning the highest its intensity will go is 4 at a duration of 3000 or higher.
-As it moves up through the different intensities, its name will change. Its description will simply display the stat
-changes, with no additional description added.
+"type": "effect_type",
+"id": "drunk",
+"name": [
+ "Tipsy",
+ "Drunk",
+ "Trashed",
+ "Wasted"
+],
+"max_intensity": 4,
+"apply_message": "You feel lightheaded.",
+"int_dur_factor": 1000,
+"miss_messages": [["You feel woozy.", 1]],
+"morale": "morale_drunk",
+"base_mods": {
+ "str_mod": [1],
+ "vomit_chance": [-43],
+ "sleep_chance": [-1003],
+ "sleep_min": [2500],
+ "sleep_max": [3500],
+ "morale": [ 5 ]
+},
+"scaling_mods": {
+ "str_mod": [-0.67],
+ "per_mod": [-1],
+ "dex_mod": [-1],
+ "int_mod": [-1.42],
+ "vomit_chance": [21],
+ "sleep_chance": [501],
+ "morale": [ 10 ]
+}
+```
+
+First when "drunk" is applied to the player if they aren't already drunk it prints the message, "You
+feel lightheaded". It also adds the "You feel woozy" miss message for as long as it is applied. It
+has "int_dur_factor": 1000, meaning that its intensity will always be equal to its duration / 1000
+rounded up, and it has "max_intensity": 4 meaning the highest its intensity will go is 4 at a
+duration of 3000 or higher. As it moves up through the different intensities, its name will change.
+Its description will simply display the stat changes, with no additional description added.
As it moves up through the intensity levels its effects will be:
+
```C++
Intensity 1
+1 STR
@@ -544,7 +625,10 @@ Intensity 4
```
### Blood analysis description
+
```C++
- "blood_analysis_description": "Minor Painkiller"
+"blood_analysis_description": "Minor Painkiller"
```
-This description will be displayed for every effect which has this field when character conducts a blood analysis (for example, through Blood Analysis CBM).
\ No newline at end of file
+
+This description will be displayed for every effect which has this field when character conducts a
+blood analysis (for example, through Blood Analysis CBM).
diff --git a/doc/FACTIONS.md b/doc/FACTIONS.md
index 7ac113c732ec..0ce0c9a2fc95 100644
--- a/doc/FACTIONS.md
+++ b/doc/FACTIONS.md
@@ -3,78 +3,84 @@
An NPC faction looks like this:
```json
- {
- "type": "faction",
- "id": "free_merchants",
- "name": "The Free Merchants",
- "likes_u": 30,
- "respects_u": 30,
- "known_by_u": false,
- "size": 100,
- "power": 100,
- "food_supply": 115200,
- "lone_wolf_faction": true,
- "wealth": 75000000,
- "currency": "FMCNote",
- "relations": {
- "free_merchants": {
- "kill on sight": false,
- "watch your back": true,
- "share my stuff": true,
- "guard your stuff": true,
- "lets you in": true,
- "defends your space": true,
- "knows your voice": true
- },
- "old_guard": {
- "kill on sight": false,
- "watch your back": true,
- "share my stuff": false,
- "guard your stuff": true,
- "lets you in": true,
- "defends your space": true,
- "knows your voice": true
- },
- "hells_raiders": {
- "kill on sight": true
- }
- },
- "description": "A conglomeration of entrepreneurs and businessmen that stand together to hammer-out an existence through trade and industry."
- },
+{
+ "type": "faction",
+ "id": "free_merchants",
+ "name": "The Free Merchants",
+ "likes_u": 30,
+ "respects_u": 30,
+ "known_by_u": false,
+ "size": 100,
+ "power": 100,
+ "food_supply": 115200,
+ "lone_wolf_faction": true,
+ "wealth": 75000000,
+ "currency": "FMCNote",
+ "relations": {
+ "free_merchants": {
+ "kill on sight": false,
+ "watch your back": true,
+ "share my stuff": true,
+ "guard your stuff": true,
+ "lets you in": true,
+ "defends your space": true,
+ "knows your voice": true
+ },
+ "old_guard": {
+ "kill on sight": false,
+ "watch your back": true,
+ "share my stuff": false,
+ "guard your stuff": true,
+ "lets you in": true,
+ "defends your space": true,
+ "knows your voice": true
+ },
+ "hells_raiders": {
+ "kill on sight": true
+ }
+ },
+ "description": "A conglomeration of entrepreneurs and businessmen that stand together to hammer-out an existence through trade and industry."
+},
```
-Field | Meaning
--- | --
-`"type"` | string, must be `"faction"`
-`"id"` | string, unique faction id
-`"name"` | string, the faction's common name
-`"likes_u"` | integer, the faction's starting opinion of the player. `"likes_u"` can be increased or decreased in play. If it goes below -10, members of the faction will be hostile.
-`"respects_u"` | integer, the faction's starting opinionof the player. Has no meaningful effect in game and may be removed in the future.
-`"known_by_u"` | boolean, whether the player has met members of the faction. Can be changed in play. Unknown factions will not be displayed in the faction menu.
-`"size"` | integer, an approximate count of the members of the faction. Has no effect in play currently.
-`"power"` | integer, an approximation of the faction's power. Has no effect in play currently.
-`"food_supply"` | integer, the number of calories available to the faction. Has no effect in play currently.
-`"wealth"` | integer, number of post-apocalyptic currency in cents that that faction has to purchase stuff.
-`"currency"` | string, the item `"id"` of the faction's preferred currency. Faction shopkeeps will trade faction current at 100% value, for both selling and buying.
-`"relations"` | dictionary, a description of how the faction sees other factions. See below
-`"mon_faction"` | string, optional. The monster faction `"name"` of the monster faction that this faction counts as. Defaults to "human" if unspecified.
-`"lone_wolf_faction"` | bool, optional. This is a proto/micro faction template that is used to generate 1-person factions for dynamically spawned NPCs, defaults to "false" if unspecified.
+| Field | Meaning |
+| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `"type"` | string, must be `"faction"` |
+| `"id"` | string, unique faction id |
+| `"name"` | string, the faction's common name |
+| `"likes_u"` | integer, the faction's starting opinion of the player. `"likes_u"` can be increased or decreased in play. If it goes below -10, members of the faction will be hostile. |
+| `"respects_u"` | integer, the faction's starting opinionof the player. Has no meaningful effect in game and may be removed in the future. |
+| `"known_by_u"` | boolean, whether the player has met members of the faction. Can be changed in play. Unknown factions will not be displayed in the faction menu. |
+| `"size"` | integer, an approximate count of the members of the faction. Has no effect in play currently. |
+| `"power"` | integer, an approximation of the faction's power. Has no effect in play currently. |
+| `"food_supply"` | integer, the number of calories available to the faction. Has no effect in play currently. |
+| `"wealth"` | integer, number of post-apocalyptic currency in cents that that faction has to purchase stuff. |
+| `"currency"` | string, the item `"id"` of the faction's preferred currency. Faction shopkeeps will trade faction current at 100% value, for both selling and buying. |
+| `"relations"` | dictionary, a description of how the faction sees other factions. See below |
+| `"mon_faction"` | string, optional. The monster faction `"name"` of the monster faction that this faction counts as. Defaults to "human" if unspecified. |
+| `"lone_wolf_faction"` | bool, optional. This is a proto/micro faction template that is used to generate 1-person factions for dynamically spawned NPCs, defaults to "false" if unspecified. |
## Faction relations
-Factions can have relations with each other that apply to each member of the faction. Faction relationships are not reciprocal: members of the Free Merchants will defend members of the Lobby Beggars, but members of the Lobby Beggars will not defend members of the Free Merchants.
-Faction relationships are stored in a dictionary, with the dictionary keys being the name of the faction and the values being a second dictionary of boolean flags. All flags are optional and default to false. The faction with the dictionary is the acting faction and the other faction is the object faction.
+Factions can have relations with each other that apply to each member of the faction. Faction
+relationships are not reciprocal: members of the Free Merchants will defend members of the Lobby
+Beggars, but members of the Lobby Beggars will not defend members of the Free Merchants.
+
+Faction relationships are stored in a dictionary, with the dictionary keys being the name of the
+faction and the values being a second dictionary of boolean flags. All flags are optional and
+default to false. The faction with the dictionary is the acting faction and the other faction is the
+object faction.
The flags have the following meanings:
-Flag | Meaning
--- | --
-`"kill on sight"` | Members of the acting faction are always hostile to members of the object faction.
-`"watch your back"` | Members of the acting faction will treat attacks on members of the object faction as attacks on themselves.
-`"share my stuff"` | Members of the acting faction will not object if members of the object faction take items owned by the acting faction.
-`"guard your stuff"` | Members of the acting faction will object if someone takes items owned by the object faction.
-`"lets you in"` | Members of the acting faction will not object if a member of the object faction enters territory controlled by the acting faction.
-`"defends your space"` | Members of the acting faction will become hostile if someone enters territory controlled by the object faction.
-`"knows your voice"` | Members of the acting faction will not comment on speech by members of the object faction.
+| Flag | Meaning |
+| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
+| `"kill on sight"` | Members of the acting faction are always hostile to members of the object faction. |
+| `"watch your back"` | Members of the acting faction will treat attacks on members of the object faction as attacks on themselves. |
+| `"share my stuff"` | Members of the acting faction will not object if members of the object faction take items owned by the acting faction. |
+| `"guard your stuff"` | Members of the acting faction will object if someone takes items owned by the object faction. |
+| `"lets you in"` | Members of the acting faction will not object if a member of the object faction enters territory controlled by the acting faction. |
+| `"defends your space"` | Members of the acting faction will become hostile if someone enters territory controlled by the object faction. |
+| `"knows your voice"` | Members of the acting faction will not comment on speech by members of the object faction. |
So far, only `"kill on sight"`, `"knows your voice"`, and `"watch your back"` have been implemented.
diff --git a/doc/GAME_BALANCE.md b/doc/GAME_BALANCE.md
index 2e7ef664f27f..0284f437c0ea 100644
--- a/doc/GAME_BALANCE.md
+++ b/doc/GAME_BALANCE.md
@@ -1,4 +1,5 @@
# Stat system scaling:
+
Minimum stat: 0 (should only happen due to penalties, instant failure in most scenarios)
Nominal stat: 8 ("average" person)
@@ -7,14 +8,14 @@ Very high stat: 14 (realistic world class human, maximum cost-effective in charg
Maximal stat: 20 (higher may be achievable, but we're not worried about balancing at that point.)
-
# Skill system scaling:
+
Minimum skill: 0 (no training)
Maximum skill: 10 (requires regular training to maintain, "professional" level)
-
# Monster melee skill scaling:
+
Minimum skill: 0 (no melee potential; turret, fungal wall)
Nominal skill: 4 (average critter; most zeds & giant insects)
@@ -25,264 +26,416 @@ Very high skill: 8 (dangerous opponent; dark wyrm, vinebeast)
Maximal skill: 10 (highest for balance purposes; jabberwock, tribot, shoggoth, gracken)
-
# Speeds:
-Zombies are a bit faster than "shambling". Zombified versions of fast critters will remain fast, but in general the process slows the undead version. Further, under no circumstances should a zed be more than 50% faster than base character speed. Currently, this means "capped at 150".
+Zombies are a bit faster than "shambling". Zombified versions of fast critters will remain fast, but
+in general the process slows the undead version. Further, under no circumstances should a zed be
+more than 50% faster than base character speed. Currently, this means "capped at 150".
# Dodge System assumptions:
+
Dodge chance is based on attacker's melee skill and target's dex stat and dodge skill.
Successful dodges negate the attack and impose a cumulative penalty on dodges within the same turn.
## Dodge Use Cases:
-An individual with no skill and nominal stats in ideal circumstances against a basic opponent should occasionally be able to dodge.
-An individual with no skill and nominal stats in ideal circumstances against a skilled opponent should rarely if ever be able to dodge.
+An individual with no skill and nominal stats in ideal circumstances against a basic opponent should
+occasionally be able to dodge.
-An individual with world-class dodging ability, in ideal circumstances against a basic opponent should have a negligible chance of failure.
+An individual with no skill and nominal stats in ideal circumstances against a skilled opponent
+should rarely if ever be able to dodge.
-An individual with world-class dodging ability, in ideal circumstances against a skilled opponent should have a moderate chance of failure.
+An individual with world-class dodging ability, in ideal circumstances against a basic opponent
+should have a negligible chance of failure.
-The effect of increasing dodge skill has a growth rate with diminishing returns that accelerates sharply at the point where you move beyond the dodge a "regular" character is likely to achieve (7 and above)
+An individual with world-class dodging ability, in ideal circumstances against a skilled opponent
+should have a moderate chance of failure.
-The balance of melee versus dodge should favor dodge which, after all, isn't effective against a wide variety of other types of attacks.
+The effect of increasing dodge skill has a growth rate with diminishing returns that accelerates
+sharply at the point where you move beyond the dodge a "regular" character is likely to achieve (7
+and above)
-Even a world class dodger should not be able to dodge continuously when attacked many times a turn.
+The balance of melee versus dodge should favor dodge which, after all, isn't effective against a
+wide variety of other types of attacks.
+Even a world class dodger should not be able to dodge continuously when attacked many times a turn.
# MELEE WEAPONS:
+
## To-Hit Bonuses
-To-hit bonuses start at '-2' and are modified as follows for weapons that have the following properties:
+
+To-hit bonuses start at '-2' and are modified as follows for weapons that have the following
+properties:
### Grip
+
Grip is a measure of how well you can control the weapon to quickly respond to situational changes.
--1 - Particularly hard to grip items, (especially those that are innately slipper or very rounded with no obvious gripping edge) such as basketballs and barrels, or which are dangerous to hold because of very sharp edges, like scrap metal and broken glass.
+-1 - Particularly hard to grip items, (especially those that are innately slipper or very rounded
+with no obvious gripping edge) such as basketballs and barrels, or which are dangerous to hold
+because of very sharp edges, like scrap metal and broken glass.
-+0 - Any object that doesn't fall into one of the categories below. Examples include 2x4s, computer monitors, wires, stingers and clothing. Basically, anything that has a grippable component, but which is too thick, too thin, or too flimsy to grab comfortably in a way that can reliably control the object.
++0 - Any object that doesn't fall into one of the categories below. Examples include 2x4s, computer
+monitors, wires, stingers and clothing. Basically, anything that has a grippable component, but
+which is too thick, too thin, or too flimsy to grab comfortably in a way that can reliably control
+the object.
+1 - A weapon with a fairly solid grip, like a pipe, a rock, guitar neck, pool cue or a heavy stick.
-+2 - A weapon with a dedicated grip shaped to the hand, like a sword, axe, knife, or police baton, or that is strapped to the body (or is a piece of the body). Fists would get a +2 bonus here, bringing them to "0" total, since none of the others would apply.
++2 - A weapon with a dedicated grip shaped to the hand, like a sword, axe, knife, or police baton,
+or that is strapped to the body (or is a piece of the body). Fists would get a +2 bonus here,
+bringing them to "0" total, since none of the others would apply.
### Length
-Length allows more surface area for potential contact, and reduces the need to control the positioning of the body to guarantee a hit. It also allows the player to strike from a safer distance, allowing them to worry more about trying to hit without being hit in return, and allows for swings with larger arcs, making dodging such a strike more difficult.
+
+Length allows more surface area for potential contact, and reduces the need to control the
+positioning of the body to guarantee a hit. It also allows the player to strike from a safer
+distance, allowing them to worry more about trying to hit without being hit in return, and allows
+for swings with larger arcs, making dodging such a strike more difficult.
+0 - Any object without a length bonus.
-+1 - Objects that, when held, extend over a foot (1/3 of a meter) in length from the hand. A normal American 12inch ruler is the handy boundary guide for when an item should switch over to a +1 bonus (the ruler, losing several inches when held, does not get one - unless you added a handle to it!).
++1 - Objects that, when held, extend over a foot (1/3 of a meter) in length from the hand. A normal
+American 12inch ruler is the handy boundary guide for when an item should switch over to a +1 bonus
+(the ruler, losing several inches when held, does not get one - unless you added a handle to it!).
-+2 - An object that is over 3 feet in length from the point where it is held. Includes swords, spears, quarterstaffs, poles, and a lot of other stuff.
++2 - An object that is over 3 feet in length from the point where it is held. Includes swords,
+spears, quarterstaffs, poles, and a lot of other stuff.
### Striking Surface
-Some weapons need to strike in a certain way to be effective. Others are more difficult to use "incorrectly".
--2 - Single-Point weapons - Picks, spears, syringes. Any weapon that has a single point that must contact the enemy in a specific way in order to deal a decent amount of damage. Also, weapons with difficult attack angles, like scythes, where the damaging part of the weapon is faced away from the enemy.
+Some weapons need to strike in a certain way to be effective. Others are more difficult to use
+"incorrectly".
--1 - Line of damage weapons - Swords, knives, and other weapons that require a solid strike along a particular piece of the weapon, where the weapon can be said to have an attack angle, fall here. Weapons that have point attacks but are still effective without any solid hit, such as a nailboard, would also fall here.
+-2 - Single-Point weapons - Picks, spears, syringes. Any weapon that has a single point that must
+contact the enemy in a specific way in order to deal a decent amount of damage. Also, weapons with
+difficult attack angles, like scythes, where the damaging part of the weapon is faced away from the
+enemy.
-+0 - attack-anywhere weapons - Clubs, pipes, maces, etc, where the weapon will be dealing full damage with a solid blow no matter how it is angled, because every surface is a striking surface.
+-1 - Line of damage weapons - Swords, knives, and other weapons that require a solid strike along a
+particular piece of the weapon, where the weapon can be said to have an attack angle, fall here.
+Weapons that have point attacks but are still effective without any solid hit, such as a nailboard,
+would also fall here.
-+1 - Weapons that can still do significant damage even with glancing blows would fall here. Jagged tearing weapons and electric weapons like a stun baton would fall here.
++0 - attack-anywhere weapons - Clubs, pipes, maces, etc, where the weapon will be dealing full
+damage with a solid blow no matter how it is angled, because every surface is a striking surface.
+
++1 - Weapons that can still do significant damage even with glancing blows would fall here. Jagged
+tearing weapons and electric weapons like a stun baton would fall here.
### Balance
-A measure of how well-suited the item is for being swung/thrust/etc. This factors in overall balance of the weapon, weight is accounted for separately.
--2 - Very clumsy or lopsided items ill-suited for swinging or thrusting. Characterized by requiring effort just to hold steady. frying pan or pot, chainsaw, chair, vacuum cleaner.
+A measure of how well-suited the item is for being swung/thrust/etc. This factors in overall balance
+of the weapon, weight is accounted for separately.
+
+-2 - Very clumsy or lopsided items ill-suited for swinging or thrusting. Characterized by requiring
+effort just to hold steady. frying pan or pot, chainsaw, chair, vacuum cleaner.
--1 - Balance of the object is uneven, but in a way that at least doesn't interfere with swinging. axes, sledgehammer, rifle, scythe, most polearms.
+-1 - Balance of the object is uneven, but in a way that at least doesn't interfere with swinging.
+axes, sledgehammer, rifle, scythe, most polearms.
-+0 - Neutral balance, neither well nor poorly weighted for the typical use. Heavy stick, rock, pool stick, kitchen knives, claw hammer, metal pipe, crowbar, handguns.
++0 - Neutral balance, neither well nor poorly weighted for the typical use. Heavy stick, rock, pool
+stick, kitchen knives, claw hammer, metal pipe, crowbar, handguns.
-+1 - Well-balanced for swinging or stabbing. Baseball bat, golf club, swords, quarterstaff, knives.
++1 - Well-balanced for swinging or stabbing. Baseball bat, golf club, swords, quarterstaff, knives.
## Damage
-Weapon's relative strength is based on an approximate formula involving its damage, to-hit, techniques and few other factors.
+
+Weapon's relative strength is based on an approximate formula involving its damage, to-hit,
+techniques and few other factors.
### Damage per second
-A melee's weapon damage per second (dps) is calculated past armor against a sample group of monsters with a range of dodge and armor values: a soldier zombie (low dodge, high bash and cut armor), a survivor zombie (medium dodge, some bash and cut armor), and a smoker zombie (high dodge, no armor). This should correctly weigh accuracy, criticals, and damage without over valuing any of them.
-In code, this is calculated using the item::effective_dps() function, which takes a character and a monster. It calculates the relative accuracy of the character and weapon against the monster's defenses and determines the hit rate from a table lookup. It also determines the number of critical hits. Number of hits is hit rate * 10,000, and number of misses is 10,000 - number of hits.
+A melee's weapon damage per second (dps) is calculated past armor against a sample group of monsters
+with a range of dodge and armor values: a soldier zombie (low dodge, high bash and cut armor), a
+survivor zombie (medium dodge, some bash and cut armor), and a smoker zombie (high dodge, no armor).
+This should correctly weigh accuracy, criticals, and damage without over valuing any of them.
+
+In code, this is calculated using the item::effective_dps() function, which takes a character and a
+monster. It calculates the relative accuracy of the character and weapon against the monster's
+defenses and determines the hit rate from a table lookup. It also determines the number of critical
+hits. Number of hits is hit rate * 10,000, and number of misses is 10,000 - number of hits.
-For both critical and non-critical hits, average damage is calculated based on the weapon's stats and the user's skill. Monster armor absorbs the damage, and then the damage is multiplied by the number of hits: either critical hits for the critical hit case, or total hits - critical hits for the non critical hit case. If the weapon has the rapid strike technique, the total damage is halved, and then the average damage is recalculated, multiplied by 0.66, and absorbed by monster armor again to account for rapid strikes.
+For both critical and non-critical hits, average damage is calculated based on the weapon's stats
+and the user's skill. Monster armor absorbs the damage, and then the damage is multiplied by the
+number of hits: either critical hits for the critical hit case, or total hits - critical hits for
+the non critical hit case. If the weapon has the rapid strike technique, the total damage is halved,
+and then the average damage is recalculated, multiplied by 0.66, and absorbed by monster armor again
+to account for rapid strikes.
-Number of moves is calculated as attack speed * ( number of misses + number of non-critical hits + number of critical hits ) for weapons without rapid strike, or attack speed * ( number of misses + number of non-critical hits / 2 + number of critical hits / 2 ) + attack speed / 2 * ( number of non-critical hits / 2 + number of critical hits / 2 ) for weapons without rapid strikes.
+Number of moves is calculated as attack speed * ( number of misses + number of non-critical hits +
+number of critical hits ) for weapons without rapid strike, or attack speed * ( number of misses +
+number of non-critical hits / 2 + number of critical hits / 2 ) + attack speed / 2 * ( number of
+non-critical hits / 2 + number of critical hits / 2 ) for weapons without rapid strikes.
-Damage per second against a particular monster is total damage * 100 / number of moves (100 for the 100 moves/second). Overall dps is the average of the dps against the three reference monsters.
+Damage per second against a particular monster is total damage * 100 / number of moves (100 for the
+100 moves/second). Overall dps is the average of the dps against the three reference monsters.
### Critical hits
-A double critical can occcur when a second hit roll is made against 1.5 * the monster's dodge. Double critical hits have a higher chance of occurring than normal critical hits. For each hit, the chance of achieving either a double critical hit or a normal critical hit is calculated, and then if a random number is less than the critical chance, the critical occurs. Both double and normal critical hits have the same effect, but the chance of them occurring is different.
-**Note** The critical hit system is stupid and complicated and produces weird results. Double critical hits should have a chance of occuring when the original hit roll is more than 1 standard deviation above the mean, which is simple and faster to calculate than the current system.
+A double critical can occcur when a second hit roll is made against 1.5 * the monster's dodge.
+Double critical hits have a higher chance of occurring than normal critical hits. For each hit, the
+chance of achieving either a double critical hit or a normal critical hit is calculated, and then if
+a random number is less than the critical chance, the critical occurs. Both double and normal
+critical hits have the same effect, but the chance of them occurring is different.
+
+**Note** The critical hit system is stupid and complicated and produces weird results. Double
+critical hits should have a chance of occuring when the original hit roll is more than 1 standard
+deviation above the mean, which is simple and faster to calculate than the current system.
### Other factors
+
Reach is worth +20% at reach 2, +35% at reach 3.
A weapon that is usuable by a known martial art is worth +50%.
### Weapon tiers
+
Relative value should put the weapon into one of those categories:
-<2 - Not weapons. Those items may be pressed into service, but are unlikely to be better than fists. Plastic bottles, rocks, boots.
+<2 - Not weapons. Those items may be pressed into service, but are unlikely to be better than fists.
+Plastic bottles, rocks, boots.
2-5 - Tools not meant to strike and improvised weapons. Two-by-fours, pointy sticks, pipes, hammers.
-6-11 - Dangerous tools or crude dedicated weapons. Golf clubs, two-by-swords, wooden spears, knife spears, hatchets, switchblades, tonfas, quarterstaves.
+6-11 - Dangerous tools or crude dedicated weapons. Golf clubs, two-by-swords, wooden spears, knife
+spears, hatchets, switchblades, tonfas, quarterstaves.
-12-15 - Good dedicated weapons or the most dangerous of tools. Wood and fire axes, steel spears, electric carvers, kukris, bokken, machetes, barbed wire bats.
+12-15 - Good dedicated weapons or the most dangerous of tools. Wood and fire axes, steel spears,
+electric carvers, kukris, bokken, machetes, barbed wire bats.
-20-35 - Weapons of war, well designed to kill humans. Wakizashis, katanas, broadswords, zweihanders, combat knifes, battle axes, war hammers, maces, morningstars.
+20-35 - Weapons of war, well designed to kill humans. Wakizashis, katanas, broadswords, zweihanders,
+combat knifes, battle axes, war hammers, maces, morningstars.
35+ - Sci-fi stuff. Diamond katanas, monomolecular blades, lightsabers and chainswords.
-Specific weapon balancing points:
-20 - combat knifes
-22 - short blades
-24 - long blades, short axes, and short flails
-26 - two handed blades, long axes, most spears
-28 - two handed axes and polearms
+Specific weapon balancing points: 20 - combat knifes 22 - short blades 24 - long blades, short axes,
+and short flails 26 - two handed blades, long axes, most spears 28 - two handed axes and polearms
30 - combat spears
Improvised weapons generally have about 75% of the value of a real weapon.
## Other melee balancing factors
+
### Attack speed
-Out of two weapons with same dpt, the faster one is generally better.
-Faster weapons allow more damage granularity (less overkill), make it less likely to miss a turn (and thus dodge/block recharges) and make positioning easier.
-Slower weapons will pierce armor better, but currently most enemies are very lightly armored.
+
+Out of two weapons with same dpt, the faster one is generally better. Faster weapons allow more
+damage granularity (less overkill), make it less likely to miss a turn (and thus dodge/block
+recharges) and make positioning easier. Slower weapons will pierce armor better, but currently most
+enemies are very lightly armored.
### Damage type
-At low skill, piercing damage suffers from scaling and bashing damage from damage limit due to low strength and skill. Cutting damage is not affected.
-At high skill, bashing damage is generally the strongest, but still suffers from the damage limit.
-Exotic damage types (currently only fire) do not scale with skills or crits.
+
+At low skill, piercing damage suffers from scaling and bashing damage from damage limit due to low
+strength and skill. Cutting damage is not affected. At high skill, bashing damage is generally the
+strongest, but still suffers from the damage limit. Exotic damage types (currently only fire) do not
+scale with skills or crits.
# RANGE WEAPONS
+
## Automatic Fire
-Guns with automatic fire are balanced around 1-second of cyclic fire, unless the cyclic or practical fire rate is less than 1 every second. Rates of fire less than 1 shot every second are increased to 2.
+
+Guns with automatic fire are balanced around 1-second of cyclic fire, unless the cyclic or practical
+fire rate is less than 1 every second. Rates of fire less than 1 shot every second are increased
+to 2.
## Magazines
+
### Reload times
-The overall balance is that magazines themselves are slow to reload whereas changing a magazine should be fast. For standard box magazines a default `reload_time` of 100 (per round) is appropriate with this value increasing for poor quality or extended magazines. Guns themselves should also specify `reload` of 100 (per magazine) unless their magazines are particularly awkward to reload (eg. ammo belts). The game logic intrinsically handles higher volume magazines consuming more time to attach to a gun so you need not consider this.
+
+The overall balance is that magazines themselves are slow to reload whereas changing a magazine
+should be fast. For standard box magazines a default `reload_time` of 100 (per round) is appropriate
+with this value increasing for poor quality or extended magazines. Guns themselves should also
+specify `reload` of 100 (per magazine) unless their magazines are particularly awkward to reload
+(eg. ammo belts). The game logic intrinsically handles higher volume magazines consuming more time
+to attach to a gun so you need not consider this.
### Weight
-Increases proportional to capacity and should have a comparable ratio to similar magazines. Consider the base item to be a 10-round .223 factory specification box magazine which has a capacity:weight of 1:10. Increase the ratio markedly for poor quality magazines or more slightly for extended magazines. Smaller calibers should use a lower ratio. The `material` should have some effect, with plastic magazines weighing less.
+
+Increases proportional to capacity and should have a comparable ratio to similar magazines. Consider
+the base item to be a 10-round .223 factory specification box magazine which has a capacity:weight
+of 1:10. Increase the ratio markedly for poor quality magazines or more slightly for extended
+magazines. Smaller calibers should use a lower ratio. The `material` should have some effect, with
+plastic magazines weighing less.
### Volume
-Scaled based upon the capacity relative to the `stack_size` of the ammo. For example 223 has a `stack size` of 20 so for 10 and 30 round magazines the volume would be 1 and 2. Extended magazine should always have larger volume than the standard type and for very large drum magazines consider applying an extra penalty. By default most handgun magazines should be volume 1 and most rifle magazines volume 2. Ammo belts should not specify volume as this will be determined from their length.
+
+Scaled based upon the capacity relative to the `stack_size` of the ammo. For example 223 has a
+`stack size` of 20 so for 10 and 30 round magazines the volume would be 1 and 2. Extended magazine
+should always have larger volume than the standard type and for very large drum magazines consider
+applying an extra penalty. By default most handgun magazines should be volume 1 and most rifle
+magazines volume 2. Ammo belts should not specify volume as this will be determined from their
+length.
### Reliability
-Should be specified first considering the below and then scaled against any equivalent magazines. For example if an extended version of a magazine exists place it one rank below the standard capacity version. Damaged guns or magazines will further adversely affect reliability.
-10 - **Perfectly reliable**. Factory specification or milspec only. Never extended magazines. Very rare.
+Should be specified first considering the below and then scaled against any equivalent magazines.
+For example if an extended version of a magazine exists place it one rank below the standard
+capacity version. Damaged guns or magazines will further adversely affect reliability.
-9 - **Reliable**. Failures only in burst fire. Factory or milspec magazines only. Never extended magazines. Uncommon.
+10 - **Perfectly reliable**. Factory specification or milspec only. Never extended magazines. Very
+rare.
-8 - **Dependable**. Failures infrequently in any fire mode. Highest reliability possible for extended magazines and those crafted using gunsmithing tools. Most common.
+9 - **Reliable**. Failures only in burst fire. Factory or milspec magazines only. Never extended
+magazines. Uncommon.
-7 - **Serviceable**. Fail infrequently in semi-automatic, more frequently in burst. Includes many extended and aftermarket gunsmithing tools. Common.
+8 - **Dependable**. Failures infrequently in any fire mode. Highest reliability possible for
+extended magazines and those crafted using gunsmithing tools. Most common.
-6 - **Acceptable**. Failures can be problematic. Highest reliability possible for magazines crafted **without** gunsmithing tools. Includes most ammo belts.
+7 - **Serviceable**. Fail infrequently in semi-automatic, more frequently in burst. Includes many
+extended and aftermarket gunsmithing tools. Common.
-5 - **Usable**. Failures can be problematic and more serious. Mostly poor quality hand-crafted magazines.
+6 - **Acceptable**. Failures can be problematic. Highest reliability possible for magazines crafted
+**without** gunsmithing tools. Includes most ammo belts.
-<4 - **Poor**. Significant risk of catastrophic failure. Not applied by default to any item but can be acquired by damage or other factors.
+5 - **Usable**. Failures can be problematic and more serious. Mostly poor quality hand-crafted
+magazines.
+
+<4 - **Poor**. Significant risk of catastrophic failure. Not applied by default to any item but can
+be acquired by damage or other factors.
### Rarity
-Overall balance is that pistol magazines are twice as common as rifle magazines and that for guns that spawn with magazines these are always the standard capacity versions. Consider 9x19mm and .223 to be the defaults with everything else more rare. Some locations have more specific balance requirements:
-
-Location | Description | With guns | Damaged | Example
-------------------|-----------------------------------------------------------|-----------|-----------|--------------------------
-Military site | Only source of milspec magazines and ammo belts | Never | Never | LW-56, .223 ammo belt
-Gun store | Standard and extended capacity magazines | Never | Never | STANAG-30, Glock extended
-Police armory | Mostly pistol magazines, especially 9x19mm, never extended| Sometimes | Never | Glock, MP5 magazine
-SWAT truck | Police or military magazines, occasionally extended | Sometimes | Rarely | MP5 extended
-Survivor basement | Anything except milspec weighted towards common types | Often | Sometimes | Saiga mag, M1911 extended
-Military surplus | Older military magazines that are not current issue | Never | Rarely | M9 mag, STEN magazine
-Pawn shop | Anything except milspec weighted towards unusual calibers | Never | Rarely | Makarov mag, AK-74 mag
-Everywhere else | Predominately 9mm and 223. Always with standard magazine | Often | Sometimes | Ruger 223 mag, M1911 mag
+
+Overall balance is that pistol magazines are twice as common as rifle magazines and that for guns
+that spawn with magazines these are always the standard capacity versions. Consider 9x19mm and .223
+to be the defaults with everything else more rare. Some locations have more specific balance
+requirements:
+
+| Location | Description | With guns | Damaged | Example |
+| ----------------- | ---------------------------------------------------------- | --------- | --------- | ------------------------- |
+| Military site | Only source of milspec magazines and ammo belts | Never | Never | LW-56, .223 ammo belt |
+| Gun store | Standard and extended capacity magazines | Never | Never | STANAG-30, Glock extended |
+| Police armory | Mostly pistol magazines, especially 9x19mm, never extended | Sometimes | Never | Glock, MP5 magazine |
+| SWAT truck | Police or military magazines, occasionally extended | Sometimes | Rarely | MP5 extended |
+| Survivor basement | Anything except milspec weighted towards common types | Often | Sometimes | Saiga mag, M1911 extended |
+| Military surplus | Older military magazines that are not current issue | Never | Rarely | M9 mag, STEN magazine |
+| Pawn shop | Anything except milspec weighted towards unusual calibers | Never | Rarely | Makarov mag, AK-74 mag |
+| Everywhere else | Predominately 9mm and 223. Always with standard magazine | Often | Sometimes | Ruger 223 mag, M1911 mag |
## Archery damage
-Bow damage is based on the momentum achieved in the projectile. Since arrows and bolts have sharp cutting surfaces, the penetration and therefore damage achieved is based on the projectile's capacity for slicing through tissues. The arrow has a modifier based on construction, material and design, most critically centered around the effectiveness of the head. Base damage is calculated from momentum by taking momentum in Slug-foot-seconds, multiplying by 150 and subtracting 32. This was arrived at by taking well-regarded bowhunting guidelines and determining the damage numbers necessary for a kill of various game on a critical hit, see tests/archery_damage_test.cpp for details.
+
+Bow damage is based on the momentum achieved in the projectile. Since arrows and bolts have sharp
+cutting surfaces, the penetration and therefore damage achieved is based on the projectile's
+capacity for slicing through tissues. The arrow has a modifier based on construction, material and
+design, most critically centered around the effectiveness of the head. Base damage is calculated
+from momentum by taking momentum in Slug-foot-seconds, multiplying by 150 and subtracting 32. This
+was arrived at by taking well-regarded bowhunting guidelines and determining the damage numbers
+necessary for a kill of various game on a critical hit, see tests/archery_damage_test.cpp for
+details.
## Ammo stats
+
### Base Damage
-The damage (**Dmg**) of firearm ammunition starts with the square root of a round's muzzle energy in joules (**Energy, J**) rounded to the nearest integer with an arbitrary increase or decrease to account for terminal ballistics. These numbers are modified depending on certain criteria (see Adjustment Criteria, below). Damage of handloaded ammo is set to 92% (rounded down) of their factory counterparts. A similar system for calculating recoil is planned but not currently being worked on. The figures used to calculate stats and any other relevant information are presented in table below.
+
+The damage (**Dmg**) of firearm ammunition starts with the square root of a round's muzzle energy in
+joules (**Energy, J**) rounded to the nearest integer with an arbitrary increase or decrease to
+account for terminal ballistics. These numbers are modified depending on certain criteria (see
+Adjustment Criteria, below). Damage of handloaded ammo is set to 92% (rounded down) of their factory
+counterparts. A similar system for calculating recoil is planned but not currently being worked on.
+The figures used to calculate stats and any other relevant information are presented in table below.
### Base Barrel Length
-Each cartridge also has a Base Barrel Length (**Base Brl**) listed; this determines the damage for the connected guns. A firearm has its damage modifier determined by it's real life barrel length; for every three inches between it and the listed baseline here, the gun takes a 1 point bonus or penalty, rounding to the nearest modifier. For example, a .45 ACP gun with a 7 inch barrel would get a +1 bonus (against a baseline of 5 inches).
-
-Ammo ID | Description | Energy, J | Dmg | Base Brl | Applied Modifiers / Comments |
--------------------|-----------------------------|-----------|-----|----------|-------------------------------
-.22 CB | 18gr CB bullet | 39 | 6 | 7.87in | |
-.22LR | 40gr unjacketed bullet | 141 | 12 | 6in | |
-.22LR FMJ | 30gr FMJ bullet | 277 | 17 | 6in | |
-.32 ACP | 60gr JHP bullet | 218 | 15 | 4in | |
-7.62x25mm | 85gr JHP bullet | 544 | 23 | 4.7in | |
-7.62x25mm Type P | 120gr bullet | 245 | 15 | 9.6in | Fired from the Type 64 SMG; need more data here |
-9x18mm 57-N-181S | 93gr FMJ bullet | 251 | 16 | 3.8in | |
-9x18mm SP-7 | 93gr bullet | 417 | 20 | 3.8in | |
-9x18mm RG028 | 93gr hardened steel core bullet | 317 | 18 | 3.8in | damage reduced by 4 |
-9x19mm FMJ | 115gr FMJ bullet | 420 | 24 | 5.9in | |
-9x19mm JHP | 115gr JHP bullet | 533 | 23 | 5.9in |damage increased by 3 |
-9x19mm +P | 115gr JHP bullet | 632 | 25 | 5.9in | |
-9x19mm +P+ | 115gr JHP bullet | 678 | 26 | 5.9in | |
-.38 Special | 130gr FMJ bullet | 256 | 16 | 4in | |
-.38 FMJ | 130gr FMJ bullet | 256 | 16 | 4in | |
-.38 Super | 147gr JHP bullet | 660 | 26 | 4in | |
-10mm Auto | 180gr FMJ bullet | 960 | 31 | 4in | |
-.40 S&W | 135gr JHP bullet | 575 | 24 | 4in | |
-.40 FMJ | 180gr FMJ bullet | 598 | 24 | 4in | |
-.44 Magnum | 240gr JHP bullet | 1570 | 40 | 7.5in | |
-.45 ACP JHP | 185gr JHP bullet | 614 | 25 | 5in | |
-.45 ACP FMJ | 230gr FMJ bullet | 447 | 21 | 5in | |
-.45 ACP +P | 200gr JHP bullet | 702 | 26 | 5in | |
-.454 Casull | 300gr JSP bullet | 2459 | 50 | 7.5in | |
-.45 Colt JHP | 250gr JHP bullet | 610 | 25 | 7.5in | |
-.500 S&W Magnum | 500gr bullet | 3056 | 55 | 8.4in | |
-4.6x30mm | 31gr copper plated steel bullet | 505 | 22 | 7.1in | damage reduced by 4 |
-5.7x28mm SS190 | 31gr AP FMJ bullet | 534 | 23 | 10.4in | damage reduced by 3 |
-7.62x39mm | 123gr FMJ bullet | 2179 | 46 | 16.3in | |
-7.62x39mm 57-N-231 | 121.9gr steel core FMJ bullet | 2036 | 45 | 16.3in | |
-7.62x39mm M67 | 123gr FMJ bullet | 2141 | 46 | 16.3in | TODO |
-5.45x39mm 7N10 | 56gr FMJ bullet | 1402 | 37 | 16.3in | damage increased by 3 |
-5.45x39mm 7N22 | 57gr steel core FMJ bullet | 1461 | 38 | 16.3in | |
-.223 Remington | 36gr JHP bullet | 1524 | 39 | 20in |Uses 5.56 NATO barrel baseline; damage increased by 5 |
-5.56x45mm M855A1 | 62gr copper core FMJBT bullet | 1843 | 43 | 20in | |
-.300BLK supersonic | 125gr OTM | 1840 | 43 | 16in |
-,300BLK subsonic | 220gr OTM | 675 | 26 | 16in | subsonic
-7.62x54mmR | 150gr FMJ bullet | 3629 | 60 | 28in | |
-.308 Winchester | 168gr hollow point bullet | 3570 | 60 | 24in | |
-7.62x51mm NATO M80 | 147gr FMJ bullet | 3304 | 57 | 24in | |
-7.62x51mm NATO M62 | 142gr tracer bullet | 3232 | 57 | 24in | Belt with 1/5 tracer rounds |
-.270 Winchester | 130gr soft point bullet | 3663 | 61 | 24in | |
-.30-06 Springfield | 165gr soft point bullet | 3894 | 62 | 24in | damage increased by 4 |
-.30-06 M2 | 165.7gr AP bullet | 3676 | 60 | 24in | damage reduced by 10 |
-.30-06 M14A1 | Incendiary ammunition | 3894 | 62 | 24in | damage reduced by 10 |
-.45-70 Govt. | 300gr soft point bullet | 3867 | 66 | 24in | damage increased by 4 |
-.300 Winchester Magnum | 220gr JHP bullet | 5299 | 73 | 24in | damage increased by 5 |
-.700 NX | 1000gr JSP bullet | 12100 | 110 | 28in | |
-.50 BMG Ball | 750gr FMJ-BT bullet | 17083 | 131 | 45in | |
-.50 BMG M33 Ball | 706.7gr bullet | 18013 | 134 | 45in | |
-.50 BMG M903 SLAP | 355gr tungsten AP bullet | 17083 | 131 | 45in | Can't be used with M107A1 |
-.410 000 shot | 5 000 pellets | 1530 | 39 | 18in | |
-
-###Adjustment Criteria
-If the resulting base damage is below specific thresholds, apply one of three multipliers. If the base damage is less than 20, the multiplier is 1.333. Else, if the base damage less than 30, the multiplier is 1.222. Else, if the base damage is less than 40, the multiplier is 1.111. Ammunition with damage of 40 or higher will generally have no arbitrary multiplier given to its basic variant.
-
-For liminal cases where the base damage is 20, 30, or 40 there is room for discretion regarding which balance increase to apply, if any. Discretion should be exercised based on which solution makes that ammunition distinct from other ammunition of similar power, as having two different ammotypes with identical power should be avoided.
-
-As for terminal ballistics, hollowpoints variant should be at least 25% more effective against a completely unarmored target, in order for the difference to be considered relevant. Conversely, the base FMJ variation should have a combined damage and armor penetration whose total is at least 15% greater than the damage of the hollowpoint variant. This recommendation will inform how much armor penetration the two variants should have. Armor-piercing variants have seven-eigths the damage of the standard FMJ variant, and enough penetration to make the combined value 30% higher than the damage of hollowpoint.
-
-The relative combined damage plus armor penetration for each variant can likewise be summarized as follows:
+
+Each cartridge also has a Base Barrel Length (**Base Brl**) listed; this determines the damage for
+the connected guns. A firearm has its damage modifier determined by it's real life barrel length;
+for every three inches between it and the listed baseline here, the gun takes a 1 point bonus or
+penalty, rounding to the nearest modifier. For example, a .45 ACP gun with a 7 inch barrel would get
+a +1 bonus (against a baseline of 5 inches).
+
+| Ammo ID | Description | Energy, J | Dmg | Base Brl | Applied Modifiers / Comments |
+| ---------------------- | ------------------------------- | --------- | --- | -------- | ----------------------------------------------------- |
+| .22 CB | 18gr CB bullet | 39 | 6 | 7.87in | |
+| .22LR | 40gr unjacketed bullet | 141 | 12 | 6in | |
+| .22LR FMJ | 30gr FMJ bullet | 277 | 17 | 6in | |
+| .32 ACP | 60gr JHP bullet | 218 | 15 | 4in | |
+| 7.62x25mm | 85gr JHP bullet | 544 | 23 | 4.7in | |
+| 7.62x25mm Type P | 120gr bullet | 245 | 15 | 9.6in | Fired from the Type 64 SMG; need more data here |
+| 9x18mm 57-N-181S | 93gr FMJ bullet | 251 | 16 | 3.8in | |
+| 9x18mm SP-7 | 93gr bullet | 417 | 20 | 3.8in | |
+| 9x18mm RG028 | 93gr hardened steel core bullet | 317 | 18 | 3.8in | damage reduced by 4 |
+| 9x19mm FMJ | 115gr FMJ bullet | 420 | 24 | 5.9in | |
+| 9x19mm JHP | 115gr JHP bullet | 533 | 23 | 5.9in | damage increased by 3 |
+| 9x19mm +P | 115gr JHP bullet | 632 | 25 | 5.9in | |
+| 9x19mm +P+ | 115gr JHP bullet | 678 | 26 | 5.9in | |
+| .38 Special | 130gr FMJ bullet | 256 | 16 | 4in | |
+| .38 FMJ | 130gr FMJ bullet | 256 | 16 | 4in | |
+| .38 Super | 147gr JHP bullet | 660 | 26 | 4in | |
+| 10mm Auto | 180gr FMJ bullet | 960 | 31 | 4in | |
+| .40 S&W | 135gr JHP bullet | 575 | 24 | 4in | |
+| .40 FMJ | 180gr FMJ bullet | 598 | 24 | 4in | |
+| .44 Magnum | 240gr JHP bullet | 1570 | 40 | 7.5in | |
+| .45 ACP JHP | 185gr JHP bullet | 614 | 25 | 5in | |
+| .45 ACP FMJ | 230gr FMJ bullet | 447 | 21 | 5in | |
+| .45 ACP +P | 200gr JHP bullet | 702 | 26 | 5in | |
+| .454 Casull | 300gr JSP bullet | 2459 | 50 | 7.5in | |
+| .45 Colt JHP | 250gr JHP bullet | 610 | 25 | 7.5in | |
+| .500 S&W Magnum | 500gr bullet | 3056 | 55 | 8.4in | |
+| 4.6x30mm | 31gr copper plated steel bullet | 505 | 22 | 7.1in | damage reduced by 4 |
+| 5.7x28mm SS190 | 31gr AP FMJ bullet | 534 | 23 | 10.4in | damage reduced by 3 |
+| 7.62x39mm | 123gr FMJ bullet | 2179 | 46 | 16.3in | |
+| 7.62x39mm 57-N-231 | 121.9gr steel core FMJ bullet | 2036 | 45 | 16.3in | |
+| 7.62x39mm M67 | 123gr FMJ bullet | 2141 | 46 | 16.3in | TODO |
+| 5.45x39mm 7N10 | 56gr FMJ bullet | 1402 | 37 | 16.3in | damage increased by 3 |
+| 5.45x39mm 7N22 | 57gr steel core FMJ bullet | 1461 | 38 | 16.3in | |
+| .223 Remington | 36gr JHP bullet | 1524 | 39 | 20in | Uses 5.56 NATO barrel baseline; damage increased by 5 |
+| 5.56x45mm M855A1 | 62gr copper core FMJBT bullet | 1843 | 43 | 20in | |
+| .300BLK supersonic | 125gr OTM | 1840 | 43 | 16in | |
+| ,300BLK subsonic | 220gr OTM | 675 | 26 | 16in | subsonic |
+| 7.62x54mmR | 150gr FMJ bullet | 3629 | 60 | 28in | |
+| .308 Winchester | 168gr hollow point bullet | 3570 | 60 | 24in | |
+| 7.62x51mm NATO M80 | 147gr FMJ bullet | 3304 | 57 | 24in | |
+| 7.62x51mm NATO M62 | 142gr tracer bullet | 3232 | 57 | 24in | Belt with 1/5 tracer rounds |
+| .270 Winchester | 130gr soft point bullet | 3663 | 61 | 24in | |
+| .30-06 Springfield | 165gr soft point bullet | 3894 | 62 | 24in | damage increased by 4 |
+| .30-06 M2 | 165.7gr AP bullet | 3676 | 60 | 24in | damage reduced by 10 |
+| .30-06 M14A1 | Incendiary ammunition | 3894 | 62 | 24in | damage reduced by 10 |
+| .45-70 Govt. | 300gr soft point bullet | 3867 | 66 | 24in | damage increased by 4 |
+| .300 Winchester Magnum | 220gr JHP bullet | 5299 | 73 | 24in | damage increased by 5 |
+| .700 NX | 1000gr JSP bullet | 12100 | 110 | 28in | |
+| .50 BMG Ball | 750gr FMJ-BT bullet | 17083 | 131 | 45in | |
+| .50 BMG M33 Ball | 706.7gr bullet | 18013 | 134 | 45in | |
+| .50 BMG M903 SLAP | 355gr tungsten AP bullet | 17083 | 131 | 45in | Can't be used with M107A1 |
+| .410 000 shot | 5 000 pellets | 1530 | 39 | 18in | |
+
+###Adjustment Criteria If the resulting base damage is below specific thresholds, apply one of three
+multipliers. If the base damage is less than 20, the multiplier is 1.333. Else, if the base damage
+less than 30, the multiplier is 1.222. Else, if the base damage is less than 40, the multiplier is
+1.111. Ammunition with damage of 40 or higher will generally have no arbitrary multiplier given to
+its basic variant.
+
+For liminal cases where the base damage is 20, 30, or 40 there is room for discretion regarding
+which balance increase to apply, if any. Discretion should be exercised based on which solution
+makes that ammunition distinct from other ammunition of similar power, as having two different
+ammotypes with identical power should be avoided.
+
+As for terminal ballistics, hollowpoints variant should be at least 25% more effective against a
+completely unarmored target, in order for the difference to be considered relevant. Conversely, the
+base FMJ variation should have a combined damage and armor penetration whose total is at least 15%
+greater than the damage of the hollowpoint variant. This recommendation will inform how much armor
+penetration the two variants should have. Armor-piercing variants have seven-eigths the damage of
+the standard FMJ variant, and enough penetration to make the combined value 30% higher than the
+damage of hollowpoint.
+
+The relative combined damage plus armor penetration for each variant can likewise be summarized as
+follows:
+
1. Hollowpoints are considered to have 100% combined damage (example: 100 damage, 0 arpen)
-2. Standard/FMJ variants are considered to have 115% combined damage, 80% damage and 35% arpen (example: 80 damage, 35 arpen)
-3. AP variants are considered to have 130% combined damage, 70% damage and 60% arpen (example: 70 damage, 60 arpen)
+2. Standard/FMJ variants are considered to have 115% combined damage, 80% damage and 35% arpen
+ (example: 80 damage, 35 arpen)
+3. AP variants are considered to have 130% combined damage, 70% damage and 60% arpen (example: 70
+ damage, 60 arpen)
# LIQUIDS:
-Multi-charge items are weighed by the charge/use. If you have an item that contains 40 uses, it'll weigh 40x as much (when found in-game) as you entered in the JSON. Liquids are priced by the 250mL unit, but handled in containers. This can cause problems if you create something that comes in (say) a gallon jug (15 charges) and price it at the cost of a jug's worth: it'll be 15x as expensive as intended.
-To that end, here's a list of containers with non-one volume. If you have something spawn in 'em, divide the "shelf" price by this value to arrive at the correct price to list in the JSON.
+Multi-charge items are weighed by the charge/use. If you have an item that contains 40 uses, it'll
+weigh 40x as much (when found in-game) as you entered in the JSON. Liquids are priced by the 250mL
+unit, but handled in containers. This can cause problems if you create something that comes in (say)
+a gallon jug (15 charges) and price it at the cost of a jug's worth: it'll be 15x as expensive as
+intended.
+
+To that end, here's a list of containers with non-one volume. If you have something spawn in 'em,
+divide the "shelf" price by this value to arrive at the correct price to list in the JSON.
- plastic bottle: 2
@@ -297,6 +450,6 @@ To that end, here's a list of containers with non-one volume. If you have somet
- gallon jug: 15
# Diamond weapons
-Diamond weapons should be uniform in their CVD machine requirements.
-Coal requirements are `floor((weapon_volume+1)/2)*25`.
-Hydrogen requirements are `coal_requirements/2.5`.
+
+Diamond weapons should be uniform in their CVD machine requirements. Coal requirements are
+`floor((weapon_volume+1)/2)*25`. Hydrogen requirements are `coal_requirements/2.5`.
diff --git a/doc/GUIDE_COMESTIBLES.md b/doc/GUIDE_COMESTIBLES.md
index 993763cfe5da..6465417c126c 100644
--- a/doc/GUIDE_COMESTIBLES.md
+++ b/doc/GUIDE_COMESTIBLES.md
@@ -1,44 +1,56 @@
# Guide to add Comestibles
-There are a large number of files in `json/items/comestibles`, and this guide will help you decide where to put your new comestible!
+There are a large number of files in `json/items/comestibles`, and this guide will help you decide
+where to put your new comestible!
## List of special comestibles:
-`med.json` -- comestible that has an addiction effect besides alcohol and caffeine, plus bandages and antiseptic type items.
+
+`med.json` -- comestible that has an addiction effect besides alcohol and caffeine, plus bandages
+and antiseptic type items.
`mre.json` -- items and comestibles related to MREs
`mutagen.json` -- comestible that has any mutagen effect
-`carnivore.json` -- item that would normally be butchered from an animal or monster, and their cooked versions. examples: chunks of meat, tainted bones, boiled stomach
+`carnivore.json` -- item that would normally be butchered from an animal or monster, and their
+cooked versions. examples: chunks of meat, tainted bones, boiled stomach
`protein.json` -- comestibles based on protein powder
-`spice.json` -- comestibles that normally do not have nutrients, but are used to flavor a dish. examples: salt, thyme, black pepper
+`spice.json` -- comestibles that normally do not have nutrients, but are used to flavor a dish.
+examples: salt, thyme, black pepper
`frozen.json` -- comestibles best eaten frozen
`brewing.json` -- items used in the brewing process
## List of normal comestibles, in order of priority:
-When you have a comestible you want to add to the files, just go down this list, and the first filename you see in the list that matches the criteria is your choice!
+
+When you have a comestible you want to add to the files, just go down this list, and the first
+filename you see in the list that matches the criteria is your choice!
### Liquid
`alcohol.json` -- "Drink" comestible with alcohol addiction
-`soup.json` -- "Drink" comestible which is a soup. This is more of a "food" than a drink - you primarily want the calories from this
+`soup.json` -- "Drink" comestible which is a soup. This is more of a "food" than a drink - you
+primarily want the calories from this
-`drink.json` -- "Drink" comestible. This is your drink of choice when you're thirsty! examples: tea, juice, water
+`drink.json` -- "Drink" comestible. This is your drink of choice when you're thirsty! examples: tea,
+juice, water
-`drink_other.json` -- "Drink" comestible that does not fit any other criteria. example: vinegar, mustard
+`drink_other.json` -- "Drink" comestible that does not fit any other criteria. example: vinegar,
+mustard
### Solid
`junkfood.json` -- comestible with the "junk" material. examples: cake, sugary cereal, nachos
-`sandwich.json` -- a "sandwich" is generally two slices of "bread" with something in between. examples: BLT, PB&J sandwich, fish sandwich
+`sandwich.json` -- a "sandwich" is generally two slices of "bread" with something in between.
+examples: BLT, PB&J sandwich, fish sandwich
-`offal_dishes.json` -- comestible made of various offals. the offal types are: liver, brain, kidney, sweetbread, stomach. This must be the primary part of the dish.
+`offal_dishes.json` -- comestible made of various offals. the offal types are: liver, brain, kidney,
+sweetbread, stomach. This must be the primary part of the dish.
`seed.json` -- seeds
@@ -68,4 +80,4 @@ When you have a comestible you want to add to the files, just go down this list,
`nuts.json` -- a nut or made of nuts
-`other.json` -- if you made it here, your comestible doesn't fit any other category!
\ No newline at end of file
+`other.json` -- if you made it here, your comestible doesn't fit any other category!
diff --git a/doc/IN_REPO_MODS.md b/doc/IN_REPO_MODS.md
index 04f8736f74e4..1a3738b5771e 100644
--- a/doc/IN_REPO_MODS.md
+++ b/doc/IN_REPO_MODS.md
@@ -1,59 +1,98 @@
# Getting Mods Into The Repository
-Cataclysm: Dark Days Ahead is not only moddable, but ships with a number of mods available for users to select from even without having to obtain mods from a third party source.
+Cataclysm: Dark Days Ahead is not only moddable, but ships with a number of mods available for users
+to select from even without having to obtain mods from a third party source.
## Why have in-repo mods?
The benefits of having mods in the repository include:
-* Visibility to a large number of users and potential contributors
-* The ability to use the CleverRaven issue tracker to report problems, as well as manage pull requests for adding to or fixing mods in the repository
-* Mods in the CleverRaven repository that demonstrate usage of a game feature which exists only for mods (i.e. not used by the core DDA game itself) help ensure that feature stays present in the game.
+- Visibility to a large number of users and potential contributors
+- The ability to use the CleverRaven issue tracker to report problems, as well as manage pull
+ requests for adding to or fixing mods in the repository
+- Mods in the CleverRaven repository that demonstrate usage of a game feature which exists only for
+ mods (i.e. not used by the core DDA game itself) help ensure that feature stays present in the
+ game.
There are however things that might be expected but are not guaranteed:
-* Guarantee of maintenance of content -- core devs are mostly focused on the main game itself; although some might pick up mods as a side task, people who continue working on the core game tend to like the feel of the core game.
-* Guarantee of maintenance of used features -- over the course of development it may become impossible to keep a feature, due to performance needs or maintenance burden.
-* Guarantee of sole authorship -- once in the repository, the mod is considered community content. While the developers might defer to an active curator of a mod, if they become inactive anyone else can step forward.
+- Guarantee of maintenance of content -- core devs are mostly focused on the main game itself;
+ although some might pick up mods as a side task, people who continue working on the core game tend
+ to like the feel of the core game.
+- Guarantee of maintenance of used features -- over the course of development it may become
+ impossible to keep a feature, due to performance needs or maintenance burden.
+- Guarantee of sole authorship -- once in the repository, the mod is considered community content.
+ While the developers might defer to an active curator of a mod, if they become inactive anyone
+ else can step forward.
## What kind of mods can be in the CleverRaven repository?
There are three primary categories of mods:
-* Content mods, which provide some kind of distinct experience from the core Dark Days Ahead game. This could be a change to lore, a change to a specific part of gameplay.
-* User Experience (UX) mods, which alter the look and feel of the game interface itself.
-* Development mods, which aren't "mods" in the typical sense but are instead there to ease the transition between "incomplete feature" and "complete feature", when a feature in the core game is sufficiently incomplete that the developers believe it needs to be optional to minimize disruption to players.
+- Content mods, which provide some kind of distinct experience from the core Dark Days Ahead game.
+ This could be a change to lore, a change to a specific part of gameplay.
+- User Experience (UX) mods, which alter the look and feel of the game interface itself.
+- Development mods, which aren't "mods" in the typical sense but are instead there to ease the
+ transition between "incomplete feature" and "complete feature", when a feature in the core game is
+ sufficiently incomplete that the developers believe it needs to be optional to minimize disruption
+ to players.
## What is necessary for a mod to be included in the repository?
-The most crucial criteria for a mod to be in the CleverRaven repository is that it has someone acting as a curator. This ensures that there is someone who is keeping an eye out for possible problems with the mod, and helping steer its development so that it continues to develop in accordance with its design purpose.
+The most crucial criteria for a mod to be in the CleverRaven repository is that it has someone
+acting as a curator. This ensures that there is someone who is keeping an eye out for possible
+problems with the mod, and helping steer its development so that it continues to develop in
+accordance with its design purpose.
Furthermore, there are additional criteria:
-* Content mods need to be providing some kind of curated experience. Either they introduce a set of locations, encounters, equipment, or progression mechanisms that do not fit the style of the core game, or they in some fashion modify the game according to some well-defined concept.
-* * Mods which do not qualify as curated experiences: Grab bag mods with no defined purpose (i.e. adding a bunch of random guns), "settings" mods that just turn off a possibly undesired but working feature (acid ants).
-* Development mods need to have an associated work-in-progress feature that they exist to mitigate.
+- Content mods need to be providing some kind of curated experience. Either they introduce a set of
+ locations, encounters, equipment, or progression mechanisms that do not fit the style of the core
+ game, or they in some fashion modify the game according to some well-defined concept.
+-
+ - Mods which do not qualify as curated experiences: Grab bag mods with no defined purpose (i.e.
+ adding a bunch of random guns), "settings" mods that just turn off a possibly undesired but
+ working feature (acid ants).
+- Development mods need to have an associated work-in-progress feature that they exist to mitigate.
## What are the responsibilities of a mod curator?
-A mod curator's role is to curate additions to mods and ensure they fit the concept of the mod. Curators are also responsible for at least acknowledging bug reports related to the mod: while curators don't have to personally manage every bugfix, if a bug is reported, the curator should be around to comment and help to find someone to fix it.
+A mod curator's role is to curate additions to mods and ensure they fit the concept of the mod.
+Curators are also responsible for at least acknowledging bug reports related to the mod: while
+curators don't have to personally manage every bugfix, if a bug is reported, the curator should be
+around to comment and help to find someone to fix it.
-It's important to understand that if a mod is in the repository, it is expected that people other than the curator are going to contribute to it, as with anything. On github, mod curators should Approve or Request Changes on PRs to the mod. If the curator has approved it, developers with merge permissions will treat that as a request to merge the changes.
+It's important to understand that if a mod is in the repository, it is expected that people other
+than the curator are going to contribute to it, as with anything. On github, mod curators should
+Approve or Request Changes on PRs to the mod. If the curator has approved it, developers with merge
+permissions will treat that as a request to merge the changes.
## When do mods get removed?
-Mods that have no curator or have proven to be consistently some type of maintenance burden are potentially subject to removal. Additionally, mods which had a purpose which is no longer relevant (development mods whose accompanying feature has been finished) will generally be removed once they're no longer deemed necessary. If a curator can't be reached for comment on a bugfix or review on a PR'd change for about a month, and hasn't left any indication of when they'll be back, developers will assume they've left the project, and the mod is orphaned.
+Mods that have no curator or have proven to be consistently some type of maintenance burden are
+potentially subject to removal. Additionally, mods which had a purpose which is no longer relevant
+(development mods whose accompanying feature has been finished) will generally be removed once
+they're no longer deemed necessary. If a curator can't be reached for comment on a bugfix or review
+on a PR'd change for about a month, and hasn't left any indication of when they'll be back,
+developers will assume they've left the project, and the mod is orphaned.
-Whenever a stable release occurs, mods which no longer qualify for inclusion will be marked 'obsolete'. This doesn't remove them from the repository, but it does prevent it from being used in new worlds (barring additional effort on the part of the player).
+Whenever a stable release occurs, mods which no longer qualify for inclusion will be marked
+'obsolete'. This doesn't remove them from the repository, but it does prevent it from being used in
+new worlds (barring additional effort on the part of the player).
## Why do mods get removed?
-While it may be counterintuitive, simply having a mod in the repository increases maintenance burden for the team, even for the people who don't use the mods itself.
+While it may be counterintuitive, simply having a mod in the repository increases maintenance burden
+for the team, even for the people who don't use the mods itself.
-Furthermore, mods which are shipped with the game but are not working correctly for whatever reason reflect poorly on the project on the whole. While it might seem 'easy' to fix a mod, the development team is mostly focused on the core game itself. This is why mod curators are necessary.
+Furthermore, mods which are shipped with the game but are not working correctly for whatever reason
+reflect poorly on the project on the whole. While it might seem 'easy' to fix a mod, the development
+team is mostly focused on the core game itself. This is why mod curators are necessary.
## How can mods be rescued from removal?
-If the mod otherwise meets inclusion criteria but lacks a curator (ie. has been declared orphaned), it's as simple as having someone else step forward as the new curator.
+If the mod otherwise meets inclusion criteria but lacks a curator (ie. has been declared orphaned),
+it's as simple as having someone else step forward as the new curator.
-Otherwise, it needs to either be made to meet the criteria, or it simply isn't going to be staying in the CleverRaven repository.
+Otherwise, it needs to either be made to meet the criteria, or it simply isn't going to be staying
+in the CleverRaven repository.
diff --git a/doc/ITEM_SPAWN.md b/doc/ITEM_SPAWN.md
index c50db7144fd5..a38cc53e337e 100644
--- a/doc/ITEM_SPAWN.md
+++ b/doc/ITEM_SPAWN.md
@@ -2,17 +2,23 @@
## Collection or Distribution
-In a Collection each entry is chosen independently from the other entries. Therefore the probability associated with each entry is absolute, in the range of 0...1. In the json files it is implemented as percentage with values from 0 to 100.
+In a Collection each entry is chosen independently from the other entries. Therefore the probability
+associated with each entry is absolute, in the range of 0...1. In the json files it is implemented
+as percentage with values from 0 to 100.
-A probability of 0 (or negative) means the entry is never chosen, a probability of 100% means its always chosen. The default is 100, because it's the most useful value. Default 0 would mean the entry can be removed anyway.
+A probability of 0 (or negative) means the entry is never chosen, a probability of 100% means its
+always chosen. The default is 100, because it's the most useful value. Default 0 would mean the
+entry can be removed anyway.
-A Distribution is a weighted list like the current system. Exactly one entry is chosen from it. The probability of each entry is relative to the probability of the other entries. A probability of 0 (or negative) means it is never chosen.
-
-An example: Suppose item A has a probability of 30 and item B has a probability of 20. Then the probabilities of the 4 combinations of A and B are:
+A Distribution is a weighted list like the current system. Exactly one entry is chosen from it. The
+probability of each entry is relative to the probability of the other entries. A probability of 0
+(or negative) means it is never chosen.
+An example: Suppose item A has a probability of 30 and item B has a probability of 20. Then the
+probabilities of the 4 combinations of A and B are:
| Combination | Collection | Distribution |
-| ----------------|------------|------------- |
+| --------------- | ---------- | ------------ |
| Neither A nor B | 56% | 0% |
| Only A | 24% | 60% |
| Only B | 14% | 40% |
@@ -33,7 +39,8 @@ The format is this:
}
```
-`subtype` is optional. It can be `collection` or `distribution`. If unspecified, it defaults to `old`, which denotes that this item group uses the old format (which is technically a distribution).
+`subtype` is optional. It can be `collection` or `distribution`. If unspecified, it defaults to
+`old`, which denotes that this item group uses the old format (which is technically a distribution).
There are [some caveats](#ammo-and-magazines) to watch out for when using `ammo` or `magazine`.
@@ -42,32 +49,38 @@ There are [some caveats](#ammo-and-magazines) to watch out for when using `ammo`
The `entries` list contains entries, each of which can be one of the following:
1. Item
- ```json
- { "item": "", ... }
- ```
+ ```json
+ { "item": "", ... }
+ ```
2. Group
- ``` json
- { "group": "", ... }
- ```
+ ```json
+ { "group": "", ... }
+ ```
3. Distribution
- ```json
- { "distribution": [
- "An array of entries, each of which can match any of these 4 formats"
- ] }
- ```
+ ```json
+ {
+ "distribution": [
+ "An array of entries, each of which can match any of these 4 formats"
+ ]
+ }
+ ```
4. Collection
- ```json
- { "collection": [
- "An array of entries, each of which can match any of these 4 formats"
- ] }
- ```
+ ```json
+ {
+ "collection": [
+ "An array of entries, each of which can match any of these 4 formats"
+ ]
+ }
+ ```
-The game decides based on the existence of either the `item` or the `group` value if the entry denotes a item or a reference to another item group.
+The game decides based on the existence of either the `item` or the `group` value if the entry
+denotes a item or a reference to another item group.
-Each entry can have more values (shown above as `...`). They allow further properties of the item(s):
+Each entry can have more values (shown above as `...`). They allow further properties of the
+item(s):
```json
"damage": |,
@@ -87,11 +100,14 @@ Each entry can have more values (shown above as `...`). They allow further prope
"container-group": "",
```
-`contents` is added as contents of the created item. It is not checked if they can be put into the item. This allows water, that contains a book, that contains a steel frame, that contains a corpse.
+`contents` is added as contents of the created item. It is not checked if they can be put into the
+item. This allows water, that contains a book, that contains a steel frame, that contains a corpse.
`count` makes the item spawn repeat to create more items, each time creating a new item.
-`charges`: Setting only min, not max will make the game calculate the max charges based on container or ammo/magazine capacity. Setting max too high will decrease it to maximum capacity. Not setting min will set it to 0 when max is set.
+`charges`: Setting only min, not max will make the game calculate the max charges based on container
+or ammo/magazine capacity. Setting max too high will decrease it to maximum capacity. Not setting
+min will set it to 0 when max is set.
```json
"damage-min": 0,
@@ -100,25 +116,36 @@ Each entry can have more values (shown above as `...`). They allow further prope
"charges": [10, 100]
```
-This will create 4 items, they can have different damage levels as the damage value is rolled separately for each of these items. Each item has charges (AKA ammo) in the range of 10 to 100 (inclusive); if the item needs a magazine before it can have charges, that will be taken care of for you. Using an array (which must have 2 entries) for charges/count/damage is equivalent to writing explicit min and max values. In other words `"count": [a,b]` is the same as `"count-min": a, "count-max": b`.
+This will create 4 items, they can have different damage levels as the damage value is rolled
+separately for each of these items. Each item has charges (AKA ammo) in the range of 10 to 100
+(inclusive); if the item needs a magazine before it can have charges, that will be taken care of for
+you. Using an array (which must have 2 entries) for charges/count/damage is equivalent to writing
+explicit min and max values. In other words `"count": [a,b]` is the same as
+`"count-min": a, "count-max": b`.
-The container is checked and the item is put inside the container, and the charges of the item are capped/increased to match the size of the container.
+The container is checked and the item is put inside the container, and the charges of the item are
+capped/increased to match the size of the container.
### Ammo and Magazines
-Here are some ways to make items spawn with/without ammo/magazines (note that `ammo-item` can
-be specified for guns and magazines in the entries array to use a non-default ammo type):
+Here are some ways to make items spawn with/without ammo/magazines (note that `ammo-item` can be
+specified for guns and magazines in the entries array to use a non-default ammo type):
-* Specify an ammo/magazine chance (introduced in Section 2) for the entire item group.
- `ammo` specifies the percent chance that the entries will spawn fully loaded (if it needs a magazine, it will be added for you).
- `magazine` specifies the percent chance that the entries will spawn with a magazine.
- Both of these default to 0 if unspecified.
+- Specify an ammo/magazine chance (introduced in Section 2) for the entire item group. `ammo`
+ specifies the percent chance that the entries will spawn fully loaded (if it needs a magazine, it
+ will be added for you). `magazine` specifies the percent chance that the entries will spawn with a
+ magazine. Both of these default to 0 if unspecified.
- Note that `ammo` and `magazine` only apply to tools, guns, and magazines. Furthermore, they don't apply to tools whose entry explicitly specifies how much ammo (charges) to spawn with, or to tools whose JSON item definition specifies a random amount or a fixed, nonzero amount of initial charges.
+ Note that `ammo` and `magazine` only apply to tools, guns, and magazines. Furthermore, they don't
+ apply to tools whose entry explicitly specifies how much ammo (charges) to spawn with, or to tools
+ whose JSON item definition specifies a random amount or a fixed, nonzero amount of initial
+ charges.
- If any item groups are referenced from your item group, then their ammo/magazine chances are ignored, and yours are used instead.
+ If any item groups are referenced from your item group, then their ammo/magazine chances are
+ ignored, and yours are used instead.
-* Use `charges`, `charges-min`, or `charges-max` in the entries array. A default magazine will be added for you if needed.
+- Use `charges`, `charges-min`, or `charges-max` in the entries array. A default magazine will be
+ added for you if needed.
## Shortcuts
@@ -134,7 +161,8 @@ means the same as:
"entries": [ { "item": "" }, { "item": "", "prob": 10 } ]
```
-In other words: a single string denotes an item id, an array (which must contain a string and a number) denotes an item id and a probability.
+In other words: a single string denotes an item id, an array (which must contain a string and a
+number) denotes an item id and a probability.
This is true for groups as well:
@@ -142,18 +170,21 @@ This is true for groups as well:
"groups": [ "", [ "", 10 ] ]
```
-This format does not support further properties of the created items - the probability is only optional for entries of collections!
+This format does not support further properties of the created items - the probability is only
+optional for entries of collections!
-The content of "entries", "items" and "groups" are all added if those members exist. This will have the item `` appear twice in the item group:
+The content of "entries", "items" and "groups" are all added if those members exist. This will have
+the item `` appear twice in the item group:
```json
{
- "items": [ "" ],
- "entries": [ { "item": "" } ]
+ "items": [""],
+ "entries": [{ "item": "" }]
}
```
-Another example. The group "milk" spawns a container (taken from milk_containers) that contains milk (maximal amount that fits into the container, because there is no specific charges value defined).
+Another example. The group "milk" spawns a container (taken from milk_containers) that contains milk
+(maximal amount that fits into the container, because there is no specific charges value defined).
```json
{
@@ -177,9 +208,15 @@ Another example. The group "milk" spawns a container (taken from milk_containers
## Inlined item groups
-In some places one can define an item group directly instead of giving the id of a group. One can not refer to that group as it has no visible id (it has an unspecific/random id internally). This is most useful when the group is very specific to the place it is used and wont ever appear anywhere else.
+In some places one can define an item group directly instead of giving the id of a group. One can
+not refer to that group as it has no visible id (it has an unspecific/random id internally). This is
+most useful when the group is very specific to the place it is used and wont ever appear anywhere
+else.
-As an example: monster death drops (`death_drops` entry in the `MONSTER` object, see [JSON_INFO.md](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/JSON_INFO.md)) can do this. If the monster is very specific (e.g. a special robot, a unique endgame monster), the item spawned upon its death won't (in that form) appear in any other group.
+As an example: monster death drops (`death_drops` entry in the `MONSTER` object, see
+[JSON_INFO.md](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/JSON_INFO.md)) can do
+this. If the monster is very specific (e.g. a special robot, a unique endgame monster), the item
+spawned upon its death won't (in that form) appear in any other group.
Therefore, this snippet:
@@ -199,26 +236,30 @@ is equivalent to:
```json
{
- "death_drops": {
- "subtype": "distribution",
- "items": [ "a", "b" ]
- }
+ "death_drops": {
+ "subtype": "distribution",
+ "items": ["a", "b"]
+ }
}
```
-The inline group is read like any other group and one can use all the properties mentioned above. Its `type` and its `id` members are always ignored.
+The inline group is read like any other group and one can use all the properties mentioned above.
+Its `type` and its `id` members are always ignored.
-Instead of a full JSON object, one can also write a JSON array. The default subtype is used and the array is read like the "entries" array (see above). Each entry of that array must be a JSON object. Example:
+Instead of a full JSON object, one can also write a JSON array. The default subtype is used and the
+array is read like the "entries" array (see above). Each entry of that array must be a JSON object.
+Example:
```json
{
- "death_drops": [
- { "item": "rag", "damage": 2 }, { "item": "bowling_ball" }
- ]
+ "death_drops": [
+ { "item": "rag", "damage": 2 },
+ { "item": "bowling_ball" }
+ ]
}
```
-----
+---
### Notes
@@ -227,20 +268,27 @@ Instead of a full JSON object, one can also write a JSON array. The default subt
You can test your item groups in the game:
1. Load a game and call the debug menu
- > *TIP* (If a key isn't bound to the debug menu or you forgot it, use ESC > 1)
+ > _TIP_ (If a key isn't bound to the debug menu or you forgot it, use ESC >
+ > 1)
2. Choose "Test Item Group".
3. Select the item group you want to debug.
- The game will then spawn items in that group 100 times and count the spawned items. They'll then be displayed, sorted by their frequency.
+ The game will then spawn items in that group 100 times and count the spawned items. They'll then
+ be displayed, sorted by their frequency.
- > *TIP*: You can filter anything in the debug menu using /
+ > _TIP_: You can filter anything in the debug menu using /
-You should not add items to the item group `EMPTY_GROUP`. This group can be used when the game requires a group id, but you don't want to spawn any items there. The group will never spawn items.
+You should not add items to the item group `EMPTY_GROUP`. This group can be used when the game
+requires a group id, but you don't want to spawn any items there. The group will never spawn items.
#### SUS
-When adding items to item groups, attempt to locate or create **SUS item groups.** SUS item groups are collections that contain a reasonable realistic distribution of items that might spawn in a given piece of storage furniture. SUS stands for "specific use storage." One of the aims of organizing item groups into specific use storage is to promote reusable tables that can be maintained and extended.
+When adding items to item groups, attempt to locate or create **SUS item groups.** SUS item groups
+are collections that contain a reasonable realistic distribution of items that might spawn in a
+given piece of storage furniture. SUS stands for "specific use storage." One of the aims of
+organizing item groups into specific use storage is to promote reusable tables that can be
+maintained and extended.
You can find SUS item groups at /data/json/itemgroups/SUS
diff --git a/doc/JSON Mapping Guides/Guide for beginning mapgen.md b/doc/JSON Mapping Guides/Guide for beginning mapgen.md
index 209302930c70..a461773c02e0 100644
--- a/doc/JSON Mapping Guides/Guide for beginning mapgen.md
+++ b/doc/JSON Mapping Guides/Guide for beginning mapgen.md
@@ -1,224 +1,302 @@
### Guide for basic mapgen
-This guide will cover the basics of mapgen, which files you need to edit, the tags in each file and the differences in creating specials or regular city buildings. For full technical information about mapgen entries refer to: [doc/MAPGEN.md](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/MAPGEN.md).
+This guide will cover the basics of mapgen, which files you need to edit, the tags in each file and
+the differences in creating specials or regular city buildings. For full technical information about
+mapgen entries refer to:
+[doc/MAPGEN.md](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/MAPGEN.md).
First, lets cover some basic concepts and the files you'll add or edit.
#### General comments:
-CDDA mapgen is surprisingly powerful once you get used to working with it. You can use lots of tricks to add variability and interest to your maps. Most advanced mapgen techniques will go into a different tutorial. This one covers basic concepts and how to create a basic single OMT (overmap terrain tile)sized building. We will touch on palette usage and how to add a roof as well.
+CDDA mapgen is surprisingly powerful once you get used to working with it. You can use lots of
+tricks to add variability and interest to your maps. Most advanced mapgen techniques will go into a
+different tutorial. This one covers basic concepts and how to create a basic single OMT (overmap
+terrain tile)sized building. We will touch on palette usage and how to add a roof as well.
#### Specials vs. city buildings:
-A special is a building that spawns outside the city and requires additional information to spawn, like its distance from cities and valid OMT terrain types. They also used to be the only multi-tile buildings in the game until recent changes allowed special type buildings to spawn inside cities. Examples of specials are: farms, cabins, LMOE, etc.
+A special is a building that spawns outside the city and requires additional information to spawn,
+like its distance from cities and valid OMT terrain types. They also used to be the only multi-tile
+buildings in the game until recent changes allowed special type buildings to spawn inside cities.
+Examples of specials are: farms, cabins, LMOE, etc.
-City buildings can be single or multi-tile in size and have their spawns limited to the city boundaries. A building can be both a city building and a special but would require both sets of entries to spawn for both types. Some motels are examples of this (see: 2fmotel_city & 2fmotel).
+City buildings can be single or multi-tile in size and have their spawns limited to the city
+boundaries. A building can be both a city building and a special but would require both sets of
+entries to spawn for both types. Some motels are examples of this (see: 2fmotel_city & 2fmotel).
-Important policy: since the roof project, all buildings are now multi-tile across z levels. All new buildings should always get a JSON roof added. Soon, all basements will also be custom fit to the ground floor mapgen, so it is good practice to include dedicated downstairs if you want a basement.
+Important policy: since the roof project, all buildings are now multi-tile across z levels. All new
+buildings should always get a JSON roof added. Soon, all basements will also be custom fit to the
+ground floor mapgen, so it is good practice to include dedicated downstairs if you want a basement.
#### The Files & their purpose:
-1. You will add a new mapgen file in: [data/json/mapgen](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/data/json/mapgen) or one of its sub-folders. If you are using an existing foundation shape for the building, you may append it to that building's file.
- * This is the blueprint for the building. It can also hold all the building’s data for adding furniture and loot (see palette for an alternative).
-
-2. You will add entries for each z level you create in the appropriate overmap_terrain file ([data/json/overmap/overmap_terrain](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/data/json/overmap/overmap_terrain)).
- * These entries will define what your building looks like in the overmap, its symbol, color, and spawn requirements like adding sidewalks, it will also control flags for some mapgen functions.
-
-3. You will add an entry into either specials.json or multitile_city_buildings.json depending on if it is a special or a city building.
- * For multitile_city_buildings this will link the various z levels &/or multiple OMTs of your building.
- * For specials, this will link the various z levels or multiple OMTs of your building, define any needed road/subway/etc. connections, and define its spawning parameters.
-
-4. Add an entry into regional_settings.json for city buildings. This will allow them to spawn in the world.
-
-5. Optional but recommended for any large project: adding a new palette file into mapgen_palettes folder (you may use any existing palette too).
- * This is a file that can be shared among several maps that holds a portion of the mapgen file data. It is commonly used for defining terrain and furniture. You can also put in loot, vehicle, monster spawns and any other data that normally goes in the `"object"` tag of the mapgen file.
- * Please avoid editing existing mapgen palettes because you may affect existing maps using a combination of the palette and the mapgen file.
+1. You will add a new mapgen file in:
+ [data/json/mapgen](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/data/json/mapgen) or
+ one of its sub-folders. If you are using an existing foundation shape for the building, you may
+ append it to that building's file.
+ - This is the blueprint for the building. It can also hold all the building’s data for adding
+ furniture and loot (see palette for an alternative).
+
+2. You will add entries for each z level you create in the appropriate overmap_terrain file
+ ([data/json/overmap/overmap_terrain](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/data/json/overmap/overmap_terrain)).
+ - These entries will define what your building looks like in the overmap, its symbol, color, and
+ spawn requirements like adding sidewalks, it will also control flags for some mapgen functions.
+
+3. You will add an entry into either specials.json or multitile_city_buildings.json depending on if
+ it is a special or a city building.
+ - For multitile_city_buildings this will link the various z levels &/or multiple OMTs of your
+ building.
+ - For specials, this will link the various z levels or multiple OMTs of your building, define any
+ needed road/subway/etc. connections, and define its spawning parameters.
+
+4. Add an entry into regional_settings.json for city buildings. This will allow them to spawn in the
+ world.
+
+5. Optional but recommended for any large project: adding a new palette file into mapgen_palettes
+ folder (you may use any existing palette too).
+ - This is a file that can be shared among several maps that holds a portion of the mapgen file
+ data. It is commonly used for defining terrain and furniture. You can also put in loot,
+ vehicle, monster spawns and any other data that normally goes in the `"object"` tag of the
+ mapgen file.
+ - Please avoid editing existing mapgen palettes because you may affect existing maps using a
+ combination of the palette and the mapgen file.
#### Starting the mapgen entry:
-When I start a new map project, I generally will add in all the entries I need for it to spawn in game from the outset. This way I can test it as I work on it and adjust it as needed. So, I recommend setting up all the needed files when you begin your project.
+When I start a new map project, I generally will add in all the entries I need for it to spawn in
+game from the outset. This way I can test it as I work on it and adjust it as needed. So, I
+recommend setting up all the needed files when you begin your project.
Before beginning you’ll want to make some decisions:
1. What size will it be overall (how many OMTs?)
2. Where will it spawn?
3. Will I use a palette or put everything in the mapgen file.
- * If you use a palette, define as much of it as possible from the outset.
+ - If you use a palette, define as much of it as possible from the outset.
4. Advanced questions:
- * Will I use nested maps?
- * Do I want it to connect to the subways or roads?
- * Will I be using the mapgen object data in combination with a palette (see the mall 2nd floor if you want a master class in combined usage of both types)?
+ - Will I use nested maps?
+ - Do I want it to connect to the subways or roads?
+ - Will I be using the mapgen object data in combination with a palette (see the mall 2nd floor if
+ you want a master class in combined usage of both types)?
#### The mapgen map:
-This covers the mapgen file map flags and what they do in layman’s terms. You can get more extensive information from [doc/MAPGEN.md](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/MAPGEN.md).
+This covers the mapgen file map flags and what they do in layman’s terms. You can get more extensive
+information from
+[doc/MAPGEN.md](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/MAPGEN.md).
-the mapgen file has some meta data tags and the `"object"` data which defines everything to make the map.
+the mapgen file has some meta data tags and the `"object"` data which defines everything to make the
+map.
##### The metadata:
Sample:
+
```
- "type": "mapgen",
- "method": "json",
- "om_terrain": "s_restaurant_coffee",
- "weight": 250,
+"type": "mapgen",
+"method": "json",
+"om_terrain": "s_restaurant_coffee",
+"weight": 250,
```
-1. `"type"` will always be mapgen (we'll cover other map types in future tutorials), the `"method"` will always be JSON. This data tells the program how to treat this file.
-2. `"om_terrain"`: this is basically your internal name for the map (not the name that shows up on the overmap). It should usually be unique unless you plan on having multiple variants of the same map which **share the same building foundation shape** (note: I mean the actual shape of the building's foundation).
+1. `"type"` will always be mapgen (we'll cover other map types in future tutorials), the `"method"`
+ will always be JSON. This data tells the program how to treat this file.
+
+2. `"om_terrain"`: this is basically your internal name for the map (not the name that shows up on
+ the overmap). It should usually be unique unless you plan on having multiple variants of the same
+ map which **share the same building foundation shape** (note: I mean the actual shape of the
+ building's foundation).
-3. `"weight"`: This entry is the weight of this particular map compared to others **sharing the same om_terrain name**. So, say you have one version of a house then you make an identical house with different spawns (like a fully furnished house and an abandoned version). This weight will determine how often each spawns in relation to the other. Say the furnished house is at 100, and the abandoned one is at 20. So, it'll spawn 5x less than the furnished house.
+3. `"weight"`: This entry is the weight of this particular map compared to others **sharing the same
+ om_terrain name**. So, say you have one version of a house then you make an identical house with
+ different spawns (like a fully furnished house and an abandoned version). This weight will
+ determine how often each spawns in relation to the other. Say the furnished house is at 100, and
+ the abandoned one is at 20. So, it'll spawn 5x less than the furnished house.
##### The object data:
-This is the section of tags that defines your map, its terrains, furniture, and various spawn types. There are several ways to place items (and nested maps). These deserve their own tutorial. For this document we'll be using "explicit symbol" placement for loot spawns, the easiest to use. Everything in the object section can be placed in a mapgen_palette except rows and fill_ter.
+This is the section of tags that defines your map, its terrains, furniture, and various spawn types.
+There are several ways to place items (and nested maps). These deserve their own tutorial. For this
+document we'll be using "explicit symbol" placement for loot spawns, the easiest to use. Everything
+in the object section can be placed in a mapgen_palette except rows and fill_ter.
-Sample object segment: everything in the object needs to fall within the object's {} braces or it won't be included. If you misplace the end bracket, you probably won't get a loading error.
+Sample object segment: everything in the object needs to fall within the object's {} braces or it
+won't be included. If you misplace the end bracket, you probably won't get a loading error.
Sample:
+
```
- "object": {
- "fill_ter": "t_floor",
- "rows": [
- "S___________SSTzzzzzzzTS",
- "S_____,_____SSzMbMbMbMzS",
- "S_____,_____SSSSSSSS/MzS",
- "S_____,_____SSSSSSSS/MzS",
- "S_____,_____SSzzzSSS/MzS",
- "S_____,_____SS||V{{{V||S",
- "S_____,_____SS|D <|S",
- "SSSSSSSSSSSSSS|r OS",
- "SSSSSSSSSSSSSS|r |S",
- "SVVVVVVVz./Mzz| #W##|S",
- "SVD>>>>Vz./bMzV #ww%|S",
- "SV BBB>Vz.b/..{ xwwF|S",
- "SV B>Vz.Mb..{ flwl|S",
- "SV B>Vz....zV flwU|S",
- "SV B>Vzbbbzz|X #wwG|S",
- "S|B ^||||||||||^ ||I||S",
- "SO6 B|=;|;=|99 r|FwC|S",
- "S|B 6|=A|A=|9 r|Fwc|S",
- "S| B|+|||+|9 D|!ww|S",
- "S|B |Lwl|S",
- "SO6 6 6 6 B66B|Lwl|S",
- "S|B ^???????^ B66B|Lwl|S",
- "S|||||||||||||||||||3||S",
- "S4SSSSSSSSSSSSSSSSSSSSSS"
- ],
- "terrain": {
- " ": "t_floor",
- "!": "t_linoleum_white",
- "#": "t_linoleum_white",
- "%": "t_linoleum_white",
- "+": "t_door_c",
- ",": "t_pavement_y",
- ".": "t_grass",
- "/": "t_dirt",
- "3": [ "t_door_locked", "t_door_locked_alarm" ],
- ";": "t_linoleum_white",
- "=": "t_linoleum_white",
- "A": "t_linoleum_white",
- "C": "t_linoleum_white",
- "F": "t_linoleum_white",
- "G": "t_linoleum_white",
- "I": "t_door_locked_interior",
- "L": "t_linoleum_white",
- "M": "t_dirt",
- "O": "t_window",
- "S": "t_sidewalk",
- "U": "t_linoleum_white",
- "V": "t_wall_glass",
- "W": "t_fencegate_c",
- "_": "t_pavement",
- "b": "t_dirt",
- "c": "t_linoleum_white",
- "f": "t_linoleum_white",
- "l": "t_linoleum_white",
- "w": "t_linoleum_white",
- "x": "t_console_broken",
- "z": "t_shrub",
- "{": "t_door_glass_c",
- "|": "t_wall_b",
- "<": "t_stairs_up",
- "4": "t_gutter_downspout",
- "T": "t_tree_coffee"
- },
- "furniture": {
- "#": "f_counter",
- "%": "f_trashcan",
- "/": "f_bluebell",
- "6": "f_table",
- "9": "f_rack",
- ">": "f_counter",
- "?": "f_sofa",
- "A": "f_sink",
- "B": "f_chair",
- "C": "f_desk",
- "D": "f_trashcan",
- "F": "f_fridge",
- "G": "f_oven",
- "L": "f_locker",
- "M": "f_dahlia",
- "U": "f_sink",
- "X": "f_rack",
- "^": "f_indoor_plant",
- "b": "f_dandelion",
- "f": "f_glass_fridge",
- "l": "f_rack",
- "r": "f_rack"
- },
- "toilets": { ";": { } },
- "items": {
- "#": { "item": "coffee_counter", "chance": 10 },
- "6": { "item": "coffee_table", "chance": 35 },
- "9": { "item": "coffee_display_2", "chance": 85, "repeat": [ 1, 8 ] },
- ";": { "item": "coffee_bathroom", "chance": 15 },
- "=": { "item": "coffee_bathroom", "chance": 35 },
- ">": { "item": "coffee_table", "chance": 25 },
- "A": { "item": "coffee_bathroom", "chance": 35 },
- "C": { "item": "office", "chance": 70 },
- "D": { "item": "coffee_trash", "chance": 75 },
- "F": { "item": "coffee_fridge", "chance": 80, "repeat": [ 1, 8 ] },
- "G": { "item": "oven", "chance": 35 },
- "L": { "item": "coffee_locker", "chance": 75 },
- "U": { "item": "coffee_dishes", "chance": 75 },
- "X": { "item": "coffee_newsstand", "chance": 90, "repeat": [ 1, 8 ] },
- "f": { "item": "coffee_freezer", "chance": 85, "repeat": [ 1, 8 ] },
- "l": { "item": "coffee_prep", "chance": 50 },
- "r": { "item": "coffee_condiments", "chance": 80, "repeat": [ 1, 8 ] }
- },
- "monsters": { "!": { "monster": "GROUP_COFFEE_SHOP_ZOMBIE", "chance": 1 } },
- "place_monsters": [ { "monster": "GROUP_ZOMBIE", "x": [ 3, 17 ], "y": [ 13, 18 ], "chance": 1 } ],
- "vehicles": { "c": { "vehicle": "swivel_chair", "chance": 100, "status": 1 } }
- }
+"object": {
+ "fill_ter": "t_floor",
+ "rows": [
+ "S___________SSTzzzzzzzTS",
+ "S_____,_____SSzMbMbMbMzS",
+ "S_____,_____SSSSSSSS/MzS",
+ "S_____,_____SSSSSSSS/MzS",
+ "S_____,_____SSzzzSSS/MzS",
+ "S_____,_____SS||V{{{V||S",
+ "S_____,_____SS|D <|S",
+ "SSSSSSSSSSSSSS|r OS",
+ "SSSSSSSSSSSSSS|r |S",
+ "SVVVVVVVz./Mzz| #W##|S",
+ "SVD>>>>Vz./bMzV #ww%|S",
+ "SV BBB>Vz.b/..{ xwwF|S",
+ "SV B>Vz.Mb..{ flwl|S",
+ "SV B>Vz....zV flwU|S",
+ "SV B>Vzbbbzz|X #wwG|S",
+ "S|B ^||||||||||^ ||I||S",
+ "SO6 B|=;|;=|99 r|FwC|S",
+ "S|B 6|=A|A=|9 r|Fwc|S",
+ "S| B|+|||+|9 D|!ww|S",
+ "S|B |Lwl|S",
+ "SO6 6 6 6 B66B|Lwl|S",
+ "S|B ^???????^ B66B|Lwl|S",
+ "S|||||||||||||||||||3||S",
+ "S4SSSSSSSSSSSSSSSSSSSSSS"
+ ],
+ "terrain": {
+ " ": "t_floor",
+ "!": "t_linoleum_white",
+ "#": "t_linoleum_white",
+ "%": "t_linoleum_white",
+ "+": "t_door_c",
+ ",": "t_pavement_y",
+ ".": "t_grass",
+ "/": "t_dirt",
+ "3": [ "t_door_locked", "t_door_locked_alarm" ],
+ ";": "t_linoleum_white",
+ "=": "t_linoleum_white",
+ "A": "t_linoleum_white",
+ "C": "t_linoleum_white",
+ "F": "t_linoleum_white",
+ "G": "t_linoleum_white",
+ "I": "t_door_locked_interior",
+ "L": "t_linoleum_white",
+ "M": "t_dirt",
+ "O": "t_window",
+ "S": "t_sidewalk",
+ "U": "t_linoleum_white",
+ "V": "t_wall_glass",
+ "W": "t_fencegate_c",
+ "_": "t_pavement",
+ "b": "t_dirt",
+ "c": "t_linoleum_white",
+ "f": "t_linoleum_white",
+ "l": "t_linoleum_white",
+ "w": "t_linoleum_white",
+ "x": "t_console_broken",
+ "z": "t_shrub",
+ "{": "t_door_glass_c",
+ "|": "t_wall_b",
+ "<": "t_stairs_up",
+ "4": "t_gutter_downspout",
+ "T": "t_tree_coffee"
+ },
+ "furniture": {
+ "#": "f_counter",
+ "%": "f_trashcan",
+ "/": "f_bluebell",
+ "6": "f_table",
+ "9": "f_rack",
+ ">": "f_counter",
+ "?": "f_sofa",
+ "A": "f_sink",
+ "B": "f_chair",
+ "C": "f_desk",
+ "D": "f_trashcan",
+ "F": "f_fridge",
+ "G": "f_oven",
+ "L": "f_locker",
+ "M": "f_dahlia",
+ "U": "f_sink",
+ "X": "f_rack",
+ "^": "f_indoor_plant",
+ "b": "f_dandelion",
+ "f": "f_glass_fridge",
+ "l": "f_rack",
+ "r": "f_rack"
+ },
+ "toilets": { ";": { } },
+ "items": {
+ "#": { "item": "coffee_counter", "chance": 10 },
+ "6": { "item": "coffee_table", "chance": 35 },
+ "9": { "item": "coffee_display_2", "chance": 85, "repeat": [ 1, 8 ] },
+ ";": { "item": "coffee_bathroom", "chance": 15 },
+ "=": { "item": "coffee_bathroom", "chance": 35 },
+ ">": { "item": "coffee_table", "chance": 25 },
+ "A": { "item": "coffee_bathroom", "chance": 35 },
+ "C": { "item": "office", "chance": 70 },
+ "D": { "item": "coffee_trash", "chance": 75 },
+ "F": { "item": "coffee_fridge", "chance": 80, "repeat": [ 1, 8 ] },
+ "G": { "item": "oven", "chance": 35 },
+ "L": { "item": "coffee_locker", "chance": 75 },
+ "U": { "item": "coffee_dishes", "chance": 75 },
+ "X": { "item": "coffee_newsstand", "chance": 90, "repeat": [ 1, 8 ] },
+ "f": { "item": "coffee_freezer", "chance": 85, "repeat": [ 1, 8 ] },
+ "l": { "item": "coffee_prep", "chance": 50 },
+ "r": { "item": "coffee_condiments", "chance": 80, "repeat": [ 1, 8 ] }
+ },
+ "monsters": { "!": { "monster": "GROUP_COFFEE_SHOP_ZOMBIE", "chance": 1 } },
+ "place_monsters": [ { "monster": "GROUP_ZOMBIE", "x": [ 3, 17 ], "y": [ 13, 18 ], "chance": 1 } ],
+ "vehicles": { "c": { "vehicle": "swivel_chair", "chance": 100, "status": 1 } }
+}
```
-1. The `"fill_ter"`: this tag defines the default terrain/flooring for use under furniture and for undefined symbols in your rows. Generally, pick the terrain that has the most furniture associated with it.
+1. The `"fill_ter"`: this tag defines the default terrain/flooring for use under furniture and for
+ undefined symbols in your rows. Generally, pick the terrain that has the most furniture
+ associated with it.
-2. The `"rows"`: this is the actual blueprint for your building. A standard OMT tile (overmap tile) is 24x24 tiles. Rows begin their x,y coordinates at 0,0 which is the upper left corner of your map.
- * tip: if you cross stitch or are familiar with cross stitch patterns, this should all look very familiar. You have the map and the "legend" areas.
+2. The `"rows"`: this is the actual blueprint for your building. A standard OMT tile (overmap tile)
+ is 24x24 tiles. Rows begin their x,y coordinates at 0,0 which is the upper left corner of your
+ map.
+ - tip: if you cross stitch or are familiar with cross stitch patterns, this should all look very
+ familiar. You have the map and the "legend" areas.
-3. `"terrain"`: this defines what all those letters in the rows mean when they are terrains. A symbol can return a single terrain, or, it can offer a chance to spawn from a selection of terrains. Here are some quick examples:
+3. `"terrain"`: this defines what all those letters in the rows mean when they are terrains. A
+ symbol can return a single terrain, or, it can offer a chance to spawn from a selection of
+ terrains. Here are some quick examples:
`"*": "t_door_c",`: this will make every * in the rows a closed wooden door.
-`"*": [ [ "t_door_locked_peep", 2 ], "t_door_locked_alarm", [ "t_door_locked", 10 ], "t_door_c" ],`: this array will randomly choose from a selection of doors. Some are weighted to have a higher chance to spawn then others. Locked doors will be most common, then peephole doors. Finally closed & locked/alarmed have the same basic weight and will spawn the least.
-
-*Note: in my example, the fill_ter is for floor. So if you have furniture that you want to spawn with a different floor, you must use that same symbol that you've given the furniture and also define it as a terrain for your new flooring. In the above example, several furniture symbols are using white linoleum for their flooring. If you don't do this step, your furniture will end up having the wrong flooring which will be especially noticeable if you smash it. I often do a final map check where I go around in game and smash furniture to check their terrains before submitting my maps. This can be quite cathartic.*
-
-4. `"furniture"` tag: Like terrain, this is a list of the furniture ID's and their map symbols. It can handle the same sort of arrays as terrain.
-
-5. `"toilets"` and other specially defined furniture: you'll run into some specially defined common furniture which allows for some easier placement. In our sample map the entry: `"toilets": { ";": { } },` defines the symbol entry and will also auto-place water in your toilets. There are a few other specialty furniture entries.
-
-The other most common one is: `"vendingmachines": { "D": { "item_group": "vending_drink" }, "V": { "item_group": "vending_food" } }` this assigns two symbols for vending machines and makes one for food & one for drinks. *note: you can put any item_group into the machines, like those bullet ones*.
-
-6. Item spawns: There are many ways to place items. This tutorial will only cover explicit symbol placement which is the easiest. There is documentation all about loot spawns you can read for further information. See: [doc/ITEM_SPAWN.md](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/ITEM_SPAWN.md).
-
-our sample uses "items": for its tag. others include: "place_item", "place_items", "place_loot". Some of these allow for individual item placement and others groups, or both. This will be covered in another tutorial.
+`"*": [ [ "t_door_locked_peep", 2 ], "t_door_locked_alarm", [ "t_door_locked", 10 ], "t_door_c" ],`:
+this array will randomly choose from a selection of doors. Some are weighted to have a higher chance
+to spawn then others. Locked doors will be most common, then peephole doors. Finally closed &
+locked/alarmed have the same basic weight and will spawn the least.
+
+_Note: in my example, the fill_ter is for floor. So if you have furniture that you want to spawn
+with a different floor, you must use that same symbol that you've given the furniture and also
+define it as a terrain for your new flooring. In the above example, several furniture symbols are
+using white linoleum for their flooring. If you don't do this step, your furniture will end up
+having the wrong flooring which will be especially noticeable if you smash it. I often do a final
+map check where I go around in game and smash furniture to check their terrains before submitting my
+maps. This can be quite cathartic._
+
+4. `"furniture"` tag: Like terrain, this is a list of the furniture ID's and their map symbols. It
+ can handle the same sort of arrays as terrain.
+
+5. `"toilets"` and other specially defined furniture: you'll run into some specially defined common
+ furniture which allows for some easier placement. In our sample map the entry:
+ `"toilets": { ";": { } },` defines the symbol entry and will also auto-place water in your
+ toilets. There are a few other specialty furniture entries.
+
+The other most common one is:
+`"vendingmachines": { "D": { "item_group": "vending_drink" }, "V": { "item_group": "vending_food" } }`
+this assigns two symbols for vending machines and makes one for food & one for drinks. _note: you
+can put any item_group into the machines, like those bullet ones_.
+
+6. Item spawns: There are many ways to place items. This tutorial will only cover explicit symbol
+ placement which is the easiest. There is documentation all about loot spawns you can read for
+ further information. See:
+ [doc/ITEM_SPAWN.md](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/ITEM_SPAWN.md).
+
+our sample uses "items": for its tag. others include: "place_item", "place_items", "place_loot".
+Some of these allow for individual item placement and others groups, or both. This will be covered
+in another tutorial.
For now lets break this one apart:
+
```
"items": {
"a": { "item": "stash_wood", "chance": 30, "repeat": [ 2, 5 ] },
@@ -229,11 +307,20 @@ For now lets break this one apart:
}
```
-"a" in this case is a fireplace as defined in its map. So, in the fireplace I want to add the stash_wood item_group. By defining the group under "a", every fireplace in my map will get this group. This is particularly powerful for common item_groups like in houses where every fridge is going to get the same item_group. The chance is its spawn chance and repeat means that it will repeat the roll for that chance 2-5 times, so this fireplace can be extra stocked or have a little bit or nothing if it fails its chance rolls.
+"a" in this case is a fireplace as defined in its map. So, in the fireplace I want to add the
+stash_wood item_group. By defining the group under "a", every fireplace in my map will get this
+group. This is particularly powerful for common item_groups like in houses where every fridge is
+going to get the same item_group. The chance is its spawn chance and repeat means that it will
+repeat the roll for that chance 2-5 times, so this fireplace can be extra stocked or have a little
+bit or nothing if it fails its chance rolls.
+
+the "d" entry is a dresser. I wanted the dressers to pull from two possible item groups, one a man's
+selection and the other women’s. So, there is an array [ ... ] which encompasses all possible
+item_groups for this symbol.
-the "d" entry is a dresser. I wanted the dressers to pull from two possible item groups, one a man's selection and the other women’s. So, there is an array [ ... ] which encompasses all possible item_groups for this symbol.
+You can add as many item_groups to the array as you'd like. This is one of my racks in the generic
+house palette:
-You can add as many item_groups to the array as you'd like. This is one of my racks in the generic house palette:
```
"q": [
{ "item": "tools_home", "chance": 40 },
@@ -244,23 +331,37 @@ You can add as many item_groups to the array as you'd like. This is one of my r
],
```
-*Note: When using explicit symbol placements, remember your group has a chance to spawn in every furniture using that symbol, so it can end up being quite generous. If you want two bookcases with different item spawns, give each bookcase its own symbol, or, use an alternate item spawn format, like the one using x,y coordinates for placement.*
+_Note: When using explicit symbol placements, remember your group has a chance to spawn in every
+furniture using that symbol, so it can end up being quite generous. If you want two bookcases with
+different item spawns, give each bookcase its own symbol, or, use an alternate item spawn format,
+like the one using x,y coordinates for placement._
+
+7. Monster spawns: our example has two types of monster spawns listed.
-7. Monster spawns: our example has two types of monster spawns listed.
```
"monsters": { "!": { "monster": "GROUP_COFFEE_SHOP_ZOMBIE", "chance": 1 } },
"place_monsters": [ { "monster": "GROUP_ZOMBIE", "x": [ 3, 17 ], "y": [ 13, 18 ], "chance": 1 } ],
```
-The first entry is using that explicit symbol placement technique. The end entry is using a range x,y coordinates to place monsters. *Note: We are moving away from putting monsters in the mapgen file in favor of overmap_terrain entries, so only use this if you want a specific monster group to spawn for specific reasons. See overmap_terrain section for more information.*
+The first entry is using that explicit symbol placement technique. The end entry is using a range
+x,y coordinates to place monsters. _Note: We are moving away from putting monsters in the mapgen
+file in favor of overmap_terrain entries, so only use this if you want a specific monster group to
+spawn for specific reasons. See overmap_terrain section for more information._
8. Vehicle spawns:
+
```
"vehicles": { "c": { "vehicle": "swivel_chair", "chance": 100, "status": 1 } }
```
+
Our vehicle happens to be a swivel chair using explicit symbol placement.
-This next example uses vehicle_groups and x,y placement. It also includes rotation and status. The rotation is which direction the vehicle will spawn on the map, and that status is its overall condition. Fuel is pretty self explanatory. Always test your vehcile spawns in game, they can be rather picky in their placement and the rotation doesn't really match what you'd expect the numbers to mean. The 0,0 point of vehicles can vary so you'll have to experiment to get the spawns in the right spots, especially in tight spaces.
+This next example uses vehicle_groups and x,y placement. It also includes rotation and status. The
+rotation is which direction the vehicle will spawn on the map, and that status is its overall
+condition. Fuel is pretty self explanatory. Always test your vehcile spawns in game, they can be
+rather picky in their placement and the rotation doesn't really match what you'd expect the numbers
+to mean. The 0,0 point of vehicles can vary so you'll have to experiment to get the spawns in the
+right spots, especially in tight spaces.
```
"place_vehicles": [
@@ -273,17 +374,21 @@ This next example uses vehicle_groups and x,y placement. It also includes rotat
{ "chance": 75, "fuel": 0, "rotation": 270, "status": 1, "vehicle": "junkyard_vehicles", "x": 28, "y": 18 },
{ "chance": 75, "fuel": 0, "rotation": 270, "status": 1, "vehicle": "junkyard_vehicles", "x": 35, "y": 18 }
]
- ```
+```
-9. Liquids in furniture: this entry is for a standing tank. I've defined the tank in the furniture entry as "g".
+9. Liquids in furniture: this entry is for a standing tank. I've defined the tank in the furniture
+ entry as "g".
`"liquids": { "g": { "liquid": "water_clean", "amount": [ 0, 100 ] } },`
This places clean water in the tank, and a range of amount to spawn.
-10. There are other specialty placement techniques that you'll pick up as you look at more maps. One of my favorites is for the new planters:
+10. There are other specialty placement techniques that you'll pick up as you look at more maps. One
+ of my favorites is for the new planters:
-Since the planter is a "sealed item" you define what's going into that container. This example places seeds (ready to harvest) in the planters. Note the first one will place a seedling, the others are harvest ready. I've given each planter type an explicit symbol for quicker placement.
+Since the planter is a "sealed item" you define what's going into that container. This example
+places seeds (ready to harvest) in the planters. Note the first one will place a seedling, the
+others are harvest ready. I've given each planter type an explicit symbol for quicker placement.
```
"sealed_item": {
@@ -297,111 +402,139 @@ Since the planter is a "sealed item" you define what's going into that container
"8": { "item": { "item": "soybean_seed" }, "furniture": "f_planter_harvest" },
"9": { "item": { "item": "seed_zucchini" }, "furniture": "f_planter_harvest" }
}
- ```
+```
-11. Best practices:
- * If you are making a new house please use this palette: "standard_domestic_palette". The loots are already assigned and it covers a wide range of domestic furniture. This will keep your house in sync with all the other houses for loot spawns.
- * All buildings should also get roof entries.
- * While entry placement for json doesn't really matter, try to keep your mapgen files ordered like the majority existing maps. Be kind to future contributors.
- Add meta data at the top of the file.
- Object entry comes second. Within the object entry it is generally: palette, set_points, terrain, furniture, random special entries like toilets, item spawns, vehicle spawns, monster spawns.
- * All buildings should at least get one "t_gutter_downspout" for roof access. Players would love at least 2.
- if you're adding gutters to a multi-z level building, don't forget the intermediate floors. You'll need to stagger the downspouts to players can climb up (like ladders).
- * If you put things on your roof that would be difficult to get up there, make sure to provide better roof access via ladders and stairs.
- * For your basic grass cover outside please use: `"t_region_groundcover_urban",` to maintain consistency across map boundaries. Here are my standard flora entries for grass, shrubs & trees:
+11. Best practices:
+
+- If you are making a new house please use this palette: "standard_domestic_palette". The loots are
+ already assigned and it covers a wide range of domestic furniture. This will keep your house in
+ sync with all the other houses for loot spawns.
+- All buildings should also get roof entries.
+- While entry placement for json doesn't really matter, try to keep your mapgen files ordered like
+ the majority existing maps. Be kind to future contributors. Add meta data at the top of the file.
+ Object entry comes second. Within the object entry it is generally: palette, set_points, terrain,
+ furniture, random special entries like toilets, item spawns, vehicle spawns, monster spawns.
+- All buildings should at least get one "t_gutter_downspout" for roof access. Players would love at
+ least 2. if you're adding gutters to a multi-z level building, don't forget the intermediate
+ floors. You'll need to stagger the downspouts to players can climb up (like ladders).
+- If you put things on your roof that would be difficult to get up there, make sure to provide
+ better roof access via ladders and stairs.
+- For your basic grass cover outside please use: `"t_region_groundcover_urban",` to maintain
+ consistency across map boundaries. Here are my standard flora entries for grass, shrubs & trees:
```
- ".": "t_region_groundcover_urban",
- "A": [ "t_region_shrub", "t_region_shrub_fruit", "t_region_shrub_decorative" ],
- "Z": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ],
+".": "t_region_groundcover_urban",
+"A": [ "t_region_shrub", "t_region_shrub_fruit", "t_region_shrub_decorative" ],
+"Z": [ [ "t_region_tree_fruit", 2 ], [ "t_region_tree_nut", 2 ], "t_region_tree_shade" ],
```
finally for flowers (which are furniture):
+
```
"p": "f_region_flower"
```
#### Adding the roof!
-Almost all CDDA buildings are now roof-capable and we'd love to keep it that way. Make sure to submit a roof map with your building. This can go into the same file as your ground floor and any other floors that share the same building shape/foundation.
+Almost all CDDA buildings are now roof-capable and we'd love to keep it that way. Make sure to
+submit a roof map with your building. This can go into the same file as your ground floor and any
+other floors that share the same building shape/foundation.
-So, this is super easy compared to the building we just went over. It has all the same basic components. I recommend you start by using the rows from your ground floor map and converting it to the `"roof_palette"` symbol set. Basically your just going to trace the outline in gutters, add a t_gutter_drop next to your t_gutter_spout below and toss some infrastructure up there. I used nests extensively in commercial building roofs and we'll cover that in advanced mapgen.
+So, this is super easy compared to the building we just went over. It has all the same basic
+components. I recommend you start by using the rows from your ground floor map and converting it to
+the `"roof_palette"` symbol set. Basically your just going to trace the outline in gutters, add a
+t_gutter_drop next to your t_gutter_spout below and toss some infrastructure up there. I used nests
+extensively in commercial building roofs and we'll cover that in advanced mapgen.
sample roof:
+
```
- {
- "type": "mapgen",
- "method": "json",
- "om_terrain": "house_01_roof",
- "object": {
- "fill_ter": "t_shingle_flat_roof",
- "rows": [
- " ",
- " ",
- " ",
- " |222222222222222223 ",
- " |.................3 ",
- " |.................3 ",
- " |.............N...3 ",
- " 5.................3 ",
- " |.................3 ",
- " |.................3 ",
- " |........&........3 ",
- " |.................3 ",
- " |......=..........3 ",
- " |.................3 ",
- " |----------------53 ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " "
- ],
- "palettes": [ "roof_palette" ],
- "terrain": { ".": "t_shingle_flat_roof" }
- }
+{
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "house_01_roof",
+ "object": {
+ "fill_ter": "t_shingle_flat_roof",
+ "rows": [
+ " ",
+ " ",
+ " ",
+ " |222222222222222223 ",
+ " |.................3 ",
+ " |.................3 ",
+ " |.............N...3 ",
+ " 5.................3 ",
+ " |.................3 ",
+ " |.................3 ",
+ " |........&........3 ",
+ " |.................3 ",
+ " |......=..........3 ",
+ " |.................3 ",
+ " |----------------53 ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ],
+ "palettes": [ "roof_palette" ],
+ "terrain": { ".": "t_shingle_flat_roof" }
}
- ```
+}
+```
- 1. I always just append `_roof` to the buildings ID.
- 2. See how the palette takes the place of all that data from our earlier example. So clean and easy.
- 3. There is no `"weight"` entry because this will only spawn with its building (once linked).
- 4. My palette uses "t_flat_roof" as its default roof. For houses, I wanted shingles. So, I added the "t_shingle_flat_roof" in this mapgen which will override the palettes entry for `".": "t_flat_roof"`. (more on this in advanced mapgen).
+1. I always just append `_roof` to the buildings ID.
+2. See how the palette takes the place of all that data from our earlier example. So clean and easy.
+3. There is no `"weight"` entry because this will only spawn with its building (once linked).
+4. My palette uses "t_flat_roof" as its default roof. For houses, I wanted shingles. So, I added the
+ "t_shingle_flat_roof" in this mapgen which will override the palettes entry for
+ `".": "t_flat_roof"`. (more on this in advanced mapgen).
-I have a separate roof document at: [doc/JSON Mapping Guides/JSON_ROOF_MAPGEN.md](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/JSON%20Mapping%20Guides/JSON_ROOF_MAPGEN.md).
+I have a separate roof document at:
+[doc/JSON Mapping Guides/JSON_ROOF_MAPGEN.md](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/JSON%20Mapping%20Guides/JSON_ROOF_MAPGEN.md).
#### Linking various mapgen maps using multitile_city_buildings.json
- This file is found at: [data/json/overmap/multitile_city_buildings.json](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/data/json/overmap/multitile_city_buildings.json).
+This file is found at:
+[data/json/overmap/multitile_city_buildings.json](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/data/json/overmap/multitile_city_buildings.json).
- *Remember this file is for city buildings only, not specials*
+_Remember this file is for city buildings only, not specials_
- A standard entry:
- ```
- {
- "type": "city_building",
- "id": "house_dogs",
- "locations": [ "land" ],
- "overmaps": [
- { "point": [ 0, 0, 0 ], "overmap": "house_dogs_north" },
- { "point": [ 0, 0, 1 ], "overmap": "house_dogs_roof_north" },
- { "point": [ 0, 0, -1 ], "overmap": "basement" }
- ]
- },
- ```
+A standard entry:
+
+```
+{
+ "type": "city_building",
+ "id": "house_dogs",
+ "locations": [ "land" ],
+ "overmaps": [
+ { "point": [ 0, 0, 0 ], "overmap": "house_dogs_north" },
+ { "point": [ 0, 0, 1 ], "overmap": "house_dogs_roof_north" },
+ { "point": [ 0, 0, -1 ], "overmap": "basement" }
+ ]
+},
+```
- 1. The `"type"` won't change. It should always be "city_building".
- 2. `"id"`: This ID is often the same as your mapgen ID but it doesn't have to be the same. We could use something more generic like "house". This ID will be used in regional settings for spawns, so keep in mind how many buildings are using the ID. I prefer distinct ID's because it makes debug spawning much, much easier.
- 3. `"locations"`: defines where this building can be place by overmap terrain type. Land is the default.
- 4. `"overmaps"`: this is the bit where you define how the maps fit together, so lets break it up:
- `{ "point": [ 0, 0, 0 ], "overmap": "house_dogs_north" },`
- point: its point in relation to the other mapgen files for your building. The coordinates are [ x, y, z ]. In this example, x,y are 0 because we only have one map per z level. Zero for y means this is the ground level. Note the roof above is at 1 and the basement is -1.
- 5. appending `_north` to the ID's:
- * If your building rotates you need this compass point so the floors can match up correctly. This is the generic basement mapgen group and thus doesn't get `_north` (this will change as we add dedicated stairs to our houses).
+1. The `"type"` won't change. It should always be "city_building".
+2. `"id"`: This ID is often the same as your mapgen ID but it doesn't have to be the same. We could
+ use something more generic like "house". This ID will be used in regional settings for spawns, so
+ keep in mind how many buildings are using the ID. I prefer distinct ID's because it makes debug
+ spawning much, much easier.
+3. `"locations"`: defines where this building can be place by overmap terrain type. Land is the
+ default.
+4. `"overmaps"`: this is the bit where you define how the maps fit together, so lets break it up:
+ `{ "point": [ 0, 0, 0 ], "overmap": "house_dogs_north" },` point: its point in relation to the
+ other mapgen files for your building. The coordinates are [ x, y, z ]. In this example, x,y are 0
+ because we only have one map per z level. Zero for y means this is the ground level. Note the
+ roof above is at 1 and the basement is -1.
+5. appending `_north` to the ID's:
+ - If your building rotates you need this compass point so the floors can match up correctly. This
+ is the generic basement mapgen group and thus doesn't get `_north` (this will change as we add
+ dedicated stairs to our houses).
#### Setting overmap spawns using regional_map_settings.json
@@ -409,16 +542,20 @@ I have a separate roof document at: [doc/JSON Mapping Guides/JSON_ROOF_MAPGEN.md
1. For city buildings and houses you'll scroll down to the `"city":` flag.
2. Find your appropriate subtag, `"houses"` or `"shops"` usually.
-3. Add your ID from the multitile_city_buildings entry. This can also accept the mapgen ID and not complain which is why the are often the same name.
+3. Add your ID from the multitile_city_buildings entry. This can also accept the mapgen ID and not
+ complain which is why the are often the same name.
4. Choose a good weight for your building.
#### Linking and spawning specials:
-Put the entry in: [data/json/overmap/overmap_special/specials.json](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/data/json/overmap/overmap_special/specials.json).
+Put the entry in:
+[data/json/overmap/overmap_special/specials.json](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/data/json/overmap/overmap_special/specials.json).
-This entry does the job of both the regional_map_settings and multitile_city_buildings plus other fun overmap stuff.
+This entry does the job of both the regional_map_settings and multitile_city_buildings plus other
+fun overmap stuff.
Example:
+
```
{
"type": "overmap_special",
@@ -444,146 +581,176 @@ Example:
"occurrences": [ 0, 1 ],
"flags": [ "CLASSIC" ]
}
- ```
-
- 1. `"type"`: is overmap_special.
- 2. `"id"` is your buildings ID for the overmap. It also displays on the overmap in game.
- 3. `"overmaps"` this works the same way as it does in the city building entries. Note that the pump station is bigger then 1 OMT on the ground, so the y coordinate changes as well.
- 4. `"connections"`: this places road, sewer, subway connections for your map.
- 5. `"locations"`: valid OMT types this building can be placed on.
- 6. `"city_distance"`, `"city_sizes"` both are parameters for where this spawns in relation to cities.
- 7. `"occurrences": [ 0, 1 ],`: Ok so occurrences can mean two things depending on if it uses the "UNIQUE" flag or not. When the flag is absent, this simply translates to how many times this special can spawn PER overmap. So 0 to 1 in this case.
- If you use the UNIQUE flag, this becomes a percentage so [ 1, 10 ] wouldn't be 1 to 10 times per overmap but a 1 in 10% chance to spawn on the overmap. So 10% chance to spawn once per overmap.
- 8. `"flags"`: These are flags you can use to further define the special. For a list of flags see: [doc/JSON_FLAGS.md](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/JSON_FLAGS.md).
+```
-Read: [doc/OVERMAP.md](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/OVERMAP.md) for more details.
+1. `"type"`: is overmap_special.
+2. `"id"` is your buildings ID for the overmap. It also displays on the overmap in game.
+3. `"overmaps"` this works the same way as it does in the city building entries. Note that the pump
+ station is bigger then 1 OMT on the ground, so the y coordinate changes as well.
+4. `"connections"`: this places road, sewer, subway connections for your map.
+5. `"locations"`: valid OMT types this building can be placed on.
+6. `"city_distance"`, `"city_sizes"` both are parameters for where this spawns in relation to
+ cities.
+7. `"occurrences": [ 0, 1 ],`: Ok so occurrences can mean two things depending on if it uses the
+ "UNIQUE" flag or not. When the flag is absent, this simply translates to how many times this
+ special can spawn PER overmap. So 0 to 1 in this case. If you use the UNIQUE flag, this becomes a
+ percentage so [ 1, 10 ] wouldn't be 1 to 10 times per overmap but a 1 in 10% chance to spawn on
+ the overmap. So 10% chance to spawn once per overmap.
+8. `"flags"`: These are flags you can use to further define the special. For a list of flags see:
+ [doc/JSON_FLAGS.md](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/JSON_FLAGS.md).
+
+Read: [doc/OVERMAP.md](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/OVERMAP.md) for
+more details.
#### Overmap_terrain entries:
-Choose a file for your building type at: [data/json/overmap/overmap_terrain](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/data/json/overmap/overmap_terrain).
+Choose a file for your building type at:
+[data/json/overmap/overmap_terrain](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/data/json/overmap/overmap_terrain).
-This set of entries defines how your building will look on the overmap. It supports copy-from.
+This set of entries defines how your building will look on the overmap. It supports copy-from.
Example:
+
+```
+{
+ "type": "overmap_terrain",
+ "id": "s_music",
+ "copy-from": "generic_city_building",
+ "name": "music store",
+ "sym": "m",
+ "color": "brown",
+ "mondensity": 2,
+ "extend": { "flags": [ "SOURCE_LUXURY" ] }
+},
+{
+ "type": "overmap_terrain",
+ "id": "s_music_roof",
+ "copy-from": "generic_city_building",
+ "name": "music store roof",
+ "sym": "m",
+ "color": "brown"
+}
```
- {
- "type": "overmap_terrain",
- "id": "s_music",
- "copy-from": "generic_city_building",
- "name": "music store",
- "sym": "m",
- "color": "brown",
- "mondensity": 2,
- "extend": { "flags": [ "SOURCE_LUXURY" ] }
- },
- {
- "type": "overmap_terrain",
- "id": "s_music_roof",
- "copy-from": "generic_city_building",
- "name": "music store roof",
- "sym": "m",
- "color": "brown"
- }
- ```
You need one entry per mapgen ID:
+
1. `"type"` will always be overmap_terrain.
2. `"id"` will be the same ID you used in your mapgen file.
3. `"copy-from"` this will copy any data from another entry, excepting what you define here.
4. `"name"` how the name displays on the overmap.
5. `"sym"` the symbol displayed on the overmap. If left out, the carrots will be used `v<>^`
6. `"color"` color for overmap symbol.
-7. `"mondesntiy"` sets the default monster density for this overmap tile. You'll use this for general zombie spawns and reserve the mapgen monster entries for special spanwns for that location (e.g. a pet store's pets).
-8. `"extend"` many of these flags will be used by NPCs in the future for their AI, try to add flags appropriate for your location. Others further define the mapgen, like having sidewalks generate.
+7. `"mondesntiy"` sets the default monster density for this overmap tile. You'll use this for
+ general zombie spawns and reserve the mapgen monster entries for special spanwns for that
+ location (e.g. a pet store's pets).
+8. `"extend"` many of these flags will be used by NPCs in the future for their AI, try to add flags
+ appropriate for your location. Others further define the mapgen, like having sidewalks generate.
-For further information see: [Overmap Terrain section of doc/OVERMAP.md](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/OVERMAP.md#overmap-terrain).
+For further information see:
+[Overmap Terrain section of doc/OVERMAP.md](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/OVERMAP.md#overmap-terrain).
#### Palettes:
-As mentioned earlier, palettes can hold almost all the information that the object entry contains, except for `rows` and `fill_ter`. Their main purpose is to reduce the need to add the same basic data to related maps and to maintain symbol consistency.
+As mentioned earlier, palettes can hold almost all the information that the object entry contains,
+except for `rows` and `fill_ter`. Their main purpose is to reduce the need to add the same basic
+data to related maps and to maintain symbol consistency.
-Entries that are added to the mapgen file's object will over ride the same symbol used in the palette. In this way, you can use a palette and make select alterations to each mapgen as needed. This is especially useful for multiple ground terrains like carpets, concrete, etc.
+Entries that are added to the mapgen file's object will over ride the same symbol used in the
+palette. In this way, you can use a palette and make select alterations to each mapgen as needed.
+This is especially useful for multiple ground terrains like carpets, concrete, etc.
-Terrain works very well when you substitute it via the mapgen file. I've had less success overriding furniture but need to test it more to clarify when it works as intended. I have recently noticed that if your palette symbol uses an array of values, the mapgen entry can't override it.
+Terrain works very well when you substitute it via the mapgen file. I've had less success overriding
+furniture but need to test it more to clarify when it works as intended. I have recently noticed
+that if your palette symbol uses an array of values, the mapgen entry can't override it.
-Example:
-Entry for the mapgen file object: `"palettes": [ "roof_palette" ],`
+Example: Entry for the mapgen file object: `"palettes": [ "roof_palette" ],`
The palette metadata:
+
```
- "type": "palette",
- "id": "roof_palette",
+"type": "palette",
+"id": "roof_palette",
```
Everything else will look like a series of object entries, for example the roof_palette:
```
- {
- "type": "palette",
- "id": "roof_palette",
- "terrain": {
- ".": "t_flat_roof",
- " ": "t_open_air",
- "o": "t_glass_roof",
- "_": "t_floor",
- "2": "t_gutter_north",
- "-": "t_gutter_south",
- "3": "t_gutter_east",
- "4": "t_gutter_downspout",
- "|": "t_gutter_west",
- "5": "t_gutter_drop",
- "#": "t_grate",
- "&": "t_null",
- ":": "t_null",
- "X": "t_null",
- "=": "t_null",
- "A": "t_null",
- "b": "t_null",
- "c": "t_null",
- "t": "t_null",
- "r": "t_null",
- "L": "t_null",
- "C": "t_null",
- "Y": "t_null",
- "y": "t_null"
- },
- "furniture": {
- "&": "f_roof_turbine_vent",
- "N": "f_TV_antenna",
- ":": "f_cellphone_booster",
- "X": "f_small_satelitte_dish",
- "~": "f_chimney",
- "=": "f_vent_pipe",
- "A": "f_air_conditioner",
- "b": "f_bench",
- "c": "f_counter",
- "t": "f_table",
- "r": "f_rack",
- "L": "f_locker",
- "C": [ "f_crate_c", "f_cardboard_box" ],
- "Y": "f_stool",
- "s": "f_sofa",
- "S": "f_sink",
- "e": "f_oven",
- "F": "f_fridge",
- "y": [ "f_indoor_plant_y", "f_indoor_plant" ]
- },
- "toilets": { "T": { } }
- }
- ```
+{
+ "type": "palette",
+ "id": "roof_palette",
+ "terrain": {
+ ".": "t_flat_roof",
+ " ": "t_open_air",
+ "o": "t_glass_roof",
+ "_": "t_floor",
+ "2": "t_gutter_north",
+ "-": "t_gutter_south",
+ "3": "t_gutter_east",
+ "4": "t_gutter_downspout",
+ "|": "t_gutter_west",
+ "5": "t_gutter_drop",
+ "#": "t_grate",
+ "&": "t_null",
+ ":": "t_null",
+ "X": "t_null",
+ "=": "t_null",
+ "A": "t_null",
+ "b": "t_null",
+ "c": "t_null",
+ "t": "t_null",
+ "r": "t_null",
+ "L": "t_null",
+ "C": "t_null",
+ "Y": "t_null",
+ "y": "t_null"
+ },
+ "furniture": {
+ "&": "f_roof_turbine_vent",
+ "N": "f_TV_antenna",
+ ":": "f_cellphone_booster",
+ "X": "f_small_satelitte_dish",
+ "~": "f_chimney",
+ "=": "f_vent_pipe",
+ "A": "f_air_conditioner",
+ "b": "f_bench",
+ "c": "f_counter",
+ "t": "f_table",
+ "r": "f_rack",
+ "L": "f_locker",
+ "C": [ "f_crate_c", "f_cardboard_box" ],
+ "Y": "f_stool",
+ "s": "f_sofa",
+ "S": "f_sink",
+ "e": "f_oven",
+ "F": "f_fridge",
+ "y": [ "f_indoor_plant_y", "f_indoor_plant" ]
+ },
+ "toilets": { "T": { } }
+}
+```
-If you want to look at more complex palettes, the standard_domestic_palette in [data/json/mapgen_palettes/house_general_palette.json](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/data/json/mapgen_palettes/house_general_palette.json) is a good look at a palette designed to work across all CDDA houses. It includes the loot spawns and accounts for most furniture that will be used in a house. I also left a list of symbols open to be used in the mapgen file for specific location needs.
+If you want to look at more complex palettes, the standard_domestic_palette in
+[data/json/mapgen_palettes/house_general_palette.json](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/data/json/mapgen_palettes/house_general_palette.json)
+is a good look at a palette designed to work across all CDDA houses. It includes the loot spawns and
+accounts for most furniture that will be used in a house. I also left a list of symbols open to be
+used in the mapgen file for specific location needs.
-Finally, the series of house_w palettes at [data/json/mapgen_palettes/house_w_palette.json](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/data/json/mapgen_palettes/house_w_palette.json) are designed to work together for houses using nested mapgen. There is a palette devoted to the foundation, another for the nests, and finally another one I've designed for domestic outdoor nested chunks.
+Finally, the series of house_w palettes at
+[data/json/mapgen_palettes/house_w_palette.json](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/data/json/mapgen_palettes/house_w_palette.json)
+are designed to work together for houses using nested mapgen. There is a palette devoted to the
+foundation, another for the nests, and finally another one I've designed for domestic outdoor nested
+chunks.
#### Final comments:
-The information here should be enough for you got get around mapgen and start making maps but there are a lot of variations that will be covered in focused.
+The information here should be enough for you got get around mapgen and start making maps but there
+are a lot of variations that will be covered in focused.
Not covered in this document:
- * Nested maps and their placement.
- * NPC spawns.
- * Advanced terrain tricks for complex floor options.
- * traps, terrain and you.
- * update_mapgen (NPC and player triggered map updates).
- * faction camp expansion maps.
- * field emitting furniture.
+
+- Nested maps and their placement.
+- NPC spawns.
+- Advanced terrain tricks for complex floor options.
+- traps, terrain and you.
+- update_mapgen (NPC and player triggered map updates).
+- faction camp expansion maps.
+- field emitting furniture.
diff --git a/doc/JSON Mapping Guides/JSON_ROOF_MAPGEN.md b/doc/JSON Mapping Guides/JSON_ROOF_MAPGEN.md
index 883e0fd25530..efd6d87f04fb 100644
--- a/doc/JSON Mapping Guides/JSON_ROOF_MAPGEN.md
+++ b/doc/JSON Mapping Guides/JSON_ROOF_MAPGEN.md
@@ -1,6 +1,7 @@
# Adding Json Roof Guide
-Adding json roofs to a building involves using a few more files to link the roof and building together during mapgen.
+Adding json roofs to a building involves using a few more files to link the roof and building
+together during mapgen.
Files that will be edited:
@@ -14,140 +15,155 @@ Files that will be edited:
## Making the Roof Map
-Refer to [MAPGEN.md](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/MAPGEN.md) for creating the map if you are new to map creation.
+Refer to [MAPGEN.md](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/MAPGEN.md) for
+creating the map if you are new to map creation.
-Open the file that contains the map for the building `data/json/mapgen/[name of building].json`
-Add a new entry for the roof. You can copy the building entry since you want the same foundation footprint for the roof.
+Open the file that contains the map for the building `data/json/mapgen/[name of building].json` Add
+a new entry for the roof. You can copy the building entry since you want the same foundation
+footprint for the roof.
-Give the roof a unique om_terrain ID. Below is an example of the main floor and roof om_terrain IDs
+Give the roof a unique om_terrain ID. Below is an example of the main floor and roof om_terrain IDs
-````json
+```json
"om_terrain": [ "abstorefront" ],
"om_terrain": [ "abstorefront_roof" ],
-````
+```
-Note: If you are adding a roof to an existing building that shares a common om_terrain ID with other maps, you will need to change the om_terrain ID for the existing floor to be unique.
+Note: If you are adding a roof to an existing building that shares a common om_terrain ID with other
+maps, you will need to change the om_terrain ID for the existing floor to be unique.
-Keep the outline of the walls from the original floor,
-Add `t_open_air` outside the building and a `t_flat_roof` over the building's footprint.
-There are a few flat roof terrains to choose from in terrain.json.
+Keep the outline of the walls from the original floor, Add `t_open_air` outside the building and a
+`t_flat_roof` over the building's footprint. There are a few flat roof terrains to choose from in
+terrain.json.
-There are a number of terrains and furniture structures for roofs including gutters, chimneys, and roof turbine vents.
-Browse json/terrain.json and furniture.json for ideas. Consider roof access, you can use ladders, stairs and gutters. Some furniture is also climbable.
+There are a number of terrains and furniture structures for roofs including gutters, chimneys, and
+roof turbine vents. Browse json/terrain.json and furniture.json for ideas. Consider roof access, you
+can use ladders, stairs and gutters. Some furniture is also climbable.
-There is a set of optional nested map chunks at `data/json/mapgen/nested_chunks_roof.json` if you'd like to incorporate them. Add any new nested chunks for roofs here as well.
+There is a set of optional nested map chunks at `data/json/mapgen/nested_chunks_roof.json` if you'd
+like to incorporate them. Add any new nested chunks for roofs here as well.
Sample roof entry:
-````json
- {
- "type": "mapgen",
- "method": "json",
- "om_terrain": "abstorefront_roof",
- "weight": 200,
- "object": {
- "fill_ter": "t_flat_roof",
- "rows": [
- " ",
- " |....................3 ",
- " |....................3 ",
- " |....................3 ",
- " |....................3 ",
- " |....................3 ",
- " |....................3 ",
- " |....................3 ",
- " |....................3 ",
- " |....................3 ",
- " |....................3 ",
- " |....................3 ",
- " |......&.............3 ",
- " |....................3 ",
- " |....................3 ",
- " |-----------------5--3 ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " ",
- " "
- ],
- "terrain": {
- ".": "t_flat_roof",
- " ": "t_open_air",
- "|": "t_gutter_west",
- "-": "t_gutter_south",
- "3": "t_gutter_east",
- "5": "t_gutter_drop"
- },
- "furniture": { "&": "f_roof_turbine_vent" },
- "place_items": [ { "item": "roof_trash", "x": [ 2, 21 ], "y": [ 3, 14 ], "chance": 50, "repeat": [ 1, 3 ] } ],
- "place_nested": [
- {
- "chunks": [
- [ "null", 50 ],
- [ "roof_4x4_party", 15 ],
- [ "roof_4x4_holdout", 5 ],
- [ "roof_4x4_utility", 40 ],
- [ "roof_5x5_coop", 5 ]
- ],
- "x": [ 3, 15 ],
- "y": [ 3, 7 ]
- }
- ]
- }
+
+```json
+{
+ "type": "mapgen",
+ "method": "json",
+ "om_terrain": "abstorefront_roof",
+ "weight": 200,
+ "object": {
+ "fill_ter": "t_flat_roof",
+ "rows": [
+ " ",
+ " |....................3 ",
+ " |....................3 ",
+ " |....................3 ",
+ " |....................3 ",
+ " |....................3 ",
+ " |....................3 ",
+ " |....................3 ",
+ " |....................3 ",
+ " |....................3 ",
+ " |....................3 ",
+ " |....................3 ",
+ " |......&.............3 ",
+ " |....................3 ",
+ " |....................3 ",
+ " |-----------------5--3 ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " ",
+ " "
+ ],
+ "terrain": {
+ ".": "t_flat_roof",
+ " ": "t_open_air",
+ "|": "t_gutter_west",
+ "-": "t_gutter_south",
+ "3": "t_gutter_east",
+ "5": "t_gutter_drop"
+ },
+ "furniture": { "&": "f_roof_turbine_vent" },
+ "place_items": [
+ { "item": "roof_trash", "x": [2, 21], "y": [3, 14], "chance": 50, "repeat": [1, 3] }
+ ],
+ "place_nested": [
+ {
+ "chunks": [
+ ["null", 50],
+ ["roof_4x4_party", 15],
+ ["roof_4x4_holdout", 5],
+ ["roof_4x4_utility", 40],
+ ["roof_5x5_coop", 5]
+ ],
+ "x": [3, 15],
+ "y": [3, 7]
+ }
+ ]
+ }
}
-````
+```
## Linking the main floor and the roof
-Navigate to `json/overmap/multitile_city_buildings.json` or `json/overmap/multitile_buildings_terrain.json` for buildings taking up more then one overmap tile per z level (schools, mansions).
-Add an entry for the main floor. The `point` coordinates define to the x, y, z positions of the building. The 1 places the roof one z level above the ground floor.
+
+Navigate to `json/overmap/multitile_city_buildings.json` or
+`json/overmap/multitile_buildings_terrain.json` for buildings taking up more then one overmap tile
+per z level (schools, mansions). Add an entry for the main floor. The `point` coordinates define to
+the x, y, z positions of the building. The 1 places the roof one z level above the ground floor.
Append north for rotating buildings to orient the z levels.
-````json
- {
- "type": "city_building",
- "id": "abstorefront",
- "locations": [ "land" ],
- "overmaps": [
- { "point": [ 0, 0, 0 ], "overmap": "abstorefront_north" },
- { "point": [ 0, 0, 1 ], "overmap": "abstorefront_roof_north" }
- ]
- }
-````
+```json
+{
+ "type": "city_building",
+ "id": "abstorefront",
+ "locations": ["land"],
+ "overmaps": [
+ { "point": [0, 0, 0], "overmap": "abstorefront_north" },
+ { "point": [0, 0, 1], "overmap": "abstorefront_roof_north" }
+ ]
+}
+```
+
## Overmap Specials
-Overmap specials are handled a little differently. They use `json/overmap/specials.json` for both linking z levels and overmap spawning. A special won't need an entry in `data/json/regional_map_settings.json`
+Overmap specials are handled a little differently. They use `json/overmap/specials.json` for both
+linking z levels and overmap spawning. A special won't need an entry in
+`data/json/regional_map_settings.json`
Overmap special example:
-````json
- {
- "type" : "overmap_special",
- "id" : "Evac Shelter",
- "overmaps" : [
- { "point":[0,0,0], "overmap": "shelter"},
- { "point":[0,0,-1], "overmap": "shelter_under"},
- { "point":[0,0,1], "overmap": "shelter_roof"}
- ],
- "connections" : [
- { "point" : [0,-1,0], "terrain" : "road" }
- ],
- "locations" : [ "wilderness" ],
- "city_distance" : [5, 10],
- "city_sizes" : [4, 12],
- "occurrences" : [1, 3],
- "rotate" : false,
- "flags" : [ "CLASSIC" ]
- }
-````
+
+```json
+{
+ "type": "overmap_special",
+ "id": "Evac Shelter",
+ "overmaps": [
+ { "point": [0, 0, 0], "overmap": "shelter" },
+ { "point": [0, 0, -1], "overmap": "shelter_under" },
+ { "point": [0, 0, 1], "overmap": "shelter_roof" }
+ ],
+ "connections": [
+ { "point": [0, -1, 0], "terrain": "road" }
+ ],
+ "locations": ["wilderness"],
+ "city_distance": [5, 10],
+ "city_sizes": [4, 12],
+ "occurrences": [1, 3],
+ "rotate": false,
+ "flags": ["CLASSIC"]
+}
+```
+
## Adding the overmap_terrain entry
-Navigate to `data/json/overmap_terrain.json`
-Every z level gets an entry that defines how it appears on the overmap.
-The name field will determine what is displayed in the in-game overmap.
-The entries should share the same color and symbol.
+Navigate to `data/json/overmap_terrain.json` Every z level gets an entry that defines how it appears
+on the overmap. The name field will determine what is displayed in the in-game overmap. The entries
+should share the same color and symbol.
-````json
+```json
{
"type": "overmap_terrain",
"id": "abandonedwarehouse",
@@ -164,16 +180,20 @@ The entries should share the same color and symbol.
"sym": 119,
"color": "brown"
}
-````
+```
+
## Adding to regional_map_settings
+
Navigate to `data/json/regional_map_settings.json`
-This determines the spawn frequency and location of non-special buildings.
-Find the appropriate category for your building and add either the overmap_special ID or the city_building ID and include a spawn weight.
+This determines the spawn frequency and location of non-special buildings. Find the appropriate
+category for your building and add either the overmap_special ID or the city_building ID and include
+a spawn weight.
-````json
+```json
""abandonedwarehouse": 200,
-````
+```
+
When testing you can increase the spawn rate if you want to survey your work using natural spawns.
Finally, always [lint](http://dev.narc.ro/cataclysm/format.html) your additions before submitting.
diff --git a/doc/JSON_FLAGS.md b/doc/JSON_FLAGS.md
index 2ed65f71b5d2..719955c97bbc 100644
--- a/doc/JSON_FLAGS.md
+++ b/doc/JSON_FLAGS.md
@@ -47,7 +47,7 @@
- [Sizes](#sizes)
- [Special attacks](#special-attacks)
- [Mutations](#mutations)
- - [Flags](#flags-7)
+ - [Flags](#flags-7)
- [Categories](#categories-1)
- [Overmap](#overmap)
- [Overmap connections](#overmap-connections)
@@ -73,431 +73,489 @@
- [Vehicle parts requiring other vehicle parts](#vehicle-parts-requiring-other-vehicle-parts)
- [Fuel types](#fuel-types)
-
## Notes
-- Some flags (items, effects, vehicle parts) have to be defined in `flags.json` or `vp_flags.json` (with type: `json_flag`) to work correctly.
-- Many of the flags intended for one category or item type, can be used in other categories or item types. Experiment to see where else flags can be used.
+- Some flags (items, effects, vehicle parts) have to be defined in `flags.json` or `vp_flags.json`
+ (with type: `json_flag`) to work correctly.
+- Many of the flags intended for one category or item type, can be used in other categories or item
+ types. Experiment to see where else flags can be used.
- Offensive and defensive flags can be used on any item type that can be wielded.
-
## Inheritance
-When an item is crafted, it can inherit flags from the components that were used to craft it. This requires that the flag to be inherited has the `"craft_inherit": true` entry. If you don't want a particular item to inherit flags when crafted, specify the member delete_flags, which is an array of strings. Flags specified there will be removed from the resultant item upon crafting. This will override flag inheritance, but will not delete flags that are part of the item type itself.
-
+When an item is crafted, it can inherit flags from the components that were used to craft it. This
+requires that the flag to be inherited has the `"craft_inherit": true` entry. If you don't want a
+particular item to inherit flags when crafted, specify the member delete_flags, which is an array of
+strings. Flags specified there will be removed from the resultant item upon crafting. This will
+override flag inheritance, but will not delete flags that are part of the item type itself.
## TODO
-- Descriptions for `Special attacks` under `Monsters` could stand to be more descriptive of exactly what the attack does.
-- `Ammo effects` under `Ammo` need more descriptive details, and some need to be double-checked for accuracy.
-
+- Descriptions for `Special attacks` under `Monsters` could stand to be more descriptive of exactly
+ what the attack does.
+- `Ammo effects` under `Ammo` need more descriptive details, and some need to be double-checked for
+ accuracy.
## Ammo
### Ammo type
-These are handled through `ammo_types.json`. You can tag a weapon with these to have it chamber existing ammo, or make your own ammo there. The first column in this list is the tag's "id", the internal identifier DDA uses to track the tag, and the second is a brief description of the ammo tagged. Use the id to search for ammo listings, as ids are constant throughout DDA's code. Happy chambering! :-)
-
-- ```120mm``` 120mm HEAT
-- ```12mm``` 12mm
-- ```20x66mm``` 20x66mm Shot (and relatives)
-- ```223``` .223 Remington (and 5.56 NATO)
-- ```22``` .22LR (and relatives)
-- ```3006``` 30.06
-- ```300``` .300 WinMag
-- ```308``` .308 Winchester (and relatives)
-- ```32``` .32 ACP
-- ```36paper``` .36 cap & ball
-- ```38``` .38 Special
-- ```40``` 10mm
-- ```40mm``` 40mm Grenade
-- ```44``` .44 Magnum
-- ```44paper``` .44 cap & ball
-- ```454``` .454 Casull
-- ```45``` .45 ACP (and relatives)
-- ```46``` 46mm
-- ```500``` .500 Magnum
-- ```50``` .50 BMG
-- ```57``` 57mm
-- ```5x50``` 5x50 Dart
-- ```66mm``` 66mm HEAT
-- ```700nx``` .700 Nitro Express
-- ```762R``` 7.62x54mm
-- ```762``` 7.62x39mm
-- ```762x25``` 7.62x25mm
-- ```84x246mm``` 84x246mm HE
-- ```8x40mm``` 8mm Caseless
-- ```9mm``` 9x19mm Luger (and relatives)
-- ```9x18``` 9x18mm
-- ```BB``` BB
-- ```RPG-7``` RPG-7
-- ```UPS``` UPS charges
-- ```ammo_flintlock``` Flintlock ammo
-- ```ampoule``` Ampoule
-- ```arrow``` Arrow
-- ```battery``` Battery
-- ```blunderbuss``` Blunderbuss
-- ```bolt``` Bolt
-- ```charcoal``` Charcoal
-- ```components``` Components
-- ```dart``` Dart
-- ```diesel``` Diesel
-- ```fish_bait``` Fish bait
-- ```fishspear``` Speargun spear
-- ```fusion``` Laser Pack
-- ```gasoline``` Gasoline
-- ```homebrew_rocket``` homebrew rocket
-- ```lamp_oil``` Lamp oil
-- ```laser_capacitor``` Charge
-- ```m235``` M235 TPA (66mm Incendiary Rocket)
-- ```metal_rail``` Rebar Rail
-- ```money``` Cents
-- ```muscle``` Muscle
-- ```nail``` Nail
-- ```pebble``` Pebble
-- ```plasma``` Plasma
-- ```plutonium``` Plutonium Cell
-- ```rebreather_filter``` Rebreather filter
-- ```shot``` Shotshell
-- ```signal_flare``` Signal Flare
-- ```tape``` Duct tape
-- ```thread``` Thread
-- ```thrown``` Thrown
-- ```unfinished_char``` Semi-charred fuel
-- ```water``` Water
+These are handled through `ammo_types.json`. You can tag a weapon with these to have it chamber
+existing ammo, or make your own ammo there. The first column in this list is the tag's "id", the
+internal identifier DDA uses to track the tag, and the second is a brief description of the ammo
+tagged. Use the id to search for ammo listings, as ids are constant throughout DDA's code. Happy
+chambering! :-)
+
+- `120mm` 120mm HEAT
+- `12mm` 12mm
+- `20x66mm` 20x66mm Shot (and relatives)
+- `223` .223 Remington (and 5.56 NATO)
+- `22` .22LR (and relatives)
+- `3006` 30.06
+- `300` .300 WinMag
+- `308` .308 Winchester (and relatives)
+- `32` .32 ACP
+- `36paper` .36 cap & ball
+- `38` .38 Special
+- `40` 10mm
+- `40mm` 40mm Grenade
+- `44` .44 Magnum
+- `44paper` .44 cap & ball
+- `454` .454 Casull
+- `45` .45 ACP (and relatives)
+- `46` 46mm
+- `500` .500 Magnum
+- `50` .50 BMG
+- `57` 57mm
+- `5x50` 5x50 Dart
+- `66mm` 66mm HEAT
+- `700nx` .700 Nitro Express
+- `762R` 7.62x54mm
+- `762` 7.62x39mm
+- `762x25` 7.62x25mm
+- `84x246mm` 84x246mm HE
+- `8x40mm` 8mm Caseless
+- `9mm` 9x19mm Luger (and relatives)
+- `9x18` 9x18mm
+- `BB` BB
+- `RPG-7` RPG-7
+- `UPS` UPS charges
+- `ammo_flintlock` Flintlock ammo
+- `ampoule` Ampoule
+- `arrow` Arrow
+- `battery` Battery
+- `blunderbuss` Blunderbuss
+- `bolt` Bolt
+- `charcoal` Charcoal
+- `components` Components
+- `dart` Dart
+- `diesel` Diesel
+- `fish_bait` Fish bait
+- `fishspear` Speargun spear
+- `fusion` Laser Pack
+- `gasoline` Gasoline
+- `homebrew_rocket` homebrew rocket
+- `lamp_oil` Lamp oil
+- `laser_capacitor` Charge
+- `m235` M235 TPA (66mm Incendiary Rocket)
+- `metal_rail` Rebar Rail
+- `money` Cents
+- `muscle` Muscle
+- `nail` Nail
+- `pebble` Pebble
+- `plasma` Plasma
+- `plutonium` Plutonium Cell
+- `rebreather_filter` Rebreather filter
+- `shot` Shotshell
+- `signal_flare` Signal Flare
+- `tape` Duct tape
+- `thread` Thread
+- `thrown` Thrown
+- `unfinished_char` Semi-charred fuel
+- `water` Water
### Effects
-- ```ACIDBOMB``` Leaves a pool of acid on detonation.
-- ```BEANBAG``` Stuns the target.
-- ```BLACKPOWDER``` May clog up the gun with blackpowder fouling, which will also cause rust.
-- ```BLINDS_EYES``` Blinds the target if it hits the head (ranged projectiles can't actually hit the eyes at the moment).
-- ```BOUNCE``` Inflicts target with `bounced` effect and rebounds to a nearby target without this effect.
-- ```COOKOFF``` Explodes when lit on fire.
-- ```CUSTOM_EXPLOSION``` Explosion as specified in ```"explosion"``` field of used ammo. See `JSON_INFO.md`.
-- ```DRAW_AS_LINE``` Doesn't go through regular bullet animation, instead draws a line and the bullet on its end for one frame.
-- ```EXPLOSIVE_BIG``` Large explosion without any shrapnel.
-- ```EXPLOSIVE_HUGE``` Huge explosion without any shrapnel.
-- ```EXPLOSIVE``` Explodes without any shrapnel.
-- ```FLAME``` Very small explosion that lights fires.
-- ```FLARE``` Lights the target on fire.
-- ```FLASHBANG``` Blinds and deafens nearby targets.
-- ```FRAG``` Small explosion that spreads shrapnel.
-- ```INCENDIARY``` Lights target on fire.
-- ```LARGE_BEANBAG``` Heavily stuns the target.
-- ```LASER``` Creates a trail of laser (the field type)
-- ```LIGHTNING``` Creates a trail of lightning.
-- ```MININUKE_MOD``` Small thermo-nuclear detonation that leaves behind radioactive fallout.
-- ```MUZZLE_SMOKE``` Generate a small cloud of smoke at the source.
-- ```NAPALM``` Explosion that spreads fire.
-- ```NEVER_MISFIRES``` Firing ammo without this flag may trigger a misfiring, this is independent of the weapon flags.
-- ```NOGIB``` Prevents overkill damage on the target (target won't explode into gibs, see also the monster flag NO_GIBS).
-- ```NO_PENETRATE_OBSTACLES``` Prevents a projectile from going through a tile with obstacles, such as chainlink fences or dressers.
-- ```TANGLE``` When this projectile hits a target, it has a chance to tangle them up and immobilise them.
-- ```NO_EMBED``` When an item would be spawned from the projectile, it will always be spawned on the ground rather than in monster's inventory. Implied for active thrown items. Doesn't do anything on projectiles that do not drop items.
-- ```NO_ITEM_DAMAGE``` Will not damage items on the map even when it otherwise would try to.
-- ```PLASMA``` Creates a trail of superheated plasma.
-- ```RECOVER_[X]``` Has a (X-1/X) chance to create a single charge of the used ammo at the point of impact.
-- ```RECYCLED``` (For handmade ammo) causes the gun to misfire sometimes, this independent of the weapon flags.
-- ```SHOT``` Multiple smaller pellets; less effective against armor but increases chance to hit and no point-blank penalty
-- ```SMOKE_BIG``` Generates a large cloud of smoke at the target.
-- ```SMOKE``` Generates a cloud of smoke at the target.
-- ```STREAM_BIG``` Leaves a trail of intense fire fields.
-- ```STREAM``` Leaves a trail of fire fields.
-- ```TRAIL``` Creates a trail of smoke.
-- ```WIDE``` Prevents `HARDTOSHOOT` monster flag from having any effect. Implied by ```SHOT``` or liquid ammo.
-
+- `ACIDBOMB` Leaves a pool of acid on detonation.
+- `BEANBAG` Stuns the target.
+- `BLACKPOWDER` May clog up the gun with blackpowder fouling, which will also cause rust.
+- `BLINDS_EYES` Blinds the target if it hits the head (ranged projectiles can't actually hit the
+ eyes at the moment).
+- `BOUNCE` Inflicts target with `bounced` effect and rebounds to a nearby target without this
+ effect.
+- `COOKOFF` Explodes when lit on fire.
+- `CUSTOM_EXPLOSION` Explosion as specified in `"explosion"` field of used ammo. See `JSON_INFO.md`.
+- `DRAW_AS_LINE` Doesn't go through regular bullet animation, instead draws a line and the bullet on
+ its end for one frame.
+- `EXPLOSIVE_BIG` Large explosion without any shrapnel.
+- `EXPLOSIVE_HUGE` Huge explosion without any shrapnel.
+- `EXPLOSIVE` Explodes without any shrapnel.
+- `FLAME` Very small explosion that lights fires.
+- `FLARE` Lights the target on fire.
+- `FLASHBANG` Blinds and deafens nearby targets.
+- `FRAG` Small explosion that spreads shrapnel.
+- `INCENDIARY` Lights target on fire.
+- `LARGE_BEANBAG` Heavily stuns the target.
+- `LASER` Creates a trail of laser (the field type)
+- `LIGHTNING` Creates a trail of lightning.
+- `MININUKE_MOD` Small thermo-nuclear detonation that leaves behind radioactive fallout.
+- `MUZZLE_SMOKE` Generate a small cloud of smoke at the source.
+- `NAPALM` Explosion that spreads fire.
+- `NEVER_MISFIRES` Firing ammo without this flag may trigger a misfiring, this is independent of the
+ weapon flags.
+- `NOGIB` Prevents overkill damage on the target (target won't explode into gibs, see also the
+ monster flag NO_GIBS).
+- `NO_PENETRATE_OBSTACLES` Prevents a projectile from going through a tile with obstacles, such as
+ chainlink fences or dressers.
+- `TANGLE` When this projectile hits a target, it has a chance to tangle them up and immobilise
+ them.
+- `NO_EMBED` When an item would be spawned from the projectile, it will always be spawned on the
+ ground rather than in monster's inventory. Implied for active thrown items. Doesn't do anything on
+ projectiles that do not drop items.
+- `NO_ITEM_DAMAGE` Will not damage items on the map even when it otherwise would try to.
+- `PLASMA` Creates a trail of superheated plasma.
+- `RECOVER_[X]` Has a (X-1/X) chance to create a single charge of the used ammo at the point of
+ impact.
+- `RECYCLED` (For handmade ammo) causes the gun to misfire sometimes, this independent of the weapon
+ flags.
+- `SHOT` Multiple smaller pellets; less effective against armor but increases chance to hit and no
+ point-blank penalty
+- `SMOKE_BIG` Generates a large cloud of smoke at the target.
+- `SMOKE` Generates a cloud of smoke at the target.
+- `STREAM_BIG` Leaves a trail of intense fire fields.
+- `STREAM` Leaves a trail of fire fields.
+- `TRAIL` Creates a trail of smoke.
+- `WIDE` Prevents `HARDTOSHOOT` monster flag from having any effect. Implied by `SHOT` or liquid
+ ammo.
## Armor
### Covers
-- ```ARMS``` ... same ```ARM_L``` and ```ARM_R```
-- ```ARM_L```
-- ```ARM_R```
-- ```EYES```
-- ```FEET``` ... same ```FOOT_L``` and ```FOOT_R```
-- ```FOOT_L```
-- ```FOOT_R```
-- ```HANDS``` ... same ```HAND_L``` and ```HAND_R```
-- ```HAND_L```
-- ```HAND_R```
-- ```HEAD```
-- ```LEGS``` ... same ```LEG_L``` and ```LEG_R```
-- ```LEG_L```
-- ```LEG_R```
-- ```MOUTH```
-- ```TORSO```
+- `ARMS` ... same `ARM_L` and `ARM_R`
+- `ARM_L`
+- `ARM_R`
+- `EYES`
+- `FEET` ... same `FOOT_L` and `FOOT_R`
+- `FOOT_L`
+- `FOOT_R`
+- `HANDS` ... same `HAND_L` and `HAND_R`
+- `HAND_L`
+- `HAND_R`
+- `HEAD`
+- `LEGS` ... same `LEG_L` and `LEG_R`
+- `LEG_L`
+- `LEG_R`
+- `MOUTH`
+- `TORSO`
### Flags
-Some armor flags, such as `WATCH` and `ALARMCLOCK` are compatible with other item types. Experiment to find which flags work elsewhere.
-
-- ```ACTIVE_CLOAKING``` While active, drains UPS to provide invisibility.
-- ```ALARMCLOCK``` Has an alarm-clock feature.
-- ```ALLOWS_NATURAL_ATTACKS``` Doesn't prevent any natural attacks or similar benefits from mutations, fingertip razors, etc., like most items covering the relevant body part would.
-- ```AURA``` This item goes in the outer aura layer, intended for metaphysical effects.
-- ```BAROMETER``` This gear is equipped with an accurate barometer (which is used to measure atmospheric pressure).
-- ```BELTED``` Layer for backpacks and things worn over outerwear.
-- ```BLIND``` Blinds the wearer while worn, and provides nominal protection v. flashbang flashes.
-- ```BLOCK_WHILE_WORN``` Allows worn armor or shields to be used for blocking attacks. See also the `Techniques` section.
-- ```BULLET_IMMNUE``` Wearing an item with this flag makes you immune to bullet damage
-- ```CLIMATE_CONTROL``` This piece of clothing has climate control of some sort, keeping you warmer or cooler depending on ambient and bodily temperature.
-- ```COLLAR``` This piece of clothing has a wide collar that can keep your mouth warm.
-- ```DEAF``` Makes the player deaf.
-- ```ELECTRIC_IMMUNE``` This gear completely protects you from electric discharges.
-- ```FANCY``` Wearing this clothing gives a morale bonus if the player has the `Stylish` trait.
-- ```FIX_FARSIGHT``` This gear corrects farsightedness.
-- ```FIX_NEARSIGHT``` This gear corrects nearsightedness.
-- ```FLOTATION``` Prevents the player from drowning in deep water. Also prevents diving underwater.
-- ```FRAGILE``` This gear is less resistant to damage than normal.
-- ```HELMET_COMPAT``` Items that are not SKINTIGHT or OVERSIZE but can be worn with a helmet.
-- ```HOOD``` Allow this clothing to conditionally cover the head, for additional warmth or water protection., if the player's head isn't encumbered
-- ```HYGROMETER``` This gear is equipped with an accurate hygrometer (which is used to measure humidity).
-- ```NO_TAKEOFF``` Item with that flag can't be taken off.
-- ```NO_QUICKDRAW``` Don't offer to draw items from this holster when the fire key is pressed whilst the players hands are empty
-- ```ONLY_ONE``` You can wear only one.
-- ```OUTER``` Outer garment layer.
-- ```OVERSIZE``` Can always be worn no matter encumbrance/mutations/bionics/etc., but prevents any other clothing being worn over this.
-- ```PARTIAL_DEAF``` Reduces the volume of sounds to a safe level.
-- ```PERSONAL``` This item goes in the personal aura layer, intended for metaphysical effects.
-- ```POCKETS``` Increases warmth for hands if the player's hands are cold and the player is wielding nothing.
-- ```POWERARMOR_EXO``` Marks the item as the main exoskeleton for power armor.
-- ```POWERARMOR_EXTERNAL``` Marks the item as external pieces that cover body parts the exoskeleton doesn't.
-- ```POWERARMOR_MOD``` Marks the item as a power armour mod that is worn onto an exoskeleton/external piece.
-- ```POWERARMOR_COMPATIBLE``` Makes item compatible with power armor despite other parameters causing failure.
-- ```PSYSHIELD_PARTIAL``` 25% chance to protect against fear_paralyze monster attack when worn.
-- ```RAD_PROOF``` This piece of clothing completely protects you from radiation.
-- ```RAD_RESIST``` This piece of clothing partially protects you from radiation.
-- ```RAINPROOF``` Prevents the covered body-part(s) from getting wet in the rain.
-- ```REQUIRES_BALANCE``` Gear that requires a certain balance to be steady with. If the player is hit while wearing, they have a chance to be downed.
-- ```RESTRICT_HANDS``` Prevents the player from wielding a weapon two-handed, forcing one-handed use if the weapon permits it.
-- ```ROLLER_ONE``` A less stable and slower version of ROLLER_QUAD, still allows the player to move faster than walking speed.
-- ```ROLLER_QUAD```The medium choice between ROLLER_INLINE and ROLLER_ONE, while it is more stable, and moves faster, it also has a harsher non-flat terrain penalty then ROLLER_ONE.
-- ```ROLLER_INLINE``` Faster, but less stable overall, the penalty for non-flat terrain is even harsher.
-- ```SEMITANGIBLE``` Prevents the item from participating in the encumbrance system when worn.
-- ```COMPACT``` Prevents the item from participating in the layering encumbrance system when worn.
-- ```SKINTIGHT``` Undergarment layer.
-- ```SLOWS_MOVEMENT``` This piece of clothing multiplies move cost by 1.1.
-- ```SLOWS_THIRST``` This piece of clothing multiplies the rate at which the player grows thirsty by 0.70.
-- ```STURDY``` This clothing is a lot more resistant to damage than normal.
-- ```SUN_GLASSES``` Prevents glaring when in sunlight.
-- ```SUPER_FANCY``` Gives an additional moral bonus over `FANCY` if the player has the `Stylish` trait.
-- ```SWIM_GOGGLES``` Allows you to see much further under water.
-- ```THERMOMETER``` This gear is equipped with an accurate thermometer (which is used to measure temperature).
-- ```VARSIZE``` Can be made to fit via tailoring.
-- ```WAIST``` Layer for belts other things worn on the waist.
-- ```WATCH``` Acts as a watch and allows the player to see actual time.
-- ```WATERPROOF``` Prevents the covered body-part(s) from getting wet in any circumstance.
-- ```WATER_FRIENDLY``` Prevents the item from making the body part count as unfriendly to water and thus causing negative morale from being wet.
-
+Some armor flags, such as `WATCH` and `ALARMCLOCK` are compatible with other item types. Experiment
+to find which flags work elsewhere.
+
+- `ACTIVE_CLOAKING` While active, drains UPS to provide invisibility.
+- `ALARMCLOCK` Has an alarm-clock feature.
+- `ALLOWS_NATURAL_ATTACKS` Doesn't prevent any natural attacks or similar benefits from mutations,
+ fingertip razors, etc., like most items covering the relevant body part would.
+- `AURA` This item goes in the outer aura layer, intended for metaphysical effects.
+- `BAROMETER` This gear is equipped with an accurate barometer (which is used to measure atmospheric
+ pressure).
+- `BELTED` Layer for backpacks and things worn over outerwear.
+- `BLIND` Blinds the wearer while worn, and provides nominal protection v. flashbang flashes.
+- `BLOCK_WHILE_WORN` Allows worn armor or shields to be used for blocking attacks. See also the
+ `Techniques` section.
+- `BULLET_IMMNUE` Wearing an item with this flag makes you immune to bullet damage
+- `CLIMATE_CONTROL` This piece of clothing has climate control of some sort, keeping you warmer or
+ cooler depending on ambient and bodily temperature.
+- `COLLAR` This piece of clothing has a wide collar that can keep your mouth warm.
+- `DEAF` Makes the player deaf.
+- `ELECTRIC_IMMUNE` This gear completely protects you from electric discharges.
+- `FANCY` Wearing this clothing gives a morale bonus if the player has the `Stylish` trait.
+- `FIX_FARSIGHT` This gear corrects farsightedness.
+- `FIX_NEARSIGHT` This gear corrects nearsightedness.
+- `FLOTATION` Prevents the player from drowning in deep water. Also prevents diving underwater.
+- `FRAGILE` This gear is less resistant to damage than normal.
+- `HELMET_COMPAT` Items that are not SKINTIGHT or OVERSIZE but can be worn with a helmet.
+- `HOOD` Allow this clothing to conditionally cover the head, for additional warmth or water
+ protection., if the player's head isn't encumbered
+- `HYGROMETER` This gear is equipped with an accurate hygrometer (which is used to measure
+ humidity).
+- `NO_TAKEOFF` Item with that flag can't be taken off.
+- `NO_QUICKDRAW` Don't offer to draw items from this holster when the fire key is pressed whilst the
+ players hands are empty
+- `ONLY_ONE` You can wear only one.
+- `OUTER` Outer garment layer.
+- `OVERSIZE` Can always be worn no matter encumbrance/mutations/bionics/etc., but prevents any other
+ clothing being worn over this.
+- `PARTIAL_DEAF` Reduces the volume of sounds to a safe level.
+- `PERSONAL` This item goes in the personal aura layer, intended for metaphysical effects.
+- `POCKETS` Increases warmth for hands if the player's hands are cold and the player is wielding
+ nothing.
+- `POWERARMOR_EXO` Marks the item as the main exoskeleton for power armor.
+- `POWERARMOR_EXTERNAL` Marks the item as external pieces that cover body parts the exoskeleton
+ doesn't.
+- `POWERARMOR_MOD` Marks the item as a power armour mod that is worn onto an exoskeleton/external
+ piece.
+- `POWERARMOR_COMPATIBLE` Makes item compatible with power armor despite other parameters causing
+ failure.
+- `PSYSHIELD_PARTIAL` 25% chance to protect against fear_paralyze monster attack when worn.
+- `RAD_PROOF` This piece of clothing completely protects you from radiation.
+- `RAD_RESIST` This piece of clothing partially protects you from radiation.
+- `RAINPROOF` Prevents the covered body-part(s) from getting wet in the rain.
+- `REQUIRES_BALANCE` Gear that requires a certain balance to be steady with. If the player is hit
+ while wearing, they have a chance to be downed.
+- `RESTRICT_HANDS` Prevents the player from wielding a weapon two-handed, forcing one-handed use if
+ the weapon permits it.
+- `ROLLER_ONE` A less stable and slower version of ROLLER_QUAD, still allows the player to move
+ faster than walking speed.
+- `ROLLER_QUAD`The medium choice between ROLLER_INLINE and ROLLER_ONE, while it is more stable, and
+ moves faster, it also has a harsher non-flat terrain penalty then ROLLER_ONE.
+- `ROLLER_INLINE` Faster, but less stable overall, the penalty for non-flat terrain is even harsher.
+- `SEMITANGIBLE` Prevents the item from participating in the encumbrance system when worn.
+- `COMPACT` Prevents the item from participating in the layering encumbrance system when worn.
+- `SKINTIGHT` Undergarment layer.
+- `SLOWS_MOVEMENT` This piece of clothing multiplies move cost by 1.1.
+- `SLOWS_THIRST` This piece of clothing multiplies the rate at which the player grows thirsty by
+ 0.70.
+- `STURDY` This clothing is a lot more resistant to damage than normal.
+- `SUN_GLASSES` Prevents glaring when in sunlight.
+- `SUPER_FANCY` Gives an additional moral bonus over `FANCY` if the player has the `Stylish` trait.
+- `SWIM_GOGGLES` Allows you to see much further under water.
+- `THERMOMETER` This gear is equipped with an accurate thermometer (which is used to measure
+ temperature).
+- `VARSIZE` Can be made to fit via tailoring.
+- `WAIST` Layer for belts other things worn on the waist.
+- `WATCH` Acts as a watch and allows the player to see actual time.
+- `WATERPROOF` Prevents the covered body-part(s) from getting wet in any circumstance.
+- `WATER_FRIENDLY` Prevents the item from making the body part count as unfriendly to water and thus
+ causing negative morale from being wet.
## Bionics
-- ```BIONIC_ARMOR_INTERFACE``` This bionic can provide power to powered armor.
-- ```BIONIC_FAULTY``` This bionic is a "faulty" bionic.
-- ```BIONIC_GUN``` This bionic is a gun bionic and activating it will fire it. Prevents all other activation effects.
-- ```BIONIC_NPC_USABLE``` The NPC AI knows how to use this CBM and it can be installed on an NPC.
-- ```BIONIC_POWER_SOURCE``` This bionic is a power source bionic.
-- ```BIONIC_SLEEP_FRIENDLY``` This bionic won't prompt the user to turn it off if they try to sleep while it's active.
-- ```BIONIC_TOGGLED``` This bionic only has a function when activated, else it causes it's effect every turn.
-- ```BIONIC_WEAPON``` This bionic is a weapon bionic and activating it will create (or destroy) bionic's fake_item in user's hands. Prevents all other activation effects.
-- ```BIONIC_SHOCKPROOF``` This bionic can't be incapacitated by electrical attacks.
-
+- `BIONIC_ARMOR_INTERFACE` This bionic can provide power to powered armor.
+- `BIONIC_FAULTY` This bionic is a "faulty" bionic.
+- `BIONIC_GUN` This bionic is a gun bionic and activating it will fire it. Prevents all other
+ activation effects.
+- `BIONIC_NPC_USABLE` The NPC AI knows how to use this CBM and it can be installed on an NPC.
+- `BIONIC_POWER_SOURCE` This bionic is a power source bionic.
+- `BIONIC_SLEEP_FRIENDLY` This bionic won't prompt the user to turn it off if they try to sleep
+ while it's active.
+- `BIONIC_TOGGLED` This bionic only has a function when activated, else it causes it's effect every
+ turn.
+- `BIONIC_WEAPON` This bionic is a weapon bionic and activating it will create (or destroy) bionic's
+ fake_item in user's hands. Prevents all other activation effects.
+- `BIONIC_SHOCKPROOF` This bionic can't be incapacitated by electrical attacks.
## Books
-- ```INSPIRATIONAL``` Reading this book grants bonus morale to characters with the SPIRITUAL trait.
+- `INSPIRATIONAL` Reading this book grants bonus morale to characters with the SPIRITUAL trait.
### Use actions
-- ```ACIDBOMB_ACT``` Get rid of it or you'll end up like that guy in Robocop.
-- ```ACIDBOMB``` Pull the pin on an acid bomb.
-- ```AUTOCLAVE``` Sterilize one CBM by autoclaving it.
-- ```ARROW_FLAMABLE``` Light your arrow and let fly.
-- ```BELL``` Ring the bell.
-- ```BOLTCUTTERS``` Use your town key to gain access anywhere.
-- ```BREAK_STICK``` Breaks long stick into two.
-- ```C4``` Arm the C4.
-- ```CABLE_ATTACH``` This item is a cable spool. Use it to try to attach to a vehicle.
-- ```CAN_GOO``` Release a little blob buddy.
-- ```CAPTURE_MONSTER_ACT``` Capture and encapsulate a monster. The associated action is also used for releasing it.
-- ```CARVER_OFF``` Turn the carver on.
-- ```CARVER_ON``` Turn the carver off.
-- ```CHAINSAW_OFF``` Turn the chainsaw on.
-- ```CHAINSAW_ON``` Turn the chainsaw off.
-- ```COMBATSAW_OFF``` Turn the combat-saw on.
-- ```COMBATSAW_ON``` Turn the combat-saw off
-- ```CROWBAR``` Pry open doors, windows, man-hole covers and many other things that need prying.
-- ```DIG``` Clear rubble.
-- ```DIRECTIONAL_ANTENNA``` Find the source of a signal with your radio.
-- ```DIVE_TANK``` Use compressed air tank to breathe.
-- ```DOG_WHISTLE``` Dogs hate this thing; your dog seems pretty cool with it though.
-- ```DOLLCHAT``` That creepy doll just keeps on talking.
-- ```ELEC_CHAINSAW_OFF``` Turn the electric chainsaw on.
-- ```ELEC_CHAINSAW_ON``` Turn the electric chainsaw off.
-- ```EXTINGUISHER``` Put out fires.
-- ```FIRECRACKER_ACT``` The saddest Fourth of July.
-- ```FIRECRACKER_PACK_ACT``` Keep the change you filthy animal.
-- ```FIRECRACKER_PACK``` Light an entire packet of firecrackers.
-- ```FIRECRACKER``` Light a singular firecracker.
-- ```FLASHBANG``` Pull the pin on a flashbang.
-- ```GEIGER``` Detect local radiation levels.
-- ```GRANADE_ACT``` Assaults enemies with source code fixes?
-- ```GRANADE``` Pull the pin on Granade.
-- ```GRENADE``` Pull the pin on a grenade.
-- ```HACKSAW``` Cut metal into chunks.
-- ```HAMMER``` Pry boards off of windows, doors and fences.
-- ```HEATPACK``` Activate the heatpack and get warm.
-- ```HEAT_FOOD``` Heat food around fires.
-- ```HOTPLATE``` Use the hotplate.
-- ```JACKHAMMER``` Bust down walls and other constructions.
-- ```JET_INJECTOR``` Inject some jet drugs right into your veins.
-- ```LAW``` Unpack the LAW for firing.
-- ```LIGHTSTRIP``` Activates the lightstrip.
-- ```LUMBER``` Cut logs into planks.
-- ```MAKEMOUND``` Make a mound of dirt.
-- ```MANHACK``` Activate a manhack.
-- ```MATCHBOMB``` Light the matchbomb.
-- ```MILITARYMAP``` Learn of local military installations, and show roads.
-- ```MININUKE``` Set the timer and run. Or hit with a hammer (not really).
-- ```MOLOTOV_LIT``` Throw it, but don't drop it.
-- ```MOLOTOV``` Light the Molotov cocktail.
-- ```MOP``` Mop up the mess.
-- ```MP3_ON``` Turn the mp3 player off.
-- ```MP3``` Turn the mp3 player on.
-- ```NOISE_EMITTER_OFF``` Turn the noise emitter on.
-- ```NOISE_EMITTER_ON``` Turn the noise emitter off.
-- ```NONE``` Do nothing.
-- ```PACK_CBM``` Put CBM in special autoclave pouch so that they stay sterile once sterilized.
-- ```PHEROMONE``` Makes zombies ignore you.
-- ```PICKAXE``` Does nothing but berate you for having it (I'm serious).
-- ```PLACE_RANDOMLY``` This is very much like the flag in the manhack iuse, it prevents the item from querying the player as to where they want the monster unloaded to, and instead choses randomly.
-- ```PORTABLE_GAME``` Play games.
-- ```PORTAL``` Create portal traps.
-- ```RADIO_OFF``` Turn the radio on.
-- ```RADIO_ON``` Turn the radio off.
-- ```RAG``` Stop the bleeding.
-- ```RESTAURANTMAP``` Learn of local eateries, and show roads.
-- ```ROADMAP``` Learn of local common points-of-interest and show roads.
-- ```SCISSORS``` Cut up clothing.
-- ```SEED``` Asks if you are sure that you want to eat the seed. As it is better to plant seeds.
-- ```SEW``` Sew clothing.
-- ```SHELTER``` Put up a full-blown shelter.
-- ```SHOCKTONFA_OFF``` Turn the shocktonfa on.
-- ```SHOCKTONFA_ON``` Turn the shocktonfa off.
-- ```SIPHON``` Siphon liquids out of vehicle.
-- ```SMOKEBOMB_ACT``` This may be a good way to hide as a smoker.
-- ```SMOKEBOMB``` Pull the pin on a smoke bomb.
-- ```SOLARPACK_OFF``` Fold solar backpack array.
-- ```SOLARPACK``` Unfold solar backpack array.
-- ```SOLDER_WELD``` Solder or weld items, or cauterize wounds.
-- ```SPRAY_CAN``` Graffiti the town.
-- ```SURVIVORMAP``` Learn of local points-of-interest that can help you survive, and show roads.
-- ```TAZER``` Shock someone or something.
-- ```TELEPORT``` Teleport.
-- ```TORCH``` Light a torch.
-- ```TOURISTMAP``` Learn of local points-of-interest that a tourist would like to visit, and show roads.
-- ```TOWEL``` Dry your character using the item as towel.
-- ```TOW_ATTACH``` This is a tow cable, activate it to attach it to a vehicle.
-- ```TURRET``` Activate a turret.
-- ```WASH_ALL_ITEMS``` Wash items with FILTHY flag.
-- ```WASH_HARD_ITEMS``` Wash hard items with FILTHY flag.
-- ```WASH_SOFT_ITEMS``` Wash soft items with FILTHY flag.
-- ```WATER_PURIFIER``` Purify water.
-
+- `ACIDBOMB_ACT` Get rid of it or you'll end up like that guy in Robocop.
+- `ACIDBOMB` Pull the pin on an acid bomb.
+- `AUTOCLAVE` Sterilize one CBM by autoclaving it.
+- `ARROW_FLAMABLE` Light your arrow and let fly.
+- `BELL` Ring the bell.
+- `BOLTCUTTERS` Use your town key to gain access anywhere.
+- `BREAK_STICK` Breaks long stick into two.
+- `C4` Arm the C4.
+- `CABLE_ATTACH` This item is a cable spool. Use it to try to attach to a vehicle.
+- `CAN_GOO` Release a little blob buddy.
+- `CAPTURE_MONSTER_ACT` Capture and encapsulate a monster. The associated action is also used for
+ releasing it.
+- `CARVER_OFF` Turn the carver on.
+- `CARVER_ON` Turn the carver off.
+- `CHAINSAW_OFF` Turn the chainsaw on.
+- `CHAINSAW_ON` Turn the chainsaw off.
+- `COMBATSAW_OFF` Turn the combat-saw on.
+- `COMBATSAW_ON` Turn the combat-saw off
+- `CROWBAR` Pry open doors, windows, man-hole covers and many other things that need prying.
+- `DIG` Clear rubble.
+- `DIRECTIONAL_ANTENNA` Find the source of a signal with your radio.
+- `DIVE_TANK` Use compressed air tank to breathe.
+- `DOG_WHISTLE` Dogs hate this thing; your dog seems pretty cool with it though.
+- `DOLLCHAT` That creepy doll just keeps on talking.
+- `ELEC_CHAINSAW_OFF` Turn the electric chainsaw on.
+- `ELEC_CHAINSAW_ON` Turn the electric chainsaw off.
+- `EXTINGUISHER` Put out fires.
+- `FIRECRACKER_ACT` The saddest Fourth of July.
+- `FIRECRACKER_PACK_ACT` Keep the change you filthy animal.
+- `FIRECRACKER_PACK` Light an entire packet of firecrackers.
+- `FIRECRACKER` Light a singular firecracker.
+- `FLASHBANG` Pull the pin on a flashbang.
+- `GEIGER` Detect local radiation levels.
+- `GRANADE_ACT` Assaults enemies with source code fixes?
+- `GRANADE` Pull the pin on Granade.
+- `GRENADE` Pull the pin on a grenade.
+- `HACKSAW` Cut metal into chunks.
+- `HAMMER` Pry boards off of windows, doors and fences.
+- `HEATPACK` Activate the heatpack and get warm.
+- `HEAT_FOOD` Heat food around fires.
+- `HOTPLATE` Use the hotplate.
+- `JACKHAMMER` Bust down walls and other constructions.
+- `JET_INJECTOR` Inject some jet drugs right into your veins.
+- `LAW` Unpack the LAW for firing.
+- `LIGHTSTRIP` Activates the lightstrip.
+- `LUMBER` Cut logs into planks.
+- `MAKEMOUND` Make a mound of dirt.
+- `MANHACK` Activate a manhack.
+- `MATCHBOMB` Light the matchbomb.
+- `MILITARYMAP` Learn of local military installations, and show roads.
+- `MININUKE` Set the timer and run. Or hit with a hammer (not really).
+- `MOLOTOV_LIT` Throw it, but don't drop it.
+- `MOLOTOV` Light the Molotov cocktail.
+- `MOP` Mop up the mess.
+- `MP3_ON` Turn the mp3 player off.
+- `MP3` Turn the mp3 player on.
+- `NOISE_EMITTER_OFF` Turn the noise emitter on.
+- `NOISE_EMITTER_ON` Turn the noise emitter off.
+- `NONE` Do nothing.
+- `PACK_CBM` Put CBM in special autoclave pouch so that they stay sterile once sterilized.
+- `PHEROMONE` Makes zombies ignore you.
+- `PICKAXE` Does nothing but berate you for having it (I'm serious).
+- `PLACE_RANDOMLY` This is very much like the flag in the manhack iuse, it prevents the item from
+ querying the player as to where they want the monster unloaded to, and instead choses randomly.
+- `PORTABLE_GAME` Play games.
+- `PORTAL` Create portal traps.
+- `RADIO_OFF` Turn the radio on.
+- `RADIO_ON` Turn the radio off.
+- `RAG` Stop the bleeding.
+- `RESTAURANTMAP` Learn of local eateries, and show roads.
+- `ROADMAP` Learn of local common points-of-interest and show roads.
+- `SCISSORS` Cut up clothing.
+- `SEED` Asks if you are sure that you want to eat the seed. As it is better to plant seeds.
+- `SEW` Sew clothing.
+- `SHELTER` Put up a full-blown shelter.
+- `SHOCKTONFA_OFF` Turn the shocktonfa on.
+- `SHOCKTONFA_ON` Turn the shocktonfa off.
+- `SIPHON` Siphon liquids out of vehicle.
+- `SMOKEBOMB_ACT` This may be a good way to hide as a smoker.
+- `SMOKEBOMB` Pull the pin on a smoke bomb.
+- `SOLARPACK_OFF` Fold solar backpack array.
+- `SOLARPACK` Unfold solar backpack array.
+- `SOLDER_WELD` Solder or weld items, or cauterize wounds.
+- `SPRAY_CAN` Graffiti the town.
+- `SURVIVORMAP` Learn of local points-of-interest that can help you survive, and show roads.
+- `TAZER` Shock someone or something.
+- `TELEPORT` Teleport.
+- `TORCH` Light a torch.
+- `TOURISTMAP` Learn of local points-of-interest that a tourist would like to visit, and show roads.
+- `TOWEL` Dry your character using the item as towel.
+- `TOW_ATTACH` This is a tow cable, activate it to attach it to a vehicle.
+- `TURRET` Activate a turret.
+- `WASH_ALL_ITEMS` Wash items with FILTHY flag.
+- `WASH_HARD_ITEMS` Wash hard items with FILTHY flag.
+- `WASH_SOFT_ITEMS` Wash soft items with FILTHY flag.
+- `WATER_PURIFIER` Purify water.
## Comestibles
### Comestible type
-- ```DRINK```
-- ```FOOD```
-- ```MED```
+- `DRINK`
+- `FOOD`
+- `MED`
### Addiction type
-- ```alcohol```
-- ```amphetamine```
-- ```caffeine```
-- ```cocaine```
-- ```crack```
-- ```nicotine```
-- ```opiate```
-- ```sleeping pill```
+- `alcohol`
+- `amphetamine`
+- `caffeine`
+- `cocaine`
+- `crack`
+- `nicotine`
+- `opiate`
+- `sleeping pill`
### Use action
-- ```ALCOHOL_STRONG``` Greatly increases drunkenness. Adds disease `drunk`.
-- ```ALCOHOL_WEAK``` Slightly increases drunkenness. Adds disease `drunk`
-- ```ALCOHOL``` Increases drunkenness. Adds disease `drunk`.
-- ```ANTIBIOTIC``` Helps fight infections. Removes disease `infected` and adds disease `recover`.
-- ```BANDAGE``` Stop bleeding.
-- ```BIRDFOOD``` Makes a small bird friendly.
-- ```BLECH``` Causes vomiting.
-- ```BLECH_BECAUSE_UNCLEAN``` Causes warning.
-- ```CATFOOD``` Makes a cat friendly.
-- ```CATTLEFODDER``` Makes a large herbivore friendly.
-- ```CHEW``` Displays message "You chew your %s", but otherwise does nothing.
-- ```CIG``` Alleviates nicotine cravings. Adds disease `cig`.
-- ```COKE``` Decreases hunger. Adds disease `high`.
-- ```CRACK``` Decreases hunger. Adds disease `high`.
-- ```DISINFECTANT``` Prevents infections.
-- ```DOGFOOD``` Makes a dog friendly.
-- ```FIRSTAID``` Heal.
-- ```FLUMED``` Adds disease `took_flumed`.
-- ```FLUSLEEP``` Adds disease `took_flumed` and increases fatigue.
-- ```FUNGICIDE``` Kills fungus and spores. Removes diseases `fungus` and `spores`.
-- ```HALLU``` Adds disease `hallu`.
-- ```HONEYCOMB``` Spawns wax.
-- ```INHALER``` Removes disease `asthma`.
-- ```IODINE``` Adds disease `iodine`.
-- ```MARLOSS``` "As you eat the berry, you have a near-religious experience, feeling at one with your surroundings..."
-- ```METH``` Adds disease `meth`
-- ```NONE``` "You can't do anything of interest with your [x]."
-- ```PKILL``` Reduces pain. Adds disease `pkill[n]` where `[n]` is the level of flag `PKILL_[n]` used on this comestible.
-- ```PLANTBLECH``` Causes vomiting if player does not contain plant mutations
-- ```POISON``` Adds diseases `poison` and `foodpoison`.
-- ```PROZAC``` Adds disease `took_prozac` if not currently present, otherwise acts as a minor stimulant. Rarely has the `took_prozac_bad` adverse effect.
-- ```PURIFIER``` Removes negative mutations.
-- ```ROYAL_JELLY``` Alleviates many negative conditions and diseases.
-- ```SEWAGE``` Causes vomiting and a chance to mutate.
-- ```SLEEP``` Greatly increases fatigue.
-- ```THORAZINE``` Removes diseases `hallu`, `visuals`, `high`. Additionally removes disease `formication` if disease `dermatik` isn't also present. Has a chance of a negative reaction which increases fatigue.
-- ```VACCINE``` Greatly increases health.
-- ```VITAMINS``` Increases healthiness (not to be confused with HP)
-- ```WEED``` Makes you roll with Cheech & Chong. Adds disease `weed_high`.
-- ```XANAX``` Alleviates anxiety. Adds disease `took_xanax`.
+- `ALCOHOL_STRONG` Greatly increases drunkenness. Adds disease `drunk`.
+- `ALCOHOL_WEAK` Slightly increases drunkenness. Adds disease `drunk`
+- `ALCOHOL` Increases drunkenness. Adds disease `drunk`.
+- `ANTIBIOTIC` Helps fight infections. Removes disease `infected` and adds disease `recover`.
+- `BANDAGE` Stop bleeding.
+- `BIRDFOOD` Makes a small bird friendly.
+- `BLECH` Causes vomiting.
+- `BLECH_BECAUSE_UNCLEAN` Causes warning.
+- `CATFOOD` Makes a cat friendly.
+- `CATTLEFODDER` Makes a large herbivore friendly.
+- `CHEW` Displays message "You chew your %s", but otherwise does nothing.
+- `CIG` Alleviates nicotine cravings. Adds disease `cig`.
+- `COKE` Decreases hunger. Adds disease `high`.
+- `CRACK` Decreases hunger. Adds disease `high`.
+- `DISINFECTANT` Prevents infections.
+- `DOGFOOD` Makes a dog friendly.
+- `FIRSTAID` Heal.
+- `FLUMED` Adds disease `took_flumed`.
+- `FLUSLEEP` Adds disease `took_flumed` and increases fatigue.
+- `FUNGICIDE` Kills fungus and spores. Removes diseases `fungus` and `spores`.
+- `HALLU` Adds disease `hallu`.
+- `HONEYCOMB` Spawns wax.
+- `INHALER` Removes disease `asthma`.
+- `IODINE` Adds disease `iodine`.
+- `MARLOSS` "As you eat the berry, you have a near-religious experience, feeling at one with your
+ surroundings..."
+- `METH` Adds disease `meth`
+- `NONE` "You can't do anything of interest with your [x]."
+- `PKILL` Reduces pain. Adds disease `pkill[n]` where `[n]` is the level of flag `PKILL_[n]` used on
+ this comestible.
+- `PLANTBLECH` Causes vomiting if player does not contain plant mutations
+- `POISON` Adds diseases `poison` and `foodpoison`.
+- `PROZAC` Adds disease `took_prozac` if not currently present, otherwise acts as a minor stimulant.
+ Rarely has the `took_prozac_bad` adverse effect.
+- `PURIFIER` Removes negative mutations.
+- `ROYAL_JELLY` Alleviates many negative conditions and diseases.
+- `SEWAGE` Causes vomiting and a chance to mutate.
+- `SLEEP` Greatly increases fatigue.
+- `THORAZINE` Removes diseases `hallu`, `visuals`, `high`. Additionally removes disease
+ `formication` if disease `dermatik` isn't also present. Has a chance of a negative reaction which
+ increases fatigue.
+- `VACCINE` Greatly increases health.
+- `VITAMINS` Increases healthiness (not to be confused with HP)
+- `WEED` Makes you roll with Cheech & Chong. Adds disease `weed_high`.
+- `XANAX` Alleviates anxiety. Adds disease `took_xanax`.
### Flags
-- ```ACID``` when consumed using the BLECH function, penalties are reduced if acidproof.
-- ```CARNIVORE_OK``` Can be eaten by characters with the Carnivore mutation.
-- ```CANT_HEAL_EVERYONE``` This med can't be used by everyone, it require a special mutation. See `can_heal_with` in mutation.
-- ```EATEN_COLD``` Morale bonus for eating cold.
-- ```EATEN_HOT``` Morale bonus for eating hot.
-- ```INEDIBLE``` Inedible by default, enabled to eat when in conjunction with (mutation threshold) flags: BIRD, CATTLE.
-- ```FERTILIZER``` Works as fertilizer for farming, of if this consumed with the PLANTBLECH function penalties will be reversed for plants.
-- ```FREEZERBURN``` First thaw is MUSHY, second is rotten
-- ```FUNGAL_VECTOR``` Will give a fungal infection when consumed.
-- ```HIDDEN_HALLU``` ... Food causes hallucinations, visible only with a certain survival skill level.
-- ```HIDDEN_POISON``` ... Food displays as poisonous with a certain survival skill level. Note that this doesn't make items poisonous on its own, consider adding `"use_action": "POISON"` as well, or using `FORAGE_POISON` instead.
-- ```MELTS``` Provides half fun unless frozen. Edible when frozen.
-- ```MILLABLE``` Can be placed inside a mill, to turn into flour.
-- ```MYCUS_OK``` Can be eaten by post-threshold Mycus characters. Only applies to mycus fruits by default.
-- ```NEGATIVE_MONOTONY_OK``` Allows ```negative_monotony``` property to lower comestible fun to negative values.
-- ```NO_INGEST``` Administered by some means other than oral intake.
-- ```PKILL_1``` Minor painkiller.
-- ```PKILL_2``` Moderate painkiller.
-- ```PKILL_3``` Heavy painkiller.
-- ```PKILL_4``` "You shoot up."
-- ```PKILL_L``` Slow-release painkiller.
-- ```RAW``` Reduces kcal by 25%, until cooked (that is, used in a recipe that requires a heat source). Should be added to *all* uncooked food, unless that food derives more than 50% of its calories from sugars (i.e. many fruits, some veggies) or fats (i.e. butchered fat, coconut). TODO: Make a unit test for these criteria after fat/protein/carbs are added.
-- ```SMOKABLE``` Accepted by smoking rack.
-- ```SMOKED``` Not accepted by smoking rack (product of smoking).
-- ```USE_EAT_VERB``` "You drink your %s." or "You eat your %s."
-- ```USE_ON_NPC``` Can be used on NPCs (not necessarily by them).
-- ```ZOOM``` Zoom items can increase your overmap sight range.
+- `ACID` when consumed using the BLECH function, penalties are reduced if acidproof.
+- `CARNIVORE_OK` Can be eaten by characters with the Carnivore mutation.
+- `CANT_HEAL_EVERYONE` This med can't be used by everyone, it require a special mutation. See
+ `can_heal_with` in mutation.
+- `EATEN_COLD` Morale bonus for eating cold.
+- `EATEN_HOT` Morale bonus for eating hot.
+- `INEDIBLE` Inedible by default, enabled to eat when in conjunction with (mutation threshold)
+ flags: BIRD, CATTLE.
+- `FERTILIZER` Works as fertilizer for farming, of if this consumed with the PLANTBLECH function
+ penalties will be reversed for plants.
+- `FREEZERBURN` First thaw is MUSHY, second is rotten
+- `FUNGAL_VECTOR` Will give a fungal infection when consumed.
+- `HIDDEN_HALLU` ... Food causes hallucinations, visible only with a certain survival skill level.
+- `HIDDEN_POISON` ... Food displays as poisonous with a certain survival skill level. Note that this
+ doesn't make items poisonous on its own, consider adding `"use_action": "POISON"` as well, or
+ using `FORAGE_POISON` instead.
+- `MELTS` Provides half fun unless frozen. Edible when frozen.
+- `MILLABLE` Can be placed inside a mill, to turn into flour.
+- `MYCUS_OK` Can be eaten by post-threshold Mycus characters. Only applies to mycus fruits by
+ default.
+- `NEGATIVE_MONOTONY_OK` Allows `negative_monotony` property to lower comestible fun to negative
+ values.
+- `NO_INGEST` Administered by some means other than oral intake.
+- `PKILL_1` Minor painkiller.
+- `PKILL_2` Moderate painkiller.
+- `PKILL_3` Heavy painkiller.
+- `PKILL_4` "You shoot up."
+- `PKILL_L` Slow-release painkiller.
+- `RAW` Reduces kcal by 25%, until cooked (that is, used in a recipe that requires a heat source).
+ Should be added to _all_ uncooked food, unless that food derives more than 50% of its calories
+ from sugars (i.e. many fruits, some veggies) or fats (i.e. butchered fat, coconut). TODO: Make a
+ unit test for these criteria after fat/protein/carbs are added.
+- `SMOKABLE` Accepted by smoking rack.
+- `SMOKED` Not accepted by smoking rack (product of smoking).
+- `USE_EAT_VERB` "You drink your %s." or "You eat your %s."
+- `USE_ON_NPC` Can be used on NPCs (not necessarily by them).
+- `ZOOM` Zoom items can increase your overmap sight range.
## Furniture and Terrain
@@ -505,325 +563,388 @@ List of known flags, used in both `terrain.json` and `furniture.json`.
### Flags
-- ```ALARMED``` Sets off an alarm if smashed.
-- ```ALLOW_FIELD_EFFECT``` Apply field effects to items inside ```SEALED``` terrain/furniture.
-- ```AUTO_WALL_SYMBOL``` (only for terrain) The symbol of this terrain will be one of the line drawings (corner, T-intersection, straight line etc.) depending on the adjacent terrains.
-
- Example: `-` and `|` are both terrain with the `CONNECT_TO_WALL` flag. `O` does not have the flag, while `X` and `Y` have the `AUTO_WALL_SYMBOL` flag.
-
- `X` terrain will be drawn as a T-intersection (connected to west, south and east), `Y` will be drawn as horizontal line (going from west to east, no connection to south).
- ```
- -X- -Y-
- | O
- ```
-
-- ```BARRICADABLE_DOOR_DAMAGED```
-- ```BARRICADABLE_DOOR_REINFORCED_DAMAGED```
-- ```BARRICADABLE_DOOR_REINFORCED```
-- ```BARRICADABLE_DOOR``` Door that can be barricaded.
-- ```BARRICADABLE_WINDOW_CURTAINS```
-- ```BARRICADABLE_WINDOW``` Window that can be barricaded.
-- ```BASHABLE``` Players + Monsters can bash this.
-- ```BLOCK_WIND``` This terrain will block the effects of wind.
-- ```BURROWABLE``` Burrowing monsters can travel under this terrain, while most others can't (e.g. graboid will traverse under the chain link fence, while ordinary zombie will be stopped by it).
-- ```BUTCHER_EQ``` Butcher's equipment - required for full butchery of corpses.
-- ```CAN_SIT``` Furniture the player can sit on. Player sitting near furniture with the "FLAT_SURF" tag will get mood bonus for eating.
-- ```CHIP``` Used in construction menu to determine if wall can have paint chipped off.
-- ```COLLAPSES``` Has a roof that can collapse.
-- ```CONNECT_TO_WALL``` (only for terrain) This flag has been superseded by the JSON entry `connects_to`, but is retained for backward compatibility.
-- ```CONSOLE``` Used as a computer.
-- ```CONTAINER``` Items on this square are hidden until looted by the player.
-- ```DECONSTRUCT``` Can be deconstructed.
-- ```DEEP_WATER```
-- ```DESTROY_ITEM``` Items that land here are destroyed. See also `NOITEM`
-- ```DIFFICULT_Z``` Most zombies will not be able to follow you up this terrain ( i.e a ladder )
-- ```DIGGABLE_CAN_DEEPEN``` Diggable location can be dug again to make deeper (e.g. shallow pit to deep pit).
-- ```DIGGABLE``` Digging monsters, seeding monster, digging with shovel, etc.
-- ```DOOR``` Can be opened (used for NPC path-finding).
-- ```EASY_DECONSTRUCT``` Player can deconstruct this without tools.
-- ```ELEVATOR``` Terrain with this flag will move player, NPCs, monsters, and items up and down when player activates nearby `elevator controls`.
-- ```EMITTER``` This furniture will emit fields automatically as defined by its emissions entry
-- ```FIRE_CONTAINER``` Stops fire from spreading (brazier, wood stove, etc.)
-- ```FLAMMABLE_ASH``` Burns to ash rather than rubble.
-- ```FLAMMABLE_HARD``` Harder to light on fire, but still possible.
-- ```FLAMMABLE``` Can be lit on fire.
-- ```FLAT_SURF``` Furniture or terrain with a flat hard surface (e.g. table, but not chair; tree stump, etc.).
-- ```FLAT``` Player can build and move furniture on.
-- ```FORAGE_HALLU``` This item can be found with the `HIDDEN_HALLU` flag when found through foraging.
-- ```FORAGE_POISION``` This item can be found with the `HIDDEN_POISON` flag when found through foraging.
-- ```FRIDGE``` This item refrigerates items inside. Preserving them. Unlike vehicle parts, any furniture with this flag constantly functions.
-- ```FREEZER``` This item freezes items inside. Preserving them extremely well. Unlike vehicle parts, any furniture with this flag constantly functions.
-- ```GOES_DOWN``` Can use > to go down a level.
-- ```GOES_UP``` Can use < to go up a level.
-- ```GROWTH_SEED``` This plant is in its seed stage of growth.
-- ```GROWTH_SEEDLING``` This plant is in its seedling stage of growth.
-- ```GROWTH_MATURE``` This plant is in a mature stage of a growth.
-- ```GROWTH_HARVEST``` This plant is ready for harvest.
-- ```HARVESTED``` Marks the harvested version of a terrain type (e.g. harvesting an apple tree turns it into a harvested tree, which later becomes an apple tree again).
-- ```HIDE_PLACE``` Creatures on this tile can't be seen by creatures not standing on adjacent tiles
-- ```INDOORS``` Has a roof over it; blocks rain, sunlight, etc.
-- ```LADDER``` This piece of furniture that makes climbing easy (works only with z-level mode).
-- ```LIQUIDCONT``` Furniture that contains liquid, allows for contents to be accessed in some checks even if `SEALED`.
-- ```LIQUID``` Blocks movement, but isn't a wall (lava, water, etc.)
-- ```MINEABLE``` Can be mined with a pickaxe/jackhammer.
-- ```MOUNTABLE``` Suitable for guns with the `MOUNTED_GUN` flag.
-- ```NOCOLLIDE``` Feature that simply doesn't collide with vehicles at all.
-- ```NOITEM``` Items cannot be added here but may overflow to adjacent tiles. See also `DESTROY_ITEM`
-- ```NO_FLOOR``` Things should fall when placed on this tile
-- ```NO_SIGHT``` Creature on this tile have their sight reduced to one tile
-- ```NO_SCENT``` This tile cannot have scent values, which prevents scent diffusion through this tile
-- ```OPENCLOSE_INSIDE``` If it's a door (with an 'open' or 'close' field), it can only be opened or closed if you're inside.
-- ```PAINFUL``` May cause a small amount of pain.
-- ```PERMEABLE``` Permeable for gases.
-- ```PLACE_ITEM``` Valid terrain for `place_item()` to put items on.
-- ```PLANT``` A 'furniture' that grows and fruits.
-- ```PLANTABLE``` This terrain or furniture can have seeds planted in it.
-- ```PLOWABLE``` Terrain can be plowed.
-- ```RAMP_END```
-- ```RAMP``` Can be used to move up a z-level
-- ```REDUCE_SCENT``` Reduces scent diffusion (not total amount of scent in area); only works if also bashable.
-- ```ROAD``` Flat and hard enough to drive or skate (with rollerblades) on.
-- ```ROUGH``` May hurt the player's feet.
-- ```RUG``` Enables the `Remove Carpet` Construction entry.
-- ```SALT_WATER``` Source of salt water (works for terrains with examine action "water_source").
-- ```SEALED``` Can't use e to retrieve items; must smash them open first.
-- ```SEEN_FROM_ABOVE``` Visible from a higher level (provided the tile above has no floor)
-- ```SHARP``` May do minor damage to players/monsters passing through it.
-- ```SHORT``` Feature too short to collide with vehicle protrusions. (mirrors, blades).
-- ```SIGN``` Show written message on examine.
-- ```SMALL_PASSAGE``` This terrain or furniture is too small for large or huge creatures to pass through.
-- ```SUN_ROOF_ABOVE``` This furniture (terrain is not supported currently) has a "fake roof" above, that blocks sunlight. Special hack for #44421, to be removed later.
-- ```SUPPORTS_ROOF``` Used as a boundary for roof construction.
-- ```SUPPRESS_SMOKE``` Prevents smoke from fires; used by ventilated wood stoves, etc.
-- ```SWIMMABLE``` Player and monsters can swim through it.
-- ```THIN_OBSTACLE``` Passable by players and monsters; vehicles destroy it.
-- ```TINY``` Feature too short to collide with vehicle undercarriage. Vehicles drive over them with no damage, unless a wheel hits them.
-- ```TRANSPARENT``` Players and monsters can see through/past it. Also sets ter_t.transparent.
-- ```UNSTABLE``` Walking here cause the bouldering effect on the character.
-- ```USABLE_FIRE``` This terrain or furniture counts as a nearby fire for crafting.
-- ```VEH_TREAT_AS_BASH_BELOW``` Vehicles will not collide with this even if it counts as rough terrain, like floor with bash_below does. Used for terrain meant to be turned into other terrain when smashed instead of destroying the tile beneath it.
-- ```WALL``` This terrain is an upright obstacle. Used for fungal conversion, and also implies `CONNECT_TO_WALL`.
+- `ALARMED` Sets off an alarm if smashed.
+- `ALLOW_FIELD_EFFECT` Apply field effects to items inside `SEALED` terrain/furniture.
+- `AUTO_WALL_SYMBOL` (only for terrain) The symbol of this terrain will be one of the line drawings
+ (corner, T-intersection, straight line etc.) depending on the adjacent terrains.
+
+ Example: `-` and `|` are both terrain with the `CONNECT_TO_WALL` flag. `O` does not have the flag,
+ while `X` and `Y` have the `AUTO_WALL_SYMBOL` flag.
+
+ `X` terrain will be drawn as a T-intersection (connected to west, south and east), `Y` will be
+ drawn as horizontal line (going from west to east, no connection to south).
+ ```
+ -X- -Y-
+ | O
+ ```
+
+- `BARRICADABLE_DOOR_DAMAGED`
+- `BARRICADABLE_DOOR_REINFORCED_DAMAGED`
+- `BARRICADABLE_DOOR_REINFORCED`
+- `BARRICADABLE_DOOR` Door that can be barricaded.
+- `BARRICADABLE_WINDOW_CURTAINS`
+- `BARRICADABLE_WINDOW` Window that can be barricaded.
+- `BASHABLE` Players + Monsters can bash this.
+- `BLOCK_WIND` This terrain will block the effects of wind.
+- `BURROWABLE` Burrowing monsters can travel under this terrain, while most others can't (e.g.
+ graboid will traverse under the chain link fence, while ordinary zombie will be stopped by it).
+- `BUTCHER_EQ` Butcher's equipment - required for full butchery of corpses.
+- `CAN_SIT` Furniture the player can sit on. Player sitting near furniture with the "FLAT_SURF" tag
+ will get mood bonus for eating.
+- `CHIP` Used in construction menu to determine if wall can have paint chipped off.
+- `COLLAPSES` Has a roof that can collapse.
+- `CONNECT_TO_WALL` (only for terrain) This flag has been superseded by the JSON entry
+ `connects_to`, but is retained for backward compatibility.
+- `CONSOLE` Used as a computer.
+- `CONTAINER` Items on this square are hidden until looted by the player.
+- `DECONSTRUCT` Can be deconstructed.
+- `DEEP_WATER`
+- `DESTROY_ITEM` Items that land here are destroyed. See also `NOITEM`
+- `DIFFICULT_Z` Most zombies will not be able to follow you up this terrain ( i.e a ladder )
+- `DIGGABLE_CAN_DEEPEN` Diggable location can be dug again to make deeper (e.g. shallow pit to deep
+ pit).
+- `DIGGABLE` Digging monsters, seeding monster, digging with shovel, etc.
+- `DOOR` Can be opened (used for NPC path-finding).
+- `EASY_DECONSTRUCT` Player can deconstruct this without tools.
+- `ELEVATOR` Terrain with this flag will move player, NPCs, monsters, and items up and down when
+ player activates nearby `elevator controls`.
+- `EMITTER` This furniture will emit fields automatically as defined by its emissions entry
+- `FIRE_CONTAINER` Stops fire from spreading (brazier, wood stove, etc.)
+- `FLAMMABLE_ASH` Burns to ash rather than rubble.
+- `FLAMMABLE_HARD` Harder to light on fire, but still possible.
+- `FLAMMABLE` Can be lit on fire.
+- `FLAT_SURF` Furniture or terrain with a flat hard surface (e.g. table, but not chair; tree stump,
+ etc.).
+- `FLAT` Player can build and move furniture on.
+- `FORAGE_HALLU` This item can be found with the `HIDDEN_HALLU` flag when found through foraging.
+- `FORAGE_POISION` This item can be found with the `HIDDEN_POISON` flag when found through foraging.
+- `FRIDGE` This item refrigerates items inside. Preserving them. Unlike vehicle parts, any furniture
+ with this flag constantly functions.
+- `FREEZER` This item freezes items inside. Preserving them extremely well. Unlike vehicle parts,
+ any furniture with this flag constantly functions.
+- `GOES_DOWN` Can use > to go down a level.
+- `GOES_UP` Can use < to go up a level.
+- `GROWTH_SEED` This plant is in its seed stage of growth.
+- `GROWTH_SEEDLING` This plant is in its seedling stage of growth.
+- `GROWTH_MATURE` This plant is in a mature stage of a growth.
+- `GROWTH_HARVEST` This plant is ready for harvest.
+- `HARVESTED` Marks the harvested version of a terrain type (e.g. harvesting an apple tree turns it
+ into a harvested tree, which later becomes an apple tree again).
+- `HIDE_PLACE` Creatures on this tile can't be seen by creatures not standing on adjacent tiles
+- `INDOORS` Has a roof over it; blocks rain, sunlight, etc.
+- `LADDER` This piece of furniture that makes climbing easy (works only with z-level mode).
+- `LIQUIDCONT` Furniture that contains liquid, allows for contents to be accessed in some checks
+ even if `SEALED`.
+- `LIQUID` Blocks movement, but isn't a wall (lava, water, etc.)
+- `MINEABLE` Can be mined with a pickaxe/jackhammer.
+- `MOUNTABLE` Suitable for guns with the `MOUNTED_GUN` flag.
+- `NOCOLLIDE` Feature that simply doesn't collide with vehicles at all.
+- `NOITEM` Items cannot be added here but may overflow to adjacent tiles. See also `DESTROY_ITEM`
+- `NO_FLOOR` Things should fall when placed on this tile
+- `NO_SIGHT` Creature on this tile have their sight reduced to one tile
+- `NO_SCENT` This tile cannot have scent values, which prevents scent diffusion through this tile
+- `OPENCLOSE_INSIDE` If it's a door (with an 'open' or 'close' field), it can only be opened or
+ closed if you're inside.
+- `PAINFUL` May cause a small amount of pain.
+- `PERMEABLE` Permeable for gases.
+- `PLACE_ITEM` Valid terrain for `place_item()` to put items on.
+- `PLANT` A 'furniture' that grows and fruits.
+- `PLANTABLE` This terrain or furniture can have seeds planted in it.
+- `PLOWABLE` Terrain can be plowed.
+- `RAMP_END`
+- `RAMP` Can be used to move up a z-level
+- `REDUCE_SCENT` Reduces scent diffusion (not total amount of scent in area); only works if also
+ bashable.
+- `ROAD` Flat and hard enough to drive or skate (with rollerblades) on.
+- `ROUGH` May hurt the player's feet.
+- `RUG` Enables the `Remove Carpet` Construction entry.
+- `SALT_WATER` Source of salt water (works for terrains with examine action "water_source").
+- `SEALED` Can't use e to retrieve items; must smash them open first.
+- `SEEN_FROM_ABOVE` Visible from a higher level (provided the tile above has no floor)
+- `SHARP` May do minor damage to players/monsters passing through it.
+- `SHORT` Feature too short to collide with vehicle protrusions. (mirrors, blades).
+- `SIGN` Show written message on examine.
+- `SMALL_PASSAGE` This terrain or furniture is too small for large or huge creatures to pass
+ through.
+- `SUN_ROOF_ABOVE` This furniture (terrain is not supported currently) has a "fake roof" above, that
+ blocks sunlight. Special hack for #44421, to be removed later.
+- `SUPPORTS_ROOF` Used as a boundary for roof construction.
+- `SUPPRESS_SMOKE` Prevents smoke from fires; used by ventilated wood stoves, etc.
+- `SWIMMABLE` Player and monsters can swim through it.
+- `THIN_OBSTACLE` Passable by players and monsters; vehicles destroy it.
+- `TINY` Feature too short to collide with vehicle undercarriage. Vehicles drive over them with no
+ damage, unless a wheel hits them.
+- `TRANSPARENT` Players and monsters can see through/past it. Also sets ter_t.transparent.
+- `UNSTABLE` Walking here cause the bouldering effect on the character.
+- `USABLE_FIRE` This terrain or furniture counts as a nearby fire for crafting.
+- `VEH_TREAT_AS_BASH_BELOW` Vehicles will not collide with this even if it counts as rough terrain,
+ like floor with bash_below does. Used for terrain meant to be turned into other terrain when
+ smashed instead of destroying the tile beneath it.
+- `WALL` This terrain is an upright obstacle. Used for fungal conversion, and also implies
+ `CONNECT_TO_WALL`.
### Examine Actions
-- ```aggie_plant``` Harvest plants.
-- ```autodoc``` Brings the autodoc consoles menu. Needs the ```AUTODOC``` flag to function properly and an adjacent furniture with the ```AUTODOC_COUCH``` flag.
-- ```autoclave_empty``` Start the autoclave cycle if it contains filthy CBM, and the player has enough water.
-- ```autoclave_full``` Check on the progress of the cycle, and collect sterile CBM once cycle is completed.
-- ```bars``` Take advantage of AMORPHOUS and slip through the bars.
-- ```bulletin_board``` Use this to arrange tasks for your faction camp.
-- ```cardreader``` Use the cardreader with a valid card, or attempt to hack.
-- ```chainfence``` Hop over the chain fence.
-- ```controls_gate``` Controls the attached gate.
-- ```dirtmound``` Plant seeds and plants.
-- ```elevator``` Use the elevator to change floors.
-- ```fault``` Displays descriptive message, but otherwise unused.
-- ```flower_poppy``` Pick the mutated poppy.
-- ```fswitch``` Flip the switch and the rocks will shift.
-- ```fungus``` Release spores as the terrain crumbles away.
-- ```gaspump``` Use the gas-pump.
-- ```none``` None
-- ```pedestal_temple``` Opens the temple if you have a petrified eye.
-- ```pedestal_wyrm``` Spawn wyrms.
-- ```pit_covered``` Uncover the pit.
-- ```pit``` Cover the pit if you have some planks of wood.
-- ```portable_structure``` Take down a tent or similar portable structure.
-- ```recycle_compactor``` Compress pure metal objects into basic shapes.
-- ```rubble``` Clear up the rubble if you have a shovel.
-- ```safe``` Attempt to crack the safe.
-- ```shelter``` Take down the shelter.
-- ```shrub_marloss``` Pick a marloss bush.
-- ```shrub_wildveggies``` Pick a wild veggies shrub.
-- ```slot_machine``` Gamble.
-- ```toilet``` Either drink or get water out of the toilet.
-- ```trap``` Interact with a trap.
-- ```water_source``` Drink or get water from a water source.
+- `aggie_plant` Harvest plants.
+- `autodoc` Brings the autodoc consoles menu. Needs the `AUTODOC` flag to function properly and an
+ adjacent furniture with the `AUTODOC_COUCH` flag.
+- `autoclave_empty` Start the autoclave cycle if it contains filthy CBM, and the player has enough
+ water.
+- `autoclave_full` Check on the progress of the cycle, and collect sterile CBM once cycle is
+ completed.
+- `bars` Take advantage of AMORPHOUS and slip through the bars.
+- `bulletin_board` Use this to arrange tasks for your faction camp.
+- `cardreader` Use the cardreader with a valid card, or attempt to hack.
+- `chainfence` Hop over the chain fence.
+- `controls_gate` Controls the attached gate.
+- `dirtmound` Plant seeds and plants.
+- `elevator` Use the elevator to change floors.
+- `fault` Displays descriptive message, but otherwise unused.
+- `flower_poppy` Pick the mutated poppy.
+- `fswitch` Flip the switch and the rocks will shift.
+- `fungus` Release spores as the terrain crumbles away.
+- `gaspump` Use the gas-pump.
+- `none` None
+- `pedestal_temple` Opens the temple if you have a petrified eye.
+- `pedestal_wyrm` Spawn wyrms.
+- `pit_covered` Uncover the pit.
+- `pit` Cover the pit if you have some planks of wood.
+- `portable_structure` Take down a tent or similar portable structure.
+- `recycle_compactor` Compress pure metal objects into basic shapes.
+- `rubble` Clear up the rubble if you have a shovel.
+- `safe` Attempt to crack the safe.
+- `shelter` Take down the shelter.
+- `shrub_marloss` Pick a marloss bush.
+- `shrub_wildveggies` Pick a wild veggies shrub.
+- `slot_machine` Gamble.
+- `toilet` Either drink or get water out of the toilet.
+- `trap` Interact with a trap.
+- `water_source` Drink or get water from a water source.
### Fungal Conversions Only
-- ```FLOWER``` This furniture is a flower.
-- ```FUNGUS``` Fungal covered.
-- ```ORGANIC``` This furniture is partly organic.
-- ```SHRUB``` This terrain is a shrub.
-- ```TREE``` This terrain is a tree.
-- ```YOUNG``` This terrain is a young tree.
+- `FLOWER` This furniture is a flower.
+- `FUNGUS` Fungal covered.
+- `ORGANIC` This furniture is partly organic.
+- `SHRUB` This terrain is a shrub.
+- `TREE` This terrain is a tree.
+- `YOUNG` This terrain is a young tree.
### Furniture Only
-- ```AUTODOC``` This furniture can be an autodoc console, it also needs the ```autodoc``` examine action.
-- ```AUTODOC_COUCH``` This furniture can be a couch for a furniture with the ```autodoc``` examine action.
-- ```BLOCKSDOOR``` This will boost map terrain's resistance to bashing if `str_*_blocked` is set (see `map_bash_info`)
-
+- `AUTODOC` This furniture can be an autodoc console, it also needs the `autodoc` examine action.
+- `AUTODOC_COUCH` This furniture can be a couch for a furniture with the `autodoc` examine action.
+- `BLOCKSDOOR` This will boost map terrain's resistance to bashing if `str_*_blocked` is set (see
+ `map_bash_info`)
## Generic
### Flags
-- ```BIONIC_NPC_USABLE``` ... Safe CBMs that NPCs can use without extensive NPC rewrites to utilize toggle CBMs.
-- ```BIONIC_TOGGLED``` ... This bionic only has a function when activated, instead of causing its effect every turn.
-- ```BIONIC_POWER_SOURCE``` ... This bionic is a source of bionic power.
-- ```BIONIC_SHOCKPROOF``` ... This bionic can't be incapacitated by electrical attacks.
-- ```BIONIC_FAULTY``` ... This bionic is a "faulty" bionic.
-- ```BIONIC_WEAPON``` ... This bionic is a weapon bionic and activating it will create (or destroy) bionic's fake_item in user's hands. Prevents all other activation effects.
-- ```BIONIC_ARMOR_INTERFACE``` ... This bionic can provide power to powered armor.
-- ```BIONIC_SLEEP_FRIENDLY``` ... This bionic won't provide a warning if the player tries to sleep while it's active.
-- ```BIONIC_GUN``` ... This bionic is a gun bionic and activating it will fire it. Prevents all other activation effects.
-- ```CORPSE``` ... Flag used to spawn various human corpses during the mapgen.
-- ```DANGEROUS``` ... NPCs will not accept this item. Explosion iuse actor implies this flag. Implies "NPC_THROW_NOW".
-- ```DETERGENT``` ... This item can be used as a detergent in a washing machine.
-- ```DURABLE_MELEE``` ... Item is made to hit stuff and it does it well, so it's considered to be a lot tougher than other weapons made of the same materials.
-- ```FAKE_MILL``` ... Item is a fake item, to denote a partially milled product by @ref Item::process_fake_mill, where conditions for its removal are set.
-- ```FAKE_SMOKE``` ... Item is a fake item generating smoke, recognizable by @ref item::process_fake_smoke, where conditions for its removal are set.
-- ```FIREWOOD``` ... This item can serve as a firewood. Items with this flag are sorted out to "Loot: Wood" zone
-- ```FRAGILE_MELEE``` ... Fragile items that fall apart easily when used as a weapon due to poor construction quality and will break into components when broken.
-- ```GAS_DISCOUNT``` ... Discount cards for the automated gas stations.
-- ```IS_PET_ARMOR``` ... Is armor for a pet monster, not armor for a person
-- ```LEAK_ALWAYS``` ... Leaks (may be combined with "RADIOACTIVE").
-- ```LEAK_DAM``` ... Leaks when damaged (may be combined with "RADIOACTIVE").
-- ```NEEDS_UNFOLD``` ... Has an additional time penalty upon wielding. For melee weapons and guns this is offset by the relevant skill. Stacks with "SLOW_WIELD".
-- ```NO_PACKED``` ... This item is not protected against contamination and won't stay sterile. Only applies to CBMs.
-- ```NO_REPAIR``` ... Prevents repairing of this item even if otherwise suitable tools exist.
-- ```NO_SALVAGE``` ... Item cannot be broken down through a salvage process. Best used when something should not be able to be broken down (i.e. base components like leather patches).
-- ```NO_STERILE``` ... This item is not sterile. Only applies to CBMs.
-- ```NPC_ACTIVATE``` ... NPCs can activate this item as an alternative attack. Currently by throwing it right after activation. Implied by "BOMB".
-- ```NPC_ALT_ATTACK``` ... Shouldn't be set directly. Implied by "NPC_ACTIVATE" and "NPC_THROWN".
-- ```NPC_THROWN``` ... NPCs will throw this item (without activating it first) as an alternative attack.
-- ```NPC_THROW_NOW``` ... NPCs will try to throw this item away, preferably at enemies. Implies "TRADER_AVOID" and "NPC_THROWN".
-- ```PSEUDO``` ... Used internally to mark items that are referred to in the crafting inventory but are not actually items. They can be used as tools, but not as components. Implies "TRADER_AVOID".
-- ```RADIOACTIVE``` ... Is radioactive (can be used with LEAK_*).
-- ```RAIN_PROTECT``` ... Protects from sunlight and from rain, when wielded.
-- ```REDUCED_BASHING``` ... Gunmod flag; reduces the item's bashing damage by 50%.
-- ```REDUCED_WEIGHT``` ... Gunmod flag; reduces the item's base weight by 25%.
-- ```REQUIRES_TINDER``` ... Requires tinder to be present on the tile this item tries to start a fire on.
-- ```SLEEP_AID``` ... This item helps in sleeping.
-- ```SLEEP_IGNORE``` ... This item is not shown as before-sleep warning.
-- ```SLOW_WIELD``` ... Has an additional time penalty upon wielding. For melee weapons and guns this is offset by the relevant skill. Stacks with "NEEDS_UNFOLD".
-- ```TACK``` ... Item can be used as tack for a mount.
-- ```TIE_UP``` ... Item can be used to tie up a creature.
-- ```TINDER``` ... This item can be used as tinder for lighting a fire with a REQUIRES_TINDER flagged firestarter.
-- ```TRADER_AVOID``` ... NPCs will not start with this item. Use this for active items (e.g. flashlight (on)), dangerous items (e.g. active bomb), fake item or unusual items (e.g. unique quest item).
-- ```UNBREAKABLE_MELEE``` ... Does never get damaged when used as melee weapon.
-- ```UNRECOVERABLE``` ... Cannot be recovered from a disassembly.
-
+- `BIONIC_NPC_USABLE` ... Safe CBMs that NPCs can use without extensive NPC rewrites to utilize
+ toggle CBMs.
+- `BIONIC_TOGGLED` ... This bionic only has a function when activated, instead of causing its effect
+ every turn.
+- `BIONIC_POWER_SOURCE` ... This bionic is a source of bionic power.
+- `BIONIC_SHOCKPROOF` ... This bionic can't be incapacitated by electrical attacks.
+- `BIONIC_FAULTY` ... This bionic is a "faulty" bionic.
+- `BIONIC_WEAPON` ... This bionic is a weapon bionic and activating it will create (or destroy)
+ bionic's fake_item in user's hands. Prevents all other activation effects.
+- `BIONIC_ARMOR_INTERFACE` ... This bionic can provide power to powered armor.
+- `BIONIC_SLEEP_FRIENDLY` ... This bionic won't provide a warning if the player tries to sleep while
+ it's active.
+- `BIONIC_GUN` ... This bionic is a gun bionic and activating it will fire it. Prevents all other
+ activation effects.
+- `CORPSE` ... Flag used to spawn various human corpses during the mapgen.
+- `DANGEROUS` ... NPCs will not accept this item. Explosion iuse actor implies this flag. Implies
+ "NPC_THROW_NOW".
+- `DETERGENT` ... This item can be used as a detergent in a washing machine.
+- `DURABLE_MELEE` ... Item is made to hit stuff and it does it well, so it's considered to be a lot
+ tougher than other weapons made of the same materials.
+- `FAKE_MILL` ... Item is a fake item, to denote a partially milled product by @ref
+ Item::process_fake_mill, where conditions for its removal are set.
+- `FAKE_SMOKE` ... Item is a fake item generating smoke, recognizable by @ref
+ item::process_fake_smoke, where conditions for its removal are set.
+- `FIREWOOD` ... This item can serve as a firewood. Items with this flag are sorted out to "Loot:
+ Wood" zone
+- `FRAGILE_MELEE` ... Fragile items that fall apart easily when used as a weapon due to poor
+ construction quality and will break into components when broken.
+- `GAS_DISCOUNT` ... Discount cards for the automated gas stations.
+- `IS_PET_ARMOR` ... Is armor for a pet monster, not armor for a person
+- `LEAK_ALWAYS` ... Leaks (may be combined with "RADIOACTIVE").
+- `LEAK_DAM` ... Leaks when damaged (may be combined with "RADIOACTIVE").
+- `NEEDS_UNFOLD` ... Has an additional time penalty upon wielding. For melee weapons and guns this
+ is offset by the relevant skill. Stacks with "SLOW_WIELD".
+- `NO_PACKED` ... This item is not protected against contamination and won't stay sterile. Only
+ applies to CBMs.
+- `NO_REPAIR` ... Prevents repairing of this item even if otherwise suitable tools exist.
+- `NO_SALVAGE` ... Item cannot be broken down through a salvage process. Best used when something
+ should not be able to be broken down (i.e. base components like leather patches).
+- `NO_STERILE` ... This item is not sterile. Only applies to CBMs.
+- `NPC_ACTIVATE` ... NPCs can activate this item as an alternative attack. Currently by throwing it
+ right after activation. Implied by "BOMB".
+- `NPC_ALT_ATTACK` ... Shouldn't be set directly. Implied by "NPC_ACTIVATE" and "NPC_THROWN".
+- `NPC_THROWN` ... NPCs will throw this item (without activating it first) as an alternative attack.
+- `NPC_THROW_NOW` ... NPCs will try to throw this item away, preferably at enemies. Implies
+ "TRADER_AVOID" and "NPC_THROWN".
+- `PSEUDO` ... Used internally to mark items that are referred to in the crafting inventory but are
+ not actually items. They can be used as tools, but not as components. Implies "TRADER_AVOID".
+- `RADIOACTIVE` ... Is radioactive (can be used with LEAK_*).
+- `RAIN_PROTECT` ... Protects from sunlight and from rain, when wielded.
+- `REDUCED_BASHING` ... Gunmod flag; reduces the item's bashing damage by 50%.
+- `REDUCED_WEIGHT` ... Gunmod flag; reduces the item's base weight by 25%.
+- `REQUIRES_TINDER` ... Requires tinder to be present on the tile this item tries to start a fire
+ on.
+- `SLEEP_AID` ... This item helps in sleeping.
+- `SLEEP_IGNORE` ... This item is not shown as before-sleep warning.
+- `SLOW_WIELD` ... Has an additional time penalty upon wielding. For melee weapons and guns this is
+ offset by the relevant skill. Stacks with "NEEDS_UNFOLD".
+- `TACK` ... Item can be used as tack for a mount.
+- `TIE_UP` ... Item can be used to tie up a creature.
+- `TINDER` ... This item can be used as tinder for lighting a fire with a REQUIRES_TINDER flagged
+ firestarter.
+- `TRADER_AVOID` ... NPCs will not start with this item. Use this for active items (e.g. flashlight
+ (on)), dangerous items (e.g. active bomb), fake item or unusual items (e.g. unique quest item).
+- `UNBREAKABLE_MELEE` ... Does never get damaged when used as melee weapon.
+- `UNRECOVERABLE` ... Cannot be recovered from a disassembly.
## Guns
-- ```BACKBLAST``` Causes a small explosion behind the person firing the weapon. Currently not implemented?
-- ```BIPOD``` Handling bonus only applies on MOUNTABLE map/vehicle tiles. Does not include wield time penalty (see SLOW_WIELD).
-- ```CHARGE``` Has to be charged to fire. Higher charges do more damage.
-- ```COLLAPSIBLE_STOCK``` Reduces weapon volume proportional to the base size of the gun (excluding any mods). Does not include wield time penalty (see NEEDS_UNFOLD).
-- ```CONSUMABLE``` Makes a gunpart have a chance to get damaged depending on ammo fired, and definable fields 'consume_chance' and 'consume_divisor'.
-- ```CROSSBOW``` Counts as a crossbow for the purpose of gunmod compatibility. Default behavior is to match the skill used by that weapon.
-- ```DISABLE_SIGHTS``` Prevents use of the base weapon sights
-- ```FIRE_100``` Uses 100 shots per firing.
-- ```FIRE_50``` Uses 50 shots per firing.
-- ```FIRE_TWOHAND``` Gun can only be fired if player has two free hands.
-- ```IRREMOVABLE``` Makes so that the gunmod cannot be removed.
-- ```MECH_BAT``` This is an exotic battery designed to power military mechs.
-- ```MOUNTED_GUN``` Gun can only be used on terrain / furniture with the "MOUNTABLE" flag, if you're a normal human. If you're an oversized mutant (Inconveniently Large, Large, Freakishly Huge, Huge), you can fire it regularly in exchange for dispersion and recoil penalties.
-- ```NEVER_JAMS``` Never malfunctions.
-- ```NO_UNLOAD``` Cannot be unloaded.
-- ```PRIMITIVE_RANGED_WEAPON``` Allows using non-gunsmith tools to repair it (but not reinforce).
-- ```PUMP_ACTION``` Gun has a rails on its pump action, allowing to install only mods with PUMP_RAIL_COMPATIBLE flag on underbarrel slot.
-- ```PUMP_RAIL_COMPATIBLE``` Mod can be installed on underbarrel slot of guns with rails on their pump action.
-- ```RELOAD_AND_SHOOT``` Firing automatically reloads and then shoots.
-- ```RELOAD_EJECT``` Ejects shell from gun on reload instead of when fired.
-- ```RELOAD_ONE``` Only reloads one round at a time.
-- ```STR_DRAW``` If the weapon also has a strength requirement, lacking the requirement will penalize damage, range, and dispersion until you're unable to fire if below 50% the listed strength, instead of being a strict limit like it normally would be.
-- ```STR_RELOAD``` Reload speed is affected by strength.
-- ```UNDERWATER_GUN``` Gun is optimized for usage underwater, does perform badly outside of water.
-- ```WATERPROOF_GUN``` Gun does not rust and can be used underwater.
+- `BACKBLAST` Causes a small explosion behind the person firing the weapon. Currently not
+ implemented?
+- `BIPOD` Handling bonus only applies on MOUNTABLE map/vehicle tiles. Does not include wield time
+ penalty (see SLOW_WIELD).
+- `CHARGE` Has to be charged to fire. Higher charges do more damage.
+- `COLLAPSIBLE_STOCK` Reduces weapon volume proportional to the base size of the gun (excluding any
+ mods). Does not include wield time penalty (see NEEDS_UNFOLD).
+- `CONSUMABLE` Makes a gunpart have a chance to get damaged depending on ammo fired, and definable
+ fields 'consume_chance' and 'consume_divisor'.
+- `CROSSBOW` Counts as a crossbow for the purpose of gunmod compatibility. Default behavior is to
+ match the skill used by that weapon.
+- `DISABLE_SIGHTS` Prevents use of the base weapon sights
+- `FIRE_100` Uses 100 shots per firing.
+- `FIRE_50` Uses 50 shots per firing.
+- `FIRE_TWOHAND` Gun can only be fired if player has two free hands.
+- `IRREMOVABLE` Makes so that the gunmod cannot be removed.
+- `MECH_BAT` This is an exotic battery designed to power military mechs.
+- `MOUNTED_GUN` Gun can only be used on terrain / furniture with the "MOUNTABLE" flag, if you're a
+ normal human. If you're an oversized mutant (Inconveniently Large, Large, Freakishly Huge, Huge),
+ you can fire it regularly in exchange for dispersion and recoil penalties.
+- `NEVER_JAMS` Never malfunctions.
+- `NO_UNLOAD` Cannot be unloaded.
+- `PRIMITIVE_RANGED_WEAPON` Allows using non-gunsmith tools to repair it (but not reinforce).
+- `PUMP_ACTION` Gun has a rails on its pump action, allowing to install only mods with
+ PUMP_RAIL_COMPATIBLE flag on underbarrel slot.
+- `PUMP_RAIL_COMPATIBLE` Mod can be installed on underbarrel slot of guns with rails on their pump
+ action.
+- `RELOAD_AND_SHOOT` Firing automatically reloads and then shoots.
+- `RELOAD_EJECT` Ejects shell from gun on reload instead of when fired.
+- `RELOAD_ONE` Only reloads one round at a time.
+- `STR_DRAW` If the weapon also has a strength requirement, lacking the requirement will penalize
+ damage, range, and dispersion until you're unable to fire if below 50% the listed strength,
+ instead of being a strict limit like it normally would be.
+- `STR_RELOAD` Reload speed is affected by strength.
+- `UNDERWATER_GUN` Gun is optimized for usage underwater, does perform badly outside of water.
+- `WATERPROOF_GUN` Gun does not rust and can be used underwater.
### Firing modes
-- ```MELEE``` Melee attack using properties of the gun or auxiliary gunmod
-- ```NPC_AVOID``` NPC's will not attempt to use this mode
-- ```SIMULTANEOUS``` All rounds fired concurrently (not sequentially) with recoil added only once (at the end)
+- `MELEE` Melee attack using properties of the gun or auxiliary gunmod
+- `NPC_AVOID` NPC's will not attempt to use this mode
+- `SIMULTANEOUS` All rounds fired concurrently (not sequentially) with recoil added only once (at
+ the end)
### Faults
#### Flags
-- ```SILENT``` Makes the "faulty " text NOT appear next to item on general UI. Otherwise the fault works the same.
+- `SILENT` Makes the "faulty " text NOT appear next to item on general UI. Otherwise the fault works
+ the same.
#### Parameters
-- ```turns_into``` Causes this fault to apply to the item just mended.
-- ```also_mends``` Causes this fault to be mended (in addition to fault selected) once that fault is mended.
-
+- `turns_into` Causes this fault to apply to the item just mended.
+- `also_mends` Causes this fault to be mended (in addition to fault selected) once that fault is
+ mended.
## Magazines
-- ```MAG_BULKY``` Can be stashed in an appropriate oversize ammo pouch (intended for bulky or awkwardly shaped magazines)
-- ```MAG_COMPACT``` Can be stashed in an appropriate ammo pouch (intended for compact magazines)
-- ```MAG_DESTROY``` Magazine is destroyed when the last round is consumed (intended for ammo belts). Has precedence over MAG_EJECT.
-- ```MAG_EJECT``` Magazine is ejected from the gun/tool when the last round is consumed
-- ```SPEEDLOADER``` Acts like a magazine, except it transfers rounds to the target gun instead of being inserted into it.
-
+- `MAG_BULKY` Can be stashed in an appropriate oversize ammo pouch (intended for bulky or awkwardly
+ shaped magazines)
+- `MAG_COMPACT` Can be stashed in an appropriate ammo pouch (intended for compact magazines)
+- `MAG_DESTROY` Magazine is destroyed when the last round is consumed (intended for ammo belts). Has
+ precedence over MAG_EJECT.
+- `MAG_EJECT` Magazine is ejected from the gun/tool when the last round is consumed
+- `SPEEDLOADER` Acts like a magazine, except it transfers rounds to the target gun instead of being
+ inserted into it.
## MAP SPECIALS
-- ```mx_bandits_block``` ... Road block made by bandits from tree logs.
-- ```mx_burned_ground``` ... Fire has ravaged this place.
-- ```mx_point_burned_ground``` ... Fire has ravaged this place. (partial application)
-- ```mx_casings``` ... Several types of spent casings (solitary, groups, entire overmap tile)
-- ```mx_clay_deposit``` ... A small surface clay deposit.
-- ```mx_clearcut``` ... All trees become stumps.
-- ```mx_collegekids``` ... Corpses and items.
-- ```mx_corpses``` ... Up to 5 corpses with everyday loot.
-- ```mx_crater``` ... Crater with rubble (and radioactivity).
-- ```mx_drugdeal``` ... Corpses and some drugs.
-- ```mx_dead_vegetation``` ... Kills all plants. (aftermath of acid rain etc.)
-- ```mx_point_dead_vegetation``` ... Kills all plants. (aftermath of acid rain etc.) (partial application)
-- ```mx_grove``` ... All trees and shrubs become a single species of tree.
-- ```mx_grave``` ... A grave in the open field, with a corpse and some everyday loot.
-- ```mx_helicopter``` ... Metal wreckage and some items.
-- ```mx_jabberwock``` ... A *chance* of a jabberwock.
-- ```mx_looters``` ... Up to 5 bandits spawn in the building.
-- ```mx_marloss_pilgrimage``` A sect of people worshiping fungaloids.
-- ```mx_mayhem``` ... Several types of road mayhem (firefights, crashed cars etc).
-- ```mx_military``` ... Corpses and some military items.
-- ```mx_minefield``` ... A military roadblock at the entry of the bridges with landmines scattered in the front of it.
-- ```mx_null``` ... No special at all.
-- ```mx_pond``` ... A small pond.
-- ```mx_portal_in``` ... Another portal to neither space.
-- ```mx_portal``` ... Portal to neither space, with several types of surrounding environment.
-- ```mx_roadblock``` ... Roadblock furniture with turrets and some cars.
-- ```mx_roadworks``` ... Partially closed damaged road with chance of work equipment and utility vehicles.
-- ```mx_science``` ... Corpses and some scientist items.
-- ```mx_shia``` ... A *chance* of Shia, if Crazy Catalcysm is enabled.
-- ```mx_shrubbery``` ... All trees and shrubs become a single species of shrub.
-- ```mx_spider``` ... A big spider web, complete with spiders and eggs.
-- ```mx_supplydrop``` ... Crates with some military items in it.
-
+- `mx_bandits_block` ... Road block made by bandits from tree logs.
+- `mx_burned_ground` ... Fire has ravaged this place.
+- `mx_point_burned_ground` ... Fire has ravaged this place. (partial application)
+- `mx_casings` ... Several types of spent casings (solitary, groups, entire overmap tile)
+- `mx_clay_deposit` ... A small surface clay deposit.
+- `mx_clearcut` ... All trees become stumps.
+- `mx_collegekids` ... Corpses and items.
+- `mx_corpses` ... Up to 5 corpses with everyday loot.
+- `mx_crater` ... Crater with rubble (and radioactivity).
+- `mx_drugdeal` ... Corpses and some drugs.
+- `mx_dead_vegetation` ... Kills all plants. (aftermath of acid rain etc.)
+- `mx_point_dead_vegetation` ... Kills all plants. (aftermath of acid rain etc.) (partial
+ application)
+- `mx_grove` ... All trees and shrubs become a single species of tree.
+- `mx_grave` ... A grave in the open field, with a corpse and some everyday loot.
+- `mx_helicopter` ... Metal wreckage and some items.
+- `mx_jabberwock` ... A _chance_ of a jabberwock.
+- `mx_looters` ... Up to 5 bandits spawn in the building.
+- `mx_marloss_pilgrimage` A sect of people worshiping fungaloids.
+- `mx_mayhem` ... Several types of road mayhem (firefights, crashed cars etc).
+- `mx_military` ... Corpses and some military items.
+- `mx_minefield` ... A military roadblock at the entry of the bridges with landmines scattered in
+ the front of it.
+- `mx_null` ... No special at all.
+- `mx_pond` ... A small pond.
+- `mx_portal_in` ... Another portal to neither space.
+- `mx_portal` ... Portal to neither space, with several types of surrounding environment.
+- `mx_roadblock` ... Roadblock furniture with turrets and some cars.
+- `mx_roadworks` ... Partially closed damaged road with chance of work equipment and utility
+ vehicles.
+- `mx_science` ... Corpses and some scientist items.
+- `mx_shia` ... A _chance_ of Shia, if Crazy Catalcysm is enabled.
+- `mx_shrubbery` ... All trees and shrubs become a single species of shrub.
+- `mx_spider` ... A big spider web, complete with spiders and eggs.
+- `mx_supplydrop` ... Crates with some military items in it.
## Material Phases
-- ```GAS```
-- ```LIQUID```
-- ```NULL```
-- ```PLASMA```
-- ```SOLID```
-
+- `GAS`
+- `LIQUID`
+- `NULL`
+- `PLASMA`
+- `SOLID`
## Melee
### Flags
-- ```ALWAYS_TWOHAND``` Item is always wielded with two hands. Without this, the items volume and weight are used to calculate this.
-- ```DIAMOND``` Diamond coating adds 30% bonus to cutting and piercing damage
-- ```MESSY``` Creates more mess when pulping
-- ```NO_CVD``` Item can never be used with a CVD machine
-- ```NO_RELOAD``` Item can never be reloaded (even if has a valid ammo type).
-- ```NO_UNWIELD``` Cannot unwield this item.
-- ```POLEARM``` Item is clumsy up close and does 70% of normal damage against adjacent targets. Should be paired with REACH_ATTACK. Simple reach piercing weapons like spears should not get this flag.
-- ```REACH_ATTACK``` Allows to perform reach attack.
-- ```SHEATH_KNIFE``` Item can be sheathed in a knife sheath, it applicable to small/medium knives (with volume not bigger than 2)
-- ```SHEATH_SWORD``` Item can be sheathed in a sword scabbard
-- ```SPEAR``` When making reach attacks intervening THIN_OBSTACLE terrain is not an obstacle. Should be paired with REACH_ATTACK.
-- ```UNARMED_WEAPON``` Wielding this item still counts as unarmed combat.
-- ```WHIP``` Has a chance of disarming the opponent.
-
+- `ALWAYS_TWOHAND` Item is always wielded with two hands. Without this, the items volume and weight
+ are used to calculate this.
+- `DIAMOND` Diamond coating adds 30% bonus to cutting and piercing damage
+- `MESSY` Creates more mess when pulping
+- `NO_CVD` Item can never be used with a CVD machine
+- `NO_RELOAD` Item can never be reloaded (even if has a valid ammo type).
+- `NO_UNWIELD` Cannot unwield this item.
+- `POLEARM` Item is clumsy up close and does 70% of normal damage against adjacent targets. Should
+ be paired with REACH_ATTACK. Simple reach piercing weapons like spears should not get this flag.
+- `REACH_ATTACK` Allows to perform reach attack.
+- `SHEATH_KNIFE` Item can be sheathed in a knife sheath, it applicable to small/medium knives (with
+ volume not bigger than 2)
+- `SHEATH_SWORD` Item can be sheathed in a sword scabbard
+- `SPEAR` When making reach attacks intervening THIN_OBSTACLE terrain is not an obstacle. Should be
+ paired with REACH_ATTACK.
+- `UNARMED_WEAPON` Wielding this item still counts as unarmed combat.
+- `WHIP` Has a chance of disarming the opponent.
## Monster Groups
@@ -831,22 +952,23 @@ The condition flags limit when monsters can spawn.
### Seasons
-Multiple season conditions will be combined together so that any of those conditions become valid time of year spawn times.
+Multiple season conditions will be combined together so that any of those conditions become valid
+time of year spawn times.
-- ```AUTUMN```
-- ```SPRING```
-- ```SUMMER```
-- ```WINTER```
+- `AUTUMN`
+- `SPRING`
+- `SUMMER`
+- `WINTER`
### Time of day
-Multiple time of day conditions will be combined together so that any of those conditions become valid time of day spawn times.
-
-- ```DAWN```
-- ```DAY```
-- ```DUSK```
-- ```NIGHT```
+Multiple time of day conditions will be combined together so that any of those conditions become
+valid time of day spawn times.
+- `DAWN`
+- `DAY`
+- `DUSK`
+- `NIGHT`
## Monsters
@@ -854,406 +976,430 @@ Flags used to describe monsters and define their properties and abilities.
### Anger, Fear and Placation Triggers
-- ```FIRE``` There's a fire nearby.
-- ```FRIEND_ATTACKED``` A monster of the same type was attacked.
-- ```FRIEND_DIED``` A monster of the same type died.
-- ```HURT``` The monster is hurt.
-- ```MEAT``` Meat or a corpse is nearby.
-- ```NULL``` Source use only?
-- ```PLAYER_CLOSE``` The player gets within a few tiles distance.
-- ```PLAYER_WEAK``` The player is hurt.
-- ```SOUND``` Heard a sound.
-- ```STALK``` Increases when following the player.
+- `FIRE` There's a fire nearby.
+- `FRIEND_ATTACKED` A monster of the same type was attacked.
+- `FRIEND_DIED` A monster of the same type died.
+- `HURT` The monster is hurt.
+- `MEAT` Meat or a corpse is nearby.
+- `NULL` Source use only?
+- `PLAYER_CLOSE` The player gets within a few tiles distance.
+- `PLAYER_WEAK` The player is hurt.
+- `SOUND` Heard a sound.
+- `STALK` Increases when following the player.
### Categories
-- ```CLASSIC``` Only monsters we expect in a classic zombie movie.
-- ```NULL``` No category.
-- ```WILDLIFE``` Natural animals.
+- `CLASSIC` Only monsters we expect in a classic zombie movie.
+- `NULL` No category.
+- `WILDLIFE` Natural animals.
### Death Functions
Multiple death functions can be used. Not all combinations make sense.
-- ```ACID``` Acid instead of a body. not the same as the ACID_BLOOD flag. In most cases you want both.
-- ```AMIGARA``` Removes hypnosis if the last one.
-- ```BLOBSPLIT``` Creates more blobs.
-- ```BOOMER``` Explodes in vomit.
-- ```BROKEN``` Spawns a broken robot item, its id calculated like this: the prefix "mon_" is removed from the monster id, than the prefix "broken_" is added. Example: mon_eyebot -> broken_eyebot
-- ```DISAPPEAR``` Hallucination disappears.
-- ```DISINTEGRATE``` Falls apart.
-- ```EXPLODE``` Damaging explosion.
-- ```FIREBALL``` 10 percent chance to explode in a fireball.
-- ```FLAME_EXPLOSION``` guaranteed to explode and starts fires.
-- ```FUNGUS``` Explodes in spores.
-- ```GAMEOVER``` Game over man! Game over! Defense mode.
-- ```GUILT``` Moral penalty. There is also a flag with a similar effect.
-- ```KILL_BREATHERS``` All breathers die.
-- ```KILL_VINES``` Kill all nearby vines.
-- ```MELT``` Normal death, but melts.
-- ```NORMAL``` Drop a body, leave gibs.
-- ```RATKING``` Cure verminitis.
-- ```SMOKEBURST``` Explode like a huge smoke bomb.
-- ```THING``` Turn into a full thing.
-- ```TRIFFID_HEART``` Destroys all roots.
-- ```VINE_CUT``` Kill adjacent vine if it's cut.
-- ```WORM``` Spawns 2 half-worms
+- `ACID` Acid instead of a body. not the same as the ACID_BLOOD flag. In most cases you want both.
+- `AMIGARA` Removes hypnosis if the last one.
+- `BLOBSPLIT` Creates more blobs.
+- `BOOMER` Explodes in vomit.
+- `BROKEN` Spawns a broken robot item, its id calculated like this: the prefix "mon_" is removed
+ from the monster id, than the prefix "broken_" is added. Example: mon_eyebot -> broken_eyebot
+- `DISAPPEAR` Hallucination disappears.
+- `DISINTEGRATE` Falls apart.
+- `EXPLODE` Damaging explosion.
+- `FIREBALL` 10 percent chance to explode in a fireball.
+- `FLAME_EXPLOSION` guaranteed to explode and starts fires.
+- `FUNGUS` Explodes in spores.
+- `GAMEOVER` Game over man! Game over! Defense mode.
+- `GUILT` Moral penalty. There is also a flag with a similar effect.
+- `KILL_BREATHERS` All breathers die.
+- `KILL_VINES` Kill all nearby vines.
+- `MELT` Normal death, but melts.
+- `NORMAL` Drop a body, leave gibs.
+- `RATKING` Cure verminitis.
+- `SMOKEBURST` Explode like a huge smoke bomb.
+- `THING` Turn into a full thing.
+- `TRIFFID_HEART` Destroys all roots.
+- `VINE_CUT` Kill adjacent vine if it's cut.
+- `WORM` Spawns 2 half-worms
### Flags
-- ```ABSORBS_SPLITS``` Consumes objects it moves over, and if it absorbs enough it will split into a copy.
-- ```ABSORBS``` Consumes objects it moves over. (Modders use this).
-- ```ACIDPROOF``` Immune to acid.
-- ```ACIDTRAIL``` Leaves a trail of acid.
-- ```ACID_BLOOD``` Makes monster bleed acid. Fun stuff! Does not automatically dissolve in a pool of acid on death.
-- ```ANIMAL``` Is an _animal_ for purposes of the `Animal Empathy` trait.
-- ```AQUATIC``` Confined to water.
-- ```ARTHROPOD_BLOOD``` Forces monster to bleed hemolymph.
-- ```ATTACKMON``` Attacks other monsters.
-- ```BADVENOM``` Attack may **severely** poison the player.
-- ```BASHES``` Bashes down doors.
-- ```BILE_BLOOD``` Makes monster bleed bile.
-- ```BIRDFOOD``` Becomes friendly / tamed with bird food.
-- ```BLEED``` Causes the player to bleed.
-- ```BONES``` May produce bones and sinews when butchered.
-- ```BORES``` Tunnels through just about anything (15x bash multiplier: dark wyrms' bash skill 12->180)
-- ```CAN_DIG``` Can dig _and_ walk.
-- ```CAN_OPEN_DOORS``` Can open doors on its path.
-- ```CANPLAY``` This creature can be played with if it's a pet.
-- ```CATFOOD``` Becomes friendly / tamed with cat food.
-- ```CATTLEFODDER``` Becomes friendly / tamed with cattle fodder.
-- ```CBM_CIV``` May produce a common CBM a power CBM when butchered.
-- ```CBM_OP``` May produce a CBM or two from 'bionics_op' item group when butchered.
-- ```CBM_POWER``` May produce a power CBM when butchered, independent of CBM.
-- ```CBM_SCI``` May produce a CBM from 'bionics_sci' item group when butchered.
-- ```CBM_SUBS``` May produce a CBM or two from bionics_subs and a power CBM when butchered.
-- ```CBM_TECH``` May produce a CBM or two from 'bionics_tech' item group and a power CBM when butchered.
-- ```CHITIN``` May produce chitin when butchered.
-- ```CLIMBS``` Can climb.
-- ```COLDROOF``` Immune to cold damage.
-- ```CURRENT``` this water is flowing.
-- ```DESTROYS``` Bashes down walls and more. (2.5x bash multiplier, where base is the critter's max melee bashing)
-- ```DIGS``` Digs through the ground.
-- ```DOGFOOD``` Becomes friendly / tamed with dog food.
-- ```DRIPS_GASOLINE``` Occasionally drips gasoline on move.
-- ```DRIPS_NAPALM``` Occasionally drips napalm on move.
-- ```ELECTRIC``` Shocks unarmed attackers.
-- ```ELECTRONIC``` e.g. A Robot; affected by emp blasts and other stuff.
-- ```FAT``` May produce fat when butchered.
-- ```FEATHER``` May produce feathers when butchered.
-- ```FILTHY``` Any clothing it drops will be filthy.
-- ```FIREPROOF``` Immune to fire.
-- ```FIREY``` Burns stuff and is immune to fire.
-- ```FISHABLE``` It is fishable.
-- ```FLAMMABLE``` Monster catches fire, burns, and spreads fire to nearby objects.
-- ```FLIES``` Can fly (over water, etc.)
-- ```FUR``` May produce fur when butchered.
-- ```GOODHEARING``` Pursues sounds more than most monsters.
-- ```GRABS``` Its attacks may grab you!
-- ```GROUP_BASH``` Gets help from monsters around it when bashing.
-- ```GROUP_MORALE``` More courageous when near friends.
-- ```GUILT``` You feel guilty for killing it.
-- ```HARDTOSHOOT``` It's one size smaller for ranged attacks, no less then MS_TINY
-- ```HEARS``` It can hear you.
-- ```HIT_AND_RUN``` Flee for several turns after a melee attack.
-- ```HUMAN``` It's a live human, as long as it's alive.
-- ```CONSOLE_DESPAWN``` Despawns when a nearby console is properly hacked.
-- ```IMMOBILE``` Doesn't move (e.g. turrets)
-- ```ID_CARD_DESPAWN``` Despawns when a science ID card is used on a nearby console
-- ```INTERIOR_AMMO``` Monster contains ammo inside itself, no need to load on launch. Prevents ammo from being dropped on disable.
-- ```KEENNOSE``` Keen sense of smell.
-- ```LARVA``` Creature is a larva. Currently used for gib and blood handling.
-- ```LEATHER``` May produce leather when butchered.
-- ```LOUDMOVES``` Mkes move noises as if ~2 sizes louder, even if flying.
-- ```MECH_RECON_VISION``` This mech grants you night-vision and enhanced overmap sight radius when piloted.
-- ```MECH_DEFENSIVE``` This mech can protect you thoroughly when piloted.
-- ```MILITARY_MECH``` Is a military-grade mech.
-- ```MILKABLE``` Produces milk when milked.
-- ```NIGHT_INVISIBILITY``` Monster becomes invisible if it's more than one tile away and the lighting on its tile is LL_LOW or less. Visibility is not affected by night vision.
-- ```NOGIB``` Does not leave gibs / meat chunks when killed with huge damage.
-- ```NOHEAD``` Headshots not allowed!
-- ```NO_BREATHE``` Creature can't drown and is unharmed by gas, smoke or poison.
-- ```NO_BREED``` Creature doesn't reproduce even though it has reproduction data - useful when using copy-from to make child versions of adult creatures
-- ```NO_FUNG_DMG``` Creature is immune to fungal spores and can't be fungalized.
-- ```PAY_BOT``` Creature can be turned into a pet for a limited time in exchange of e-money.
-- ```PET_MOUNTABLE``` Creature can be ridden or attached to an harness.
-- ```PET_HARNESSABLE```Creature can be attached to an harness.
-- ```NULL``` Source use only.
-- ```PACIFIST``` That monster will never do melee attacks.
-- ```PARALYZE``` Attack may paralyze the player with venom.
-- ```PLASTIC``` Absorbs physical damage to a great degree.
-- ```POISON``` Poisonous to eat.
-- ```PUSH_MON``` Can push creatures out of its way.
-- ```QUEEN``` When it dies, local populations start to die off too.
-- ```REVIVES``` Monster corpse will revive after a short period of time.
-- ```RIDEABLE_MECH``` This monster is a mech suit that can be piloted.
-- ```SEES``` It can see you (and will run/follow).
-- ```SHEARABLE``` This monster can be sheared for wool.
-- ```SLUDGEPROOF``` Ignores the effect of sludge trails.
-- ```SLUDGETRAIL``` Causes the monster to leave a sludge trap trail when moving.
-- ```SMELLS``` It can smell you.
-- ```STUMBLES``` Stumbles in its movement.
-- ```SUNDEATH``` Dies in full sunlight.
-- ```SWARMS``` Groups together and form loose packs.
-- ```SWIMS``` Treats water as 50 movement point terrain.
-- ```VENOM``` Attack may poison the player.
-- ```VERMIN``` Obsolete flag for inconsequential monsters, now prevents loading.
-- ```WARM``` Warm blooded.
-- ```WEBWALK``` Doesn't destroy webs.
-- ```WOOL``` May produce wool when butchered.
+- `ABSORBS_SPLITS` Consumes objects it moves over, and if it absorbs enough it will split into a
+ copy.
+- `ABSORBS` Consumes objects it moves over. (Modders use this).
+- `ACIDPROOF` Immune to acid.
+- `ACIDTRAIL` Leaves a trail of acid.
+- `ACID_BLOOD` Makes monster bleed acid. Fun stuff! Does not automatically dissolve in a pool of
+ acid on death.
+- `ANIMAL` Is an _animal_ for purposes of the `Animal Empathy` trait.
+- `AQUATIC` Confined to water.
+- `ARTHROPOD_BLOOD` Forces monster to bleed hemolymph.
+- `ATTACKMON` Attacks other monsters.
+- `BADVENOM` Attack may **severely** poison the player.
+- `BASHES` Bashes down doors.
+- `BILE_BLOOD` Makes monster bleed bile.
+- `BIRDFOOD` Becomes friendly / tamed with bird food.
+- `BLEED` Causes the player to bleed.
+- `BONES` May produce bones and sinews when butchered.
+- `BORES` Tunnels through just about anything (15x bash multiplier: dark wyrms' bash skill 12->180)
+- `CAN_DIG` Can dig _and_ walk.
+- `CAN_OPEN_DOORS` Can open doors on its path.
+- `CANPLAY` This creature can be played with if it's a pet.
+- `CATFOOD` Becomes friendly / tamed with cat food.
+- `CATTLEFODDER` Becomes friendly / tamed with cattle fodder.
+- `CBM_CIV` May produce a common CBM a power CBM when butchered.
+- `CBM_OP` May produce a CBM or two from 'bionics_op' item group when butchered.
+- `CBM_POWER` May produce a power CBM when butchered, independent of CBM.
+- `CBM_SCI` May produce a CBM from 'bionics_sci' item group when butchered.
+- `CBM_SUBS` May produce a CBM or two from bionics_subs and a power CBM when butchered.
+- `CBM_TECH` May produce a CBM or two from 'bionics_tech' item group and a power CBM when butchered.
+- `CHITIN` May produce chitin when butchered.
+- `CLIMBS` Can climb.
+- `COLDROOF` Immune to cold damage.
+- `CURRENT` this water is flowing.
+- `DESTROYS` Bashes down walls and more. (2.5x bash multiplier, where base is the critter's max
+ melee bashing)
+- `DIGS` Digs through the ground.
+- `DOGFOOD` Becomes friendly / tamed with dog food.
+- `DRIPS_GASOLINE` Occasionally drips gasoline on move.
+- `DRIPS_NAPALM` Occasionally drips napalm on move.
+- `ELECTRIC` Shocks unarmed attackers.
+- `ELECTRONIC` e.g. A Robot; affected by emp blasts and other stuff.
+- `FAT` May produce fat when butchered.
+- `FEATHER` May produce feathers when butchered.
+- `FILTHY` Any clothing it drops will be filthy.
+- `FIREPROOF` Immune to fire.
+- `FIREY` Burns stuff and is immune to fire.
+- `FISHABLE` It is fishable.
+- `FLAMMABLE` Monster catches fire, burns, and spreads fire to nearby objects.
+- `FLIES` Can fly (over water, etc.)
+- `FUR` May produce fur when butchered.
+- `GOODHEARING` Pursues sounds more than most monsters.
+- `GRABS` Its attacks may grab you!
+- `GROUP_BASH` Gets help from monsters around it when bashing.
+- `GROUP_MORALE` More courageous when near friends.
+- `GUILT` You feel guilty for killing it.
+- `HARDTOSHOOT` It's one size smaller for ranged attacks, no less then MS_TINY
+- `HEARS` It can hear you.
+- `HIT_AND_RUN` Flee for several turns after a melee attack.
+- `HUMAN` It's a live human, as long as it's alive.
+- `CONSOLE_DESPAWN` Despawns when a nearby console is properly hacked.
+- `IMMOBILE` Doesn't move (e.g. turrets)
+- `ID_CARD_DESPAWN` Despawns when a science ID card is used on a nearby console
+- `INTERIOR_AMMO` Monster contains ammo inside itself, no need to load on launch. Prevents ammo from
+ being dropped on disable.
+- `KEENNOSE` Keen sense of smell.
+- `LARVA` Creature is a larva. Currently used for gib and blood handling.
+- `LEATHER` May produce leather when butchered.
+- `LOUDMOVES` Mkes move noises as if ~2 sizes louder, even if flying.
+- `MECH_RECON_VISION` This mech grants you night-vision and enhanced overmap sight radius when
+ piloted.
+- `MECH_DEFENSIVE` This mech can protect you thoroughly when piloted.
+- `MILITARY_MECH` Is a military-grade mech.
+- `MILKABLE` Produces milk when milked.
+- `NIGHT_INVISIBILITY` Monster becomes invisible if it's more than one tile away and the lighting on
+ its tile is LL_LOW or less. Visibility is not affected by night vision.
+- `NOGIB` Does not leave gibs / meat chunks when killed with huge damage.
+- `NOHEAD` Headshots not allowed!
+- `NO_BREATHE` Creature can't drown and is unharmed by gas, smoke or poison.
+- `NO_BREED` Creature doesn't reproduce even though it has reproduction data - useful when using
+ copy-from to make child versions of adult creatures
+- `NO_FUNG_DMG` Creature is immune to fungal spores and can't be fungalized.
+- `PAY_BOT` Creature can be turned into a pet for a limited time in exchange of e-money.
+- `PET_MOUNTABLE` Creature can be ridden or attached to an harness.
+- `PET_HARNESSABLE`Creature can be attached to an harness.
+- `NULL` Source use only.
+- `PACIFIST` That monster will never do melee attacks.
+- `PARALYZE` Attack may paralyze the player with venom.
+- `PLASTIC` Absorbs physical damage to a great degree.
+- `POISON` Poisonous to eat.
+- `PUSH_MON` Can push creatures out of its way.
+- `QUEEN` When it dies, local populations start to die off too.
+- `REVIVES` Monster corpse will revive after a short period of time.
+- `RIDEABLE_MECH` This monster is a mech suit that can be piloted.
+- `SEES` It can see you (and will run/follow).
+- `SHEARABLE` This monster can be sheared for wool.
+- `SLUDGEPROOF` Ignores the effect of sludge trails.
+- `SLUDGETRAIL` Causes the monster to leave a sludge trap trail when moving.
+- `SMELLS` It can smell you.
+- `STUMBLES` Stumbles in its movement.
+- `SUNDEATH` Dies in full sunlight.
+- `SWARMS` Groups together and form loose packs.
+- `SWIMS` Treats water as 50 movement point terrain.
+- `VENOM` Attack may poison the player.
+- `VERMIN` Obsolete flag for inconsequential monsters, now prevents loading.
+- `WARM` Warm blooded.
+- `WEBWALK` Doesn't destroy webs.
+- `WOOL` May produce wool when butchered.
### Monster Defense and Attacks
-- ```ACIDSPLASH``` Splash acid on the attacker
-- ```NONE``` No special attack-back
-- ```ZAPBACK``` Shock attacker on hit
+- `ACIDSPLASH` Splash acid on the attacker
+- `NONE` No special attack-back
+- `ZAPBACK` Shock attacker on hit
### Sizes
-- ```HUGE``` Tank
-- ```LARGE``` Cow
-- ```MEDIUM``` Human
-- ```SMALL``` Dog
-- ```TINY``` Squirrel
+- `HUGE` Tank
+- `LARGE` Cow
+- `MEDIUM` Human
+- `SMALL` Dog
+- `TINY` Squirrel
### Special attacks
-Some special attacks are also valid use actions for tools and weapons.
-See `monsters.json` for examples on how to use these attacks.
-Also see `monster_attacks.json` for more special attacks, for example, impale and scratch.
-
-- ```ACID_ACCURATE``` Shoots acid that is accurate at long ranges, but less so up close.
-- ```ACID_BARF``` Barfs corroding, blinding acid.
-- ```ACID``` Spit acid.
-- ```ANTQUEEN``` Hatches/grows: `egg > ant > soldier`.
-- ```BIO_OP_BIOJUTSU``` Attack with a random special martial art maneuver.
-- ```BIO_OP_TAKEDOWN``` Attack with special martial art takedown maneuver.
-- ```BIO_OP_DISARM``` Attack with a special martial art disarm maneuver.
-- ```BIO_OP_IMPALE``` Attack with a strong martial art maneuver.
-- ```BITE``` Bite attack that can cause deep infected wounds.
-- ```BMG_TUR``` Barrett .50BMG rifle fires.
-- ```BOOMER_GLOW``` Spit glowing bile.
-- ```BOOMER``` Spit bile.
-- ```BRANDISH``` Brandish a knife at the player.
-- ```BREATHE``` Spawns a `breather`
-- ```CALLBLOBS``` Calls 2/3 of nearby blobs to defend this monster, and sends 1/3 of nearby blobs after the player.
-- ```CHICKENBOT``` LEGACY - Robot can attack with tazer, M4, or MGL depending on distance.
-- ```COPBOT``` Cop-bot alerts and then tazes the player.
-- ```DANCE``` Monster dances.
-- ```DARKMAN``` Can cause darkness and wraiths to spawn.
-- ```DERMATIK_GROWTH``` Dermatik larva grows into an adult.
-- ```DERMATIK``` Attempts to lay dermatik eggs in the player.
-- ```DISAPPEAR``` Hallucination disappears.
-- ```DOGTHING``` The dog _thing_ spawns into a tentacle dog.
-- ```FEAR_PARALYZE``` Paralyze the player with fear.
-- ```FLAMETHROWER``` Shoots a stream of fire.
-- ```FLESH_GOLEM``` Attack the player with claw, and inflict disease `downed` if the attack connects.
-- ```FORMBLOB``` Spawns blobs?
-- ```FRAG_TUR``` MGL fires frag rounds.
-- ```FUNGUS_BIG_BLOSSOM``` Spreads fire suppressing fungal haze.
-- ```FUNGUS_BRISTLE``` Perform barbed tendril attack that can cause fungal infections.
-- ```FUNGUS_CORPORATE``` Used solely by Crazy Cataclysm. This will cause runtime errors if used without out, and spawns SpOreos on top of the creature.
-- ```FUNGUS_FORTIFY``` Grows Fungal hedgerows, and advances player on the mycus threshold path.
-- ```FUNGUS_GROWTH``` Grows a young fungaloid into an adult.
-- ```FUNGUS_HAZE``` Spawns fungal fields.
-- ```FUNGUS_INJECT``` Perform needle attack that can cause fungal infections.
-- ```FUNGUS_SPROUT``` Grows a fungal wall.
-- ```FUNGUS``` Releases fungal spores and attempts to infect the player.
-- ```GENERATOR``` Regenerates health.
-- ```GENE_STING``` Shoot a dart at the player that causes a mutation if it connects.
-- ```GRAB``` GRAB the target, and drag it around.
-- ```GRAB``` Grabs the player, slowing on hit, making movement and dodging impossible and blocking harder.
-- ```GROWPLANTS``` Spawns underbrush, or promotes it to `> young tree > tree`.
-- ```GROW_VINE``` Grows creeper vines.
-- ```HOWL``` "an ear-piercing howl!"
-- ```JACKSON``` Converts zombies into zombie dancers.
-- ```LASER``` Laser turret fires.
-- ```LEAP``` leap away to an unobstructed tile.
-- ```LONGSWIPE``` Does high damage claw attack, which can even hit some distance away.
-- ```LUNGE``` Perform a jumping attack from some distance away, which can down the target.
-- ```MULTI_ROBOT``` Robot can attack with tazer, flamethrower, M4, MGL, or 120mm cannon depending on distance.
-- ```NONE``` No special attack.
-- ```PARA_STING``` Shoot a paralyzing dart at the player.
-- ```PARROT``` Parrots the speech defined in `speech.json`, picks one of the lines randomly. "speaker" points to a monster id.
-- ```PARROT_AT_DANGER``` Performs the same function as PARROT, but only if the creature sees an angry monster from a hostile faction.
-- ```PAID_BOT``` For creature with PAY_BOT flag, removes the ally status when the pet effect runs out.
-- ```PHOTOGRAPH``` Photograph the player. Causes a robot attack?
-- ```PLANT``` Fungal spores take seed and grow into a fungaloid.
-- ```PULL_METAL_WEAPON``` Pull weapon that's made of iron or steel from the player's hand.
-- ```RANGED_PULL``` Pull targets towards attacker.
-- ```RATKING``` Inflicts disease `rat`
-- ```RATTLE``` "a sibilant rattling sound!"
-- ```RESURRECT``` Revives the dead--again.
-- ```RIFLE_TUR``` Rifle turret fires.
-- ```RIOTBOT``` Sprays teargas or relaxation gas, can handcuff players, and can use a blinding flash.
-- ```SCIENCE``` Various science/technology related attacks (e.g. manhacks, radioactive beams, etc.)
-- ```SEARCHLIGHT``` Tracks targets with a searchlight.
-- ```SHOCKING_REVEAL``` Shoots bolts of lightning, and reveals a SHOCKING FACT! Very fourth-wall breaking. Used solely by Crazy Cataclysm.
-- ```SHOCKSTORM``` Shoots bolts of lightning.
-- ```SHRIEK_ALERT``` "a very terrible shriek!"
-- ```SHRIEK_STUN``` "a stunning shriek!", causes a small bash, can cause a stun.
-- ```SHRIEK``` "a terrible shriek!"
-- ```SLIMESPRING``` Can provide a morale boost to the player, and cure bite and bleed effects.
-- ```SMASH``` Smashes the target for massive damage, sending it flying for a number of tiles equal to `("melee_dice" * "melee_dice_sides" * 3) / 10`.
-- ```SMG``` SMG turret fires.
-- ```SPIT_SAP``` Spit sap.
-- ```STARE``` Stare at the player and inflict teleglow.
-- ```STRETCH_ATTACK``` Long ranged piercing attack.
-- ```STRETCH_BITE``` Long ranged bite attack.
-- ```SUICIDE``` Dies after attacking.
-- ```TAZER``` Shock the player.
-- ```TENTACLE``` Lashes a tentacle at the player.
-- ```TRIFFID_GROWTH``` Young triffid grows into an adult.
-- ```TRIFFID_HEARTBEAT``` Grows and crumbles root walls around the player, and spawns more monsters.
-- ```UPGRADE``` Upgrades a regular zombie into a special zombie.
-- ```VINE``` Attacks with vine.
-- ```VORTEX``` Forms a vortex/tornado that causes damage and throws creatures around.
-
+Some special attacks are also valid use actions for tools and weapons. See `monsters.json` for
+examples on how to use these attacks. Also see `monster_attacks.json` for more special attacks, for
+example, impale and scratch.
+
+- `ACID_ACCURATE` Shoots acid that is accurate at long ranges, but less so up close.
+- `ACID_BARF` Barfs corroding, blinding acid.
+- `ACID` Spit acid.
+- `ANTQUEEN` Hatches/grows: `egg > ant > soldier`.
+- `BIO_OP_BIOJUTSU` Attack with a random special martial art maneuver.
+- `BIO_OP_TAKEDOWN` Attack with special martial art takedown maneuver.
+- `BIO_OP_DISARM` Attack with a special martial art disarm maneuver.
+- `BIO_OP_IMPALE` Attack with a strong martial art maneuver.
+- `BITE` Bite attack that can cause deep infected wounds.
+- `BMG_TUR` Barrett .50BMG rifle fires.
+- `BOOMER_GLOW` Spit glowing bile.
+- `BOOMER` Spit bile.
+- `BRANDISH` Brandish a knife at the player.
+- `BREATHE` Spawns a `breather`
+- `CALLBLOBS` Calls 2/3 of nearby blobs to defend this monster, and sends 1/3 of nearby blobs after
+ the player.
+- `CHICKENBOT` LEGACY - Robot can attack with tazer, M4, or MGL depending on distance.
+- `COPBOT` Cop-bot alerts and then tazes the player.
+- `DANCE` Monster dances.
+- `DARKMAN` Can cause darkness and wraiths to spawn.
+- `DERMATIK_GROWTH` Dermatik larva grows into an adult.
+- `DERMATIK` Attempts to lay dermatik eggs in the player.
+- `DISAPPEAR` Hallucination disappears.
+- `DOGTHING` The dog _thing_ spawns into a tentacle dog.
+- `FEAR_PARALYZE` Paralyze the player with fear.
+- `FLAMETHROWER` Shoots a stream of fire.
+- `FLESH_GOLEM` Attack the player with claw, and inflict disease `downed` if the attack connects.
+- `FORMBLOB` Spawns blobs?
+- `FRAG_TUR` MGL fires frag rounds.
+- `FUNGUS_BIG_BLOSSOM` Spreads fire suppressing fungal haze.
+- `FUNGUS_BRISTLE` Perform barbed tendril attack that can cause fungal infections.
+- `FUNGUS_CORPORATE` Used solely by Crazy Cataclysm. This will cause runtime errors if used without
+ out, and spawns SpOreos on top of the creature.
+- `FUNGUS_FORTIFY` Grows Fungal hedgerows, and advances player on the mycus threshold path.
+- `FUNGUS_GROWTH` Grows a young fungaloid into an adult.
+- `FUNGUS_HAZE` Spawns fungal fields.
+- `FUNGUS_INJECT` Perform needle attack that can cause fungal infections.
+- `FUNGUS_SPROUT` Grows a fungal wall.
+- `FUNGUS` Releases fungal spores and attempts to infect the player.
+- `GENERATOR` Regenerates health.
+- `GENE_STING` Shoot a dart at the player that causes a mutation if it connects.
+- `GRAB` GRAB the target, and drag it around.
+- `GRAB` Grabs the player, slowing on hit, making movement and dodging impossible and blocking
+ harder.
+- `GROWPLANTS` Spawns underbrush, or promotes it to `> young tree > tree`.
+- `GROW_VINE` Grows creeper vines.
+- `HOWL` "an ear-piercing howl!"
+- `JACKSON` Converts zombies into zombie dancers.
+- `LASER` Laser turret fires.
+- `LEAP` leap away to an unobstructed tile.
+- `LONGSWIPE` Does high damage claw attack, which can even hit some distance away.
+- `LUNGE` Perform a jumping attack from some distance away, which can down the target.
+- `MULTI_ROBOT` Robot can attack with tazer, flamethrower, M4, MGL, or 120mm cannon depending on
+ distance.
+- `NONE` No special attack.
+- `PARA_STING` Shoot a paralyzing dart at the player.
+- `PARROT` Parrots the speech defined in `speech.json`, picks one of the lines randomly. "speaker"
+ points to a monster id.
+- `PARROT_AT_DANGER` Performs the same function as PARROT, but only if the creature sees an angry
+ monster from a hostile faction.
+- `PAID_BOT` For creature with PAY_BOT flag, removes the ally status when the pet effect runs out.
+- `PHOTOGRAPH` Photograph the player. Causes a robot attack?
+- `PLANT` Fungal spores take seed and grow into a fungaloid.
+- `PULL_METAL_WEAPON` Pull weapon that's made of iron or steel from the player's hand.
+- `RANGED_PULL` Pull targets towards attacker.
+- `RATKING` Inflicts disease `rat`
+- `RATTLE` "a sibilant rattling sound!"
+- `RESURRECT` Revives the dead--again.
+- `RIFLE_TUR` Rifle turret fires.
+- `RIOTBOT` Sprays teargas or relaxation gas, can handcuff players, and can use a blinding flash.
+- `SCIENCE` Various science/technology related attacks (e.g. manhacks, radioactive beams, etc.)
+- `SEARCHLIGHT` Tracks targets with a searchlight.
+- `SHOCKING_REVEAL` Shoots bolts of lightning, and reveals a SHOCKING FACT! Very fourth-wall
+ breaking. Used solely by Crazy Cataclysm.
+- `SHOCKSTORM` Shoots bolts of lightning.
+- `SHRIEK_ALERT` "a very terrible shriek!"
+- `SHRIEK_STUN` "a stunning shriek!", causes a small bash, can cause a stun.
+- `SHRIEK` "a terrible shriek!"
+- `SLIMESPRING` Can provide a morale boost to the player, and cure bite and bleed effects.
+- `SMASH` Smashes the target for massive damage, sending it flying for a number of tiles equal to
+ `("melee_dice" * "melee_dice_sides" * 3) / 10`.
+- `SMG` SMG turret fires.
+- `SPIT_SAP` Spit sap.
+- `STARE` Stare at the player and inflict teleglow.
+- `STRETCH_ATTACK` Long ranged piercing attack.
+- `STRETCH_BITE` Long ranged bite attack.
+- `SUICIDE` Dies after attacking.
+- `TAZER` Shock the player.
+- `TENTACLE` Lashes a tentacle at the player.
+- `TRIFFID_GROWTH` Young triffid grows into an adult.
+- `TRIFFID_HEARTBEAT` Grows and crumbles root walls around the player, and spawns more monsters.
+- `UPGRADE` Upgrades a regular zombie into a special zombie.
+- `VINE` Attacks with vine.
+- `VORTEX` Forms a vortex/tornado that causes damage and throws creatures around.
## Mutations
#### Flags
-- ```NO_RADIATION``` This mutation grants immunity to radiations.
-- ```NO_THIRST``` Your thirst is not modified by food or drinks.
-- ```UNARMED_BONUS``` You get a bonus to unarmed bash and cut damage equal to unarmed_skill/2 up to 4.
-
+- `NO_RADIATION` This mutation grants immunity to radiations.
+- `NO_THIRST` Your thirst is not modified by food or drinks.
+- `UNARMED_BONUS` You get a bonus to unarmed bash and cut damage equal to unarmed_skill/2 up to 4.
### Categories
These branches are also the valid entries for the categories of `dreams` in `dreams.json`
-- ```MUTCAT_ALPHA``` "You feel...better. Somehow."
-- ```MUTCAT_BEAST``` "Your heart races and you see blood for a moment."
-- ```MUTCAT_BIRD``` "Your body lightens and you long for the sky."
-- ```MUTCAT_CATTLE``` "Your mind and body slow down. You feel peaceful."
-- ```MUTCAT_CEPHALOPOD``` "Your mind is overcome by images of eldritch horrors...and then they pass."
-- ```MUTCAT_CHIMERA``` "You need to roar, bask, bite, and flap. NOW."
-- ```MUTCAT_ELFA``` "Nature is becoming one with you..."
-- ```MUTCAT_FISH``` "You are overcome by an overwhelming longing for the ocean."
-- ```MUTCAT_INSECT``` "You hear buzzing, and feel your body harden."
-- ```MUTCAT_LIZARD``` "For a heartbeat, your body cools down."
-- ```MUTCAT_MEDICAL``` "Your can feel the blood rushing through your veins and a strange, medicated feeling washes over your senses."
-- ```MUTCAT_PLANT``` "You feel much closer to nature."
-- ```MUTCAT_RAPTOR``` "Mmm...sweet bloody flavor...tastes like victory."
-- ```MUTCAT_RAT``` "You feel a momentary nausea."
-- ```MUTCAT_SLIME``` "Your body loses all rigidity for a moment."
-- ```MUTCAT_SPIDER``` "You feel insidious."
-- ```MUTCAT_TROGLOBITE``` "You yearn for a cool, dark place to hide."
-
+- `MUTCAT_ALPHA` "You feel...better. Somehow."
+- `MUTCAT_BEAST` "Your heart races and you see blood for a moment."
+- `MUTCAT_BIRD` "Your body lightens and you long for the sky."
+- `MUTCAT_CATTLE` "Your mind and body slow down. You feel peaceful."
+- `MUTCAT_CEPHALOPOD` "Your mind is overcome by images of eldritch horrors...and then they pass."
+- `MUTCAT_CHIMERA` "You need to roar, bask, bite, and flap. NOW."
+- `MUTCAT_ELFA` "Nature is becoming one with you..."
+- `MUTCAT_FISH` "You are overcome by an overwhelming longing for the ocean."
+- `MUTCAT_INSECT` "You hear buzzing, and feel your body harden."
+- `MUTCAT_LIZARD` "For a heartbeat, your body cools down."
+- `MUTCAT_MEDICAL` "Your can feel the blood rushing through your veins and a strange, medicated
+ feeling washes over your senses."
+- `MUTCAT_PLANT` "You feel much closer to nature."
+- `MUTCAT_RAPTOR` "Mmm...sweet bloody flavor...tastes like victory."
+- `MUTCAT_RAT` "You feel a momentary nausea."
+- `MUTCAT_SLIME` "Your body loses all rigidity for a moment."
+- `MUTCAT_SPIDER` "You feel insidious."
+- `MUTCAT_TROGLOBITE` "You yearn for a cool, dark place to hide."
## Overmap
### Overmap connections
-- ```ORTHOGONAL``` The connection generally prefers straight lines, avoids turning wherever possible.
+- `ORTHOGONAL` The connection generally prefers straight lines, avoids turning wherever possible.
### Overmap specials
#### Flags
-- ```BEE``` Location is related to bees. Used to classify location.
-- ```BLOB``` Location should "blob" outward from the defined location with a chance to be placed in adjacent locations.
-- ```CLASSIC``` Location is allowed when classic zombies are enabled.
-- ```FUNGAL``` Location is related to fungi. Used to classify location.
-- ```TRIFFID``` Location is related to triffids. Used to classify location.
-- ```LAKE``` Location is is placed on a lake and will be ignored for placement if the overmap doesn't contain any lake terrain.
-- ```UNIQUE``` Location is unique and will only occur once per overmap. `occurrences` is overridden to define a percent chance (e.g. `"occurrences" : [75, 100]` is 75%)
+- `BEE` Location is related to bees. Used to classify location.
+- `BLOB` Location should "blob" outward from the defined location with a chance to be placed in
+ adjacent locations.
+- `CLASSIC` Location is allowed when classic zombies are enabled.
+- `FUNGAL` Location is related to fungi. Used to classify location.
+- `TRIFFID` Location is related to triffids. Used to classify location.
+- `LAKE` Location is is placed on a lake and will be ignored for placement if the overmap doesn't
+ contain any lake terrain.
+- `UNIQUE` Location is unique and will only occur once per overmap. `occurrences` is overridden to
+ define a percent chance (e.g. `"occurrences" : [75, 100]` is 75%)
### Overmap terrains
#### Flags
-- ```KNOWN_DOWN``` There's a known way down.
-- ```KNOWN_UP``` There's a known way up.
-- ```LINEAR``` For roads etc, which use ID_straight, ID_curved, ID_tee, ID_four_way.
-- ```NO_ROTATE``` The terrain can't be rotated (ID_north, ID_east, ID_south, and ID_west instances will NOT be generated, just ID).
-- ```RIVER``` It's a river tile.
-- ```SIDEWALK``` Has sidewalks on the sides adjacent to roads.
-- ```LAKE``` Consider this location to be a valid lake terrain for mapgen purposes.
-- ```LAKE_SHORE``` Consider this location to be a valid lake shore terrain for mapgen purposes.
-- ```SOURCE_FUEL``` For NPC AI, this location may contain fuel for looting.
-- ```SOURCE_FOOD``` For NPC AI, this location may contain food for looting.
-- ```SOURCE_FARMING``` For NPC AI, this location may contain useful farming supplies for looting.
-- ```SOURCE_FABRICATION``` For NPC AI, this location may contain fabrication tools and components for looting.
-- ```SOURCE_GUN``` For NPC AI, this location may contain guns for looting.
-- ```SOURCE_AMMO``` For NPC AI, this location may contain ammo for looting.
-- ```SOURCE_BOOKS``` For NPC AI, this location may contain books for looting.
-- ```SOURCE_WEAPON``` For NPC AI, this location may contain weapons for looting.
-- ```SOURCE_FORAGE``` For NPC AI, this location may contain plants to forage.
-- ```SOURCE_COOKING``` For NPC AI, this location may contain useful tools and ingredients to aid in cooking.
-- ```SOURCE_TAILORING``` For NPC AI, this location may contain useful tools for tailoring.
-- ```SOURCE_DRINK``` For NPC AI, this location may contain drink for looting.
-- ```SOURCE_VEHICLES``` For NPC AI, this location may contain vehicles/parts/vehicle tools, to loot.
-- ```SOURCE_ELECTRONICS``` For NPC AI, this location may contain useful electronics to loot.
-- ```SOURCE_CONSTRUCTION``` For NPC AI, this location may contain useful tools/components for construction.
-- ```SOURCE_CHEMISTRY``` For NPC AI, this location may contain useful chemistry tools/components.
-- ```SOURCE_CLOTHING``` For NPC AI, this location may contain useful clothing to loot.
-- ```SOURCE_SAFETY``` For NPC AI, this location may be safe/sheltered and a good place for a base.
-- ```SOURCE_ANIMALS``` For NPC AI, this location may contain useful animals for farming/riding.
-- ```SOURCE_MEDICINE``` For NPC AI, this location may contain useful medicines for looting.
-- ```SOURCE_LUXURY``` For NPC AI, this location may contain valuable/feel-good items to sell/keep.
-- ```SOURCE_PEOPLE``` For NPC AI, this location may have other survivors.
-- ```RISK_HIGH``` For NPC AI, this location has a high risk associated with it - labs/superstores etc.
-- ```RISK_LOW``` For NPC AI, this location is secluded and remote, and appears to be safe.
-- ```GENERIC_LOOT``` This is a place that may contain any of the above, but at a lower frequency - usually a house.
+- `KNOWN_DOWN` There's a known way down.
+- `KNOWN_UP` There's a known way up.
+- `LINEAR` For roads etc, which use ID_straight, ID_curved, ID_tee, ID_four_way.
+- `NO_ROTATE` The terrain can't be rotated (ID_north, ID_east, ID_south, and ID_west instances will
+ NOT be generated, just ID).
+- `RIVER` It's a river tile.
+- `SIDEWALK` Has sidewalks on the sides adjacent to roads.
+- `LAKE` Consider this location to be a valid lake terrain for mapgen purposes.
+- `LAKE_SHORE` Consider this location to be a valid lake shore terrain for mapgen purposes.
+- `SOURCE_FUEL` For NPC AI, this location may contain fuel for looting.
+- `SOURCE_FOOD` For NPC AI, this location may contain food for looting.
+- `SOURCE_FARMING` For NPC AI, this location may contain useful farming supplies for looting.
+- `SOURCE_FABRICATION` For NPC AI, this location may contain fabrication tools and components for
+ looting.
+- `SOURCE_GUN` For NPC AI, this location may contain guns for looting.
+- `SOURCE_AMMO` For NPC AI, this location may contain ammo for looting.
+- `SOURCE_BOOKS` For NPC AI, this location may contain books for looting.
+- `SOURCE_WEAPON` For NPC AI, this location may contain weapons for looting.
+- `SOURCE_FORAGE` For NPC AI, this location may contain plants to forage.
+- `SOURCE_COOKING` For NPC AI, this location may contain useful tools and ingredients to aid in
+ cooking.
+- `SOURCE_TAILORING` For NPC AI, this location may contain useful tools for tailoring.
+- `SOURCE_DRINK` For NPC AI, this location may contain drink for looting.
+- `SOURCE_VEHICLES` For NPC AI, this location may contain vehicles/parts/vehicle tools, to loot.
+- `SOURCE_ELECTRONICS` For NPC AI, this location may contain useful electronics to loot.
+- `SOURCE_CONSTRUCTION` For NPC AI, this location may contain useful tools/components for
+ construction.
+- `SOURCE_CHEMISTRY` For NPC AI, this location may contain useful chemistry tools/components.
+- `SOURCE_CLOTHING` For NPC AI, this location may contain useful clothing to loot.
+- `SOURCE_SAFETY` For NPC AI, this location may be safe/sheltered and a good place for a base.
+- `SOURCE_ANIMALS` For NPC AI, this location may contain useful animals for farming/riding.
+- `SOURCE_MEDICINE` For NPC AI, this location may contain useful medicines for looting.
+- `SOURCE_LUXURY` For NPC AI, this location may contain valuable/feel-good items to sell/keep.
+- `SOURCE_PEOPLE` For NPC AI, this location may have other survivors.
+- `RISK_HIGH` For NPC AI, this location has a high risk associated with it - labs/superstores etc.
+- `RISK_LOW` For NPC AI, this location is secluded and remote, and appears to be safe.
+- `GENERIC_LOOT` This is a place that may contain any of the above, but at a lower frequency -
+ usually a house.
## Recipes
### Categories
-- ```CC_AMMO```
-- ```CC_ARMOR```
-- ```CC_CHEM```
-- ```CC_DRINK```
-- ```CC_ELECTRONIC```
-- ```CC_FOOD```
-- ```CC_MISC```
-- ```CC_WEAPON```
+- `CC_AMMO`
+- `CC_ARMOR`
+- `CC_CHEM`
+- `CC_DRINK`
+- `CC_ELECTRONIC`
+- `CC_FOOD`
+- `CC_MISC`
+- `CC_WEAPON`
### Flags
-- ```ALLOW_ROTTEN``` Explicitly allow rotten components when crafting non-perishables.
-- ```BLIND_EASY``` Easy to craft with little to no light.
-- ```BLIND_HARD``` Possible to craft with little to no light, but difficult.
-- ```SECRET``` Not automatically learned at character creation time based on high skill levels.
-- ```UNCRAFT_LIQUIDS_CONTAINED``` Spawn liquid items in its default container.
-- ```FULL_MAGAZINE``` If this recipe requires magazines, it needs one that is full. For deconstruction recipes, it will spawn a full magazine when deconstructed.
-
+- `ALLOW_ROTTEN` Explicitly allow rotten components when crafting non-perishables.
+- `BLIND_EASY` Easy to craft with little to no light.
+- `BLIND_HARD` Possible to craft with little to no light, but difficult.
+- `SECRET` Not automatically learned at character creation time based on high skill levels.
+- `UNCRAFT_LIQUIDS_CONTAINED` Spawn liquid items in its default container.
+- `FULL_MAGAZINE` If this recipe requires magazines, it needs one that is full. For deconstruction
+ recipes, it will spawn a full magazine when deconstructed.
## Scenarios
### Flags
-- ```ALLOW_OUTSIDE``` Allows placing player outside of building, useful for outdoor start.
-- ```BAD_DAY``` Player starts the game drunk, depressed and sick with the flu.
-- ```BOARDED``` Start in boarded building (windows and doors are boarded, movable furniture is moved to windows and doors).
-- ```BORDERED``` Initial start location is bordered by an enormous wall of solid rock.
-- ```CHALLENGE``` Game won't choose this scenario in random game types.
-- ```CITY_START``` Scenario is available only when city size value in world options is more than 0.
-- ```FIRE_START``` Player starts the game with fire nearby.
-- ```HELI_CRASH``` Player starts the game with various limbs wounds.
-- ```INFECTED``` Player starts the game infected.
-- ```LONE_START``` If starting NPC spawn option is switched to "Scenario-based", this scenario won't spawn a fellow NPC on game start.
-- ```SCEN_ONLY``` Profession can be chosen only as part of the appropriate scenario.
-- ```SUR_START``` Surrounded start, zombies outside the starting location.
+- `ALLOW_OUTSIDE` Allows placing player outside of building, useful for outdoor start.
+- `BAD_DAY` Player starts the game drunk, depressed and sick with the flu.
+- `BOARDED` Start in boarded building (windows and doors are boarded, movable furniture is moved to
+ windows and doors).
+- `BORDERED` Initial start location is bordered by an enormous wall of solid rock.
+- `CHALLENGE` Game won't choose this scenario in random game types.
+- `CITY_START` Scenario is available only when city size value in world options is more than 0.
+- `FIRE_START` Player starts the game with fire nearby.
+- `HELI_CRASH` Player starts the game with various limbs wounds.
+- `INFECTED` Player starts the game infected.
+- `LONE_START` If starting NPC spawn option is switched to "Scenario-based", this scenario won't
+ spawn a fellow NPC on game start.
+- `SCEN_ONLY` Profession can be chosen only as part of the appropriate scenario.
+- `SUR_START` Surrounded start, zombies outside the starting location.
#### Season Flags
-- ```AUT_START``` ... start in autumn.
-- ```SPR_START``` ... start in spring.
-- ```SUM_ADV_START``` ... start second summer after Cataclysm.
-- ```SUM_START``` ... start in summer.
-- ```WIN_START``` ... start in winter.
-
+- `AUT_START` ... start in autumn.
+- `SPR_START` ... start in spring.
+- `SUM_ADV_START` ... start second summer after Cataclysm.
+- `SUM_START` ... start in summer.
+- `WIN_START` ... start in winter.
## Skills
### Tags
-- ```combat_skill``` The skill is considered a combat skill. It's affected by "PACIFIST", "PRED1", "PRED2", "PRED3", and "PRED4" traits.
-- ```contextual_skill``` The skill is abstract, it depends on context (an indirect item to which it's applied). Neither player nor NPCs can possess it.
-
+- `combat_skill` The skill is considered a combat skill. It's affected by "PACIFIST", "PRED1",
+ "PRED2", "PRED3", and "PRED4" traits.
+- `contextual_skill` The skill is abstract, it depends on context (an indirect item to which it's
+ applied). Neither player nor NPCs can possess it.
## Techniques
@@ -1264,19 +1410,30 @@ Techniques may be used by tools, armors, weapons and anything else that can be w
### WBLOCK_X
-The following weapon techniques have some additional usage. These are defensive techniques that allow the item to assist in blocking attacks in melee, with some additional special uses.
-
-- ```WBLOCK_1``` "Medium blocking ability"
-- ```WBLOCK_2``` "High blocking ability"
-- ```WBLOCK_3``` "Very high blocking ability"
-
-An item with one of these techniques can be wielded to provide a bonus to damage reduced by blocking compared, or armor with the `BLOCK_WHILE_WORN` flag can also provide the use of this bonus while wearing the item, serving as a shield. Additionally, wielding or wearing an item with a combination of one of these techniques plus said flag will allow the item to block projectiles aimed at body parts the item otherwise does not cover (or is not covering, in the case of wielded items that meet those prerequisites). The chance that this will happen is based on the `coverage` percentage of the item used for its normal armor value, reduced by a penalty that depends on which blocking technique it possesses. The chance of it intercepting shots that strike the legs (again, unless the armor was set to cover the legs by default already, in which case it uses `coverage` as normal) is furtther penalized. The feet will always be vulnerable unless (for whatever reason a JSON author may devise, forcefield items for example) an item happens to be a shield that already covers the feet as armor.
-
- Technique | Chance to intercept (head, torso, opposing arm, etc) | Chance to intercept (legs)
------------|------------------------------------------------------|-------------------------------
- WBLOCK_1 | 90% of default coverage value | 75% of default coverage value
- WBLOCK_2 | 90% of default coverage value | 75% of default coverage value
- WBLOCK_3 | 90% of default coverage value | 75% of default coverage value
+The following weapon techniques have some additional usage. These are defensive techniques that
+allow the item to assist in blocking attacks in melee, with some additional special uses.
+
+- `WBLOCK_1` "Medium blocking ability"
+- `WBLOCK_2` "High blocking ability"
+- `WBLOCK_3` "Very high blocking ability"
+
+An item with one of these techniques can be wielded to provide a bonus to damage reduced by blocking
+compared, or armor with the `BLOCK_WHILE_WORN` flag can also provide the use of this bonus while
+wearing the item, serving as a shield. Additionally, wielding or wearing an item with a combination
+of one of these techniques plus said flag will allow the item to block projectiles aimed at body
+parts the item otherwise does not cover (or is not covering, in the case of wielded items that meet
+those prerequisites). The chance that this will happen is based on the `coverage` percentage of the
+item used for its normal armor value, reduced by a penalty that depends on which blocking technique
+it possesses. The chance of it intercepting shots that strike the legs (again, unless the armor was
+set to cover the legs by default already, in which case it uses `coverage` as normal) is furtther
+penalized. The feet will always be vulnerable unless (for whatever reason a JSON author may devise,
+forcefield items for example) an item happens to be a shield that already covers the feet as armor.
+
+| Technique | Chance to intercept (head, torso, opposing arm, etc) | Chance to intercept (legs) |
+| --------- | ---------------------------------------------------- | ----------------------------- |
+| WBLOCK_1 | 90% of default coverage value | 75% of default coverage value |
+| WBLOCK_2 | 90% of default coverage value | 75% of default coverage value |
+| WBLOCK_3 | 90% of default coverage value | 75% of default coverage value |
## Tools
@@ -1284,218 +1441,261 @@ An item with one of these techniques can be wielded to provide a bonus to damage
Melee flags are fully compatible with tool flags, and vice versa.
-- ```ACT_ON_RANGED_HIT``` The item should activate when thrown or fired, then immediately get processed if it spawns on the ground.
-- ```ALLOWS_REMOTE_USE``` This item can be activated or reloaded from adjacent tile without picking it up.
-- ```BELT_CLIP``` The item can be clipped or hooked on to a belt loop of the appropriate size (belt loops are limited by their max_volume and max_weight properties)
-- ```BOMB``` It can be a remote controlled bomb.
-- ```CABLE_SPOOL``` This item is a cable spool and must be processed as such. It has an internal "state" variable which may be in the states "attach_first" or "pay_out_cable" -- in the latter case, set its charges to `max_charges - dist(here, point(vars["source_x"], vars["source_y"]))`. If this results in 0 or a negative number, set its state back to "attach_first".
-- ```CANNIBALISM``` The item is a food that contains human flesh, and applies all applicable effects when consumed.
-- ```CHARGEDIM``` If illuminated, light intensity fades with charge, starting at 20% charge left.
-- ```DIG_TOOL``` If wielded, digs thorough terrain like rock and walls, as player walks into them. If item also has ```POWERED``` flag, then it digs faster, but uses up the item's ammo as if activating it.
-- ```FIRESTARTER``` Item will start fire with some difficulty.
-- ```FIRE``` Item will start a fire immediately.
-- ```FISH_GOOD``` When used for fishing, it's a good tool (requires that the matching use_action has been set).
-- ```FISH_POOR``` When used for fishing, it's a poor tool (requires that the matching use_action has been set).
-- ```HAS_RECIPE``` Used by the E-Ink tablet to indicates it's currently showing a recipe.
-- ```IS_UPS``` Item is Unified Power Supply. Used in active item processing
-- ```LIGHT_[X]``` Illuminates the area with light intensity `[X]` where `[X]` is an intensity value. (e.x. `LIGHT_4` or `LIGHT_100`). Note: this flags sets `itype::light_emission` field and then is removed (can't be found using `has_flag`);
-- ```MC_MOBILE```, ```MC_RANDOM_STUFF```, ```MC_SCIENCE_STUFF```, ```MC_USED```, ```MC_HAS_DATA``` Memory card related flags, see `iuse.cpp`
-- ```NO_DROP``` Item should never exist on map tile as a discrete item (must be contained by another item)
-- ```NO_UNLOAD``` Cannot be unloaded.
-- ```POWERED``` If turned ON, item uses its own source of power, instead of relying on power of the user
-- ```RADIOCARITEM``` Item can be put into a remote controlled car.
-- ```RADIOSIGNAL_1``` Activated per radios signal 1 (Red).
-- ```RADIOSIGNAL_2``` Activated per radios signal 2 (Blue).
-- ```RADIOSIGNAL_3``` Activated per radios signal 3 (Green).
-- ```RADIO_ACTIVATION``` Item can be activated by a remote control (also requires RADIOSIGNAL_*).
-- ```RADIO_INVOKE_PROC``` After being activated via radio signal the item will have its charges removed. Can be used for bypassing bomb countdown.
-- ```RADIO_CONTROLLABLE``` It can be moved around via a remote control.
-- ```RADIO_MODABLE``` Indicates the item can be made into a radio-activated item.
-- ```RADIO_MOD``` The item has been made into a radio-activated item.
-- ```RECHARGE``` Gain charges when placed in a cargo area with a recharge station.
-- ```SAFECRACK``` This item can be used to unlock safes.
-- ```USES_BIONIC_POWER``` The item has no charges of its own, and runs off of the player's bionic power.
-- ```USE_UPS``` Item is charges from an UPS / it uses the charges of an UPS instead of its own.
-- ```NAT_UPS``` Silences the (UPS) suffix from USE_UPS.
-- ```WATER_EXTINGUISH``` Is extinguishable in water or under precipitation. Converts items (requires "reverts_to" or use_action "transform" to be set).
-- ```WET``` Item is wet and will slowly dry off (e.g. towel).
-- ```WIND_EXTINGUISH``` This item will be extinguished by the wind.
-- ```WRITE_MESSAGE``` This item could be used to write messages on signs.
+- `ACT_ON_RANGED_HIT` The item should activate when thrown or fired, then immediately get processed
+ if it spawns on the ground.
+- `ALLOWS_REMOTE_USE` This item can be activated or reloaded from adjacent tile without picking it
+ up.
+- `BELT_CLIP` The item can be clipped or hooked on to a belt loop of the appropriate size (belt
+ loops are limited by their max_volume and max_weight properties)
+- `BOMB` It can be a remote controlled bomb.
+- `CABLE_SPOOL` This item is a cable spool and must be processed as such. It has an internal "state"
+ variable which may be in the states "attach_first" or "pay_out_cable" -- in the latter case, set
+ its charges to `max_charges - dist(here, point(vars["source_x"], vars["source_y"]))`. If this
+ results in 0 or a negative number, set its state back to "attach_first".
+- `CANNIBALISM` The item is a food that contains human flesh, and applies all applicable effects
+ when consumed.
+- `CHARGEDIM` If illuminated, light intensity fades with charge, starting at 20% charge left.
+- `DIG_TOOL` If wielded, digs thorough terrain like rock and walls, as player walks into them. If
+ item also has `POWERED` flag, then it digs faster, but uses up the item's ammo as if activating
+ it.
+- `FIRESTARTER` Item will start fire with some difficulty.
+- `FIRE` Item will start a fire immediately.
+- `FISH_GOOD` When used for fishing, it's a good tool (requires that the matching use_action has
+ been set).
+- `FISH_POOR` When used for fishing, it's a poor tool (requires that the matching use_action has
+ been set).
+- `HAS_RECIPE` Used by the E-Ink tablet to indicates it's currently showing a recipe.
+- `IS_UPS` Item is Unified Power Supply. Used in active item processing
+- `LIGHT_[X]` Illuminates the area with light intensity `[X]` where `[X]` is an intensity value.
+ (e.x. `LIGHT_4` or `LIGHT_100`). Note: this flags sets `itype::light_emission` field and then is
+ removed (can't be found using `has_flag`);
+- `MC_MOBILE`, `MC_RANDOM_STUFF`, `MC_SCIENCE_STUFF`, `MC_USED`, `MC_HAS_DATA` Memory card related
+ flags, see `iuse.cpp`
+- `NO_DROP` Item should never exist on map tile as a discrete item (must be contained by another
+ item)
+- `NO_UNLOAD` Cannot be unloaded.
+- `POWERED` If turned ON, item uses its own source of power, instead of relying on power of the user
+- `RADIOCARITEM` Item can be put into a remote controlled car.
+- `RADIOSIGNAL_1` Activated per radios signal 1 (Red).
+- `RADIOSIGNAL_2` Activated per radios signal 2 (Blue).
+- `RADIOSIGNAL_3` Activated per radios signal 3 (Green).
+- `RADIO_ACTIVATION` Item can be activated by a remote control (also requires RADIOSIGNAL_*).
+- `RADIO_INVOKE_PROC` After being activated via radio signal the item will have its charges removed.
+ Can be used for bypassing bomb countdown.
+- `RADIO_CONTROLLABLE` It can be moved around via a remote control.
+- `RADIO_MODABLE` Indicates the item can be made into a radio-activated item.
+- `RADIO_MOD` The item has been made into a radio-activated item.
+- `RECHARGE` Gain charges when placed in a cargo area with a recharge station.
+- `SAFECRACK` This item can be used to unlock safes.
+- `USES_BIONIC_POWER` The item has no charges of its own, and runs off of the player's bionic power.
+- `USE_UPS` Item is charges from an UPS / it uses the charges of an UPS instead of its own.
+- `NAT_UPS` Silences the (UPS) suffix from USE_UPS.
+- `WATER_EXTINGUISH` Is extinguishable in water or under precipitation. Converts items (requires
+ "reverts_to" or use_action "transform" to be set).
+- `WET` Item is wet and will slowly dry off (e.g. towel).
+- `WIND_EXTINGUISH` This item will be extinguished by the wind.
+- `WRITE_MESSAGE` This item could be used to write messages on signs.
### Flags that apply to items
These flags **do not apply to item types**.
-Those flags are added by the game code to specific items (that specific welder, not *all* welders).
-
-- ```COLD``` Item is cold (see EATEN_COLD).
-- ```DIRTY``` Item (liquid) was dropped on the ground and is now irreparably dirty.
-- ```FIELD_DRESS_FAILED``` Corpse was damaged by unskillful field dressing. Affects butcher results.
-- ```FIELD_DRESS``` Corpse was field dressed. Affects butcher results.
-- ```FIT``` Reduces encumbrance by one.
-- ```FROZEN``` Item is frozen solid (used by freezer).
-- ```HIDDEN_ITEM``` This item cannot be seen in AIM.
-- ```HOT``` Item is hot (see EATEN_HOT).
-- ```LITCIG``` Marks a lit smoking item (cigarette, joint etc.).
-- ```MUSHY``` FREEZERBURN item was frozen and is now mushy and tasteless and will go bad after freezing again.
-- ```NO_PARASITES``` Invalidates parasites count set in food->type->comestible->parasites
-- ```QUARTERED``` Corpse was quartered into parts. Affects butcher results, weight, volume.
-- ```REVIVE_SPECIAL``` ... Corpses revives when the player is nearby.
-- ```USE_UPS``` The tool has the UPS mod and is charged from an UPS.
-- ```WARM``` A hidden flag used to track an item's journey to/from hot, buffers between HOT and cold.
-- ```WET``` Item is wet and will slowly dry off (e.g. towel).
-
+Those flags are added by the game code to specific items (that specific welder, not _all_ welders).
+
+- `COLD` Item is cold (see EATEN_COLD).
+- `DIRTY` Item (liquid) was dropped on the ground and is now irreparably dirty.
+- `FIELD_DRESS_FAILED` Corpse was damaged by unskillful field dressing. Affects butcher results.
+- `FIELD_DRESS` Corpse was field dressed. Affects butcher results.
+- `FIT` Reduces encumbrance by one.
+- `FROZEN` Item is frozen solid (used by freezer).
+- `HIDDEN_ITEM` This item cannot be seen in AIM.
+- `HOT` Item is hot (see EATEN_HOT).
+- `LITCIG` Marks a lit smoking item (cigarette, joint etc.).
+- `MUSHY` FREEZERBURN item was frozen and is now mushy and tasteless and will go bad after freezing
+ again.
+- `NO_PARASITES` Invalidates parasites count set in food->type->comestible->parasites
+- `QUARTERED` Corpse was quartered into parts. Affects butcher results, weight, volume.
+- `REVIVE_SPECIAL` ... Corpses revives when the player is nearby.
+- `USE_UPS` The tool has the UPS mod and is charged from an UPS.
+- `WARM` A hidden flag used to track an item's journey to/from hot, buffers between HOT and cold.
+- `WET` Item is wet and will slowly dry off (e.g. towel).
## Vehicle Parts
### Flags
-- ```ADVANCED_PLANTER``` This planter doesn't spill seeds and avoids damaging itself on non-diggable surfaces.
-- ```AISLE_LIGHT```
-- ```AISLE``` Player can move over this part with less speed penalty than normal.
-- ```ALTERNATOR``` Recharges batteries installed on the vehicle. Can only be installed on a part with ```E_ALTERNATOR``` flag.
-- ```ANCHOR_POINT``` Allows secure seatbelt attachment.
-- ```ANIMAL_CTRL``` Can harness an animal, need HARNESS_bodytype flag to specify bodytype of animal.
-- ```ARMOR``` Protects the other vehicle parts it's installed over during collisions.
-- ```ATOMIC_LIGHT```
-- ```AUTOCLAVE``` Acts as an autoclave.
-- ```AUTOPILOT``` This part will enable a vehicle to have a simple autopilot.
-- ```BATTERY_MOUNT```
-- ```BED``` A bed where the player can sleep.
-- ```BEEPER``` Generates noise when the vehicle moves backward.
-- ```BELTABLE``` Seatbelt can be attached to this part.
-- ```BIKE_RACK_VEH``` Can be used to merge an adjacent single tile wide vehicle, or split a single tile wide vehicle off into its own vehicle.
-- ```BOARDABLE``` The player can safely move over or stand on this part while the vehicle is moving.
-- ```CAMERA_CONTROL```
-- ```CAMERA```
-- ```CAPTURE_MOSNTER_VEH``` Can be used to capture monsters when mounted on a vehicle.
-- ```CARGO_LOCKING``` This cargo area is inaccessible to NPCs. Can only be installed on a part with ```LOCKABLE_CARGO``` flag.
-- ```CARGO``` Cargo holding area.
-- ```CHEMLAB``` Acts as a chemistry set for crafting.
-- ```CHIMES``` Generates continuous noise when used.
-- ```CIRCLE_LIGHT``` Projects a circular radius of light when turned on.
-- ```CONE_LIGHT``` Projects a cone of light when turned on.
-- ```CONTROL_ANIMAL``` These controls can only be used to control a vehicle pulled by an animal (such as reins etc).
-- ```CONTROLS``` Can be used to control the vehicle.
-- ```COOLER``` There is separate command to toggle this part.
-- ```COVERED``` Prevents items in cargo parts from emitting any light.
-- ```CRAFTRIG``` Acts as a dehydrator, vacuum sealer and reloading press for crafting purposes. Potentially to include additional tools in the future.
-- ```CTRL_ELECTRONIC``` Controls electrical and electronic systems of the vehicle.
-- ```CURTAIN``` Can be installed over a part flagged with ```WINDOW```, and functions the same as blinds found on windows in buildings.
-- ```DIFFICULTY_REMOVE```
-- ```DISHWASHER``` Can be used to wash filthy non-soft items en masse.
-- ```DOME_LIGHT```
-- ```DOOR_MOTOR``` Can only be installed on a part with ```OPENABLE``` flag.
-- ```E_ALTERNATOR``` Is an engine that can power an alternator.
-- ```E_COLD_START``` Is an engine that starts much slower in cold weather.
-- ```E_COMBUSTION``` Is an engine that burns its fuel and can backfire or explode when damaged.
-- ```E_HEATER``` Is an engine and has a heater to warm internal vehicle items when on.
-- ```E_HIGHER_SKILL``` Is an engine that is more difficult to install as more engines are installed.
-- ```E_NO_POWER_DECAY``` Engines with this flag do not affect total vehicle power suffering diminishing returns.
-- ```E_STARTS_INSTANTLY``` Is an engine that starts instantly, like food pedals.
-- ```EMITTER``` Emits while enabled (emissions are defined by ```emissions``` entry).
-- ```ENABLED_DRAINS_EPOWER``` Produces `epower` watts while enabled (use negative numbers to drain power). This is independent from reactor power production.
-- ```ENGINE``` Is an engine and contributes towards vehicle mechanical power.
-- ```EVENTURN``` Only on during even turns.
-- ```EXTENDS_VISION``` Extends player vision (cameras, mirrors, etc.)
-- ```EXTRA_DRAG``` tells the vehicle that the part exerts engine power reduction.
-- ```FAUCET```
-- ```FLAT_SURF``` Part with a flat hard surface (e.g. table).
-- ```FLOATS``` Provide buoyancy to boats
-- ```FLUIDTANK``` Is a fluid tank.
-- ```FOLDABLE```
-- ```FORGE``` Acts as a forge for crafting.
-- ```FREEZER``` Can freeze items in below zero degrees Celsius temperature.
-- ```FRIDGE``` Can refrigerate items.
-- ```FUNNEL```
-- ```HALF_CIRCLE_LIGHT``` Projects a directed half-circular radius of light when turned on.
-- ```HARNESS_bodytype``` Replace bodytype with `any` to accept any type, or with the targeted type.
-- ```HORN``` Generates noise when used.
-- ```INITIAL_PART``` When starting a new vehicle via the construction menu, this vehicle part will be the initial part of the vehicle (if the used item matches the item required for this part). The items of parts with this flag are automatically added as component to the vehicle start construction.
-- ```INTERNAL``` Can only be installed on a part with ```CARGO``` flag.
-- ```KITCHEN``` Acts as a kitchen unit and heat source for crafting.
-- ```LIGHT```
-- ```LOCKABLE_CARGO``` Cargo containers that are able to have a lock installed.
-- ```MOUNTABLE``` Player can fire mounted weapons from here.
-- ```MUFFLER``` Muffles the noise a vehicle makes while running.
-- ```MULTISQUARE``` Causes this part and any adjacent parts with the same ID to act as a singular part.
-- ```MUSCLE_ARMS``` Power of the engine with such flag depends on player's strength (it's less effective than ```MUSCLE_LEGS```).
-- ```MUSCLE_LEGS``` Power of the engine with such flag depends on player's strength.
-- ```NAILABLE``` Attached with nails
-- ```NEEDS_BATTERY_MOUNT```
-- ```NEEDS_WHEEL_MOUNT_HEAVY``` Can only be installed on a part with ```WHEEL_MOUNT_HEAVY``` flag.
-- ```NEEDS_WHEEL_MOUNT_LIGHT``` Can only be installed on a part with ```WHEEL_MOUNT_LIGHT``` flag.
-- ```NEEDS_WHEEL_MOUNT_MEDIUM``` Can only be installed on a part with ```WHEEL_MOUNT_MEDIUM``` flag.
-- ```NEEDS_WINDOW``` Can only be installed on a part with ```WINDOW``` flag.
-- ```NO_JACK```
-- ```NOINSTALL``` Cannot be installed.
-- ```OBSTACLE``` Cannot walk through part, unless the part is also ```OPENABLE```.
-- ```ODDTURN``` Only on during odd turns.
-- ```ON_CONTROLS``` Can only be installed on a part with ```CONTROLS``` flag.
-- ```ON_ROOF``` - Parts with this flag could only be installed on a roof (parts with ```ROOF``` flag).
-- ```OPAQUE``` Cannot be seen through.
-- ```OPENABLE``` Can be opened or closed.
-- ```OPENCLOSE_INSIDE``` Can be opened or closed, but only from inside the vehicle.
-- ```OVER``` Can be mounted over other parts.
-- ```PERPETUAL``` If paired with REACTOR, part produces electrical power without consuming fuel.
-- ```PLANTER``` Plants seeds into tilled dirt, spilling them when the terrain underneath is unsuitable. It is damaged by running it over non-```DIGGABLE``` surfaces.
-- ```PLOW``` Tills the soil underneath the part while active. Takes damage from unsuitable terrain at a level proportional to the speed of the vehicle.
-- ```POWER_TRANSFER``` Transmits power to and from an attached thingy (probably a vehicle).
-- ```PROTRUSION``` Part sticks out so no other parts can be installed over it.
-- ```RAIL``` This wheel allows vehicle to move on rails.
-- ```REACTOR``` When enabled, part consumes fuel to generate epower.
-- ```REAPER``` Cuts down mature crops, depositing them on the square.
-- ```RECHARGE``` Recharge items with the same flag. ( Currently only the rechargeable battery mod. )
-- ```REMOTE_CONTROLS```
-- ```REVERSIBLE``` Removal has identical requirements to installation but is twice as quick
-- ```ROOF``` Covers a section of the vehicle. Areas of the vehicle that have a roof and roofs on surrounding sections, are considered inside. Otherwise they're outside.
-- ```ROTOR``` Allows vehicle to generate lift. Actual lift depends on engine power sum of all rotor's diameters.
-- ```SCOOP``` Pulls items from underneath the vehicle to the cargo space of the part. Also mops up liquids.
-- ```SEAT``` A seat where the player can sit or sleep.
-- ```SEATBELT``` Helps prevent the player from being ejected from the vehicle during an accident. Can only be installed on a part with ```BELTABLE``` flag.
-- ```SECURITY```
-- ```SHARP``` Striking a monster with this part does cutting damage instead of bashing damage, and prevents stunning the monster.
-- ```SOLAR_PANEL``` Recharges vehicle batteries when exposed to sunlight. Has a 1 in 4 chance of being broken on car generation.
-- ```SPACE_HEATER``` There is separate command to toggle this part.
-- ```STABLE``` Similar to `WHEEL`, but if the vehicle is only a 1x1 section, this single wheel counts as enough wheels.
-- ```STEERABLE``` This wheel is steerable.
-- ```STEREO```
-- ```TOOL_NONE``` Can be removed/installed without any tools
-- ```TOOL_SCREWDRIVER``` Attached with screws, can be removed/installed with a screwdriver
-- ```TOOL_WRENCH``` Attached with bolts, can be removed/installed with a wrench
-- ```TOWEL``` Can be used to dry yourself up.
-- ```TRACK``` Allows the vehicle installed on, to be marked and tracked on map.
-- ```TRACKED``` Contributes to steering effectiveness but doesn't count as a steering axle for install difficulty and still contributes to drag for the center of steering calculation.
-- ```TRANSFORM_TERRAIN``` Transform terrain (using rules defined in ```transform_terrain```).
-- ```TURRET_CONTROLS``` If part with this flag is installed over the turret, it allows to set said turret's targeting mode to full auto. Can only be installed on a part with ```TURRET``` flag.
-- ```TURRET_MOUNT``` Parts with this flag are suitable for installing turrets.
-- ```TURRET``` Is a weapon turret. Can only be installed on a part with ```TURRET_MOUNT``` flag.
-- ```UNMOUNT_ON_DAMAGE``` Part breaks off the vehicle when destroyed by damage. Item is new and typically undamaged.
-- ```UNMOUNT_ON_MOVE``` Dismount this part when the vehicle moves. Doesn't drop the part, unless you give it special handling.
-- ```VARIABLE_SIZE``` Has 'bigness' for power, wheel radius, etc.
-- ```VISION```
-- ```WASHING_MACHINE``` Can be used to wash filthy clothes en masse.
-- ```WATER_WHEEL``` Recharges vehicle batteries when in flowing water.
-- ```WELDRIG``` Acts as a welder for crafting.
-- ```WHEEL``` Counts as a wheel in wheel calculations.
-- ```WIDE_CONE_LIGHT``` Projects a wide cone of light when turned on.
-- ```WIND_POWERED``` This engine is powered by wind ( sails etc ).
-- ```WIND_TURBINE``` Recharges vehicle batteries when exposed to wind.
-- ```WINDOW``` Can see through this part and can install curtains over it.
-- ```WORKBENCH``` Can craft at this part, must be paired with a workbench json entry.
+- `ADVANCED_PLANTER` This planter doesn't spill seeds and avoids damaging itself on non-diggable
+ surfaces.
+- `AISLE_LIGHT`
+- `AISLE` Player can move over this part with less speed penalty than normal.
+- `ALTERNATOR` Recharges batteries installed on the vehicle. Can only be installed on a part with
+ `E_ALTERNATOR` flag.
+- `ANCHOR_POINT` Allows secure seatbelt attachment.
+- `ANIMAL_CTRL` Can harness an animal, need HARNESS_bodytype flag to specify bodytype of animal.
+- `ARMOR` Protects the other vehicle parts it's installed over during collisions.
+- `ATOMIC_LIGHT`
+- `AUTOCLAVE` Acts as an autoclave.
+- `AUTOPILOT` This part will enable a vehicle to have a simple autopilot.
+- `BATTERY_MOUNT`
+- `BED` A bed where the player can sleep.
+- `BEEPER` Generates noise when the vehicle moves backward.
+- `BELTABLE` Seatbelt can be attached to this part.
+- `BIKE_RACK_VEH` Can be used to merge an adjacent single tile wide vehicle, or split a single tile
+ wide vehicle off into its own vehicle.
+- `BOARDABLE` The player can safely move over or stand on this part while the vehicle is moving.
+- `CAMERA_CONTROL`
+- `CAMERA`
+- `CAPTURE_MOSNTER_VEH` Can be used to capture monsters when mounted on a vehicle.
+- `CARGO_LOCKING` This cargo area is inaccessible to NPCs. Can only be installed on a part with
+ `LOCKABLE_CARGO` flag.
+- `CARGO` Cargo holding area.
+- `CHEMLAB` Acts as a chemistry set for crafting.
+- `CHIMES` Generates continuous noise when used.
+- `CIRCLE_LIGHT` Projects a circular radius of light when turned on.
+- `CONE_LIGHT` Projects a cone of light when turned on.
+- `CONTROL_ANIMAL` These controls can only be used to control a vehicle pulled by an animal (such as
+ reins etc).
+- `CONTROLS` Can be used to control the vehicle.
+- `COOLER` There is separate command to toggle this part.
+- `COVERED` Prevents items in cargo parts from emitting any light.
+- `CRAFTRIG` Acts as a dehydrator, vacuum sealer and reloading press for crafting purposes.
+ Potentially to include additional tools in the future.
+- `CTRL_ELECTRONIC` Controls electrical and electronic systems of the vehicle.
+- `CURTAIN` Can be installed over a part flagged with `WINDOW`, and functions the same as blinds
+ found on windows in buildings.
+- `DIFFICULTY_REMOVE`
+- `DISHWASHER` Can be used to wash filthy non-soft items en masse.
+- `DOME_LIGHT`
+- `DOOR_MOTOR` Can only be installed on a part with `OPENABLE` flag.
+- `E_ALTERNATOR` Is an engine that can power an alternator.
+- `E_COLD_START` Is an engine that starts much slower in cold weather.
+- `E_COMBUSTION` Is an engine that burns its fuel and can backfire or explode when damaged.
+- `E_HEATER` Is an engine and has a heater to warm internal vehicle items when on.
+- `E_HIGHER_SKILL` Is an engine that is more difficult to install as more engines are installed.
+- `E_NO_POWER_DECAY` Engines with this flag do not affect total vehicle power suffering diminishing
+ returns.
+- `E_STARTS_INSTANTLY` Is an engine that starts instantly, like food pedals.
+- `EMITTER` Emits while enabled (emissions are defined by `emissions` entry).
+- `ENABLED_DRAINS_EPOWER` Produces `epower` watts while enabled (use negative numbers to drain
+ power). This is independent from reactor power production.
+- `ENGINE` Is an engine and contributes towards vehicle mechanical power.
+- `EVENTURN` Only on during even turns.
+- `EXTENDS_VISION` Extends player vision (cameras, mirrors, etc.)
+- `EXTRA_DRAG` tells the vehicle that the part exerts engine power reduction.
+- `FAUCET`
+- `FLAT_SURF` Part with a flat hard surface (e.g. table).
+- `FLOATS` Provide buoyancy to boats
+- `FLUIDTANK` Is a fluid tank.
+- `FOLDABLE`
+- `FORGE` Acts as a forge for crafting.
+- `FREEZER` Can freeze items in below zero degrees Celsius temperature.
+- `FRIDGE` Can refrigerate items.
+- `FUNNEL`
+- `HALF_CIRCLE_LIGHT` Projects a directed half-circular radius of light when turned on.
+- `HARNESS_bodytype` Replace bodytype with `any` to accept any type, or with the targeted type.
+- `HORN` Generates noise when used.
+- `INITIAL_PART` When starting a new vehicle via the construction menu, this vehicle part will be
+ the initial part of the vehicle (if the used item matches the item required for this part). The
+ items of parts with this flag are automatically added as component to the vehicle start
+ construction.
+- `INTERNAL` Can only be installed on a part with `CARGO` flag.
+- `KITCHEN` Acts as a kitchen unit and heat source for crafting.
+- `LIGHT`
+- `LOCKABLE_CARGO` Cargo containers that are able to have a lock installed.
+- `MOUNTABLE` Player can fire mounted weapons from here.
+- `MUFFLER` Muffles the noise a vehicle makes while running.
+- `MULTISQUARE` Causes this part and any adjacent parts with the same ID to act as a singular part.
+- `MUSCLE_ARMS` Power of the engine with such flag depends on player's strength (it's less effective
+ than `MUSCLE_LEGS`).
+- `MUSCLE_LEGS` Power of the engine with such flag depends on player's strength.
+- `NAILABLE` Attached with nails
+- `NEEDS_BATTERY_MOUNT`
+- `NEEDS_WHEEL_MOUNT_HEAVY` Can only be installed on a part with `WHEEL_MOUNT_HEAVY` flag.
+- `NEEDS_WHEEL_MOUNT_LIGHT` Can only be installed on a part with `WHEEL_MOUNT_LIGHT` flag.
+- `NEEDS_WHEEL_MOUNT_MEDIUM` Can only be installed on a part with `WHEEL_MOUNT_MEDIUM` flag.
+- `NEEDS_WINDOW` Can only be installed on a part with `WINDOW` flag.
+- `NO_JACK`
+- `NOINSTALL` Cannot be installed.
+- `OBSTACLE` Cannot walk through part, unless the part is also `OPENABLE`.
+- `ODDTURN` Only on during odd turns.
+- `ON_CONTROLS` Can only be installed on a part with `CONTROLS` flag.
+- `ON_ROOF` - Parts with this flag could only be installed on a roof (parts with `ROOF` flag).
+- `OPAQUE` Cannot be seen through.
+- `OPENABLE` Can be opened or closed.
+- `OPENCLOSE_INSIDE` Can be opened or closed, but only from inside the vehicle.
+- `OVER` Can be mounted over other parts.
+- `PERPETUAL` If paired with REACTOR, part produces electrical power without consuming fuel.
+- `PLANTER` Plants seeds into tilled dirt, spilling them when the terrain underneath is unsuitable.
+ It is damaged by running it over non-`DIGGABLE` surfaces.
+- `PLOW` Tills the soil underneath the part while active. Takes damage from unsuitable terrain at a
+ level proportional to the speed of the vehicle.
+- `POWER_TRANSFER` Transmits power to and from an attached thingy (probably a vehicle).
+- `PROTRUSION` Part sticks out so no other parts can be installed over it.
+- `RAIL` This wheel allows vehicle to move on rails.
+- `REACTOR` When enabled, part consumes fuel to generate epower.
+- `REAPER` Cuts down mature crops, depositing them on the square.
+- `RECHARGE` Recharge items with the same flag. ( Currently only the rechargeable battery mod. )
+- `REMOTE_CONTROLS`
+- `REVERSIBLE` Removal has identical requirements to installation but is twice as quick
+- `ROOF` Covers a section of the vehicle. Areas of the vehicle that have a roof and roofs on
+ surrounding sections, are considered inside. Otherwise they're outside.
+- `ROTOR` Allows vehicle to generate lift. Actual lift depends on engine power sum of all rotor's
+ diameters.
+- `SCOOP` Pulls items from underneath the vehicle to the cargo space of the part. Also mops up
+ liquids.
+- `SEAT` A seat where the player can sit or sleep.
+- `SEATBELT` Helps prevent the player from being ejected from the vehicle during an accident. Can
+ only be installed on a part with `BELTABLE` flag.
+- `SECURITY`
+- `SHARP` Striking a monster with this part does cutting damage instead of bashing damage, and
+ prevents stunning the monster.
+- `SOLAR_PANEL` Recharges vehicle batteries when exposed to sunlight. Has a 1 in 4 chance of being
+ broken on car generation.
+- `SPACE_HEATER` There is separate command to toggle this part.
+- `STABLE` Similar to `WHEEL`, but if the vehicle is only a 1x1 section, this single wheel counts as
+ enough wheels.
+- `STEERABLE` This wheel is steerable.
+- `STEREO`
+- `TOOL_NONE` Can be removed/installed without any tools
+- `TOOL_SCREWDRIVER` Attached with screws, can be removed/installed with a screwdriver
+- `TOOL_WRENCH` Attached with bolts, can be removed/installed with a wrench
+- `TOWEL` Can be used to dry yourself up.
+- `TRACK` Allows the vehicle installed on, to be marked and tracked on map.
+- `TRACKED` Contributes to steering effectiveness but doesn't count as a steering axle for install
+ difficulty and still contributes to drag for the center of steering calculation.
+- `TRANSFORM_TERRAIN` Transform terrain (using rules defined in `transform_terrain`).
+- `TURRET_CONTROLS` If part with this flag is installed over the turret, it allows to set said
+ turret's targeting mode to full auto. Can only be installed on a part with `TURRET` flag.
+- `TURRET_MOUNT` Parts with this flag are suitable for installing turrets.
+- `TURRET` Is a weapon turret. Can only be installed on a part with `TURRET_MOUNT` flag.
+- `UNMOUNT_ON_DAMAGE` Part breaks off the vehicle when destroyed by damage. Item is new and
+ typically undamaged.
+- `UNMOUNT_ON_MOVE` Dismount this part when the vehicle moves. Doesn't drop the part, unless you
+ give it special handling.
+- `VARIABLE_SIZE` Has 'bigness' for power, wheel radius, etc.
+- `VISION`
+- `WASHING_MACHINE` Can be used to wash filthy clothes en masse.
+- `WATER_WHEEL` Recharges vehicle batteries when in flowing water.
+- `WELDRIG` Acts as a welder for crafting.
+- `WHEEL` Counts as a wheel in wheel calculations.
+- `WIDE_CONE_LIGHT` Projects a wide cone of light when turned on.
+- `WIND_POWERED` This engine is powered by wind ( sails etc ).
+- `WIND_TURBINE` Recharges vehicle batteries when exposed to wind.
+- `WINDOW` Can see through this part and can install curtains over it.
+- `WORKBENCH` Can craft at this part, must be paired with a workbench json entry.
### Vehicle parts requiring other vehicle parts
-The requirement for other vehicle parts is defined for a json flag by setting ```requires_flag``` for the flag. ```requires_flag``` is the other flag that a part with this flag requires.
-
+The requirement for other vehicle parts is defined for a json flag by setting `requires_flag` for
+the flag. `requires_flag` is the other flag that a part with this flag requires.
### Fuel types
-- ```NULL``` None
-- ```battery``` Electrifying.
-- ```diesel``` Refined dino.
-- ```gasoline``` Refined dino.
-- ```plasma``` Superheated.
-- ```plutonium``` 1.21 Gigawatts!
-- ```water``` Clean.
-- ```wind``` Wind powered.
+- `NULL` None
+- `battery` Electrifying.
+- `diesel` Refined dino.
+- `gasoline` Refined dino.
+- `plasma` Superheated.
+- `plutonium` 1.21 Gigawatts!
+- `water` Clean.
+- `wind` Wind powered.
diff --git a/doc/JSON_INFO.md b/doc/JSON_INFO.md
index e0cf198790be..548f4a27f94c 100644
--- a/doc/JSON_INFO.md
+++ b/doc/JSON_INFO.md
@@ -5,33 +5,33 @@ Use the `Home` key to return to the top.
- [Introduction](#introduction)
- [Navigating the JSON](#navigating-the-json)
- [File descriptions](#file-descriptions)
- * [`data/json/`](#datajson)
- * [`data/json/items/`](#datajsonitems)
- + [`data/json/items/comestibles`](#datajsonitemscomestibles)
- * [`data/json/requirements/`](#datajsonrequirements)
- * [`data/json/vehicles/`](#datajsonvehicles)
+ - [`data/json/`](#datajson)
+ - [`data/json/items/`](#datajsonitems)
+ - [`data/json/items/comestibles`](#datajsonitemscomestibles)
+ - [`data/json/requirements/`](#datajsonrequirements)
+ - [`data/json/vehicles/`](#datajsonvehicles)
- [Generic properties and formatting](#generic-properties-and-formatting)
- * [Generic properties](#generic-properties)
- * [Formatting](#formatting)
- + [Time duration](#time-duration)
- + [Other formatting](#other-formatting)
+ - [Generic properties](#generic-properties)
+ - [Formatting](#formatting)
+ - [Time duration](#time-duration)
+ - [Other formatting](#other-formatting)
- [Description and content of each JSON file](#description-and-content-of-each-json-file)
- * [`data/json/` JSONs](#datajson-jsons)
- + [Ascii_arts](#ascii_arts)
- + [Body_parts](#body_parts)
- + [Bionics](#bionics)
- + [Dreams](#dreams)
- + [Disease](#disease_type)
- + [Item Groups](#item-groups)
- + [Item Category](#item-category)
- + [Materials](#materials)
- + [Monster Groups](#monster-groups)
+ - [`data/json/` JSONs](#datajson-jsons)
+ - [Ascii_arts](#ascii_arts)
+ - [Body_parts](#body_parts)
+ - [Bionics](#bionics)
+ - [Dreams](#dreams)
+ - [Disease](#disease_type)
+ - [Item Groups](#item-groups)
+ - [Item Category](#item-category)
+ - [Materials](#materials)
+ - [Monster Groups](#monster-groups)
- [Group definition](#group-definition)
- [Monster definition](#monster-definition)
- + [Monster Factions](#monster-factions)
- + [Monsters](#monsters)
- + [Names](#names)
- + [Profession item substitution](#profession-item-substitution)
+ - [Monster Factions](#monster-factions)
+ - [Monsters](#monsters)
+ - [Names](#names)
+ - [Profession item substitution](#profession-item-substitution)
- [`description`](#-description-)
- [`name`](#-name-)
- [`points`](#-points-)
@@ -42,223 +42,236 @@ Use the `Home` key to return to the top.
- [`flags`](#-flags-)
- [`cbms`](#-cbms-)
- [`traits`](#-traits-)
- + [Recipes](#recipes)
- + [Constructions](#constructions)
- + [Construction groups](#construction-groups)
- + [Construction sequences](#construction-sequences)
- + [Scent Types](#scent_types)
- + [Scores and Achievements](#scores-and-achievements)
+ - [Recipes](#recipes)
+ - [Constructions](#constructions)
+ - [Construction groups](#construction-groups)
+ - [Construction sequences](#construction-sequences)
+ - [Scent Types](#scent_types)
+ - [Scores and Achievements](#scores-and-achievements)
- [`event_transformation`](#event_transformation)
- [`event_statistic`](#event_statistic)
- [`score`](#score)
- [`achievement`](#achievement)
- + [Skills](#skills)
- + [Traits/Mutations](#traits-mutations)
- + [Vehicle Groups](#vehicle-groups)
- + [Vehicle Parts](#vehicle-parts)
- + [Part Resistance](#part-resistance)
- + [Vehicle Placement](#vehicle-placement)
- + [Vehicle Spawn](#vehicle-spawn)
- + [Vehicles](#vehicles)
+ - [Skills](#skills)
+ - [Traits/Mutations](#traits-mutations)
+ - [Vehicle Groups](#vehicle-groups)
+ - [Vehicle Parts](#vehicle-parts)
+ - [Part Resistance](#part-resistance)
+ - [Vehicle Placement](#vehicle-placement)
+ - [Vehicle Spawn](#vehicle-spawn)
+ - [Vehicles](#vehicles)
- [`data/json/items/` JSONs](#datajsonitems-jsons)
- + [Generic Items](#generic-items)
- + [Ammo](#ammo)
- + [Magazine](#magazine)
- + [Armor](#armor)
- + [Pet Armor](#pet-armor)
- + [Books](#books)
- - [Color Key](#color-key)
- + [Comestibles](#comestibles)
- + [Containers](#containers)
- + [Melee](#melee)
- - [`Melee Weapon_category`](#melee-weapon_category)
- + [Gun](#gun)
- - [`Ranged Weapon_category`](#ranged-weapon_category)
- + [Gunmod](#gunmod)
- + [Batteries](#batteries)
- + [Tools](#tools)
- + [Seed Data](#seed-data)
- + [Brewing Data](#brewing-data)
- + [Relic Data](#relic-data)
- + [Artifact Data](#artifact-data)
- - [`Effects_carried`](#effects-carried)
- - [`effects_worn`](#effects-worn)
- - [`effects_wielded`](#effects-wielded)
- - [`effects_activated`](#effects-activated)
- + [Software Data](#software-data)
- + [Fuel data](#fuel-data)
- + [Use Actions](#use-actions)
+ - [Generic Items](#generic-items)
+ - [Ammo](#ammo)
+ - [Magazine](#magazine)
+ - [Armor](#armor)
+ - [Pet Armor](#pet-armor)
+ - [Books](#books)
+ - [Color Key](#color-key)
+ - [Comestibles](#comestibles)
+ - [Containers](#containers)
+ - [Melee](#melee)
+ - [`Melee Weapon_category`](#melee-weapon_category)
+ - [Gun](#gun)
+ - [`Ranged Weapon_category`](#ranged-weapon_category)
+ - [Gunmod](#gunmod)
+ - [Batteries](#batteries)
+ - [Tools](#tools)
+ - [Seed Data](#seed-data)
+ - [Brewing Data](#brewing-data)
+ - [Relic Data](#relic-data)
+ - [Artifact Data](#artifact-data)
+ - [`Effects_carried`](#effects-carried)
+ - [`effects_worn`](#effects-worn)
+ - [`effects_wielded`](#effects-wielded)
+ - [`effects_activated`](#effects-activated)
+ - [Software Data](#software-data)
+ - [Fuel data](#fuel-data)
+ - [Use Actions](#use-actions)
- [`json/` JSONs](#json-jsons)
- + [Harvest](#harvest)
- - [`id`](#-id-)
- - [`type`](#-type-)
- - [`message`](#-message-)
- - [`entries`](#-entries-)
- + [Furniture](#furniture)
- - [`type`](#-type--1)
- - [`move_cost_mod`](#-move-cost-mod-)
- - [`light_emitted`](#-light-emitted-)
- - [`required_str`](#-required-str-)
- - [`crafting_pseudo_item`](#-crafting-pseudo-item-)
- - [`workbench`](#-workbench-)
- - [`plant_data`](#-plant-data-)
- + [Terrain](#terrain)
- - [`type`](#-type--2)
- - [`move_cost`](#-move-cost-)
- - [`light_emitted`](#-light-emitted--1)
- - [`trap`](#-trap-)
- - [`harvestable`](#-harvestable-)
- - [`transforms_into`](#-transforms-into-)
- - [`harvest_season`](#-harvest-season-)
- - [`roof`](#-roof-)
- + [Common To Furniture And Terrain](#common-to-furniture-and-terrain)
- - [`id`](#-id--1)
- - [`name`](#-name--1)
- - [`flags`](#-flags--1)
- - [`connects_to`](#-connects-to-)
- - [`symbol`](#-symbol-)
- - [`looks_like`](#-looks-like-)
- - [`color` or `bgcolor`](#-color--or--bgcolor-)
- - [`max_volume`](#-max-volume-)
- - [`examine_action`](#-examine-action-)
- - [`close" And "open`](#-close--and--open-)
- - [`bash`](#-bash-)
- - [`deconstruct`](#-deconstruct-)
- - [`pry`](#-pry-)
- - [`map_bash_info`](#-map-bash-info-)
- - [`str_min`, `str_max`, `str_min_blocked`, `str_max_blocked`, `str_min_supported`, `str_max_supported`](#-str-min----str-max----str-min-blocked----str-max-blocked----str-min-supported----str-max-supported-)
- - [`sound`, `sound_fail`, `sound_vol`, `sound_fail_vol`](#-sound----sound-fail----sound-vol----sound-fail-vol-)
- - [`furn_set`, `ter_set`](#-furn-set----ter-set-)
- - [`explosive`](#-explosive-)
- - [`destroy_only`](#-destroy-only-)
- - [`bash_below`](#-bash-below-)
- - [`tent_centers`, `collapse_radius`](#-tent-centers----collapse-radius-)
- - [`items`](#-items--1)
- - [`map_deconstruct_info`](#-map-deconstruct-info-)
- - [`furn_set`, `ter_set`](#-furn-set----ter-set--1)
- - [`items`](#-items-2)
- - [`prying_result`](#-prying-result-)
- - [`new_ter_type`, `new_furn_type`](#-new-furn-type----new-ter-type-)
- - [`success_message`, `fail_message`, `break_message`](#-success-message----fail-message----break-message-)
- - [`pry_quality`, `pry_bonus_mult`, `difficulty`](#-pry-quality----pry-bonus-mult----difficulty-)
- - [`noise`, `break_noise`, `sound`, `break_sound`](#-noise----break-noise----sound----break-sound-)
- - [`breakable`, `break_ter_type`, `break_furn_type`](#-breakable----break-ter-type----break-furn-type-)
- - [`break_items`](#-break-items-)
- + [`plant_data`](#plant_data-1)
- - [`transform`](#-transform-)
- - [`base`](#-base-)
- - [`growth_multiplier`](#-growth-multiplier-)
- - [`harvest_multiplier`](#-harvest-multiplier-)
- + [clothing_mod](#clothing_mod)
+ - [Harvest](#harvest)
+ - [`id`](#-id-)
+ - [`type`](#-type-)
+ - [`message`](#-message-)
+ - [`entries`](#-entries-)
+ - [Furniture](#furniture)
+ - [`type`](#-type--1)
+ - [`move_cost_mod`](#-move-cost-mod-)
+ - [`light_emitted`](#-light-emitted-)
+ - [`required_str`](#-required-str-)
+ - [`crafting_pseudo_item`](#-crafting-pseudo-item-)
+ - [`workbench`](#-workbench-)
+ - [`plant_data`](#-plant-data-)
+ - [Terrain](#terrain)
+ - [`type`](#-type--2)
+ - [`move_cost`](#-move-cost-)
+ - [`light_emitted`](#-light-emitted--1)
+ - [`trap`](#-trap-)
+ - [`harvestable`](#-harvestable-)
+ - [`transforms_into`](#-transforms-into-)
+ - [`harvest_season`](#-harvest-season-)
+ - [`roof`](#-roof-)
+ - [Common To Furniture And Terrain](#common-to-furniture-and-terrain)
+ - [`id`](#-id--1)
+ - [`name`](#-name--1)
+ - [`flags`](#-flags--1)
+ - [`connects_to`](#-connects-to-)
+ - [`symbol`](#-symbol-)
+ - [`looks_like`](#-looks-like-)
+ - [`color` or `bgcolor`](#-color--or--bgcolor-)
+ - [`max_volume`](#-max-volume-)
+ - [`examine_action`](#-examine-action-)
+ - [`close" And "open`](#-close--and--open-)
+ - [`bash`](#-bash-)
+ - [`deconstruct`](#-deconstruct-)
+ - [`pry`](#-pry-)
+ - [`map_bash_info`](#-map-bash-info-)
+ - [`str_min`, `str_max`, `str_min_blocked`, `str_max_blocked`, `str_min_supported`, `str_max_supported`](#-str-min----str-max----str-min-blocked----str-max-blocked----str-min-supported----str-max-supported-)
+ - [`sound`, `sound_fail`, `sound_vol`, `sound_fail_vol`](#-sound----sound-fail----sound-vol----sound-fail-vol-)
+ - [`furn_set`, `ter_set`](#-furn-set----ter-set-)
+ - [`explosive`](#-explosive-)
+ - [`destroy_only`](#-destroy-only-)
+ - [`bash_below`](#-bash-below-)
+ - [`tent_centers`, `collapse_radius`](#-tent-centers----collapse-radius-)
+ - [`items`](#-items--1)
+ - [`map_deconstruct_info`](#-map-deconstruct-info-)
+ - [`furn_set`, `ter_set`](#-furn-set----ter-set--1)
+ - [`items`](#-items-2)
+ - [`prying_result`](#-prying-result-)
+ - [`new_ter_type`, `new_furn_type`](#-new-furn-type----new-ter-type-)
+ - [`success_message`, `fail_message`, `break_message`](#-success-message----fail-message----break-message-)
+ - [`pry_quality`, `pry_bonus_mult`, `difficulty`](#-pry-quality----pry-bonus-mult----difficulty-)
+ - [`noise`, `break_noise`, `sound`, `break_sound`](#-noise----break-noise----sound----break-sound-)
+ - [`breakable`, `break_ter_type`, `break_furn_type`](#-breakable----break-ter-type----break-furn-type-)
+ - [`break_items`](#-break-items-)
+ - [`plant_data`](#plant_data-1)
+ - [`transform`](#-transform-)
+ - [`base`](#-base-)
+ - [`growth_multiplier`](#-growth-multiplier-)
+ - [`harvest_multiplier`](#-harvest-multiplier-)
+ - [clothing_mod](#clothing_mod)
- [Scenarios](#scenarios)
- * [`description`](#-description--1)
- * [`name`](#-name--2)
- * [`points`](#-points--1)
- * [`items`](#-items--3)
- * [`flags`](#-flags--2)
- * [`cbms`](#-cbms--1)
- * [`traits", "forced_traits", "forbidden_traits`](#-traits----forced-traits----forbidden-traits-)
- * [`allowed_locs`](#-allowed-locs-)
- * [`start_name`](#-start-name-)
- * [`professions`](#-professions-)
- * [`map_special`](#-map-special-)
- * [`missions`](#-missions-)
+ - [`description`](#-description--1)
+ - [`name`](#-name--2)
+ - [`points`](#-points--1)
+ - [`items`](#-items--3)
+ - [`flags`](#-flags--2)
+ - [`cbms`](#-cbms--1)
+ - [`traits", "forced_traits", "forbidden_traits`](#-traits----forced-traits----forbidden-traits-)
+ - [`allowed_locs`](#-allowed-locs-)
+ - [`start_name`](#-start-name-)
+ - [`professions`](#-professions-)
+ - [`map_special`](#-map-special-)
+ - [`missions`](#-missions-)
- [Starting locations](#starting-locations)
- * [`name`](#-name--3)
- * [`target`](#-target-)
- * [`flags`](#-flags--3)
- + [`tile_config`](#-tile-config-)
+ - [`name`](#-name--3)
+ - [`target`](#-target-)
+ - [`flags`](#-flags--3)
+ - [`tile_config`](#-tile-config-)
- [Mutation overlay ordering](#mutation-overlay-ordering)
- * [`id`](#-id--2)
- * [`order`](#-order-)
+ - [`id`](#-id--2)
+ - [`order`](#-order-)
- [MOD_INFO](#mod_info)
- [MOD tileset](#mod-tileset)
- * [`compatibility`](#-compatibility-)
- * [`tiles-new`](#-tiles-new-)
+ - [`compatibility`](#-compatibility-)
+ - [`tiles-new`](#-tiles-new-)
- [Field types](#-field-types-)
# Introduction
-This document describes the contents of the json files used in Cataclysm: Dark days ahead. You are probably reading this if you want to add or change content of Catacysm: Dark days ahead and need to learn more about what to find where and what each file and property does.
+
+This document describes the contents of the json files used in Cataclysm: Dark days ahead. You are
+probably reading this if you want to add or change content of Catacysm: Dark days ahead and need to
+learn more about what to find where and what each file and property does.
# Navigating the JSON
-A lot of the JSON involves cross-references to other JSON entities. To make it easier to navigate, we provide a script `tools/json_tools/cddatags.py` that can build a `tags` file for you.
-To run the script you'll need Python 3. On Windows you'll probably need to install that, and associate `.py` files with Python. Then open a command prompt, navigate to your CDDA folder, and run `tools\json_tools\cddatags.py`.
+A lot of the JSON involves cross-references to other JSON entities. To make it easier to navigate,
+we provide a script `tools/json_tools/cddatags.py` that can build a `tags` file for you.
+
+To run the script you'll need Python 3. On Windows you'll probably need to install that, and
+associate `.py` files with Python. Then open a command prompt, navigate to your CDDA folder, and run
+`tools\json_tools\cddatags.py`.
-To use this feature your editor will need [ctags support](http://ctags.sourceforge.net/). When that's working you should be able to easily jump to the definition of any entity. For example, by positioning your cursor over an id and hitting the appropriate key combination.
+To use this feature your editor will need [ctags support](http://ctags.sourceforge.net/). When
+that's working you should be able to easily jump to the definition of any entity. For example, by
+positioning your cursor over an id and hitting the appropriate key combination.
-* In Vim, this feature exists by default, and you can jump to a definition using [`^]`](http://vimdoc.sourceforge.net/htmldoc/tagsrch.html#tagsrch.txt).
-* In Notepad++ go to "Plugins" -> "Plugins Admin" and enable the "TagLEET" plugin. Then select any id and press Alt+Space to open the references window.
+- In Vim, this feature exists by default, and you can jump to a definition using
+ [`^]`](http://vimdoc.sourceforge.net/htmldoc/tagsrch.html#tagsrch.txt).
+- In Notepad++ go to "Plugins" -> "Plugins Admin" and enable the "TagLEET" plugin. Then select any
+ id and press Alt+Space to open the references window.
# File descriptions
-Here's a quick summary of what each of the JSON files contain, broken down by folder. This list is not comprehensive, but covers the broad strokes.
+
+Here's a quick summary of what each of the JSON files contain, broken down by folder. This list is
+not comprehensive, but covers the broad strokes.
## `data/json/`
-| Filename | Description
-|--- |---
-| achievements.json | achievements
-| anatomy.json | a listing of player body parts - do not edit
-| ascii_arts.json | ascii arts for item descriptions
-| bionics.json | bionics, does NOT include bionic effects
-| body_parts.json | an expansion of anatomy.json - do not edit
-| clothing_mods.json | definition of clothing mods
-| construction.json | definition of construction menu tasks
-| default_blacklist.json | a standard blacklist of joke monsters
-| doll_speech.json | talk doll speech messages
-| dreams.json | dream text and linked mutation categories
-| disease.json | disease definitions
-| effects.json | common effects and their effects
-| emit.json | smoke and gas emissions
-| flags.json | common flags and their descriptions
-| furniture.json | furniture, and features treated like furniture
-| game_balance.json | various options to tweak game balance
-| gates.json | gate terrain definitions
-| harvest.json | item drops for butchering corpses
-| health_msgs.json | messages displayed when the player wakes
-| item_actions.json | descriptions of standard item actions
-| item_category.json | item categories and their default sort
-| item_groups.json | item spawn groups
-| lab_notes.json | lab computer messages
-| martialarts.json | martial arts styles and buffs
-| materials.json | material types
-| monster_attacks.json | monster attacks
-| monster_drops.json | monster item drops on death
-| monster_factions.json | monster factions
-| monstergroups.json | monster spawn groups
-| monstergroups_egg.json | monster spawn groups from eggs
-| monsters.json | monster descriptions, mostly zombies
-| morale_types.json | morale modifier messages
-| mutation_category.json | messages for mutation categories
-| mutation_ordering.json | draw order for mutation and CBM overlays in tiles mode
-| mutations.json | traits/mutations
-| names.json | names used for NPC/player name generation
-| overmap_connections.json | connections for roads and tunnels in the overmap
-| overmap_terrain.json | overmap terrain
-| player_activities.json | player activities
-| professions.json | profession definitions
-| recipes.json | crafting/disassembly recipes
-| regional_map_settings.json | settings for the entire map generation
-| road_vehicles.json | vehicle spawn information for roads
-| rotatable_symbols.json | rotatable symbols - do not edit
-| scent_types.json | type of scent available
-| scores.json | scores
-| skills.json | skill descriptions and ID's
-| snippets.json | flier/poster descriptions
-| species.json | monster species
-| speech.json | monster vocalizations
-| statistics.json | statistics and transformations used to define scores and achievements
-| start_locations.json | starting locations for scenarios
-| techniques.json | generic for items and martial arts
-| terrain.json | terrain types and definitions
-| test_regions.json | test regions
-| tips.json | tips of the day
-| tool_qualities.json | standard tool qualities and their actions
-| traps.json | standard traps
-| tutorial.json | messages for the tutorial (that is out of date)
-| vehicle_groups.json | vehicle spawn groups
-| vehicle_parts.json | vehicle parts, does NOT affect flag effects
-| vitamin.json | vitamins and their deficiencies
+| Filename | Description |
+| -------------------------- | --------------------------------------------------------------------- |
+| achievements.json | achievements |
+| anatomy.json | a listing of player body parts - do not edit |
+| ascii_arts.json | ascii arts for item descriptions |
+| bionics.json | bionics, does NOT include bionic effects |
+| body_parts.json | an expansion of anatomy.json - do not edit |
+| clothing_mods.json | definition of clothing mods |
+| construction.json | definition of construction menu tasks |
+| default_blacklist.json | a standard blacklist of joke monsters |
+| doll_speech.json | talk doll speech messages |
+| dreams.json | dream text and linked mutation categories |
+| disease.json | disease definitions |
+| effects.json | common effects and their effects |
+| emit.json | smoke and gas emissions |
+| flags.json | common flags and their descriptions |
+| furniture.json | furniture, and features treated like furniture |
+| game_balance.json | various options to tweak game balance |
+| gates.json | gate terrain definitions |
+| harvest.json | item drops for butchering corpses |
+| health_msgs.json | messages displayed when the player wakes |
+| item_actions.json | descriptions of standard item actions |
+| item_category.json | item categories and their default sort |
+| item_groups.json | item spawn groups |
+| lab_notes.json | lab computer messages |
+| martialarts.json | martial arts styles and buffs |
+| materials.json | material types |
+| monster_attacks.json | monster attacks |
+| monster_drops.json | monster item drops on death |
+| monster_factions.json | monster factions |
+| monstergroups.json | monster spawn groups |
+| monstergroups_egg.json | monster spawn groups from eggs |
+| monsters.json | monster descriptions, mostly zombies |
+| morale_types.json | morale modifier messages |
+| mutation_category.json | messages for mutation categories |
+| mutation_ordering.json | draw order for mutation and CBM overlays in tiles mode |
+| mutations.json | traits/mutations |
+| names.json | names used for NPC/player name generation |
+| overmap_connections.json | connections for roads and tunnels in the overmap |
+| overmap_terrain.json | overmap terrain |
+| player_activities.json | player activities |
+| professions.json | profession definitions |
+| recipes.json | crafting/disassembly recipes |
+| regional_map_settings.json | settings for the entire map generation |
+| road_vehicles.json | vehicle spawn information for roads |
+| rotatable_symbols.json | rotatable symbols - do not edit |
+| scent_types.json | type of scent available |
+| scores.json | scores |
+| skills.json | skill descriptions and ID's |
+| snippets.json | flier/poster descriptions |
+| species.json | monster species |
+| speech.json | monster vocalizations |
+| statistics.json | statistics and transformations used to define scores and achievements |
+| start_locations.json | starting locations for scenarios |
+| techniques.json | generic for items and martial arts |
+| terrain.json | terrain types and definitions |
+| test_regions.json | test regions |
+| tips.json | tips of the day |
+| tool_qualities.json | standard tool qualities and their actions |
+| traps.json | standard traps |
+| tutorial.json | messages for the tutorial (that is out of date) |
+| vehicle_groups.json | vehicle spawn groups |
+| vehicle_parts.json | vehicle parts, does NOT affect flag effects |
+| vitamin.json | vitamins and their deficiencies |
selected subfolders
@@ -266,33 +279,33 @@ selected subfolders
See below for specifics on the various items
-| Filename | Description
-|--- |---
-| ammo.json | common base components like batteries and marbles
-| ammo_types.json | standard ammo types by gun
-| archery.json | bows and arrows
-| armor.json | armor and clothing
-| bionics.json | Compact Bionic Modules (CBMs)
-| biosignatures.json | animal waste
-| books.json | books
-| chemicals_and_resources.json | chemical precursors
-| comestibles.json | food/drinks
-| containers.json | containers
-| crossbows.json | crossbows and bolts
-| fake.json | fake items for bionics or mutations
-| fuel.json | liquid fuels
-| grenades.json | grenades and throwable explosives
-| handloaded_bullets.json | random ammo
-| melee.json | anything that doesn't go in the other item jsons, melee weapons
-| migration.json | conversions of non-existent items from save games to current items
-| newspaper.json | flyers, newspapers, and survivor notes. snippets.json for messages
-| obsolete.json | items being removed from the game
-| ranged.json | guns
-| software.json | software for SD-cards and USB sticks
-| tool_armor.json | clothes and armor that can be (a)ctivated
-| toolmod.json | modifications of tools
-| tools.json | tools and items that can be (a)ctivated
-| vehicle_parts.json | components of vehicles when they aren't on the vehicle
+| Filename | Description |
+| ---------------------------- | ------------------------------------------------------------------ |
+| ammo.json | common base components like batteries and marbles |
+| ammo_types.json | standard ammo types by gun |
+| archery.json | bows and arrows |
+| armor.json | armor and clothing |
+| bionics.json | Compact Bionic Modules (CBMs) |
+| biosignatures.json | animal waste |
+| books.json | books |
+| chemicals_and_resources.json | chemical precursors |
+| comestibles.json | food/drinks |
+| containers.json | containers |
+| crossbows.json | crossbows and bolts |
+| fake.json | fake items for bionics or mutations |
+| fuel.json | liquid fuels |
+| grenades.json | grenades and throwable explosives |
+| handloaded_bullets.json | random ammo |
+| melee.json | anything that doesn't go in the other item jsons, melee weapons |
+| migration.json | conversions of non-existent items from save games to current items |
+| newspaper.json | flyers, newspapers, and survivor notes. snippets.json for messages |
+| obsolete.json | items being removed from the game |
+| ranged.json | guns |
+| software.json | software for SD-cards and USB sticks |
+| tool_armor.json | clothes and armor that can be (a)ctivated |
+| toolmod.json | modifications of tools |
+| tools.json | tools and items that can be (a)ctivated |
+| vehicle_parts.json | components of vehicles when they aren't on the vehicle |
### `data/json/items/comestibles`
@@ -300,67 +313,70 @@ See below for specifics on the various items
Standard components and tools for crafting
-| Filename | Description
-|--- |---
-| ammo.json | ammo components
-| cooking_components.json | common ingredient sets
-| cooking_requirements.json | cooking tools and heat sources
-| materials.json | thread, fabric, and other basic materials
-| toolsets.json | sets of tools commonly used together
-| uncraft.json | common results of taking stuff apart
-| vehicle.json | tools to work on vehicles
-
+| Filename | Description |
+| ------------------------- | ----------------------------------------- |
+| ammo.json | ammo components |
+| cooking_components.json | common ingredient sets |
+| cooking_requirements.json | cooking tools and heat sources |
+| materials.json | thread, fabric, and other basic materials |
+| toolsets.json | sets of tools commonly used together |
+| uncraft.json | common results of taking stuff apart |
+| vehicle.json | tools to work on vehicles |
## `data/json/vehicles/`
Groups of vehicle definitions with self-explanatory names of files:
-| Filename
-|---
-| bikes.json
-| boats.json
-| cars.json
-| carts.json
-| custom_vehicles.json
-| emergency.json
-| farm.json
-| helicopters.json
-| military.json
-| trains.json
-| trucks.json
-| utility.json
-| vans_busses.json
-| vehicles.json
+| Filename |
+| -------------------- |
+| bikes.json |
+| boats.json |
+| cars.json |
+| carts.json |
+| custom_vehicles.json |
+| emergency.json |
+| farm.json |
+| helicopters.json |
+| military.json |
+| trains.json |
+| trucks.json |
+| utility.json |
+| vans_busses.json |
+| vehicles.json |
# Generic properties and formatting
+
This section describes properties and formatting applied to all of the JSON files.
## Generic properties
-A few properties are applicable to most if not all json files and do not need to be described for each json file. These properties are:
-
-| Identifier | Description
-|--- |---
-| type | The type of object this json entry is describing. Setting this entry to 'armor' for example means the game will expect properties specific to armor in that entry. Also ties in with 'copy-from' (see below), if you want to inherit properties of another object, it must be of the same tipe.
-| [copy-from](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/doc/JSON_INHERITANCE.md) | The identifier of the item you wish to copy properties from. This allows you to make an exact copy of an item __of the same type__ and only provide entries that should change from the item you copied from.
-| [extends](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/doc/JSON_INHERITANCE.md) | Modders can add an "extends" field to their definition to append entries to a list instead of overriding the entire list.
-| [delete](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/doc/JSON_INHERITANCE.md) | Modders can also add a "delete" field that removes elements from lists instead of overriding the entire list.
-| [abstract](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/doc/JSON_INHERITANCE.md) | Creates an abstract item (an item that does not end up in the game and solely exists in the json to be copied-from. Use this _instead of_ 'id'.
+A few properties are applicable to most if not all json files and do not need to be described for
+each json file. These properties are:
+| Identifier | Description |
+| --------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| type | The type of object this json entry is describing. Setting this entry to 'armor' for example means the game will expect properties specific to armor in that entry. Also ties in with 'copy-from' (see below), if you want to inherit properties of another object, it must be of the same tipe. |
+| [copy-from](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/doc/JSON_INHERITANCE.md) | The identifier of the item you wish to copy properties from. This allows you to make an exact copy of an item **of the same type** and only provide entries that should change from the item you copied from. |
+| [extends](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/doc/JSON_INHERITANCE.md) | Modders can add an "extends" field to their definition to append entries to a list instead of overriding the entire list. |
+| [delete](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/doc/JSON_INHERITANCE.md) | Modders can also add a "delete" field that removes elements from lists instead of overriding the entire list. |
+| [abstract](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/doc/JSON_INHERITANCE.md) | Creates an abstract item (an item that does not end up in the game and solely exists in the json to be copied-from. Use this _instead of_ 'id'. |
## Formatting
+
When editing JSON files make sure you apply the correct formatting as shown below.
### Time duration
-A string containing one or more pairs of number and time duration unit. Number and unit, as well as each pair, can be separated by an arbitrary amount of spaces.
-Available units:
+A string containing one or more pairs of number and time duration unit. Number and unit, as well as
+each pair, can be separated by an arbitrary amount of spaces. Available units:
+
- "hours", "hour", "h" - one hour
- "days", "day", "d" - one day
- "minutes", "minute", "m" - one minute
- "turns", "turn", "t" - one turn,
Examples:
+
- " +1 day -23 hours 50m " `(1*24*60 - 23*60 + 50 == 110 minutes)`
- "1 turn 1 minutes 9 turns" (1 minute and 10 seconds because 1 turn is 1 second)
@@ -370,7 +386,10 @@ Examples:
"//" : "comment", // Preferred method of leaving comments inside json files.
```
-Some json strings are extracted for translation, for example item names, descriptions, etc. The exact extraction is handled in `lang/extract_json_strings.py`. Apart from the obvious way of writing a string without translation context, the string can also have an optional translation context (and sometimes a plural form), by writing it like:
+Some json strings are extracted for translation, for example item names, descriptions, etc. The
+exact extraction is handled in `lang/extract_json_strings.py`. Apart from the obvious way of writing
+a string without translation context, the string can also have an optional translation context (and
+sometimes a plural form), by writing it like:
```JSON
"name": { "ctxt": "foo", "str": "bar", "str_pl": "baz" }
@@ -382,8 +401,8 @@ or, if the plural form is the same as the singular form:
"name": { "ctxt": "foo", "str_sp": "foo" }
```
-You can also add comments for translators by adding a "//~" entry like below. The
-order of the entries does not matter.
+You can also add comments for translators by adding a "//~" entry like below. The order of the
+entries does not matter.
```JSON
"name": {
@@ -392,134 +411,139 @@ order of the entries does not matter.
}
```
-Currently, only some JSON values support this syntax (see [here](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/TRANSLATING.md#translation) for a list of supported values and more detailed explanation).
+Currently, only some JSON values support this syntax (see
+[here](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/TRANSLATING.md#translation) for
+a list of supported values and more detailed explanation).
# Description and content of each JSON file
-This section describes each json file and their contents. Each json has their own unique properties that are not shared with other Json files (for example 'chapters' property used in books does not apply to armor). This will make sure properties are only described and used within the context of the appropriate JSON file.
+This section describes each json file and their contents. Each json has their own unique properties
+that are not shared with other Json files (for example 'chapters' property used in books does not
+apply to armor). This will make sure properties are only described and used within the context of
+the appropriate JSON file.
## `data/json/` JSONs
### Ascii_arts
-| Identifier | Description
-|--- |---
-| id | Unique ID. Must be one continuous word, use underscores if necessary.
-| picture | Array of string, each entry is a line of an ascii picture and must be at most 42 columns long.
+| Identifier | Description |
+| ---------- | ---------------------------------------------------------------------------------------------- |
+| id | Unique ID. Must be one continuous word, use underscores if necessary. |
+| picture | Array of string, each entry is a line of an ascii picture and must be at most 42 columns long. |
```C++
- {
- "type": "ascii_art",
- "id": "cashcard",
- "picture": [
- "",
- "",
- "",
- " ╔═══════════════════╗",
- " ║ ║",
- " ║ ╔═ ╔═╔═╗╔═║ ║ ║",
- " ║ ║═ ┼ ║ ║═║╚╗║═║ ║",
- " ║ ╚═ ╚═║ ║═╝║ ║ ║",
- " ║ ║",
- " ║ RIVTECH TRUST ║",
- " ║ ║",
- " ║ ║",
- " ║ 555 993 55221 066 ║",
- " ╚═══════════════════╝"
- ]
- }
+{
+ "type": "ascii_art",
+ "id": "cashcard",
+ "picture": [
+ "",
+ "",
+ "",
+ " ╔═══════════════════╗",
+ " ║ ║",
+ " ║ ╔═ ╔═╔═╗╔═║ ║ ║",
+ " ║ ║═ ┼ ║ ║═║╚╗║═║ ║",
+ " ║ ╚═ ╚═║ ║═╝║ ║ ║",
+ " ║ ║",
+ " ║ RIVTECH TRUST ║",
+ " ║ ║",
+ " ║ ║",
+ " ║ 555 993 55221 066 ║",
+ " ╚═══════════════════╝"
+ ]
+}
```
### Body_parts
-| Identifier | Description
-|--- |---
-| id | (_mandatory_) Unique ID. Must be one continuous word, use underscores if necessary.
-| name | (_mandatory_) In-game name displayed.
-| accusative | (_mandatory_) Accusative form for this bodypart.
-| heading | (_mandatory_) How it's displayed in headings.
-| heading_multiple | (_optional_) Plural form of heading. (default: heading value)
-| hp_bar_ui_text | (_optional_) How it's displayed next to the hp bar in the panel. (default: empty string)
-| encumbrance_text | (_optional_) Description of effect when encumbered. (default: empty string)
-| main_part | (_optional_) What is the main part this one is attached to. (default: self)
-| base_hp | (_optional_) The amount of hp this part has before any modification. (default: `60`)
-| opposite_part | (_optional_) What is the opposite part ot this one in case of a pair. (default: self)
-| essential | (_optional_) Whether the character dies if this part drops to `0` HP.
-| hit_size | (_optional_) Float. Size of the body part when doing an unweighted selection. (default: `0.`)
-| hit_size_relative | (_optional_) Float. Hit sizes for attackers who are smaller, equal in size, and bigger. (default: `[ 0, 0, 0 ]`
-| hit_difficulty | (_optional_) Float. How hard is it to hit a given body part, assuming "owner" is hit. Higher number means good hits will veer towards this part, lower means this part is unlikely to be hit by inaccurate attacks. Formula is `chance *= pow(hit_roll, hit_difficulty)` (default: `0`)
-| side | (_optional_) Which side this body part is on. Default both.
-| stylish_bonus | (_optional_) Mood bonus associated with wearing fancy clothing on this part. (default: `0`)
-| hot_morale_mod | (_optional_) Mood effect of being too hot on this part. (default: `0`)
-| cold_morale_mod | (_optional_) Mood effect of being too cold on this part. (default: `0`)
-| squeamish_penalty | (_optional_) Mood effect of wearing filthy clothing on this part. (default: `0`)
-| bionic_slots | (_optional_) How many bionic slots does this part have.
+| Identifier | Description |
+| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| id | (_mandatory_) Unique ID. Must be one continuous word, use underscores if necessary. |
+| name | (_mandatory_) In-game name displayed. |
+| accusative | (_mandatory_) Accusative form for this bodypart. |
+| heading | (_mandatory_) How it's displayed in headings. |
+| heading_multiple | (_optional_) Plural form of heading. (default: heading value) |
+| hp_bar_ui_text | (_optional_) How it's displayed next to the hp bar in the panel. (default: empty string) |
+| encumbrance_text | (_optional_) Description of effect when encumbered. (default: empty string) |
+| main_part | (_optional_) What is the main part this one is attached to. (default: self) |
+| base_hp | (_optional_) The amount of hp this part has before any modification. (default: `60`) |
+| opposite_part | (_optional_) What is the opposite part ot this one in case of a pair. (default: self) |
+| essential | (_optional_) Whether the character dies if this part drops to `0` HP. |
+| hit_size | (_optional_) Float. Size of the body part when doing an unweighted selection. (default: `0.`) |
+| hit_size_relative | (_optional_) Float. Hit sizes for attackers who are smaller, equal in size, and bigger. (default: `[ 0, 0, 0 ]` |
+| hit_difficulty | (_optional_) Float. How hard is it to hit a given body part, assuming "owner" is hit. Higher number means good hits will veer towards this part, lower means this part is unlikely to be hit by inaccurate attacks. Formula is `chance *= pow(hit_roll, hit_difficulty)` (default: `0`) |
+| side | (_optional_) Which side this body part is on. Default both. |
+| stylish_bonus | (_optional_) Mood bonus associated with wearing fancy clothing on this part. (default: `0`) |
+| hot_morale_mod | (_optional_) Mood effect of being too hot on this part. (default: `0`) |
+| cold_morale_mod | (_optional_) Mood effect of being too cold on this part. (default: `0`) |
+| squeamish_penalty | (_optional_) Mood effect of wearing filthy clothing on this part. (default: `0`) |
+| bionic_slots | (_optional_) How many bionic slots does this part have. |
```C++
- {
- "id": "torso",
- "type": "body_part",
- "name": "torso",
- "accusative": { "ctxt": "bodypart_accusative", "str": "torso" },
- "heading": "Torso",
- "heading_multiple": "Torso",
- "hp_bar_ui_text": "TORSO",
- "encumbrance_text": "Dodging and melee is hampered.",
- "main_part": "torso",
- "opposite_part": "torso",
- "hit_size": 45,
- "hit_size_relative": [ 20, 33.33, 36.57 ],
- "hit_difficulty": 1,
- "side": "both",
- "legacy_id": "TORSO",
- "stylish_bonus": 6,
- "hot_morale_mod": 2,
- "cold_morale_mod": 2,
- "squeamish_penalty": 6,
- "base_hp": 60,
- "bionic_slots": 80
- }
+{
+ "id": "torso",
+ "type": "body_part",
+ "name": "torso",
+ "accusative": { "ctxt": "bodypart_accusative", "str": "torso" },
+ "heading": "Torso",
+ "heading_multiple": "Torso",
+ "hp_bar_ui_text": "TORSO",
+ "encumbrance_text": "Dodging and melee is hampered.",
+ "main_part": "torso",
+ "opposite_part": "torso",
+ "hit_size": 45,
+ "hit_size_relative": [ 20, 33.33, 36.57 ],
+ "hit_difficulty": 1,
+ "side": "both",
+ "legacy_id": "TORSO",
+ "stylish_bonus": 6,
+ "hot_morale_mod": 2,
+ "cold_morale_mod": 2,
+ "squeamish_penalty": 6,
+ "base_hp": 60,
+ "bionic_slots": 80
+}
```
### Bionics
-| Identifier | Description
-|--- |---
-| id | (_mandatory_) Unique ID. Must be one continuous word, use underscores if necessary.
-| name | (_mandatory_) In-game name displayed.
-| description | (_mandatory_) In-game description.
-| flags | (_optional_) A list of flags. See JSON_FLAGS.md for supported values.
-| act_cost | (_optional_) How many kJ it costs to activate the bionic. Strings can be used "1 kJ"/"1000 J"/"1000000 mJ" (default: `0`)
-| deact_cost | (_optional_) How many kJ it costs to deactivate the bionic. Strings can be used "1 kJ"/"1000 J"/"1000000 mJ" (default: `0`)
-| react_cost | (_optional_) How many kJ it costs over time to keep this bionic active, does nothing without a non-zero "time". Strings can be used "1 kJ"/"1000 J"/"1000000 mJ" (default: `0`)
-| time | (_optional_) How long, when activated, between drawing cost. If 0, it draws power once. (default: `0`)
-| upgraded_bionic | (_optional_) Bionic that can be upgraded by installing this one.
-| available_upgrades | (_optional_) Upgrades available for this bionic, i.e. the list of bionics having this one referenced by `upgraded_bionic`.
-| encumbrance | (_optional_) A list of body parts and how much this bionic encumber them.
-| weight_capacity_bonus | (_optional_) Bonus to weight carrying capacity in grams, can be negative. Strings can be used - "5000 g" or "5 kg" (default: `0`)
-| weight_capacity_modifier | (_optional_) Factor modifying base weight carrying capacity. (default: `1`)
-| canceled_mutations | (_optional_) A list of mutations/traits that are removed when this bionic is installed (e.g. because it replaces the fault biological part).
-| included_bionics | (_optional_) Additional bionics that are installed automatically when this bionic is installed. This can be used to install several bionics from one CBM item, which is useful as each of those can be activated independently.
-| included | (_optional_) Whether this bionic is included with another. If true this bionic does not require a CBM item to be defined. (default: `false`)
-| env_protec | (_optional_) How much environmental protection does this bionic provide on the specified body parts.
-| bash_protec | (_optional_) How much bash protection does this bionic provide on the specified body parts.
-| cut_protec | (_optional_) How much cut protection does this bionic provide on the specified body parts.
-| bullet_protect | (_optional_) How much bullet protect does this bionic provide on the specified body parts.
-| occupied_bodyparts | (_optional_) A list of body parts occupied by this bionic, and the number of bionic slots it take on those parts.
-| capacity | (_optional_) Amount of power storage added by this bionic. Strings can be used "1 kJ"/"1000 J"/"1000000 mJ" (default: `0`)
-| fuel_options | (_optional_) A list of fuel that this bionic can use to produce bionic power.
-| is_remote_fueled | (_optional_) If true this bionic allows you to plug your power banks to an external power source (solar backpack, UPS, vehicle etc) via a cable. (default: `false`)
-| fuel_capacity | (_optional_) Volume of fuel this bionic can store.
-| fuel_efficiency | (_optional_) Fraction of fuel energy converted into power. (default: `0`)
-| fuel_multiplier | (_optional_) Multiplies the amount of fuel when loading into the bionic (default: `1`)
-| passive_fuel_efficiency | (_optional_) Fraction of fuel energy passively converted into power. Useful for CBM using PERPETUAL fuel like `muscle`, `wind` or `sun_light`. (default: `0`)
-| exothermic_power_gen | (_optional_) If true this bionic emits heat when producing power. (default: `false`)
-| coverage_power_gen_penalty | (_optional_) Fraction of coverage diminishing fuel_efficiency. Float between 0.0 and 1.0. (default: `nullopt`)
-| power_gen_emission | (_optional_) `emit_id` of the field emitted by this bionic when it produces energy. Emit_ids are defined in `emit.json`.
-| stat_bonus | (_optional_) List of passive stat bonus. Stat are designated as follow: "DEX", "INT", "STR", "PER".
-| enchantments | (_optional_) List of enchantments applied by this CBM (see MAGIC.md for instructions on enchantment. NB: enchantments are not necessarily magic.)
-| learned_spells | (_optional_) List of spells (with levels) you gain when installing this CBM, and lose when you uninstall this CBM. Spell classes are automatically gained.
-| fake_item | (_optional_) ID of fake item used by this bionic. Mandatory for gun and weapon bionics.
+| Identifier | Description |
+| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| id | (_mandatory_) Unique ID. Must be one continuous word, use underscores if necessary. |
+| name | (_mandatory_) In-game name displayed. |
+| description | (_mandatory_) In-game description. |
+| flags | (_optional_) A list of flags. See JSON_FLAGS.md for supported values. |
+| act_cost | (_optional_) How many kJ it costs to activate the bionic. Strings can be used "1 kJ"/"1000 J"/"1000000 mJ" (default: `0`) |
+| deact_cost | (_optional_) How many kJ it costs to deactivate the bionic. Strings can be used "1 kJ"/"1000 J"/"1000000 mJ" (default: `0`) |
+| react_cost | (_optional_) How many kJ it costs over time to keep this bionic active, does nothing without a non-zero "time". Strings can be used "1 kJ"/"1000 J"/"1000000 mJ" (default: `0`) |
+| time | (_optional_) How long, when activated, between drawing cost. If 0, it draws power once. (default: `0`) |
+| upgraded_bionic | (_optional_) Bionic that can be upgraded by installing this one. |
+| available_upgrades | (_optional_) Upgrades available for this bionic, i.e. the list of bionics having this one referenced by `upgraded_bionic`. |
+| encumbrance | (_optional_) A list of body parts and how much this bionic encumber them. |
+| weight_capacity_bonus | (_optional_) Bonus to weight carrying capacity in grams, can be negative. Strings can be used - "5000 g" or "5 kg" (default: `0`) |
+| weight_capacity_modifier | (_optional_) Factor modifying base weight carrying capacity. (default: `1`) |
+| canceled_mutations | (_optional_) A list of mutations/traits that are removed when this bionic is installed (e.g. because it replaces the fault biological part). |
+| included_bionics | (_optional_) Additional bionics that are installed automatically when this bionic is installed. This can be used to install several bionics from one CBM item, which is useful as each of those can be activated independently. |
+| included | (_optional_) Whether this bionic is included with another. If true this bionic does not require a CBM item to be defined. (default: `false`) |
+| env_protec | (_optional_) How much environmental protection does this bionic provide on the specified body parts. |
+| bash_protec | (_optional_) How much bash protection does this bionic provide on the specified body parts. |
+| cut_protec | (_optional_) How much cut protection does this bionic provide on the specified body parts. |
+| bullet_protect | (_optional_) How much bullet protect does this bionic provide on the specified body parts. |
+| occupied_bodyparts | (_optional_) A list of body parts occupied by this bionic, and the number of bionic slots it take on those parts. |
+| capacity | (_optional_) Amount of power storage added by this bionic. Strings can be used "1 kJ"/"1000 J"/"1000000 mJ" (default: `0`) |
+| fuel_options | (_optional_) A list of fuel that this bionic can use to produce bionic power. |
+| is_remote_fueled | (_optional_) If true this bionic allows you to plug your power banks to an external power source (solar backpack, UPS, vehicle etc) via a cable. (default: `false`) |
+| fuel_capacity | (_optional_) Volume of fuel this bionic can store. |
+| fuel_efficiency | (_optional_) Fraction of fuel energy converted into power. (default: `0`) |
+| fuel_multiplier | (_optional_) Multiplies the amount of fuel when loading into the bionic (default: `1`) |
+| passive_fuel_efficiency | (_optional_) Fraction of fuel energy passively converted into power. Useful for CBM using PERPETUAL fuel like `muscle`, `wind` or `sun_light`. (default: `0`) |
+| exothermic_power_gen | (_optional_) If true this bionic emits heat when producing power. (default: `false`) |
+| coverage_power_gen_penalty | (_optional_) Fraction of coverage diminishing fuel_efficiency. Float between 0.0 and 1.0. (default: `nullopt`) |
+| power_gen_emission | (_optional_) `emit_id` of the field emitted by this bionic when it produces energy. Emit_ids are defined in `emit.json`. |
+| stat_bonus | (_optional_) List of passive stat bonus. Stat are designated as follow: "DEX", "INT", "STR", "PER". |
+| enchantments | (_optional_) List of enchantments applied by this CBM (see MAGIC.md for instructions on enchantment. NB: enchantments are not necessarily magic.) |
+| learned_spells | (_optional_) List of spells (with levels) you gain when installing this CBM, and lose when you uninstall this CBM. Spell classes are automatically gained. |
+| fake_item | (_optional_) ID of fake item used by this bionic. Mandatory for gun and weapon bionics. |
```C++
{
@@ -552,16 +576,17 @@ This section describes each json file and their contents. Each json has their ow
}
```
-Bionics effects are defined in the code and new effects cannot be created through JSON alone.
-When adding a new bionic, if it's not included with another one, you must also add the corresponding CBM item in `data/json/items/bionics.json`. Even for a faulty bionic.
+Bionics effects are defined in the code and new effects cannot be created through JSON alone. When
+adding a new bionic, if it's not included with another one, you must also add the corresponding CBM
+item in `data/json/items/bionics.json`. Even for a faulty bionic.
### Dreams
-| Identifier | Description
-|--- |---
-| messages | List of potential dreams.
-| category | Mutation category needed to dream.
-| strength | Mutation category strength required (1 = 20-34, 2 = 35-49, 3 = 50+).
+| Identifier | Description |
+| ---------- | -------------------------------------------------------------------- |
+| messages | List of potential dreams. |
+| category | Mutation category needed to dream. |
+| strength | Mutation category strength required (1 = 20-34, 2 = 35-49, 3 = 50+). |
```C++
{
@@ -576,30 +601,29 @@ When adding a new bionic, if it's not included with another one, you must also a
### Disease
-| Identifier | Description
-|--- |---
-| id | Unique ID. Must be one continuous word, use underscores if necessary.
-| min_duration | The minimum duration the disease can last. Uses strings "x m", "x s","x d".
-| max_duration | The maximum duration the disease can last.
-| min_intensity | The minimum intensity of the effect applied by the disease
-| max_intensity | The maximum intensity of the effect.
-| health_threshold | The amount of health above which one is immune to the disease. Must be between -200 and 200. (optional )
-| symptoms | The effect applied by the disease.
-| affected_bodyparts | The list of bodyparts on which the effect is applied. (optional, default to num_bp)
-
+| Identifier | Description |
+| ------------------ | -------------------------------------------------------------------------------------------------------- |
+| id | Unique ID. Must be one continuous word, use underscores if necessary. |
+| min_duration | The minimum duration the disease can last. Uses strings "x m", "x s","x d". |
+| max_duration | The maximum duration the disease can last. |
+| min_intensity | The minimum intensity of the effect applied by the disease |
+| max_intensity | The maximum intensity of the effect. |
+| health_threshold | The amount of health above which one is immune to the disease. Must be between -200 and 200. (optional ) |
+| symptoms | The effect applied by the disease. |
+| affected_bodyparts | The list of bodyparts on which the effect is applied. (optional, default to num_bp) |
```json
- {
- "type": "disease_type",
- "id": "bad_food",
- "min_duration": "6 m",
- "max_duration": "1 h",
- "min_intensity": 1,
- "max_intensity": 1,
- "affected_bodyparts": [ "TORSO" ],
- "health_threshold": 100,
- "symptoms": "foodpoison"
- }
+{
+ "type": "disease_type",
+ "id": "bad_food",
+ "min_duration": "6 m",
+ "max_duration": "1 h",
+ "min_intensity": 1,
+ "max_intensity": 1,
+ "affected_bodyparts": ["TORSO"],
+ "health_threshold": 100,
+ "symptoms": "foodpoison"
+}
```
### Item Groups
@@ -607,11 +631,11 @@ When adding a new bionic, if it's not included with another one, you must also a
Item groups have been expanded, look at [the detailed docs](ITEM_SPAWN.md) to their new description.
The syntax listed here is still valid.
-| Identifier | Description
-|--- |---
-| id | Unique ID. Must be one continuous word, use underscores if necessary
-| items | List of potential item ID's. Chance of an item spawning is x/T, where X is the value linked to the specific item and T is the total of all item values in a group.
-| groups | ??
+| Identifier | Description |
+| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| id | Unique ID. Must be one continuous word, use underscores if necessary |
+| items | List of potential item ID's. Chance of an item spawning is x/T, where X is the value linked to the specific item and T is the total of all item values in a group. |
+| groups | ?? |
```C++
{
@@ -632,13 +656,13 @@ The syntax listed here is still valid.
When you sort your inventory by category, these are the categories that are displayed.
-| Identifier | Description
-|--- |---
-| id | Unique ID. Must be one continuous word, use underscores if necessary
-| name | The name of the category. This is what shows up in-game when you open the inventory.
-| zone | The corresponding loot_zone (see loot_zones.json)
-| sort_rank | Used to sort categories when displaying. Lower values are shown first
-| priority_zones | When set, items in this category will be sorted to the priority zone if the conditions are met. If the user does not have the priority zone in the zone manager, the items get sorted into zone set in the 'zone' property. It is a list of objects. Each object has 3 properties: ID: The id of a LOOT_ZONE (see LOOT_ZONES.json), filthy: boolean. setting this means filthy items of this category will be sorted to the priority zone, flags: array of flags
+| Identifier | Description |
+| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| id | Unique ID. Must be one continuous word, use underscores if necessary |
+| name | The name of the category. This is what shows up in-game when you open the inventory. |
+| zone | The corresponding loot_zone (see loot_zones.json) |
+| sort_rank | Used to sort categories when displaying. Lower values are shown first |
+| priority_zones | When set, items in this category will be sorted to the priority zone if the conditions are met. If the user does not have the priority zone in the zone manager, the items get sorted into zone set in the 'zone' property. It is a list of objects. Each object has 3 properties: ID: The id of a LOOT_ZONE (see LOOT_ZONES.json), filthy: boolean. setting this means filthy items of this category will be sorted to the priority zone, flags: array of flags |
```C++
{
@@ -652,35 +676,36 @@ When you sort your inventory by category, these are the categories that are disp
### Materials
-| Identifier | Description
-|--- |---
-| `id` | Unique ID. Lowercase snake_case. Must be one continuous word, use underscores if necessary.
-| `name` | In-game name displayed.
-| `bash_resist` | How well a material resists bashing damage.
-| `cut_resist` | How well a material resists cutting damage.
-| `bullet_resist` | How well a material resists bullet damage.
-| `acid_resist` | Ability of a material to resist acid.
-| `elec_resist` | Ability of a material to resist electricity.
-| `fire_resist` | Ability of a material to resist fire.
-| `chip_resist` | Returns resistance to being damaged by attacks against the item itself.
-| `bash_dmg_verb` | Verb used when material takes bashing damage.
-| `cut_dmg_verb` | Verb used when material takes cutting damage.
-| `dmg_adj` | Description added to damaged item in ascending severity.
-| `dmg_adj` | Adjectives used to describe damage states of a material.
-| `density` | Density of a material.
-| `vitamins` | Vitamins in a material. Usually overridden by item specific values.
-| `wind_resist` | Percentage 0-100. How effective this material is at stopping wind from getting through. Higher values are better. If none of the materials an item is made of specify a value, a default of 99 is assumed.
-| `warmth_when_wet` | Percentage of warmth retained when fully drenched. Default is 0.2.
-| `specific_heat_liquid` | Specific heat of a material when not frozen (J/(g K)). Default 4.186.
-| `specific_heat_solid` | Specific heat of a material when frozen (J/(g K)). Default 2.108.
-| `latent_heat` | Latent heat of fusion for a material (J/g). Default 334.
-| `freeze_point` | Freezing point of this material (F). Default 32 F ( 0 C ).
-| `edible` | Optional boolean. Default is false.
-| `rotting` | Optional boolean. Default is false.
-| `soft` | Optional boolean. Default is false.
-| `reinforces` | Optional boolean. Default is false.
-
-There are six -resist parameters: acid, bash, chip, cut, elec, and fire. These are integer values; the default is 0 and they can be negative to take more damage.
+| Identifier | Description |
+| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `id` | Unique ID. Lowercase snake_case. Must be one continuous word, use underscores if necessary. |
+| `name` | In-game name displayed. |
+| `bash_resist` | How well a material resists bashing damage. |
+| `cut_resist` | How well a material resists cutting damage. |
+| `bullet_resist` | How well a material resists bullet damage. |
+| `acid_resist` | Ability of a material to resist acid. |
+| `elec_resist` | Ability of a material to resist electricity. |
+| `fire_resist` | Ability of a material to resist fire. |
+| `chip_resist` | Returns resistance to being damaged by attacks against the item itself. |
+| `bash_dmg_verb` | Verb used when material takes bashing damage. |
+| `cut_dmg_verb` | Verb used when material takes cutting damage. |
+| `dmg_adj` | Description added to damaged item in ascending severity. |
+| `dmg_adj` | Adjectives used to describe damage states of a material. |
+| `density` | Density of a material. |
+| `vitamins` | Vitamins in a material. Usually overridden by item specific values. |
+| `wind_resist` | Percentage 0-100. How effective this material is at stopping wind from getting through. Higher values are better. If none of the materials an item is made of specify a value, a default of 99 is assumed. |
+| `warmth_when_wet` | Percentage of warmth retained when fully drenched. Default is 0.2. |
+| `specific_heat_liquid` | Specific heat of a material when not frozen (J/(g K)). Default 4.186. |
+| `specific_heat_solid` | Specific heat of a material when frozen (J/(g K)). Default 2.108. |
+| `latent_heat` | Latent heat of fusion for a material (J/g). Default 334. |
+| `freeze_point` | Freezing point of this material (F). Default 32 F ( 0 C ). |
+| `edible` | Optional boolean. Default is false. |
+| `rotting` | Optional boolean. Default is false. |
+| `soft` | Optional boolean. Default is false. |
+| `reinforces` | Optional boolean. Default is false. |
+
+There are six -resist parameters: acid, bash, chip, cut, elec, and fire. These are integer values;
+the default is 0 and they can be negative to take more damage.
```C++
{
@@ -716,25 +741,25 @@ There are six -resist parameters: acid, bash, chip, cut, elec, and fire. These a
#### Group definition
-| Identifier | Description
-|--- |---
-| `name` | Unique ID. Must be one continuous word, use underscores if necessary.
-| `default` | Default monster, automatically fills in any remaining spawn chances.
-| `monsters` | To choose a monster for spawning, the game creates 1000 entries and picks one. Each monster will have a number of entries equal to it's "freq" and the default monster will fill in the remaining. See the table below for how to build the single monster definitions.
-| `is_safe` | (bool) Check to not trigger safe-mode warning.
-| `is_animal` | (bool) Check if that group has only normal animals.
+| Identifier | Description |
+| ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `name` | Unique ID. Must be one continuous word, use underscores if necessary. |
+| `default` | Default monster, automatically fills in any remaining spawn chances. |
+| `monsters` | To choose a monster for spawning, the game creates 1000 entries and picks one. Each monster will have a number of entries equal to it's "freq" and the default monster will fill in the remaining. See the table below for how to build the single monster definitions. |
+| `is_safe` | (bool) Check to not trigger safe-mode warning. |
+| `is_animal` | (bool) Check if that group has only normal animals. |
#### Monster definition
-| Identifier | Description
-|--- |---
-| `monster` | The monster's unique ID, eg. `"mon_zombie"`.
-| `freq` | Chance of occurrence, x/1000.
-| `cost_multiplier` | How many monsters each monster in this definition should count as, if spawning a limited number of monsters.
-| `pack_size` | (_optional_) The minimum and maximum number of monsters in this group that should spawn together. (default: `[1,1]`)
-| `conditions` | Conditions limit when monsters spawn. Valid options: `SUMMER`, `WINTER`, `AUTUMN`, `SPRING`, `DAY`, `NIGHT`, `DUSK`, `DAWN`. Multiple Time-of-day conditions (`DAY`, `NIGHT`, `DUSK`, `DAWN`) will be combined together so that any of those conditions makes the spawn valid. Multiple Season conditions (`SUMMER`, `WINTER`, `AUTUMN`, `SPRING`) will be combined together so that any of those conditions makes the spawn valid.
-| `starts` | (_optional_) This entry becomes active after this time. (Measured in hours)
-| `ends` | (_optional_) This entry becomes inactive after this time. (Measured in hours)
+| Identifier | Description |
+| ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `monster` | The monster's unique ID, eg. `"mon_zombie"`. |
+| `freq` | Chance of occurrence, x/1000. |
+| `cost_multiplier` | How many monsters each monster in this definition should count as, if spawning a limited number of monsters. |
+| `pack_size` | (_optional_) The minimum and maximum number of monsters in this group that should spawn together. (default: `[1,1]`) |
+| `conditions` | Conditions limit when monsters spawn. Valid options: `SUMMER`, `WINTER`, `AUTUMN`, `SPRING`, `DAY`, `NIGHT`, `DUSK`, `DAWN`. Multiple Time-of-day conditions (`DAY`, `NIGHT`, `DUSK`, `DAWN`) will be combined together so that any of those conditions makes the spawn valid. Multiple Season conditions (`SUMMER`, `WINTER`, `AUTUMN`, `SPRING`) will be combined together so that any of those conditions makes the spawn valid. |
+| `starts` | (_optional_) This entry becomes active after this time. (Measured in hours) |
+| `ends` | (_optional_) This entry becomes inactive after this time. (Measured in hours) |
```C++
{
@@ -751,14 +776,14 @@ There are six -resist parameters: acid, bash, chip, cut, elec, and fire. These a
### Monster Factions
-| Identifier | Description
-|--- |---
-| `name` | Unique ID. Must be one continuous word, use underscores when necessary.
-| `base_faction` | Optional base faction. Relations to other factions are inherited from it and relations of other factions to this one check this.
-| `by_mood` | Be hostile towards this faction when angry, neutral otherwise. Default attitude to all other factions.
-| `neutral` | Always be neutral towards this faction.
-| `friendly` | Always be friendly towards this faction. By default a faction is friendly towards itself.
-| `hate` | Always be hostile towards this faction. Will change target to monsters of this faction if available.
+| Identifier | Description |
+| -------------- | -------------------------------------------------------------------------------------------------------------------------------- |
+| `name` | Unique ID. Must be one continuous word, use underscores when necessary. |
+| `base_faction` | Optional base faction. Relations to other factions are inherited from it and relations of other factions to this one check this. |
+| `by_mood` | Be hostile towards this faction when angry, neutral otherwise. Default attitude to all other factions. |
+| `neutral` | Always be neutral towards this faction. |
+| `friendly` | Always be friendly towards this faction. By default a faction is friendly towards itself. |
+| `hate` | Always be hostile towards this faction. Will change target to monsters of this faction if available. |
```C++
{
@@ -784,9 +809,12 @@ See MONSTERS.md
### Profession item substitution
-Defines item replacements that are applied to the starting items based upon the starting traits. This allows for example to replace wool items with non-wool items when the characters starts with the wool allergy trait.
+Defines item replacements that are applied to the starting items based upon the starting traits.
+This allows for example to replace wool items with non-wool items when the characters starts with
+the wool allergy trait.
-If the JSON objects contains a "item" member, it defines a replacement for the given item, like this:
+If the JSON objects contains a "item" member, it defines a replacement for the given item, like
+this:
```C++
{
@@ -798,12 +826,16 @@ If the JSON objects contains a "item" member, it defines a replacement for the g
]
}
```
+
This defines each item of type "sunglasses" shall be replaced with:
+
- an item "fitover_sunglasses" if the character has the "HYPEROPIC" trait,
- two items "fitover_sunglasses" if the character has the "MYOPIC" trait.
-If the JSON objects contains a "trait" member, it defines a replacement for multiple items that applies when the character has the given trait:
-```C++
+If the JSON objects contains a "trait" member, it defines a replacement for multiple items that
+applies when the character has the given trait:
+
+````C++
{
"type": "profession_item_substitutions",
"trait": "WOOLALLERGY",
@@ -827,21 +859,25 @@ Professions are specified as JSON object with "type" member set to "profession":
"id": "hunter",
...
}
-```
+````
The id member should be the unique id of the profession.
The following properties (mandatory, except if noted otherwise) are supported:
#### `description`
+
(string)
The in-game description.
#### `name`
+
(string or object with members "male" and "female")
-The in-game name, either one gender-neutral string, or an object with gender specific names. Example:
+The in-game name, either one gender-neutral string, or an object with gender specific names.
+Example:
+
```C++
"name": {
"male": "Groom",
@@ -850,25 +886,31 @@ The in-game name, either one gender-neutral string, or an object with gender spe
```
#### `points`
+
(integer)
Point cost of profession. Positive values cost points and negative values grant points.
#### `addictions`
+
(optional, array of addictions)
List of starting addictions. Each entry in the list should be an object with the following members:
+
- "type": the string id of the addiction (see JSON_FLAGS.md),
- "intensity": intensity (integer) of the addiction.
Example:
+
```C++
"addictions": [
{ "type": "nicotine", "intensity": 10 }
]
```
-Mods can modify this list (requires `"edit-mode": "modify"`, see example) via "add:addictions" and "remove:addictions", removing requires only the addiction type. Example:
+Mods can modify this list (requires `"edit-mode": "modify"`, see example) via "add:addictions" and
+"remove:addictions", removing requires only the addiction type. Example:
+
```C++
{
"type": "profession",
@@ -888,17 +930,22 @@ Mods can modify this list (requires `"edit-mode": "modify"`, see example) via "a
(optional, array of skill levels)
List of starting skills. Each entry in the list should be an object with the following members:
+
- "name": the string id of the skill (see skills.json),
-- "level": level (integer) of the skill. This is added to the skill level that can be chosen in the character creation.
+- "level": level (integer) of the skill. This is added to the skill level that can be chosen in the
+ character creation.
Example:
+
```C++
"skills": [
{ "name": "archery", "level": 2 }
]
```
-Mods can modify this list (requires `"edit-mode": "modify"`, see example) via "add:skills" and "remove:skills", removing requires only the skill id. Example:
+Mods can modify this list (requires `"edit-mode": "modify"`, see example) via "add:skills" and
+"remove:skills", removing requires only the skill id. Example:
+
```C++
{
"type": "profession",
@@ -911,16 +958,19 @@ Mods can modify this list (requires `"edit-mode": "modify"`, see example) via "a
{ "name": "computer", "level": 2 }
]
}
-
```
#### `items`
(optional, object with optional members "both", "male" and "female")
-Items the player starts with when selecting this profession. One can specify different items based on the gender of the character. Each lists of items should be an array of items ids, or pairs of item ids and snippet ids. Item ids may appear multiple times, in which case the item is created multiple times. The syntax for each of the three lists is identical.
+Items the player starts with when selecting this profession. One can specify different items based
+on the gender of the character. Each lists of items should be an array of items ids, or pairs of
+item ids and snippet ids. Item ids may appear multiple times, in which case the item is created
+multiple times. The syntax for each of the three lists is identical.
Example:
+
```C++
"items": {
"both": [
@@ -939,9 +989,13 @@ Example:
}
```
-This gives the player pants, two rocks, a t-shirt with the snippet id "allyourbase" (giving it a special description), socks and (depending on the gender) briefs or panties.
+This gives the player pants, two rocks, a t-shirt with the snippet id "allyourbase" (giving it a
+special description), socks and (depending on the gender) briefs or panties.
-Mods can modify the lists of existing professions. This requires the "edit-mode" member with value "modify" (see example). Adding items to the lists can be done with via "add:both" / "add:male" / "add:female". It allows the same content (it allows adding items with snippet ids). Removing items is done via "remove:both" / "remove:male" / "remove:female", which may only contain items ids.
+Mods can modify the lists of existing professions. This requires the "edit-mode" member with value
+"modify" (see example). Adding items to the lists can be done with via "add:both" / "add:male" /
+"add:female". It allows the same content (it allows adding items with snippet ids). Removing items
+is done via "remove:both" / "remove:male" / "remove:female", which may only contain items ids.
Example for mods:
@@ -963,22 +1017,22 @@ Example for mods:
}
```
-This mod removes one of the rocks (the other rock is still created), the t-shirt, adds a 2x4 item and gives female characters a t-shirt with the special snippet id.
+This mod removes one of the rocks (the other rock is still created), the t-shirt, adds a 2x4 item
+and gives female characters a t-shirt with the special snippet id.
#### `pets`
(optional, array of string mtype_ids )
-A list of strings, each is the same as a monster id
-player will start with these as tamed pets.
+A list of strings, each is the same as a monster id player will start with these as tamed pets.
#### `vehicle`
(optional, string vproto_id )
-A string, which is the same as a vehicle ( vproto_id )
-player will start with this as a nearby vehicle.
-( it will find the nearest road and place it there, then mark it as "remembered" on the overmap )
+A string, which is the same as a vehicle ( vproto_id ) player will start with this as a nearby
+vehicle. ( it will find the nearest road and place it there, then mark it as "remembered" on the
+overmap )
#### `flags`
@@ -1080,12 +1134,10 @@ Recipes represent both craft and uncraft (disassembly) recipes.
#### Overlapping recipe component requirements
-If recipes have requirements which overlap, this makes it more
-difficult for the game to calculate whether it is possible to craft a recipe at
-all.
+If recipes have requirements which overlap, this makes it more difficult for the game to calculate
+whether it is possible to craft a recipe at all.
-For example, the survivor telescope recipe has the following requirements
-(amongst others):
+For example, the survivor telescope recipe has the following requirements (amongst others):
```
1 high-quality lens
@@ -1095,24 +1147,22 @@ AND
These overlap because both list the high-quality lens.
-A small amount of overlap (such as the above) can be handled, but if you have
-too many component lists which overlap in too many ways, then you may see an
-error during recipe finalization that your recipe is too complex. In this
-case, the game may not be able to corectly predict whether it can be crafted.
+A small amount of overlap (such as the above) can be handled, but if you have too many component
+lists which overlap in too many ways, then you may see an error during recipe finalization that your
+recipe is too complex. In this case, the game may not be able to corectly predict whether it can be
+crafted.
-To work around this issue, if you do not wish to simplify the recipe
-requirements, then you can split your recipe into multiple steps. For
-example, if we wanted to simplify the above survivor telescope recipe we could
-introduce an intermediate item "survivor eyepiece", which requires one of
-either lens, and then the telescope would require a high-quality lens and an
-eyepiece. Overall, the requirements are the same, but neither recipe has any
-overlap.
+To work around this issue, if you do not wish to simplify the recipe requirements, then you can
+split your recipe into multiple steps. For example, if we wanted to simplify the above survivor
+telescope recipe we could introduce an intermediate item "survivor eyepiece", which requires one of
+either lens, and then the telescope would require a high-quality lens and an eyepiece. Overall, the
+requirements are the same, but neither recipe has any overlap.
-For more details, see [this pull
-request](https://github.com/CleverRaven/Cataclysm-DDA/pull/36657) and the
-[related issue](https://github.com/CleverRaven/Cataclysm-DDA/issues/32311).
+For more details, see [this pull request](https://github.com/CleverRaven/Cataclysm-DDA/pull/36657)
+and the [related issue](https://github.com/CleverRaven/Cataclysm-DDA/issues/32311).
### Constructions
+
```C++
"id": "constr_pit_spiked", // Identifier of the construction
"group": "spike_pit", // Construction group, used to provide description and group related constructions in UI (e.g. different stages of some construction).
@@ -1134,24 +1184,24 @@ request](https://github.com/CleverRaven/Cataclysm-DDA/pull/36657) and the
"vehicle_start": false, // (Optional, default false) Whether it will create a vehicle (for hardcode purposes)
"on_display": false, // (Optional, default true) Whether it will show in player's UI
"dark_craftable": true, // (Optional, default false) Whether it can be constructed in dark
-
```
### Construction groups
+
```C++
"id": "build_wooden_door", // Group identifier
"name": "Build Wooden Door", // Description string displayed in the construction menu
```
### Construction sequences
-Constuction sequences are needed for automatic calculation of basecamp blueprint requirements.
-Each construction sequence describes steps needed to construct specified terrain
-or furniture on an empty dirt tile.
-At any moment, only 1 construction sequence may be defined for any terrain or furniture.
+
+Constuction sequences are needed for automatic calculation of basecamp blueprint requirements. Each
+construction sequence describes steps needed to construct specified terrain or furniture on an empty
+dirt tile. At any moment, only 1 construction sequence may be defined for any terrain or furniture.
For convenience, each non-blacklisted construction recipe that starts from an empty dirt tile
-automatically generates a one-element-long construction sequence, but only as long as
-there are no other such construction recipes that would produce the same sequence
-and there isn't an explicitly defined sequence with same results.
+automatically generates a one-element-long construction sequence, but only as long as there are no
+other such construction recipes that would produce the same sequence and there isn't an explicitly
+defined sequence with same results.
```C++
"id": "f_workbench", // Sequence identifier
@@ -1167,30 +1217,29 @@ and there isn't an explicitly defined sequence with same results.
### Scent_types
-| Identifier | Description
-|--- |---
-| id | Unique ID. Must be one continuous word, use underscores if necessary.
-| receptive_species | Species able to track this scent. Must use valid ids defined in `species.json`
+| Identifier | Description |
+| ----------------- | ------------------------------------------------------------------------------ |
+| id | Unique ID. Must be one continuous word, use underscores if necessary. |
+| receptive_species | Species able to track this scent. Must use valid ids defined in `species.json` |
```json
- {
- "type": "scent_type",
- "id": "sc_flower",
- "receptive_species": [ "MAMMAL", "INSECT", "MOLLUSK", "BIRD" ]
- }
+{
+ "type": "scent_type",
+ "id": "sc_flower",
+ "receptive_species": ["MAMMAL", "INSECT", "MOLLUSK", "BIRD"]
+}
```
### Scores and Achievements
-Scores are defined in two or three steps based on *events*. To see what events
-exist and what data they contain, read [`event.h`](../src/event.h).
+Scores are defined in two or three steps based on _events_. To see what events exist and what data
+they contain, read [`event.h`](../src/event.h).
-Each event contains a certain set of fields. Each field has a string key and a
-`cata_variant` value. The fields should provide all the relevant information
-about the event.
+Each event contains a certain set of fields. Each field has a string key and a `cata_variant` value.
+The fields should provide all the relevant information about the event.
-For example, consider the `gains_skill_level` event. You can see this
-specification for it in `event.h`:
+For example, consider the `gains_skill_level` event. You can see this specification for it in
+`event.h`:
```C++
template<>
@@ -1205,39 +1254,37 @@ struct event_spec {
```
From this, you can see that this event type has three fields:
-* `character`, with the id of the character gaining the level.
-* `skill`, with the id of the skill gained.
-* `new_level`, with the integer level newly acquired in that skill.
-
-Events are generated by the game when in-game circumstances dictate. These
-events can be transformed and summarized in various ways. There are three
-concepts involved: event streams, event statistics, and scores.
-
-* Each `event_type` defined by the game generates an event stream.
-* Further event streams can be defined in json by applying an
- `event_transformation` to an existing event stream.
-* An `event_statistic` summarizes an event stream into a single value (usually
- a number, but other types of value are possible).
-* A `score` uses such a statistic to define an in-game score which players can
- see.
+
+- `character`, with the id of the character gaining the level.
+- `skill`, with the id of the skill gained.
+- `new_level`, with the integer level newly acquired in that skill.
+
+Events are generated by the game when in-game circumstances dictate. These events can be transformed
+and summarized in various ways. There are three concepts involved: event streams, event statistics,
+and scores.
+
+- Each `event_type` defined by the game generates an event stream.
+- Further event streams can be defined in json by applying an `event_transformation` to an existing
+ event stream.
+- An `event_statistic` summarizes an event stream into a single value (usually a number, but other
+ types of value are possible).
+- A `score` uses such a statistic to define an in-game score which players can see.
#### `event_transformation`
-An `event_transformation` can modify an event stream, producing another event
-stream.
+An `event_transformation` can modify an event stream, producing another event stream.
-The input stream to be transformed is specified either as an `"event_type"`, to
-use one of the built-in event type streams, or an `"event_transformation"`,
-to use another json-defined transformed event stream.
+The input stream to be transformed is specified either as an `"event_type"`, to use one of the
+built-in event type streams, or an `"event_transformation"`, to use another json-defined transformed
+event stream.
Any or all of the following alterations can be made to the event stream:
-* Add new fields to each event based on event field transformations. The event
- field transformations can be found in
- [`event_field_transformation.cpp`](../src/event_field_transformation.cpp).
-* Filter events based on the values they contain to produce a stream containing
- some subset of the input stream.
-* Drop some fields which are not of interest in the output stream.
+- Add new fields to each event based on event field transformations. The event field transformations
+ can be found in [`event_field_transformation.cpp`](../src/event_field_transformation.cpp).
+- Filter events based on the values they contain to produce a stream containing some subset of the
+ input stream.
+- Drop some fields which are not of interest in the output stream.
Here are examples of each modification:
@@ -1275,49 +1322,54 @@ Here are examples of each modification:
#### `event_statistic`
-As with `event_transformation`, an `event_statistic` requires an input event
-stream. That input stream can be specified in the same was as for
-`event_transformation`, via one of the following two entries:
+As with `event_transformation`, an `event_statistic` requires an input event stream. That input
+stream can be specified in the same was as for `event_transformation`, via one of the following two
+entries:
```C++
"event_type" : "avatar_moves" // Events of this built-in type
"event_transformation" : "moves_on_horse" // Events resulting from this json-defined transformation
```
-Then it specifies a particular `stat_type` and potentially additional details
-as follows:
+Then it specifies a particular `stat_type` and potentially additional details as follows:
The number of events:
+
```C++
"stat_type" : "count"
```
The sum of the numeric value in the specified field across all events:
+
```C++
"stat_type" : "total"
"field" : "damage"
```
The maximum of the numeric value in the specified field across all events:
+
```C++
"stat_type" : "maximum"
"field" : "damage"
```
The minimum of the numeric value in the specified field across all events:
+
```C++
"stat_type" : "minimum"
"field" : "damage"
```
-Assume there is only a single event to consider, and take the value of the
-given field for that unique event:
+Assume there is only a single event to consider, and take the value of the given field for that
+unique event:
+
```C++
"stat_type": "unique_value",
"field": "avatar_id"
```
Regardless of `stat_type`, each `event_statistic` can also have:
+
```C++
// Intended for use in describing scores and achievement requirements.
"description": "Number of things"
@@ -1325,15 +1377,14 @@ Regardless of `stat_type`, each `event_statistic` can also have:
#### `score`
-Scores simply associate a description to an event for formatting in tabulations
-of scores. The `description` specifies a string which is expected to contain a
-`%s` format specifier where the value of the statistic will be inserted.
+Scores simply associate a description to an event for formatting in tabulations of scores. The
+`description` specifies a string which is expected to contain a `%s` format specifier where the
+value of the statistic will be inserted.
-Note that even though most statistics yield an integer, you should still use
-`%s`.
+Note that even though most statistics yield an integer, you should still use `%s`.
-If the underlying statistic has a description, then the score description is
-optional. It defaults to ": ".
+If the underlying statistic has a description, then the score description is optional. It defaults
+to ": ".
```C++
"id": "score_headshots",
@@ -1344,11 +1395,11 @@ optional. It defaults to ": ".
#### `achievement`
-Achievements are goals for the player to aspire to, in the usual sense of the
-term as popularised in other games.
+Achievements are goals for the player to aspire to, in the usual sense of the term as popularised in
+other games.
-An achievement is specified via requirements, each of which is a constraint on
-an `event_statistic`. For example:
+An achievement is specified via requirements, each of which is a constraint on an `event_statistic`.
+For example:
```C++
{
@@ -1366,8 +1417,8 @@ an `event_statistic`. For example:
},
```
-The `"is"` field must be `">="`, `"<="` or `"anything"`. When it is not
-`"anything"` the `"target"` must be present, and must be an integer.
+The `"is"` field must be `">="`, `"<="` or `"anything"`. When it is not `"anything"` the `"target"`
+must be present, and must be an integer.
There are further optional fields:
@@ -1375,9 +1426,8 @@ There are further optional fields:
"hidden_by": [ "other_achievement_id" ]
```
-Give a list of other achievement ids. This achievement will be hidden (i.e.
-not appear in the achievements UI) until all of the achievements listed have
-been completed.
+Give a list of other achievement ids. This achievement will be hidden (i.e. not appear in the
+achievements UI) until all of the achievements listed have been completed.
Use this to prevent spoilers or to reduce clutter in the list of achievements.
@@ -1385,45 +1435,41 @@ Use this to prevent spoilers or to reduce clutter in the list of achievements.
"skill_requirements": [ { "skill": "archery", "is": ">=", "level": 5 } ]
```
-This allows a skill level requirement (either an upper or lower bound) on when
-the achievement can be claimed. The `"skill"` field uses the id of a skill.
-
-Note that like `"time_constraint"` below achievements can only be captured when
-a statistic listed in `"requirements"` changes.
+This allows a skill level requirement (either an upper or lower bound) on when the achievement can
+be claimed. The `"skill"` field uses the id of a skill.
+Note that like `"time_constraint"` below achievements can only be captured when a statistic listed
+in `"requirements"` changes.
```C++
"kill_requirements": [ { "faction": "ZOMBIE", "is": ">=", "count": 1 }, { "monster": "mon_sludge_crawler", "is": ">=", "count": 1 } ],
```
-This allows a kill requirement (either an upper or lower bound) on when
-the achievement can be claimed. Can be defined with either `"faction"` or
-`"monster"` as a target, using species ids from `species.json` or a
-specific monster id.
+This allows a kill requirement (either an upper or lower bound) on when the achievement can be
+claimed. Can be defined with either `"faction"` or `"monster"` as a target, using species ids from
+`species.json` or a specific monster id.
-Only one of the `"monster"`/`"faction"` fields can be used per entry. If neither
-are used, any monster will fulfill the requirements.
+Only one of the `"monster"`/`"faction"` fields can be used per entry. If neither are used, any
+monster will fulfill the requirements.
NPCs cannot currently be defined as a target.
-Note that like `"time_constraint"` below achievements can only be captured when
-a statistic listed in `"requirements"` changes.
+Note that like `"time_constraint"` below achievements can only be captured when a statistic listed
+in `"requirements"` changes.
```C++
"time_constraint": { "since": "game_start", "is": "<=", "target": "1 minute" }
```
-This allows putting a time limit (either a lower or upper bound) on when the
-achievement can be claimed. The `"since"` field can be either `"game_start"`
-or `"cataclysm"`. The `"target"` describes an amount of time since that
-reference point.
+This allows putting a time limit (either a lower or upper bound) on when the achievement can be
+claimed. The `"since"` field can be either `"game_start"` or `"cataclysm"`. The `"target"` describes
+an amount of time since that reference point.
-Note that achievements can only be captured when a statistic listed in their
-requirements changes. So, if you want an achievement which would normally be
-triggered by reaching some time threshold (such as "survived a certain amount
-of time") then you must place some requirement alongside it to trigger it after
-that time has passed. Pick some statistic which is likely to change often, and
-add an `"anything"` constraint on it. For example:
+Note that achievements can only be captured when a statistic listed in their requirements changes.
+So, if you want an achievement which would normally be triggered by reaching some time threshold
+(such as "survived a certain amount of time") then you must place some requirement alongside it to
+trigger it after that time has passed. Pick some statistic which is likely to change often, and add
+an `"anything"` constraint on it. For example:
```C++
{
@@ -1435,8 +1481,8 @@ add an `"anything"` constraint on it. For example:
},
```
-This is a simple "survive a day" but is triggered by waking up, so it will be
-completed when you wake up for the first time after 24 hours into the game.
+This is a simple "survive a day" but is triggered by waking up, so it will be completed when you
+wake up for the first time after 24 hours into the game.
### Skills
@@ -1552,7 +1598,6 @@ completed when you wake up for the first time after 24 hours into the game.
### Vehicle Groups
-
```C++
"id":"city_parked", // Unique ID. Must be one continuous word, use underscores if necessary
"vehicles":[ // List of potential vehicle ID's. Chance of a vehicle spawning is X/T, where
@@ -1635,6 +1680,7 @@ Vehicle components when installed on a vehicle.
```
### Vehicle Placement
+
```C++
"id":"road_straight_wrecks", // Unique ID. Must be one continuous word, use underscores if necessary
"locations":[ { // List of potential vehicle locations. When this placement is used, one of those locations will be chosen at random.
@@ -1665,6 +1711,7 @@ Vehicle components when installed on a vehicle.
```
### Vehicles
+
See also VEHICLE_JSON.md
```C++
@@ -1801,7 +1848,9 @@ Armor can be defined like this:
"power_armor" : false, // If this is a power armor item (those are special).
"valid_mods" : ["steel_padded"] // List of valid clothing mods. Note that if the clothing mod doesn't have "restricted" listed, this isn't needed.
```
+
Alternately, every item (book, tool, gun, even food) can be used as armor if it has armor_data:
+
```C++
"type" : "TOOL", // Or any other item type
... // same entries as for the type (e.g. same entries as for any tool),
@@ -1818,6 +1867,7 @@ Alternately, every item (book, tool, gun, even food) can be used as armor if it
```
### Pet Armor
+
Pet armor can be defined like this:
```C++
@@ -1832,7 +1882,9 @@ Pet armor can be defined like this:
"min_pet_vol: // the minimum volume of the pet that will fit into this armor. Volume in ml and L can be used - "50 ml" or "2 L".
"power_armor" : false, // If this is a power armor item (those are special).
```
+
Alternately, every item (book, tool, gun, even food) can be used as armor if it has armor_data:
+
```C++
"type" : "TOOL", // Or any other item type
... // same entries as for the type (e.g. same entries as for any tool),
@@ -1863,7 +1915,9 @@ Books can be defined like this:
"chapters" : 4, // Number of chapters (for fun only books), each reading "consumes" a chapter. Books with no chapters left are less fun (because the content is already known to the character).
"required_level" : 2 // Minimum skill level required to learn
```
+
Alternately, every item (tool, gun, even food) can be used as book if it has book_data:
+
```C++
"type" : "TOOL", // Or any other item type
... // same entries as for the type (e.g. same entries as for any tool),
@@ -1879,22 +1933,32 @@ Alternately, every item (tool, gun, even food) can be used as book if it has boo
}
```
-Since many book names are proper names, it's often necessary to explicitly specify
-the plural forms. The following is the game's convention on plural names of books:
+Since many book names are proper names, it's often necessary to explicitly specify the plural forms.
+The following is the game's convention on plural names of books:
1. For non-periodical books (textbooks, manuals, spellbooks, etc.),
- 1. If the book's singular name is a proper name, then the plural name is `copies of (singular name)`. For example, the plural name of `Lessons for the Novice Bowhunter` is `copies of Lessons for the Novice Bowhunter`.
- 2. Otherwise, the plural name is the usual plural of the singular name. For example, the plural name of `tactical baton defense manual` is `tactical baton defense manuals`
+ 1. If the book's singular name is a proper name, then the plural name is
+ `copies of (singular name)`. For example, the plural name of
+ `Lessons for the Novice Bowhunter` is `copies of Lessons for the Novice Bowhunter`.
+ 2. Otherwise, the plural name is the usual plural of the singular name. For example, the plural
+ name of `tactical baton defense manual` is `tactical baton defense manuals`
2. For periodicals (magazines and journals),
- 1. If the periodical's singular name is a proper name, and doesn't end with "Magazine", "Weekly", "Monthly", etc., the plural name is `issues of (singular name)`. For example, the plural name of `Archery for Kids` is `issues of Archery for Kids`.
- 2. Otherwise, the periodical's plural name is the usual plural of the singular name. For example, the plural name of `Crafty Crafter's Quarterly` is `Crafty Crafter's Quarterlies`.
+ 1. If the periodical's singular name is a proper name, and doesn't end with "Magazine", "Weekly",
+ "Monthly", etc., the plural name is `issues of (singular name)`. For example, the plural name
+ of `Archery for Kids` is `issues of Archery for Kids`.
+ 2. Otherwise, the periodical's plural name is the usual plural of the singular name. For example,
+ the plural name of `Crafty Crafter's Quarterly` is `Crafty Crafter's Quarterlies`.
3. For board games (represented internally as book items),
- 1. If the board game's singular name is a proper name, the plural is `sets of (singular name)`. For example, the plural name of `Picturesque` is `sets of Picturesque`.
- 2. Otherwise the plural name is the usual plural. For example, the plural of `deck of cards` is `decks of cards`.
+ 1. If the board game's singular name is a proper name, the plural is `sets of (singular name)`.
+ For example, the plural name of `Picturesque` is `sets of Picturesque`.
+ 2. Otherwise the plural name is the usual plural. For example, the plural of `deck of cards` is
+ `decks of cards`.
#### Conditional Naming
-The `conditional_names` field allows defining alternate names for items that will be displayed instead of (or in addition to) the default name, when specific conditions are met. Take the following (incomplete) definition for `sausage` as an example of the syntax:
+The `conditional_names` field allows defining alternate names for items that will be displayed
+instead of (or in addition to) the default name, when specific conditions are met. Take the
+following (incomplete) definition for `sausage` as an example of the syntax:
```json
{
@@ -1914,35 +1978,49 @@ The `conditional_names` field allows defining alternate names for items that wil
}
```
-You can list as many conditional names for a given item as you want. Each conditional name must consist of 3 elements:
+You can list as many conditional names for a given item as you want. Each conditional name must
+consist of 3 elements:
+
1. The condition type:
- - `COMPONENT_ID` searches all the components of the item (and all of *their* components, and so on) for an item with the condition string in their ID. The ID only needs to *contain* the condition, not match it perfectly (though it is case sensitive). For example, supplying a condition `mutant` would match `mutant_meat`.
- - `FLAG` which checks if an item has the specified flag (exact match).
+ - `COMPONENT_ID` searches all the components of the item (and all of _their_ components, and so
+ on) for an item with the condition string in their ID. The ID only needs to _contain_ the
+ condition, not match it perfectly (though it is case sensitive). For example, supplying a
+ condition `mutant` would match `mutant_meat`.
+ - `FLAG` which checks if an item has the specified flag (exact match).
2. The condition you want to look for.
-3. The name to use if a match is found. Follows all the rules of a standard `name` field, with valid keys being `str`, `str_pl`, and `ctxt`. You may use %s here, which will be replaced by the name of the item. Conditional names defined prior to this one are taken into account.
+3. The name to use if a match is found. Follows all the rules of a standard `name` field, with valid
+ keys being `str`, `str_pl`, and `ctxt`. You may use %s here, which will be replaced by the name
+ of the item. Conditional names defined prior to this one are taken into account.
-So, in the above example, if the sausage is made from mutant humanoid meat, and therefore both has the `CANNIBALISM` flag, *and* has a component with `mutant` in its ID:
-1. First, the item name is entirely replaced with "Mannwurst" if singular, or "Mannwursts" if plural.
-2. Next, it is replaced by "sinister %s", but %s is replaced with the name as it was before this step, resulting in "sinister Mannwurst" or "sinister Mannwursts".
+So, in the above example, if the sausage is made from mutant humanoid meat, and therefore both has
+the `CANNIBALISM` flag, _and_ has a component with `mutant` in its ID:
-NB: If `"str": "sinister %s"` was specified instead of `"str_sp": "sinister %s"`, the plural form would be automatically created as "sinister %ss", which would become "sinister Mannwurstss" which is of course one S too far. Rule of thumb: If you are using %s in the name, always specify an identical plural form unless you know exactly what you're doing!
+1. First, the item name is entirely replaced with "Mannwurst" if singular, or "Mannwursts" if
+ plural.
+2. Next, it is replaced by "sinister %s", but %s is replaced with the name as it was before this
+ step, resulting in "sinister Mannwurst" or "sinister Mannwursts".
+NB: If `"str": "sinister %s"` was specified instead of `"str_sp": "sinister %s"`, the plural form
+would be automatically created as "sinister %ss", which would become "sinister Mannwurstss" which is
+of course one S too far. Rule of thumb: If you are using %s in the name, always specify an identical
+plural form unless you know exactly what you're doing!
#### Color Key
When adding a new book, please use this color key:
-* Magazines: `pink`
-* “Paperbacks” Short enjoyment books (including novels): `light_cyan`
-* “Hardbacks” Long enjoyment books (including novels): `light_blue`
-* “Small textbook” Beginner level textbooks, guides and martial arts books: `green`
-* “Large textbook” Advanced level textbooks and advanced guides: `blue`
-* Religious books: `dark_gray`
-* “Printouts” (including spiral-bound, binders, and similar) Technical documents, (technical?) protocols, (lab) journals, personal diaries: `light_green`
-* Other reading material/non-books (use only if every other category does not apply): `light_gray`
+- Magazines: `pink`
+- “Paperbacks” Short enjoyment books (including novels): `light_cyan`
+- “Hardbacks” Long enjoyment books (including novels): `light_blue`
+- “Small textbook” Beginner level textbooks, guides and martial arts books: `green`
+- “Large textbook” Advanced level textbooks and advanced guides: `blue`
+- Religious books: `dark_gray`
+- “Printouts” (including spiral-bound, binders, and similar) Technical documents, (technical?)
+ protocols, (lab) journals, personal diaries: `light_green`
+- Other reading material/non-books (use only if every other category does not apply): `light_gray`
-A few exceptions to this color key may apply, for example for books that don’t are what they seem to be.
-Never use `yellow` and `red`, those colors are reserved for sounds and infrared vision.
+A few exceptions to this color key may apply, for example for books that don’t are what they seem to
+be. Never use `yellow` and `red`, those colors are reserved for sounds and infrared vision.
####CBMs
@@ -1998,7 +2076,9 @@ CBMs can be defined like this:
"watertight": false, // Can hold liquids, this is a required for it to be used for liquids. (optional, default: false)
"preserves": false, // Contents do not spoil. (optional, default: false)
```
+
Alternately, every item can be used as container:
+
```C++
"type": "ARMOR", // Any type is allowed here
... // same data as for the type
@@ -2006,8 +2086,10 @@ Alternately, every item can be used as container:
"contains": 200,
}
```
-This defines a armor (you need to add all the armor specific entries), but makes it usable as container.
-It could also be written as a generic item ("type": "GENERIC") with "armor_data" and "container_data" entries.
+
+This defines a armor (you need to add all the armor specific entries), but makes it usable as
+container. It could also be written as a generic item ("type": "GENERIC") with "armor_data" and
+"container_data" entries.
### Melee
@@ -2029,44 +2111,44 @@ It could also be written as a generic item ("type": "GENERIC") with "armor_data"
#### Melee `Weapon_category`
-| Weapon Category | Description
-| --- | ---
-| FIST_WEAPONS | Handheld weapons used to supplement fists in martial arts.
-| --- | ---
-| KNIVES | Short blade fixed onto a handle, for cutting or as weapon.
-| SHORT_SWORDS | One handed sword of length between a large knife and a 'proper' sword.
-| 1H_SWORDS | Sword meant to be wielded with one hand.
-| 2H_SWORDS | Sword meant to be wielded with both hands.
-| DUELING_SWORDS | Swords with thin profiles typically meant for stabbing.
-| BIONIC_SWORDS | Swords integrated into the body via bionics.
-| --- | ---
-| SAPS | Very short length of typically flexible material, with a weighted tip.
-| BATONS | Thin, balanced rod of strong material.
-| TONFAS | Unique looking T-shaped baton believed to originate from China.
-| CLUBS | Rod with a thicker striking head. May be one or two-handed.
-| QUARTERSTAVES | Long pole wielded with both hands.
-| MACES | Short one-handed weapon with a striking head firmly attached to a short handle.
-| MORNINGSTARS | Typically two-handed weapon with a striking head firmly attached to a long handle.
-| FLAILS | Striking head attached to handle by flexible rope/chain.
-| 1H_HAMMERS | Hammers meant to be wielded with a single hand.
-| 2H_HAMMERS | Hammers meant to be wielded with both hands.
-| --- | ---
-| HAND_AXES | Axe with a short handle, typically wielded in one hand, ocassionally thrown.
-| 1H_AXES | Axes meant to be wielded with one hand, typically with a handle longer than the handaxe.
-| 2H_AXES | Axes meant to be wielded with two hands.
-| --- | ---
-| WHIPS | Flexible tool used to strike at range.
-| --- | ---
-| HOOKED_POLES | Polearm with hooked end (Like a shepherd's crook)
-| SPEARS | Polearm with a long shaft and a sharp tip made of hard material.
-| PIKES | Very long spear that can only be wielded in two hands, very unwieldy.
-| GLAIVES | Polearm with a single-edged blade mounted on the end.
-
-| Weapon Styles | Description
-| --- | ---
-| MEDIEVAL_SWORDS | Swords associated with European culture.
-| JAPANESE_SWORDS | Swords associated with Japanese culture.
-| BIONIC_WEAPONRY | Weapons integrated into the body via bionics.
+| Weapon Category | Description |
+| --------------- | ---------------------------------------------------------------------------------------- |
+| FIST_WEAPONS | Handheld weapons used to supplement fists in martial arts. |
+| --- | --- |
+| KNIVES | Short blade fixed onto a handle, for cutting or as weapon. |
+| SHORT_SWORDS | One handed sword of length between a large knife and a 'proper' sword. |
+| 1H_SWORDS | Sword meant to be wielded with one hand. |
+| 2H_SWORDS | Sword meant to be wielded with both hands. |
+| DUELING_SWORDS | Swords with thin profiles typically meant for stabbing. |
+| BIONIC_SWORDS | Swords integrated into the body via bionics. |
+| --- | --- |
+| SAPS | Very short length of typically flexible material, with a weighted tip. |
+| BATONS | Thin, balanced rod of strong material. |
+| TONFAS | Unique looking T-shaped baton believed to originate from China. |
+| CLUBS | Rod with a thicker striking head. May be one or two-handed. |
+| QUARTERSTAVES | Long pole wielded with both hands. |
+| MACES | Short one-handed weapon with a striking head firmly attached to a short handle. |
+| MORNINGSTARS | Typically two-handed weapon with a striking head firmly attached to a long handle. |
+| FLAILS | Striking head attached to handle by flexible rope/chain. |
+| 1H_HAMMERS | Hammers meant to be wielded with a single hand. |
+| 2H_HAMMERS | Hammers meant to be wielded with both hands. |
+| --- | --- |
+| HAND_AXES | Axe with a short handle, typically wielded in one hand, ocassionally thrown. |
+| 1H_AXES | Axes meant to be wielded with one hand, typically with a handle longer than the handaxe. |
+| 2H_AXES | Axes meant to be wielded with two hands. |
+| --- | --- |
+| WHIPS | Flexible tool used to strike at range. |
+| --- | --- |
+| HOOKED_POLES | Polearm with hooked end (Like a shepherd's crook) |
+| SPEARS | Polearm with a long shaft and a sharp tip made of hard material. |
+| PIKES | Very long spear that can only be wielded in two hands, very unwieldy. |
+| GLAIVES | Polearm with a single-edged blade mounted on the end. |
+
+| Weapon Styles | Description |
+| --------------- | --------------------------------------------- |
+| MEDIEVAL_SWORDS | Swords associated with European culture. |
+| JAPANESE_SWORDS | Swords associated with Japanese culture. |
+| BIONIC_WEAPONRY | Weapons integrated into the body via bionics. |
### Gun
@@ -2099,7 +2181,9 @@ Guns can be defined like this:
"barrel_length": "30 mL", // Amount of volume lost when the barrel is sawn. Approximately 250 ml per inch is a decent approximation.
"valid_mod_locations": [ [ "accessories", 4 ], [ "grip", 1 ] ], // The valid locations for gunmods and the mount of slots for that location.
```
+
Alternately, every item (book, tool, armor, even food) can be used as gun if it has gun_data:
+
```json
"type": "TOOL", // Or any other item type
... // same entries as for the type (e.g. same entries as for any tool),
@@ -2112,38 +2196,38 @@ Alternately, every item (book, tool, armor, even food) can be used as gun if it
#### Ranged `Weapon_category`
-| Weapon Category | Description
-| --- | ---
-| BOWS | Elastic launching device for long-shafted projectiles.
-| S_XBOWS | Elastic launching device mounted on a frame to be triggered, pistol sized.
-| M_XBOWS | Elastic launching device mounted on a frame to be triggered.
-| SLINGSHOTS | Elastic, handheld launching device typically used for small round projectiles.
-| SLINGS | Projectile weapon using a cradle connected to two retention cords, used to fling blunt projectiles.
-| --- | ---
-| PISTOLS | Handgun with a chamber integral to the gun barrel. In-game, any handgun that isn't a revolver goes here.
-| REVOLVERS | Repeating handgun with a revolving cylinder containing multiple chambers.
-| SUBMACHINE_GUNS | Magazine fed automatic carbine designed to fire handgun cartridges.
-| RIFLES | Long barrelled firearms designed for more accurate shooting.
-| MACHINE_GUNS | Fully automatic autoloading firearm designed for sustained fire.
-| GATLING_GUNS | Rapid firing multi barrel firearm.
-| SHOTGUNS | Long barreled firearm generally designed to fire shotshells.
-| --- | ---
-| GRENADE_LAUNCHERS | Firearm designed to propel large caliber projectile typically loaded with warhead of some kind (smoke, gas, explosive, etc)
-| ROCKET_LAUNCHERS | Firearm that propels unguided, rocket-propelled projectile.
-| --- | ---
-| FLAMETHROWERS | Ranged incendiary device designed to propel a controllable jet of fire.
-| WATER_CANNONS | It fires water at your enemies.
-| SPRAY_GUNS | It spews chemicals at your enemies.
-
-| Action category | Description
-| --- | ---
-| 1SHOT | Ranged weapon with at least one barrel but no loading system/magazine.
-| AUTOLOADING | Ranged weapon with autoloading mechanisms like blowback, gas-operated, or recoil operated systems.
-| MANUAL_ACTION | Ranged weapon using manual actions like bolt/pump/lever.
-| ENERGY_WEAPONS | Weapon designed to utilize focused energy (sonic, electromagnetic waves, particle beams, etc). Both Ranged/Melee.
-| MAGNETIC | Weapon that propels payload via electromagnetism.
-| PNEUMATIC | Ranged weapon that propels payload via compressed air.
-| ELASTIC | Ranged weapon that propels payload via elastic band.
+| Weapon Category | Description |
+| ----------------- | --------------------------------------------------------------------------------------------------------------------------- |
+| BOWS | Elastic launching device for long-shafted projectiles. |
+| S_XBOWS | Elastic launching device mounted on a frame to be triggered, pistol sized. |
+| M_XBOWS | Elastic launching device mounted on a frame to be triggered. |
+| SLINGSHOTS | Elastic, handheld launching device typically used for small round projectiles. |
+| SLINGS | Projectile weapon using a cradle connected to two retention cords, used to fling blunt projectiles. |
+| --- | --- |
+| PISTOLS | Handgun with a chamber integral to the gun barrel. In-game, any handgun that isn't a revolver goes here. |
+| REVOLVERS | Repeating handgun with a revolving cylinder containing multiple chambers. |
+| SUBMACHINE_GUNS | Magazine fed automatic carbine designed to fire handgun cartridges. |
+| RIFLES | Long barrelled firearms designed for more accurate shooting. |
+| MACHINE_GUNS | Fully automatic autoloading firearm designed for sustained fire. |
+| GATLING_GUNS | Rapid firing multi barrel firearm. |
+| SHOTGUNS | Long barreled firearm generally designed to fire shotshells. |
+| --- | --- |
+| GRENADE_LAUNCHERS | Firearm designed to propel large caliber projectile typically loaded with warhead of some kind (smoke, gas, explosive, etc) |
+| ROCKET_LAUNCHERS | Firearm that propels unguided, rocket-propelled projectile. |
+| --- | --- |
+| FLAMETHROWERS | Ranged incendiary device designed to propel a controllable jet of fire. |
+| WATER_CANNONS | It fires water at your enemies. |
+| SPRAY_GUNS | It spews chemicals at your enemies. |
+
+| Action category | Description |
+| --------------- | ----------------------------------------------------------------------------------------------------------------- |
+| 1SHOT | Ranged weapon with at least one barrel but no loading system/magazine. |
+| AUTOLOADING | Ranged weapon with autoloading mechanisms like blowback, gas-operated, or recoil operated systems. |
+| MANUAL_ACTION | Ranged weapon using manual actions like bolt/pump/lever. |
+| ENERGY_WEAPONS | Weapon designed to utilize focused energy (sonic, electromagnetic waves, particle beams, etc). Both Ranged/Melee. |
+| MAGNETIC | Weapon that propels payload via electromagnetism. |
+| PNEUMATIC | Ranged weapon that propels payload via compressed air. |
+| ELASTIC | Ranged weapon that propels payload via elastic band. |
### Gunmod
@@ -2170,7 +2254,10 @@ Gun mods can be defined like this:
"reload_modifier": -10, // Optional field increasing or decreasing base gun reload time in percent
"min_str_required_mod": 14, // Optional field increasing or decreasing minimum strength required to use gun
```
-Alternately, every item (book, tool, armor, even food) can be used as a gunmod if it has gunmod_data:
+
+Alternately, every item (book, tool, armor, even food) can be used as a gunmod if it has
+gunmod_data:
+
```
"type": "TOOL", // Or any other item type
... // same entries as for the type (e.g. same entries as for any tool),
@@ -2182,6 +2269,7 @@ Alternately, every item (book, tool, armor, even food) can be used as a gunmod i
```
### Batteries
+
```C++
"type": "BATTERY", // Defines this as a BATTERY
... // Same entries as above for the generic item
@@ -2222,7 +2310,8 @@ Alternately, every item (book, tool, armor, even food) can be used as a gunmod i
### Seed Data
-Every item type can have optional seed data, if the item has seed data, it's considered a seed and can be planted:
+Every item type can have optional seed data, if the item has seed data, it's considered a seed and
+can be planted:
```C++
"seed_data" : {
@@ -2239,7 +2328,8 @@ Every item type can have optional seed data, if the item has seed data, it's con
### Brewing Data
-Every item type can have optional brewing data, if the item has brewing data, it can be placed in a vat and will ferment into a different item type.
+Every item type can have optional brewing data, if the item has brewing data, it can be placed in a
+vat and will ferment into a different item type.
Currently only vats can only accept and produce liquid items.
@@ -2252,8 +2342,7 @@ Currently only vats can only accept and produce liquid items.
### Relic Data
-Defines various (semi-)magical properties of items.
-See RELICS.md for
+Defines various (semi-)magical properties of items. See RELICS.md for
### Artifact Data
@@ -2305,6 +2394,7 @@ Possible values (see src/enums.h for an up-to-date list):
- `AEP_SICK` Decreases health over time
#### `effects_worn`
+
(optional, default: empty list)
Effects of the artifact when it's worn (it must be an armor item to be worn).
@@ -2323,7 +2413,8 @@ Possible values are the same as for effects_carried.
(optional, default: empty list)
-Effects of the artifact when it's activated (which require it to have a `"use_action": "ARTIFACT"` and it must have a non-zero max_charges value).
+Effects of the artifact when it's activated (which require it to have a `"use_action": "ARTIFACT"`
+and it must have a non-zero max_charges value).
Possible values (see src/artifact.h for an up-to-date list):
@@ -2373,9 +2464,12 @@ Every item type can have software data, it does not have any behavior:
### Fuel data
-Every item type can have fuel data that determines how much horse power it produces per unit consumed. Currently, gasses and plasmas cannot really be fuels.
+Every item type can have fuel data that determines how much horse power it produces per unit
+consumed. Currently, gasses and plasmas cannot really be fuels.
-If a fuel has the PERPETUAL flag, engines powered by it never use any fuel. This is primarily intended for the muscle pseudo-fuel, but mods may take advantage of it to make perpetual motion machines.
+If a fuel has the PERPETUAL flag, engines powered by it never use any fuel. This is primarily
+intended for the muscle pseudo-fuel, but mods may take advantage of it to make perpetual motion
+machines.
```C++
"fuel" : {
@@ -2397,7 +2491,9 @@ If a fuel has the PERPETUAL flag, engines powered by it never use any fuel. Thi
### Use Actions
-The contents of use_action fields can either be a string indicating a built-in function to call when the item is activated (defined in iuse.cpp), or one of several special definitions that invoke a more structured function.
+The contents of use_action fields can either be a string indicating a built-in function to call when
+the item is activated (defined in iuse.cpp), or one of several special definitions that invoke a
+more structured function.
```C++
"use_action": {
@@ -2650,11 +2746,16 @@ The contents of use_action fields can either be a string indicating a built-in f
### Random Descriptions
-Any item with a "snippet_category" entry will have random descriptions, based on that snippet category:
+Any item with a "snippet_category" entry will have random descriptions, based on that snippet
+category:
+
```
"snippet_category": "newspaper",
```
-The item descriptions are taken from snippets, which can be specified like this (the value of category must match the snippet_category in the item definition):
+
+The item descriptions are taken from snippets, which can be specified like this (the value of
+category must match the snippet_category in the item definition):
+
```C++
{
"type" : "snippet",
@@ -2663,7 +2764,9 @@ The item descriptions are taken from snippets, which can be specified like this
"text": "your flavor text"
}
```
+
or several snippets at once:
+
```C++
{
"type" : "snippet",
@@ -2677,14 +2780,18 @@ or several snippets at once:
"text": [ "your flavor text", "another flavor text", "more flavor" ]
}
```
-Multiple snippets for the same category are possible and actually recommended. The game will select a random one for each item of that type.
+
+Multiple snippets for the same category are possible and actually recommended. The game will select
+a random one for each item of that type.
One can also put the snippets directly in the item definition:
+
```
"snippet_category": [ "text 1", "text 2", "text 3" ],
```
-This will automatically create a snippet category specific to that item and populate that category with the given snippets.
-The format also support snippet ids like above.
+
+This will automatically create a snippet category specific to that item and populate that category
+with the given snippets. The format also support snippet ids like above.
# `json/` JSONs
@@ -2747,35 +2854,41 @@ Should always be `harvest` to mark the object as a harvest definition.
#### `message`
-Optional message to be printed when a creature using the harvest definition is butchered. May be omitted from definition.
+Optional message to be printed when a creature using the harvest definition is butchered. May be
+omitted from definition.
#### `entries`
-Array of dictionaries defining possible items produced on butchering and their likelihood of being produced.
-`drop` value should be the `id` string of the item to be produced.
+Array of dictionaries defining possible items produced on butchering and their likelihood of being
+produced. `drop` value should be the `id` string of the item to be produced.
-`type` value should be a string with the associated body part the item comes from.
- Acceptable values are as follows:
- `flesh`: the "meat" of the creature.
- `offal`: the "organs" of the creature. these are removed when field dressing.
- `skin`: the "skin" of the creature. this is what is ruined while quartering.
- `bone`: the "bones" of the creature. you will get some amount of these from field dressing, and the rest of them from butchering the carcass.
- `bionic`: an item gained by dissecting the creature. not restricted to CBMs.
- `bionic_group`: an item group that will give an item by dissecting a creature. not restricted to groups containing CBMs.
+`type` value should be a string with the associated body part the item comes from. Acceptable values
+are as follows: `flesh`: the "meat" of the creature. `offal`: the "organs" of the creature. these
+are removed when field dressing. `skin`: the "skin" of the creature. this is what is ruined while
+quartering. `bone`: the "bones" of the creature. you will get some amount of these from field
+dressing, and the rest of them from butchering the carcass. `bionic`: an item gained by dissecting
+the creature. not restricted to CBMs. `bionic_group`: an item group that will give an item by
+dissecting a creature. not restricted to groups containing CBMs.
-`flags` value should be an array of strings. It's the flags that will be added to te items of that entry upon harvesting.
+`flags` value should be an array of strings. It's the flags that will be added to te items of that
+entry upon harvesting.
-`faults` value should be an array of `fault_id` strings. It's the faults that will be added to te items of that entry upon harvesting.
+`faults` value should be an array of `fault_id` strings. It's the faults that will be added to te
+items of that entry upon harvesting.
For every `type` other then `bionic` and `bionic_group` following entries scale the results:
- `base_num` value should be an array with two elements in which the first defines the minimum number of the corresponding item produced and the second defines the maximum number.
- `scale_num` value should be an array with two elements, increasing the minimum and maximum drop numbers respectively by element value * survival skill.
- `max` upper limit after `bas_num` and `scale_num` are calculated using
- `mass_ratio` value is a multiplier of how much of the monster's weight comprises the associated item. to conserve mass, keep between 0 and 1 combined with all drops. This overrides `base_num`, `scale_num` and `max`
-
-
-For `type`s: `bionic` and `bionic_group` following enrties can scale the results:
- `max` this value (in contrary to `max` for other `type`s) corresponds to maximum butchery roll that will be passed to check_butcher_cbm() in activity_handlers.cpp; view check_butcher_cbm() to see corresponding distribution chances for roll values passed to that function
+`base_num` value should be an array with two elements in which the first defines the minimum number
+of the corresponding item produced and the second defines the maximum number. `scale_num` value
+should be an array with two elements, increasing the minimum and maximum drop numbers respectively
+by element value * survival skill. `max` upper limit after `bas_num` and `scale_num` are calculated
+using `mass_ratio` value is a multiplier of how much of the monster's weight comprises the
+associated item. to conserve mass, keep between 0 and 1 combined with all drops. This overrides
+`base_num`, `scale_num` and `max`
+
+For `type`s: `bionic` and `bionic_group` following enrties can scale the results: `max` this value
+(in contrary to `max` for other `type`s) corresponds to maximum butchery roll that will be passed to
+check_butcher_cbm() in activity_handlers.cpp; view check_butcher_cbm() to see corresponding
+distribution chances for roll values passed to that function
### Weapon Category
@@ -2789,7 +2902,8 @@ Used to classify weapons (guns or melee) into groups, mainly for use in martial
}
```
-`"name"` is a translatable string used for UI display in martial arts UI, while ID is used for JSON entries.
+`"name"` is a translatable string used for UI display in martial arts UI, while ID is used for JSON
+entries.
### Furniture
@@ -2827,12 +2941,14 @@ Same as for terrain, see below in the chapter "Common to furniture and terrain".
#### `move_cost_mod`
-Movement cost modifier (`-10` = impassable, `0` = no change). This is added to the movecost of the underlying terrain.
+Movement cost modifier (`-10` = impassable, `0` = no change). This is added to the movecost of the
+underlying terrain.
#### `light_emitted`
-How much light the furniture produces. 10 will light the tile it's on brightly, 15 will light that tile and the tiles around it brightly, as well as slightly lighting the tiles two tiles away from the source.
-For examples: An overhead light is 120, a utility light, 240, and a console, 10.
+How much light the furniture produces. 10 will light the tile it's on brightly, 15 will light that
+tile and the tiles around it brightly, as well as slightly lighting the tiles two tiles away from
+the source. For examples: An overhead light is 120, a utility light, 240, and a console, 10.
#### `required_str`
@@ -2840,21 +2956,25 @@ Strength required to move the furniture around. Negative values indicate an unmo
#### `crafting_pseudo_item`
-(Optional) Id of an item (tool) that will be available for crafting when this furniture is range (the furniture acts as an item of that type). Can be made into an array.
-Example: `"crafting_pseudo_item": [ "fake_gridwelder", "fake_gridsolderingiron" ],`
+(Optional) Id of an item (tool) that will be available for crafting when this furniture is range
+(the furniture acts as an item of that type). Can be made into an array. Example:
+`"crafting_pseudo_item": [ "fake_gridwelder", "fake_gridsolderingiron" ],`
#### `workbench`
-(Optional) Can craft here. Must specify a speed multiplier, allowed mass, and allowed volume. Mass/volume over these limits incur a speed penalty. Must be paired with a `"workbench"` `examine_action` to function.
+(Optional) Can craft here. Must specify a speed multiplier, allowed mass, and allowed volume.
+Mass/volume over these limits incur a speed penalty. Must be paired with a `"workbench"`
+`examine_action` to function.
#### `plant_data`
-(Optional) This is a plant. Must specify a plant transform, and a base depending on context. You can also add a harvest or growth multiplier if it has the `GROWTH_HARVEST` flag.
+(Optional) This is a plant. Must specify a plant transform, and a base depending on context. You can
+also add a harvest or growth multiplier if it has the `GROWTH_HARVEST` flag.
#### `surgery_skill_multiplier`
-(Optional) Surgery skill multiplier (float) applied by this furniture to survivor standing next to it for the purpose of surgery.
-
+(Optional) Surgery skill multiplier (float) applied by this furniture to survivor standing next to
+it for the purpose of surgery.
### Terrain
@@ -2894,35 +3014,46 @@ Same as for furniture, see below in the chapter "Common to furniture and terrain
#### `move_cost`
-Move cost to move through. A value of 0 means it's impassable (e.g. wall). You should not use negative values. The positive value is multiple of 50 move points, e.g. value 2 means the player uses 2\*50 = 100 move points when moving across the terrain.
+Move cost to move through. A value of 0 means it's impassable (e.g. wall). You should not use
+negative values. The positive value is multiple of 50 move points, e.g. value 2 means the player
+uses 2\*50 = 100 move points when moving across the terrain.
#### `light_emitted`
-How much light the terrain emits. 10 will light the tile it's on brightly, 15 will light that tile and the tiles around it brightly, as well as slightly lighting the tiles two tiles away from the source.
-For examples: An overhead light is 120, a utility light, 240, and a console, 10.
+How much light the terrain emits. 10 will light the tile it's on brightly, 15 will light that tile
+and the tiles around it brightly, as well as slightly lighting the tiles two tiles away from the
+source. For examples: An overhead light is 120, a utility light, 240, and a console, 10.
#### `trap`
(Optional) Id of the build-in trap of that terrain.
-For example the terrain `t_pit` has the built-in trap `tr_pit`. Every tile in the game that has the terrain `t_pit` also has, therefore, an implicit trap `tr_pit` on it. The two are inseparable (the player can not deactivate the built-in trap, and changing the terrain will also deactivate the built-in trap).
+For example the terrain `t_pit` has the built-in trap `tr_pit`. Every tile in the game that has the
+terrain `t_pit` also has, therefore, an implicit trap `tr_pit` on it. The two are inseparable (the
+player can not deactivate the built-in trap, and changing the terrain will also deactivate the
+built-in trap).
A built-in trap prevents adding any other trap explicitly (by the player and through mapgen).
#### `harvestable`
-(Optional) If defined, the terrain is harvestable. This entry defines the item type of the harvested fruits (or similar). To make this work, you also have to set one of the `harvest_*` `examine_action` functions.
+(Optional) If defined, the terrain is harvestable. This entry defines the item type of the harvested
+fruits (or similar). To make this work, you also have to set one of the `harvest_*` `examine_action`
+functions.
#### `transforms_into`
-(Optional) Used for various transformation of the terrain. If defined, it must be a valid terrain id. Used for example:
+(Optional) Used for various transformation of the terrain. If defined, it must be a valid terrain
+id. Used for example:
- When harvesting fruits (to change into the harvested form of the terrain).
-- In combination with the `HARVESTED` flag and `harvest_season` to change the harvested terrain back into a terrain with fruits.
+- In combination with the `HARVESTED` flag and `harvest_season` to change the harvested terrain back
+ into a terrain with fruits.
#### `harvest_season`
-(Optional) On of "SUMMER", "AUTUMN", "WINTER", "SPRING", used in combination with the "HARVESTED" flag to revert the terrain back into a terrain that can be harvested.
+(Optional) On of "SUMMER", "AUTUMN", "WINTER", "SPRING", used in combination with the "HARVESTED"
+flag to revert the terrain back into a terrain that can be harvested.
#### `roof`
@@ -2934,7 +3065,10 @@ Some values can/must be set for terrain and furniture. They have the same meanin
#### `id`
-Id of the object, this should be unique among all object of that type (all terrain or all furniture types). By convention (but technically not needed), the id should have the "f_" prefix for furniture and the "t_" prefix for terrain. This is not translated. It must not be changed later as that would break save compatibility.
+Id of the object, this should be unique among all object of that type (all terrain or all furniture
+types). By convention (but technically not needed), the id should have the "f_" prefix for furniture
+and the "t_" prefix for terrain. This is not translated. It must not be changed later as that would
+break save compatibility.
#### `name`
@@ -2946,16 +3080,21 @@ Displayed name of the object. This will be translated.
#### `connects_to`
-(Optional) The group of terrains to which this terrain connects. This affects tile rotation and connections, and the ASCII symbol drawn by terrain with the flag "AUTO_WALL_SYMBOL".
+(Optional) The group of terrains to which this terrain connects. This affects tile rotation and
+connections, and the ASCII symbol drawn by terrain with the flag "AUTO_WALL_SYMBOL".
Current values:
+
- `CHAINFENCE`
- `RAILING`
- `WALL`
- `WATER`
- `WOODFENCE`
-Example: `-` , `|` , `X` and `Y` are terrain which share the same `connects_to` value. `O` does not have it. `X` and `Y` also have the `AUTO_WALL_SYMBOL` flag. `X` will be drawn as a T-intersection (connected to west, south and east), `Y` will be drawn as a horizontal line (going from west to east, no connection to south).
+Example: `-` , `|` , `X` and `Y` are terrain which share the same `connects_to` value. `O` does not
+have it. `X` and `Y` also have the `AUTO_WALL_SYMBOL` flag. `X` will be drawn as a T-intersection
+(connected to west, south and east), `Y` will be drawn as a horizontal line (going from west to
+east, no connection to south).
```
-X- -Y-
@@ -2964,16 +3103,15 @@ Example: `-` , `|` , `X` and `Y` are terrain which share the same `connects_to`
#### `symbol`
-ASCII symbol of the object as it appears in the game. The symbol string must be exactly one character long. This can also be an array of 4 strings, which define the symbol during the different seasons. The first entry defines the symbol during spring. If it's not an array, the same symbol is used all year round.
+ASCII symbol of the object as it appears in the game. The symbol string must be exactly one
+character long. This can also be an array of 4 strings, which define the symbol during the different
+seasons. The first entry defines the symbol during spring. If it's not an array, the same symbol is
+used all year round.
#### `comfort`
-How comfortable this terrain/furniture is. Impact ability to fall asleep on it.
- uncomfortable = -999,
- neutral = 0,
- slightly_comfortable = 3,
- comfortable = 5,
- very_comfortable = 10
+How comfortable this terrain/furniture is. Impact ability to fall asleep on it. uncomfortable =
+-999, neutral = 0, slightly_comfortable = 3, comfortable = 5, very_comfortable = 10
#### `floor_bedding_warmth`
@@ -2981,21 +3119,28 @@ Bonus warmth offered by this terrain/furniture when used to sleep.
#### `bonus_fire_warmth_feet`
-Increase warmth received on feet from nearby fire (default = 300)
+Increase warmth received on feet from nearby fire (default = 300)
#### `looks_like`
-id of a similar item that this item looks like. The tileset loader will try to load the tile for that item if this item doesn't have a tile. looks_like entries are implicitly chained, so if 'throne' has looks_like 'big_chair' and 'big_chair' has looks_like 'chair', a throne will be displayed using the chair tile if tiles for throne and big_chair do not exist. If a tileset can't find a tile for any item in the looks_like chain, it will default to the ascii symbol.
+id of a similar item that this item looks like. The tileset loader will try to load the tile for
+that item if this item doesn't have a tile. looks_like entries are implicitly chained, so if
+'throne' has looks_like 'big_chair' and 'big_chair' has looks_like 'chair', a throne will be
+displayed using the chair tile if tiles for throne and big_chair do not exist. If a tileset can't
+find a tile for any item in the looks_like chain, it will default to the ascii symbol.
#### `color` or `bgcolor`
-Color of the object as it appears in the game. "color" defines the foreground color (no background color), "bgcolor" defines a solid background color. As with the "symbol" value, this can be an array with 4 entries, each entry being the color during the different seasons.
+Color of the object as it appears in the game. "color" defines the foreground color (no background
+color), "bgcolor" defines a solid background color. As with the "symbol" value, this can be an array
+with 4 entries, each entry being the color during the different seasons.
> **NOTE**: You must use ONLY ONE of "color" or "bgcolor"
#### `max_volume`
-(Optional) Maximal volume that can be used to store items here. Volume in ml and L can be used - "50 ml" or "2 L"
+(Optional) Maximal volume that can be used to store items here. Volume in ml and L can be used - "50
+ml" or "2 L"
#### `examine_action`
@@ -3003,7 +3148,11 @@ Color of the object as it appears in the game. "color" defines the foreground co
#### `close" And "open`
-(Optional) The value should be a terrain id (inside a terrain entry) or a furniture id (in a furniture entry). If either is defined, the player can open / close the object. Opening / closing will change the object at the affected tile to the given one. For example one could have object "safe_c", which "open"s to "safe_o" and "safe_o" in turn "close"s to "safe_c". Here "safe_c" and "safe_o" are two different terrain (or furniture) types that have different properties.
+(Optional) The value should be a terrain id (inside a terrain entry) or a furniture id (in a
+furniture entry). If either is defined, the player can open / close the object. Opening / closing
+will change the object at the affected tile to the given one. For example one could have object
+"safe_c", which "open"s to "safe_o" and "safe_o" in turn "close"s to "safe_c". Here "safe_c" and
+"safe_o" are two different terrain (or furniture) types that have different properties.
#### `bash`
@@ -3011,15 +3160,18 @@ Color of the object as it appears in the game. "color" defines the foreground co
#### `deconstruct`
-(Optional) Defines whether the object can be deconstructed and if so, what the results shall be. See "map_deconstruct_info".
+(Optional) Defines whether the object can be deconstructed and if so, what the results shall be. See
+"map_deconstruct_info".
#### `pry`
-(Optional) Defines whether the object can be pried open and if so, what happens. See "prying_result".
+(Optional) Defines whether the object can be pried open and if so, what happens. See
+"prying_result".
#### `map_bash_info`
-Defines the various things that happen when the player or something else bashes terrain or furniture.
+Defines the various things that happen when the player or something else bashes terrain or
+furniture.
```C++
{
@@ -3049,27 +3201,38 @@ Defines the various things that happen when the player or something else bashes
TODO
#### `sound`, `sound_fail`, `sound_vol`, `sound_fail_vol`
-(Optional) Sound and volume of the sound that appears upon destroying the bashed object or upon unsuccessfully bashing it (failing). The sound strings are translated (and displayed to the player).
+
+(Optional) Sound and volume of the sound that appears upon destroying the bashed object or upon
+unsuccessfully bashing it (failing). The sound strings are translated (and displayed to the player).
#### `furn_set`, `ter_set`
-The terrain / furniture that will be set when the original is destroyed. This is mandatory for bash entries in terrain, but optional for entries in furniture (it defaults to no furniture).
+The terrain / furniture that will be set when the original is destroyed. This is mandatory for bash
+entries in terrain, but optional for entries in furniture (it defaults to no furniture).
#### `explosive`
-(Optional) If greater than 0, destroying the object causes an explosion with this strength (see `game::explosion`).
+
+(Optional) If greater than 0, destroying the object causes an explosion with this strength (see
+`game::explosion`).
#### `destroy_only`
+
TODO
#### `bash_below`
+
TODO
#### `tent_centers`, `collapse_radius`
-(Optional) For furniture that is part of tents, this defines the id of the center part, which will be destroyed as well when other parts of the tent get bashed. The center is searched for in the given "collapse_radius" radius, it should match the size of the tent.
+
+(Optional) For furniture that is part of tents, this defines the id of the center part, which will
+be destroyed as well when other parts of the tent get bashed. The center is searched for in the
+given "collapse_radius" radius, it should match the size of the tent.
#### `items`
-(Optional) An item group (inline) or an id of an item group, see doc/ITEM_SPAWN.md. The default subtype is "collection". Upon successful bashing, items from that group will be spawned.
+(Optional) An item group (inline) or an id of an item group, see doc/ITEM_SPAWN.md. The default
+subtype is "collection". Upon successful bashing, items from that group will be spawned.
#### `map_deconstruct_info`
@@ -3083,77 +3246,97 @@ TODO
#### `furn_set`, `ter_set`
-The terrain / furniture that will be set after the original has been deconstructed. "furn_set" is optional (it defaults to no furniture), "ter_set" is only used upon "deconstruct" entries in terrain and is mandatory there.
+The terrain / furniture that will be set after the original has been deconstructed. "furn_set" is
+optional (it defaults to no furniture), "ter_set" is only used upon "deconstruct" entries in terrain
+and is mandatory there.
#### `items`
-(Optional) An item group (inline) or an id of an item group, see doc/ITEM_SPAWN.md. The default subtype is "collection". Upon deconstruction the object, items from that group will be spawned.
+(Optional) An item group (inline) or an id of an item group, see doc/ITEM_SPAWN.md. The default
+subtype is "collection". Upon deconstruction the object, items from that group will be spawned.
#### `prying_result`
```JSON
{
- "success_message": "You pry open the door.",
- "fail_message": "You pry, but cannot pry open the door.",
- "break_message": "You damage the door!",
- "pry_quality": 2,
- "pry_bonus_mult": 3,
- "noise": 12,
- "break_noise": 10,
- "sound": "crunch!",
- "break_sound": "crack!",
- "breakable": true,
- "difficulty": 8,
- "new_ter_type": "t_door_o",
- "new_furn_type": "f_crate_o",
- "break_ter_type": "t_door_b",
- "break_furn_type": "f_null",
- "break_items": [
- { "item": "2x4", "prob": 25 },
- { "item": "wood_panel", "prob": 10 },
- { "item": "splinter", "count": [ 1, 2 ] },
- { "item": "nail", "charges": [ 0, 2 ] }
- ]
+ "success_message": "You pry open the door.",
+ "fail_message": "You pry, but cannot pry open the door.",
+ "break_message": "You damage the door!",
+ "pry_quality": 2,
+ "pry_bonus_mult": 3,
+ "noise": 12,
+ "break_noise": 10,
+ "sound": "crunch!",
+ "break_sound": "crack!",
+ "breakable": true,
+ "difficulty": 8,
+ "new_ter_type": "t_door_o",
+ "new_furn_type": "f_crate_o",
+ "break_ter_type": "t_door_b",
+ "break_furn_type": "f_null",
+ "break_items": [
+ { "item": "2x4", "prob": 25 },
+ { "item": "wood_panel", "prob": 10 },
+ { "item": "splinter", "count": [1, 2] },
+ { "item": "nail", "charges": [0, 2] }
+ ]
}
```
#### `new_ter_type`, `new_furn_type`
-The terrain / furniture that will be set after the original has been pried open. "furn_set" is optional (it defaults to no furniture), "ter_set" is only used upon "pry" entries in terrain and is mandatory there.
+The terrain / furniture that will be set after the original has been pried open. "furn_set" is
+optional (it defaults to no furniture), "ter_set" is only used upon "pry" entries in terrain and is
+mandatory there.
#### `success_message`, `fail_message`, `break_message`
-Messages displayed on successfully prying open the terrain / furniture, on failure, or should the terrain / furniture break into something else from a failed pry attempt. `break_message` is only required if `breakable` is set to true and `break_ter_type` is defined.
+Messages displayed on successfully prying open the terrain / furniture, on failure, or should the
+terrain / furniture break into something else from a failed pry attempt. `break_message` is only
+required if `breakable` is set to true and `break_ter_type` is defined.
#### `pry_quality`, `pry_bonus_mult`, `difficulty`
-This determines the minimum prying quality needed to attempt to pry open the terrain / furniture, and the chance of successfully prying it open. From iuse.cpp:
+This determines the minimum prying quality needed to attempt to pry open the terrain / furniture,
+and the chance of successfully prying it open. From iuse.cpp:
```C++
- int diff = pry->difficulty;
- diff -= ( ( pry_level - pry->pry_quality ) * pry->pry_bonus_mult );
+int diff = pry->difficulty;
+diff -= ( ( pry_level - pry->pry_quality ) * pry->pry_bonus_mult );
```
```C++
- if( dice( 4, diff ) < dice( 4, p->str_cur ) ) {
- p->add_msg_if_player( m_good, pry->success_message );
+if( dice( 4, diff ) < dice( 4, p->str_cur ) ) {
+ p->add_msg_if_player( m_good, pry->success_message );
```
-`difficulty` is compared to the character's current strength during the prying attempt. If the available prying quality of your tool is above the required `pry_quality`, effective difficulty is reduced at a rate determined by `pry_bonus_mult`. `pry_bonus_mult` is optional, and defaults to 1 (meaning for every level of prying quality your tool has beyond the minimum, `diff` will be reduced by 1).
+`difficulty` is compared to the character's current strength during the prying attempt. If the
+available prying quality of your tool is above the required `pry_quality`, effective difficulty is
+reduced at a rate determined by `pry_bonus_mult`. `pry_bonus_mult` is optional, and defaults to 1
+(meaning for every level of prying quality your tool has beyond the minimum, `diff` will be reduced
+by 1).
#### `noise`, `break_noise`, 'sound', 'break_sound'
-If `noise` is specified, successfully prying the terrain / furniture open will play `sound` at the specified volume. If `breakable` is true and `break_noise` is specified, breaking the terrain / furniture on a failed prying attempt will play `break_noise` at the specified volume.
+If `noise` is specified, successfully prying the terrain / furniture open will play `sound` at the
+specified volume. If `breakable` is true and `break_noise` is specified, breaking the terrain /
+furniture on a failed prying attempt will play `break_noise` at the specified volume.
-If `noise` or `break_noise` are not specified then prying or breaking the terrain / furniture in question will simply be silent and make no sound, making them optional. `sound` and `break_sound` are also optional, with default messages of "crunch!" and "crack!" respectively.
+If `noise` or `break_noise` are not specified then prying or breaking the terrain / furniture in
+question will simply be silent and make no sound, making them optional. `sound` and `break_sound`
+are also optional, with default messages of "crunch!" and "crack!" respectively.
#### `breakable`, `break_ter_type`, `break_furn_type`
-If `breakable` is set to true, then failed pry attempts have a chance of breaking the terrain / furniture instead. For terrain, `break_ter_type` is mandatory if `breakable` is set to true, `break_furn_type` is optional and defaults to null.
+If `breakable` is set to true, then failed pry attempts have a chance of breaking the terrain /
+furniture instead. For terrain, `break_ter_type` is mandatory if `breakable` is set to true,
+`break_furn_type` is optional and defaults to null.
#### `break_items`
-(Optional) An item group (inline) or an id of an item group, see doc/ITEM_SPAWN.md. The default subtype is "collection". If `breakable` is set to true, breaking the object from a failed pry attempt will spawn items from that group.
+(Optional) An item group (inline) or an id of an item group, see doc/ITEM_SPAWN.md. The default
+subtype is "collection". If `breakable` is set to true, breaking the object from a failed pry
+attempt will spawn items from that group.
### `plant_data`
@@ -3168,19 +3351,23 @@ If `breakable` is set to true, then failed pry attempts have a chance of breakin
#### `transform`
-What the `PLANT` furniture turn into when it grows a stage, or what a `PLANTABLE` furniture turns into when it is planted on.
+What the `PLANT` furniture turn into when it grows a stage, or what a `PLANTABLE` furniture turns
+into when it is planted on.
#### `base`
-What the 'base' furniture of the `PLANT` furniture is - what it would be if there was not a plant growing there. Used when monsters 'eat' the plant to preserve what furniture it is.
+What the 'base' furniture of the `PLANT` furniture is - what it would be if there was not a plant
+growing there. Used when monsters 'eat' the plant to preserve what furniture it is.
#### `growth_multiplier`
-A flat multiplier on the growth speed on the plant. For numbers greater than one, it will take longer to grow, and for numbers less than one it will take less time to grow.
+A flat multiplier on the growth speed on the plant. For numbers greater than one, it will take
+longer to grow, and for numbers less than one it will take less time to grow.
#### `harvest_multiplier`
-A flat multiplier on the harvest count of the plant. For numbers greater than one, the plant will give more produce from harvest, for numbers less than one it will give less produce from harvest.
+A flat multiplier on the harvest count of the plant. For numbers greater than one, the plant will
+give more produce from harvest, for numbers less than one it will give less produce from harvest.
### clothing_mod
@@ -3221,16 +3408,19 @@ The id member should be the unique id of the scenario.
The following properties (mandatory, except if noted otherwise) are supported:
-
## `description`
+
(string)
The in-game description.
## `name`
+
(string or object with members "male" and "female")
-The in-game name, either one gender-neutral string, or an object with gender specific names. Example:
+The in-game name, either one gender-neutral string, or an object with gender specific names.
+Example:
+
```C++
"name": {
"male": "Runaway groom",
@@ -3239,16 +3429,21 @@ The in-game name, either one gender-neutral string, or an object with gender spe
```
## `points`
+
(integer)
Point cost of scenario. Positive values cost points and negative values grant points.
## `items`
+
(optional, object with optional members "both", "male" and "female")
-Items the player starts with when selecting this scenario. One can specify different items based on the gender of the character. Each lists of items should be an array of items ids. Ids may appear multiple times, in which case the item is created multiple times.
+Items the player starts with when selecting this scenario. One can specify different items based on
+the gender of the character. Each lists of items should be an array of items ids. Ids may appear
+multiple times, in which case the item is created multiple times.
Example:
+
```C++
"items": {
"both": [
@@ -3260,11 +3455,14 @@ Example:
"female": [ "panties" ]
}
```
+
This gives the player pants, two rocks and (depending on the gender) briefs or panties.
-Mods can modify the lists of an existing scenario via "add:both" / "add:male" / "add:female" and "remove:both" / "remove:male" / "remove:female".
+Mods can modify the lists of an existing scenario via "add:both" / "add:male" / "add:female" and
+"remove:both" / "remove:male" / "remove:female".
Example for mods:
+
```C++
{
"type": "scenario",
@@ -3278,6 +3476,7 @@ Example for mods:
```
## `flags`
+
(optional, array of strings)
A list of flags. TODO: document those flags here.
@@ -3285,6 +3484,7 @@ A list of flags. TODO: document those flags here.
Mods can modify this via "add:flags" and "remove:flags".
## `cbms`
+
(optional, array of strings)
A list of CBM ids that are implanted in the character.
@@ -3292,40 +3492,57 @@ A list of CBM ids that are implanted in the character.
Mods can modify this via "add:CBMs" and "remove:CBMs".
## `traits", "forced_traits", "forbidden_traits`
+
(optional, array of strings)
-Lists of trait/mutation ids. Traits in "forbidden_traits" are forbidden and can't be selected during the character creation. Traits in "forced_traits" are automatically added to character. Traits in "traits" enables them to be chosen, even if they are not starting traits.
+Lists of trait/mutation ids. Traits in "forbidden_traits" are forbidden and can't be selected during
+the character creation. Traits in "forced_traits" are automatically added to character. Traits in
+"traits" enables them to be chosen, even if they are not starting traits.
-Mods can modify this via "add:traits" / "add:forced_traits" / "add:forbidden_traits" and "remove:traits" / "remove:forced_traits" / "remove:forbidden_traits".
+Mods can modify this via "add:traits" / "add:forced_traits" / "add:forbidden_traits" and
+"remove:traits" / "remove:forced_traits" / "remove:forbidden_traits".
## `allowed_locs`
+
(optional, array of strings)
-A list of starting location ids (see start_locations.json) that can be chosen when using this scenario.
+A list of starting location ids (see start_locations.json) that can be chosen when using this
+scenario.
## `start_name`
+
(string)
-The name that is shown for the starting location. This is useful if the scenario allows several starting locations, but the game can not list them all at once in the scenario description. Example: if the scenario allows to start somewhere in the wilderness, the starting locations would contain forest and fields, but its "start_name" may simply be "wilderness".
+The name that is shown for the starting location. This is useful if the scenario allows several
+starting locations, but the game can not list them all at once in the scenario description. Example:
+if the scenario allows to start somewhere in the wilderness, the starting locations would contain
+forest and fields, but its "start_name" may simply be "wilderness".
## `professions`
+
(optional, array of strings)
-A list of allowed professions that can be chosen when using this scenario. The first entry is the default profession. If this is empty, all professions are allowed.
+A list of allowed professions that can be chosen when using this scenario. The first entry is the
+default profession. If this is empty, all professions are allowed.
## `map_special`
+
(optional, string)
Add a map special to the starting location, see JSON_FLAGS for the possible specials.
## `missions`
+
(optional, array of strings)
-A list of mission ids that will be started and assigned to the player at the start of the game. Only missions with the ORIGIN_GAME_START origin are allowed. The last mission in the list will be the active mission, if multiple missions are assigned.
+A list of mission ids that will be started and assigned to the player at the start of the game. Only
+missions with the ORIGIN_GAME_START origin are allowed. The last mission in the list will be the
+active mission, if multiple missions are assigned.
# Starting locations
Starting locations are specified as JSON object with "type" member set to "start_location":
+
```C++
{
"type": "start_location",
@@ -3341,138 +3558,148 @@ The id member should be the unique id of the location.
The following properties (mandatory, except if noted otherwise) are supported:
## `name`
+
(string)
The in-game name of the location.
## `target`
+
(string)
-The id of an overmap terrain type (see overmap_terrain.json) of the starting location. The game will chose a random place with that terrain.
+The id of an overmap terrain type (see overmap_terrain.json) of the starting location. The game will
+chose a random place with that terrain.
## `flags`
+
(optional, array of strings)
Arbitrary flags. Mods can modify this via "add:flags" / "remove:flags". TODO: document them.
### `tile_config`
-Each tileset has a tile_config.json describing how to map the contents of a sprite sheet to various tile identifiers, different orientations, etc. The ordering of the overlays used for displaying mutations can be controlled as well. The ordering can be used to override the default ordering provided in `mutation_ordering.json`. Example:
+
+Each tileset has a tile_config.json describing how to map the contents of a sprite sheet to various
+tile identifiers, different orientations, etc. The ordering of the overlays used for displaying
+mutations can be controlled as well. The ordering can be used to override the default ordering
+provided in `mutation_ordering.json`. Example:
```C++
- { // whole file is a single object
- "tile_info": [ // tile_info is mandatory
- {
- "height": 32,
- "width": 32,
- "iso" : true, // Optional. Indicates an isometric tileset. Defaults to false.
- "pixelscale" : 2 // Optional. Sets a multiplier for resizing a tileset. Defaults to 1.
- }
- ],
- "tiles-new": [ // tiles-new is an array of sprite sheets
- { // alternately, just one "tiles" array
- "file": "tiles.png", // file containing sprites in a grid
- "tiles": [ // array with one entry per tile
- {
- "id": "10mm", // id is how the game maps things to sprites
- "fg": 1, // lack of prefix mostly indicates items
- "bg": 632, // fg and bg can be sprite indexes in the image
- "rotates": false
- },
- {
- "id": "t_wall", // "t_" indicates terrain
- "fg": [2918, 2919, 2918, 2919], // 2 or 4 sprite numbers indicates pre-rotated
- "bg": 633,
- "rotates": true,
- "multitile": true,
- "additional_tiles": [ // connected/combined versions of sprite
- { // or variations, see below
- "id": "center",
- "fg": [2919, 2918, 2919, 2918]
- },
- {
- "id": "corner",
- "fg": [2924, 2922, 2922, 2923]
- },
- {
- "id": "end_piece",
- "fg": [2918, 2919, 2918, 2919]
- },
- {
- "id": "t_connection",
- "fg": [2919, 2918, 2919, 2918]
- },
- {
- "id": "unconnected",
- "fg": 2235
- }
- ]
- },
- {
- "id": "vp_atomic_lamp", // "vp_" vehicle part
- "fg": 3019,
- "bg": 632,
- "rotates": false,
- "multitile": true,
- "additional_tiles": [
- {
- "id": "broken", // variant sprite
- "fg": 3021
- }
- ]
- },
- {
- "id": "t_dirt",
- "rotates": false,
- "fg": [
- { "weight":50, "sprite":640}, // weighted random variants
- { "weight":1, "sprite":3620},
- { "weight":1, "sprite":3621},
- { "weight":1, "sprite":3622}
- ]
- },
- {
- "id": [
- "overlay_mutation_GOURMAND", // character overlay for mutation
- "overlay_mutation_male_GOURMAND", // overlay for specified gender
- "overlay_mutation_active_GOURMAND" // overlay for activated mutation
- ],
- "fg": 4040
- }
- ]
- },
- { // second entry in tiles-new
- "file": "moretiles.png", // another sprite sheet
- "tiles": [
- {
- "id": ["xxx","yyy"], // define two ids at once
- "fg": 1,
- "bg": 234
- }
- ]
- }
- ],
- "overlay_ordering": [
- {
- "id" : "WINGS_BAT", // mutation name, in a string or array of strings
- "order" : 1000 // range from 0 - 9999, 9999 being the topmost layer
- },
- {
- "id" : [ "PLANTSKIN", "BARK" ], // mutation name, in a string or array of strings
- "order" : 3500 // order is applied to all items in the array
- },
- {
- "id" : "bio_armor_torso", // Overlay order of bionics is controlled in the same way
- "order" : 500
- }
- ]
- }
+{ // whole file is a single object
+ "tile_info": [ // tile_info is mandatory
+ {
+ "height": 32,
+ "width": 32,
+ "iso" : true, // Optional. Indicates an isometric tileset. Defaults to false.
+ "pixelscale" : 2 // Optional. Sets a multiplier for resizing a tileset. Defaults to 1.
+ }
+ ],
+ "tiles-new": [ // tiles-new is an array of sprite sheets
+ { // alternately, just one "tiles" array
+ "file": "tiles.png", // file containing sprites in a grid
+ "tiles": [ // array with one entry per tile
+ {
+ "id": "10mm", // id is how the game maps things to sprites
+ "fg": 1, // lack of prefix mostly indicates items
+ "bg": 632, // fg and bg can be sprite indexes in the image
+ "rotates": false
+ },
+ {
+ "id": "t_wall", // "t_" indicates terrain
+ "fg": [2918, 2919, 2918, 2919], // 2 or 4 sprite numbers indicates pre-rotated
+ "bg": 633,
+ "rotates": true,
+ "multitile": true,
+ "additional_tiles": [ // connected/combined versions of sprite
+ { // or variations, see below
+ "id": "center",
+ "fg": [2919, 2918, 2919, 2918]
+ },
+ {
+ "id": "corner",
+ "fg": [2924, 2922, 2922, 2923]
+ },
+ {
+ "id": "end_piece",
+ "fg": [2918, 2919, 2918, 2919]
+ },
+ {
+ "id": "t_connection",
+ "fg": [2919, 2918, 2919, 2918]
+ },
+ {
+ "id": "unconnected",
+ "fg": 2235
+ }
+ ]
+ },
+ {
+ "id": "vp_atomic_lamp", // "vp_" vehicle part
+ "fg": 3019,
+ "bg": 632,
+ "rotates": false,
+ "multitile": true,
+ "additional_tiles": [
+ {
+ "id": "broken", // variant sprite
+ "fg": 3021
+ }
+ ]
+ },
+ {
+ "id": "t_dirt",
+ "rotates": false,
+ "fg": [
+ { "weight":50, "sprite":640}, // weighted random variants
+ { "weight":1, "sprite":3620},
+ { "weight":1, "sprite":3621},
+ { "weight":1, "sprite":3622}
+ ]
+ },
+ {
+ "id": [
+ "overlay_mutation_GOURMAND", // character overlay for mutation
+ "overlay_mutation_male_GOURMAND", // overlay for specified gender
+ "overlay_mutation_active_GOURMAND" // overlay for activated mutation
+ ],
+ "fg": 4040
+ }
+ ]
+ },
+ { // second entry in tiles-new
+ "file": "moretiles.png", // another sprite sheet
+ "tiles": [
+ {
+ "id": ["xxx","yyy"], // define two ids at once
+ "fg": 1,
+ "bg": 234
+ }
+ ]
+ }
+ ],
+ "overlay_ordering": [
+ {
+ "id" : "WINGS_BAT", // mutation name, in a string or array of strings
+ "order" : 1000 // range from 0 - 9999, 9999 being the topmost layer
+ },
+ {
+ "id" : [ "PLANTSKIN", "BARK" ], // mutation name, in a string or array of strings
+ "order" : 3500 // order is applied to all items in the array
+ },
+ {
+ "id" : "bio_armor_torso", // Overlay order of bionics is controlled in the same way
+ "order" : 500
+ }
+ ]
+}
```
# Mutation overlay ordering
-The file `mutation_ordering.json` defines the order that visual mutation and bionic overlays are rendered on a character ingame. The layering value from 0 (bottom) - 9999 (top) sets the order.
+The file `mutation_ordering.json` defines the order that visual mutation and bionic overlays are
+rendered on a character ingame. The layering value from 0 (bottom) - 9999 (top) sets the order.
Example:
+
```C++
[
{
@@ -3501,26 +3728,32 @@ Example:
```
## `id`
+
(string)
-The internal ID of the mutation. Can be provided as a single string, or an array of strings. The order value provided will be applied to all items in the array.
+The internal ID of the mutation. Can be provided as a single string, or an array of strings. The
+order value provided will be applied to all items in the array.
## `order`
+
(integer)
-The ordering value of the mutation overlay. Values range from 0 - 9999, 9999 being the topmost drawn layer. Mutations that are not in any list will default to 9999.
+The ordering value of the mutation overlay. Values range from 0 - 9999, 9999 being the topmost drawn
+layer. Mutations that are not in any list will default to 9999.
# MOD_INFO
Also see [MODDING.md](MODDING.md).
-Object with `MOD_INFO` type describes the mod itself.
-Each mod must have exactly one `MOD_INFO`, and unlike other types of objects from mods it is loaded on game launch,
-before the title screen shows up. As such, any and all errors related to it will show up before the title screen shows up.
+Object with `MOD_INFO` type describes the mod itself. Each mod must have exactly one `MOD_INFO`, and
+unlike other types of objects from mods it is loaded on game launch, before the title screen shows
+up. As such, any and all errors related to it will show up before the title screen shows up.
-Current convention is to put your `MOD_INFO` in `mod_info.json` file within the root directory of the mod.
+Current convention is to put your `MOD_INFO` in `mod_info.json` file within the root directory of
+the mod.
Example:
+
```C++
[
{
@@ -3559,9 +3792,11 @@ Example:
# MOD tileset
-MOD tileset defines additional sprite sheets. It is specified as JSON object with `type` member set to `mod_tileset`.
+MOD tileset defines additional sprite sheets. It is specified as JSON object with `type` member set
+to `mod_tileset`.
Example:
+
```C++
[
{
@@ -3589,39 +3824,28 @@ Example:
```
## `compatibility`
+
(string)
-The internal ID of the compatible tilesets. MOD tileset is only applied when base tileset's ID exists in this field.
+The internal ID of the compatible tilesets. MOD tileset is only applied when base tileset's ID
+exists in this field.
## `tiles-new`
-Setting of sprite sheets. Same as `tiles-new` field in `tile_config`. Sprite files are loaded from the same folder json file exists.
+Setting of sprite sheets. Same as `tiles-new` field in `tile_config`. Sprite files are loaded from
+the same folder json file exists.
# Field types
- {
- "type": "field_type", // this is a field type
- "id": "fd_gum_web", // id of the field
- "immune_mtypes": [ "mon_spider_gum" ], // list of monster immune to this field
- "intensity_levels": [
- { "name": "shadow", // name of this level of intensity
- "light_override": 3.7 } //light level on the tile occupied by this field will be set at 3.7 not matter the ambient light.
- ],
- "bash": {
- "str_min": 1, // lower bracket of bashing damage required to bash
- "str_max": 3, // higher bracket
- "sound_vol": 2, // noise made when succesfully bashing the field
- "sound_fail_vol": 2, // noise made when failing to bash the field
- "sound": "shwip", // sound on success
- "sound_fail": "shwomp", // sound on failure
- "msg_success": "You brush the gum web aside.", // message on success
- "move_cost": 120, // how many moves it costs to succesfully bash that field (default: 100)
- "items": [ // item dropped upon succesful bashing
- { "item": "2x4", "count": [ 5, 8 ] },
- { "item": "nail", "charges": [ 6, 8 ] },
- { "item": "splinter", "count": [ 3, 6 ] },
- { "item": "rag", "count": [ 40, 55 ] },
- { "item": "scrap", "count": [ 10, 20 ] }
- ]
- }
- }
+{ "type": "field_type", // this is a field type "id": "fd_gum_web", // id of the field
+"immune_mtypes": [ "mon_spider_gum" ], // list of monster immune to this field "intensity_levels": [
+{ "name": "shadow", // name of this level of intensity "light_override": 3.7 } //light level on the
+tile occupied by this field will be set at 3.7 not matter the ambient light. ], "bash": { "str_min":
+1, // lower bracket of bashing damage required to bash "str_max": 3, // higher bracket "sound_vol":
+2, // noise made when succesfully bashing the field "sound_fail_vol": 2, // noise made when failing
+to bash the field "sound": "shwip", // sound on success "sound_fail": "shwomp", // sound on failure
+"msg_success": "You brush the gum web aside.", // message on success "move_cost": 120, // how many
+moves it costs to succesfully bash that field (default: 100) "items": [ // item dropped upon
+succesful bashing { "item": "2x4", "count": [ 5, 8 ] }, { "item": "nail", "charges": [ 6, 8 ] }, {
+"item": "splinter", "count": [ 3, 6 ] }, { "item": "rag", "count": [ 40, 55 ] }, { "item": "scrap",
+"count": [ 10, 20 ] } ] } }
diff --git a/doc/JSON_INHERITANCE.md b/doc/JSON_INHERITANCE.md
index ee53b72e8d6b..4cc6919492a7 100644
--- a/doc/JSON_INHERITANCE.md
+++ b/doc/JSON_INHERITANCE.md
@@ -1,8 +1,12 @@
# JSON Inheritance
-To reduce duplication in the JSON data it is possible for some types to inherit from an existing type.
+
+To reduce duplication in the JSON data it is possible for some types to inherit from an existing
+type.
## Examples
-In the following condensed example ```556``` ammo is derived from ```223``` ammo via ```copy-from```:
+
+In the following condensed example `556` ammo is derived from `223` ammo via `copy-from`:
+
```
"id": "556",
"copy-from": "223",
@@ -16,19 +20,26 @@ In the following condensed example ```556``` ammo is derived from ```223``` ammo
},
"extend": { "effects": [ "NEVER_MISFIRES" ] }
```
+
The following rules apply to the above example:
-* Missing fields have the same value as the parent
+- Missing fields have the same value as the parent
-* Fields explicitly specified replace those of the parent type. The above example replaces ```name```, ```description``` and ```price```.
+- Fields explicitly specified replace those of the parent type. The above example replaces `name`,
+ `description` and `price`.
-* Numeric values may be specified ```relative``` to the parent. For example ```556``` has less ```damage``` but more ```pierce``` than ```223``` and will maintain this relationship if the definition for ```223``` is changed.
+- Numeric values may be specified `relative` to the parent. For example `556` has less `damage` but
+ more `pierce` than `223` and will maintain this relationship if the definition for `223` is
+ changed.
-* Flags can be added via ```extend```. For example ```556``` is military ammo and gains the ```NEVER_MISFIRES``` ammo effect. Any existing flags specified from ```223``` are preserved.
+- Flags can be added via `extend`. For example `556` is military ammo and gains the `NEVER_MISFIRES`
+ ammo effect. Any existing flags specified from `223` are preserved.
-* The entry you copied from must be of the same ```type``` as the item you added or changed (not all types are supported, see 'support' below)
+- The entry you copied from must be of the same `type` as the item you added or changed (not all
+ types are supported, see 'support' below)
-Reloaded ammo is derived from the factory equivalent but with a 10% penalty to ```damage``` and ```dispersion``` and a chance to misfire:
+Reloaded ammo is derived from the factory equivalent but with a 10% penalty to `damage` and
+`dispersion` and a chance to misfire:
```
"id": "reloaded_556",
@@ -42,15 +53,22 @@ Reloaded ammo is derived from the factory equivalent but with a 10% penalty to `
"extend": { "effects": [ "RECYCLED" ] },
"delete": { "effects": [ "NEVER_MISFIRES" ] }
```
+
The following additional rules apply to the above example:
-Chained inheritance is possible; for example ```reloaded_556``` inherits from ```556``` which is itself derived from ```223```
+Chained inheritance is possible; for example `reloaded_556` inherits from `556` which is itself
+derived from `223`
-Numeric values may be specified ```proportional``` to the parent by via a decimal factor where ```0.5``` is 50% and ```2.0``` is 200%.
+Numeric values may be specified `proportional` to the parent by via a decimal factor where `0.5` is
+50% and `2.0` is 200%.
-Flags can be deleted via ```delete```. It is not an error if the deleted flag does not exist in the parent.
+Flags can be deleted via `delete`. It is not an error if the deleted flag does not exist in the
+parent.
+
+It is possible to define an `abstract` type that exists only for other types to inherit from and
+cannot itself be used in game. In the following condensed example `magazine_belt` provides values
+common to all implemented ammo belts:
-It is possible to define an ```abstract``` type that exists only for other types to inherit from and cannot itself be used in game. In the following condensed example ```magazine_belt``` provides values common to all implemented ammo belts:
```
"abstract": "magazine_belt",
"type": "MAGAZINE",
@@ -63,14 +81,18 @@ It is possible to define an ```abstract``` type that exists only for other types
},
"flags": [ "MAG_BELT", "MAG_DESTROY" ]
```
+
The following additional rules apply to the above example:
-Missing mandatory fields do not result in errors as the ```abstract``` type is discarded after JSON loading completes
+Missing mandatory fields do not result in errors as the `abstract` type is discarded after JSON
+loading completes
Missing optional fields are set to the usual defaults for that type
## Support
+
The following types currently support inheritance:
+
```
GENERIC
AMMO
@@ -83,12 +105,21 @@ BOOK
ENGINE
```
-To find out if a types supports copy-from, you need to know if it has implemented generic_factory. To find out if this is the case, do the following:
-* Open [init.cpp](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/src/init.cpp)
-* Find the line that mentions your type, for example `add( "gate", &gates::load );`
-* Copy the load function, in this case it would be *gates::load*
-* Use this in [the search bar on github](https://github.com/CleverRaven/Cataclysm-DDA/search?q=%22gates%3A%3Aload%22&unscoped_q=%22gates%3A%3Aload%22&type=Code) to find the file that contains *gates::load*
-* In the search results you find [gates.cpp](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/src/gates.cpp). open it.
-* In gates.cpp, find the generic_factory line, it looks like this: `generic_factory gates_data( "gate type", "handle", "other_handles" );`
-* Since the generic_factory line is present, you can now conclude that it supports copy-from.
-* If you don't find generic_factoy present, it does not support copy-from, as is the case for type vitamin (repeat the above steps and find that [vitamin.cpp](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/src/vitamin.cpp) does not contain generic_factoy)
+To find out if a types supports copy-from, you need to know if it has implemented generic_factory.
+To find out if this is the case, do the following:
+
+- Open [init.cpp](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/src/init.cpp)
+- Find the line that mentions your type, for example `add( "gate", &gates::load );`
+- Copy the load function, in this case it would be _gates::load_
+- Use this in
+ [the search bar on github](https://github.com/CleverRaven/Cataclysm-DDA/search?q=%22gates%3A%3Aload%22&unscoped_q=%22gates%3A%3Aload%22&type=Code)
+ to find the file that contains _gates::load_
+- In the search results you find
+ [gates.cpp](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/src/gates.cpp). open it.
+- In gates.cpp, find the generic_factory line, it looks like this:
+ `generic_factory gates_data( "gate type", "handle", "other_handles" );`
+- Since the generic_factory line is present, you can now conclude that it supports copy-from.
+- If you don't find generic_factoy present, it does not support copy-from, as is the case for type
+ vitamin (repeat the above steps and find that
+ [vitamin.cpp](https://github.com/CleverRaven/Cataclysm-DDA/tree/master/src/vitamin.cpp) does not
+ contain generic_factoy)
diff --git a/doc/JSON_STYLE.md b/doc/JSON_STYLE.md
index 9cd950bb341f..3799f6668823 100644
--- a/doc/JSON_STYLE.md
+++ b/doc/JSON_STYLE.md
@@ -1,8 +1,10 @@
# JSON Style Guide
-Like in `doc/CODE_STYLE.md`, the JSON styling policy is to update JSON as it is added or edited, and in relatively small chunks otherwise in order to prevent undue disruption to development.
+Like in `doc/CODE_STYLE.md`, the JSON styling policy is to update JSON as it is added or edited, and
+in relatively small chunks otherwise in order to prevent undue disruption to development.
-We haven't been able to find a decent JSON styling tool, so we wrote our own. It lives in tools/format/format.cpp and it leverages src/json.cpp to parse and emit JSON.
+We haven't been able to find a decent JSON styling tool, so we wrote our own. It lives in
+tools/format/format.cpp and it leverages src/json.cpp to parse and emit JSON.
## JSON Example
@@ -13,7 +15,7 @@ This example outlines most of the styling features:
{
"type": "foo",
"id": "example",
- "short_array": [ 1, 2, 3, 4, 5 ],
+ "short_array": [1, 2, 3, 4, 5],
"short_object": {
"item_a": "a",
"item_b": "b"
@@ -24,46 +26,45 @@ This example outlines most of the styling features:
],
"nested_array": [
[
- [ "item1", "value1" ],
- [ "item2", "value2" ],
- [ "item3", "value3" ],
- [ "item4", "value4" ],
- [ "item5", "value5" ],
- [ "item6", "value6" ]
+ ["item1", "value1"],
+ ["item2", "value2"],
+ ["item3", "value3"],
+ ["item4", "value4"],
+ ["item5", "value5"],
+ ["item6", "value6"]
]
]
}
]
```
-Indention is two spaces.
-All JSON delimiters except comma and colon are surrounded by whitespace (either a space or a newline).
-Comma and colon are followed by whitespace.
-Object entries are always newline-separated.
-Array entries are newline-separated if the resulting array would exceed 120 characters otherwise (including indention).
-Line breaks occur after open brackets, close brackets, or entries.
+
+Indention is two spaces. All JSON delimiters except comma and colon are surrounded by whitespace
+(either a space or a newline). Comma and colon are followed by whitespace. Object entries are always
+newline-separated. Array entries are newline-separated if the resulting array would exceed 120
+characters otherwise (including indention). Line breaks occur after open brackets, close brackets,
+or entries.
## Formatting tool
-The formatting tool can be invoked via the Makefile, directly as `tools/format/json_formatter.cgi` (built via `make style-json`), or via cgi at http://dev.narc.ro/cataclysm/format.html
+The formatting tool can be invoked via the Makefile, directly as `tools/format/json_formatter.cgi`
+(built via `make style-json`), or via cgi at http://dev.narc.ro/cataclysm/format.html
-If you're using the Visual Studio solution, you can configure Visual Studio with
-commands to format all of the JSON in the project.
+If you're using the Visual Studio solution, you can configure Visual Studio with commands to format
+all of the JSON in the project.
-1. Build the JsonFormatter project by either building the entire solution or
- just that project. This will create a `tools/format/json_formatter.exe`
- binary.
-2. Add a new external tool entry ( `Tools` > `External Tools..` > `Add` ) and
- configure it as follows:
- * Title: `Lint All JSON`
- * Command: `C:\windows\system32\windowspowershell\v1.0\powershell.exe`
- * Arguments: `-file $(SolutionDir)\style-json.ps1`
- * Initial Directory: `$(SolutionDir)`
- * Use Output window: *checked*
+1. Build the JsonFormatter project by either building the entire solution or just that project. This
+ will create a `tools/format/json_formatter.exe` binary.
+2. Add a new external tool entry ( `Tools` > `External Tools..` > `Add` ) and configure it as
+ follows:
+ - Title: `Lint All JSON`
+ - Command: `C:\windows\system32\windowspowershell\v1.0\powershell.exe`
+ - Arguments: `-file $(SolutionDir)\style-json.ps1`
+ - Initial Directory: `$(SolutionDir)`
+ - Use Output window: _checked_
-At this point, you can use the menu ( `Tools` > `Lint All JSON` ) to invoke the
-command and can look in the Output Window for the output of running it.
-Additionally, you can configure a keybinding for this command by navigating to
-`Tools` > `Options` > `Environment` > `Keyboard`, searching for commands
-containing `Tools.ExternalCommand` and pick the one that corresponds to the
-position of your command in the list (e.g. `Tools.ExternalCommand1` if it's the
-top item in the list) and then assign shortcut keys to it.
+At this point, you can use the menu ( `Tools` > `Lint All JSON` ) to invoke the command and can look
+in the Output Window for the output of running it. Additionally, you can configure a keybinding for
+this command by navigating to `Tools` > `Options` > `Environment` > `Keyboard`, searching for
+commands containing `Tools.ExternalCommand` and pick the one that corresponds to the position of
+your command in the list (e.g. `Tools.ExternalCommand1` if it's the top item in the list) and then
+assign shortcut keys to it.
diff --git a/doc/LUA_SUPPORT.md b/doc/LUA_SUPPORT.md
index e7bc9477350d..4134a306b723 100644
--- a/doc/LUA_SUPPORT.md
+++ b/doc/LUA_SUPPORT.md
@@ -29,7 +29,6 @@ Use the `Home` key to return to the top.
- [Binding new enum to Lua](#binding-new-enum-to-lua)
- [Binding new string\_id or int\_id to Lua](#binding-new-string_id-or-int_id-to-lua)
-
## Introduction
This document describes implementation details behind Lua integration in Cataclysm: Bright Nights.
@@ -46,32 +45,31 @@ Programming in Lua (first edition): https://www.lua.org/pil/contents.html
## Example mods
-There are a couple heavily-commented example mods in `data/mods/` that make use
-of Lua API described here:
-* `smart_house_remotes` - Add remotes for controlling garage doors and window curtains.
-* `saveload_lua_test` - Mod for testing Lua save/load API.
+There are a couple heavily-commented example mods in `data/mods/` that make use of Lua API described
+here:
+
+- `smart_house_remotes` - Add remotes for controlling garage doors and window curtains.
+- `saveload_lua_test` - Mod for testing Lua save/load API.
## Ingame Lua console
-In-game Lua console is available through the debug menu or via `Lua Console`
-hotkey (unbound by default).
+In-game Lua console is available through the debug menu or via `Lua Console` hotkey (unbound by
+default).
-It is rather simple, but is capable of keeping input history, showing output and
-errors from Lua scripts as well as running Lua snippets and printing the
-returned values.
+It is rather simple, but is capable of keeping input history, showing output and errors from Lua
+scripts as well as running Lua snippets and printing the returned values.
-You can adjust console log capacity by running `gdebug.set_log_capacity( num )`
-(default is 100 entries), or clear it by running `gdebug.clear_lua_log()`.
+You can adjust console log capacity by running `gdebug.set_log_capacity( num )` (default is 100
+entries), or clear it by running `gdebug.clear_lua_log()`.
## Lua hot-reload
To speed up mod development process, BN supports Lua hot-reload functionality.
-There is no filesystem watcher, so hot-reload must be triggered manually via a
-corresponding `Reload Lua Code` hotkey (unbound by default). The hot-reload can
-also be triggered from console window by pressing the corresponding hotkey, or
-by running `gdebug.reload_lua_code()` command. Running the command from regular Lua
-scripts may have unintended consequences, use at your own risk!
+There is no filesystem watcher, so hot-reload must be triggered manually via a corresponding
+`Reload Lua Code` hotkey (unbound by default). The hot-reload can also be triggered from console
+window by pressing the corresponding hotkey, or by running `gdebug.reload_lua_code()` command.
+Running the command from regular Lua scripts may have unintended consequences, use at your own risk!
Note that not all code can be hot-reloaded, it'll be explained in later sections.
@@ -80,47 +78,54 @@ Note that not all code can be hot-reloaded, it'll be explained in later sections
When a world is being loaded, game does it in roughly these steps:
1. Initializes world-related internal state, sets the world as active
-2. Loads world's artifact item types (artifacts are hacky and will likely be removed soon in favor of relics + Lua)
+2. Loads world's artifact item types (artifacts are hacky and will likely be removed soon in favor
+ of relics + Lua)
3. Retrieves list of mods used by the world
4. Loads the mods according to the list
5. Initializes avatar-related internal state
6. Loads from save dir actual overmap data, avatar data and reality bubble data
What we care about here is the mod loading stage. It has a number of sub-steps:
+
1. Loading function receives list of world mods
2. It discards the missing ones and prints debug message for each
-3. It checks remaining mods on the list, and throws error if a mod needs Lua, but the game build does NOT support Lua
+3. It checks remaining mods on the list, and throws error if a mod needs Lua, but the game build
+ does NOT support Lua
4. It also throws a warning if game's Lua API version differs from the one used by the mod
5. For every mod on the list that uses Lua, it runs the mod's `preload.lua` script (if present)
-6. It goes over all mods in same order as in the list, and loads JSON definitions from each mod's folder
+6. It goes over all mods in same order as in the list, and loads JSON definitions from each mod's
+ folder
7. It finalizes loaded data (resolves copy-from, prepares some types with complex state for use)
8. For every mod on the list that uses Lua, it runs the mod's `finalize.lua` script (if present)
-9. It checks consistency of loaded data (validates values, warns about iffy combinations of values, etc.)
+9. It checks consistency of loaded data (validates values, warns about iffy combinations of values,
+ etc.)
10. (R) For every mod on the list that uses Lua, it runs the mod's `main.lua` script (if present)
-As such, we only have 3 scipts to place a mod's Lua code into: `preload.lua`, `finalize.lua` and `main.lua`.
-The differences between the 3 and their intended use cases will be explained below.
+As such, we only have 3 scipts to place a mod's Lua code into: `preload.lua`, `finalize.lua` and
+`main.lua`. The differences between the 3 and their intended use cases will be explained below.
You can use only one script, two or all three, depending on your needs.
-When executing hot-reload, the game repeats the step marked with (R).
-That means if you want the code you're working on to be hot-reloadable, put it into `main.lua`.
+When executing hot-reload, the game repeats the step marked with (R). That means if you want the
+code you're working on to be hot-reloadable, put it into `main.lua`.
### preload.lua
-This script is supposed to register event hooks and set up definitions that will
-then be referred by game JSON loading system (e.g. item use actions).
-Note that you can registers them here, and define them in some later stage
-(e.g. in `main.lua` to allow hot-reload to affect your hooks).
+
+This script is supposed to register event hooks and set up definitions that will then be referred by
+game JSON loading system (e.g. item use actions). Note that you can registers them here, and define
+them in some later stage (e.g. in `main.lua` to allow hot-reload to affect your hooks).
### finalize.lua
-This script is supposed to allow mods to modify definitions loaded from JSON
-after copy-from has been resolved, but there is no API for this yet.
+
+This script is supposed to allow mods to modify definitions loaded from JSON after copy-from has
+been resolved, but there is no API for this yet.
TODO: api for finalization
### main.lua
-This script is supposed to implement the main logic of the mod.
-This includes, but not limited, to:
+
+This script is supposed to implement the main logic of the mod. This includes, but not limited, to:
+
1. Mod runtime state
2. Mod initialization on game start
3. Mod save/load code, if required
@@ -128,68 +133,77 @@ This includes, but not limited, to:
## Lua API details
-While you can do a lot of interesting stuff with vanilla Lua, the integration
-imposes some limits to prevent potential bugs:
+While you can do a lot of interesting stuff with vanilla Lua, the integration imposes some limits to
+prevent potential bugs:
+
- Loading packages (or Lua modules) is disabled.
- Your current mod id is stored in `game.current_mod` variable
-- Your mod's runtime state should live in `game.mod_runtime[ game.current_mod ]` table.
- You can also interface with other mods if you know their id, by accessing their runtime state
- in a similar way with `game.mod_runtime[ that_other_mod_id ]`
-- Changes to global state are not available between scripts.
- This is to prevent accidental collisions between function names and variable names.
- You still can define global variables and functions, but they will be visible to your mod only.
+- Your mod's runtime state should live in `game.mod_runtime[ game.current_mod ]` table. You can also
+ interface with other mods if you know their id, by accessing their runtime state in a similar way
+ with `game.mod_runtime[ that_other_mod_id ]`
+- Changes to global state are not available between scripts. This is to prevent accidental
+ collisions between function names and variable names. You still can define global variables and
+ functions, but they will be visible to your mod only.
### Lua libraries and functions
+
When script is called, it comes with some standard Lua libraries pre-loaded:
-Library | Description
---------------|------------
- `base` | print, assert, and other base functions
- `math` | all things math
- `string` | string library
- `table` | the table manipulator and observer functions
+| Library | Description |
+| -------- | -------------------------------------------- |
+| `base` | print, assert, and other base functions |
+| `math` | all things math |
+| `string` | string library |
+| `table` | the table manipulator and observer functions |
See `Standard Libraries` section in Lua manual for details.
-Some of the functions here are overloaded by BN, see [Global overrides](#global-overrides) for details.
+Some of the functions here are overloaded by BN, see [Global overrides](#global-overrides) for
+details.
### Global state
-Most of necessary data and game runtime state is available through global `game` table.
-It has the following members:
-game.current_mod Id of mod that's being loaded (available only when script is executed)
-game.active_mods List of active world mods, in load order
-game.mod_runtime. Runtime data for mods (each mod gets its own table named after its id)
-game.mod_storage. Per-mod storage that gets automatically saved/loaded on game save/load.
-game.cata_internal For internal game purposes, please don't use this
-game.hooks. Hooks exposed to Lua scripts, will be called on corresponding events
-game.iuse. Item use functions that will be recognized by the item factory and called on item use
+Most of necessary data and game runtime state is available through global `game` table. It has the
+following members:
+
+game.current_mod Id of mod that's being loaded (available only when script is executed)
+game.active_mods List of active world mods, in load order game.mod_runtime. Runtime data for
+mods (each mod gets its own table named after its id) game.mod_storage. Per-mod storage that
+gets automatically saved/loaded on game save/load. game.cata_internal For internal game purposes,
+please don't use this game.hooks. Hooks exposed to Lua scripts, will be called on
+corresponding events game.iuse. Item use functions that will be recognized by the item
+factory and called on item use
### Game Bindings
-The game exposes various functions, constants and types to Lua.
-Functions and constants are organized into "libraries" for organizational purposes.
-Types are available globally, and may have member functions and fields.
-To see the full list of functions, constants and types, run the game with `--lua-doc` command line argument.
-This will generate documentation file `lua_doc.md` that will be placed in your `config` folder.
+The game exposes various functions, constants and types to Lua. Functions and constants are
+organized into "libraries" for organizational purposes. Types are available globally, and may have
+member functions and fields.
+
+To see the full list of functions, constants and types, run the game with `--lua-doc` command line
+argument. This will generate documentation file `lua_doc.md` that will be placed in your `config`
+folder.
#### Global overrides
+
Some functions have been globally overriden to improve integration with the game.
-Function | Description
-------------------------|-------------
-print | Print as `INFO LUA` to debug.log (overrides default Lua print)
-dofile | Disabled
-loadfile | Disabled
-load | Disabled
-loadstring | Disabled
+| Function | Description |
+| ---------- | -------------------------------------------------------------- |
+| print | Print as `INFO LUA` to debug.log (overrides default Lua print) |
+| dofile | Disabled |
+| loadfile | Disabled |
+| load | Disabled |
+| loadstring | Disabled |
TODO: alternatives for dofile and such
#### Hooks
-To see the list of hooks, check `hooks_doc` section of the autogenerated documentation file.
-There, you will see the list of hook ids as well as function signatures that they expect.
-You can register new hooks by appending to the hooks table like so:
+
+To see the list of hooks, check `hooks_doc` section of the autogenerated documentation file. There,
+you will see the list of hook ids as well as function signatures that they expect. You can register
+new hooks by appending to the hooks table like so:
+
```lua
-- In preload.lua
local mod = game.mod_runtime[ game.current_mod ]
@@ -209,8 +223,9 @@ end
```
#### Item use function
-Item use functions use unique id to register themselves in item factory.
-On item activation, they receive multiple arguments that will be described in the example below.
+
+Item use functions use unique id to register themselves in item factory. On item activation, they
+receive multiple arguments that will be described in the example below.
```lua
-- In preload.lua
@@ -232,9 +247,9 @@ end
```
#### Translation functions
-To make the mod translatable to other languages,
-get your text via functions bound in `locale` library.
-See [TRANSLATING.md](TRANSLATING.md) for detailed explanation of their C++ counterparts.
+
+To make the mod translatable to other languages, get your text via functions bound in `locale`
+library. See [TRANSLATING.md](TRANSLATING.md) for detailed explanation of their C++ counterparts.
Usage examples are shown below:
@@ -304,90 +319,89 @@ local ok = locale.gettext("Confusing text that needs explanation.")
--~ just use 2 or more single-line comments.
--~ They'll be concatenated and shown as a single multi-line comment.
local ok = locale.gettext("Confusing text that needs explanation.")
-
```
## C++ layout
-Lua build can be enabled by passing `LUA=1` to the Makefile, or enabling `LUA` build switch in CMake builds.
-Both msvc and android for simplicity always build with Lua **enabled**.
+
+Lua build can be enabled by passing `LUA=1` to the Makefile, or enabling `LUA` build switch in CMake
+builds. Both msvc and android for simplicity always build with Lua **enabled**.
### Lua source files
-To simplify build setup and improve portability we bundle `Lua 5.3.6` source
-code in `src/lua/` directory and have the build systems compile it and link into
-the game executable and library for tests.
+
+To simplify build setup and improve portability we bundle `Lua 5.3.6` source code in `src/lua/`
+directory and have the build systems compile it and link into the game executable and library for
+tests.
### Sol2 source files
-Sol2 makes it easy to bundle, we have `sol2 v3.3.0` single-header amalgamated
-version in `src/sol/` and just include it as needed. The header is quite large,
-so the less source files include it the better.
-* `sol/config.hpp` - Configuration header, we have a few options defined there
-* `sol/forward.hpp` - Forward declarations, a lightweight header that should be
- included in game headers instead of `sol/sol.hpp`
-* `sol/sol.hpp` - Main sol2 header file, quite large, avoid including in game
- headers
+
+Sol2 makes it easy to bundle, we have `sol2 v3.3.0` single-header amalgamated version in `src/sol/`
+and just include it as needed. The header is quite large, so the less source files include it the
+better.
+
+- `sol/config.hpp` - Configuration header, we have a few options defined there
+- `sol/forward.hpp` - Forward declarations, a lightweight header that should be included in game
+ headers instead of `sol/sol.hpp`
+- `sol/sol.hpp` - Main sol2 header file, quite large, avoid including in game headers
### Game source files
-All Lua-related game source files have the `catalua` prefix.
-If you want to add new bindings, consider looking at existing examples in
-`src/catalua_bindings.cpp` and reading relevant part of Sol2 docs.
-
-* `catalua.h` (and `catalua.cpp`) - Main Lua interface. It's the only header
- most of the codebase will have to include, and it provides a public interface
- that works in both `LUA=1` and `LUA=0` builds ( in builds without Lua, most of
- the functions there are no-op ).
-* `catalua_sol.h` and `catalua_sol_fwd.h` - Wrappers for `sol/sol.hpp` and
- `sol/forward.hpp` with custom pragmas to make them compile.
-* `catalua_bindings*` - Game Lua bindings live here.
-* `catalua_console.h`(`.cpp`) - Ingame Lua console.
-* `catalua_impl.h`(`.cpp`) - Implementation details for `catalua.h`(`.cpp`).
-* `catalua_iuse_actor.h`(`.cpp`) - Lua-driven `iuse_actor`.
-* `catalua_log.h`(`.cpp`) - In-memory logging for the console.
-* `catalua_luna.h` - Usertype registration interface with automatic doc generation, aka `luna`.
-* `catalua_luna_doc.h` - List of types registration through `luna` or exposed to its doc generator.
-* `catalua_readonly.h`(`.cpp`) - Functions for marking Lua tables as read-only.
-* `catalua_serde.h`(`.cpp`) - Lua table to/from JSON (de-)serialization.
-* `catalua_type_operators.h` - Macro that helps with implementing bindings for string_ids
+All Lua-related game source files have the `catalua` prefix.
+If you want to add new bindings, consider looking at existing examples in `src/catalua_bindings.cpp`
+and reading relevant part of Sol2 docs.
+
+- `catalua.h` (and `catalua.cpp`) - Main Lua interface. It's the only header most of the codebase
+ will have to include, and it provides a public interface that works in both `LUA=1` and `LUA=0`
+ builds ( in builds without Lua, most of the functions there are no-op ).
+- `catalua_sol.h` and `catalua_sol_fwd.h` - Wrappers for `sol/sol.hpp` and `sol/forward.hpp` with
+ custom pragmas to make them compile.
+- `catalua_bindings*` - Game Lua bindings live here.
+- `catalua_console.h`(`.cpp`) - Ingame Lua console.
+- `catalua_impl.h`(`.cpp`) - Implementation details for `catalua.h`(`.cpp`).
+- `catalua_iuse_actor.h`(`.cpp`) - Lua-driven `iuse_actor`.
+- `catalua_log.h`(`.cpp`) - In-memory logging for the console.
+- `catalua_luna.h` - Usertype registration interface with automatic doc generation, aka `luna`.
+- `catalua_luna_doc.h` - List of types registration through `luna` or exposed to its doc generator.
+- `catalua_readonly.h`(`.cpp`) - Functions for marking Lua tables as read-only.
+- `catalua_serde.h`(`.cpp`) - Lua table to/from JSON (de-)serialization.
+- `catalua_type_operators.h` - Macro that helps with implementing bindings for string_ids
### Adding new type to the doc generator without binding internals
-If a C++ type has not been registered in the doc generator,
-it will show up as ``.
-To mitigate this problem, you can add `LUNA_VAL( your_type, "YourType" )` in `catalua_luna_doc.h`,
-and the generator will use `YourType` string for argument type.
+If a C++ type has not been registered in the doc generator, it will show up as
+``. To mitigate this problem, you can add
+`LUNA_VAL( your_type, "YourType" )` in `catalua_luna_doc.h`, and the generator will use `YourType`
+string for argument type.
### Binding new type to Lua
-First, we need to register the new type with the bindings system.
-It needs to be done for many reasons, including so that the doc generator understands it,
-and the runtime can deserialize from JSON any Lua table that contains that type.
-If you don't you'll get a compile error saying
+
+First, we need to register the new type with the bindings system. It needs to be done for many
+reasons, including so that the doc generator understands it, and the runtime can deserialize from
+JSON any Lua table that contains that type. If you don't you'll get a compile error saying
`Type must implement luna_traits`.
-1. In `catala_luna_doc.h`, add declaration for your type.
- For example, if we're binding an imaginary `horde` type (which is a `struct`),
- it will be a single line near the top of the file:
+1. In `catala_luna_doc.h`, add declaration for your type. For example, if we're binding an imaginary
+ `horde` type (which is a `struct`), it will be a single line near the top of the file:
```c++
struct horde;
```
- Complex templated types may need to actually pull in the relevant header,
- but please avoid it as it heavily impacts compilation times.
+ Complex templated types may need to actually pull in the relevant header, but please avoid it as
+ it heavily impacts compilation times.
-2. In the same file, register your type with the doc generator.
- Continuing with the `horde` example, it's done like this:
+2. In the same file, register your type with the doc generator. Continuing with the `horde` example,
+ it's done like this:
```c++
LUNA_VAL( horde, "Horde" );
```
- While C++ types use all kinds of style for their names,
- on Lua side they all should be in `CamelCase`.
-
-Now we can actually get to the details.
-The bindings are implemented in `catalua_bindings*.cpp` files.
-They are spread out into multiple `.cpp` files to speed up compilation
-and make it easy to navigate, so you can put yours into any existing
-`catalua_bindings*.cpp` file or make your own similar file.
-They are also spread out into functions, for the same reasons.
-Let's register our `horde` type, and put it in a new file and a new function:
+ While C++ types use all kinds of style for their names, on Lua side they all should be in
+ `CamelCase`.
+
+Now we can actually get to the details. The bindings are implemented in `catalua_bindings*.cpp`
+files. They are spread out into multiple `.cpp` files to speed up compilation and make it easy to
+navigate, so you can put yours into any existing `catalua_bindings*.cpp` file or make your own
+similar file. They are also spread out into functions, for the same reasons. Let's register our
+`horde` type, and put it in a new file and a new function:
+
1. Add a new function declaration in `catalua_bindings.h`:
```c++
void reg_horde( sol::state &lua );
@@ -397,52 +411,51 @@ Let's register our `horde` type, and put it in a new file and a new function:
reg_horde( lua );
```
3. Make a new file, `catalua_bindings_horde.cpp`, with the following contents:
- ```c++
- #ifdef LUA
- #include "catalua_bindings.h"
-
- #include "horde.h" // Replace with the header where your type is defined
-
- void cata::detail::reg_horde( sol::state &lua )
- {
- sol::usertype ut =
- luna::new_usertype(
- lua,
- luna::no_bases,
- luna::constructors <
- // Define your actual constructors here
- horde(),
- horde( const point & ),
- horde( int, int )
- > ()
- );
-
- // Register all needed members
- luna::set( ut, "pos", &horde::pos );
- luna::set( ut, "size", &horde::size );
-
- // Register all needed methods
- luna::set_fx( ut, "move_to", &horde::move_to );
- luna::set_fx( ut, "update", &horde::update );
- luna::set_fx( ut, "get_printable_name", &horde::get_printable_name );
-
- // Add (de-)serialization functions so we can carry
- // our horde over the save/load boundary
- reg_serde_functions( ut );
-
- // Add more stuff like arithmetic operators, to_string operator, etc.
- }
- ```
-1. That's it. Your type is now visible in Lua under name `Horde`,
- and you can use the binded methods and members.
-
+ ```c++
+ #ifdef LUA
+ #include "catalua_bindings.h"
+
+ #include "horde.h" // Replace with the header where your type is defined
+
+ void cata::detail::reg_horde( sol::state &lua )
+ {
+ sol::usertype ut =
+ luna::new_usertype(
+ lua,
+ luna::no_bases,
+ luna::constructors <
+ // Define your actual constructors here
+ horde(),
+ horde( const point & ),
+ horde( int, int )
+ > ()
+ );
+
+ // Register all needed members
+ luna::set( ut, "pos", &horde::pos );
+ luna::set( ut, "size", &horde::size );
+
+ // Register all needed methods
+ luna::set_fx( ut, "move_to", &horde::move_to );
+ luna::set_fx( ut, "update", &horde::update );
+ luna::set_fx( ut, "get_printable_name", &horde::get_printable_name );
+
+ // Add (de-)serialization functions so we can carry
+ // our horde over the save/load boundary
+ reg_serde_functions( ut );
+
+ // Add more stuff like arithmetic operators, to_string operator, etc.
+ }
+ ```
+4. That's it. Your type is now visible in Lua under name `Horde`, and you can use the binded methods
+ and members.
### Binding new enum to Lua
-Binding enums is similar to binding types.
-Let's bind an imaginary `horde_type` enum here:
-1. If enum does not have an explicitly defined container
- (the `: type` part after `enum name` in the header where it's defined),
- you'll have to specify the container first, for example:
+
+Binding enums is similar to binding types. Let's bind an imaginary `horde_type` enum here:
+
+1. If enum does not have an explicitly defined container (the `: type` part after `enum name` in the
+ header where it's defined), you'll have to specify the container first, for example:
```diff
// hordes.h
- enum class horde_type {
@@ -460,45 +473,40 @@ Let's bind an imaginary `horde_type` enum here:
```c++
LUNA_ENUM( horde_type, "HordeType" )
```
-4. Ensure the enum implements the automatic conversion
- to/from `std::string`, see `enum_conversions.h` for details.
- Some enums will already have it, but most won't.
- Usually it's just a matter of specializing `enum_traits` for your enum `T`
- in the header, then defining `io::enum_to_string` in the `.cpp`
- file with enum -> string conversion.
- Some enums won't have the "last" value required for `enum_traits`.
- In that case, you'd have to add one:
- ```diff
- enum class horde_type : int {
- animals,
- robots,
- - zombies
- + zombies,
- + num_horde_types
- }
- ```
- Note that this only works for "monotonic" enums, i.e. ones that start with 0
- and don't skip any values. In the example above, `animals` has implicit
- value of `0`, robots has implicit value of `1` and `zombies` has implicit
- value of `2`, so we can easily add `num_horde_types`, which will have
- correct and expected implicit value of `3`.
+4. Ensure the enum implements the automatic conversion to/from `std::string`, see
+ `enum_conversions.h` for details. Some enums will already have it, but most won't. Usually it's
+ just a matter of specializing `enum_traits` for your enum `T` in the header, then defining
+ `io::enum_to_string` in the `.cpp` file with enum -> string conversion. Some enums won't have
+ the "last" value required for `enum_traits`. In that case, you'd have to add one:
+ ```diff
+ enum class horde_type : int {
+ animals,
+ robots,
+ - zombies
+ + zombies,
+ + num_horde_types
+ }
+ ```
+ Note that this only works for "monotonic" enums, i.e. ones that start with 0 and don't skip any
+ values. In the example above, `animals` has implicit value of `0`, robots has implicit value of
+ `1` and `zombies` has implicit value of `2`, so we can easily add `num_horde_types`, which will
+ have correct and expected implicit value of `3`.
5. Bind enum fields in `reg_enums` function in `catalua_bindings.cpp`:
```c++
reg_enum( lua );
```
- This uses the automatic convertion from step 4,
- so we have equal names between JSON and Lua.
-
-
+ This uses the automatic convertion from step 4, so we have equal names between JSON and Lua.
### Binding new string_id or int_id to Lua
+
Binding these can be done separately from binding `T` itself.
-1. Register your type `T` with the doc generator if you haven't already
- (see [relevant docs](#adding-new-type-to-the-doc-generator-without-binding-internals)).
+
+1. Register your type `T` with the doc generator if you haven't already (see
+ [relevant docs](#adding-new-type-to-the-doc-generator-without-binding-internals)).
2. Replace `LUNA_VAL` from step 1 with `LUNA_ID`.
-3. Ensure your type `T` implements operators `<` and `==`.
- It's usually easy implement them manually, and can be done semi-automatically with macro
- `LUA_TYPE_OPS` found in `catalua_type_operators.h`.
+3. Ensure your type `T` implements operators `<` and `==`. It's usually easy implement them
+ manually, and can be done semi-automatically with macro `LUA_TYPE_OPS` found in
+ `catalua_type_operators.h`.
4. In `catalua_bindings_ids.cpp`, add the header where your type T is defined:
```c++
#include "your_type_definition.h"
@@ -507,19 +515,19 @@ Binding these can be done separately from binding `T` itself.
```c++
reg_id( lua );
```
- That `true` can be replaced with `false` if you only want to bind
- `string_id` and don't care about (or can't implement) `int_id`.
-
- You may get linker errors at this stage, e.g. about `is_valid()` or
- `NULL_ID()` methods, which are for various reasons not implemented
- forall string or int ids. In this case, you'll have to define these manually,
- see relevant docs on `string_id` and `int_id` for more info.
-
-And that's it. Now, your type `T` will show up in Lua with `Raw` postfix,
-`string_id` will have `Id` postfix, and `int_id` will have `IntId` postfix.
-As example, for `LUNA_ID( horde, "Horde" )`, we'll get:
-* `horde` -> `HordeRaw`
-* `string_id` -> `HordeId`
-* `int_id` -> `HordeIntId`
-All type conversions between the 3 are implemented automatically by the system.
-Actual fields and methods of `T` can be binded to Lua same way as usual.
+
+That `true` can be replaced with `false` if you only want to bind `string_id` and don't care
+about (or can't implement) `int_id`.
+
+You may get linker errors at this stage, e.g. about `is_valid()` or `NULL_ID()` methods, which are
+for various reasons not implemented forall string or int ids. In this case, you'll have to define
+these manually, see relevant docs on `string_id` and `int_id` for more info.
+
+And that's it. Now, your type `T` will show up in Lua with `Raw` postfix, `string_id` will have
+`Id` postfix, and `int_id` will have `IntId` postfix. As example, for
+`LUNA_ID( horde, "Horde" )`, we'll get:
+
+- `horde` -> `HordeRaw`
+- `string_id` -> `HordeId`
+- `int_id` -> `HordeIntId` All type conversions between the 3 are implemented automatically
+ by the system. Actual fields and methods of `T` can be binded to Lua same way as usual.
diff --git a/doc/MAGIC.md b/doc/MAGIC.md
index a150b1df2540..3033dc18b5f6 100644
--- a/doc/MAGIC.md
+++ b/doc/MAGIC.md
@@ -1,4 +1,5 @@
# Spells, enchantments and other custom effects
+
- [Spells](#spells)
- [Currently Implemented Effects and special rules](#currently-implemented-effects-and-special-rules)
- [Spells that level up](#spells-that-level-up)
@@ -40,7 +41,6 @@
- [ITEM\_ARMOR\_X](#item_armor_x)
- [Examples](#examples)
-
# Spells
In `data/mods/Magiclysm` there is a template spell, copied here for your perusal:
@@ -94,86 +94,122 @@ In `data/mods/Magiclysm` there is a template spell, copied here for your perusal
"sound_variant": "shockwave" // the sound variant
}
```
-Most of the default values for the above are either 0 or "NONE", so you may leave out most of the values if they do not pertain to your spell.
-When deciding values for some of these, it is important to note that some of the formulae are not linear.
-For example, this is the formula for spell failure chance:
+Most of the default values for the above are either 0 or "NONE", so you may leave out most of the
+values if they do not pertain to your spell.
-```( ( ( ( spell_level - spell_difficulty ) * 2 + intelligence + spellcraft_skill ) - 30 ) / 30 ) ^ 2```
+When deciding values for some of these, it is important to note that some of the formulae are not
+linear. For example, this is the formula for spell failure chance:
-Meaning a spell with difficulty 0 cast by a player with 8 intelligence, 0 spellcraft, and level 0 in the spell will have a 53% spell failure chance.
-On the other hand, a player with 12 intelligence, 6 spellcraft, and level 6 in the same spell will have a 0% spell failure chance.
+`( ( ( ( spell_level - spell_difficulty ) * 2 + intelligence + spellcraft_skill ) - 30 ) / 30 ) ^ 2`
-However, experience gain is a little more complicated to calculate. The formula for how much experience you need to get to a level is below:
+Meaning a spell with difficulty 0 cast by a player with 8 intelligence, 0 spellcraft, and level 0 in
+the spell will have a 53% spell failure chance. On the other hand, a player with 12 intelligence, 6
+spellcraft, and level 6 in the same spell will have a 0% spell failure chance.
-```e ^ ( ( level + 62.5 ) * 0.146661 ) ) - 6200```
+However, experience gain is a little more complicated to calculate. The formula for how much
+experience you need to get to a level is below:
+
+`e ^ ( ( level + 62.5 ) * 0.146661 ) ) - 6200`
#### Currently Implemented Effects and special rules
-* "pain_split" - makes all of your limbs' damage even out.
+- "pain_split" - makes all of your limbs' damage even out.
+
+- "move_earth" - "digs" at the target location. some terrain is not diggable this way.
-* "move_earth" - "digs" at the target location. some terrain is not diggable this way.
+- "target_attack" - deals damage to a target (ignores walls). Negative damage heals the target. If
+ "effect_str" is included, it will add that effect (defined elsewhere in json) to the targets if
+ able, to the body parts defined in affected_body_parts. Any aoe will manifest as a circular area
+ centered on the target, and will only deal damage to valid_targets. (aoe does not ignore walls)
-* "target_attack" - deals damage to a target (ignores walls). Negative damage heals the target. If "effect_str" is included, it will add that effect (defined elsewhere in json) to the targets if able, to the body parts defined in affected_body_parts.
-Any aoe will manifest as a circular area centered on the target, and will only deal damage to valid_targets. (aoe does not ignore walls)
+- "projectile_attack" - similar to target_attack, except the projectile you shoot will stop short at
+ impassable terrain. If "effect_str" is included, it will add that effect (defined elsewhere in
+ json) to the targets if able, to the body parts defined in affected_body_parts.
-* "projectile_attack" - similar to target_attack, except the projectile you shoot will stop short at impassable terrain. If "effect_str" is included, it will add that effect (defined elsewhere in json) to the targets if able, to the body parts defined in affected_body_parts.
+- "cone_attack" - fires a cone toward the target up to your range. The arc of the cone in degrees is
+ aoe. Stops at walls. If "effect_str" is included, it will add that effect (defined elsewhere in
+ json) to the targets if able, to the body parts defined in affected_body_parts.
-* "cone_attack" - fires a cone toward the target up to your range. The arc of the cone in degrees is aoe. Stops at walls. If "effect_str" is included, it will add that effect (defined elsewhere in json) to the targets if able, to the body parts defined in affected_body_parts.
+- "line_attack" - fires a line with width aoe toward the target, being blocked by walls on the way.
+ If "effect_str" is included, it will add that effect (defined elsewhere in json) to the targets if
+ able, to the body parts defined in affected_body_parts.
-* "line_attack" - fires a line with width aoe toward the target, being blocked by walls on the way. If "effect_str" is included, it will add that effect (defined elsewhere in json) to the targets if able, to the body parts defined in affected_body_parts.
+- "spawn_item" - spawns an item that will disappear at the end of its duration. Default duration
+ is 0. Damage determines quantity.
-* "spawn_item" - spawns an item that will disappear at the end of its duration. Default duration is 0. Damage determines quantity.
+- "teleport_random" - teleports the player randomly range spaces with aoe variation
-* "teleport_random" - teleports the player randomly range spaces with aoe variation
+- "recover_energy" - recovers an energy source (defined in the effect_str, shown below) equal to
+ damage of the spell
-* "recover_energy" - recovers an energy source (defined in the effect_str, shown below) equal to damage of the spell
-- "MANA"
-- "STAMINA"
-- "FATIGUE"
-- "PAIN"
-- "BIONIC"
+* "MANA"
+* "STAMINA"
+* "FATIGUE"
+* "PAIN"
+* "BIONIC"
-* "ter_transform" - transform the terrain and furniture in an area centered at the target. The chance of any one of the points in the area of effect changing is one_in( damage ). The effect_str is the id of a ter_furn_transform.
+- "ter_transform" - transform the terrain and furniture in an area centered at the target. The
+ chance of any one of the points in the area of effect changing is one_in( damage ). The effect_str
+ is the id of a ter_furn_transform.
-* "vomit" - any creature within its area of effect will instantly vomit, if it's able to do so.
+- "vomit" - any creature within its area of effect will instantly vomit, if it's able to do so.
-* "timed_event" - adds a timed event to the player only. valid timed events: "help", "wanted", "robot_attack", "spawn_wyrms", "amigara", "roots_die", "temple_open", "temple_flood", "temple_spawn", "dim", "artifact_light" NOTE: This was added only for artifact active effects. support is limited, use at your own risk.
+- "timed_event" - adds a timed event to the player only. valid timed events: "help", "wanted",
+ "robot_attack", "spawn_wyrms", "amigara", "roots_die", "temple_open", "temple_flood",
+ "temple_spawn", "dim", "artifact_light" NOTE: This was added only for artifact active effects.
+ support is limited, use at your own risk.
-* "explosion" - an explosion is centered on the target, with power damage() and factor aoe()/10
+- "explosion" - an explosion is centered on the target, with power damage() and factor aoe()/10
-* "flashbang" - a flashbang effect is centered on the target, with poewr damage() and factor aoe()/10
+- "flashbang" - a flashbang effect is centered on the target, with poewr damage() and factor
+ aoe()/10
-* "mod_moves" - adds damage() moves to the target. can be negative to "freeze" the target for that amount of time
+- "mod_moves" - adds damage() moves to the target. can be negative to "freeze" the target for that
+ amount of time
-* "map" - maps the overmap centered on the player out to a radius of aoe()
+- "map" - maps the overmap centered on the player out to a radius of aoe()
-* "morale" - gives a morale effect to all npcs or avatar within aoe, with value damage(). decay_start is duration() / 10.
+- "morale" - gives a morale effect to all npcs or avatar within aoe, with value damage().
+ decay_start is duration() / 10.
-* "charm_monster" - charms a monster that has less hp than damage() for approximately duration()
+- "charm_monster" - charms a monster that has less hp than damage() for approximately duration()
-* "mutate" - mutates the target(s). if effect_str is defined, mutates toward that category instead of picking at random. the "MUTATE_TRAIT" flag allows effect_str to be a specific trait instead of a category. damage() / 100 is the percent chance the mutation will be successful (a value of 10000 represents 100.00%)
+- "mutate" - mutates the target(s). if effect_str is defined, mutates toward that category instead
+ of picking at random. the "MUTATE_TRAIT" flag allows effect_str to be a specific trait instead of
+ a category. damage() / 100 is the percent chance the mutation will be successful (a value of 10000
+ represents 100.00%)
-* "bash" - bashes the terrain at the target. uses damage() as the strength of the bash.
+- "bash" - bashes the terrain at the target. uses damage() as the strength of the bash.
-* "WONDER" - Unlike the above, this is not an "effect" but a "flag". This alters the behavior of the parent spell drastically: The spell itself doesn't cast, but its damage and range information is used in order to cast the extra_effects. N of the extra_effects will be chosen at random to be cast, where N is the current damage of the spell (stacks with RANDOM_DAMAGE flag) and the message of the spell cast by this spell will also be displayed. If this spell's message is not wanted to be displayed, make sure the message is an empty string.
+- "WONDER" - Unlike the above, this is not an "effect" but a "flag". This alters the behavior of the
+ parent spell drastically: The spell itself doesn't cast, but its damage and range information is
+ used in order to cast the extra_effects. N of the extra_effects will be chosen at random to be
+ cast, where N is the current damage of the spell (stacks with RANDOM_DAMAGE flag) and the message
+ of the spell cast by this spell will also be displayed. If this spell's message is not wanted to
+ be displayed, make sure the message is an empty string.
-* "RANDOM_TARGET" - A special spell flag (like wonder) that forces the spell to choose a random valid target within range instead of the caster choosing the target. This also affects extra_effects.
+- "RANDOM_TARGET" - A special spell flag (like wonder) that forces the spell to choose a random
+ valid target within range instead of the caster choosing the target. This also affects
+ extra_effects.
##### For Spells that have an attack type, these are the available damage types:
-* "fire"
-* "acid"
-* "bash"
-* "bio" - internal damage such as poison
-* "cold"
-* "cut"
-* "electric"
-* "stab"
-* "none" - this damage type goes through armor altogether. it is the default.
+
+- "fire"
+- "acid"
+- "bash"
+- "bio" - internal damage such as poison
+- "cold"
+- "cut"
+- "electric"
+- "stab"
+- "none" - this damage type goes through armor altogether. it is the default.
#### Spells that level up
-Spells that change effects as they level up must have a min and max effect and an increment. The min effect is what the spell will do at level 0, and the max effect is where it stops growing. The increment is how much it changes per level. For example:
+Spells that change effects as they level up must have a min and max effect and an increment. The min
+effect is what the spell will do at level 0, and the max effect is where it stops growing. The
+increment is how much it changes per level. For example:
```json
"min_range": 1,
@@ -181,27 +217,32 @@ Spells that change effects as they level up must have a min and max effect and a
"range_increment": 5,
```
-Min and max values must always have the same sign, but it can be negative eg. in the case of spells that use a negative 'recover' effect to cause pain or stamina damage. For example:
+Min and max values must always have the same sign, but it can be negative eg. in the case of spells
+that use a negative 'recover' effect to cause pain or stamina damage. For example:
```json
- {
- "id": "stamina_damage",
- "type": "SPELL",
- "name": "Tired",
- "description": "decreases stamina",
- "valid_targets": [ "hostile" ],
- "min_damage": -2000,
- "max_damage": -10000,
- "damage_increment": -3000,
- "max_level": 10,
- "effect": "recover_energy",
- "effect_str": "STAMINA"
- }
+{
+ "id": "stamina_damage",
+ "type": "SPELL",
+ "name": "Tired",
+ "description": "decreases stamina",
+ "valid_targets": ["hostile"],
+ "min_damage": -2000,
+ "max_damage": -10000,
+ "damage_increment": -3000,
+ "max_level": 10,
+ "effect": "recover_energy",
+ "effect_str": "STAMINA"
+}
```
### Learning Spells
-There are two ways of granting spells that is implemented: Mutating can grant a spell with the "spells_learned" field which also lets you specify the level granted. Otherwise you can learn a spell from an item through a use_action, which is also the only way to train a spell other than using it. Examples of both are shown below:
+There are two ways of granting spells that is implemented: Mutating can grant a spell with the
+"spells_learned" field which also lets you specify the level granted. Otherwise you can learn a
+spell from an item through a use_action, which is also the only way to train a spell other than
+using it. Examples of both are shown below:
+
```C++
{
"id": "DEBUG_spellbook",
@@ -218,7 +259,9 @@ There are two ways of granting spells that is implemented: Mutating can grant a
}
},
```
-You can study this spellbook for a rate of ~1 experience per turn depending on intelligence, spellcraft, and focus.
+
+You can study this spellbook for a rate of ~1 experience per turn depending on intelligence,
+spellcraft, and focus.
```json
"spells_learned": [ [ "debug_hp", 1 ], [ "debug_stamina", 1 ], [ "example_template", 1 ], [ "pain_split", 1 ] ],
@@ -227,56 +270,74 @@ You can study this spellbook for a rate of ~1 experience per turn depending on i
#### Spells in professions and NPC classes
You can add a "spell" member to professions or an NPC class definition like so:
+
```json
"spells": [ { "id": "summon_zombie", "level": 0 }, { "id": "magic_missile", "level": 10 } ]
```
-NOTE: This makes it possible to learn spells that conflict with a class. It also does not give the prompt to gain the class. Be judicious upon adding this to a profession!
+NOTE: This makes it possible to learn spells that conflict with a class. It also does not give the
+prompt to gain the class. Be judicious upon adding this to a profession!
#### Spells in monsters
You can assign a spell as a special attack for a monster.
+
```json
{ "type": "spell", "spell_id": "burning_hands", "spell_level": 10, "cooldown": 10 }
```
-* spell_id: the id for the spell being cast.
-* spell_level: the level at which the spell is cast. Spells cast by monsters do not gain levels like player spells.
-* cooldown: how often the monster can cast this spell
+
+- spell_id: the id for the spell being cast.
+- spell_level: the level at which the spell is cast. Spells cast by monsters do not gain levels like
+ player spells.
+- cooldown: how often the monster can cast this spell
# Enchantments
+
Enchantments make it possible to specify custom effects provided by item, bionic or mutation.
## Fields
+
### id
+
(string) Unique identifier for this enchantment.
### has
-(string) How an enchantment determines if it is in the right location in order to qualify for being active.
+
+(string) How an enchantment determines if it is in the right location in order to qualify for being
+active.
This field is relevant only for items.
Values:
-* `HELD` (default) - when in your inventory
-* `WIELD` - when wielded in your hand
-* `WORN` - when worn as armor
+
+- `HELD` (default) - when in your inventory
+- `WIELD` - when wielded in your hand
+- `WORN` - when worn as armor
### condition
-(string) How an enchantment determines if you are in the right environments in order for the enchantment to qualify for being active.
+
+(string) How an enchantment determines if you are in the right environments in order for the
+enchantment to qualify for being active.
Values:
-* `ALWAYS` (default) - Always active
-* `UNDERGROUND` - When the owner of the item is below Z-level 0
-* `UNDERWATER` - When the owner is in swimmable terrain
-* `ACTIVE` - whenever the item, mutation, bionic, or whatever the enchantment is attached to is active.
+
+- `ALWAYS` (default) - Always active
+- `UNDERGROUND` - When the owner of the item is below Z-level 0
+- `UNDERWATER` - When the owner is in swimmable terrain
+- `ACTIVE` - whenever the item, mutation, bionic, or whatever the enchantment is attached to is
+ active.
### emitter
-(string) Identifier of an emitter that's active as long as this enchantment is active.
-Default: no emitter.
+
+(string) Identifier of an emitter that's active as long as this enchantment is active. Default: no
+emitter.
### ench_effects
+
(array) Grants effects of specified intensity as long as this enchantment is active.
Syntax for single entry:
+
```C++
{
// (required) Identifier of the effect
@@ -288,9 +349,12 @@ Syntax for single entry:
```
### hit_you_effect
-(array) List of spells that may be cast when enchantment is active and character melee attacks a creature.
+
+(array) List of spells that may be cast when enchantment is active and character melee attacks a
+creature.
Syntax for single entry:
+
```c++
{
// (required) Identifier of the spell
@@ -324,17 +388,22 @@ Syntax for single entry:
```
### hit_me_effect
-(array) List of spells that may be cast when enchantment is active and character gets melee attacked by a creature.
+
+(array) List of spells that may be cast when enchantment is active and character gets melee attacked
+by a creature.
Same syntax as for `hit_you_effect`.
### mutations
+
(array) List of mutations temporarily granted while enchantment is active.
### intermittent_activation
+
(object) Rules that specify random effects which occur while enchantment is active.
Syntax:
+
```c++
{
// List of checks to run on every turn while enchantment is active.
@@ -365,9 +434,11 @@ Syntax:
```
### values
+
(array) List of miscellaneous character/item values to modify.
Syntax for single entry:
+
```c++
{
// (required) Value ID to modify, refer to list below.
@@ -383,156 +454,150 @@ Syntax for single entry:
```
Additive bonus is applied separately from multiplicative, like so:
+
```c++
bonus = add + base_value * multiply
```
-Thus, a `multiply` value of -0.8 is -80%, and a `multiply` of 2.5 is +250%.
-When modifying integer values, final bonus is rounded towards 0 (truncated).
+Thus, a `multiply` value of -0.8 is -80%, and a `multiply` of 2.5 is +250%. When modifying integer
+values, final bonus is rounded towards 0 (truncated).
When multiple enchantments (e.g. one from an item and one from a bionic) modify the same value,
-their bonuses are added together without rounding, then the sum is rounded (if necessary)
-before being applied to the base value.
+their bonuses are added together without rounding, then the sum is rounded (if necessary) before
+being applied to the base value.
-Since there's no limit on number of enchantments the character can have at a time,
-the final calculated values have hardcoded bounds to prevent unintended behavior.
+Since there's no limit on number of enchantments the character can have at a time, the final
+calculated values have hardcoded bounds to prevent unintended behavior.
#### IDs of modifiable values
#### Character values
##### STRENGTH
-Strength stat.
-`base_value` here is the base stat value.
-The final value cannot go below 0.
+
+Strength stat. `base_value` here is the base stat value. The final value cannot go below 0.
##### DEXTERITY
-Dexterity stat.
-`base_value` here is the base stat value.
-The final value cannot go below 0.
+
+Dexterity stat. `base_value` here is the base stat value. The final value cannot go below 0.
##### PERCEPTION
-Perception stat.
-`base_value` here is the base stat value.
-The final value cannot go below 0.
+
+Perception stat. `base_value` here is the base stat value. The final value cannot go below 0.
##### INTELLIGENCE
-Intelligence stat.
-`base_value` here is the base stat value.
-The final value cannot go below 0.
+
+Intelligence stat. `base_value` here is the base stat value. The final value cannot go below 0.
##### SPEED
-Character speed.
-`base_value` here is character speed including pain/hunger/weight penalties.
-Final speed value cannot go below 25% of base speed.
+
+Character speed. `base_value` here is character speed including pain/hunger/weight penalties. Final
+speed value cannot go below 25% of base speed.
##### ATTACK_COST
-Melee attack cost. The lower, the better.
-`base_value` here is attack cost for given weapon including modifiers from stats and skills.
-The final value cannot go below 25.
+
+Melee attack cost. The lower, the better. `base_value` here is attack cost for given weapon
+including modifiers from stats and skills. The final value cannot go below 25.
##### MOVE_COST
-Movement cost.
-`base_value` here is tile movement cost including modifiers from clothing and traits.
+
+Movement cost. `base_value` here is tile movement cost including modifiers from clothing and traits.
The final value cannot go below 20.
##### METABOLISM
-Metabolic rate.
-This modifier ignores `add` field.
-`base_value` here is `PLAYER_HUNGER_RATE` modified by traits.
-The final value cannot go below 0.
+
+Metabolic rate. This modifier ignores `add` field. `base_value` here is `PLAYER_HUNGER_RATE`
+modified by traits. The final value cannot go below 0.
##### MANA_CAP
-Mana capacity.
-`base_value` here is character's base mana capacity modified by traits.
-The final value cannot go below 0.
+
+Mana capacity. `base_value` here is character's base mana capacity modified by traits. The final
+value cannot go below 0.
##### MANA_REGEN
-Mana regeneration rate.
-This modifier ignores `add` field.
-`base_value` here is character's base mana gain rate modified by traits.
-The final value cannot go below 0.
+
+Mana regeneration rate. This modifier ignores `add` field. `base_value` here is character's base
+mana gain rate modified by traits. The final value cannot go below 0.
##### STAMINA_CAP
-Stamina capacity.
-This modifier ignores `add` field.
-`base_value` here is character's base stamina capacity modified by traits.
-The final value cannot go below 10% of `PLAYER_MAX_STAMINA`.
+
+Stamina capacity. This modifier ignores `add` field. `base_value` here is character's base stamina
+capacity modified by traits. The final value cannot go below 10% of `PLAYER_MAX_STAMINA`.
##### STAMINA_REGEN
-Stamina regeneration rate.
-This modifier ignores `add` field.
-`base_value` here is character's base stamina gain rate modified by mouth encumbrance.
-The final value cannot go below 0.
+
+Stamina regeneration rate. This modifier ignores `add` field. `base_value` here is character's base
+stamina gain rate modified by mouth encumbrance. The final value cannot go below 0.
##### THIRST
-Thirst gain rate.
-This modifier ignores `add` field.
-`base_value` here is character's base thirst gain rate.
-The final value cannot go below 0.
+
+Thirst gain rate. This modifier ignores `add` field. `base_value` here is character's base thirst
+gain rate. The final value cannot go below 0.
##### FATIGUE
-Fatigue gain rate.
-This modifier ignores `add` field.
-`base_value` here is character's base fatigue gain rate.
-The final value cannot go below 0.
+
+Fatigue gain rate. This modifier ignores `add` field. `base_value` here is character's base fatigue
+gain rate. The final value cannot go below 0.
##### BONUS_DODGE
-Additional dodges per turn before dodge penalty kicks in.
-`base_value` here is character's base dodges per turn before penalty (usually 1).
-The final value can go below 0, which results in penalty to dodge roll.
+
+Additional dodges per turn before dodge penalty kicks in. `base_value` here is character's base
+dodges per turn before penalty (usually 1). The final value can go below 0, which results in penalty
+to dodge roll.
##### ARMOR_X
-Incoming damage modifier.
-Applied after Active Defense System bionic but before the damage is absorbed by items.
-Note that `base_value` here is incoming damage value of corresponding type,
-so positive `add` and greater than 1 `mul` will **increase** damage received by the character.
-Each damage type has its own enchant value:
-* `ARMOR_ACID`
-* `ARMOR_BASH`
-* `ARMOR_BIO`
-* `ARMOR_BULLET`
-* `ARMOR_COLD`
-* `ARMOR_CUT`
-* `ARMOR_ELEC`
-* `ARMOR_HEAT`
-* `ARMOR_STAB`
+
+Incoming damage modifier. Applied after Active Defense System bionic but before the damage is
+absorbed by items. Note that `base_value` here is incoming damage value of corresponding type, so
+positive `add` and greater than 1 `mul` will **increase** damage received by the character. Each
+damage type has its own enchant value:
+
+- `ARMOR_ACID`
+- `ARMOR_BASH`
+- `ARMOR_BIO`
+- `ARMOR_BULLET`
+- `ARMOR_COLD`
+- `ARMOR_CUT`
+- `ARMOR_ELEC`
+- `ARMOR_HEAT`
+- `ARMOR_STAB`
#### Item values
##### ITEM_ATTACK_COST
-Attack cost (melee or throwing) for this item.
-Ignores condition / location, and is always active.
-`base_value` here is base item attack cost.
-Note that the final value cannot go below 0.
+
+Attack cost (melee or throwing) for this item. Ignores condition / location, and is always active.
+`base_value` here is base item attack cost. Note that the final value cannot go below 0.
##### ITEM_DAMAGE_X
-Melee damage of this item.
-Ignores condition / location, and is always active.
-`base_value` here is base item damage of corresponding type.
-Note that the final value cannot go below 0.
-Only some damage types are supported:
-* `ITEM_DAMAGE_BASH`
-* `ITEM_DAMAGE_CUT`
-* `ITEM_DAMAGE_STAB`
+
+Melee damage of this item. Ignores condition / location, and is always active. `base_value` here is
+base item damage of corresponding type. Note that the final value cannot go below 0. Only some
+damage types are supported:
+
+- `ITEM_DAMAGE_BASH`
+- `ITEM_DAMAGE_CUT`
+- `ITEM_DAMAGE_STAB`
##### ITEM_ARMOR_X
-Incoming damage modifier for this item, applied before the damage is absorbed by the item.
-Note that `base_value` here is incoming damage value of corresponding type,
-so positive `add` and greater than 1 `mul` will **increase** damage received by the character.
-Each damage type has its own enchant value:
-* `ITEM_ARMOR_ACID`
-* `ITEM_ARMOR_BASH`
-* `ITEM_ARMOR_BIO`
-* `ITEM_ARMOR_BULLET`
-* `ITEM_ARMOR_COLD`
-* `ITEM_ARMOR_CUT`
-* `ITEM_ARMOR_ELEC`
-* `ITEM_ARMOR_HEAT`
-* `ITEM_ARMOR_STAB`
+Incoming damage modifier for this item, applied before the damage is absorbed by the item. Note that
+`base_value` here is incoming damage value of corresponding type, so positive `add` and greater than
+1 `mul` will **increase** damage received by the character. Each damage type has its own enchant
+value:
+
+- `ITEM_ARMOR_ACID`
+- `ITEM_ARMOR_BASH`
+- `ITEM_ARMOR_BIO`
+- `ITEM_ARMOR_BULLET`
+- `ITEM_ARMOR_COLD`
+- `ITEM_ARMOR_CUT`
+- `ITEM_ARMOR_ELEC`
+- `ITEM_ARMOR_HEAT`
+- `ITEM_ARMOR_STAB`
## Examples
+
```json
[
{
@@ -555,13 +620,13 @@ Each damage type has its own enchant value:
"id": "ENCH_ULTIMATE_ASSKICK",
"has": "WIELD",
"condition": "ALWAYS",
- "ench_effects": [ { "effect": "invisibility", "intensity": 1 } ],
- "hit_you_effect": [ { "id": "AEA_FIREBALL" } ],
- "hit_me_effect": [ { "id": "AEA_HEAL" } ],
- "mutations": [ "KILLER", "PARKOUR" ],
- "values": [ { "value": "STRENGTH", "multiply": 1.1, "add": -5 } ],
+ "ench_effects": [{ "effect": "invisibility", "intensity": 1 }],
+ "hit_you_effect": [{ "id": "AEA_FIREBALL" }],
+ "hit_me_effect": [{ "id": "AEA_HEAL" }],
+ "mutations": ["KILLER", "PARKOUR"],
+ "values": [{ "value": "STRENGTH", "multiply": 1.1, "add": -5 }],
"intermittent_activation": {
- "effects": [
+ "effects": [
{
"frequency": "1 hour",
"spell_effects": [
diff --git a/doc/MANUAL_OF_STYLE.md b/doc/MANUAL_OF_STYLE.md
index 35d07fd30ab5..85b84c04a15a 100644
--- a/doc/MANUAL_OF_STYLE.md
+++ b/doc/MANUAL_OF_STYLE.md
@@ -1,10 +1,15 @@
Follow these conventions when adding or editing in-game text:
1. Use US English spelling.
-2. Use double sentence spacing after periods. This means that a period that ends a sentence should be followed by two spaces. If the sentence is the last in the block of text, there should be no spaces following it.
+2. Use double sentence spacing after periods. This means that a period that ends a sentence should
+ be followed by two spaces. If the sentence is the last in the block of text, there should be no
+ spaces following it.
3. Use second person point of view (eg. "you").
-4. The names of traits, martial arts, and Compact Bionics Modules (CBM's) should be in title case. This means that each word should be capitalized unless it is an article, preposition or conjunction.
+4. The names of traits, martial arts, and Compact Bionics Modules (CBM's) should be in title case.
+ This means that each word should be capitalized unless it is an article, preposition or
+ conjunction.
5. Items and entities with proper noun names should also be in title case.
6. All other item and entity names should be in all lower-case letters.
7. Use the serial comma (Oxford comma).
-8. Use ellipsis character (…) instead of three dots (...). Replace instances of three periods with the dedicated Unicode character for ellipsis, namely U+2026.
+8. Use ellipsis character (…) instead of three dots (...). Replace instances of three periods with
+ the dedicated Unicode character for ellipsis, namely U+2026.
diff --git a/doc/MAPGEN.md b/doc/MAPGEN.md
index 4dc9d8008bc6..490dc56a27fd 100644
--- a/doc/MAPGEN.md
+++ b/doc/MAPGEN.md
@@ -1,81 +1,82 @@
# MAPGEN
-* [How buildings and terrain are generated](#how-buildings-and-terrain-are-generated)
-* [Adding mapgen entries](#adding-mapgen-entries)
- * [Methods](#methods)
- * [Mapgen definition Placement](#mapgen-definition-placement)
- * [Embedded mapgen](#embedded-mapgen)
- * [Standalone mapgen](#standalone-mapgen)
- * [Format and variables](#format-and-variables)
- * [Define mapgen "method"](#define-mapgen-method)
- * [Define overmap terrain with "om_terrain" value, array, or nested array](#define-overmap-terrain-with-om_terrain-value-array-or-nested-array)
- * [Define mapgen "weight"](#define-mapgen-weight)
- * [How "overmap_terrain" variables affect mapgen](#how-overmap_terrain-variables-affect-mapgen)
- * [Limitations / TODO](#limitations--todo)
-* [JSON object definition](#json-object-definition)
- * [Fill terrain using "fill_ter"](#fill-terrain-using-fill_ter)
- * [ASCII map using "rows" array](#ascii-map-using-rows-array)
- * [Row terrains in "terrain"](#row-terrains-in-terrain)
- * [Furniture symbols in "furniture" array](#furniture-symbols-in-furniture-array)
- * [Set terrain, furniture, or traps with a "set" array](#set-terrain-furniture-or-traps-with-a-set-array)
- * [Set things at a "point"](#set-things-at-a-point)
- * [Set things in a "line"](#set-things-in-a-line)
- * [Set things in a "square"](#set-things-in-a-square)
- * [Spawn item or monster groups with "place_groups"](#spawn-item-or-monster-groups-with-place_groups)
- * [Spawn monsters from a group with "monster"](#spawn-monsters-from-a-group-with-monster)
- * [Spawn items from a group with "item"](#spawn-items-from-a-group-with-item)
- * [Spawn a single monster with "place_monster"](#spawn-a-single-monster-with-place_monster)
- * [Spawn an entire group of monsters with "place_monsters"](#spawn-an-entire-group-of-monsters-with-place_monsters)
- * [Spawn specific items with a "place_item" array](#spawn-specific-items-with-a-place_item-array)
- * [Extra map features with specials](#extra-map-features-with-specials)
- * [Place smoke, gas, or blood with "fields"](#place-smoke-gas-or-blood-with-fields)
- * [Place NPCs with "npcs"](#place-npcs-with-npcs)
- * [Place signs with "signs"](#place-signs-with-signs)
- * [Place a vending machine and items with "vendingmachines"](#place-a-vending-machine-and-items-with-vendingmachines)
- * [Place a toilet with some amount of water with "toilets"](#place-a-toilet-with-some-amount-of-water-with-toilets)
- * [Place a gas or diesel pump with some fuel with "gaspumps"](#place-a-gas-or-diesel-pump-with-some-fuel-with-gaspumps)
- * [Place items from an item group with "items"](#place-items-from-an-item-group-with-items)
- * [Place monsters from a monster group with "monsters"](#place-monsters-from-a-monster-group-with-monsters)
- * [Place a vehicle by type or group with "vehicles"](#place-a-vehicle-by-type-or-group-with-vehicles)
- * [Place a specific item with "item"](#place-a-specific-item-with-item)
- * [Place a specific monster with "monster"](#place-a-specific-monster-with-monster)
- * [Place a trap with "traps"](#place-a-trap-with-traps)
- * [Place furniture with "furniture"](#place-furniture-with-furniture)
- * [Place terrain with "terrain"](#place-terrain-with-terrain)
- * [Place rubble and smash existing terrain with "rubble"](#place-rubble-and-smash-existing-terrain-with-rubble)
- * [Place spilled liquids with "place_liquids"](#place-spilled-liquids-with-place_liquids)
- * [Place a specific item or an item from a group with "loot"](#place-a-specific-item-or-an-item-from-a-group-with-loot)
- * [Plant seeds in a planter with "sealed_item"](#plant-seeds-in-a-planter-with-sealed_item)
- * [Place messages with "graffiti"](#place-messages-with-graffiti)
- * [Place a zone for an NPC faction with "zones"](#place-a-zone-for-an-npc-faction-with-zones)
- * [Translate terrain type with "translate_ter"](#translate-terrain-type-with-translate_ter)
- * [Apply mapgen transformation with "ter_furn_transforms"](#apply-mapgen-transformation-with-ter_furn_transforms)
- * [Rotate the map with "rotation"](#rotate-the-map-with-rotation)
- * [Pre-load a base mapgen with "predecessor_mapgen"](#pre-load-a-base-mapgen-with-predecessor_mapgen)
-* [Using update_mapgen](#using-update_mapgen)
- * [Overmap tile specification](#overmap-tile-specification)
- * ["assign_mission_target"](#assign_mission_target)
- * ["om_terrain"](#om_terrain)
-* [Mission specials](#mission-specials)
- * ["target"](#target)
+- [How buildings and terrain are generated](#how-buildings-and-terrain-are-generated)
+- [Adding mapgen entries](#adding-mapgen-entries)
+ - [Methods](#methods)
+ - [Mapgen definition Placement](#mapgen-definition-placement)
+ - [Embedded mapgen](#embedded-mapgen)
+ - [Standalone mapgen](#standalone-mapgen)
+ - [Format and variables](#format-and-variables)
+ - [Define mapgen "method"](#define-mapgen-method)
+ - [Define overmap terrain with "om_terrain" value, array, or nested array](#define-overmap-terrain-with-om_terrain-value-array-or-nested-array)
+ - [Define mapgen "weight"](#define-mapgen-weight)
+ - [How "overmap_terrain" variables affect mapgen](#how-overmap_terrain-variables-affect-mapgen)
+ - [Limitations / TODO](#limitations--todo)
+- [JSON object definition](#json-object-definition)
+ - [Fill terrain using "fill_ter"](#fill-terrain-using-fill_ter)
+ - [ASCII map using "rows" array](#ascii-map-using-rows-array)
+ - [Row terrains in "terrain"](#row-terrains-in-terrain)
+ - [Furniture symbols in "furniture" array](#furniture-symbols-in-furniture-array)
+ - [Set terrain, furniture, or traps with a "set" array](#set-terrain-furniture-or-traps-with-a-set-array)
+ - [Set things at a "point"](#set-things-at-a-point)
+ - [Set things in a "line"](#set-things-in-a-line)
+ - [Set things in a "square"](#set-things-in-a-square)
+ - [Spawn item or monster groups with "place_groups"](#spawn-item-or-monster-groups-with-place_groups)
+ - [Spawn monsters from a group with "monster"](#spawn-monsters-from-a-group-with-monster)
+ - [Spawn items from a group with "item"](#spawn-items-from-a-group-with-item)
+ - [Spawn a single monster with "place_monster"](#spawn-a-single-monster-with-place_monster)
+ - [Spawn an entire group of monsters with "place_monsters"](#spawn-an-entire-group-of-monsters-with-place_monsters)
+ - [Spawn specific items with a "place_item" array](#spawn-specific-items-with-a-place_item-array)
+ - [Extra map features with specials](#extra-map-features-with-specials)
+ - [Place smoke, gas, or blood with "fields"](#place-smoke-gas-or-blood-with-fields)
+ - [Place NPCs with "npcs"](#place-npcs-with-npcs)
+ - [Place signs with "signs"](#place-signs-with-signs)
+ - [Place a vending machine and items with "vendingmachines"](#place-a-vending-machine-and-items-with-vendingmachines)
+ - [Place a toilet with some amount of water with "toilets"](#place-a-toilet-with-some-amount-of-water-with-toilets)
+ - [Place a gas or diesel pump with some fuel with "gaspumps"](#place-a-gas-or-diesel-pump-with-some-fuel-with-gaspumps)
+ - [Place items from an item group with "items"](#place-items-from-an-item-group-with-items)
+ - [Place monsters from a monster group with "monsters"](#place-monsters-from-a-monster-group-with-monsters)
+ - [Place a vehicle by type or group with "vehicles"](#place-a-vehicle-by-type-or-group-with-vehicles)
+ - [Place a specific item with "item"](#place-a-specific-item-with-item)
+ - [Place a specific monster with "monster"](#place-a-specific-monster-with-monster)
+ - [Place a trap with "traps"](#place-a-trap-with-traps)
+ - [Place furniture with "furniture"](#place-furniture-with-furniture)
+ - [Place terrain with "terrain"](#place-terrain-with-terrain)
+ - [Place rubble and smash existing terrain with "rubble"](#place-rubble-and-smash-existing-terrain-with-rubble)
+ - [Place spilled liquids with "place_liquids"](#place-spilled-liquids-with-place_liquids)
+ - [Place a specific item or an item from a group with "loot"](#place-a-specific-item-or-an-item-from-a-group-with-loot)
+ - [Plant seeds in a planter with "sealed_item"](#plant-seeds-in-a-planter-with-sealed_item)
+ - [Place messages with "graffiti"](#place-messages-with-graffiti)
+ - [Place a zone for an NPC faction with "zones"](#place-a-zone-for-an-npc-faction-with-zones)
+ - [Translate terrain type with "translate_ter"](#translate-terrain-type-with-translate_ter)
+ - [Apply mapgen transformation with "ter_furn_transforms"](#apply-mapgen-transformation-with-ter_furn_transforms)
+ - [Rotate the map with "rotation"](#rotate-the-map-with-rotation)
+ - [Pre-load a base mapgen with "predecessor_mapgen"](#pre-load-a-base-mapgen-with-predecessor_mapgen)
+- [Using update_mapgen](#using-update_mapgen)
+ - [Overmap tile specification](#overmap-tile-specification)
+ - ["assign_mission_target"](#assign_mission_target)
+ - ["om_terrain"](#om_terrain)
+- [Mission specials](#mission-specials)
+ - ["target"](#target)
# How buildings and terrain are generated
-Cataclysm creates buildings and terrain on discovery via 'mapgen'; functions specific to an overmap terrain (the tiles
-you see in `[m]`ap are also determined by overmap terrain). Overmap terrains ("oter") are defined in
-`overmap_terrain.json`.
+Cataclysm creates buildings and terrain on discovery via 'mapgen'; functions specific to an overmap
+terrain (the tiles you see in `[m]`ap are also determined by overmap terrain). Overmap terrains
+("oter") are defined in `overmap_terrain.json`.
-By default, an oter has a single built-in mapgen function which matches the '"id"' in it's json entry (examples:
-"house", "bank", etc). Multiple functions also possible. When a player moves into range of an area marked on the map as
-a house, the game chooses semi-randomly from a list of functions for "house", picks one, and runs it, laying down walls
-and adding items, monsters, rubber chickens and whatnot. This is all done in a fraction of a second (something to keep
-in mind for later).
+By default, an oter has a single built-in mapgen function which matches the '"id"' in it's json
+entry (examples: "house", "bank", etc). Multiple functions also possible. When a player moves into
+range of an area marked on the map as a house, the game chooses semi-randomly from a list of
+functions for "house", picks one, and runs it, laying down walls and adding items, monsters, rubber
+chickens and whatnot. This is all done in a fraction of a second (something to keep in mind for
+later).
-All mapgen functions build in a 24x24 tile area - even for large buildings; obtuse but surprisingly effective methods
-are used to assemble giant 3x3 hotels, etc..
+All mapgen functions build in a 24x24 tile area - even for large buildings; obtuse but surprisingly
+effective methods are used to assemble giant 3x3 hotels, etc..
-In order to make a world that's random and (somewhat) sensical, there are numerous rules and exceptions to them, which
-are clarified below.
+In order to make a world that's random and (somewhat) sensical, there are numerous rules and
+exceptions to them, which are clarified below.
There are three methods:
@@ -83,33 +84,33 @@ There are three methods:
- JSON object definition
- Using update_mapgen
-
# Adding mapgen entries
-One doesn't need to create a new `overmap_terrain` for a new variation of a building. For a custom gas station, defining a
-mapgen entry and adding it to the "s_gas" mapgen list will add it to the random variations of gas station in the world.
-
-If you use an existing `overmap_terrain` and it has a roof or other z-level linked to its file, the other levels will be
-generated with the ground floor. To avoid this, or add your own multiple z-levels, create an `overmap_terrain` with a
-similar name (`s_gas_1`).
+One doesn't need to create a new `overmap_terrain` for a new variation of a building. For a custom
+gas station, defining a mapgen entry and adding it to the "s_gas" mapgen list will add it to the
+random variations of gas station in the world.
+If you use an existing `overmap_terrain` and it has a roof or other z-level linked to its file, the
+other levels will be generated with the ground floor. To avoid this, or add your own multiple
+z-levels, create an `overmap_terrain` with a similar name (`s_gas_1`).
## Methods
-While adding mapgen as a c++ function is one of the fastest (and the most versatile) ways to generate procedural terrain
-on the fly, this requires recompiling the game.
-
-Most of the existing c++ buildings have been moved to json and currently json mapping is the preferred method of adding
-both content and mods.
+While adding mapgen as a c++ function is one of the fastest (and the most versatile) ways to
+generate procedural terrain on the fly, this requires recompiling the game.
-* JSON: A set of json arrays and objects for defining stuff and things. Pros: Fastest to apply, mostly complete. Cons:
- Not a programming language; no if statements or variables means instances of a particular json mapgen definition
- will all be similar. Third party map editors are currently out of date.
+Most of the existing c++ buildings have been moved to json and currently json mapping is the
+preferred method of adding both content and mods.
-* JSON support includes the use of nested mapgen, smaller mapgen chunks which override a portion of the linked mapgen.
- This allows for greater variety in furniture, terrain and spawns within a single mapgen file. You can also link
- mapgen files for multiple z-level buildings and multi-tile buildings.
+- JSON: A set of json arrays and objects for defining stuff and things. Pros: Fastest to apply,
+ mostly complete. Cons: Not a programming language; no if statements or variables means instances
+ of a particular json mapgen definition will all be similar. Third party map editors are currently
+ out of date.
+- JSON support includes the use of nested mapgen, smaller mapgen chunks which override a portion of
+ the linked mapgen. This allows for greater variety in furniture, terrain and spawns within a
+ single mapgen file. You can also link mapgen files for multiple z-level buildings and multi-tile
+ buildings.
## Mapgen definition Placement
@@ -125,42 +126,40 @@ As `"mapgen": { ... }` only used in combination with the 'builtin' method:
Do not use this, use standalone instead.
-
### Standalone mapgen
-As standalone `{ "type": "mapgen", ... }` objects in a .json inside data/json. Below is the fast food restaurant.
+As standalone `{ "type": "mapgen", ... }` objects in a .json inside data/json. Below is the fast
+food restaurant.
```json
[
- {
- "type": "mapgen",
- "om_terrain": "s_restaurant_fast",
- "weight": 250,
- "method": "json",
- "object": {
- "//": "(see below)"
- }
+ {
+ "type": "mapgen",
+ "om_terrain": "s_restaurant_fast",
+ "weight": 250,
+ "method": "json",
+ "object": {
+ "//": "(see below)"
}
+ }
]
```
-Note how "om_terrain" matches the overmap "id". om_terrain is **required** for standalone mapgen entries.
-
+Note how "om_terrain" matches the overmap "id". om_terrain is **required** for standalone mapgen
+entries.
## Format and variables
-The above example only illustrate the mapgen entries, not the actual format for building stuff. However, the following
-variables impact where and how often stuff gets applied:
+The above example only illustrate the mapgen entries, not the actual format for building stuff.
+However, the following variables impact where and how often stuff gets applied:
- method
- om_terrain
- weight
-
### Define mapgen "method"
-**required**
-Values: *json* - required
+**required** Values: _json_ - required
```
"object": { (more json here) }
@@ -170,8 +169,8 @@ Values: *json* - required
**required for standalone**
-The `om_terrain` value may be declared in one of three forms: with a single overmap terrain ID, with a list of IDs, or
-with a nested list (of lists) of IDs.
+The `om_terrain` value may be declared in one of three forms: with a single overmap terrain ID, with
+a list of IDs, or with a nested list (of lists) of IDs.
With the first form, simply give the ID of an overmap terrain from `overmap_terrain.json`:
@@ -185,7 +184,8 @@ In the second form, provide a list of IDs:
"om_terrain": [ "house", "house_base" ]
```
-This creates duplicate overmap terrains by applying the same json mapgen to each of the listed overmap terrain IDs.
+This creates duplicate overmap terrains by applying the same json mapgen to each of the listed
+overmap terrain IDs.
The third option is a nested list:
@@ -193,18 +193,20 @@ The third option is a nested list:
"om_terrain": [ [ "oter_id_1a", "oter_id_1b", ... ], [ "oter_id_2a", "oter_id_2b", ... ], ... ]
```
-This form allows for multiple overmap terrains to be defined using a single json object, with the "rows" property
-expanding in blocks of 24x24 characters to accommodate as many overmap terrains as are listed here. The terrain ids are
-specified using a nested array of strings which represent the rows and columns of overmap terrain ids (found in
-`overmap_terrain.json`) that are associated with the "rows" property described in section 2.1 of this document.
+This form allows for multiple overmap terrains to be defined using a single json object, with the
+"rows" property expanding in blocks of 24x24 characters to accommodate as many overmap terrains as
+are listed here. The terrain ids are specified using a nested array of strings which represent the
+rows and columns of overmap terrain ids (found in `overmap_terrain.json`) that are associated with
+the "rows" property described in section 2.1 of this document.
-Characters mapped using the "terrain", "furniture", or any of the special mappings ("items", "monsters", etc) will be
-applied universally to all of the listed overmap terrains.
+Characters mapped using the "terrain", "furniture", or any of the special mappings ("items",
+"monsters", etc) will be applied universally to all of the listed overmap terrains.
-Placing things using x/y coordinates ("place_monsters", "place_loot", "place_item", etc) works using the full extended
-coordinates beyond 24x24. An important limitation is that ranged random coordinates (such as "x": `[ 10, 18 ]`) must not
-cross the 24x24 terrain boundaries. Ranges such as `[ 0, 23 ]` and `[ 50, 70 ]` are valid, but `[ 0, 47 ]` and
-`[ 15, 35 ]` are not because they extend beyond a single 24x24 block.
+Placing things using x/y coordinates ("place_monsters", "place_loot", "place_item", etc) works using
+the full extended coordinates beyond 24x24. An important limitation is that ranged random
+coordinates (such as "x": `[ 10, 18 ]`) must not cross the 24x24 terrain boundaries. Ranges such as
+`[ 0, 23 ]` and `[ 50, 70 ]` are valid, but `[ 0, 47 ]` and `[ 15, 35 ]` are not because they extend
+beyond a single 24x24 block.
Example:
@@ -215,58 +217,56 @@ Example:
]
```
-In this example, the "rows" property should be 48x48, with each quadrant of 24x24 being associated with each of the four
-apartments_mod_tower overmap terrain ids specified.
-
+In this example, the "rows" property should be 48x48, with each quadrant of 24x24 being associated
+with each of the four apartments_mod_tower overmap terrain ids specified.
### Define mapgen "weight"
-(optional) When the game randomly picks mapgen functions, each function's weight value determines how rare it is. 1000
-is the default, so adding something with weight '500' will make it appear 1/3 times, unless more functions are added.
-(An insanely high value like 10000000 is useful for testing)
+(optional) When the game randomly picks mapgen functions, each function's weight value determines
+how rare it is. 1000 is the default, so adding something with weight '500' will make it appear 1/3
+times, unless more functions are added. (An insanely high value like 10000000 is useful for testing)
-Values: number - *0 disables*
+Values: number - _0 disables_
Default: 1000
-
## How "overmap_terrain" variables affect mapgen
-"id" is used to determine the required "om_terrain" id for standalone, *except* when the following variables are set in
-"overmap_terrain":
+"id" is used to determine the required "om_terrain" id for standalone, _except_ when the following
+variables are set in "overmap_terrain":
-* "extras" - applies rare, random scenes after mapgen; helicopter crashes, etc
-* "mondensity" - determines the default 'density' value for `"place_groups": [ { "monster": ...` (json). If this is not
- set then place_monsters will not work without its own explicitly set density argument.
+- "extras" - applies rare, random scenes after mapgen; helicopter crashes, etc
+- "mondensity" - determines the default 'density' value for `"place_groups": [ { "monster": ...`
+ (json). If this is not set then place_monsters will not work without its own explicitly set
+ density argument.
## Limitations / TODO
-* JSON: adding specific monster spawns are still WIP.
-* The old mapgen.cpp system involved *The Biggest "if / else if / else if / .." Statement Known to Man*(tm), and is only
- halfway converted to the "builtin" mapgen class. This means that while custom mapgen functions are allowed, the game
- will cheerfully forget the default if one is added.
-* TODO: Add to this list.
-
+- JSON: adding specific monster spawns are still WIP.
+- The old mapgen.cpp system involved _The Biggest "if / else if / else if / .." Statement Known to
+ Man_(tm), and is only halfway converted to the "builtin" mapgen class. This means that while
+ custom mapgen functions are allowed, the game will cheerfully forget the default if one is added.
+- TODO: Add to this list.
# JSON object definition
-The JSON object for a mapgen entry must include either `"fill_ter"`, or `"rows"` and `"terrain"`. All other fields are
-optional.
-
+The JSON object for a mapgen entry must include either `"fill_ter"`, or `"rows"` and `"terrain"`.
+All other fields are optional.
## Fill terrain using "fill_ter"
-*required if "rows" is unset* Fill with the given terrain.
+
+_required if "rows" is unset_ Fill with the given terrain.
Value: `"string"`: Valid terrain id from data/json/terrain.json
Example: `"fill_ter": "t_grass"`
-
## ASCII map using "rows" array
-*required if "fill_ter" is unset*
-Nested array of 24 (or 48) strings, each 24 (or 48) characters long, where each character is defined by "terrain" and
-optionally "furniture" or other entries below.
+_required if "fill_ter" is unset_
+
+Nested array of 24 (or 48) strings, each 24 (or 48) characters long, where each character is defined
+by "terrain" and optionally "furniture" or other entries below.
Usage:
@@ -274,22 +274,24 @@ Usage:
"rows": [ "row1...", "row2...", ..., "row24..." ]
```
-Other parts can be linked with this map, for example one can place things like a gaspump (with gasoline) or a toilet
-(with water) or items from an item group or fields at the square given by a character.
-
-Any character used here must have some definition elsewhere to indicate its purpose. Failing to do so is an error which
-will be caught by running the tests. The tests will run automatically when you make a pull request for adding new maps
-to the game. If you have defined `fill_ter` or you are writing nested mapgen, then there are a couple of exceptions.
-The space and period characters (` ` and `.`) are permitted to have no definition and be used for 'background' in the
-`rows`.
-
-As keys, you can use any Unicode characters which are not double-width. This includes for example most European
-alphabets but not Chinese characters. If you intend to take advantage of this, ensure that your editor is saving the
-file with a UTF-8 encoding. Accents are acceptable, even when using [combining
-characters](https://en.wikipedia.org/wiki/Combining_character). No normalization is performed; comparison is done at
-the raw bytes (code unit) level. Therefore, there are literally an infinite number of mapgen key characters available.
-Please don't abuse this by using distinct characters that are visually indistinguishable, or which are so rare as to be
-unlikely to render correctly for other developers.
+Other parts can be linked with this map, for example one can place things like a gaspump (with
+gasoline) or a toilet (with water) or items from an item group or fields at the square given by a
+character.
+
+Any character used here must have some definition elsewhere to indicate its purpose. Failing to do
+so is an error which will be caught by running the tests. The tests will run automatically when you
+make a pull request for adding new maps to the game. If you have defined `fill_ter` or you are
+writing nested mapgen, then there are a couple of exceptions. The space and period characters (``
+and `.`) are permitted to have no definition and be used for 'background' in the `rows`.
+
+As keys, you can use any Unicode characters which are not double-width. This includes for example
+most European alphabets but not Chinese characters. If you intend to take advantage of this, ensure
+that your editor is saving the file with a UTF-8 encoding. Accents are acceptable, even when using
+[combining characters](https://en.wikipedia.org/wiki/Combining_character). No normalization is
+performed; comparison is done at the raw bytes (code unit) level. Therefore, there are literally an
+infinite number of mapgen key characters available. Please don't abuse this by using distinct
+characters that are visually indistinguishable, or which are so rare as to be unlikely to render
+correctly for other developers.
Example:
@@ -320,10 +322,10 @@ Example:
" ,,,,,,,,,,,,,,,,,,,, ",
" dd "
],
-
```
### Row terrains in "terrain"
+
**required by "rows"**
Defines terrain ids for "rows", each key is a single character with a terrain id string
@@ -366,10 +368,11 @@ Example:
```
### Furniture symbols in "furniture" array
+
**optional**
-Defines furniture ids for "rows" ( each character in rows is a terrain -or- terrain/furniture combo ). "f_null" means no
-furniture but the entry can be left out
+Defines furniture ids for "rows" ( each character in rows is a terrain -or- terrain/furniture combo
+). "f_null" means no furniture but the entry can be left out
Example:
@@ -392,7 +395,9 @@ Example:
```
## Set terrain, furniture, or traps with a "set" array
-**optional** Specific commands to set terrain, furniture, traps, radiation, etc. Array is processed in order.
+
+**optional** Specific commands to set terrain, furniture, traps, radiation, etc. Array is processed
+in order.
Value: `[ array of {objects} ]: [ { "point": .. }, { "line": .. }, { "square": .. }, ... ]`
@@ -406,29 +411,28 @@ Example:
]
```
-All X and Y values may be either a single integer between `0` and `23`, or an array of two integers `[ n1, n2 ]` (each
-between `0` and `23`). If X or Y are set to an array, the result is a random number in that range (inclusive). In the above
-examples, the furniture `"f_chair"` is always at coordinates `"x": 5, "y": 10`, but the trap `"tr_beartrap"` is
-randomly repeated in the area `"x": [ 0, 23 ], "y": [ 5, 18 ]"`.
+All X and Y values may be either a single integer between `0` and `23`, or an array of two integers
+`[ n1, n2 ]` (each between `0` and `23`). If X or Y are set to an array, the result is a random
+number in that range (inclusive). In the above examples, the furniture `"f_chair"` is always at
+coordinates `"x": 5, "y": 10`, but the trap `"tr_beartrap"` is randomly repeated in the area
+`"x": [ 0, 23 ], "y": [ 5, 18 ]"`.
See terrain.json, furniture.json, and trap.json for "id" strings.
-
### Set things at a "point"
- Requires "point" type, and coordinates "x" and "y"
- For "point" type "radiation", requires "amount"
- For other types, requires "id" of terrain, furniture, or trap
-| Field | Description
-| --- | ---
-| point | Allowed values: `"terrain"`, `"furniture"`, `"trap"`, `"radiation"`
-| id | Terrain, furniture, or trap ID. Examples: `"id": "f_counter"`, `"id": "tr_beartrap"`. Omit for "radiation".
-| x, y | X, Y coordinates. Value from `0-23`, or range `[ 0-23, 0-23 ]` for a random value in that range. Example: `"x": 12, "y": [ 5, 15 ]`
-| amount | Radiation amount. Value from `0-100`.
-| chance | (optional) One-in-N chance to apply
-| repeat | (optional) Value: `[ n1, n2 ]`. Spawn item randomly between `n1` and `n2` times. Only makes sense if the coordinates are random. Example: `[ 1, 3 ]` - repeat 1-3 times.
-
+| Field | Description |
+| ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| point | Allowed values: `"terrain"`, `"furniture"`, `"trap"`, `"radiation"` |
+| id | Terrain, furniture, or trap ID. Examples: `"id": "f_counter"`, `"id": "tr_beartrap"`. Omit for "radiation". |
+| x, y | X, Y coordinates. Value from `0-23`, or range `[ 0-23, 0-23 ]` for a random value in that range. Example: `"x": 12, "y": [ 5, 15 ]` |
+| amount | Radiation amount. Value from `0-100`. |
+| chance | (optional) One-in-N chance to apply |
+| repeat | (optional) Value: `[ n1, n2 ]`. Spawn item randomly between `n1` and `n2` times. Only makes sense if the coordinates are random. Example: `[ 1, 3 ]` - repeat 1-3 times. |
### Set things in a "line"
@@ -437,20 +441,20 @@ See terrain.json, furniture.json, and trap.json for "id" strings.
- For other types, requires "id" of terrain, furniture, or trap
Example:
+
```json
{ "line": "terrain", "id": "t_lava", "x": 5, "y": 5, "x2": 20, "y2": 20 }
```
-| Field | Description
-| --- | ---
-| line | Allowed values: `"terrain"`, `"furniture"`, `"trap"`, `"radiation"`
-| id | Terrain, furniture, or trap ID. Examples: `"id": "f_counter"`, `"id": "tr_beartrap"`. Omit for "radiation".
-| x, y | Start X, Y coordinates. Value from `0-23`, or range `[ 0-23, 0-23 ]` for a random value in that range. Example: `"x": 12, "y": [ 5, 15 ]`
-| x2, y2 | End X, Y coordinates. Value from `0-23`, or range `[ 0-23, 0-23 ]` for a random value in that range. Example: `"x": 22, "y": [ 15, 20 ]`
-| amount | Radiation amount. Value from `0-100`.
-| chance | (optional) One-in-N chance to apply
-| repeat | (optional) Value: `[ n1, n2 ]`. Spawn item randomly between `n1` and `n2` times. Only makes sense if the coordinates are random. Example: `[ 1, 3 ]` - repeat 1-3 times.
-
+| Field | Description |
+| ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| line | Allowed values: `"terrain"`, `"furniture"`, `"trap"`, `"radiation"` |
+| id | Terrain, furniture, or trap ID. Examples: `"id": "f_counter"`, `"id": "tr_beartrap"`. Omit for "radiation". |
+| x, y | Start X, Y coordinates. Value from `0-23`, or range `[ 0-23, 0-23 ]` for a random value in that range. Example: `"x": 12, "y": [ 5, 15 ]` |
+| x2, y2 | End X, Y coordinates. Value from `0-23`, or range `[ 0-23, 0-23 ]` for a random value in that range. Example: `"x": 22, "y": [ 15, 20 ]` |
+| amount | Radiation amount. Value from `0-100`. |
+| chance | (optional) One-in-N chance to apply |
+| repeat | (optional) Value: `[ n1, n2 ]`. Spawn item randomly between `n1` and `n2` times. Only makes sense if the coordinates are random. Example: `[ 1, 3 ]` - repeat 1-3 times. |
### Set things in a "square"
@@ -458,160 +462,169 @@ Example:
- For "square" type "radiation", requires "amount"
- For other types, requires "id" of terrain, furniture, or trap
-The "square" arguments are the same as for "line", but "x", "y" and "x2", "y2" define opposite corners.
+The "square" arguments are the same as for "line", but "x", "y" and "x2", "y2" define opposite
+corners.
Example:
+
```json
-{ "square": "radiation", "amount": 10, "x": [ 0, 5 ], "y": [ 0, 5 ], "x2": [ 18, 23 ], "y2": [ 18, 23 ] }
+{ "square": "radiation", "amount": 10, "x": [0, 5], "y": [0, 5], "x2": [18, 23], "y2": [18, 23] }
```
-| Field | Description
-| --- | ---
-| square | Allowed values: `"terrain"`, `"furniture"`, `"trap"`, `"radiation"`
-| id | Terrain, furniture, or trap ID. Examples: `"id": "f_counter"`, `"id": "tr_beartrap"`. Omit for "radiation".
-| x, y | Top-left corner of square.
-| x2, y2 | Bottom-right corner of square.
-
+| Field | Description |
+| ------ | ----------------------------------------------------------------------------------------------------------- |
+| square | Allowed values: `"terrain"`, `"furniture"`, `"trap"`, `"radiation"` |
+| id | Terrain, furniture, or trap ID. Examples: `"id": "f_counter"`, `"id": "tr_beartrap"`. Omit for "radiation". |
+| x, y | Top-left corner of square. |
+| x2, y2 | Bottom-right corner of square. |
## Spawn item or monster groups with "place_groups"
+
**optional** Spawn items or monsters from item_groups.json and monster_groups.json
Value: `[ array of {objects} ]: [ { "monster": ... }, { "item": ... }, ... ]`
### Spawn monsters from a group with "monster"
-| Field | Description
-| --- | ---
-| monster | (required) Value: `"MONSTER_GROUP"`. The monster group id, which picks random critters from a list
-| x, y | (required) Spawn coordinates. Value from `0-23`, or range `[ 0-23, 0-23 ]` for a random value in that range.
-| density | (optional) Floating-point multiplier to "chance" (see below).
-| chance | (optional) One-in-N chance to spawn
+| Field | Description |
+| ------- | ------------------------------------------------------------------------------------------------------------ |
+| monster | (required) Value: `"MONSTER_GROUP"`. The monster group id, which picks random critters from a list |
+| x, y | (required) Spawn coordinates. Value from `0-23`, or range `[ 0-23, 0-23 ]` for a random value in that range. |
+| density | (optional) Floating-point multiplier to "chance" (see below). |
+| chance | (optional) One-in-N chance to spawn |
Example:
```json
-{ "monster": "GROUP_ZOMBIE", "x": [ 13, 15 ], "y": 15, "chance": 10 }
+{ "monster": "GROUP_ZOMBIE", "x": [13, 15], "y": 15, "chance": 10 }
```
-When using a range for `"x"` or `"y"`, the minimum and maximum values will be used in creating rectangle coordinates to
-be used by `map::place_spawns`. Each monster generated from the monster group will be placed in a different random
-location within the rectangle. The values in the above example will produce a rectangle for `map::place_spawns` from (
-13, 15 ) to ( 15, 15 ) inclusive.
-
-The optional "density" is a floating-point multipier to the "chance" value. If the result is bigger than 100% it
-gurantees one spawn point for every 100% and the rest is evaluated by chance (one added or not). Then the monsters are
-spawned according to their spawn-point cost "cost_multiplier" defined in the monster groups. Additionally all overmap
-densities within a square of raduis 3 (7x7 around player - exact value in mapgen.cpp/MON_RADIUS macro) are added to
-this. The "pack_size" modifier in monstergroups is a random multiplier to the rolled spawn point amount.
-
+When using a range for `"x"` or `"y"`, the minimum and maximum values will be used in creating
+rectangle coordinates to be used by `map::place_spawns`. Each monster generated from the monster
+group will be placed in a different random location within the rectangle. The values in the above
+example will produce a rectangle for `map::place_spawns` from ( 13, 15 ) to ( 15, 15 ) inclusive.
+The optional "density" is a floating-point multipier to the "chance" value. If the result is bigger
+than 100% it gurantees one spawn point for every 100% and the rest is evaluated by chance (one added
+or not). Then the monsters are spawned according to their spawn-point cost "cost_multiplier" defined
+in the monster groups. Additionally all overmap densities within a square of raduis 3 (7x7 around
+player - exact value in mapgen.cpp/MON_RADIUS macro) are added to this. The "pack_size" modifier in
+monstergroups is a random multiplier to the rolled spawn point amount.
### Spawn items from a group with "item"
-| Field | Description
-| --- | ---
-| item | (required) Value: "ITEM_GROUP". The item group id, which picks random stuff from a list.
-| x, y | (required) Spawn coordinates. Value from `0-23`, or range `[ 0-23, 0-23 ]` for a random value in that range.
-| chance | (required) Percentage chance to spawn.
+| Field | Description |
+| ------ | ------------------------------------------------------------------------------------------------------------ |
+| item | (required) Value: "ITEM_GROUP". The item group id, which picks random stuff from a list. |
+| x, y | (required) Spawn coordinates. Value from `0-23`, or range `[ 0-23, 0-23 ]` for a random value in that range. |
+| chance | (required) Percentage chance to spawn. |
Example:
```json
-{ "item": "livingroom", "x": 12, "y": [ 5, 15 ], "chance": 50 }
+{ "item": "livingroom", "x": 12, "y": [5, 15], "chance": 50 }
```
-When using a range for `"x"` or `"y"`, the minimum and maximum values will be used in creating rectangle coordinates to
-be used by `map::place_items`. Each item from the item group will be placed in a different random location within the
-rectangle. These values in the above example will produce a rectangle for map::place_items from ( 12, 5 ) to ( 12, 15 )
-inclusive.
-
+When using a range for `"x"` or `"y"`, the minimum and maximum values will be used in creating
+rectangle coordinates to be used by `map::place_items`. Each item from the item group will be placed
+in a different random location within the rectangle. These values in the above example will produce
+a rectangle for map::place_items from ( 12, 5 ) to ( 12, 15 ) inclusive.
## Spawn a single monster with "place_monster"
-**optional** Spawn single monster. Either specific monster or a random monster from a monster group. Is affected by spawn density game setting.
+**optional** Spawn single monster. Either specific monster or a random monster from a monster group.
+Is affected by spawn density game setting.
Value: `[ array of {objects} ]: [ { "monster": ... } ]`
-| Field | Description
-| --- | ---
-| monster | ID of the monster to spawn.
-| group | ID of the monster group from which the spawned monster is selected. `monster` and `group` should not be used together. `group` will act over `monster`.
-| x, y | Spawn coordinates ( specific or area rectangle ). Value: 0-23 or `[ 0-23, 0-23 ]` - random value between `[ a, b ]`.
-| chance | Percentage chance to do spawning. If repeat is used each repeat has separate chance.
-| repeat | The spawning is repeated this many times. Can be a number or a range.
-| pack_size | How many monsters are spawned. Can be single number or range like `[1-4]`. Is affected by the chance and spawn density. Ignored when spawning from a group.
-| one_or_none | Do not allow more than one to spawn due to high spawn density. If repeat is not defined or pack size is defined this defaults to true true, otherwise this defaults to false. Ignored when spawning from a group.
-| friendly | Set true to make the monster friendly. Default false.
-| name | Extra name to display on the monster.
-| target | Set to true to make this into mission target. Only works when the monster is spawned from a mission.
-
-Note that high spawn density game setting can cause extra monsters to spawn when `monster` is used. When `group` is used
-only one monster will spawn.
-
-When using a range for `"x"` or `"y"`, the minimum and maximum values will be used in creating rectangle coordinates to
-be used by `map::place_spawns`. Each monster generated from the monster group will be placed in a different random
-location within the rectangle. Example: `"x": 12, "y": [ 5, 15 ]` - these values will produce a rectangle for
-`map::place_spawns` from ( 12, 5 ) to ( 12, 15 ) inclusive.
+| Field | Description |
+| ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| monster | ID of the monster to spawn. |
+| group | ID of the monster group from which the spawned monster is selected. `monster` and `group` should not be used together. `group` will act over `monster`. |
+| x, y | Spawn coordinates ( specific or area rectangle ). Value: 0-23 or `[ 0-23, 0-23 ]` - random value between `[ a, b ]`. |
+| chance | Percentage chance to do spawning. If repeat is used each repeat has separate chance. |
+| repeat | The spawning is repeated this many times. Can be a number or a range. |
+| pack_size | How many monsters are spawned. Can be single number or range like `[1-4]`. Is affected by the chance and spawn density. Ignored when spawning from a group. |
+| one_or_none | Do not allow more than one to spawn due to high spawn density. If repeat is not defined or pack size is defined this defaults to true true, otherwise this defaults to false. Ignored when spawning from a group. |
+| friendly | Set true to make the monster friendly. Default false. |
+| name | Extra name to display on the monster. |
+| target | Set to true to make this into mission target. Only works when the monster is spawned from a mission. |
+
+Note that high spawn density game setting can cause extra monsters to spawn when `monster` is used.
+When `group` is used only one monster will spawn.
+
+When using a range for `"x"` or `"y"`, the minimum and maximum values will be used in creating
+rectangle coordinates to be used by `map::place_spawns`. Each monster generated from the monster
+group will be placed in a different random location within the rectangle. Example:
+`"x": 12, "y": [ 5, 15 ]` - these values will produce a rectangle for `map::place_spawns` from ( 12,
+5 ) to ( 12, 15 ) inclusive.
Example:
+
```json
"place_monster": [
{ "group": "GROUP_REFUGEE_BOSS_ZOMBIE", "name": "Sean McLaughlin", "x": 10, "y": 10, "target": true }
]
```
-This places a single random monster from group "GROUP_REFUGEE_BOSS_ZOMBIE", sets the name to "Sean McLaughlin", spawns
-the monster at coordinate (10, 10) and also sets the monster as the target of this mission.
+This places a single random monster from group "GROUP_REFUGEE_BOSS_ZOMBIE", sets the name to "Sean
+McLaughlin", spawns the monster at coordinate (10, 10) and also sets the monster as the target of
+this mission.
Example:
+
```json
"place_monster": [
{ "monster": "mon_secubot", "x": [ 7, 18 ], "y": [ 7, 18 ], "chance": 30, "repeat": [1, 3] }
]
```
-This places "mon_secubot" at random coordinate (7-18, 7-18). The monster is placed with 30% probablity. The placement is
-repeated by random number of times `[1-3]`.
-
+This places "mon_secubot" at random coordinate (7-18, 7-18). The monster is placed with 30%
+probablity. The placement is repeated by random number of times `[1-3]`.
## Spawn an entire group of monsters with "place_monsters"
-Using `place_monsters` to spawn a group of monsters works in a similar fashion to `place_monster`. The key difference is that `place_monsters` guarantees that each valid entry in the group is spawned. It is strongly advised that you avoid using this flag with larger monster groups, as the total number of spawns is quite difficult to control.
-|Field|Description |
-|--|--|
-| monster | The ID of the monster group that you wish to spawn |
-| x, y | Spawn coordinates ( specific or area rectangle ). Value: 0-23 or `[ 0-23, 0-23 ]` - random value between `[ a, b ]`.
-| chance | Represents a 1 in N chance that the entire group will spawn. This is done once for each repeat. If this dice roll fails, the entire group specified will not spawn. Leave blank to guarantee spawns.
-| repeat | The spawning is repeated this many times. Can be a number or a range. Again, this represents the number of times the group will be spawned.
-| density | This number is multiplied by the spawn density of the world the player is in and then probabilistically rounded to determine how many times to spawn the group. This is done for each time the spawn is repeated. For instance, if the final multiplier from this calculation ends up being `2`, and the repeat value is `6`, then the group will be spawned `2 * 6` or 12 times.
+Using `place_monsters` to spawn a group of monsters works in a similar fashion to `place_monster`.
+The key difference is that `place_monsters` guarantees that each valid entry in the group is
+spawned. It is strongly advised that you avoid using this flag with larger monster groups, as the
+total number of spawns is quite difficult to control.
+| Field | Description |
+| ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| monster | The ID of the monster group that you wish to spawn |
+| x, y | Spawn coordinates ( specific or area rectangle ). Value: 0-23 or `[ 0-23, 0-23 ]` - random value between `[ a, b ]`. |
+| chance | Represents a 1 in N chance that the entire group will spawn. This is done once for each repeat. If this dice roll fails, the entire group specified will not spawn. Leave blank to guarantee spawns. |
+| repeat | The spawning is repeated this many times. Can be a number or a range. Again, this represents the number of times the group will be spawned. |
+| density | This number is multiplied by the spawn density of the world the player is in and then probabilistically rounded to determine how many times to spawn the group. This is done for each time the spawn is repeated. For instance, if the final multiplier from this calculation ends up being `2`, and the repeat value is `6`, then the group will be spawned `2 * 6` or 12 times. |
## Spawn specific items with a "place_item" array
-**optional** A list of *specific* things to add. WIP: Monsters and vehicles will be here too
+
+**optional** A list of _specific_ things to add. WIP: Monsters and vehicles will be here too
Value: `[ array of {objects} ]: [ { "item", ... }, ... ]`
Example:
+
```json
"place_item": [
{ "item": "weed", "x": 14, "y": 15, "amount": [ 10, 20 ], "repeat": [1, 3], "chance": 20 }
]
```
-| Field | Description
-| --- | ---
-| item | (required) ID of the item to spawn
-| x, y | (required) Spawn coordinates. Value from `0-23`, or range `[ 0-23, 0-23 ]` for a random value in that range.
-| amount | (required) Number of items to spawn. Single integer, or range `[ a, b ]` for a random value in that range.
-| chance | (optional) One-in-N chance to spawn item.
-| repeat | (optional) Value: `[ n1, n2 ]`. Spawn item randomly between `n1` and `n2` times. Only makes sense if the coordinates are random. Example: `[ 1, 3 ]` - repeat 1-3 times.
-
+| Field | Description |
+| ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| item | (required) ID of the item to spawn |
+| x, y | (required) Spawn coordinates. Value from `0-23`, or range `[ 0-23, 0-23 ]` for a random value in that range. |
+| amount | (required) Number of items to spawn. Single integer, or range `[ a, b ]` for a random value in that range. |
+| chance | (optional) One-in-N chance to spawn item. |
+| repeat | (optional) Value: `[ n1, n2 ]`. Spawn item randomly between `n1` and `n2` times. Only makes sense if the coordinates are random. Example: `[ 1, 3 ]` - repeat 1-3 times. |
## Extra map features with specials
+
**optional** Special map features that do more than just placing furniture / terrain.
-Specials can be defined either via a mapping like the terrain / furniture mapping using the "rows" entry above or
-through their exact location by its coordinates.
+Specials can be defined either via a mapping like the terrain / furniture mapping using the "rows"
+entry above or through their exact location by its coordinates.
The mapping is defined with a json object like this:
@@ -624,13 +637,13 @@ The mapping is defined with a json object like this:
}
```
-`""` is one of the types listed below. `` is a json object with content specific to
-the special type. Some types require no data at all or all their data is optional, an empty object is enough for those
-specials. You can define as many mapping as you want.
+`""` is one of the types listed below. `` is a json object with
+content specific to the special type. Some types require no data at all or all their data is
+optional, an empty object is enough for those specials. You can define as many mapping as you want.
-Each mapping can be an array, for things that can appear several times on the tile (e.g. items, fields) each entry of
-the array is applied in order. For traps, furniture and terrain, one entry is randomly chosen (all entries have the same
-chances) and applied.
+Each mapping can be an array, for things that can appear several times on the tile (e.g. items,
+fields) each entry of the array is applied in order. For traps, furniture and terrain, one entry is
+randomly chosen (all entries have the same chances) and applied.
Example (places grass at 2/3 of all '.' square and dirt at 1/3 of them):
@@ -640,8 +653,9 @@ Example (places grass at 2/3 of all '.' square and dirt at 1/3 of them):
}
```
-It is also possible to specify the number of instances (and consequently their chance) directly, which is particularly
-useful for rare occurrences (rather than repeating the common value many times):
+It is also possible to specify the number of instances (and consequently their chance) directly,
+which is particularly useful for rare occurrences (rather than repeating the common value many
+times):
```json
"terrain" : {
@@ -649,7 +663,6 @@ useful for rare occurrences (rather than repeating the common value many times):
}
```
-
Example (places a blood and a bile field on each '.' square):
```json
@@ -659,6 +672,7 @@ Example (places a blood and a bile field on each '.' square):
```
Or define the mappings for one character at once:
+
```json
"mapping" : {
".": {
@@ -669,9 +683,11 @@ Or define the mappings for one character at once:
}
}
```
+
This might be more useful if you want to put many different type of things on one place.
Defining specials through their specific location:
+
```
"place_" : {
{ "x": , "y": , },
@@ -679,10 +695,12 @@ Defining specials through their specific location:
}
```
-`` and `` define where the special is placed (x is horizontal, y vertical). Valid value are in the range 0..23,
-min-max values are also supported: `"x": [ 0, 23 ], "y": [ 0, 23 ]` places the special anyway on the map.
+`` and `` define where the special is placed (x is horizontal, y vertical). Valid value are in
+the range 0..23, min-max values are also supported: `"x": [ 0, 23 ], "y": [ 0, 23 ]` places the
+special anyway on the map.
-Example with mapping (the characters `"O"` and `";"` should appear in the rows array where the specials should appear):
+Example with mapping (the characters `"O"` and `";"` should appear in the rows array where the
+specials should appear):
```json
"gaspumps": {
@@ -693,7 +711,8 @@ Example with mapping (the characters `"O"` and `";"` should appear in the rows a
}
```
-The amount of water to be placed in toilets is optional, an empty entry is therefor completely valid.
+The amount of water to be placed in toilets is optional, an empty entry is therefor completely
+valid.
Example with coordinates:
@@ -707,12 +726,15 @@ Example with coordinates:
```
Terrain, furniture and traps can specified as a single string, not a json object:
+
```json
"traps" : {
".": "tr_beartrap"
}
```
+
Same as
+
```json
"traps" : {
".": { "trap": "tr_beartrap" }
@@ -721,13 +743,12 @@ Same as
### Place smoke, gas, or blood with "fields"
-| Field | Description
-| --- | ---
-| field | (required, string) the field type (e.g. `"fd_blood"`, `"fd_smoke"`)
-| density | (optional, integer) field density. Defaults to 1. Possible values are 1, 2, or 3.
-| intensity | (optional, integer) how concentrated the field is, from 1 to 3 or more. See `data/json/field_type.json`
-| age | (optional, integer) field age. Defaults to 0.
-
+| Field | Description |
+| --------- | ------------------------------------------------------------------------------------------------------- |
+| field | (required, string) the field type (e.g. `"fd_blood"`, `"fd_smoke"`) |
+| density | (optional, integer) field density. Defaults to 1. Possible values are 1, 2, or 3. |
+| intensity | (optional, integer) how concentrated the field is, from 1 to 3 or more. See `data/json/field_type.json` |
+| age | (optional, integer) field age. Defaults to 0. |
### Place NPCs with "npcs"
@@ -737,18 +758,17 @@ Example:
"npcs": { "A": { "class": "NC_REFUGEE", "target": true, "add_trait": "ASTHMA" } }
```
-| Field | Description
-| --- | ---
-| class | (required, string) the npc class id, see `data/json/npcs/npc.json` or define your own npc class.
-| target | (optional, bool) this NPC is a mission target. Only valid for `update_mapgen`.
-| add_trait | (optional, string or string array) this NPC gets these traits, in addition to any from the class definition.
-
+| Field | Description |
+| --------- | ------------------------------------------------------------------------------------------------------------ |
+| class | (required, string) the npc class id, see `data/json/npcs/npc.json` or define your own npc class. |
+| target | (optional, bool) this NPC is a mission target. Only valid for `update_mapgen`. |
+| add_trait | (optional, string or string array) this NPC gets these traits, in addition to any from the class definition. |
### Place signs with "signs"
-Places a sign (furniture `f_sign`) with a message written on it. Either "signage" or "snippet" must be defined. The
-message may include tags like ``, ``, and `` that will insert a randomly generated
-name, or `` that will insert the nearest city name.
+Places a sign (furniture `f_sign`) with a message written on it. Either "signage" or "snippet" must
+be defined. The message may include tags like ``, ``, and ``
+that will insert a randomly generated name, or `` that will insert the nearest city name.
Example:
@@ -756,81 +776,76 @@ Example:
"signs": { "P": { "signage": "Subway map: stop" } }
```
-| Field | Description
-| --- | ---
-| signage | (optional, string) the message that should appear on the sign.
-| snippet | (optional, string) a category of snippets that can appear on the sign.
-
+| Field | Description |
+| ------- | ---------------------------------------------------------------------- |
+| signage | (optional, string) the message that should appear on the sign. |
+| snippet | (optional, string) a category of snippets that can appear on the sign. |
### Place a vending machine and items with "vendingmachines"
-Places a vending machine (furniture) and fills it with items from an item group. The machine can sometimes spawn as broken one.
-
-| Field | Description
-| --- | ---
-| item_group | (optional, string) the item group that is used to create items inside the machine. It defaults to either "vending_food" or "vending_drink" (randomly chosen).
+Places a vending machine (furniture) and fills it with items from an item group. The machine can
+sometimes spawn as broken one.
+| Field | Description |
+| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| item_group | (optional, string) the item group that is used to create items inside the machine. It defaults to either "vending_food" or "vending_drink" (randomly chosen). |
### Place a toilet with some amount of water with "toilets"
Places a toilet (furniture) and adds water to it.
-| Field | Description
-| --- | ---
-| amount | (optional, integer or min/max array) the amount of water to be placed in the toilet.
-
+| Field | Description |
+| ------ | ------------------------------------------------------------------------------------ |
+| amount | (optional, integer or min/max array) the amount of water to be placed in the toilet. |
### Place a gas or diesel pump with some fuel with "gaspumps"
Places a gas pump with gasoline (or sometimes diesel) in it.
-| Field | Description
-| --- | ---
-| amount | (optional, integer or min/max array) the amount of fuel to be placed in the pump.
-| fuel | (optional, string: "gasoline" or "diesel") the type of fuel to be placed in the pump.
-
+| Field | Description |
+| ------ | ------------------------------------------------------------------------------------- |
+| amount | (optional, integer or min/max array) the amount of fuel to be placed in the pump. |
+| fuel | (optional, string: "gasoline" or "diesel") the type of fuel to be placed in the pump. |
### Place items from an item group with "items"
-| Field | Description
-| --- | ---
-| item | (required, string or itemgroup object) the item group to use.
-| chance | (optional, integer or min/max array) x in 100 chance that a loop will continue to spawn items from the group (which itself may spawn multiple items or not depending on its type, see `ITEM_SPAWN.md`), unless the chance is 100, in which case it will trigger the item group spawn exactly 1 time (see `map::place_items`).
-| repeat | (optional, integer or min/max array) the number of times to repeat this placement, default is 1.
-
+| Field | Description |
+| ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| item | (required, string or itemgroup object) the item group to use. |
+| chance | (optional, integer or min/max array) x in 100 chance that a loop will continue to spawn items from the group (which itself may spawn multiple items or not depending on its type, see `ITEM_SPAWN.md`), unless the chance is 100, in which case it will trigger the item group spawn exactly 1 time (see `map::place_items`). |
+| repeat | (optional, integer or min/max array) the number of times to repeat this placement, default is 1. |
### Place monsters from a monster group with "monsters"
The actual monsters are spawned when the map is loaded. Fields:
-| Field | Description
-| --- | ---
-| monster | (required, string) a monster group id, when the map is loaded, a random monsters from that group are spawned.
-| density | (optional, float) if defined, it overrides the default monster density at the location (monster density is bigger towards the city centers) (see `map::place_spawns`).
-| chance | (optional, integer or min/max array) one in x chance of spawn point being created (see `map::place_spawns`).
-
+| Field | Description |
+| ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| monster | (required, string) a monster group id, when the map is loaded, a random monsters from that group are spawned. |
+| density | (optional, float) if defined, it overrides the default monster density at the location (monster density is bigger towards the city centers) (see `map::place_spawns`). |
+| chance | (optional, integer or min/max array) one in x chance of spawn point being created (see `map::place_spawns`). |
### Place a vehicle by type or group with "vehicles"
-| Field | Description
-| --- | ---
-| vehicle | (required, string) type of the vehicle or id of a vehicle group.
-| chance | (optional, integer or min/max array) x in 100 chance of the vehicle spawning at all. The default is 1 (which means 1% probability that the vehicle spawns, you probably want something larger).
-| rotation | (optional, integer) the direction the vehicle faces.
-| fuel | (optional, integer) the fuel status. Default is -1 which makes the tanks 1-7% full. Positive values are interpreted as percentage of the vehicles tanks to fill (e.g. 100 means completely full).
-| status | (optional, integer) default is -1 (light damage), a value of 0 means perfect condition, 1 means heavily damaged.
-
+| Field | Description |
+| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| vehicle | (required, string) type of the vehicle or id of a vehicle group. |
+| chance | (optional, integer or min/max array) x in 100 chance of the vehicle spawning at all. The default is 1 (which means 1% probability that the vehicle spawns, you probably want something larger). |
+| rotation | (optional, integer) the direction the vehicle faces. |
+| fuel | (optional, integer) the fuel status. Default is -1 which makes the tanks 1-7% full. Positive values are interpreted as percentage of the vehicles tanks to fill (e.g. 100 means completely full). |
+| status | (optional, integer) default is -1 (light damage), a value of 0 means perfect condition, 1 means heavily damaged. |
### Place a specific item with "item"
-| Field | Description
-| --- | ---
-| item | (required, string) the item type id of the new item.
-| chance | (optional, integer or min/max array) one in x chance that the item will spawn. Default is 1, meaning it will always spawn.
-| amount | (optional, integer or min/max array) the number of items to spawn, default is 1.
-| repeat | (optional, integer or min/max array) the number of times to repeat this placement, default is 1.
+| Field | Description |
+| ------ | -------------------------------------------------------------------------------------------------------------------------- |
+| item | (required, string) the item type id of the new item. |
+| chance | (optional, integer or min/max array) one in x chance that the item will spawn. Default is 1, meaning it will always spawn. |
+| amount | (optional, integer or min/max array) the number of items to spawn, default is 1. |
+| repeat | (optional, integer or min/max array) the number of times to repeat this placement, default is 1. |
-To use this type with explicit coordinates use the name "place_item" (this if for backwards compatibility) like this:
+To use this type with explicit coordinates use the name "place_item" (this if for backwards
+compatibility) like this:
```json
"item": {
@@ -843,48 +858,45 @@ To use this type with explicit coordinates use the name "place_item" (this if fo
### Place a specific monster with "monster"
-| Field | Description
-| --- | ---
-| monster | (required, string) type id of the monster (e.g. `mon_zombie`).
-| friendly | (optional, bool) whether the monster is friendly, default is false.
-| name | (optional, string) a name for that monster, optional, default is to create an unnamed monster.
-| target | (optional, bool) this monster is a mission target. Only valid for `update_mapgen`.
-
+| Field | Description |
+| -------- | ---------------------------------------------------------------------------------------------- |
+| monster | (required, string) type id of the monster (e.g. `mon_zombie`). |
+| friendly | (optional, bool) whether the monster is friendly, default is false. |
+| name | (optional, string) a name for that monster, optional, default is to create an unnamed monster. |
+| target | (optional, bool) this monster is a mission target. Only valid for `update_mapgen`. |
### Place a trap with "traps"
-| Field | Description
-| --- | ---
-| trap | (required, string) type id of the trap (e.g. `tr_beartrap`).
-
+| Field | Description |
+| ----- | ------------------------------------------------------------ |
+| trap | (required, string) type id of the trap (e.g. `tr_beartrap`). |
### Place furniture with "furniture"
-| Field | Description
-| --- | ---
-| furn | (required, string) type id of the furniture (e.g. `f_chair`).
-
+| Field | Description |
+| ----- | ------------------------------------------------------------- |
+| furn | (required, string) type id of the furniture (e.g. `f_chair`). |
### Place terrain with "terrain"
If the terrain has the value "roof" set and is in an enclosed space, it's indoors.
-| Field | Description
-| --- | ---
-| ter | (required, string) type id of the terrain (e.g. `t_floor`).
-
+| Field | Description |
+| ----- | ----------------------------------------------------------- |
+| ter | (required, string) type id of the terrain (e.g. `t_floor`). |
### Place rubble and smash existing terrain with "rubble"
-Creates rubble and bashes existing terrain (this step is applied last, after other things like furniture/terrain have
-been set). Creating rubble invokes the bashing function that can destroy terrain and cause structures to collapse.
+Creates rubble and bashes existing terrain (this step is applied last, after other things like
+furniture/terrain have been set). Creating rubble invokes the bashing function that can destroy
+terrain and cause structures to collapse.
-| Field | Description
-| --- | ---
-| rubble_type | (optional, furniture id, default: `f_rubble`) the type of the created rubble.
-| items | (optional, bool, default: false) place items that result from bashing the structure.
-| floor_type | (optional, terrain id, default: `t_dirt`) only used if there is a non-bashable wall at the location or with overwrite = true.
-| overwrite | (optional, bool, default: false) if true it just writes on top of what currently exists.
+| Field | Description |
+| ----------- | ----------------------------------------------------------------------------------------------------------------------------- |
+| rubble_type | (optional, furniture id, default: `f_rubble`) the type of the created rubble. |
+| items | (optional, bool, default: false) place items that result from bashing the structure. |
+| floor_type | (optional, terrain id, default: `t_dirt`) only used if there is a non-bashable wall at the location or with overwrite = true. |
+| overwrite | (optional, bool, default: false) if true it just writes on top of what currently exists. |
To use this type with explicit coordinates use the name "place_rubble" (no plural) like this:
@@ -896,17 +908,17 @@ To use this type with explicit coordinates use the name "place_rubble" (no plura
### Place spilled liquids with "place_liquids"
-Creates a liquid item at the specified location. Liquids can't currently be picked up (except for gasoline in tanks or
-pumps), but can be used to add flavor to mapgen.
+Creates a liquid item at the specified location. Liquids can't currently be picked up (except for
+gasoline in tanks or pumps), but can be used to add flavor to mapgen.
-| Field | Description
-| --- | ---
-| liquid | (required, item id) the item (a liquid)
-| amount | (optional, integer/min-max array) amount of liquid to place (a value of 0 defaults to the item's default charges)
-| chance | (optional, integer/min-max array) one in x chance of spawning a liquid, default value is 1 (100%)
+| Field | Description |
+| ------ | ----------------------------------------------------------------------------------------------------------------- |
+| liquid | (required, item id) the item (a liquid) |
+| amount | (optional, integer/min-max array) amount of liquid to place (a value of 0 defaults to the item's default charges) |
+| chance | (optional, integer/min-max array) one in x chance of spawning a liquid, default value is 1 (100%) |
-Example for dropping a default amount of gasoline (200 units) on the ground (either by using a character in the rows
-array or explicit coordinates):
+Example for dropping a default amount of gasoline (200 units) on the ground (either by using a
+character in the rows array or explicit coordinates):
```json
"liquids": {
@@ -919,38 +931,37 @@ array or explicit coordinates):
### Place a specific item or an item from a group with "loot"
-Places item(s) from an item group, or an individual item. An important distinction between this and `place_item` and
-`item`/`items` is that `loot` can spawn a single item from a distribution group (without looping). It can also spawn a
-matching magazine and ammo for guns.
+Places item(s) from an item group, or an individual item. An important distinction between this and
+`place_item` and `item`/`items` is that `loot` can spawn a single item from a distribution group
+(without looping). It can also spawn a matching magazine and ammo for guns.
**Note**: Either `group` or `item` must be specified, but not both.
-| Field | Description
-| --- | ---
-| group | (string) the item group to use (see `ITEM_SPAWN.md` for notes on collection vs distribution groups)
-| item | (string) the type id of the item to spawn
-| chance | (optional, integer) x in 100 chance of item(s) spawning. Defaults to 100.
-| ammo | (optional, integer) x in 100 chance of item(s) spawning with the default amount of ammo. Defaults to 0.
-| magazine | (optional, integer) x in 100 chance of item(s) spawning with the default magazine. Defaults to 0.
-
+| Field | Description |
+| -------- | ------------------------------------------------------------------------------------------------------- |
+| group | (string) the item group to use (see `ITEM_SPAWN.md` for notes on collection vs distribution groups) |
+| item | (string) the type id of the item to spawn |
+| chance | (optional, integer) x in 100 chance of item(s) spawning. Defaults to 100. |
+| ammo | (optional, integer) x in 100 chance of item(s) spawning with the default amount of ammo. Defaults to 0. |
+| magazine | (optional, integer) x in 100 chance of item(s) spawning with the default magazine. Defaults to 0. |
### Plant seeds in a planter with "sealed_item"
Places an item or item group inside furniture that has special handling for items.
-This is intended for furniture such as `f_plant_harvest` with the `PLANT` flag, because placing items on such furniture
-via the other means will not work (since they have the `NOITEM` FLAG).
+This is intended for furniture such as `f_plant_harvest` with the `PLANT` flag, because placing
+items on such furniture via the other means will not work (since they have the `NOITEM` FLAG).
-On such furniture, there is supposed to be a single (hidden) seed item which dictates the species of plant. Using
-`sealed_item`, you can create such plants by specifying the furniture and a seed item.
+On such furniture, there is supposed to be a single (hidden) seed item which dictates the species of
+plant. Using `sealed_item`, you can create such plants by specifying the furniture and a seed item.
**Note**: Exactly one of "item" or "items" must be given (but not both).
-| Field | Description
-| --- | ---
-| furniture | (string) the id of the chosen furniture.
-| item | spawn an item as the "item" special
-| items | spawn an item group as the "items" special.
+| Field | Description |
+| --------- | ------------------------------------------- |
+| furniture | (string) the id of the chosen furniture. |
+| item | spawn an item as the "item" special |
+| items | spawn an item group as the "items" special. |
Example:
@@ -963,28 +974,26 @@ Example:
},
```
-
### Place messages with "graffiti"
-Places a graffiti message at the location. Either "text" or "snippet" must be defined. The message may include tags like
-``, ``, and `` that will insert a randomly generated name, or `` that will
-insert the nearest city name.
-
-| Field | Description
-| --- | ---
-| text | (optional, string) the message that will be placed.
-| snippet | (optional, string) a category of snippets that the message will be pulled from.
+Places a graffiti message at the location. Either "text" or "snippet" must be defined. The message
+may include tags like ``, ``, and `` that will insert a randomly
+generated name, or `` that will insert the nearest city name.
+| Field | Description |
+| ------- | ------------------------------------------------------------------------------- |
+| text | (optional, string) the message that will be placed. |
+| snippet | (optional, string) a category of snippets that the message will be pulled from. |
### Place a zone for an NPC faction with "zones"
NPCs in the faction will use the zone to influence the AI.
-| Field | Description
-| --- | ---
-| type | (required, string) Values: `"NPC_RETREAT"`, `"NPC_NO_INVESTIGATE"`, or `"NPC_INVESTIGATE_ONLY"`.
-| faction | (required, string) the faction id of the NPC faction that will use the zone.
-| name | (optional, string) the name of the zone.
+| Field | Description |
+| ------- | ------------------------------------------------------------------------------------------------ |
+| type | (required, string) Values: `"NPC_RETREAT"`, `"NPC_NO_INVESTIGATE"`, or `"NPC_INVESTIGATE_ONLY"`. |
+| faction | (required, string) the faction id of the NPC faction that will use the zone. |
+| name | (optional, string) the name of the zone. |
The `type` field values affect NPC behavior. NPCs will:
@@ -992,89 +1001,88 @@ The `type` field values affect NPC behavior. NPCs will:
- Not move to the see the source of unseen sounds coming from `NPC_NO_INVESTIGATE` zones.
- Not move to the see the source of unseen sounds coming from outside `NPC_INVESTIGATE_ONLY` zones.
-
### Translate terrain type with "translate_ter"
-Translates one type of terrain into another type of terrain. There is no reason to do this with normal mapgen, but it
-is useful for setting a baseline with `update_mapgen`.
-
-| Field | Description
-| --- | ---
-| from | (required, string) the terrain id of the terrain to be transformed
-| to | (required, string) the terrain id that the from terrain will transformed into
+Translates one type of terrain into another type of terrain. There is no reason to do this with
+normal mapgen, but it is useful for setting a baseline with `update_mapgen`.
+| Field | Description |
+| ----- | ----------------------------------------------------------------------------- |
+| from | (required, string) the terrain id of the terrain to be transformed |
+| to | (required, string) the terrain id that the from terrain will transformed into |
### Apply mapgen transformation with "ter_furn_transforms"
-Run a `ter_furn_transform` at the specified location. This is mostly useful for applying transformations as part of
-an `update_mapgen`, as normal mapgen can just specify the terrain directly.
+Run a `ter_furn_transform` at the specified location. This is mostly useful for applying
+transformations as part of an `update_mapgen`, as normal mapgen can just specify the terrain
+directly.
- "transform": (required, string) the id of the `ter_furn_transform` to run.
-
## Rotate the map with "rotation"
-Rotates the generated map after all the other mapgen stuff has been done. The value can be a single integer or a range
-(out of which a value will be randomly chosen). Example: `"rotation": [ 0, 3 ]`
+Rotates the generated map after all the other mapgen stuff has been done. The value can be a single
+integer or a range (out of which a value will be randomly chosen). Example: `"rotation": [ 0, 3 ]`
Values are 90° steps.
-
## Pre-load a base mapgen with "predecessor_mapgen"
-Specifying an overmap terrain id here will run the entire mapgen for that overmap terrain type first, before applying
-the rest of the mapgen defined here. The primary use case for this is when our mapgen for a location takes place in a
-natural feature like a forest, swamp, or lake shore. Many existing JSON mapgen attempt to emulate the mapgen of the type
-they're being placed on (e.g. a cabin in the forest has placed the trees, grass and clutter of a forest to try to make
-the cabin fit in) which leads to them being out of sync when the generation of that type changes. By specifying the
-`predecessor_mapgen`, you can instead focus on the things that are added to the existing location type.
+Specifying an overmap terrain id here will run the entire mapgen for that overmap terrain type
+first, before applying the rest of the mapgen defined here. The primary use case for this is when
+our mapgen for a location takes place in a natural feature like a forest, swamp, or lake shore. Many
+existing JSON mapgen attempt to emulate the mapgen of the type they're being placed on (e.g. a cabin
+in the forest has placed the trees, grass and clutter of a forest to try to make the cabin fit in)
+which leads to them being out of sync when the generation of that type changes. By specifying the
+`predecessor_mapgen`, you can instead focus on the things that are added to the existing location
+type.
Example: `"predecessor_mapgen": "forest"`
-
# Using update_mapgen
-**update_mapgen** is a variant of normal JSON mapgen. Instead of creating a new overmap tile, it
-updates an existing overmap tile with a specific set of changes. Currently, it only works within
-the NPC mission interface, but it will be expanded to be a general purpose tool for modifying
-existing maps.
+**update_mapgen** is a variant of normal JSON mapgen. Instead of creating a new overmap tile, it
+updates an existing overmap tile with a specific set of changes. Currently, it only works within the
+NPC mission interface, but it will be expanded to be a general purpose tool for modifying existing
+maps.
-update_mapgen generally uses the same fields as JSON mapgen, with a few exceptions. update_mapgen has a few new fields
-to support missions, as well as ways to specify which overmap tile will be updated.
+update_mapgen generally uses the same fields as JSON mapgen, with a few exceptions. update_mapgen
+has a few new fields to support missions, as well as ways to specify which overmap tile will be
+updated.
## Overmap tile specification
-update_mapgen updates an existing overmap tile. These fields provide a way to specify which tile to update.
+update_mapgen updates an existing overmap tile. These fields provide a way to specify which tile to
+update.
### "assign_mission_target"
-assign_mission_target assigns an overmap tile as the target of a mission. Any update_mapgen in the same scope will
-update that overmap tile. The closet overmap terrain with the required terrain ID will be used, and if there is no
-matching terrain, an overmap special of om_special type will be created and then the om_terrain within that special will
-be used.
-
-| Field | Description
-| --- | ---
-| om_terrain | (required, string) the overmap terrain ID of the mission target
-| om_special | (required, string) the overmap special ID of the mission target
+assign_mission_target assigns an overmap tile as the target of a mission. Any update_mapgen in the
+same scope will update that overmap tile. The closet overmap terrain with the required terrain ID
+will be used, and if there is no matching terrain, an overmap special of om_special type will be
+created and then the om_terrain within that special will be used.
+| Field | Description |
+| ---------- | --------------------------------------------------------------- |
+| om_terrain | (required, string) the overmap terrain ID of the mission target |
+| om_special | (required, string) the overmap special ID of the mission target |
### "om_terrain"
-The closest overmap tile of type om_terrain in the closest overmap special of type om_special will be used. The overmap
-tile will be updated but will not be set as the mission target.
+The closest overmap tile of type om_terrain in the closest overmap special of type om_special will
+be used. The overmap tile will be updated but will not be set as the mission target.
-| Field | Description
-| --- | ---
-| om_terrain | (required, string) the overmap terrain ID of the mission target
-| om_special | (required, string) the overmap special ID of the mission target
+| Field | Description |
+| ---------- | --------------------------------------------------------------- |
+| om_terrain | (required, string) the overmap terrain ID of the mission target |
+| om_special | (required, string) the overmap special ID of the mission target |
# Mission specials
+
update_mapgen adds new optional keywords to a few mapgen JSON items.
### "target"
-place_npc, place_monster, and place_computer can take an optional target boolean. If they have `"target": true` and are
-invoked by update_mapgen with a valid mission, then the NPC, monster, or computer will be marked as the target of the
-mission.
-
+place_npc, place_monster, and place_computer can take an optional target boolean. If they have
+`"target": true` and are invoked by update_mapgen with a valid mission, then the NPC, monster, or
+computer will be marked as the target of the mission.
diff --git a/doc/MARTIALART_JSON.md b/doc/MARTIALART_JSON.md
index 6d9e6ef9e642..3fa4105a1260 100644
--- a/doc/MARTIALART_JSON.md
+++ b/doc/MARTIALART_JSON.md
@@ -103,30 +103,36 @@ The bonuses arrays contain any number of bonus entries like this:
}
```
-"stat": affected statistic, any of: "hit", "dodge", "block", "speed", "movecost", "damage", "armor", "arpen",
-"type": damage type for the affected statistic ("bash", "cut", "heat", etc.), only needed if the affected statistic is "damage", "armor", or "arpen".
-"scale": the value of the bonus itself.
-"scaling-stat": scaling stat, any of: "str", "dex", "int", "per". Optional. If the scaling stat is specified, the value of the bonus is multiplied by the corresponding user stat.
+"stat": affected statistic, any of: "hit", "dodge", "block", "speed", "movecost", "damage", "armor",
+"arpen", "type": damage type for the affected statistic ("bash", "cut", "heat", etc.), only needed
+if the affected statistic is "damage", "armor", or "arpen". "scale": the value of the bonus itself.
+"scaling-stat": scaling stat, any of: "str", "dex", "int", "per". Optional. If the scaling stat is
+specified, the value of the bonus is multiplied by the corresponding user stat.
Bonuses must be written in the correct order.
-Tokens of `useless` type will not cause an error, but will not have any effect.
-For example, `speed` in a technique will have no effect (`movecost` should be used for techniques).
+Tokens of `useless` type will not cause an error, but will not have any effect. For example, `speed`
+in a technique will have no effect (`movecost` should be used for techniques).
Currently extra elemental damage is not applied, but extra elemental armor is (after regular armor).
-Examples:
-Incoming bashing damage is decreased by 30% of strength value. Only useful on buffs:
-* `flat_bonuses : [ { "stat": "armor", "type": "bash", "scaling-stat": "str", "scale": 0.3 } ]`
+Examples: Incoming bashing damage is decreased by 30% of strength value. Only useful on buffs:
+
+- `flat_bonuses : [ { "stat": "armor", "type": "bash", "scaling-stat": "str", "scale": 0.3 } ]`
All cutting damage dealt is multiplied by `(10% of dexterity)*(damage)`:
-* `mult_bonuses : [ { "stat": "damage", "type": "cut", "scaling-stat": "dex", "scale": 0.1 } ]`
+
+- `mult_bonuses : [ { "stat": "damage", "type": "cut", "scaling-stat": "dex", "scale": 0.1 } ]`
Move cost is decreased by 100% of strength value
-* `flat_bonuses : [ { "stat": "movecost", "scaling-stat": "str", "scale": -1.0 } ]`
+
+- `flat_bonuses : [ { "stat": "movecost", "scaling-stat": "str", "scale": -1.0 } ]`
### Place relevant items in the world and chargen
-Starting trait selection of your martial art goes in mutations.json. Place your art in the right category (self-defense, Shaolin animal form, melee style, etc)
+Starting trait selection of your martial art goes in mutations.json. Place your art in the right
+category (self-defense, Shaolin animal form, melee style, etc)
-Use json/itemgroups/ to place your martial art book and any martial weapons you've made for the art into spawns in various locations in the world. If you don't place your weapons in there, only recipes to craft them will be an option.
+Use json/itemgroups/ to place your martial art book and any martial weapons you've made for the art
+into spawns in various locations in the world. If you don't place your weapons in there, only
+recipes to craft them will be an option.
diff --git a/doc/MISSIONS_JSON.md b/doc/MISSIONS_JSON.md
index f35569888800..4bbfc8a7f6a1 100644
--- a/doc/MISSIONS_JSON.md
+++ b/doc/MISSIONS_JSON.md
@@ -1,162 +1,181 @@
# Creating missions
-NPCs can assign missions to the player. There is a fairly regular structure for this:
+NPCs can assign missions to the player. There is a fairly regular structure for this:
```JSON
- {
- "id": "MISSION_GET_BLACK_BOX_TRANSCRIPT",
- "type": "mission_definition",
- "name": "Retrieve Black Box Transcript",
- "description": "Decrypt the contents of the black box using a terminal from a nearby lab.",
- "goal": "MGOAL_FIND_ITEM",
- "difficulty": 2,
- "value": 150000,
- "item": "black_box_transcript",
- "start": {
- "effect": { "u_buy_item": "black_box" },
- "assign_mission_target": { "om_terrain": "lab", "reveal_radius": 3 }
- },
- "origins": [ "ORIGIN_SECONDARY" ],
- "followup": "MISSION_EXPLORE_SARCOPHAGUS",
- "dialogue": {
- "describe": "With the black box in hand, we need to find a lab.",
- "offer": "Thanks to your searching we've got the black box but now we need to have a look'n-side her. Now, most buildings don't have power anymore but there are a few that might be of use. Have you ever seen one of those science labs that have popped up in the middle of nowhere? Them suckers have a glowing terminal out front so I know they have power somewhere inside'em. If you can get inside and find a computer lab that still works you ought to be able to find out what's in the black box.",
- "accepted": "Fuck ya, America!",
- "rejected": "Do you have any better ideas?",
- "advice": "When I was play'n with the terminal for the one I ran into it kept asking for an ID card. Finding one would be the first order of business.",
- "inquire": "How 'bout that black box?",
- "success": "America, fuck ya! I was in the guard a few years back so I'm confident I can make heads-or-tails of these transmissions.",
- "success_lie": "What?! I out'ta whip you're ass.",
- "failure": "Damn, I maybe we can find an egg-head to crack the terminal."
- }
+{
+ "id": "MISSION_GET_BLACK_BOX_TRANSCRIPT",
+ "type": "mission_definition",
+ "name": "Retrieve Black Box Transcript",
+ "description": "Decrypt the contents of the black box using a terminal from a nearby lab.",
+ "goal": "MGOAL_FIND_ITEM",
+ "difficulty": 2,
+ "value": 150000,
+ "item": "black_box_transcript",
+ "start": {
+ "effect": { "u_buy_item": "black_box" },
+ "assign_mission_target": { "om_terrain": "lab", "reveal_radius": 3 }
+ },
+ "origins": ["ORIGIN_SECONDARY"],
+ "followup": "MISSION_EXPLORE_SARCOPHAGUS",
+ "dialogue": {
+ "describe": "With the black box in hand, we need to find a lab.",
+ "offer": "Thanks to your searching we've got the black box but now we need to have a look'n-side her. Now, most buildings don't have power anymore but there are a few that might be of use. Have you ever seen one of those science labs that have popped up in the middle of nowhere? Them suckers have a glowing terminal out front so I know they have power somewhere inside'em. If you can get inside and find a computer lab that still works you ought to be able to find out what's in the black box.",
+ "accepted": "Fuck ya, America!",
+ "rejected": "Do you have any better ideas?",
+ "advice": "When I was play'n with the terminal for the one I ran into it kept asking for an ID card. Finding one would be the first order of business.",
+ "inquire": "How 'bout that black box?",
+ "success": "America, fuck ya! I was in the guard a few years back so I'm confident I can make heads-or-tails of these transmissions.",
+ "success_lie": "What?! I out'ta whip you're ass.",
+ "failure": "Damn, I maybe we can find an egg-head to crack the terminal."
}
+}
```
### type
+
Must always be there and must always be "mission_definition".
### id
-The mission id is required, but for new missions, it can be arbitrary. Convention is to start
-it with "MISSION" and to use a fairly descriptive name.
+
+The mission id is required, but for new missions, it can be arbitrary. Convention is to start it
+with "MISSION" and to use a fairly descriptive name.
### name
+
The name is also required, and is displayed to the user in the 'm'issions menu.
### description
+
Not required, but it's strongly recommended that you summarize all relevant info for the mission.
-You may refer to mission end effects of the "u_buy_item" type, as long as they do not come at a
-cost to the player. See the example below:
+You may refer to mission end effects of the "u_buy_item" type, as long as they do not come at a cost
+to the player. See the example below:
+
```JSON
- "id": "MISSION_EXAMPLE_TOKENS",
- "type": "mission_definition",
- "name": "Murder Money",
- "description": "Whack the target in exchange for c-notes and cigarettes.",
- "goal": "MGOAL_ASSASSINATE",
- "end": {
- "effect": [
- { "u_buy_item": "FMCNote", "count": 999 },
- { "u_buy_item": "cig", "count": 666 } ]
- }
+"id": "MISSION_EXAMPLE_TOKENS",
+"type": "mission_definition",
+"name": "Murder Money",
+"description": "Whack the target in exchange for c-notes and cigarettes.",
+"goal": "MGOAL_ASSASSINATE",
+"end": {
+ "effect": [
+ { "u_buy_item": "FMCNote", "count": 999 },
+ { "u_buy_item": "cig", "count": 666 } ]
+}
```
-This system may be expanded in the future to allow referring to other mission parameters and effects.
+
+This system may be expanded in the future to allow referring to other mission parameters and
+effects.
### goal
+
Must be included, and must be one of these strings:
-goal string | Goal conditions
---- | ---
-`MGOAL_GO_TO` | Reach a specific overmap tile
-`MGOAL_GO_TO_TYPE` | Reach any instance of a specified overmap tile type
-`MGOAL_COMPUTER_TOGGLE` | Activating the correct terminal will complete the mission
-`MGOAL_FIND_ITEM` | Find 1 or more items of a given type
-`MGOAL_FIND_ITEM_GROUP` | Find 1 or more items of a given item_group.
-`MGOAL_FIND_ANY_ITEM` | Find 1 or more items of a given type, tagged for this mission
-`MGOAL_FIND_MONSTER` | Find and retrieve a friendly monster
-`MGOAL_FIND_NPC` | Find a specific NPC
-`MGOAL_TALK_TO_NPC` | Talk to a specific NPC
-`MGOAL_RECRUIT_NPC` | Recruit a specific NPC
-`MGOAL_RECRUIT_NPC_CLASS` | Recruit an NPC of a specific class
-`MGOAL_ASSASSINATE` | Kill a specific NPC
-`MGOAL_KILL_MONSTER` | Kill a specific hostile monster
-`MGOAL_KILL_MONSTER_TYPE` | Kill some number of a specific monster type
-`MGOAL_KILL_MONSTER_SPEC` | Kill some number of monsters from a specific species
-`MGOAL_CONDITION` | Satisfy the dynamically created condition and talk to the mission giver
+| goal string | Goal conditions |
+| ------------------------- | ----------------------------------------------------------------------- |
+| `MGOAL_GO_TO` | Reach a specific overmap tile |
+| `MGOAL_GO_TO_TYPE` | Reach any instance of a specified overmap tile type |
+| `MGOAL_COMPUTER_TOGGLE` | Activating the correct terminal will complete the mission |
+| `MGOAL_FIND_ITEM` | Find 1 or more items of a given type |
+| `MGOAL_FIND_ITEM_GROUP` | Find 1 or more items of a given item_group. |
+| `MGOAL_FIND_ANY_ITEM` | Find 1 or more items of a given type, tagged for this mission |
+| `MGOAL_FIND_MONSTER` | Find and retrieve a friendly monster |
+| `MGOAL_FIND_NPC` | Find a specific NPC |
+| `MGOAL_TALK_TO_NPC` | Talk to a specific NPC |
+| `MGOAL_RECRUIT_NPC` | Recruit a specific NPC |
+| `MGOAL_RECRUIT_NPC_CLASS` | Recruit an NPC of a specific class |
+| `MGOAL_ASSASSINATE` | Kill a specific NPC |
+| `MGOAL_KILL_MONSTER` | Kill a specific hostile monster |
+| `MGOAL_KILL_MONSTER_TYPE` | Kill some number of a specific monster type |
+| `MGOAL_KILL_MONSTER_SPEC` | Kill some number of monsters from a specific species |
+| `MGOAL_CONDITION` | Satisfy the dynamically created condition and talk to the mission giver |
### monster_species
+
For "MGOAL_KILL_MONSTER_SPEC", sets the target monster species.
### monster_type
+
For "MGOAL_KILL_MONSTER_TYPE", sets the target monster type.
### monster_kill_goal
-For "MGOAL_KILL_MONSTER_SPEC" and "MGOAL_KILL_MONSTER_TYPE", sets the number of monsters above
-the player's current kill count that must be killed to complete the mission.
+
+For "MGOAL_KILL_MONSTER_SPEC" and "MGOAL_KILL_MONSTER_TYPE", sets the number of monsters above the
+player's current kill count that must be killed to complete the mission.
### goal_condition
-For "MGOAL_CONDITION", defines the condition that must be satisified for the mission to be considered complete.
-Conditions are explained in more detail in [NPCs.md](./NPCs.md), and are used here in exactly the same way.
+
+For "MGOAL_CONDITION", defines the condition that must be satisified for the mission to be
+considered complete. Conditions are explained in more detail in [NPCs.md](./NPCs.md), and are used
+here in exactly the same way.
### dialogue
-This is a dictionary of strings. The NPC says these exact strings in response to the player
-inquiring about the mission or reporting its completion. All these strings are required, even if they may not be used in the mission.
-
-string ID | Usage
---- | ---
-`describe` | The NPC's overall description of the mission
-`offer` | The specifics of the mission given when the player selects that mission for consideration
-`accepted` | The NPC's response if the player accepts the mission
-`rejected` | The NPC's response if the player refuses the mission
-`advice` | If the player asks for advice on how to complete the mission, they hear this
-`inquire` | This is used if the NPC asks the player how the mission is going
-`success` | The NPC's response to a report that the mission was successful
-`success_lie` | The NPC's response if they catch the player lying about a mission's success
-`failure` | The NPC's response if the player reports a failed mission
+
+This is a dictionary of strings. The NPC says these exact strings in response to the player
+inquiring about the mission or reporting its completion. All these strings are required, even if
+they may not be used in the mission.
+
+| string ID | Usage |
+| ------------- | ----------------------------------------------------------------------------------------- |
+| `describe` | The NPC's overall description of the mission |
+| `offer` | The specifics of the mission given when the player selects that mission for consideration |
+| `accepted` | The NPC's response if the player accepts the mission |
+| `rejected` | The NPC's response if the player refuses the mission |
+| `advice` | If the player asks for advice on how to complete the mission, they hear this |
+| `inquire` | This is used if the NPC asks the player how the mission is going |
+| `success` | The NPC's response to a report that the mission was successful |
+| `success_lie` | The NPC's response if they catch the player lying about a mission's success |
+| `failure` | The NPC's response if the player reports a failed mission |
### start
-Optional field. If it is present and a string, it must be name of a function in mission_start::
-that takes a mission * and performs the start code for the mission. This allows missions other
-than the standard mission types to be run. A hardcoded function is currently necessary to set
-up missions with "MGOAL_COMPUTER_TOGGLE".
+
+Optional field. If it is present and a string, it must be name of a function in mission_start:: that
+takes a mission * and performs the start code for the mission. This allows missions other than the
+standard mission types to be run. A hardcoded function is currently necessary to set up missions
+with "MGOAL_COMPUTER_TOGGLE".
Alternately, if present, it can be an object as described below.
### start / end / fail effects
+
If any of these optional fields are present they can be objects with the following fields contained:
#### effect
-This is an effects array, exactly as defined in [NPCs.md](./NPCs.md), and can use any of the values from
-effects. In all cases, the NPC involved is the quest giver.
+
+This is an effects array, exactly as defined in [NPCs.md](./NPCs.md), and can use any of the values
+from effects. In all cases, the NPC involved is the quest giver.
#### reveal_om_ter
-This can be a string or a list of strings, all of which must be overmap terrain ids. A randomly
-selected overmap terrain tile with that id - or one of the ids from list, randomly selected -
-will be revealed, and there is a 1 in 3 chance that the road route to the map tile will also
-be revealed.
+
+This can be a string or a list of strings, all of which must be overmap terrain ids. A randomly
+selected overmap terrain tile with that id - or one of the ids from list, randomly selected - will
+be revealed, and there is a 1 in 3 chance that the road route to the map tile will also be revealed.
#### assign_mission_target
-The `assign_mission_target` object specifies the criteria for finding (or creating if
-necessary) a particular overmap terrain and designating it as the mission target. Its parameters
-allow control over how it is picked and how some effects (such as revealing the surrounding area)
-are applied afterwards. The `om_terrain` is the only required field.
-
- Identifier | Description
---- | ---
-`om_terrain` | ID of overmap terrain which will be selected as the target. Mandatory.
-`om_terrain_match_type`| Matching rule to use with `om_terrain`. Defaults to TYPE. Details below.
-`om_special` | ID of overmap special containing the overmap terrain.
-`om_terrain_replace` | ID of overmap terrain to be found and replaced if `om_terrain` cannot be found.
-`reveal_radius` | Radius in overmap terrain coordinates to reveal.
-`must_see` | If true, the `om_terrain` must have been seen already.
-`cant_see` | If true, the `om_terrain` must not have been seen already.
-`random` | If true, a random matching `om_terrain` is used. If false, the closest is used.
-`search_range` | Range in overmap terrain coordinates to look for a matching `om_terrain`.
-`min_distance` | Range in overmap terrain coordinates. Instances of `om_terrain` in this range will be ignored.
-`origin_npc` | Start the search at the NPC's, rather than the player's, current position.
-`z` | If specified, will be used rather than the player or NPC's z when searching.
-`offset_x`,
`offset_y`,
`offset_z` | After finding or creating `om_terrain`, offset the mission target terrain by the offsets in overmap terrain coordinates.
+The `assign_mission_target` object specifies the criteria for finding (or creating if necessary) a
+particular overmap terrain and designating it as the mission target. Its parameters allow control
+over how it is picked and how some effects (such as revealing the surrounding area) are applied
+afterwards. The `om_terrain` is the only required field.
+
+| Identifier | Description |
+| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ |
+| `om_terrain` | ID of overmap terrain which will be selected as the target. Mandatory. |
+| `om_terrain_match_type` | Matching rule to use with `om_terrain`. Defaults to TYPE. Details below. |
+| `om_special` | ID of overmap special containing the overmap terrain. |
+| `om_terrain_replace` | ID of overmap terrain to be found and replaced if `om_terrain` cannot be found. |
+| `reveal_radius` | Radius in overmap terrain coordinates to reveal. |
+| `must_see` | If true, the `om_terrain` must have been seen already. |
+| `cant_see` | If true, the `om_terrain` must not have been seen already. |
+| `random` | If true, a random matching `om_terrain` is used. If false, the closest is used. |
+| `search_range` | Range in overmap terrain coordinates to look for a matching `om_terrain`. |
+| `min_distance` | Range in overmap terrain coordinates. Instances of `om_terrain` in this range will be ignored. |
+| `origin_npc` | Start the search at the NPC's, rather than the player's, current position. |
+| `z` | If specified, will be used rather than the player or NPC's z when searching. |
+| `offset_x`,
`offset_y`,
`offset_z` | After finding or creating `om_terrain`, offset the mission target terrain by the offsets in overmap terrain coordinates. |
**example**
+
```JSON
{
"assign_mission_target": {
@@ -171,65 +190,71 @@ are applied afterwards. The `om_terrain` is the only required field.
}
```
-If the `om_terrain` is part of an overmap special, it's essential to specify the `om_special`
-value as well--otherwise, the game will not know how to spawn the entire special.
+If the `om_terrain` is part of an overmap special, it's essential to specify the `om_special` value
+as well--otherwise, the game will not know how to spawn the entire special.
`om_terrain_match_type` defaults to TYPE if unspecified, and has the following possible values:
-* `EXACT` - The provided string must completely match the overmap terrain id,
- including linear direction suffixes for linear terrain types or rotation
- suffixes for rotated terrain types.
+- `EXACT` - The provided string must completely match the overmap terrain id, including linear
+ direction suffixes for linear terrain types or rotation suffixes for rotated terrain types.
-* `TYPE` - The provided string must completely match the base type id of the
- overmap terrain id, which means that suffixes for rotation and linear terrain
- types are ignored.
+- `TYPE` - The provided string must completely match the base type id of the overmap terrain id,
+ which means that suffixes for rotation and linear terrain types are ignored.
-* `PREFIX` - The provided string must be a complete prefix (with additional
- parts delimited by an underscore) of the overmap terrain id. For example,
- "forest" will match "forest" or "forest_thick" but not "forestcabin".
+- `PREFIX` - The provided string must be a complete prefix (with additional parts delimited by an
+ underscore) of the overmap terrain id. For example, "forest" will match "forest" or "forest_thick"
+ but not "forestcabin".
-* `CONTAINS` - The provided string must be contained within the overmap terrain
- id, but may occur at the beginning, end, or middle and does not have any rules
- about underscore delimiting.
+- `CONTAINS` - The provided string must be contained within the overmap terrain id, but may occur at
+ the beginning, end, or middle and does not have any rules about underscore delimiting.
-If an `om_special` must be placed, it will follow the same placement rules as defined in its
-overmap special definition, respecting allowed terrains, distance from cities, road connections,
-and so on. Consequently, the more restrictive the rules, the less likely this placement will
-succeed (as it is competing for space with already-spawned specials).
+If an `om_special` must be placed, it will follow the same placement rules as defined in its overmap
+special definition, respecting allowed terrains, distance from cities, road connections, and so on.
+Consequently, the more restrictive the rules, the less likely this placement will succeed (as it is
+competing for space with already-spawned specials).
-`om_terrain_replace` is only relevent if the `om_terrain` is not part of an overmap special.
-This value is used if the `om_terrain` cannot be found, and will be used as an alternative target
-which will then be replaced with the `om_terrain` value.
+`om_terrain_replace` is only relevent if the `om_terrain` is not part of an overmap special. This
+value is used if the `om_terrain` cannot be found, and will be used as an alternative target which
+will then be replaced with the `om_terrain` value.
-If `must_see` is set to true, the game will not create the terrain if it can't be found. It tries
-to avoid having new terrains magically appear in areas where the player has already been, and this
-is a consequence.
+If `must_see` is set to true, the game will not create the terrain if it can't be found. It tries to
+avoid having new terrains magically appear in areas where the player has already been, and this is a
+consequence.
`reveal_radius`, `min_distance`, and `search_range` are all in overmap terrain coordinates (an
-overmap is currently 180 x 180 OMT units). The search is centered on the player unless
-`origin_npc` is set, in which case it centered on the NPC. Currently, there is rarely a
-difference between the two, but it is possible to assign missions over a radio. The search gives
-preference to existing overmaps (and will only spawn new overmaps if the terrain can't be found
-on existing overmaps), and only executes on the player's current z-level. The `z` attribute can
-be used to override this and search on a different z-level than the player--this is an absolute
-value rather than relative.
+overmap is currently 180 x 180 OMT units). The search is centered on the player unless `origin_npc`
+is set, in which case it centered on the NPC. Currently, there is rarely a difference between the
+two, but it is possible to assign missions over a radio. The search gives preference to existing
+overmaps (and will only spawn new overmaps if the terrain can't be found on existing overmaps), and
+only executes on the player's current z-level. The `z` attribute can be used to override this and
+search on a different z-level than the player--this is an absolute value rather than relative.
`offset_x`, `offset_y`, and `offset_z` change the final location of the mission target by their
-values. This can change the mission target's overmap terrain type away from `om_terrain`.
+values. This can change the mission target's overmap terrain type away from `om_terrain`.
#### update_mapgen
-The `update_mapgen` object or array provides a way to modify existing overmap tiles (including the ones created by "assign_mission_target") to add mission specific monsters, NPCs, computers, or items.
+
+The `update_mapgen` object or array provides a way to modify existing overmap tiles (including the
+ones created by "assign_mission_target") to add mission specific monsters, NPCs, computers, or
+items.
As an array, `update_mapgen` consists of two or more `update_mapgen` objects.
-As an object, `update_mapgen` contains any valid JSON mapgen objects. The objects are placed on the mission target terrain from "assign_mission_target" or optionally the closest overmap terrain specified by the `om_terrain` and `om_special` fields. If "mapgen_update_id" is specified, the "mapge_update" object with the matching "mapgen_update_id" will be executed.
+As an object, `update_mapgen` contains any valid JSON mapgen objects. The objects are placed on the
+mission target terrain from "assign_mission_target" or optionally the closest overmap terrain
+specified by the `om_terrain` and `om_special` fields. If "mapgen_update_id" is specified, the
+"mapge_update" object with the matching "mapgen_update_id" will be executed.
See doc/MAPGEN.md for more details on JSON mapgen and `update_mapgen`.
-An NPC, monster, or computer placed using `update_mapgen` will be the target of a mission if it has the `target` boolean set to `true` in its `place` object in `update_mapgen`.
+An NPC, monster, or computer placed using `update_mapgen` will be the target of a mission if it has
+the `target` boolean set to `true` in its `place` object in `update_mapgen`.
## Adding new missions to NPC dialogue
-In order to assign missions to NPCs, the first step is to find that NPC's definition. For unique NPCs this is usually at the top of the npc's JSON file and looks something like this:
+
+In order to assign missions to NPCs, the first step is to find that NPC's definition. For unique
+NPCs this is usually at the top of the npc's JSON file and looks something like this:
+
```JSON
{
"type": "npc",
@@ -245,23 +270,26 @@ In order to assign missions to NPCs, the first step is to find that NPC's defini
"faction": "lobby_beggars"
},
```
+
Add a new line that defines the NPC's starting mission, eg:
+
```
"mission_offered": "MISSION_BEGGAR_2_BOX_SMALL"
```
-Any NPC that has missions needs to have a dialogue option that leads to TALK_MISSION_LIST, to get the player
-started on their first mission for the NPC, and either:
+Any NPC that has missions needs to have a dialogue option that leads to TALK_MISSION_LIST, to get
+the player started on their first mission for the NPC, and either:
-* Add one of their talk_topic IDs to the list of generic mission reponse IDs in the first
-talk_topic of data/json/npcs/TALK_COMMON_MISSION.json, or
-* Have a similar talk_topic with responses that lead to TALK_MISSION_INQUIRE and
-TALK_MISSION_LIST_ASSIGNED.
+- Add one of their talk_topic IDs to the list of generic mission reponse IDs in the first talk_topic
+ of data/json/npcs/TALK_COMMON_MISSION.json, or
+- Have a similar talk_topic with responses that lead to TALK_MISSION_INQUIRE and
+ TALK_MISSION_LIST_ASSIGNED.
Either of these options will allow the player to do normal mission management dialogue with the NPC.
-This is an example of how a custom mission inquiry might appear. This will only appear in the NPC's dialogue
-options if the player has already been assigned a mission.
+This is an example of how a custom mission inquiry might appear. This will only appear in the NPC's
+dialogue options if the player has already been assigned a mission.
+
```JSON
{
"type": "talk_topic",
diff --git a/doc/MODDING.md b/doc/MODDING.md
index e1c7c86c2ed6..8fc2f5ea7137 100644
--- a/doc/MODDING.md
+++ b/doc/MODDING.md
@@ -1,59 +1,97 @@
# Modding guide
-Certain features of the game can be modified without rebuilding the game from source code. This includes professions, monsters, npcs, and more. Just modify the pertinent files and run the game to see your changes.
+Certain features of the game can be modified without rebuilding the game from source code. This
+includes professions, monsters, npcs, and more. Just modify the pertinent files and run the game to
+see your changes.
-The majority of modding is done by editing JSON files. An in-depth review of all json files and their appropriate fields is available in [JSON_INFO.md](JSON_INFO.md).
+The majority of modding is done by editing JSON files. An in-depth review of all json files and
+their appropriate fields is available in [JSON_INFO.md](JSON_INFO.md).
## The basics
### Creating a barebones mod
-A mod is created by creating a folder within Cataclysm's `data/mods` directory. The mod's properties are set by the `modinfo.json` file that is present within that folder. In order for Cataclysm to recognize the folder as a mod, it **must** have a `modinfo.json` file present within it.
+
+A mod is created by creating a folder within Cataclysm's `data/mods` directory. The mod's properties
+are set by the `modinfo.json` file that is present within that folder. In order for Cataclysm to
+recognize the folder as a mod, it **must** have a `modinfo.json` file present within it.
+
+
### Modinfo.json
-The modinfo.json file is a file that contains metadata for your mod. Every mod must have a `modinfo.json` file in order for Cataclysm to find it.
-A barebones `modinfo.json` file looks like this:
-````json
+
+The modinfo.json file is a file that contains metadata for your mod. Every mod must have a
+`modinfo.json` file in order for Cataclysm to find it. A barebones `modinfo.json` file looks like
+this:
+
+```json
[
{
"type": "MOD_INFO",
"id": "Mod_ID",
"name": "Mod's Display Name",
- "authors": [ "Your name here", "Your friend's name if you want" ],
+ "authors": ["Your name here", "Your friend's name if you want"],
"description": "Your description here",
"category": "content",
- "dependencies": [ "bn" ]
+ "dependencies": ["bn"]
}
]
-````
-The `category` attribute denotes where the mod will appear in the mod selection menu. These are the available categories to choose from, with some examples chosen from mods that existed when this document was written. Pick whichever one applies best to your mod when writing your modinfo file.
- - `content` - A mod that adds a lot of stuff. Typically reserved for very large mods or complete game overhauls (eg: Core game files, Aftershock)
- - `items` - A mod that adds new items and recipes to the game (eg: More survival tools)
- - `creatures` - A mod that adds new creatures or NPCs to the game (eg: Modular turrets)
- - `misc_additions` - Miscellaneous content additions to the game (eg: Alternative map key, Crazy cataclysm)
- - `buildings` - New overmap locations and structures (eg: Fuji's more buildings). If you're blacklisting buildings from spawning, this is also a usable category (eg: No rail stations).
- - `vehicles` - New cars or vehicle parts (eg: Tanks and other vehicles)
- - `rebalance` - A mod designed to rebalance the game in some way (eg: Safe autodocs).
- - `magical` - A mod that adds something magic-related to the game (eg: Necromancy)
- - `item_exclude` - A mod that stops items from spawning in the world (eg: No survivor armor, No drugs)
- - `monster_exclude` - A mod that stops certain monster varieties from spawning in the world (eg: No fungal monsters, No ants)
- - `graphical` - A mod that adjusts game graphics in some way (eg: Graphical overmap)
-
-The `dependencies` attribute is used to tell Cataclysm that your mod is dependent on something present in another mod. If you have no dependencies outside of the core game, then just including `dda` in the list is good enough. If your mod depends on another one to work properly, adding that mod's `id` attribute to the array causes Cataclysm to force that mod to load before yours.
+```
+
+The `category` attribute denotes where the mod will appear in the mod selection menu. These are the
+available categories to choose from, with some examples chosen from mods that existed when this
+document was written. Pick whichever one applies best to your mod when writing your modinfo file.
+
+- `content` - A mod that adds a lot of stuff. Typically reserved for very large mods or complete
+ game overhauls (eg: Core game files, Aftershock)
+- `items` - A mod that adds new items and recipes to the game (eg: More survival tools)
+- `creatures` - A mod that adds new creatures or NPCs to the game (eg: Modular turrets)
+- `misc_additions` - Miscellaneous content additions to the game (eg: Alternative map key, Crazy
+ cataclysm)
+- `buildings` - New overmap locations and structures (eg: Fuji's more buildings). If you're
+ blacklisting buildings from spawning, this is also a usable category (eg: No rail stations).
+- `vehicles` - New cars or vehicle parts (eg: Tanks and other vehicles)
+- `rebalance` - A mod designed to rebalance the game in some way (eg: Safe autodocs).
+- `magical` - A mod that adds something magic-related to the game (eg: Necromancy)
+- `item_exclude` - A mod that stops items from spawning in the world (eg: No survivor armor, No
+ drugs)
+- `monster_exclude` - A mod that stops certain monster varieties from spawning in the world (eg: No
+ fungal monsters, No ants)
+- `graphical` - A mod that adjusts game graphics in some way (eg: Graphical overmap)
+
+The `dependencies` attribute is used to tell Cataclysm that your mod is dependent on something
+present in another mod. If you have no dependencies outside of the core game, then just including
+`dda` in the list is good enough. If your mod depends on another one to work properly, adding that
+mod's `id` attribute to the array causes Cataclysm to force that mod to load before yours.
For more details on `MOD_INFO` object, see [JSON_INFO.md](JSON_INFO.md#mod_info).
## Actually adding things to your mod
+
Now that you have a basic mod, you can get around to actually putting some stuff into it!
### File structure
-It's a good idea to put different categories of additions into different json files. Any json files that are present in the mod folder or its subfolders will be detected and read by Cataclysm, but otherwise, there are no restrictions on what you can put where.
+
+It's a good idea to put different categories of additions into different json files. Any json files
+that are present in the mod folder or its subfolders will be detected and read by Cataclysm, but
+otherwise, there are no restrictions on what you can put where.
### JSON_INFO.md
-It's worth reading [JSON_INFO.md](JSON_INFO.md) to get a comprehensive list of everything you can do with these mods. The rest of this document will have a few examples to copy and paste, but it is by no means comprehensive. The base game's data is also defined in the same way as any mod you write, so taking a look through the game's json files (in `data/json`) can also teach you a lot. If the game finds any issues in your JSON syntax when you try to load a game world, it will spit out an error message, and you won't be able to load that game until the issue is fixed.
+
+It's worth reading [JSON_INFO.md](JSON_INFO.md) to get a comprehensive list of everything you can do
+with these mods. The rest of this document will have a few examples to copy and paste, but it is by
+no means comprehensive. The base game's data is also defined in the same way as any mod you write,
+so taking a look through the game's json files (in `data/json`) can also teach you a lot. If the
+game finds any issues in your JSON syntax when you try to load a game world, it will spit out an
+error message, and you won't be able to load that game until the issue is fixed.
### Adding a scenario
-Scenarios are what the game uses to determine your general situation when you create a character. They determine when and where your character may spawn in the world, and what professions can be used. They are also used to determine whether those professions can have mutations starting out. Below you will find the JSON definition for the game's built-in `Large Building` scenario.
-````json
+
+Scenarios are what the game uses to determine your general situation when you create a character.
+They determine when and where your character may spawn in the world, and what professions can be
+used. They are also used to determine whether those professions can have mutations starting out.
+Below you will find the JSON definition for the game's built-in `Large Building` scenario.
+
+```json
[
{
"type": "scenario",
@@ -79,14 +117,18 @@ Scenarios are what the game uses to determine your general situation when you cr
"hospital_9"
],
"start_name": "In Large Building",
- "flags": [ "SUR_START", "CITY_START", "LONE_START" ]
+ "flags": ["SUR_START", "CITY_START", "LONE_START"]
}
]
-````
+```
### Adding a profession.
-Professions are what the game calls the character classes you can choose from when the game starts. Professions can start with traits, skills, items, and even pets! Below is the definition for the Police Officer profession:
-````json
+
+Professions are what the game calls the character classes you can choose from when the game starts.
+Professions can start with traits, skills, items, and even pets! Below is the definition for the
+Police Officer profession:
+
+```json
[
{
"type": "profession",
@@ -94,29 +136,43 @@ Professions are what the game calls the character classes you can choose from wh
"name": "Police Officer",
"description": "Just a small-town deputy when you got the call, you were still ready to come to the rescue. Except that soon it was you who needed rescuing - you were lucky to escape with your life. Who's going to respect your authority when the government this badge represents might not even exist anymore?",
"points": 2,
- "skills": [ { "level": 3, "name": "gun" }, { "level": 3, "name": "pistol" } ],
- "traits": [ "PROF_POLICE" ],
+ "skills": [{ "level": 3, "name": "gun" }, { "level": 3, "name": "pistol" }],
+ "traits": ["PROF_POLICE"],
"items": {
"both": {
- "items": [ "pants_army", "socks", "badge_deputy", "sheriffshirt", "police_belt", "smart_phone", "boots", "whistle", "wristwatch" ],
+ "items": [
+ "pants_army",
+ "socks",
+ "badge_deputy",
+ "sheriffshirt",
+ "police_belt",
+ "smart_phone",
+ "boots",
+ "whistle",
+ "wristwatch"
+ ],
"entries": [
{ "group": "charged_two_way_radio" },
- { "item": "ear_plugs", "custom-flags": [ "no_auto_equip" ] },
+ { "item": "ear_plugs", "custom-flags": ["no_auto_equip"] },
{ "item": "usp_45", "ammo-item": "45_acp", "charges": 12, "container-item": "holster" },
{ "item": "legpouch_large", "contents-group": "army_mags_usp45" }
]
},
- "male": [ "boxer_shorts" ],
- "female": [ "bra", "boy_shorts" ]
+ "male": ["boxer_shorts"],
+ "female": ["bra", "boy_shorts"]
}
}
]
-````
+```
### Adding an item
-Items are where you really want to read the [JSON_INFO.md](JSON_INFO.md) file, just because there's so much that you can do with them, and every category of item is a little bit different.
+
+Items are where you really want to read the [JSON_INFO.md](JSON_INFO.md) file, just because there's
+so much that you can do with them, and every category of item is a little bit different.
+
-````json
+
+```json
[
{
"id": "family_photo",
@@ -128,21 +184,27 @@ Items are where you really want to read the [JSON_INFO.md](JSON_INFO.md) file, j
"weight": "1 g",
"volume": 0,
"price": 800,
- "material": [ "paper" ],
+ "material": ["paper"],
"symbol": "*",
"color": "light_gray"
}
]
-````
+```
### Preventing monsters from spawning
-This kind of mod is relatively simple, but very useful. If you don't want to deal with certain types of monsters in your world, this is how you do it. There are two ways to go about this, and both will be detailed below. You can blacklist entire monster groups, or you can blacklist certain monsters. In order to do either of those things, you need that monster's ID. These can be found in the relevant data files. For the core game, these are in the `data/json/monsters` directory.
-The example below is from the `No Ants` mod, and will stop any kind of ant from spawning in-game.
-````json
+
+This kind of mod is relatively simple, but very useful. If you don't want to deal with certain types
+of monsters in your world, this is how you do it. There are two ways to go about this, and both will
+be detailed below. You can blacklist entire monster groups, or you can blacklist certain monsters.
+In order to do either of those things, you need that monster's ID. These can be found in the
+relevant data files. For the core game, these are in the `data/json/monsters` directory. The example
+below is from the `No Ants` mod, and will stop any kind of ant from spawning in-game.
+
+```json
[
{
"type": "MONSTER_BLACKLIST",
- "categories": [ "GROUP_ANT", "GROUP_ANT_ACID" ]
+ "categories": ["GROUP_ANT", "GROUP_ANT_ACID"]
},
{
"type": "MONSTER_BLACKLIST",
@@ -158,74 +220,106 @@ The example below is from the `No Ants` mod, and will stop any kind of ant from
]
}
]
-````
+```
+
### Preventing locations from spawning
+
-Preventing certain types of locations from spawning in-game is a little trickier depending on the type of thing you want to target. An overmap building can either be a standard building, or an overmap special. If you want to block things with a specific flag from spawning, you can blacklist those in a very similar manner to monsters. The example below is also from the `No Ants` mod, and stops all anthills from spawning.
-````json
+
+Preventing certain types of locations from spawning in-game is a little trickier depending on the
+type of thing you want to target. An overmap building can either be a standard building, or an
+overmap special. If you want to block things with a specific flag from spawning, you can blacklist
+those in a very similar manner to monsters. The example below is also from the `No Ants` mod, and
+stops all anthills from spawning.
+
+```json
[
{
"type": "region_overlay",
- "regions": [ "all" ],
- "overmap_feature_flag_settings": { "blacklist": [ "ANT" ] }
+ "regions": ["all"],
+ "overmap_feature_flag_settings": { "blacklist": ["ANT"] }
}
]
-````
+```
-If the location you want to blacklist is an overmap special, you'll likely have to copy it from its definition, and manually set it's `occurrences` attribute to read `[ 0, 0 ]`.
+If the location you want to blacklist is an overmap special, you'll likely have to copy it from its
+definition, and manually set it's `occurrences` attribute to read `[ 0, 0 ]`.
-Finally, if you're trying to blacklist something that spawns inside of cities, you can do that with a region overlay. The below example is used in the `No rail stations` mod, and stops railroad stations from spawning inside of cities. It doesn't stop the railroad station overmap special from spawning, though.
-````json
+Finally, if you're trying to blacklist something that spawns inside of cities, you can do that with
+a region overlay. The below example is used in the `No rail stations` mod, and stops railroad
+stations from spawning inside of cities. It doesn't stop the railroad station overmap special from
+spawning, though.
+
+```json
[
{
"type": "region_overlay",
- "regions": [ "all" ],
+ "regions": ["all"],
"city": { "houses": { "railroad_city": 0 } }
}
]
-````
+```
### Disabling certain scenarios
-The `SCENARIO_BLACKLIST` can be either a blacklist or a whitelist.
-When it is a whitelist, it blacklists all scenarios but the ones specified.
-No more than one blacklist can be specified at one time - this is in all json loaded for a particular game (all mods + base game), not just your specific mod.
-The format is as follows:
+
+The `SCENARIO_BLACKLIST` can be either a blacklist or a whitelist. When it is a whitelist, it
+blacklists all scenarios but the ones specified. No more than one blacklist can be specified at one
+time - this is in all json loaded for a particular game (all mods + base game), not just your
+specific mod. The format is as follows:
+
```json
[
{
"type": "SCENARIO_BLACKLIST",
"subtype": "whitelist",
- "scenarios": [ "largebuilding" ]
+ "scenarios": ["largebuilding"]
}
]
```
-Valid values for `subtype` are `whitelist` and `blacklist`.
-`scenarios` is an array of the scenario ids that you want to blacklist or whitelist.
+
+Valid values for `subtype` are `whitelist` and `blacklist`. `scenarios` is an array of the scenario
+ids that you want to blacklist or whitelist.
## Important note on json files
-The following characters: `[ { , } ] : "` are *very* important when adding or modifying JSON files. This means a single missing `,` or `[` or `}` can be the difference between a working file and a hanging game at startup.
-If you want to include these characters in whatever you are doing (for instance, if you want to put a quote inside an item's description), you can do so by putting a backslash before the relevant character. This is known as "escaping" that character. For instance, I can make an item's description contain a quote if I want by doing this:
-````json
+The following characters: `[ { , } ] : "` are _very_ important when adding or modifying JSON files.
+This means a single missing `,` or `[` or `}` can be the difference between a working file and a
+hanging game at startup. If you want to include these characters in whatever you are doing (for
+instance, if you want to put a quote inside an item's description), you can do so by putting a
+backslash before the relevant character. This is known as "escaping" that character. For instance, I
+can make an item's description contain a quote if I want by doing this:
+
+```json
...
"description": "This is a shirt that says \"I wanna kill ALL the zombies\" on the front.",
...
-````
+```
In game, that appears like this:
`This is a shirt that says "I wanna kill ALL the zombies" on the front.`
-Many editors have features that let you track `{ [` and `] }` to see if they're balanced (ie, have a matching opposite); These editors will also respect escaped characters properly. [Notepad++](https://notepad-plus-plus.org/) is a popular, free editor on Windows that contains this feature. On Linux, there are a plethora of options, and you probably already have a preferred one 🙂
+Many editors have features that let you track `{ [` and `] }` to see if they're balanced (ie, have a
+matching opposite); These editors will also respect escaped characters properly.
+[Notepad++](https://notepad-plus-plus.org/) is a popular, free editor on Windows that contains this
+feature. On Linux, there are a plethora of options, and you probably already have a preferred one 🙂
-You may also want to use some online or offline JSON validator, e.g. https://dev.narc.ro/cataclysm/format.html , or `json_formatter` bundled with every release of the game (just drag-and-drop the .json file on it).
+You may also want to use some online or offline JSON validator, e.g.
+https://dev.narc.ro/cataclysm/format.html , or `json_formatter` bundled with every release of the
+game (just drag-and-drop the .json file on it).
## Addendum
+
+
### No Zombie Revival
-This mod is very simple, but it's worth a special section because it does things a little differently than other mods, and documentation on it is tricky to find.
-The entire mod can fit into fifteen lines of JSON, and it's presented below. Just copy/paste that into a modinfo.json file, and put it in a new folder in your mods directory.
-````json
+This mod is very simple, but it's worth a special section because it does things a little
+differently than other mods, and documentation on it is tricky to find.
+
+The entire mod can fit into fifteen lines of JSON, and it's presented below. Just copy/paste that
+into a modinfo.json file, and put it in a new folder in your mods directory.
+
+```json
[
{
"type": "MOD_INFO",
@@ -233,7 +327,7 @@ The entire mod can fit into fifteen lines of JSON, and it's presented below. Jus
"name": "Prevent Zombie Revivication",
"description": "Disables zombie revival.",
"category": "rebalance",
- "dependencies": [ "bn" ]
+ "dependencies": ["bn"]
},
{
"type": "monster_adjustment",
@@ -241,4 +335,4 @@ The entire mod can fit into fifteen lines of JSON, and it's presented below. Jus
"flag": { "name": "REVIVES", "value": false }
}
]
-````
+```
diff --git a/doc/MONSTERS.md b/doc/MONSTERS.md
index 55472d67f10d..3d3abcb5e960 100644
--- a/doc/MONSTERS.md
+++ b/doc/MONSTERS.md
@@ -1,6 +1,7 @@
# Monster types
Monster types are specified as JSON object with "type" member set to "MONSTER":
+
```JSON
{
"type": "MONSTER",
@@ -9,13 +10,16 @@ Monster types are specified as JSON object with "type" member set to "MONSTER":
}
```
-The id member should be the unique id of the type. It can be any string, by convention it has the prefix "mon_". This id can be referred to in various places, like monster groups or in mapgen to spawn specific monsters.
+The id member should be the unique id of the type. It can be any string, by convention it has the
+prefix "mon_". This id can be referred to in various places, like monster groups or in mapgen to
+spawn specific monsters.
For quantity strings (ie. volume, weight) use the largest unit you can keep full precision with.
Monster types support the following properties (mandatory, except if noted otherwise):
## "name"
+
(string or object)
```JSON
@@ -36,254 +40,330 @@ Name displayed in-game, and optionally the plural name and a translation context
If the plural name is not specified, it defaults to singular name + "s".
-Ctxt is used to help translators in case of homonyms (two different things with the same name). For example, pike the fish and pike the weapon.
+Ctxt is used to help translators in case of homonyms (two different things with the same name). For
+example, pike the fish and pike the weapon.
## "description"
+
(string)
In-game description for the monster.
## "categories"
+
(array of strings, optional)
-Monster categories. Can be NULL, CLASSIC (only mobs found in classic zombie movies) or WILDLIFE (natural animals). If they are not CLASSIC or WILDLIFE, they will not spawn in classic mode. One can add or remove entries in mods via "add:flags" and "remove:flags".
+Monster categories. Can be NULL, CLASSIC (only mobs found in classic zombie movies) or WILDLIFE
+(natural animals). If they are not CLASSIC or WILDLIFE, they will not spawn in classic mode. One can
+add or remove entries in mods via "add:flags" and "remove:flags".
## "species"
+
(array of strings, optional)
-A list of species ids. One can add or remove entries in mods via "add:species" and "remove:species", see Modding below. Properties (currently only triggers) from species are added to the properties of each monster that belong to the species.
+A list of species ids. One can add or remove entries in mods via "add:species" and "remove:species",
+see Modding below. Properties (currently only triggers) from species are added to the properties of
+each monster that belong to the species.
-In mainline game it can be HUMAN, ROBOT, ZOMBIE, MAMMAL, BIRD, FISH, REPTILE, WORM, MOLLUSK, AMPHIBIAN, INSECT, SPIDER, FUNGUS, PLANT, NETHER, MUTANT, BLOB, HORROR, ABERRATION, HALLUCINATION and UNKNOWN.
+In mainline game it can be HUMAN, ROBOT, ZOMBIE, MAMMAL, BIRD, FISH, REPTILE, WORM, MOLLUSK,
+AMPHIBIAN, INSECT, SPIDER, FUNGUS, PLANT, NETHER, MUTANT, BLOB, HORROR, ABERRATION, HALLUCINATION
+and UNKNOWN.
## "volume"
+
(string)
```JSON
"volume": "40 L"
```
-The numeric part of the string must be an integer. Accepts L, and ml as units. Note that l and mL are not currently accepted.
+
+The numeric part of the string must be an integer. Accepts L, and ml as units. Note that l and mL
+are not currently accepted.
## "weight"
+
(string)
```JSON
"weight": "3 kg"
```
-The numeric part of the string must be an integer. Use the largest unit you can keep full precision with. For example: 3 kg, not 3000 g. Accepts g and kg as units.
+
+The numeric part of the string must be an integer. Use the largest unit you can keep full precision
+with. For example: 3 kg, not 3000 g. Accepts g and kg as units.
## "scent_tracked"
+
(array of strings, optional)
List of scenttype_id tracked by this monster. scent_types are defined in scent_types.json
## "scent_ignored"
+
(array of strings, optional)
List of scenttype_id ignored by this monster. scent_types are defined in scent_types.json
## "symbol", "color"
+
(string)
-Symbol and color representing monster in-game. The symbol must be a UTF-8 string, that is exactly one console cell width (may be several Unicode characters). See [COLOR.md](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/COLOR.md) for details.
+Symbol and color representing monster in-game. The symbol must be a UTF-8 string, that is exactly
+one console cell width (may be several Unicode characters). See
+[COLOR.md](https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/COLOR.md) for details.
## "size"
+
(string, optional)
Size flag, see JSON_FLAGS.md.
## "material"
+
(array of strings, optional)
-The materials the monster is primarily composed of. Must contain valid material ids. An empty array (which is the default) is also allowed, the monster is made of no specific material. One can add or remove entries in mods via "add:material" and "remove:material".
+The materials the monster is primarily composed of. Must contain valid material ids. An empty array
+(which is the default) is also allowed, the monster is made of no specific material. One can add or
+remove entries in mods via "add:material" and "remove:material".
## "phase"
+
(string, optional)
-It describes monster's body state of matter. However, it doesn't seem to have any gameplay purpose, right now.
-It can be SOLID, LIQUID, GAS, PLASMA or NULL.
+It describes monster's body state of matter. However, it doesn't seem to have any gameplay purpose,
+right now. It can be SOLID, LIQUID, GAS, PLASMA or NULL.
## "default_faction"
+
(string)
-The id of the faction the monster belongs to, this affects what other monsters it will fight. See Monster factions.
+The id of the faction the monster belongs to, this affects what other monsters it will fight. See
+Monster factions.
## "bodytype"
+
(string)
-The id of the monster's bodytype, which is a general description of the layout of the monster's body.
+The id of the monster's bodytype, which is a general description of the layout of the monster's
+body.
Value should be one of:
-| value | description
-| --- | ---
-| angel | a winged human
-| bear | a four legged animal that can stand on its hind legs
-| bird | a two legged animal with two wings
-| blob | a blob of material
-| crab | a multilegged animal with two large arms
-| quadruped | a four legged animal
-| elephant | a very large quadruped animal with a large head and torso with equal sized limbs
-| fish | an aquatic animal with a streamlined body and fins
-| flying insect | a six legged animal with a head and two body segments and wings
-| frog | a four legged animal with a neck and with very large rear legs and small forelegs
-| gator | a four legged animal with a very long body and short legs
-| human | a bipedal animal with two arms
-| insect | a six legged animal with a head and two body segments
-| kangaroo | a pentapedal animal that utilizes a large tail for stability with very large rear legs and smaller forearms
-| lizard | a smaller form of 'gator'
-| migo | whatever form migos have
-| pig | a four legged animal with the head in the same line as the body
-| spider | an eight legged animal with a small head on a large abdomen
-| snake | an animal with a long body and no limbs
+| value | description |
+| ------------- | ----------------------------------------------------------------------------------------------------------- |
+| angel | a winged human |
+| bear | a four legged animal that can stand on its hind legs |
+| bird | a two legged animal with two wings |
+| blob | a blob of material |
+| crab | a multilegged animal with two large arms |
+| quadruped | a four legged animal |
+| elephant | a very large quadruped animal with a large head and torso with equal sized limbs |
+| fish | an aquatic animal with a streamlined body and fins |
+| flying insect | a six legged animal with a head and two body segments and wings |
+| frog | a four legged animal with a neck and with very large rear legs and small forelegs |
+| gator | a four legged animal with a very long body and short legs |
+| human | a bipedal animal with two arms |
+| insect | a six legged animal with a head and two body segments |
+| kangaroo | a pentapedal animal that utilizes a large tail for stability with very large rear legs and smaller forearms |
+| lizard | a smaller form of 'gator' |
+| migo | whatever form migos have |
+| pig | a four legged animal with the head in the same line as the body |
+| spider | an eight legged animal with a small head on a large abdomen |
+| snake | an animal with a long body and no limbs |
## "attack_cost"
+
(integer, optional)
Number of moves per regular attack.
## "diff"
+
(integer, optional)
-Monster baseline difficulty. Impacts the shade used to label the monster, and if it is above 30 a kill will be recorded in the memorial log. Monster difficult is calculated based on expected melee damage, dodge, armor, hit points, speed, morale, aggression, and vision ranges. The calculation does not handle ranged special attacks or unique special attacks very well, and baseline difficulty can be used to account for that. Suggested values:
+Monster baseline difficulty. Impacts the shade used to label the monster, and if it is above 30 a
+kill will be recorded in the memorial log. Monster difficult is calculated based on expected melee
+damage, dodge, armor, hit points, speed, morale, aggression, and vision ranges. The calculation does
+not handle ranged special attacks or unique special attacks very well, and baseline difficulty can
+be used to account for that. Suggested values:
-| value | description
-| --- | ---
-| 2 | a limited defensive ability such as a skitterbot's taser, or a weak special like a shrieker zombie's special ability to alert nearby monsters, or a minor bonus to attack like poison or venom.
-| 5 | a limited ranged attack weaker than spitter zombie's spit, or a powerful defensive ability like a shocker zombie's zapback or an acid zombie's acid spray.
-| 10 | a powerful ranged attack, like a spitters zombie's spit or an turret's 9mm SMG.
-| 15 | a powerful ranged attack with additional hazards, like a corrosize zombie's spit
-| 20 | a very powerful ranged attack, like a laser turret or military turret's 5.56mm rifle, or a powerful special ability, like a zombie necromancer's ability to raise other zombies.
-| 30 | a ranged attack that is deadly even for armored characters, like an anti-material turret's .50 BMG rifle.
+| value | description |
+| ----- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| 2 | a limited defensive ability such as a skitterbot's taser, or a weak special like a shrieker zombie's special ability to alert nearby monsters, or a minor bonus to attack like poison or venom. |
+| 5 | a limited ranged attack weaker than spitter zombie's spit, or a powerful defensive ability like a shocker zombie's zapback or an acid zombie's acid spray. |
+| 10 | a powerful ranged attack, like a spitters zombie's spit or an turret's 9mm SMG. |
+| 15 | a powerful ranged attack with additional hazards, like a corrosize zombie's spit |
+| 20 | a very powerful ranged attack, like a laser turret or military turret's 5.56mm rifle, or a powerful special ability, like a zombie necromancer's ability to raise other zombies. |
+| 30 | a ranged attack that is deadly even for armored characters, like an anti-material turret's .50 BMG rifle. |
-Most monsters should have difficulty 0 - even dangerous monsters like a zombie hulk or razorclaw alpha. Difficulty should only be used for exceptional, ranged, special attacks.
+Most monsters should have difficulty 0 - even dangerous monsters like a zombie hulk or razorclaw
+alpha. Difficulty should only be used for exceptional, ranged, special attacks.
## "aggression"
+
(integer, optional)
-Defines how aggressive the monster is. Ranges from -99 (totally passive) to 100 (guaranteed hostility on detection)
+Defines how aggressive the monster is. Ranges from -99 (totally passive) to 100 (guaranteed
+hostility on detection)
## "morale"
+
(integer, optional)
-Monster morale. Defines how low monster HP can get before it retreats. This number is treated as % of their max HP.
+Monster morale. Defines how low monster HP can get before it retreats. This number is treated as %
+of their max HP.
## "speed"
+
(integer)
-Monster speed. 100 is the normal speed for a human being - higher values are faster and lower values are slower.
+Monster speed. 100 is the normal speed for a human being - higher values are faster and lower values
+are slower.
## "mountable_weight_ratio"
+
(float, optional)
-Used as the acceptable rider vs. mount weight percentage ratio. Defaults to "0.3", which means the mount is capable of carrying riders weighing <= 30% of the mount's weight.
+Used as the acceptable rider vs. mount weight percentage ratio. Defaults to "0.3", which means the
+mount is capable of carrying riders weighing <= 30% of the mount's weight.
## "melee_skill"
+
(integer, optional)
-Monster melee skill, ranges from 0 - 10, with 4 being an average mob. See GAME_BALANCE.txt for more examples
+Monster melee skill, ranges from 0 - 10, with 4 being an average mob. See GAME_BALANCE.txt for more
+examples
## "dodge"
+
(integer, optional)
Monster dodge skill. See GAME_BALANCE.txt for an explanation of dodge mechanics.
## "melee_damage"
+
(array of objects, optional)
-List of damage instances added to die roll on monster melee attack.
- - `damage_type` valid entries are : "true", "biological", "bash", "cut", "acid", "stab", "heat", "cold" and "electric".
- - `amount` amount of damage.
- - `armor_penetration` how much of the armor the damage instance ignores.
- - `armor_multiplier` is a multiplier on `armor_penetration`.
- - `damage_multiplier` is a multiplier on `amount`.
+List of damage instances added to die roll on monster melee attack. - `damage_type` valid entries
+are : "true", "biological", "bash", "cut", "acid", "stab", "heat", "cold" and "electric". - `amount`
+amount of damage. - `armor_penetration` how much of the armor the damage instance ignores. -
+`armor_multiplier` is a multiplier on `armor_penetration`. - `damage_multiplier` is a multiplier on
+`amount`.
+
```JSON
- "melee_damage": [ { "damage_type": "electric", "amount": 4.0, "armor_penetration": 1, "armor_multiplier": 1.2, "damage_multiplier": 1.4 } ],
+"melee_damage": [ { "damage_type": "electric", "amount": 4.0, "armor_penetration": 1, "armor_multiplier": 1.2, "damage_multiplier": 1.4 } ],
```
## "melee_dice", "melee_dice_sides"
+
(integer, optional)
-Number of dices and their sides that are rolled on monster melee attack. This defines the amount of bash damage.
+Number of dices and their sides that are rolled on monster melee attack. This defines the amount of
+bash damage.
## "grab_strength"
+
(integer, optional)
-Intensity of the grab effect applied by this monster. Defaults to 1, is only useful for monster with a GRAB special attack and the GRABS flag. A monster with grab_strength = n applies a grab as if it was n zombies. A player with max(Str,Dex)<=n has no chance of breaking that grab.
+Intensity of the grab effect applied by this monster. Defaults to 1, is only useful for monster with
+a GRAB special attack and the GRABS flag. A monster with grab_strength = n applies a grab as if it
+was n zombies. A player with max(Str,Dex)<=n has no chance of breaking that grab.
## "melee_cut"
+
(integer, optional)
Amount of cutting damage added to die roll on monster melee attack.
## "armor_bash", "armor_cut", "armor_stab", "armor_acid", "armor_fire"
+
(integer, optional)
Monster protection from bashing, cutting, stabbing, acid and fire damage.
## "vision_day", "vision_night"
+
(integer, optional)
Vision range in full daylight and in total darkness.
## "luminance"
+
(integer, optional)
Amount of light passively output by monster. Ranges from 0 to 10.
## "hp"
+
(integer)
Monster hit points.
## "death_drops"
+
(string or item group, optional)
-An item group that is used to spawn items when the monster dies. This can be an inlined item group, see ITEM_SPAWN.md. The default subtype is "distribution".
+An item group that is used to spawn items when the monster dies. This can be an inlined item group,
+see ITEM_SPAWN.md. The default subtype is "distribution".
## "death_function"
+
(array of strings, optional)
-How the monster behaves on death. See JSON_FLAGS.md for a list of possible functions. One can add or remove entries in mods via "add:death_function" and "remove:death_function".
+How the monster behaves on death. See JSON_FLAGS.md for a list of possible functions. One can add or
+remove entries in mods via "add:death_function" and "remove:death_function".
## "emit_field"
-(array of objects of emit_id and time_duration, optional)
-"emit_fields": [ { "emit_id": "emit_gum_web", "delay": "30 m" } ],
-What field the monster emits and how often it does so. Time duration can use strings: "1 h", "60 m", "3600 s" etc...
+(array of objects of emit_id and time_duration, optional) "emit_fields": [ { "emit_id":
+"emit_gum_web", "delay": "30 m" } ],
+
+What field the monster emits and how often it does so. Time duration can use strings: "1 h", "60 m",
+"3600 s" etc...
## "regenerates"
+
(integer, optional)
Number of hitpoints regenerated per turn.
## "regeneration_modifiers"
+
( array of objects consisting of effect, base_mod (float) and scaling_mod (float), optional )
"regeneration_modifiers": [ { "effect": "on_fire", "base_mod": -0.3, "scaling_mod": -0.15 } ],
-What effects (if any) affect the monster's regeneration positively/negatively.
-The mods stack additively (Intensity 2 on_fire produces a multiplier of 0.45) but are applied multiplicatively.
+What effects (if any) affect the monster's regeneration positively/negatively. The mods stack
+additively (Intensity 2 on_fire produces a multiplier of 0.45) but are applied multiplicatively.
## "regenerates_in_dark"
+
(boolean, optional)
Monster regenerates very quickly in poorly lit tiles.
## "regen_morale"
+
(boolean, optional)
Will stop fleeing if at max hp, and regen anger and morale.
## "special_attacks"
+
(array of special attack definitions, optional)
-Monster's special attacks. This should be an array, each element of it should be an object (new style) or an array (old style).
+Monster's special attacks. This should be an array, each element of it should be an object (new
+style) or an array (old style).
+
+The old style array should contain 2 elements: the id of the attack (see JSON_FLAGS.md for a list)
+and the cooldown for that attack. Example (grab attack every 10 turns):
-The old style array should contain 2 elements: the id of the attack (see JSON_FLAGS.md for a list) and the cooldown for that attack. Example (grab attack every 10 turns):
```JSON
"special_attacks": [ [ "GRAB", 10 ] ]
```
-The new style object should contain at least a "type" member (string) and "cooldown" member (integer). It may contain additional members as required by the specific type. Possible types are listed below. Example:
+The new style object should contain at least a "type" member (string) and "cooldown" member
+(integer). It may contain additional members as required by the specific type. Possible types are
+listed below. Example:
+
```JSON
"special_attacks": [
{ "type": "leap", "cooldown": 10, "max_range": 4 }
@@ -291,6 +371,7 @@ The new style object should contain at least a "type" member (string) and "coold
```
"special_attacks" may contain any mixture of old and new style entries:
+
```JSON
"special_attacks": [
[ "GRAB", 10 ],
@@ -298,41 +379,56 @@ The new style object should contain at least a "type" member (string) and "coold
]
```
-One can add entries with "add:death_function", which takes the same content as the "special_attacks" member and remove entries with "remove:death_function", which requires an array of attack types. Example:
+One can add entries with "add:death_function", which takes the same content as the "special_attacks"
+member and remove entries with "remove:death_function", which requires an array of attack types.
+Example:
+
```JSON
"remove:special_attacks": [ "GRAB" ],
"add:special_attacks": [ [ "SHRIEK", 20 ] ]
```
## "flags"
+
(array of strings, optional)
-Monster flags. See JSON_FLAGS.md for a full list. One can add or remove entries in mods via "add:flags" and "remove:flags".
+Monster flags. See JSON_FLAGS.md for a full list. One can add or remove entries in mods via
+"add:flags" and "remove:flags".
## "fear_triggers", "anger_triggers", "placate_triggers"
+
(array of strings, optional)
What makes the monster afraid / angry / what calms it. See JSON_FLAGS.md for a full list
## "revert_to_itype"
+
(string, optional)
-If not empty and a valid item id, the monster can be converted into this item by the player, when it's friendly. This is usually used for turrets and similar to revert the turret monster back into the turret item, which can be picked up and placed elsewhere.
+If not empty and a valid item id, the monster can be converted into this item by the player, when
+it's friendly. This is usually used for turrets and similar to revert the turret monster back into
+the turret item, which can be picked up and placed elsewhere.
## "starting_ammo"
+
(object, optional)
-An object containing ammo that newly spawned monsters start with. This is useful for a monster that has a special attack that consumes ammo. Example:
+An object containing ammo that newly spawned monsters start with. This is useful for a monster that
+has a special attack that consumes ammo. Example:
+
```JSON
"starting_ammo": { "9mm": 100, "40mm_frag": 100 }
```
## "upgrades"
+
(boolean or object, optional)
-Controls how this monster is upgraded over time. It can either be the single value `false` (which is the default and disables upgrading) or an object describing the upgrades.
+Controls how this monster is upgraded over time. It can either be the single value `false` (which is
+the default and disables upgrading) or an object describing the upgrades.
Example:
+
```JSON
"upgrades": {
"into_group": "GROUP_ZOMBIE_UPGRADE",
@@ -343,57 +439,70 @@ Example:
The upgrades object may have the following members:
### "half_life"
-(int)
-Time in which half of the monsters upgrade according to an approximated exponential progression. It is scaled with the evolution scaling factor which defaults to 4 days.
+
+(int) Time in which half of the monsters upgrade according to an approximated exponential
+progression. It is scaled with the evolution scaling factor which defaults to 4 days.
### "into_group"
-(string, optional)
-The upgraded monster's type is taken from the specified group. The cost in these groups is for an upgrade in the spawn process (related to the rare "replace_monster_group" and "new_monster_group_id" attributes of spawning groups).
+
+(string, optional) The upgraded monster's type is taken from the specified group. The cost in these
+groups is for an upgrade in the spawn process (related to the rare "replace_monster_group" and
+"new_monster_group_id" attributes of spawning groups).
### "into"
-(string, optional)
-The upgraded monster's type.
+
+(string, optional) The upgraded monster's type.
### "age_grow"
-(int, optional)
-Number of days needed for monster to change into another monster.
+
+(int, optional) Number of days needed for monster to change into another monster.
## "reproduction"
-(dictionary, optional)
-The monster's reproduction cycle, if any. Supports:
+
+(dictionary, optional) The monster's reproduction cycle, if any. Supports:
### "baby_monster"
-(string, optional)
-the id of the monster spawned on reproduction for monsters who give live births. You must declare either this or `baby_egg` for reproduction to work.
+
+(string, optional) the id of the monster spawned on reproduction for monsters who give live births.
+You must declare either this or `baby_egg` for reproduction to work.
### "baby_egg"
-(string, optional)
-The id of the egg type to spawn for egg-laying monsters. You must declare either this or "baby_monster" for reproduction to work.
+
+(string, optional) The id of the egg type to spawn for egg-laying monsters. You must declare either
+this or "baby_monster" for reproduction to work.
### "baby_count"
-(int)
-Number of new creatures or eggs to spawn on reproduction.
+
+(int) Number of new creatures or eggs to spawn on reproduction.
### "baby_timer"
-(int)
-Number of days between reproduction events.
+
+(int) Number of days between reproduction events.
## "baby_flags"
-(Array, optional)
-Designate seasons during which this monster is capable of reproduction. ie: `[ "SPRING", "SUMMER" ]`
+
+(Array, optional) Designate seasons during which this monster is capable of reproduction. ie:
+`[ "SPRING", "SUMMER" ]`
## "special_when_hit"
+
(array, optional)
-A special defense attack, triggered when the monster is attacked. It should contain an array with the id of the defense (see Monster defense attacks in JSON_FLAGS.md) and the chance for that defense to be actually triggered. Example:
+A special defense attack, triggered when the monster is attacked. It should contain an array with
+the id of the defense (see Monster defense attacks in JSON_FLAGS.md) and the chance for that defense
+to be actually triggered. Example:
+
```JSON
"special_when_hit": [ "ZAPBACK", 100 ]
```
## "attack_effs"
+
(array of objects, optional)
-A set of effects that may get applied to the attacked creature when the monster successfully attacks. Example:
+A set of effects that may get applied to the attacked creature when the monster successfully
+attacks. Example:
+
```JSON
"attack_effs": [
{
@@ -407,192 +516,251 @@ A set of effects that may get applied to the attacked creature when the monster
Each element of the array should be an object containing the following members:
### "id"
+
(string)
The id of the effect that is to be applied.
### "duration"
+
(integer, optional)
How long (in turns) the effect should last.
### "affect_hit_bp"
+
(boolean, optional)
Whether the effect should be applied to the hit body part instead of the one set below.
### "bp"
-(string, optional)
-The body part that where the effect is applied. The default is to apply the effect to the whole body. Note that some effects may require a specific body part (e.g. "hot") and others may require the whole body (e.g. "meth").
+(string, optional)
+The body part that where the effect is applied. The default is to apply the effect to the whole
+body. Note that some effects may require a specific body part (e.g. "hot") and others may require
+the whole body (e.g. "meth").
### "chance"
+
(integer, optional)
The chance of the effect getting applied.
-
-
# Modding
-Monster types can be overridden or modified in mods. To do so, one has to add an "edit-mode" member, which can contain either:
-- "create" (the default if the member does not exist), an error will be shown if a type with the given id already exists.
-- "override", an existing type (if any) with the given id will be removed and the new data will be loaded as a completely new type.
-- "modify", an existing type will be modified. If there is no type with the given id, an error will be shown.
+Monster types can be overridden or modified in mods. To do so, one has to add an "edit-mode" member,
+which can contain either:
-Mandatory properties (all that are not marked as optional) are only required if edit mode is "create" or "override".
+- "create" (the default if the member does not exist), an error will be shown if a type with the
+ given id already exists.
+- "override", an existing type (if any) with the given id will be removed and the new data will be
+ loaded as a completely new type.
+- "modify", an existing type will be modified. If there is no type with the given id, an error will
+ be shown.
+
+Mandatory properties (all that are not marked as optional) are only required if edit mode is
+"create" or "override".
Example (rename the zombie monster, leaves all other properties untouched):
+
```JSON
{
- "type": "MONSTER",
- "edit-mode": "modify",
- "id": "mon_zombie",
- "name": "clown"
+ "type": "MONSTER",
+ "edit-mode": "modify",
+ "id": "mon_zombie",
+ "name": "clown"
}
```
-The default edit mode ("create") is suitable for new types, if their id conflicts with the types from other mods or from the core data, an error will be shown. The edit mode "override" is suitable for re-defining a type from scratch, it ensures that all mandatory members are listed and leaves no traces of the previous definitions. Edit mode "modify" is for small changes, like adding a flag or removing a special attack.
-Modifying a type overrides the properties with the new values, this example sets the special attacks to contain *only* the "SHRIEK" attack:
+The default edit mode ("create") is suitable for new types, if their id conflicts with the types
+from other mods or from the core data, an error will be shown. The edit mode "override" is suitable
+for re-defining a type from scratch, it ensures that all mandatory members are listed and leaves no
+traces of the previous definitions. Edit mode "modify" is for small changes, like adding a flag or
+removing a special attack.
+
+Modifying a type overrides the properties with the new values, this example sets the special attacks
+to contain _only_ the "SHRIEK" attack:
+
```JSON
{
- "type": "MONSTER",
- "edit-mode": "modify",
- "id": "mon_zombie",
- "special_attacks": [ [ "SHRIEK", 20 ] ]
+ "type": "MONSTER",
+ "edit-mode": "modify",
+ "id": "mon_zombie",
+ "special_attacks": [["SHRIEK", 20]]
}
```
-Some properties allow adding and removing entries, as documented above, usually via members with the "add:"/"remove:" prefix.
-
+Some properties allow adding and removing entries, as documented above, usually via members with the
+"add:"/"remove:" prefix.
# Monster special attack types
+
The listed attack types can be as monster special attacks (see "special_attacks").
## "leap"
+
Makes the monster leap a few tiles. It supports the following additional properties:
### "max_range"
+
(Required) Maximal range of attack.
### "min_range"
+
(Required) Minimal range needed for attack.
### "allow_no_target"
+
This prevents monster from using the ability on empty space.
### "move_cost"
+
Turns needed to complete special attack. 100 move_cost with 100 speed is equal to 1 second/turn.
#### "min_consider_range", "max_consider_range"
+
Minimal range and maximal range to consider for using specific attack.
## "bite"
+
Makes monster use teeth to bite opponent. Some monsters can give infection by doing so.
### "damage_max_instance"
+
Max damage it can deal on one bite.
### "min_mul", "max_mul"
+
How hard is to get free of bite without killing attacker.
### "move_cost"
+
Turns needed to complete special attack. 100 move_cost with 100 speed is equal to 1 second/turn.
### "accuracy"
+
(Integer) How accurate it is. Not many monsters use it though.
### "no_infection_chance"
+
Chance to not give infection.
## "gun"
+
Fires a gun at a target. If friendly, will avoid harming the player.
### "gun_type"
+
(Required) Valid item id of a gun that will be used to perform the attack.
### "ammo_type"
-(Required) Valid item id of the ammo the gun will be loaded with.
-Monster should also have a "starting_ammo" field with this ammo.
-For example
+
+(Required) Valid item id of the ammo the gun will be loaded with. Monster should also have a
+"starting_ammo" field with this ammo. For example
+
```
"ammo_type" : "50bmg",
"starting_ammo" : {"50bmg":100}
```
### "max_ammo"
+
Cap on ammo. If ammo goes above this value for any reason, a debug message will be printed.
### "fake_str"
+
Strength stat of the fake NPC that will execute the attack. 8 if not specified.
### "fake_dex"
+
Dexterity stat of the fake NPC that will execute the attack. 8 if not specified.
### "fake_int"
+
Intelligence stat of the fake NPC that will execute the attack. 8 if not specified.
### "fake_per"
+
Perception stat of the fake NPC that will execute the attack. 8 if not specified.
### "fake_skills"
+
Array of 2 element arrays of skill id and skill level pairs.
### "move_cost"
+
Move cost of executing the attack
// If true, gives "grace period" to player
+
### "require_targeting_player"
-If true, the monster will need to "target" the player,
-wasting `targeting_cost` moves, putting the attack on cooldown and making warning sounds,
-unless it attacked something that needs to be targeted recently.
+
+If true, the monster will need to "target" the player, wasting `targeting_cost` moves, putting the
+attack on cooldown and making warning sounds, unless it attacked something that needs to be targeted
+recently.
### "require_targeting_npc"
+
As above, but with npcs.
### "require_targeting_monster"
+
As above, but with monsters.
### "targeting_timeout"
-Targeting status will be applied for this many turns.
-Note that targeting applies to turret, not targets.
+
+Targeting status will be applied for this many turns. Note that targeting applies to turret, not
+targets.
### "targeting_timeout_extend"
+
Successfully attacking will extend the targeting for this many turns. Can be negative.
### "targeting_cost"
-Move cost of targeting the player. Only applied if attacking the player and didn't target player within last 5 turns.
+
+Move cost of targeting the player. Only applied if attacking the player and didn't target player
+within last 5 turns.
### "no_crits"
-If true then attacking create will be unable to score ranged critical hit on target,
-also good hits no longer has high change to go to the head, instead there is high change to score hit to the body and limbs.
-If false then default behavior used - critical hits are allowed and good hit has high chance to reach head.
+
+If true then attacking create will be unable to score ranged critical hit on target, also good hits
+no longer has high change to go to the head, instead there is high change to score hit to the body
+and limbs. If false then default behavior used - critical hits are allowed and good hit has high
+chance to reach head.
### "laser_lock"
-If true and attacking a creature that isn't laser-locked but needs to be targeted,
-the monster will act as if it had no targeting status (and waste time targeting),
-the target will become laser-locked, and if the target is the player, it will cause a warning.
+
+If true and attacking a creature that isn't laser-locked but needs to be targeted, the monster will
+act as if it had no targeting status (and waste time targeting), the target will become
+laser-locked, and if the target is the player, it will cause a warning.
Laser-locking affects the target, but isn't tied to specific attacker.
### "range"
+
Maximum range at which targets will be acquired.
### "range_no_burst"
+
Maximum range at which targets will be attacked with a burst (if applicable).
### "burst_limit"
+
Limit on burst size.
### "description"
+
Description of the attack being executed if seen by the player.
### "targeting_sound"
+
Description of the sound made when targeting.
### "targeting_volume"
+
Volume of the sound made when targeting.
### "no_ammo_sound"
+
Description of the sound made when out of ammo.
diff --git a/doc/NPCs.md b/doc/NPCs.md
index 24c9d5a9b5c0..6e125f16bd7d 100644
--- a/doc/NPCs.md
+++ b/doc/NPCs.md
@@ -1,7 +1,10 @@
TODO: document the "npc" structure, used to load NPC template
# Writing dialogues
-Dialogues work like state machines. They start with a certain topic (the NPC says something), the player character can respond (choosing one of several responses), and that response sets the new talk topic. This goes on until the dialogue is finished, or the NPC turns hostile.
+
+Dialogues work like state machines. They start with a certain topic (the NPC says something), the
+player character can respond (choosing one of several responses), and that response sets the new
+talk topic. This goes on until the dialogue is finished, or the NPC turns hostile.
Note that it is perfectly fine to have a response that switches the topic back to itself.
@@ -9,15 +12,17 @@ NPC missions are controlled by a separate but related JSON structure and are doc
[the missions docs](MISSIONS_JSON.md).
Two topics are special:
+
- `TALK_DONE` ends the dialogue immediately.
- `TALK_NONE` goes to the previously talked about topic.
-
### Validating Dialogues
+
Keeping track of talk topics and making sure that all the topics referenced in responses are
-defined, and all defined topics are referenced in a response or an NPC's chat, is very tricky.
-There is a python script in `tools/dialogue_validator.py` that will map all topics to responses
-and vice versa. Invoke it with
+defined, and all defined topics are referenced in a response or an NPC's chat, is very tricky. There
+is a python script in `tools/dialogue_validator.py` that will map all topics to responses and vice
+versa. Invoke it with
+
```sh
python tools/dialogue_validator.py data/json/npcs/* data/json/npcs/Backgrounds/* data/json/npcs/refugee_center/*
```
@@ -27,39 +32,51 @@ If you are writing a mod with dialogue, you can add the paths to the mod's dialo
## Talk topics
Each topic consists of:
+
1. a topic id (e.g. `TALK_ARSONIST`)
2. a dynamic line, spoken by the NPC.
3. an optional list of effects that occur when the NPC speaks the dynamic line
4. a list of responses that can be spoken by the player character.
-5. a list of repeated responses that can be spoken by the player character, automatically generated if the player or NPC has items in a list of items.
+5. a list of repeated responses that can be spoken by the player character, automatically generated
+ if the player or NPC has items in a list of items.
-One can specify new topics in json. It is currently not possible to define the starting topic, so you have to add a response to some of the default topics (e.g. `TALK_STRANGER_FRIENDLY` or `TALK_STRANGER_NEUTRAL`) or to topics that can be reached somehow.
+One can specify new topics in json. It is currently not possible to define the starting topic, so
+you have to add a response to some of the default topics (e.g. `TALK_STRANGER_FRIENDLY` or
+`TALK_STRANGER_NEUTRAL`) or to topics that can be reached somehow.
Format:
+
```json
{
- "type": "talk_topic",
- "id": "TALK_ARSONIST",
- "dynamic_line": "What now?",
- "responses": [
- {
- "text": "I don't know either",
- "topic": "TALK_DONE"
- }
- ],
- "replace_built_in_responses": true
+ "type": "talk_topic",
+ "id": "TALK_ARSONIST",
+ "dynamic_line": "What now?",
+ "responses": [
+ {
+ "text": "I don't know either",
+ "topic": "TALK_DONE"
+ }
+ ],
+ "replace_built_in_responses": true
}
```
### type
+
Must always be there and must always be `"talk_topic"`.
### id
-The topic id can be one of the built-in topics or a new id. However, if several talk topics *in json* have the same id, the last topic definition will override the previous ones.
-The topic id can also be an array of strings. This is loaded as if several topics with the exact same content have been given in json, each associated with an id from the `id`, array. Note that loading from json will append responses and, if defined in json, override the `dynamic_line` and the `replace_built_in_responses` setting. This allows adding responses to several topics at once.
+The topic id can be one of the built-in topics or a new id. However, if several talk topics _in
+json_ have the same id, the last topic definition will override the previous ones.
+
+The topic id can also be an array of strings. This is loaded as if several topics with the exact
+same content have been given in json, each associated with an id from the `id`, array. Note that
+loading from json will append responses and, if defined in json, override the `dynamic_line` and the
+`replace_built_in_responses` setting. This allows adding responses to several topics at once.
This example adds the "I'm going now!" response to all the listed topics.
+
```C++
{
"type": "talk_topic",
@@ -75,23 +92,40 @@ This example adds the "I'm going now!" response to all the listed topics.
```
### dynamic_line
-The `dynamic_line` is the line spoken by the NPC. It is optional. If it is not defined and the topic has the same id as a built-in topic, the `dynamic_line` from that built-in topic will be used. Otherwise the NPC will say nothing. See the chapter about `dynamic_line` below for more details.
+
+The `dynamic_line` is the line spoken by the NPC. It is optional. If it is not defined and the topic
+has the same id as a built-in topic, the `dynamic_line` from that built-in topic will be used.
+Otherwise the NPC will say nothing. See the chapter about `dynamic_line` below for more details.
### speaker_effect
-The `speaker_effect` is an object or array of effects that will occur after the NPC speaks the `dynamic_line`, no matter which response the player chooses. See the chapter about Speaker Effects below for more details.
+
+The `speaker_effect` is an object or array of effects that will occur after the NPC speaks the
+`dynamic_line`, no matter which response the player chooses. See the chapter about Speaker Effects
+below for more details.
### response
-The `responses` entry is an array with possible responses. It must not be empty. Each entry must be a response object. See the chapter about Responses below for more details.
+
+The `responses` entry is an array with possible responses. It must not be empty. Each entry must be
+a response object. See the chapter about Responses below for more details.
### replace_built_in_responses
-`replace_built_in_responses` is an optional boolean that defines whether to dismiss the built-in responses for that topic (default is `false`). If there are no built-in responses, this won't do anything. If `true`, the built-in responses are ignored and only those from this definition in the current json are used. If `false`, the responses from the current json are used along with the built-in responses (if any).
+
+`replace_built_in_responses` is an optional boolean that defines whether to dismiss the built-in
+responses for that topic (default is `false`). If there are no built-in responses, this won't do
+anything. If `true`, the built-in responses are ignored and only those from this definition in the
+current json are used. If `false`, the responses from the current json are used along with the
+built-in responses (if any).
---
## dynamic_line
-A dynamic line can either be a simple string, or an complex object, or an array with `dynamic_line` entries. If it's an array, an entry will be chosen randomly every time the NPC needs it. Each entry has the same probability.
+
+A dynamic line can either be a simple string, or an complex object, or an array with `dynamic_line`
+entries. If it's an array, an entry will be chosen randomly every time the NPC needs it. Each entry
+has the same probability.
Example:
+
```json
"dynamic_line": [
"generic text",
@@ -102,65 +136,83 @@ Example:
]
```
-A complex `dynamic_line` usually contains several `dynamic_line` entry and some condition that determines which is used. If dynamic lines are not nested, they are processed in the order of the entries below. The possible types of lines follow.
+A complex `dynamic_line` usually contains several `dynamic_line` entry and some condition that
+determines which is used. If dynamic lines are not nested, they are processed in the order of the
+entries below. The possible types of lines follow.
-In all cases, `npc_` refers to the NPC, and `u_` refers to the player. Optional lines do not have to be defined, but the NPC should always have something to say. Entries are always parsed as `dynamic_line` and can be nested.
+In all cases, `npc_` refers to the NPC, and `u_` refers to the player. Optional lines do not have to
+be defined, but the NPC should always have something to say. Entries are always parsed as
+`dynamic_line` and can be nested.
#### Several lines joined together
-The dynamic line is a list of dynamic lines, all of which are displayed. The dynamic lines in the list are processed normally.
+
+The dynamic line is a list of dynamic lines, all of which are displayed. The dynamic lines in the
+list are processed normally.
+
```json
{
- "and": [
- {
- "npc_male": true,
- "yes": "I'm a man.",
- "no": "I'm a woman."
- },
- " ",
- {
- "u_female": true,
- "no": "You're a man.",
- "yes": "You're a woman."
- }
- ]
+ "and": [
+ {
+ "npc_male": true,
+ "yes": "I'm a man.",
+ "no": "I'm a woman."
+ },
+ " ",
+ {
+ "u_female": true,
+ "no": "You're a man.",
+ "yes": "You're a woman."
+ }
+ ]
}
```
#### A line to be translated with gender context
-The line is to be given a gender context for the NPC, player, or both, to aid
-translation in languages where that matters. For example:
+
+The line is to be given a gender context for the NPC, player, or both, to aid translation in
+languages where that matters. For example:
+
```json
{
- "gendered_line": "Thank you.",
- "relevant_genders": [ "npc" ]
+ "gendered_line": "Thank you.",
+ "relevant_genders": ["npc"]
}
```
+
("Thank you" is different for male and female speakers in e.g. Portuguese).
-Valid choices for entries in the `"relevant_genders"` list are `"npc"` and
-`"u"`.
+Valid choices for entries in the `"relevant_genders"` list are `"npc"` and `"u"`.
#### A randomly selected hint
+
The dynamic line will be randomly chosen from the hints snippets.
```json
{
- "give_hint": true
+ "give_hint": true
}
```
#### Based on a previously generated reason
-The dynamic line will be chosen from a reason generated by an earlier effect. The reason will be cleared. Use of it should be gated on the `"has_reason"` condition.
+
+The dynamic line will be chosen from a reason generated by an earlier effect. The reason will be
+cleared. Use of it should be gated on the `"has_reason"` condition.
```json
{
- "has_reason": { "use_reason": true },
- "no": "What is it, boss?"
+ "has_reason": { "use_reason": true },
+ "no": "What is it, boss?"
}
```
#### Based on any Dialogue condition
-The dynamic line will be chosen based on whether a single dialogue condition is true or false. Dialogue conditions cannot be chained via `"and"`, `"or"`, or `"not"`. If the condition is true, the `"yes"` response will be chosen and otherwise the `"no"` response will be chosen. Both the `'"yes"` and `"no"` reponses are optional. Simple string conditions may be followed by `"true"` to make them fields in the dynamic line dictionary, or they can be followed by the response that will be chosen if the condition is true and the `"yes"` response can be omitted.
+
+The dynamic line will be chosen based on whether a single dialogue condition is true or false.
+Dialogue conditions cannot be chained via `"and"`, `"or"`, or `"not"`. If the condition is true, the
+`"yes"` response will be chosen and otherwise the `"no"` response will be chosen. Both the `'"yes"`
+and `"no"` reponses are optional. Simple string conditions may be followed by `"true"` to make them
+fields in the dynamic line dictionary, or they can be followed by the response that will be chosen
+if the condition is true and the `"yes"` response can be omitted.
```json
{
@@ -193,12 +245,18 @@ The dynamic line will be chosen based on whether a single dialogue condition is
}
}
```
+
---
## Speaker Effects
-The `speaker_effect` entry contains dialogue effects that occur after the NPC speaks the `dynamic_line` but before the player responds and regardless of the player response. Each effect can have an optional condition, and will only be applied if the condition is true. Each `speaker_effect` can also have an optional `sentinel`, which guarantees the effect will only run once.
+
+The `speaker_effect` entry contains dialogue effects that occur after the NPC speaks the
+`dynamic_line` but before the player responds and regardless of the player response. Each effect can
+have an optional condition, and will only be applied if the condition is true. Each `speaker_effect`
+can also have an optional `sentinel`, which guarantees the effect will only run once.
Format:
+
```json
"speaker_effect": {
"sentinel": "...",
@@ -206,7 +264,9 @@ Format:
"effect": "..."
}
```
+
or:
+
```json
"speaker_effect": [
{
@@ -222,70 +282,95 @@ or:
]
```
-The `sentinel` can be any string, but sentinels are unique to each `TALK_TOPIC`. If there are multiple `speaker_effect`s within the `TALK_TOPIC`, they should have different sentinels. Sentinels are not required, but since the `speaker_effect` will run every time the dialogue returns to the `TALK_TOPIC`, they are highly encouraged to avoid inadvertently repeating the same effects.
+The `sentinel` can be any string, but sentinels are unique to each `TALK_TOPIC`. If there are
+multiple `speaker_effect`s within the `TALK_TOPIC`, they should have different sentinels. Sentinels
+are not required, but since the `speaker_effect` will run every time the dialogue returns to the
+`TALK_TOPIC`, they are highly encouraged to avoid inadvertently repeating the same effects.
-The `effect` can be any legal effect, as described below. The effect can be a simple string, object, or an array of strings and objects, as normal for objects.
+The `effect` can be any legal effect, as described below. The effect can be a simple string, object,
+or an array of strings and objects, as normal for objects.
-The optional `condition` can be any legal condition, as described below. If a `condition` is present, the `effect` will only occur if the `condition` is true.
+The optional `condition` can be any legal condition, as described below. If a `condition` is
+present, the `effect` will only occur if the `condition` is true.
-Speaker effects are useful for setting status variables to indicate that player has talked to the NPC without complicating the responses with multiple effect variables. They can also be used, with a sentinel, to run a `mapgen_update` effect the first time the player hears some dialogue from the NPC.
+Speaker effects are useful for setting status variables to indicate that player has talked to the
+NPC without complicating the responses with multiple effect variables. They can also be used, with a
+sentinel, to run a `mapgen_update` effect the first time the player hears some dialogue from the
+NPC.
---
+
## Responses
-A response contains at least a text, which is display to the user and "spoken" by the player character (its content has no meaning for the game) and a topic to which the dialogue will switch to. It can also have a trial object which can be used to either lie, persuade or intimidate the NPC, see below for details. There can be different results, used either when the trial succeeds and when it fails.
+
+A response contains at least a text, which is display to the user and "spoken" by the player
+character (its content has no meaning for the game) and a topic to which the dialogue will switch
+to. It can also have a trial object which can be used to either lie, persuade or intimidate the NPC,
+see below for details. There can be different results, used either when the trial succeeds and when
+it fails.
Format:
+
```json
{
- "text": "I, the player, say to you...",
- "condition": "...something...",
- "trial": {
- "type": "PERSUADE",
- "difficulty": 10
- },
- "success": {
- "topic": "TALK_DONE",
- "effect": "...",
- "opinion": {
- "trust": 0,
- "fear": 0,
- "value": 0,
- "anger": 0,
- "owed": 0,
- "favors": 0
- }
- },
- "failure": {
- "topic": "TALK_DONE"
+ "text": "I, the player, say to you...",
+ "condition": "...something...",
+ "trial": {
+ "type": "PERSUADE",
+ "difficulty": 10
+ },
+ "success": {
+ "topic": "TALK_DONE",
+ "effect": "...",
+ "opinion": {
+ "trust": 0,
+ "fear": 0,
+ "value": 0,
+ "anger": 0,
+ "owed": 0,
+ "favors": 0
}
+ },
+ "failure": {
+ "topic": "TALK_DONE"
+ }
}
```
Alternatively a short format:
+
```json
{
- "text": "I, the player, say to you...",
- "effect": "...",
- "topic": "TALK_WHATEVER"
+ "text": "I, the player, say to you...",
+ "effect": "...",
+ "topic": "TALK_WHATEVER"
}
```
+
The short format is equivalent to (an unconditional switching of the topic, `effect` is optional):
+
```json
{
- "text": "I, the player, say to you...",
- "trial": {
- "type": "NONE"
- },
- "success": {
- "effect": "...",
- "topic": "TALK_WHATEVER"
- }
+ "text": "I, the player, say to you...",
+ "trial": {
+ "type": "NONE"
+ },
+ "success": {
+ "effect": "...",
+ "topic": "TALK_WHATEVER"
+ }
}
```
-The optional boolean keys "switch" and "default" are false by default. Only the first response with `"switch": true`, `"default": false`, and a valid condition will be displayed, and no other responses with `"switch": true` will be displayed. If no responses with `"switch": true` and `"default": false` are displayed, then any and all responses with `"switch": true` and `"default": true` will be displayed. In either case, all responses that have `"switch": false` (whether or not they have `"default": true` is set) will be displayed as long their conditions are satisfied.
+The optional boolean keys "switch" and "default" are false by default. Only the first response with
+`"switch": true`, `"default": false`, and a valid condition will be displayed, and no other
+responses with `"switch": true` will be displayed. If no responses with `"switch": true` and
+`"default": false` are displayed, then any and all responses with `"switch": true` and
+`"default": true` will be displayed. In either case, all responses that have `"switch": false`
+(whether or not they have `"default": true` is set) will be displayed as long their conditions are
+satisfied.
#### switch and default Example
+
```json
"responses": [
{ "text": "You know what, never mind.", "topic": "TALK_NONE" },
@@ -300,51 +385,77 @@ The optional boolean keys "switch" and "default" are false by default. Only the
{ "text": "Gotta go!", "topic": "TALK_DONE" }
]
```
+
The player will always have the option to return to a previous topic or end the conversation, and
-will otherwise have the option to give a $500, $50, or $5 bribe if they have the funds. If they
+will otherwise have the option to give a $500, $50, or $5 bribe if they have the funds. If they
don't have at least $50, they will also have the option to provide some other bribe.
### truefalsetext
-The player will have one response text if a condition is true, and another if it is false, but the same trial for either line. `condition`, `true`, and `false` are all mandatory.
+
+The player will have one response text if a condition is true, and another if it is false, but the
+same trial for either line. `condition`, `true`, and `false` are all mandatory.
```json
{
- "truefalsetext": {
- "condition": { "u_has_item": "FMCNote" },
- "true": "I may have the money, I'm not giving you any.",
- "false": "I don't have that money."
- },
- "topic": "TALK_WONT_PAY"
+ "truefalsetext": {
+ "condition": { "u_has_item": "FMCNote" },
+ "true": "I may have the money, I'm not giving you any.",
+ "false": "I don't have that money."
+ },
+ "topic": "TALK_WONT_PAY"
}
```
### text
+
Will be shown to the user, no further meaning.
### trial
-Optional, if not defined, `"NONE"` is used. Otherwise one of `"NONE"`, `"LIE"`, `"PERSUADE"`, `"INTIMIDATE"`, or `"CONDITION"`. If `"NONE"` is used, the `failure` object is not read, otherwise it's mandatory.
-The `difficulty` is only required if type is not `"NONE"` or `"CONDITION"` and specifies the success chance in percent (it is however modified by various things like mutations). Higher difficulties are easier to pass.
+Optional, if not defined, `"NONE"` is used. Otherwise one of `"NONE"`, `"LIE"`, `"PERSUADE"`,
+`"INTIMIDATE"`, or `"CONDITION"`. If `"NONE"` is used, the `failure` object is not read, otherwise
+it's mandatory.
-An optional `mod` array takes any of the following modifiers and increases the difficulty by the NPC's opinion of your character or personality trait for that modifier multiplied by the value: `"ANGER"`, `"FEAR"`, `"TRUST"`, `"VALUE"`, `"AGRESSION"`, `"ALTRUISM"`, `"BRAVERY"`, `"COLLECTOR"`. The special `"POS_FEAR"` modifier treats NPC's fear of your character below 0 as though it were 0. The special `"TOTAL"` modifier sums all previous modifiers and then multiplies the result by its value and is used when setting the owed value.
+The `difficulty` is only required if type is not `"NONE"` or `"CONDITION"` and specifies the success
+chance in percent (it is however modified by various things like mutations). Higher difficulties are
+easier to pass.
-`"CONDITION"` trials take a mandatory `condition` instead of `difficulty`. The `success` object is chosen if the `condition` is true and the `failure` is chosen otherwise.
+An optional `mod` array takes any of the following modifiers and increases the difficulty by the
+NPC's opinion of your character or personality trait for that modifier multiplied by the value:
+`"ANGER"`, `"FEAR"`, `"TRUST"`, `"VALUE"`, `"AGRESSION"`, `"ALTRUISM"`, `"BRAVERY"`, `"COLLECTOR"`.
+The special `"POS_FEAR"` modifier treats NPC's fear of your character below 0 as though it were 0.
+The special `"TOTAL"` modifier sums all previous modifiers and then multiplies the result by its
+value and is used when setting the owed value.
+
+`"CONDITION"` trials take a mandatory `condition` instead of `difficulty`. The `success` object is
+chosen if the `condition` is true and the `failure` is chosen otherwise.
### success and failure
-Both objects have the same structure. `topic` defines which topic the dialogue will switch to. `opinion` is optional, if given it defines how the opinion of the NPC will change. The given values are *added* to the opinion of the NPC, they are all optional and default to 0. `effect` is a function that is executed after choosing the response, see below.
+
+Both objects have the same structure. `topic` defines which topic the dialogue will switch to.
+`opinion` is optional, if given it defines how the opinion of the NPC will change. The given values
+are _added_ to the opinion of the NPC, they are all optional and default to 0. `effect` is a
+function that is executed after choosing the response, see below.
The opinion of the NPC affects several aspects of the interaction with NPCs:
+
- Higher trust makes it easier to lie and persuade, and it usually a good thing.
-- Higher fear makes it easier to intimidate, but the NPC may flee from you (and will not talk to you).
-- Higher value makes it easier to persuade them and to give them orders, it's a kind of a friendship indicator.
-- High anger value (about 20 points more than fear, but this also depends on the NPCs personality) makes the NPC hostile and is usually a bad thing.
-The combination of fear and trust decide together with the personality of the NPC the initial talk topic (`"TALK_MUG"`, `"TALK_STRANGER_AGGRESSIVE"`, `"TALK_STRANGER_SCARED"`, `"TALK_STRANGER_WARY"`, `"TALK_STRANGER_FRIENDLY"`, or `"TALK_STRANGER_NEUTRAL"`).
+- Higher fear makes it easier to intimidate, but the NPC may flee from you (and will not talk to
+ you).
+- Higher value makes it easier to persuade them and to give them orders, it's a kind of a friendship
+ indicator.
+- High anger value (about 20 points more than fear, but this also depends on the NPCs personality)
+ makes the NPC hostile and is usually a bad thing. The combination of fear and trust decide
+ together with the personality of the NPC the initial talk topic (`"TALK_MUG"`,
+ `"TALK_STRANGER_AGGRESSIVE"`, `"TALK_STRANGER_SCARED"`, `"TALK_STRANGER_WARY"`,
+ `"TALK_STRANGER_FRIENDLY"`, or `"TALK_STRANGER_NEUTRAL"`).
For the actual usage of that data, search the source code for `"op_of_u"`.
The `failure` object is used if the trial fails, the `success` object is used otherwise.
### Sample trials
+
```json
"trial": { "type": "PERSUADE", "difficulty": 0, "mod": [ [ "TRUST", 3 ], [ "VALUE", 3 ], [ "ANGER", -3 ] ] }
"trial": { "type": "INTIMIDATE", "difficulty": 20, "mod": [ [ "FEAR", 8 ], [ "VALUE", 2 ], [ "TRUST", 2 ], [ "BRAVERY", -2 ] ] }
@@ -365,145 +476,172 @@ The `failure` object is used if the trial fails, the `success` object is used ot
```
### condition
-This is an optional condition which can be used to prevent the response under certain circumstances. If not defined, it defaults to always `true`. If the condition is not met, the response is not included in the list of possible responses. For possible content see Dialogue Conditions below.
+
+This is an optional condition which can be used to prevent the response under certain circumstances.
+If not defined, it defaults to always `true`. If the condition is not met, the response is not
+included in the list of possible responses. For possible content see Dialogue Conditions below.
---
## Repeat Responses
-Repeat responses are responses that should be added to the response list multiple times, once for each instance of an item.
+
+Repeat responses are responses that should be added to the response list multiple times, once for
+each instance of an item.
A repeat response has the following format:
+
```json
{
"for_item": [
- "jerky", "meat_smoked", "fish_smoked", "cooking_oil", "cooking_oil2", "cornmeal", "flour",
- "fruit_wine", "beer", "sugar"
+ "jerky",
+ "meat_smoked",
+ "fish_smoked",
+ "cooking_oil",
+ "cooking_oil2",
+ "cornmeal",
+ "flour",
+ "fruit_wine",
+ "beer",
+ "sugar"
],
"response": { "text": "Delivering .", "topic": "TALK_DELIVER_ASK" }
}
```
-`"response"` is mandatory and must be a standard dialogue response, as described above. `"switch"` is allowed in repeat responses and works normally.
+`"response"` is mandatory and must be a standard dialogue response, as described above. `"switch"`
+is allowed in repeat responses and works normally.
-One of `"for_item"` or `"for_category"`, and each can either be a single string or list of items or item categories. The `response` is generated for each item in the list in the player or NPC's inventory.
+One of `"for_item"` or `"for_category"`, and each can either be a single string or list of items or
+item categories. The `response` is generated for each item in the list in the player or NPC's
+inventory.
-`"is_npc"` is an optional bool value, and if it is present, the NPC's inventory list is checked. By default, the player's inventory list is checked.
+`"is_npc"` is an optional bool value, and if it is present, the NPC's inventory list is checked. By
+default, the player's inventory list is checked.
-`"include_containers"` is an optional bool value, and if it is present, items containing an item will generate separate responses from the item itself.
+`"include_containers"` is an optional bool value, and if it is present, items containing an item
+will generate separate responses from the item itself.
---
## Dialogue Effects
-The `effect` field of `speaker_effect` or a `response` can be any of the following effects. Multiple effects should be arranged in a list and are processed in the order listed.
+
+The `effect` field of `speaker_effect` or a `response` can be any of the following effects. Multiple
+effects should be arranged in a list and are processed in the order listed.
#### Missions
-Effect | Description
----|---
-`assign_mission` | Assigns a previously selected mission to your character.
-`mission_success` | Resolves the current mission successfully.
-`mission_failure` | Resolves the current mission as a failure.
-`clear_mission` | Clears the mission from the your character's assigned missions.
-`mission_reward` | Gives the player the mission's reward.
+| Effect | Description |
+| ----------------- | --------------------------------------------------------------- |
+| `assign_mission` | Assigns a previously selected mission to your character. |
+| `mission_success` | Resolves the current mission successfully. |
+| `mission_failure` | Resolves the current mission as a failure. |
+| `clear_mission` | Clears the mission from the your character's assigned missions. |
+| `mission_reward` | Gives the player the mission's reward. |
#### Stats / Morale
-Effect | Description
----|---
-`give_aid` | Removes all bites, infection, and bleeding from your character's body and heals 10-25 HP of injury on each of your character's body parts. Takes 30 minutes. NPC receives 30 minutes of `currently_busy` effect on start.
-`give_aid_all` | Performs `give_aid` on your character and each of your character's NPC allies in crafting range. Takes 1 hour. NPC receives 1 hour of `currently_busy` effect on start.
-`buy_haircut` | Gives your character a haircut morale boost for 12 hours.
-`buy_shave` | Gives your character a shave morale boost for 6 hours.
-`morale_chat` | Gives your character a pleasant conversation morale boost for 6 hours.
-`player_weapon_away` | Makes your character put away (unwield) their weapon.
-`player_weapon_drop` | Makes your character drop their weapon.
+| Effect | Description |
+| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `give_aid` | Removes all bites, infection, and bleeding from your character's body and heals 10-25 HP of injury on each of your character's body parts. Takes 30 minutes. NPC receives 30 minutes of `currently_busy` effect on start. |
+| `give_aid_all` | Performs `give_aid` on your character and each of your character's NPC allies in crafting range. Takes 1 hour. NPC receives 1 hour of `currently_busy` effect on start. |
+| `buy_haircut` | Gives your character a haircut morale boost for 12 hours. |
+| `buy_shave` | Gives your character a shave morale boost for 6 hours. |
+| `morale_chat` | Gives your character a pleasant conversation morale boost for 6 hours. |
+| `player_weapon_away` | Makes your character put away (unwield) their weapon. |
+| `player_weapon_drop` | Makes your character drop their weapon. |
#### Character effects / Mutations
-Effect | Description
----|---
-`u_add_effect: effect_string`, (*one of* `duration: duration_string`, `duration: duration_int`)
`npc_add_effect: effect_string`, (*one of* `duration: duration_string`, `duration: duration_int`) | Your character or the NPC will gain the effect for `duration_string` or `duration_int` turns. If `duration_string` is `"PERMANENT"`, the effect will be added permanently.
-`u_add_trait: trait_string`
`npc_add_trait: trait_string` | Your character or the NPC will gain the trait.
-`u_lose_effect: effect_string`
`npc_lose_effect: effect_string` | Your character or the NPC will lose the effect if they have it.
-`u_lose_trait: trait_string`
`npc_lose_trait: trait_string` | Your character or the NPC will lose the trait.
-`u_add_var, npc_add_var`: `var_name, type: type_str`, `context: context_str`, `value: value_str` | Your character or the NPC will store `value_str` as a variable that can be later retrieved by `u_has_var` or `npc_has_var`. `npc_add_var` can be used to store arbitrary local variables, and `u_add_var` can be used to store arbitrary "global" variables, and should be used in preference to setting effects.
-`u_lose_var`, `npc_lose_var`: `var_name`, `type: type_str`, `context: context_str` | Your character or the NPC will clear any stored variable that has the same `var_name`, `type_str`, and `context_str`.
-`u_adjust_var, npc_adjust_var`: `var_name, type: type_str`, `context: context_str`, `adjustment: adjustment_num` | Your character or the NPC will adjust the stored variable by `adjustment_num`.
-`barber_hair` | Opens a menu allowing the player to choose a new hair style.
-`barber_beard` | Opens a menu allowing the player to choose a new beard style.
-`u_learn_recipe: recipe_string` | Your character will learn and memorize the recipe `recipe_string`.
-`npc_first_topic: topic_string` | NPC permanently changes first dialogue topic to `topic_string`.
+| Effect | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `u_add_effect: effect_string`, (_one of_ `duration: duration_string`, `duration: duration_int`)
`npc_add_effect: effect_string`, (_one of_ `duration: duration_string`, `duration: duration_int`) | Your character or the NPC will gain the effect for `duration_string` or `duration_int` turns. If `duration_string` is `"PERMANENT"`, the effect will be added permanently. |
+| `u_add_trait: trait_string`
`npc_add_trait: trait_string` | Your character or the NPC will gain the trait. |
+| `u_lose_effect: effect_string`
`npc_lose_effect: effect_string` | Your character or the NPC will lose the effect if they have it. |
+| `u_lose_trait: trait_string`
`npc_lose_trait: trait_string` | Your character or the NPC will lose the trait. |
+| `u_add_var, npc_add_var`: `var_name, type: type_str`, `context: context_str`, `value: value_str` | Your character or the NPC will store `value_str` as a variable that can be later retrieved by `u_has_var` or `npc_has_var`. `npc_add_var` can be used to store arbitrary local variables, and `u_add_var` can be used to store arbitrary "global" variables, and should be used in preference to setting effects. |
+| `u_lose_var`, `npc_lose_var`: `var_name`, `type: type_str`, `context: context_str` | Your character or the NPC will clear any stored variable that has the same `var_name`, `type_str`, and `context_str`. |
+| `u_adjust_var, npc_adjust_var`: `var_name, type: type_str`, `context: context_str`, `adjustment: adjustment_num` | Your character or the NPC will adjust the stored variable by `adjustment_num`. |
+| `barber_hair` | Opens a menu allowing the player to choose a new hair style. |
+| `barber_beard` | Opens a menu allowing the player to choose a new beard style. |
+| `u_learn_recipe: recipe_string` | Your character will learn and memorize the recipe `recipe_string`. |
+| `npc_first_topic: topic_string` | NPC permanently changes first dialogue topic to `topic_string`. |
#### Trade / Items
-Effect | Description
----|---
-`start_trade` | Opens the trade screen and allows trading with the NPC.
-`buy_10_logs` | Places 10 logs in the ranch garage, and makes the NPC unavailable for 1 day.
-`buy_100_logs` | Places 100 logs in the ranch garage, and makes the NPC unavailable for 7 days.
-`give_equipment` | Allows your character to select items from the NPC's inventory and transfer them to your inventory.
-`npc_gets_item` | Allows your character to select an item from your character's inventory and transfer it to the NPC's inventory. The NPC will not accept it if they do not have space or weight to carry it, and will set a reason that can be referenced in a future dynamic line with `"use_reason"`.
-`npc_gets_item_to_use` | Allow your character to select an item from your character's inventory and transfer it to the NPC's inventory. The NPC will attempt to wield it and will not accept it if it is too heavy or is an inferior weapon to what they are currently using, and will set a reason that can be referenced in a future dynamic line with `"use_reason"`.
-`u_buy_item: item_string`, (*optional* `cost: cost_num`, *optional* `count: count_num`, *optional* `container: container_string`) | The NPC will give your character the item or `count_num` copies of the item, contained in container, and will subtract `cost_num` from `op_of_u.owed` if specified. If the `op_o_u.owed` is less than `cost_num`, the trade window will open and the player will have to trade to make up the difference; the NPC will not give the player the item unless `cost_num` is satisfied.
If cost isn't present, the NPC gives your character the item at no charge.
-`u_sell_item: item_string`, (*optional* `cost: cost_num`, *optional* `count: count_num`) | Your character will give the NPC the item or `count_num` copies of the item, and will add `cost_num` to the NPC's `op_of_u.owed` if specified.
If cost isn't present, the your character gives the NPC the item at no charge.
This effect will fail if you do not have at least `count_num` copies of the item, so it should be checked with `u_has_items`.
-`u_bulk_trade_accept`
`npc_bulk_trade_accept` | Only valid after a `repeat_response`. The player trades all instances of the item from the `repeat_response` with the NPC. For `u_bulk_trade_accept`, the player loses the items from their inventory and gains the same value of the NPC's faction currecy; for `npc_bulk_trade_accept`, the player gains the items from the NPC's inventory and loses the same value of the NPC's faction currency. If there is remaining value, or the NPC doesn't have a faction currency, the remainder goes into the NPC's `op_of_u.owed`.
-`u_bulk_donate`
`npc_bulk_donate` | Only valid after a `repeat_response`. The player or NPC transfers all instances of the item from the `repeat_response`. For `u_bulk_donate`, the player loses the items from their inventory and the NPC gains them; for `npc_bulk_donate`, the player gains the items from the NPC's inventory and the NPC loses them.
-`u_spend_ecash: amount` | Remove `amount` from your character's pre-cataclysm bank account. Negative values means your character gains e-cash. NPCs should **not** deal in e-cash, only personal debts and items (including faction currency).
-`add_debt: mod_list` | Increases the NPC's debt to the player by the values in the `mod_list`.
The following would increase the NPC's debt to the player by 1500x the NPC's altruism and 1000x the NPC's opinion of the player's value: `{ "effect": { "add_debt": [ [ "ALTRUISM", 3 ], [ "VALUE", 2 ], [ "TOTAL", 500 ] ] } }`
-`u_consume_item`, `npc_consume_item: item_string`, (*optional* `count: count_num`) | You or the NPC will delete the item or `count_num` copies of the item from their inventory.
This effect will fail if the you or NPC does not have at least `count_num` copies of the item, so it should be checked with `u_has_items` or `npc_has_items`.
-`u_remove_item_with`, `npc_remove_item_with: item_string` | You or the NPC will delete any instances of item in inventory.
This is an unconditional remove and will not fail if you or the NPC does not have the item.
-`u_buy_monster: monster_type_string`, (*optional* `cost: cost_num`, *optional* `count: count_num`, *optional* `name: name_string`, *optional* `pacified: pacified_bool`) | The NPC will give your character `count_num` (default 1) instances of the monster as pets and will subtract `cost_num` from `op_of_u.owed` if specified. If the `op_o_u.owed` is less than `cost_num`, the trade window will open and the player will have to trade to make up the difference; the NPC will not give the player the item unless `cost_num` is satisfied.
If cost isn't present, the NPC gives your character the item at no charge.
If `name_string` is specified the monster(s) will have the specified name. If `pacified_bool` is set to true, the monster will have the pacified effect applied.
-
+| Effect | Description |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `start_trade` | Opens the trade screen and allows trading with the NPC. |
+| `buy_10_logs` | Places 10 logs in the ranch garage, and makes the NPC unavailable for 1 day. |
+| `buy_100_logs` | Places 100 logs in the ranch garage, and makes the NPC unavailable for 7 days. |
+| `give_equipment` | Allows your character to select items from the NPC's inventory and transfer them to your inventory. |
+| `npc_gets_item` | Allows your character to select an item from your character's inventory and transfer it to the NPC's inventory. The NPC will not accept it if they do not have space or weight to carry it, and will set a reason that can be referenced in a future dynamic line with `"use_reason"`. |
+| `npc_gets_item_to_use` | Allow your character to select an item from your character's inventory and transfer it to the NPC's inventory. The NPC will attempt to wield it and will not accept it if it is too heavy or is an inferior weapon to what they are currently using, and will set a reason that can be referenced in a future dynamic line with `"use_reason"`. |
+| `u_buy_item: item_string`, (_optional_ `cost: cost_num`, _optional_ `count: count_num`, _optional_ `container: container_string`) | The NPC will give your character the item or `count_num` copies of the item, contained in container, and will subtract `cost_num` from `op_of_u.owed` if specified. If the `op_o_u.owed` is less than `cost_num`, the trade window will open and the player will have to trade to make up the difference; the NPC will not give the player the item unless `cost_num` is satisfied.
If cost isn't present, the NPC gives your character the item at no charge. |
+| `u_sell_item: item_string`, (_optional_ `cost: cost_num`, _optional_ `count: count_num`) | Your character will give the NPC the item or `count_num` copies of the item, and will add `cost_num` to the NPC's `op_of_u.owed` if specified.
If cost isn't present, the your character gives the NPC the item at no charge.
This effect will fail if you do not have at least `count_num` copies of the item, so it should be checked with `u_has_items`. |
+| `u_bulk_trade_accept`
`npc_bulk_trade_accept` | Only valid after a `repeat_response`. The player trades all instances of the item from the `repeat_response` with the NPC. For `u_bulk_trade_accept`, the player loses the items from their inventory and gains the same value of the NPC's faction currecy; for `npc_bulk_trade_accept`, the player gains the items from the NPC's inventory and loses the same value of the NPC's faction currency. If there is remaining value, or the NPC doesn't have a faction currency, the remainder goes into the NPC's `op_of_u.owed`. |
+| `u_bulk_donate`
`npc_bulk_donate` | Only valid after a `repeat_response`. The player or NPC transfers all instances of the item from the `repeat_response`. For `u_bulk_donate`, the player loses the items from their inventory and the NPC gains them; for `npc_bulk_donate`, the player gains the items from the NPC's inventory and the NPC loses them. |
+| `u_spend_ecash: amount` | Remove `amount` from your character's pre-cataclysm bank account. Negative values means your character gains e-cash. NPCs should **not** deal in e-cash, only personal debts and items (including faction currency). |
+| `add_debt: mod_list` | Increases the NPC's debt to the player by the values in the `mod_list`.
The following would increase the NPC's debt to the player by 1500x the NPC's altruism and 1000x the NPC's opinion of the player's value: `{ "effect": { "add_debt": [ [ "ALTRUISM", 3 ], [ "VALUE", 2 ], [ "TOTAL", 500 ] ] } }` |
+| `u_consume_item`, `npc_consume_item: item_string`, (_optional_ `count: count_num`) | You or the NPC will delete the item or `count_num` copies of the item from their inventory.
This effect will fail if the you or NPC does not have at least `count_num` copies of the item, so it should be checked with `u_has_items` or `npc_has_items`. |
+| `u_remove_item_with`, `npc_remove_item_with: item_string` | You or the NPC will delete any instances of item in inventory.
This is an unconditional remove and will not fail if you or the NPC does not have the item. |
+| `u_buy_monster: monster_type_string`, (_optional_ `cost: cost_num`, _optional_ `count: count_num`, _optional_ `name: name_string`, _optional_ `pacified: pacified_bool`) | The NPC will give your character `count_num` (default 1) instances of the monster as pets and will subtract `cost_num` from `op_of_u.owed` if specified. If the `op_o_u.owed` is less than `cost_num`, the trade window will open and the player will have to trade to make up the difference; the NPC will not give the player the item unless `cost_num` is satisfied.
If cost isn't present, the NPC gives your character the item at no charge.
If `name_string` is specified the monster(s) will have the specified name. If `pacified_bool` is set to true, the monster will have the pacified effect applied. |
#### Behavior / AI
-Effect | Description
----|---
-`assign_guard` | Makes the NPC into a guard. If allied and at a camp, they will be assigned to that camp.
-`stop_guard` | Releases the NPC from their guard duty (also see `assign_guard`). Friendly NPCs will return to following.
-`start_camp` | The NPC will start a faction camp with the player.
-`recover_camp` | Makes the NPC the overseer of an existing camp that doesn't have an overseer.
-`remove_overseer` | Makes the NPC stop being an overseer, abandoning the faction camp.
-`wake_up` | Wakes up sleeping, but not sedated, NPCs.
-`reveal_stats` | Reveals the NPC's stats, based on the player's skill at assessing them.
-`end_conversation` | Ends the conversation and makes the NPC ignore you from now on.
-`insult_combat` | Ends the conversation and makes the NPC hostile, adds a message that character starts a fight with the NPC.
-`hostile` | Makes the NPC hostile and ends the conversation.
-`flee` | Makes the NPC flee from your character.
-`follow` | Makes the NPC follow your character, joining the "Your Followers" faction.
-`leave` | Makes the NPC leave the "Your Followers" faction and stop following your character.
-`follow_only` | Makes the NPC follow your character without changing factions.
-`stop_following` | Makes the NPC stop following your character without changing factions.
-`npc_thankful` | Makes the NPC positively inclined toward your character.
-`drop_weapon` | Makes the NPC drop their weapon.
-`stranger_neutral` | Changes the NPC's attitude to neutral.
-`start_mugging` | The NPC will approach your character and steal from your character, attacking if your character resists.
-`lead_to_safety` | The NPC will gain the LEAD attitude and give your character the mission of reaching safety.
-`start_training` | The NPC will train your character in a skill or martial art.
-`companion_mission: role_string` | The NPC will offer you a list of missions for your allied NPCs, depending on the NPC's role.
-`basecamp_mission` | The NPC will offer you a list of missions for your allied NPCs, depending on the local basecamp.
-`bionic_install` | The NPC installs a bionic from your character's inventory onto your character, using very high skill, and charging you according to the operation's difficulty.
-`bionic_remove` | The NPC removes a bionic from your character, using very high skill, and charging you according to the operation's difficulty.
-`npc_class_change: class_string` | Change the NPC's faction to `class_string`.
-`npc_faction_change: faction_string` | Change the NPC's faction membership to `faction_string`.
-`u_faction_rep: rep_num` | Increases your reputation with the NPC's current faction, or decreases it if `rep_num` is negative.
-`toggle_npc_rule: rule_string` | Toggles the value of a boolean NPC follower AI rule such as `"use_silent"` or `"allow_bash"`
-`set_npc_rule: rule_string` | Sets the value of a boolean NPC follower AI rule such as `"use_silent"` or `"allow_bash"`
-`clear_npc_rule: rule_string` | Clears the value of a boolean NPC follower AI rule such as `"use_silent"` or `"allow_bash"`
-`set_npc_engagement_rule: rule_string` | Sets the NPC follower AI rule for engagement distance to the value of `rule_string`.
-`set_npc_aim_rule: rule_string` | Sets the NPC follower AI rule for aiming speed to the value of `rule_string`.
-`npc_die` | The NPC will die at the end of the conversation.
+| Effect | Description |
+| -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `assign_guard` | Makes the NPC into a guard. If allied and at a camp, they will be assigned to that camp. |
+| `stop_guard` | Releases the NPC from their guard duty (also see `assign_guard`). Friendly NPCs will return to following. |
+| `start_camp` | The NPC will start a faction camp with the player. |
+| `recover_camp` | Makes the NPC the overseer of an existing camp that doesn't have an overseer. |
+| `remove_overseer` | Makes the NPC stop being an overseer, abandoning the faction camp. |
+| `wake_up` | Wakes up sleeping, but not sedated, NPCs. |
+| `reveal_stats` | Reveals the NPC's stats, based on the player's skill at assessing them. |
+| `end_conversation` | Ends the conversation and makes the NPC ignore you from now on. |
+| `insult_combat` | Ends the conversation and makes the NPC hostile, adds a message that character starts a fight with the NPC. |
+| `hostile` | Makes the NPC hostile and ends the conversation. |
+| `flee` | Makes the NPC flee from your character. |
+| `follow` | Makes the NPC follow your character, joining the "Your Followers" faction. |
+| `leave` | Makes the NPC leave the "Your Followers" faction and stop following your character. |
+| `follow_only` | Makes the NPC follow your character without changing factions. |
+| `stop_following` | Makes the NPC stop following your character without changing factions. |
+| `npc_thankful` | Makes the NPC positively inclined toward your character. |
+| `drop_weapon` | Makes the NPC drop their weapon. |
+| `stranger_neutral` | Changes the NPC's attitude to neutral. |
+| `start_mugging` | The NPC will approach your character and steal from your character, attacking if your character resists. |
+| `lead_to_safety` | The NPC will gain the LEAD attitude and give your character the mission of reaching safety. |
+| `start_training` | The NPC will train your character in a skill or martial art. |
+| `companion_mission: role_string` | The NPC will offer you a list of missions for your allied NPCs, depending on the NPC's role. |
+| `basecamp_mission` | The NPC will offer you a list of missions for your allied NPCs, depending on the local basecamp. |
+| `bionic_install` | The NPC installs a bionic from your character's inventory onto your character, using very high skill, and charging you according to the operation's difficulty. |
+| `bionic_remove` | The NPC removes a bionic from your character, using very high skill, and charging you according to the operation's difficulty. |
+| `npc_class_change: class_string` | Change the NPC's faction to `class_string`. |
+| `npc_faction_change: faction_string` | Change the NPC's faction membership to `faction_string`. |
+| `u_faction_rep: rep_num` | Increases your reputation with the NPC's current faction, or decreases it if `rep_num` is negative. |
+| `toggle_npc_rule: rule_string` | Toggles the value of a boolean NPC follower AI rule such as `"use_silent"` or `"allow_bash"` |
+| `set_npc_rule: rule_string` | Sets the value of a boolean NPC follower AI rule such as `"use_silent"` or `"allow_bash"` |
+| `clear_npc_rule: rule_string` | Clears the value of a boolean NPC follower AI rule such as `"use_silent"` or `"allow_bash"` |
+| `set_npc_engagement_rule: rule_string` | Sets the NPC follower AI rule for engagement distance to the value of `rule_string`. |
+| `set_npc_aim_rule: rule_string` | Sets the NPC follower AI rule for aiming speed to the value of `rule_string`. |
+| `npc_die` | The NPC will die at the end of the conversation. |
#### Map Updates
-`mapgen_update: mapgen_update_id_string`
`mapgen_update:` *list of `mapgen_update_id_string`s*, (optional `assign_mission_target` parameters) | With no other parameters, updates the overmap tile at the player's current location with the changes described in `mapgen_update_id` (or for each `mapgen_update_id` in the list). The `assign_mission_target` parameters can be used to change the location of the overmap tile that gets updated. See [the missions docs](MISSIONS_JSON.md) for `assign_mission_target` parameters and [the mapgen docs](MAPGEN.md) for `mapgen_update`.
+
+`mapgen_update: mapgen_update_id_string`
`mapgen_update:` _list of `mapgen_update_id_string`s_,
+(optional `assign_mission_target` parameters) | With no other parameters, updates the overmap tile
+at the player's current location with the changes described in `mapgen_update_id` (or for each
+`mapgen_update_id` in the list). The `assign_mission_target` parameters can be used to change the
+location of the overmap tile that gets updated. See [the missions docs](MISSIONS_JSON.md) for
+`assign_mission_target` parameters and [the mapgen docs](MAPGEN.md) for `mapgen_update`.
#### Deprecated
-Effect | Description
----|---
-`deny_follow`
`deny_lead`
`deny_train`
`deny_personal_info` | Sets the appropriate effect on the NPC for a few hours.
These are *deprecated* in favor of the more flexible `npc_add_effect` described above.
+| Effect | Description |
+| -------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `deny_follow`
`deny_lead`
`deny_train`
`deny_personal_info` | Sets the appropriate effect on the NPC for a few hours.
These are _deprecated_ in favor of the more flexible `npc_add_effect` described above. |
#### Sample effects
+
```json
{ "topic": "TALK_EVAC_GUARD3_HOSTILE", "effect": [ { "u_faction_rep": -15 }, { "npc_change_faction": "hells_raiders" } ] }
{ "text": "Let's trade then.", "effect": "start_trade", "topic": "TALK_EVAC_MERCHANT" },
@@ -512,122 +650,138 @@ Effect | Description
```
---
+
### opinion changes
+
As a special effect, an NPC's opinion of your character can change. Use the following:
#### opinion: { }
-trust, value, fear, and anger are optional keywords inside the opinion object. Each keyword must be followed by a numeric value. The NPC's opinion is modified by the value.
+
+trust, value, fear, and anger are optional keywords inside the opinion object. Each keyword must be
+followed by a numeric value. The NPC's opinion is modified by the value.
#### Sample opinions
+
```json
{ "effect": "follow", "opinion": { "trust": 1, "value": 1 }, "topic": "TALK_DONE" }
{ "topic": "TALK_DENY_FOLLOW", "effect": "deny_follow", "opinion": { "fear": -1, "value": -1, "anger": 1 } }
```
#### mission_opinion: { }
-trust, value, fear, and anger are optional keywords inside the `mission_opinion` object. Each keyword must be followed by a numeric value. The NPC's opinion is modified by the value.
+
+trust, value, fear, and anger are optional keywords inside the `mission_opinion` object. Each
+keyword must be followed by a numeric value. The NPC's opinion is modified by the value.
---
## Dialogue conditions
-Conditions can be a simple string with no other values, a key and an int, a key and a string, a key and an array, or a key and an object. Arrays and objects can nest with each other and can contain any other condition.
+
+Conditions can be a simple string with no other values, a key and an int, a key and a string, a key
+and an array, or a key and an object. Arrays and objects can nest with each other and can contain
+any other condition.
The following keys and simple strings are available:
#### Boolean logic
-Condition | Type | Description
---- | --- | ---
-`"and"` | array | `true` if every condition in the array is true. Can be used to create complex condition tests, like `"[INTELLIGENCE 10+][PERCEPTION 12+] Your jacket is torn. Did you leave that scrap of fabric behind?"`
-`"or"` | array | `true` if any condition in the array is true. Can be used to create complex condition tests, like `"[STRENGTH 9+] or [DEXTERITY 9+] I'm sure I can handle one zombie."`
-`"not"` | object | `true` if the condition in the object or string is false. Can be used to create complex conditions test by negating other conditions, for text such as
`"[INTELLIGENCE 7-] Hitting the reactor with a hammer should shut it off safely, right?"`
+| Condition | Type | Description |
+| --------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `"and"` | array | `true` if every condition in the array is true. Can be used to create complex condition tests, like `"[INTELLIGENCE 10+][PERCEPTION 12+] Your jacket is torn. Did you leave that scrap of fabric behind?"` |
+| `"or"` | array | `true` if any condition in the array is true. Can be used to create complex condition tests, like `"[STRENGTH 9+] or [DEXTERITY 9+] I'm sure I can handle one zombie."` |
+| `"not"` | object | `true` if the condition in the object or string is false. Can be used to create complex conditions test by negating other conditions, for text such as
`"[INTELLIGENCE 7-] Hitting the reactor with a hammer should shut it off safely, right?"` |
#### Player or NPC conditions
-These conditions can be tested for the player using the `"u_"` form, and for the NPC using the `"npc_"` form.
-
-Condition | Type | Description
---- | --- | ---
-`"u_male"`
`"npc_male"` | simple string | `true` if the player character or NPC is male.
-`"u_female"`
`"npc_female"` | simple string | `true` if the player character or NPC is female.
-`"u_at_om_location"`
`"npc_at_om_location"` | string | `true` if the player character or NPC is standing on an overmap tile with `u_at_om_location`'s id. The special string `"FACTION_CAMP_ANY"` changes it to return true if the player or NPC is standing on a faction camp overmap tile. The special string `"FACTION_CAMP_START"` changes it to return true if the overmap tile that the player or NPC is standing on can be turned into a faction camp overmap tile.
-`"u_has_trait"`
`"npc_has_trait"` | string | `true` if the player character or NPC has a specific trait. Simpler versions of `u_has_any_trait` and `npc_has_any_trait` that only checks for one trait.
-`"u_has_trait_flag"`
`"npc_has_trait_flag"` | string | `true` if the player character or NPC has any traits with the specific trait flag. More robust versions of `u_has_any_trait` and `npc_has_any_trait`. The special trait flag `"MUTATION_THRESHOLD"` checks to see if the player or NPC has crossed a mutation threshold.
-`"u_has_any_trait"`
`"npc_has_any_trait"` | array | `true` if the player character or NPC has any trait or mutation in the array. Used to check multiple specific traits.
-`"u_has_var"`, `"npc_has_var"` | string | `"type": type_str`, `"context": context_str`, and `"value": value_str` are required fields in the same dictionary as `"u_has_var"` or `"npc_has_var"`.
`true` is the player character or NPC has a variable set by `"u_add_var"` or `"npc_add_var"` with the string, `type_str`, `context_str`, and `value_str`.
-`"u_compare_var"`, `"npc_compare_var"` | dictionary | `"type": type_str`, `"context": context_str`, `"op": op_str`, `"value": value_num` are required fields, referencing a var as in `"u_add_var"` or `"npc_add_var"`.
`true` if the player character or NPC has a stored variable that is true for the provided operator `op_str` (one of `==`, `!=`, `<`, `>`, `<=`, `>=`) and value.
-`"u_has_strength"`
`"npc_has_strength"` | int | `true` if the player character's or NPC's strength is at least the value of `u_has_strength` or `npc_has_strength`.
-`"u_has_dexterity"`
`"npc_has_dexterity"` | int | `true` if the player character's or NPC's dexterity is at least the value of `u_has_dexterity` or `npc_has_dexterity`.
-`"u_has_intelligence"`
`"npc_has_intelligence"` | int | `true` if the player character's or NPC's intelligence is at least the value of `u_has_intelligence` or `npc_has_intelligence`.
-`"u_has_perception"`
`"npc_has_perception"` | int | `true` if the player character's or NPC's perception is at least the value of `u_has_perception` or `npc_has_perception`.
-`"u_has_item"`
`"npc_has_item"` | string | `true` if the player character or NPC has something with `u_has_item`'s or `npc_has_item`'s `item_id` in their inventory.
-`"u_has_items"`
`"npc_has_item"` | dictionary | `u_has_items` or `npc_has_items` must be a dictionary with an `item` string and a `count` int.
`true` if the player character or NPC has at least `count` charges or counts of `item` in their inventory.
-`"u_has_item_category"`
`"npc_has_item_category"` | string | `"count": item_count` is an optional field that must be in the same dictionary and defaults to 1 if not specified. `true` if the player or NPC has `item_count` items with the same category as `u_has_item_category` or `npc_has_item_category`.
-`"u_has_bionics"`
`"npc_has_bionics"` | string | `true` if the player or NPC has an installed bionic with an `bionic_id` matching `"u_has_bionics"` or `"npc_has_bionics"`. The special string "ANY" returns true if the player or NPC has any installed bionics.
-`"u_has_effect"`
`"npc_has_effect"` | string | `true` if the player character or NPC is under the effect with `u_has_effect` or `npc_has_effect`'s `effect_id`.
-`"u_can_stow_weapon"`
`"npc_can_stow_weapon"` | simple string | `true` if the player character or NPC is wielding a weapon and has enough space to put it away.
-`"u_has_weapon"`
`"npc_has_weapon"` | simple string | `true` if the player character or NPC is wielding a weapon.
-`"u_driving"`
`"npc_driving"` | simple string | `true` if the player character or NPC is operating a vehicle. Note NPCs cannot currently operate vehicles.
-`"u_has_skill"`
`"npc_has_skill"` | dictionary | `u_has_skill` or `npc_has_skill` must be a dictionary with a `skill` string and a `level` int.
`true` if the player character or NPC has at least the value of `level` in `skill`.
-`"u_know_recipe"` | string | `true` if the player character knows the recipe specified in `u_know_recipe`. It only counts as known if it is actually memorized--holding a book with the recipe in it will not count.
+
+These conditions can be tested for the player using the `"u_"` form, and for the NPC using the
+`"npc_"` form.
+
+| Condition | Type | Description |
+| ------------------------------------------------------ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `"u_male"`
`"npc_male"` | simple string | `true` if the player character or NPC is male. |
+| `"u_female"`
`"npc_female"` | simple string | `true` if the player character or NPC is female. |
+| `"u_at_om_location"`
`"npc_at_om_location"` | string | `true` if the player character or NPC is standing on an overmap tile with `u_at_om_location`'s id. The special string `"FACTION_CAMP_ANY"` changes it to return true if the player or NPC is standing on a faction camp overmap tile. The special string `"FACTION_CAMP_START"` changes it to return true if the overmap tile that the player or NPC is standing on can be turned into a faction camp overmap tile. |
+| `"u_has_trait"`
`"npc_has_trait"` | string | `true` if the player character or NPC has a specific trait. Simpler versions of `u_has_any_trait` and `npc_has_any_trait` that only checks for one trait. |
+| `"u_has_trait_flag"`
`"npc_has_trait_flag"` | string | `true` if the player character or NPC has any traits with the specific trait flag. More robust versions of `u_has_any_trait` and `npc_has_any_trait`. The special trait flag `"MUTATION_THRESHOLD"` checks to see if the player or NPC has crossed a mutation threshold. |
+| `"u_has_any_trait"`
`"npc_has_any_trait"` | array | `true` if the player character or NPC has any trait or mutation in the array. Used to check multiple specific traits. |
+| `"u_has_var"`, `"npc_has_var"` | string | `"type": type_str`, `"context": context_str`, and `"value": value_str` are required fields in the same dictionary as `"u_has_var"` or `"npc_has_var"`.
`true` is the player character or NPC has a variable set by `"u_add_var"` or `"npc_add_var"` with the string, `type_str`, `context_str`, and `value_str`. |
+| `"u_compare_var"`, `"npc_compare_var"` | dictionary | `"type": type_str`, `"context": context_str`, `"op": op_str`, `"value": value_num` are required fields, referencing a var as in `"u_add_var"` or `"npc_add_var"`.
`true` if the player character or NPC has a stored variable that is true for the provided operator `op_str` (one of `==`, `!=`, `<`, `>`, `<=`, `>=`) and value. |
+| `"u_has_strength"`
`"npc_has_strength"` | int | `true` if the player character's or NPC's strength is at least the value of `u_has_strength` or `npc_has_strength`. |
+| `"u_has_dexterity"`
`"npc_has_dexterity"` | int | `true` if the player character's or NPC's dexterity is at least the value of `u_has_dexterity` or `npc_has_dexterity`. |
+| `"u_has_intelligence"`
`"npc_has_intelligence"` | int | `true` if the player character's or NPC's intelligence is at least the value of `u_has_intelligence` or `npc_has_intelligence`. |
+| `"u_has_perception"`
`"npc_has_perception"` | int | `true` if the player character's or NPC's perception is at least the value of `u_has_perception` or `npc_has_perception`. |
+| `"u_has_item"`
`"npc_has_item"` | string | `true` if the player character or NPC has something with `u_has_item`'s or `npc_has_item`'s `item_id` in their inventory. |
+| `"u_has_items"`
`"npc_has_item"` | dictionary | `u_has_items` or `npc_has_items` must be a dictionary with an `item` string and a `count` int.
`true` if the player character or NPC has at least `count` charges or counts of `item` in their inventory. |
+| `"u_has_item_category"`
`"npc_has_item_category"` | string | `"count": item_count` is an optional field that must be in the same dictionary and defaults to 1 if not specified. `true` if the player or NPC has `item_count` items with the same category as `u_has_item_category` or `npc_has_item_category`. |
+| `"u_has_bionics"`
`"npc_has_bionics"` | string | `true` if the player or NPC has an installed bionic with an `bionic_id` matching `"u_has_bionics"` or `"npc_has_bionics"`. The special string "ANY" returns true if the player or NPC has any installed bionics. |
+| `"u_has_effect"`
`"npc_has_effect"` | string | `true` if the player character or NPC is under the effect with `u_has_effect` or `npc_has_effect`'s `effect_id`. |
+| `"u_can_stow_weapon"`
`"npc_can_stow_weapon"` | simple string | `true` if the player character or NPC is wielding a weapon and has enough space to put it away. |
+| `"u_has_weapon"`
`"npc_has_weapon"` | simple string | `true` if the player character or NPC is wielding a weapon. |
+| `"u_driving"`
`"npc_driving"` | simple string | `true` if the player character or NPC is operating a vehicle. Note NPCs cannot currently operate vehicles. |
+| `"u_has_skill"`
`"npc_has_skill"` | dictionary | `u_has_skill` or `npc_has_skill` must be a dictionary with a `skill` string and a `level` int.
`true` if the player character or NPC has at least the value of `level` in `skill`. |
+| `"u_know_recipe"` | string | `true` if the player character knows the recipe specified in `u_know_recipe`. It only counts as known if it is actually memorized--holding a book with the recipe in it will not count. |
#### Player Only conditions
`"u_has_mission"` | string | `true` if the mission is assigned to the player character.
-`"u_has_ecash"` | int | `true` if the player character has at least `u_has_ecash` ecash available in his pre-cataclysm bank account. NPCs should **not** deal in e-cash, only personal debts and items (including faction currency).
-`"u_are_owed"` | int | `true` if the NPC's op_of_u.owed is at least `u_are_owed`. Can be used to check if the player can buy something from the NPC without needing to barter anything.
-`"u_has_camp"` | simple string | `true` is the player has one or more active base camps.
+`"u_has_ecash"` | int | `true` if the player character has at least `u_has_ecash` ecash available in
+his pre-cataclysm bank account. NPCs should **not** deal in e-cash, only personal debts and items
+(including faction currency). `"u_are_owed"` | int | `true` if the NPC's op_of_u.owed is at least
+`u_are_owed`. Can be used to check if the player can buy something from the NPC without needing to
+barter anything. `"u_has_camp"` | simple string | `true` is the player has one or more active base
+camps.
#### Player and NPC interaction conditions
-Condition | Type | Description
---- | --- | ---
-`"at_safe_space"` | simple string | `true` if the NPC's current overmap location passes the `is_safe()` test.
-`"has_assigned_mission"` | simple string | `true` if the player character has exactly one mission from the NPC. Can be used for texts like "About that job...".
-`"has_many_assigned_missions"` | simple string | `true` if the player character has several mission from the NPC (more than one). Can be used for texts like "About one of those jobs..." and to switch to the `"TALK_MISSION_LIST_ASSIGNED"` topic.
-`"has_no_available_mission"` | simple string | `true` if the NPC has no jobs available for the player character.
-`"has_available_mission"` | simple string | `true` if the NPC has one job available for the player character.
-`"has_many_available_missions"` | simple string | `true` if the NPC has several jobs available for the player character.
-`"mission_goal"` | string | `true` if the NPC's current mission has the same goal as `mission_goal`.
-`"mission_complete"` | simple string | `true` if the player has completed the NPC's current mission.
-`"mission_incomplete"` | simple string | `true` if the player hasn't completed the NPC's current mission.
-`"mission_has_generic_rewards"` | simple string | `true` if the NPC's current mission is flagged as having generic rewards.
-`"npc_service"` | simple string | `true` if the NPC does not have the `"currently_busy"` effect. Useful to check if the player character can hire an NPC to perform a task that would take time to complete. Functionally, this is identical to `not": { "npc_has_effect": "currently_busy" }`. Same as `npc_available`.
-`"npc_allies"` | int | `true` if the player character has at least `npc_allies` number of NPC allies.
-`"npc_following"` | simple string | `true` if the NPC is following the player character.
-`"is_by_radio"` | simple string | `true` if the player is talking to the NPC over a radio.
+| Condition | Type | Description |
+| ------------------------------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `"at_safe_space"` | simple string | `true` if the NPC's current overmap location passes the `is_safe()` test. |
+| `"has_assigned_mission"` | simple string | `true` if the player character has exactly one mission from the NPC. Can be used for texts like "About that job...". |
+| `"has_many_assigned_missions"` | simple string | `true` if the player character has several mission from the NPC (more than one). Can be used for texts like "About one of those jobs..." and to switch to the `"TALK_MISSION_LIST_ASSIGNED"` topic. |
+| `"has_no_available_mission"` | simple string | `true` if the NPC has no jobs available for the player character. |
+| `"has_available_mission"` | simple string | `true` if the NPC has one job available for the player character. |
+| `"has_many_available_missions"` | simple string | `true` if the NPC has several jobs available for the player character. |
+| `"mission_goal"` | string | `true` if the NPC's current mission has the same goal as `mission_goal`. |
+| `"mission_complete"` | simple string | `true` if the player has completed the NPC's current mission. |
+| `"mission_incomplete"` | simple string | `true` if the player hasn't completed the NPC's current mission. |
+| `"mission_has_generic_rewards"` | simple string | `true` if the NPC's current mission is flagged as having generic rewards. |
+| `"npc_service"` | simple string | `true` if the NPC does not have the `"currently_busy"` effect. Useful to check if the player character can hire an NPC to perform a task that would take time to complete. Functionally, this is identical to `not": { "npc_has_effect": "currently_busy" }`. Same as `npc_available`. |
+| `"npc_allies"` | int | `true` if the player character has at least `npc_allies` number of NPC allies. |
+| `"npc_following"` | simple string | `true` if the NPC is following the player character. |
+| `"is_by_radio"` | simple string | `true` if the player is talking to the NPC over a radio. |
#### NPC only conditions
-Condition | Type | Description
---- | --- | ---
-`"npc_available"` | simple string | `true` if the NPC does not have effect `"currently_busy"`.
-`"npc_following"` | simple string | `true` if the NPC is following the player character.
-`"npc_friend"` | simple string | `true` if the NPC is friendly to the player character.
-`"npc_hostile"` | simple string | `true` if the NPC is an enemy of the player character.
-`"npc_train_skills"` | simple string | `true` if the NPC has one or more skills with more levels than the player.
-`"npc_train_styles"` | simple string | `true` if the NPC knows one or more martial arts styles that the player does not know.
-`"npc_has_class"` | array | `true` if the NPC is a member of an NPC class.
-`"npc_role_nearby"` | string | `true` if there is an NPC with the same companion mission role as `npc_role_nearby` within 100 tiles.
-`"has_reason"` | simple string | `true` if a previous effect set a reason for why an effect could not be completed.
+| Condition | Type | Description |
+| -------------------- | ------------- | ----------------------------------------------------------------------------------------------------- |
+| `"npc_available"` | simple string | `true` if the NPC does not have effect `"currently_busy"`. |
+| `"npc_following"` | simple string | `true` if the NPC is following the player character. |
+| `"npc_friend"` | simple string | `true` if the NPC is friendly to the player character. |
+| `"npc_hostile"` | simple string | `true` if the NPC is an enemy of the player character. |
+| `"npc_train_skills"` | simple string | `true` if the NPC has one or more skills with more levels than the player. |
+| `"npc_train_styles"` | simple string | `true` if the NPC knows one or more martial arts styles that the player does not know. |
+| `"npc_has_class"` | array | `true` if the NPC is a member of an NPC class. |
+| `"npc_role_nearby"` | string | `true` if there is an NPC with the same companion mission role as `npc_role_nearby` within 100 tiles. |
+| `"has_reason"` | simple string | `true` if a previous effect set a reason for why an effect could not be completed. |
#### NPC Follower AI rules
-Condition | Type | Description
---- | --- | ---
-`"npc_aim_rule"` | string | `true` if the NPC follower AI rule for aiming matches the string.
-`"npc_engagement_rule"` | string | `true` if the NPC follower AI rule for engagement matches the string.
-`"npc_rule"` | string | `true` if the NPC follower AI rule for that matches string is set.
-#### Environment
+| Condition | Type | Description |
+| ----------------------- | ------ | --------------------------------------------------------------------- |
+| `"npc_aim_rule"` | string | `true` if the NPC follower AI rule for aiming matches the string. |
+| `"npc_engagement_rule"` | string | `true` if the NPC follower AI rule for engagement matches the string. |
+| `"npc_rule"` | string | `true` if the NPC follower AI rule for that matches string is set. |
-Condition | Type | Description
---- | --- | ---
-`"days_since_cataclysm"` | int | `true` if at least `days_since_cataclysm` days have passed since the Cataclysm.
-`"is_season"` | string | `true` if the current season matches `is_season`, which must be one of "`spring"`, `"summer"`, `"autumn"`, or `"winter"`.
-`"is_day"` | simple string | `true` if it is currently daytime.
-`"is_outside"` | simple string | `true` if the NPC is on a tile without a roof.
+#### Environment
+| Condition | Type | Description |
+| ------------------------ | ------------- | ------------------------------------------------------------------------------------------------------------------------- |
+| `"days_since_cataclysm"` | int | `true` if at least `days_since_cataclysm` days have passed since the Cataclysm. |
+| `"is_season"` | string | `true` if the current season matches `is_season`, which must be one of "`spring"`, `"summer"`, `"autumn"`, or `"winter"`. |
+| `"is_day"` | simple string | `true` if it is currently daytime. |
+| `"is_outside"` | simple string | `true` if the NPC is on a tile without a roof. |
#### Sample responses with conditions and effects
+
```json
{
"text": "Understood. I'll get those antibiotics.",
diff --git a/doc/OVERMAP.md b/doc/OVERMAP.md
index fb436d74f9ee..2d05939bb3db 100644
--- a/doc/OVERMAP.md
+++ b/doc/OVERMAP.md
@@ -34,16 +34,16 @@ player directly interacts with, providing the necessary context for local map ge
By example, the overmap tells the game:
-* where the cities are
-* where the roads are
-* where the buildings are
-* what types the buildings are
+- where the cities are
+- where the roads are
+- where the buildings are
+- what types the buildings are
but it does not tell the game:
-* what the actual road terrain looks like
-* what the actual building layout looks like
-* what items are in the building
+- what the actual road terrain looks like
+- what the actual building layout looks like
+- what items are in the building
It can sometimes be useful to think of the overmap as the outline for the game world which will then
be filled in as the player explores. The rest of this document is a discussion of how we can create
@@ -51,14 +51,14 @@ that outline.
## Terminology and Types
-First we need to briefly discuss some of the data types used by the
-overmap.
+First we need to briefly discuss some of the data types used by the overmap.
### overmap_terrain
-The fundamental unit of the overmap is the **overmap_terrain**, which defines the id, name, symbol, color
-(and more, but we'll get to that) used to represent a single location on the overmap. The overmap is 180
-overmap terrains wide, 180 overmap terrains tall, and 21 overmap terrains deep (these are the z-levels).
+The fundamental unit of the overmap is the **overmap_terrain**, which defines the id, name, symbol,
+color (and more, but we'll get to that) used to represent a single location on the overmap. The
+overmap is 180 overmap terrains wide, 180 overmap terrains tall, and 21 overmap terrains deep (these
+are the z-levels).
In this example snippet of an overmap, each character corresponds one entry in the overmap which
references a given overmap terrain:
@@ -76,11 +76,11 @@ So for example, the `F` is a forest which has a definition like this:
```json
{
- "type": "overmap_terrain",
- "id": "forest",
- "name": "forest",
- "sym": "F",
- "color": "green"
+ "type": "overmap_terrain",
+ "id": "forest",
+ "name": "forest",
+ "sym": "F",
+ "color": "green"
}
```
@@ -88,53 +88,55 @@ and the `^` is a house which has a definition like this:
```json
{
- "type": "overmap_terrain",
- "id": "house",
- "name": "house",
- "sym": "^",
- "color": "light_green"
+ "type": "overmap_terrain",
+ "id": "house",
+ "name": "house",
+ "sym": "^",
+ "color": "light_green"
}
```
-It's important to note that a single overmap terrain definition is referenced for every usage of that
-overmap terrain in the overmap--if we were to change the color of our forest from `green` to `red`, every
-forest in the overmap would be red.
+It's important to note that a single overmap terrain definition is referenced for every usage of
+that overmap terrain in the overmap--if we were to change the color of our forest from `green` to
+`red`, every forest in the overmap would be red.
### overmap_special / city_building
-The next important concept for the overmap is that of the **overmap_special** and
-**city_building**. These types, which are similar in structure, are the mechanism by which multiple
-overmap terrains can be collected together into one conceptual entity for placement on the overmap.
-If you wanted to have a sprawling mansion, a two story house, a large pond, or a secret lair placed
-under an unassuming bookstore, you would need to use an **overmap_special** or a **city_building**.
+The next important concept for the overmap is that of the **overmap_special** and **city_building**.
+These types, which are similar in structure, are the mechanism by which multiple overmap terrains
+can be collected together into one conceptual entity for placement on the overmap. If you wanted to
+have a sprawling mansion, a two story house, a large pond, or a secret lair placed under an
+unassuming bookstore, you would need to use an **overmap_special** or a **city_building**.
-These types are effectively a list of the overmap terrains that compose them, the placement of
-those overmap terrains relative to each other, and some data used to drive the placement of the
-overmap special / city building (e.g. how far from a city, should be it connected to a road, can it
-be placed in a forest/field/river, etc).
+These types are effectively a list of the overmap terrains that compose them, the placement of those
+overmap terrains relative to each other, and some data used to drive the placement of the overmap
+special / city building (e.g. how far from a city, should be it connected to a road, can it be
+placed in a forest/field/river, etc).
### overmap_connection
-Speaking of roads, the concept of linear features like roads, sewers, subways, railroads, and
-forest trails are managed through a combination of overmap terrain attributes and another type
-called an **overmap_connection**.
+Speaking of roads, the concept of linear features like roads, sewers, subways, railroads, and forest
+trails are managed through a combination of overmap terrain attributes and another type called an
+**overmap_connection**.
An overmap connection effectively defines the types of overmap terrain on which a given connection
can be made, the "cost" to make that connection, and the type of terrain to be placed when making
the connection. This, for example, is what allows us to say that:
-* a road may be placed on fields, forests, swamps and rivers
-* fields are preferred over forests, which are preferred over swamps, which are preferred over rivers
-* a road crossing a river will be a bridge
+- a road may be placed on fields, forests, swamps and rivers
+- fields are preferred over forests, which are preferred over swamps, which are preferred over
+ rivers
+- a road crossing a river will be a bridge
-The **overmap_connection** data will then be used to create a linear road feature connecting two points,
-applying the previously defined rules.
+The **overmap_connection** data will then be used to create a linear road feature connecting two
+points, applying the previously defined rules.
### overmap_location
-We've previously mentioned defining valid overmap terrain types for the placement of overmap specials,
-city buildings, and overmap connections, but one thing to clarify is these actually leverage another
-type called an **overmap_location** rather than referencing **overmap_terrain** values directly.
+We've previously mentioned defining valid overmap terrain types for the placement of overmap
+specials, city buildings, and overmap connections, but one thing to clarify is these actually
+leverage another type called an **overmap_location** rather than referencing **overmap_terrain**
+values directly.
Simply put, an **overmap_location** is just a named collection of **overmap_terrain** values.
@@ -179,69 +181,69 @@ update these definitions as follows:
### Rotation
-If an overmap terrain can be rotated (i.e. it does not have the `NO_ROTATE` flag), then when
-the game loads the definition from JSON, it will create the rotated definitions automatically,
-suffixing the `id` defined here with `_north`, `_east`, `_south` or `_west`. This will be
-particularly relevant if the overmap terrains are used in **overmap_special** or **city_building**
-definitions, because if those are allowed to rotate, it's desirable to specify a particular
-rotation for the referenced overmap terrains (e.g. the `_north` version for all).
+If an overmap terrain can be rotated (i.e. it does not have the `NO_ROTATE` flag), then when the
+game loads the definition from JSON, it will create the rotated definitions automatically, suffixing
+the `id` defined here with `_north`, `_east`, `_south` or `_west`. This will be particularly
+relevant if the overmap terrains are used in **overmap_special** or **city_building** definitions,
+because if those are allowed to rotate, it's desirable to specify a particular rotation for the
+referenced overmap terrains (e.g. the `_north` version for all).
### Fields
-| Identifier | Description |
-| ----------------- | ------------------------------------------------------------------------------------------------ |
-| `type` | Must be "overmap_terrain". |
-| `id` | Unique id. |
-| `name` | Name for the location shown in game. |
-| `sym` | Symbol used when drawing the location, like `"F"` (or you may use an ASCII value like `70`). |
-| `color` | Color to draw the symbol in. See [COLOR.md](COLOR.md). |
-| `looks_like` | Id of another overmap terrain to be used for the graphical tile, if this doesn't have one. |
-| `connect_group` | Specify that this overmap terrain might be graphically connected to its neighbours, should a tileset wish to. It will connect to any other `overmap_terrain` with the same `connect_group`. |
-| `see_cost` | Affects player vision on overmap. Higher values obstruct vision more. |
-| `travel_cost` | Affects pathfinding cost. Higher values are harder to travel through (reference: Forest = 10 ) |
-| `extras` | Reference to a named `map_extras` in region_settings, defines which map extras can be applied. |
-| `mondensity` | Summed with values for adjacent overmap terrains to influence density of monsters spawned here. |
-| `spawns` | Spawns added once at mapgen. Monster group, % chance, population range (min/max). |
-| `flags` | See `Overmap terrains` in [JSON_FLAGS.md](JSON_FLAGS.md). |
-| `mapgen` | Specify a C++ mapgen function. Don't do this--use JSON. |
-| `mapgen_straight` | Specify a C++ mapgen function for a LINEAR feature variation. |
-| `mapgen_curved` | Specify a C++ mapgen function for a LINEAR feature variation. |
-| `mapgen_end` | Specify a C++ mapgen function for a LINEAR feature variation. |
-| `mapgen_tee` | Specify a C++ mapgen function for a LINEAR feature variation. |
-| `mapgen_four_way` | Specify a C++ mapgen function for a LINEAR feature variation. |
+| Identifier | Description |
+| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `type` | Must be "overmap_terrain". |
+| `id` | Unique id. |
+| `name` | Name for the location shown in game. |
+| `sym` | Symbol used when drawing the location, like `"F"` (or you may use an ASCII value like `70`). |
+| `color` | Color to draw the symbol in. See [COLOR.md](COLOR.md). |
+| `looks_like` | Id of another overmap terrain to be used for the graphical tile, if this doesn't have one. |
+| `connect_group` | Specify that this overmap terrain might be graphically connected to its neighbours, should a tileset wish to. It will connect to any other `overmap_terrain` with the same `connect_group`. |
+| `see_cost` | Affects player vision on overmap. Higher values obstruct vision more. |
+| `travel_cost` | Affects pathfinding cost. Higher values are harder to travel through (reference: Forest = 10 ) |
+| `extras` | Reference to a named `map_extras` in region_settings, defines which map extras can be applied. |
+| `mondensity` | Summed with values for adjacent overmap terrains to influence density of monsters spawned here. |
+| `spawns` | Spawns added once at mapgen. Monster group, % chance, population range (min/max). |
+| `flags` | See `Overmap terrains` in [JSON_FLAGS.md](JSON_FLAGS.md). |
+| `mapgen` | Specify a C++ mapgen function. Don't do this--use JSON. |
+| `mapgen_straight` | Specify a C++ mapgen function for a LINEAR feature variation. |
+| `mapgen_curved` | Specify a C++ mapgen function for a LINEAR feature variation. |
+| `mapgen_end` | Specify a C++ mapgen function for a LINEAR feature variation. |
+| `mapgen_tee` | Specify a C++ mapgen function for a LINEAR feature variation. |
+| `mapgen_four_way` | Specify a C++ mapgen function for a LINEAR feature variation. |
### Example
-A real `overmap_terrain` wouldn't have all these defined at the same time, but in the interest of
-an exhaustive example...
+A real `overmap_terrain` wouldn't have all these defined at the same time, but in the interest of an
+exhaustive example...
```json
{
- "type": "overmap_terrain",
- "id": "field",
- "name": "field",
- "sym": ".",
- "color": "brown",
- "looks_like": "forest",
- "see_cost": 2,
- "extras": "field",
- "mondensity": 2,
- "spawns": { "group": "GROUP_FOREST", "population": [ 0, 1 ], "chance": 13 },
- "flags": [ "NO_ROTATE" ],
- "mapgen": [ { "method": "builtin", "name": "bridge" } ],
- "mapgen_straight": [ { "method": "builtin", "name": "road_straight" } ],
- "mapgen_curved": [ { "method": "builtin", "name": "road_curved" } ],
- "mapgen_end": [ { "method": "builtin", "name": "road_end" } ],
- "mapgen_tee": [ { "method": "builtin", "name": "road_tee" } ],
- "mapgen_four_way": [ { "method": "builtin", "name": "road_four_way" } ]
+ "type": "overmap_terrain",
+ "id": "field",
+ "name": "field",
+ "sym": ".",
+ "color": "brown",
+ "looks_like": "forest",
+ "see_cost": 2,
+ "extras": "field",
+ "mondensity": 2,
+ "spawns": { "group": "GROUP_FOREST", "population": [0, 1], "chance": 13 },
+ "flags": ["NO_ROTATE"],
+ "mapgen": [{ "method": "builtin", "name": "bridge" }],
+ "mapgen_straight": [{ "method": "builtin", "name": "road_straight" }],
+ "mapgen_curved": [{ "method": "builtin", "name": "road_curved" }],
+ "mapgen_end": [{ "method": "builtin", "name": "road_end" }],
+ "mapgen_tee": [{ "method": "builtin", "name": "road_tee" }],
+ "mapgen_four_way": [{ "method": "builtin", "name": "road_four_way" }]
}
```
## Overmap Special
An overmap special is an entity that is placed in the overmap after the city generation process has
-completed--they are the "non-city" counterpart to the **city_building** type. They commonly are
-made up of multiple overmap terrains (though not always), may have overmap connections (e.g. roads,
+completed--they are the "non-city" counterpart to the **city_building** type. They commonly are made
+up of multiple overmap terrains (though not always), may have overmap connections (e.g. roads,
sewers, subways), and have JSON-defined rules guiding their placement.
### Mandatory Overmap Specials
@@ -260,9 +262,9 @@ minimum should be 0.
In general, it is desirable to define your overmap special as allowing rotation--this will provide
variety in the game world and allow for more possible valid locations when attempting to place the
overmap special. A consequence of the relationship between rotating an overmap special and rotating
-the underlying overmap terrains that make up the special is that the overmap special should reference
-a specific rotated version of the associated overmap terrain--generally, this is the `_north` rotation
-as it corresponds to the way in which the JSON for mapgen is defined.
+the underlying overmap terrains that make up the special is that the overmap special should
+reference a specific rotated version of the associated overmap terrain--generally, this is the
+`_north` rotation as it corresponds to the way in which the JSON for mapgen is defined.
### Locations
@@ -276,7 +278,7 @@ level value and then only specify it for individual entries that differ.
### Fields
-| Identifier | Description |
+| Identifier | Description |
| --------------- | ----------------------------------------------------------------------------------------------------- |
| `type` | Must be "overmap_special". |
| `id` | Unique id. |
@@ -297,25 +299,25 @@ level value and then only specify it for individual entries that differ.
"type": "overmap_special",
"id": "campground",
"overmaps": [
- { "point": [ 0, 0, 0 ], "overmap": "campground_1a_north", "locations": [ "forest_edge" ] },
- { "point": [ 1, 0, 0 ], "overmap": "campground_1b_north" },
- { "point": [ 0, 1, 0 ], "overmap": "campground_2a_north" },
- { "point": [ 1, 1, 0 ], "overmap": "campground_2b_north" }
+ { "point": [0, 0, 0], "overmap": "campground_1a_north", "locations": ["forest_edge"] },
+ { "point": [1, 0, 0], "overmap": "campground_1b_north" },
+ { "point": [0, 1, 0], "overmap": "campground_2a_north" },
+ { "point": [1, 1, 0], "overmap": "campground_2b_north" }
],
- "connections": [ { "point": [ 1, -1, 0 ], "connection": "local_road", "from": [ 1, 0, 0 ] } ],
- "locations": [ "forest" ],
- "city_distance": [ 10, -1 ],
- "city_sizes": [ 3, 12 ],
- "occurrences": [ 0, 5 ],
- "flags": [ "CLASSIC" ],
- "rotate" : true
+ "connections": [{ "point": [1, -1, 0], "connection": "local_road", "from": [1, 0, 0] }],
+ "locations": ["forest"],
+ "city_distance": [10, -1],
+ "city_sizes": [3, 12],
+ "occurrences": [0, 5],
+ "flags": ["CLASSIC"],
+ "rotate": true
}
]
```
### Overmaps
-| Identifier | Description |
+| Identifier | Description |
| ----------- | -------------------------------------------------------------------------- |
| `point` | `[ x, y, z]` of the overmap terrain within the special. |
| `overmap` | Id of the `overmap_terrain` to place at the location. |
@@ -323,7 +325,7 @@ level value and then only specify it for individual entries that differ.
### Connections
-| Identifier | Description |
+| Identifier | Description |
| ------------ | -------------------------------------------------------------------------------------------------- |
| `point` | `[ x, y, z]` of the connection end point. Cannot overlap an overmap terrain entry for the special. |
| `connection` | Id of the `overmap_connection` to build. |
@@ -332,19 +334,19 @@ level value and then only specify it for individual entries that differ.
## City Building
A city building is an entity that is placed in the overmap during the city generation process--they
-are the "city" counterpart to the **overmap_special** type. The definition for a city building is a subset
-of that for an overmap special, and consequently will not be repeated in detail here.
+are the "city" counterpart to the **overmap_special** type. The definition for a city building is a
+subset of that for an overmap special, and consequently will not be repeated in detail here.
### Mandatory Overmap Specials / Region Settings
-City buildings are not subject to the same quantity limitations as overmap specials, and in fact
-the occurrences attribute does not apply at all. Instead, the placement of city buildings is driven
-by the frequency assigned to the city building within the `region_settings`. Consult
+City buildings are not subject to the same quantity limitations as overmap specials, and in fact the
+occurrences attribute does not apply at all. Instead, the placement of city buildings is driven by
+the frequency assigned to the city building within the `region_settings`. Consult
[REGION_SETTINGS.md](REGION_SETTINGS.md) for more details.
### Fields
-| Identifier | Description |
+| Identifier | Description |
| ----------- | -------------------------------------------------------------------------------- |
| `type` | Must be "city_building". |
| `id` | Unique id. |
@@ -360,20 +362,20 @@ by the frequency assigned to the city building within the `region_settings`. Con
{
"type": "city_building",
"id": "zoo",
- "locations": [ "land" ],
+ "locations": ["land"],
"overmaps": [
- { "point": [ 0, 0, 0 ], "overmap": "zoo_0_0_north" },
- { "point": [ 1, 0, 0 ], "overmap": "zoo_1_0_north" },
- { "point": [ 2, 0, 0 ], "overmap": "zoo_2_0_north" },
- { "point": [ 0, 1, 0 ], "overmap": "zoo_0_1_north" },
- { "point": [ 1, 1, 0 ], "overmap": "zoo_1_1_north" },
- { "point": [ 2, 1, 0 ], "overmap": "zoo_2_1_north" },
- { "point": [ 0, 2, 0 ], "overmap": "zoo_0_2_north" },
- { "point": [ 1, 2, 0 ], "overmap": "zoo_1_2_north" },
- { "point": [ 2, 2, 0 ], "overmap": "zoo_2_2_north" }
+ { "point": [0, 0, 0], "overmap": "zoo_0_0_north" },
+ { "point": [1, 0, 0], "overmap": "zoo_1_0_north" },
+ { "point": [2, 0, 0], "overmap": "zoo_2_0_north" },
+ { "point": [0, 1, 0], "overmap": "zoo_0_1_north" },
+ { "point": [1, 1, 0], "overmap": "zoo_1_1_north" },
+ { "point": [2, 1, 0], "overmap": "zoo_2_1_north" },
+ { "point": [0, 2, 0], "overmap": "zoo_0_2_north" },
+ { "point": [1, 2, 0], "overmap": "zoo_1_2_north" },
+ { "point": [2, 2, 0], "overmap": "zoo_2_2_north" }
],
- "flags": [ "CLASSIC" ],
- "rotate" : true
+ "flags": ["CLASSIC"],
+ "rotate": true
}
]
```
@@ -382,14 +384,13 @@ by the frequency assigned to the city building within the `region_settings`. Con
### Fields
-| Identifier | Description |
+| Identifier | Description |
| ----------------- | ----------------------------------------------------------------------------------------------- |
| `type` | Must be "overmap_connection". |
| `id` | Unique id. |
| `default_terrain` | Default `overmap_terrain` to use for undirected connections and existance checks. |
| `subtypes` | List of entries used to determine valid locations, terrain cost, and resulting overmap terrain. |
-
### Example
```json
@@ -398,25 +399,27 @@ by the frequency assigned to the city building within the `region_settings`. Con
"type": "overmap_connection",
"id": "local_road",
"subtypes": [
- { "terrain": "road", "locations": [ "field", "road" ] },
- { "terrain": "road", "locations": [ "forest_without_trail" ], "basic_cost": 20 },
- { "terrain": "road", "locations": [ "forest_trail" ], "basic_cost": 25 },
- { "terrain": "road", "locations": [ "swamp" ], "basic_cost": 40 },
- { "terrain": "road_nesw_manhole", "locations": [ ] },
- { "terrain": "bridge", "locations": [ "water" ], "basic_cost": 120 }
+ { "terrain": "road", "locations": ["field", "road"] },
+ { "terrain": "road", "locations": ["forest_without_trail"], "basic_cost": 20 },
+ { "terrain": "road", "locations": ["forest_trail"], "basic_cost": 25 },
+ { "terrain": "road", "locations": ["swamp"], "basic_cost": 40 },
+ { "terrain": "road_nesw_manhole", "locations": [] },
+ { "terrain": "bridge", "locations": ["water"], "basic_cost": 120 }
]
},
{
"type": "overmap_connection",
"id": "subway_tunnel",
- "subtypes": [ { "terrain": "subway", "locations": [ "subterranean_subway" ], "flags": [ "ORTHOGONAL" ] } ]
+ "subtypes": [
+ { "terrain": "subway", "locations": ["subterranean_subway"], "flags": ["ORTHOGONAL"] }
+ ]
}
]
```
### Subtypes
-| Identifier | Description |
+| Identifier | Description |
| ------------ | ---------------------------------------------------------------------------------------------------------- |
| `terrain` | `overmap_terrain` to be placed when the placement location matches `locations`. |
| `locations` | List of `overmap_location` that this subtype applies to. Can be empty; signifies `terrain` is valid as is. |
@@ -427,13 +430,12 @@ by the frequency assigned to the city building within the `region_settings`. Con
### Fields
-| Identifier | Description |
+| Identifier | Description |
| ---------- | ----------------------------------------------------------------------- |
| `type` | Must be "overmap_location". |
| `id` | Unique id. |
| `terrains` | List of `overmap_terrain` that can be considered part of this location. |
-
### Example
```json
@@ -441,8 +443,7 @@ by the frequency assigned to the city building within the `region_settings`. Con
{
"type": "overmap_location",
"id": "wilderness",
- "terrains": [ "forest", "forest_thick", "field", "forest_trail" ]
+ "terrains": ["forest", "forest_thick", "field", "forest_trail"]
}
]
-
```
diff --git a/doc/PLAYER_ACTIVITY.md b/doc/PLAYER_ACTIVITY.md
index a67f993a4be7..831fc79698ce 100644
--- a/doc/PLAYER_ACTIVITY.md
+++ b/doc/PLAYER_ACTIVITY.md
@@ -1,71 +1,63 @@
# Activities
-Activities are long term actions, that can be interrupted and (optionally)
-continued. This allows the avatar or an npc to react to events (like
-monsters appearing, getting hurt) while doing something that takes more
-than just one turn.
+Activities are long term actions, that can be interrupted and (optionally) continued. This allows
+the avatar or an npc to react to events (like monsters appearing, getting hurt) while doing
+something that takes more than just one turn.
## Adding new activities
-1. `player_activities.json` Define properties that apply to all instances
-of the activity in question.
+1. `player_activities.json` Define properties that apply to all instances of the activity in
+ question.
-2. `activity_actor.h` Create a new subclass of `activity_actor`
-(e.g. move_items_activity_actor) to store state and handle turns of the
-new activity.
+2. `activity_actor.h` Create a new subclass of `activity_actor` (e.g. move_items_activity_actor) to
+ store state and handle turns of the new activity.
-3. `activity_actor.cpp` Define the `start`, `do_turn`, and `finish`
-functions needed for the new actor as well as the required serialization
-functions. Don't forget to add the deserialization function of your new
-activity actor to the `deserialize_functions` map towards the bottom of
-`activity_actor.cpp`. Define `canceled` function if activity modifies
-some complex state that should be restored upon cancellation / interruption.
+3. `activity_actor.cpp` Define the `start`, `do_turn`, and `finish` functions needed for the new
+ actor as well as the required serialization functions. Don't forget to add the deserialization
+ function of your new activity actor to the `deserialize_functions` map towards the bottom of
+ `activity_actor.cpp`. Define `canceled` function if activity modifies some complex state that
+ should be restored upon cancellation / interruption.
-4. If this activity is resumable, `override`
-`activity_actor::can_resume_with_internal`
+4. If this activity is resumable, `override` `activity_actor::can_resume_with_internal`
-5. Construct your activity actor and then pass it to the constructor for
-`player_activity`. The newly constructed activity can then be assigned
-to the character and started using `Character::assign_activity`.
+5. Construct your activity actor and then pass it to the constructor for `player_activity`. The
+ newly constructed activity can then be assigned to the character and started using
+ `Character::assign_activity`.
## JSON Properties
-* verb: A descriptive term to describe the activity to be used in the
-query to stop the activity, and strings that describe it, for example:
-`"verb": "mining"` or
-`"verb": { "ctxt": "instrument", "str": "playing" }`.
+- verb: A descriptive term to describe the activity to be used in the query to stop the activity,
+ and strings that describe it, for example: `"verb": "mining"` or
+ `"verb": { "ctxt": "instrument", "str": "playing" }`.
-* suspendable (true): If true, the activity can be continued without
-starting from scratch again. This is only possible if `can_resume_with()`
-returns true.
+- suspendable (true): If true, the activity can be continued without starting from scratch again.
+ This is only possible if `can_resume_with()` returns true.
-* rooted (false): If true, then during the activity, recoil is reduced,
-and plant mutants sink their roots into the ground. Should be true if the
-activity lasts longer than a few minutes, and can always be accomplished
-without moving your feet.
+- rooted (false): If true, then during the activity, recoil is reduced, and plant mutants sink their
+ roots into the ground. Should be true if the activity lasts longer than a few minutes, and can
+ always be accomplished without moving your feet.
-* based_on: Can be 'time', 'speed', or 'neither'.
+- based_on: Can be 'time', 'speed', or 'neither'.
- * time: The amount that `player_activity::moves_left` is
- decremented by is independent from the character's speed.
+ - time: The amount that `player_activity::moves_left` is decremented by is independent from the
+ character's speed.
- * speed: `player_activity::moves_left` may be decremented faster
- or slower, depending on the character's speed.
+ - speed: `player_activity::moves_left` may be decremented faster or slower, depending on the
+ character's speed.
- * neither: `moves_left` will not be decremented. Thus you must
- define a do_turn function; otherwise the activity will never end!
+ - neither: `moves_left` will not be decremented. Thus you must define a do_turn function;
+ otherwise the activity will never end!
-* no_resume (false): Rather than resuming, you must always restart the
-activity from scratch.
+- no_resume (false): Rather than resuming, you must always restart the activity from scratch.
-* multi_activity(false): This activity will repeat until it cannot do
-any more work, used for NPC and avatar zone activities.
+- multi_activity(false): This activity will repeat until it cannot do any more work, used for NPC
+ and avatar zone activities.
-* refuel_fires( false ): If true, the character will automatically refuel
-fires during the long activity.
+- refuel_fires( false ): If true, the character will automatically refuel fires during the long
+ activity.
-* auto_needs( false ) : If true, the character will automatically eat and
-drink from specific auto_consume zones during long activities.
+- auto_needs( false ) : If true, the character will automatically eat and drink from specific
+ auto_consume zones during long activities.
## Termination
@@ -73,71 +65,61 @@ There are several ways an activity can be ended:
1. Call `player_activity::set_to_null()`
- This can be called if it finished early or something went wrong,
- such as corrupt data, disappearing items, etc. The activity will
- not be put into the backlog.
+ This can be called if it finished early or something went wrong, such as corrupt data,
+ disappearing items, etc. The activity will not be put into the backlog.
2. `moves_left` <= 0
- Once this condition is true, the finish function, if there is one,
- is called. The finish function should call `set_to_null()`. If
- there isn't a finish function, `set_to_null()` will be called
- for you (from activity_actor::do_turn).
+ Once this condition is true, the finish function, if there is one, is called. The finish function
+ should call `set_to_null()`. If there isn't a finish function, `set_to_null()` will be called for
+ you (from activity_actor::do_turn).
3. `Character::cancel_activity`
- Canceling an activity prevents the `activity_actor::finish`
- function from running, and the activity does therefore not yield a
- result. Instead, `activity_actor::canceled` is called. If activity is
- suspendable, a copy of it is written to `Character::backlog`.
+ Canceling an activity prevents the `activity_actor::finish` function from running, and the
+ activity does therefore not yield a result. Instead, `activity_actor::canceled` is called. If
+ activity is suspendable, a copy of it is written to `Character::backlog`.
## Notes
-While the character performs the activity,
-`activity_actor::do_turn` is called on each turn. Depending on the
-JSON properties, this will do some stuff. It will also call the do_turn
-function, and if `moves_left` is non-positive, the finish function.
+While the character performs the activity, `activity_actor::do_turn` is called on each turn.
+Depending on the JSON properties, this will do some stuff. It will also call the do_turn function,
+and if `moves_left` is non-positive, the finish function.
-Some activities (like playing music on a mp3 player) don't have an end
-result but instead do something each turn (playing music on the mp3
-player decreases its batteries and gives a morale bonus).
+Some activities (like playing music on a mp3 player) don't have an end result but instead do
+something each turn (playing music on the mp3 player decreases its batteries and gives a morale
+bonus).
-If the activity needs any information during its execution or when
-it's finished (like *where* to do something, *which* item to use to do
-something, ...), simply add data members to your activity actor as well
-as serialization functions for the data so that the activity can persist
-across save/load cycles.
+If the activity needs any information during its execution or when it's finished (like _where_ to do
+something, _which_ item to use to do something, ...), simply add data members to your activity actor
+as well as serialization functions for the data so that the activity can persist across save/load
+cycles.
-Be careful when storing coordinates as the activity may be carried out
-by NPCS. If its, the coordinates must be absolute not local as local
-coordinates are based on the avatars position.
+Be careful when storing coordinates as the activity may be carried out by NPCS. If its, the
+coordinates must be absolute not local as local coordinates are based on the avatars position.
### `activity_actor::start`
-This function is called exactly once when the activity
-is assigned to a character. It is useful for setting
-`player_activity::moves_left`/`player_activity::moves_total` in the case
-of an activity based on time or speed.
+This function is called exactly once when the activity is assigned to a character. It is useful for
+setting `player_activity::moves_left`/`player_activity::moves_total` in the case of an activity
+based on time or speed.
### `activity_actor::do_turn`
-To prevent an infinite loop, ensure that one of the following is
-satisfied:
+To prevent an infinite loop, ensure that one of the following is satisfied:
- The `based_on` JSON property is `speed` or `time`
- The `player_activity::moves_left` is decreased in `do_turn`
-- The the activity is stopped in `do_turn` (see 'Termination' above)
+- The the activity is stopped in `do_turn` (see 'Termination' above)
-For example, `move_items_activity_actor::do_turn` will either move as
-many items as possible given the character's current moves or, if there
-are no target items remaining, terminate the activity.
+For example, `move_items_activity_actor::do_turn` will either move as many items as possible given
+the character's current moves or, if there are no target items remaining, terminate the activity.
### `activity_actor::finish`
-This function is called when the activity has been completed
-(`moves_left` <= 0). It must call `player_activity::set_to_null()` or
-assign a new activity. One should not call `Character::cancel_activity`
-for the finished activity, as this could make a copy of the activity in
+This function is called when the activity has been completed (`moves_left` <= 0). It must call
+`player_activity::set_to_null()` or assign a new activity. One should not call
+`Character::cancel_activity` for the finished activity, as this could make a copy of the activity in
`Character::backlog`, which allows resuming an already finished activity.
diff --git a/doc/POINTS_COORDINATES.md b/doc/POINTS_COORDINATES.md
index 35ca4d9bf2d9..eb3fa00444a0 100644
--- a/doc/POINTS_COORDINATES.md
+++ b/doc/POINTS_COORDINATES.md
@@ -3,127 +3,113 @@
## Axes
The game is three-dimensional, with the axes oriented as follows:
-* The **x-axis** goes from left to right across the display (in non-isometric
- views).
-* The **y-axis** goes from top to bottom of the display.
-* The **z-axis** is vertical, with negative z pointing underground and positive
- z pointing to the sky.
+
+- The **x-axis** goes from left to right across the display (in non-isometric views).
+- The **y-axis** goes from top to bottom of the display.
+- The **z-axis** is vertical, with negative z pointing underground and positive z pointing to the
+ sky.
## Coordinate systems
-CDDA uses a variety of coordinate systems for different purposes. These differ
-by scale and origin.
+CDDA uses a variety of coordinate systems for different purposes. These differ by scale and origin.
-The most precise coordinates are **map square** (ms) coordinates. These refer to
-the tiles you see normally when playing the game.
+The most precise coordinates are **map square** (ms) coordinates. These refer to the tiles you see
+normally when playing the game.
Two origins for map square coordinates are common:
-* **Absolute** coordinates, sometimes called global, which are a global system
- for the whole game, relative to a fixed origin.
-* **Local** coordinates, which are relative to the corner of the current "reality
- bubble", or `map` roughly centered on the avatar. In local map square
- coordinates, `x` and `y` values will both fall in the range [0,`MAPSIZE_X`).
-The next scale is **submap** (sm) coordinates. One submap is 12x12
-(`SEEX`x`SEEY`) map squares. Submaps are the scale at which chunks of the map
-are loaded or saved as they enter or leave the reality bubble.
+- **Absolute** coordinates, sometimes called global, which are a global system for the whole game,
+ relative to a fixed origin.
+- **Local** coordinates, which are relative to the corner of the current "reality bubble", or `map`
+ roughly centered on the avatar. In local map square coordinates, `x` and `y` values will both fall
+ in the range [0,`MAPSIZE_X`).
+
+The next scale is **submap** (sm) coordinates. One submap is 12x12 (`SEEX`x`SEEY`) map squares.
+Submaps are the scale at which chunks of the map are loaded or saved as they enter or leave the
+reality bubble.
-Next comes **overmap terrain** (omt) coordinates. One overmap terrain is 2x2
-submaps. Overmap terrains correspond to a single tile on the map view in-game,
-and are the scale of chunk of mapgen.
+Next comes **overmap terrain** (omt) coordinates. One overmap terrain is 2x2 submaps. Overmap
+terrains correspond to a single tile on the map view in-game, and are the scale of chunk of mapgen.
-Largest are **overmap** (om) coordinates. One overmap is 180x180
-(`OMAPX`x`OMAPY`) overmap terrains. Large-scale mapgen (e.g. city layout)
-happens one overmap at a time.
+Largest are **overmap** (om) coordinates. One overmap is 180x180 (`OMAPX`x`OMAPY`) overmap terrains.
+Large-scale mapgen (e.g. city layout) happens one overmap at a time.
-Lastly, these is a system called **segment** (seg) coordinates. These are only
-used in saving/loading submaps and you are unlikely to encounter them.
+Lastly, these is a system called **segment** (seg) coordinates. These are only used in
+saving/loading submaps and you are unlikely to encounter them.
-As well as absolute and local coordinates, sometimes we need to use coordinates
-relative so some larger scale. For example, when performing mapgen for a
-single overmap, we want to work with coordinates within that overmap. This
-will be an overmap terrain-scale point relative to the corner of its containing
-overmap, and so typically take `x` and `y` values in the range [0,180).
+As well as absolute and local coordinates, sometimes we need to use coordinates relative so some
+larger scale. For example, when performing mapgen for a single overmap, we want to work with
+coordinates within that overmap. This will be an overmap terrain-scale point relative to the corner
+of its containing overmap, and so typically take `x` and `y` values in the range [0,180).
## Vertical coordinates
-Although `x` and `y` coordinates work at all these various scales, `z`
-coordinates are consistent across all contexts. They lie in the range
-[-`OVERMAP_DEPTH`,`OVERMAP_HEIGHT`].
+Although `x` and `y` coordinates work at all these various scales, `z` coordinates are consistent
+across all contexts. They lie in the range [-`OVERMAP_DEPTH`,`OVERMAP_HEIGHT`].
## Vehicle coordinates
-Each vehicle has its own origin point, which will be at a particular part of
-the vehicle (e.g. it might be at the driver's seat). The origin can move if
-the vehicle is damaged and all the vehicle parts at that location are
-destroyed.
+Each vehicle has its own origin point, which will be at a particular part of the vehicle (e.g. it
+might be at the driver's seat). The origin can move if the vehicle is damaged and all the vehicle
+parts at that location are destroyed.
Vehicles use two systems of coordinates relative to their origin:
-* **mount** coordinates provide a location for vehicle parts that does not
- change as the vehicle moves. It is the map square of that part, relative to
- the vehicle origin, when the vehicle is facing due east.
+- **mount** coordinates provide a location for vehicle parts that does not change as the vehicle
+ moves. It is the map square of that part, relative to the vehicle origin, when the vehicle is
+ facing due east.
-* **map square** is the map square, relative to the origin, but accounting for
- the vehicle's current facing.
+- **map square** is the map square, relative to the origin, but accounting for the vehicle's current
+ facing.
-Vehicle facing is implemented via a combination of rotations (by quarter turns)
-and shearing to interpolate between quarter turns. The logic to convert
-between vehicle mount and map square coordinates is complicated and handled by
-the `vehicle::coord_translate()` and `vehicle::mount_to_tripoint()` families of
-functions.
+Vehicle facing is implemented via a combination of rotations (by quarter turns) and shearing to
+interpolate between quarter turns. The logic to convert between vehicle mount and map square
+coordinates is complicated and handled by the `vehicle::coord_translate()` and
+`vehicle::mount_to_tripoint()` families of functions.
-Currently, vehicle mount coordinates do not have a z-level component, but
-vehicle map square coordinates do. The z coordinate is relative to the vehicle
-origin.
+Currently, vehicle mount coordinates do not have a z-level component, but vehicle map square
+coordinates do. The z coordinate is relative to the vehicle origin.
## Point types
-To work with these coordinate systems we have a variety of types. These are
-defined in [`coordinates.h`](../src/coordinates.h). For example, we have
-`point_abs_ms` for absolute map-square coordinates. The three parts of the
-type name are *dimension*`_`*origin*`_`*scale*.
-
-* **dimension** is either `point` for two-dimensional or `tripoint` for
- three-dimensional.
-* **origin** specifies what the value is relative to, and can be:
- * `rel` means relative to some arbitrary point. This is the result of
- subtracting two points with a common origin. It would be used for example
- to represent the offset between the avatar and a monster they are shooting
- at.
- * `abs` means global absolute coordinates.
- * `sm` means relative to a corner of a submap.
- * `omt` means relative to a corner of an overmap terrain.
- * `om` means relative to a corner of an overmap.
- * `veh` means relative to a vehicle origin.
-* **scale** means the scale as discussed above.
- * `ms` for map square.
- * `sm` for submap.
- * `omt` for overmap terrain.
- * `seg` for segment.
- * `om` for overmap.
- * `mnt` for vehicle mount coordinates (only relevant for the `veh` origin).
+To work with these coordinate systems we have a variety of types. These are defined in
+[`coordinates.h`](../src/coordinates.h). For example, we have `point_abs_ms` for absolute map-square
+coordinates. The three parts of the type name are _dimension_ `_` _origin_ `_` _scale_.
+
+- **dimension** is either `point` for two-dimensional or `tripoint` for three-dimensional.
+- **origin** specifies what the value is relative to, and can be:
+ - `rel` means relative to some arbitrary point. This is the result of subtracting two points with
+ a common origin. It would be used for example to represent the offset between the avatar and a
+ monster they are shooting at.
+ - `abs` means global absolute coordinates.
+ - `sm` means relative to a corner of a submap.
+ - `omt` means relative to a corner of an overmap terrain.
+ - `om` means relative to a corner of an overmap.
+ - `veh` means relative to a vehicle origin.
+- **scale** means the scale as discussed above.
+ - `ms` for map square.
+ - `sm` for submap.
+ - `omt` for overmap terrain.
+ - `seg` for segment.
+ - `om` for overmap.
+ - `mnt` for vehicle mount coordinates (only relevant for the `veh` origin).
## Raw point types
-As well as these types with origin and scale encoded into the type, there are
-simple raw point types called just `point` and `tripoint`. These can be used
-when no particular game scale is intended.
+As well as these types with origin and scale encoded into the type, there are simple raw point types
+called just `point` and `tripoint`. These can be used when no particular game scale is intended.
-At time of writing we are still in the process of transitioning the codebase
-away from using these raw point types everywhere, so you are likely to see
-legacy code using them in places where the more type-safe points might seem
-appropriate.
+At time of writing we are still in the process of transitioning the codebase away from using these
+raw point types everywhere, so you are likely to see legacy code using them in places where the more
+type-safe points might seem appropriate.
-New code should prefer to use the types which include their coordinate system
-where feasible.
+New code should prefer to use the types which include their coordinate system where feasible.
## Converting between point types
### Changing scale
-To change the scale of a point without changing its origin, use `project_to`.
-For example:
+To change the scale of a point without changing its origin, use `project_to`. For example:
```c++
point_abs_ms pos_ms = get_avatar()->global_square_location().xy();
@@ -131,17 +117,15 @@ point_abs_omt pos_omt = project_to( pos_ms );
assert( pos_omt == get_avatar()->global_omt_location().xy() );
```
-The same function `project_to` can be used for scaling up or down. When
-converting to a coarser coordinate system precision is of course lost. If you
-care about the remainder then you must instead use `project_remain`.
+The same function `project_to` can be used for scaling up or down. When converting to a coarser
+coordinate system precision is of course lost. If you care about the remainder then you must instead
+use `project_remain`.
-`project_remain` allows you to convert to a coarser coordinate system and also
-capture the remainder relative to that coarser point. It returns a helper
-struct intended to be used with
-[`std::tie`](https://en.cppreference.com/w/cpp/utility/tuple/tie) to capture
-the two parts of the result. For example, suppose you want to know which
-overmap the avatar is in, and which overmap terrain they are in within that
-overmap.
+`project_remain` allows you to convert to a coarser coordinate system and also capture the remainder
+relative to that coarser point. It returns a helper struct intended to be used with
+[`std::tie`](https://en.cppreference.com/w/cpp/utility/tuple/tie) to capture the two parts of the
+result. For example, suppose you want to know which overmap the avatar is in, and which overmap
+terrain they are in within that overmap.
```c++
point_abs_omt abs_pos = get_avatar()->global_omt_location().xy();
@@ -150,14 +134,12 @@ point_om_omt omt_within_overmap;
std::tie( overmap, omt_within_overmap ) = project_remain( abs_pos );
```
-That makes sense for two-dimensional `point` types, but how does it handle
-`tripoint`? Recall that the z-coordinates do not scale along with the
-horizontal dimensions, so `z` values are unchanged by `project_to` and
-`project_remain`. However, for `project_remain` we don't want to duplicate the
-z-coordinate in both parts of the result, so you must choose exactly one to be
-a `tripoint`. In the example above, z-coodinates do not have much meaning at
-the overmap scale, so you probably want the z-coordinate in
-`omt_within_overmap`. That can be done as follows:
+That makes sense for two-dimensional `point` types, but how does it handle `tripoint`? Recall that
+the z-coordinates do not scale along with the horizontal dimensions, so `z` values are unchanged by
+`project_to` and `project_remain`. However, for `project_remain` we don't want to duplicate the
+z-coordinate in both parts of the result, so you must choose exactly one to be a `tripoint`. In the
+example above, z-coodinates do not have much meaning at the overmap scale, so you probably want the
+z-coordinate in `omt_within_overmap`. That can be done as follows:
```c++
tripoint_abs_omt abs_pos = get_avatar()->global_omt_location();
@@ -166,11 +148,10 @@ tripoint_om_omt omt_within_overmap;
std::tie( overmap, omt_within_overmap ) = project_remain( abs_pos );
```
-The last available operation for rescaling points is `project_combine`. This
-performs the opposite operation from `project_remain`. Given two points where
-the origin of the second matches the scale of the first, you can combine them
-into a single value. As you might expect from the above discussion, one of
-these two can be a `tripoint`, but not both.
+The last available operation for rescaling points is `project_combine`. This performs the opposite
+operation from `project_remain`. Given two points where the origin of the second matches the scale
+of the first, you can combine them into a single value. As you might expect from the above
+discussion, one of these two can be a `tripoint`, but not both.
```c++
tripoint_abs_omt abs_pos = get_avatar()->global_omt_location();
@@ -183,25 +164,23 @@ assert( abs_pos == abs_pos_again );
### Changing origin
-`project_remain` and `project_combine` facilitate some changes of origin, but
-only those origins specifically related to rescaling. To convert to or from
-local or vehicle coordinates requires a specific `map` or `vehicle` object.
+`project_remain` and `project_combine` facilitate some changes of origin, but only those origins
+specifically related to rescaling. To convert to or from local or vehicle coordinates requires a
+specific `map` or `vehicle` object.
TODO: write some examples once this is implemented.
## Point operations
-We provide standard arithmetic operations as overloaded operators, but limit
-them to prevent bugs. For example, most point types cannot be multiplied by a
-constant, but ones with the `rel` origin can (it makes sense to say "half as
-far in the same direction").
+We provide standard arithmetic operations as overloaded operators, but limit them to prevent bugs.
+For example, most point types cannot be multiplied by a constant, but ones with the `rel` origin can
+(it makes sense to say "half as far in the same direction").
-Similarly, you can't generally add two points together, but you can when one of
-them has the `rel` origin, or if one of them is a raw point type.
+Similarly, you can't generally add two points together, but you can when one of them has the `rel`
+origin, or if one of them is a raw point type.
-For computing distances a variety of functions are available, depending on your
-requirements: `square_dist`, `trig_dist`, `rl_dist`, `manhattan_dist`. Other
-related utility functions include `direction_from` and `line_to`.
+For computing distances a variety of functions are available, depending on your requirements:
+`square_dist`, `trig_dist`, `rl_dist`, `manhattan_dist`. Other related utility functions include
+`direction_from` and `line_to`.
-To iterate over nearby points of the same type you can use
-`closest_points_first`.
+To iterate over nearby points of the same type you can use `closest_points_first`.
diff --git a/doc/POSTAPOC_PRICE_GUIDE.md b/doc/POSTAPOC_PRICE_GUIDE.md
index 21936530b661..a9856a2f764c 100644
--- a/doc/POSTAPOC_PRICE_GUIDE.md
+++ b/doc/POSTAPOC_PRICE_GUIDE.md
@@ -1,23 +1,26 @@
# How to give items a sensible postapoc_price value
### Pricing philosophy
-Prices were based on the philosophy that there is a decent portion of humanity unwilling to regularly
-brave the risks of city scavenging, that are always on the lookout for supplies to stay alive.
-This mean food and medicine are relatively quite valuable compared to the goods you would use to acquire them.
-**The standard unit of currency**, the free merchants note, is priced to be the equivalent to
-**one piece of meat jerky (250 cents)**.
+Prices were based on the philosophy that there is a decent portion of humanity unwilling to
+regularly brave the risks of city scavenging, that are always on the lookout for supplies to stay
+alive. This mean food and medicine are relatively quite valuable compared to the goods you would use
+to acquire them.
+
+**The standard unit of currency**, the free merchants note, is priced to be the equivalent to **one
+piece of meat jerky (250 cents)**.
One piece of meat jerky will stay fresh for 24 days, a decent time, and contains 347 calories.
-A survivor that bring back 2000 cents worth of goods back to the merchants every day is
-doing well enough to eke out a subsistence living.
+A survivor that bring back 2000 cents worth of goods back to the merchants every day is doing well
+enough to eke out a subsistence living.
A survivor that brings back 4000 cents worth of goods every day is doing quite well for himself.
#### Items are priced on a combination of their availability and their utility.
-Raw materials tend to either be worthless, or only somewhat worthwhile if you can get them in bulk ~(0-25)/kg.
+Raw materials tend to either be worthless, or only somewhat worthwhile if you can get them in bulk
+~(0-25)/kg.
Common items with no utility are worthless.
@@ -31,10 +34,12 @@ Rare items with some theoretical utility are worth ~(100-500).
Rare items with considerable use tend to have the highest variety in prices ~(1000-15000).
-**No item should be worth more than 150000.** They might be worth more if the economy was larger but that's
-pretty much the most anyone will be willing to spend on any one thing, no matter how nice it is.
+**No item should be worth more than 150000.** They might be worth more if the economy was larger but
+that's pretty much the most anyone will be willing to spend on any one thing, no matter how nice it
+is.
#### Currently Implemented faction currencies
+
"id": "FMCNote",
"description": "The Free Merchant Certified Note, also known by names such as a 'c-note' or 'merch', is a currency based on old American bills. Fifty dollar bills and larger are printed with a promissory note signed by the treasurer of the Free Merchants, along with a complex design. The note explains that this can be exchanged for food, water, and other services through the Free Merchants in the Refugee Center.",
"name": { "str": "Merch" },
@@ -45,8 +50,8 @@ pretty much the most anyone will be willing to spend on any one thing, no matter
"name": { "str": "Hub 01 Gold Coin" },
"description": "This is a small but surprisingly heavy gold coin. One side is etched with circuitry and the other side reads 'Hub 01 exchange currency'.",
"price_postapoc": 5000
-
-
+
+
"id": "FlatCoin",
"name": { "str": "FlatCoin" },
"description": "This is a coin that has been flattened in a novelty coin flattening machine. The machine has been somewhat crudely altered so that the design - which appears to once have been Mickey Mouse - is overlaid with a handwritten emblem of a book. There is some text that faintly reads 'Campus Exchange Token'.",
@@ -63,43 +68,44 @@ pretty much the most anyone will be willing to spend on any one thing, no matter
"name": { "str": "icon" },
"description": "This is a small picture, about the same size as an ID card, symbolizing a religious figure. On the back, there is a text that faintly reads 'New England Church Community'.",
"price_postapoc": 250
-
-
+
##### Some benchmark prices
```
- {
- "id": "antibiotics",
- "name": { "str_sp": "antibiotics" },
- "description": "A strong antibacterial medication designed to prevent or stop the spread of infection. It's the safest way to cure any infections you might have. One dose lasts twelve hours.",
- "price_postapoc": 40000,
- "charges": 15,
- "stack_size": 200,
- "flags": [ "NPC_SAFE", "IRREPLACEABLE_CONSUMABLE" ]
- },
- {
- "id": "boltcutters",
- "type": "TOOL",
- "name": { "str": "pair of bolt cutters", "str_pl": "pairs of bolt cutters" },
- "description": "This is a large pair of bolt cutters. You could use them to cut padlocks or heavy gauge wire.",
- "price_postapoc": 250,
- },
- {
- "id": "armor_lightplate",
- "name": { "str": "plate armor" },
- "description": "A suit of Gothic plate armor.",
- "price_postapoc": 12000,
- },
- {
- "id": "bat_metal",
- "name": { "str": "aluminum bat" },
- "description": "An aluminum baseball bat, lighter than a wooden bat and a little easier to swing as a result.",
- "price_postapoc": 1250,
- },
+{
+ "id": "antibiotics",
+ "name": { "str_sp": "antibiotics" },
+ "description": "A strong antibacterial medication designed to prevent or stop the spread of infection. It's the safest way to cure any infections you might have. One dose lasts twelve hours.",
+ "price_postapoc": 40000,
+ "charges": 15,
+ "stack_size": 200,
+ "flags": [ "NPC_SAFE", "IRREPLACEABLE_CONSUMABLE" ]
+},
+{
+ "id": "boltcutters",
+ "type": "TOOL",
+ "name": { "str": "pair of bolt cutters", "str_pl": "pairs of bolt cutters" },
+ "description": "This is a large pair of bolt cutters. You could use them to cut padlocks or heavy gauge wire.",
+ "price_postapoc": 250,
+},
+{
+ "id": "armor_lightplate",
+ "name": { "str": "plate armor" },
+ "description": "A suit of Gothic plate armor.",
+ "price_postapoc": 12000,
+},
+{
+ "id": "bat_metal",
+ "name": { "str": "aluminum bat" },
+ "description": "An aluminum baseball bat, lighter than a wooden bat and a little easier to swing as a result.",
+ "price_postapoc": 1250,
+},
```
#### Food pricing
-Food is priced mostly for a combination of calories, how preservable they are, and how nutritious they are.
+
+Food is priced mostly for a combination of calories, how preservable they are, and how nutritious
+they are.
Meat jerky is 250.
@@ -108,14 +114,19 @@ Food that has more calories, is canned, and is very nutritious might be 500.
Food that has less calories, goes bad quickly, and is junk food, might be 50.
#### Stack size
-For items that have a stack size, you need to **divide** the price by stack size find the price per unit of the item.
+
+For items that have a stack size, you need to **divide** the price by stack size find the price per
+unit of the item.
#### IRREPLACEABLE_CONSUMABLE Flag
+
Pre cataclysm consumables that can not be replaced can be given the flag:
+
```
- "flags": [ "IRREPLACEABLE_CONSUMABLE" ],
+"flags": [ "IRREPLACEABLE_CONSUMABLE" ],
```
-This is used for things such as unreloaded ammo, medicine, and luxury consumables such as coffee and tea.
+This is used for things such as unreloaded ammo, medicine, and luxury consumables such as coffee and
+tea.
In the future we can implement a feature that will allow this items to increase in price over time.
diff --git a/doc/REGION_SETTINGS.md b/doc/REGION_SETTINGS.md
index 90fb07918cd7..9e95659ade61 100644
--- a/doc/REGION_SETTINGS.md
+++ b/doc/REGION_SETTINGS.md
@@ -1,10 +1,10 @@
# Region Settings
-The **region_settings** define the attributes for map generation that apply to an entire region.
-The general settings define the default overmap terrain and ground cover. Additional sections are
-as follows:
+The **region_settings** define the attributes for map generation that apply to an entire region. The
+general settings define the default overmap terrain and ground cover. Additional sections are as
+follows:
-| Section | Description |
+| Section | Description |
| ------------------------------- | --------------------------------------------------------------------- |
| `region_terrain_and_furniture` | Defines the resolution of regional terrain/furniture to actual types. |
| `field_coverage` | Defines the flora that cover the `field` overmap terrain. |
@@ -21,78 +21,78 @@ Note that for the default region, all attributes and sections are required.
### Fields
-| Identifier | Description |
-| ----------------------- | ------------------------------------------------------------------ |
-| `type` | Type identifier. Must be "region_settings". |
-| `id` | Unique identfier for this region. |
-| `default_oter` | Default overmap terrain for this region. |
-| `default_groundcover` | List of terrain types and weights applied as default ground cover. |
-
+| Identifier | Description |
+| --------------------- | ------------------------------------------------------------------ |
+| `type` | Type identifier. Must be "region_settings". |
+| `id` | Unique identfier for this region. |
+| `default_oter` | Default overmap terrain for this region. |
+| `default_groundcover` | List of terrain types and weights applied as default ground cover. |
### Example
+
```json
{
- "type": "region_settings",
- "id": "default",
- "default_oter": "field",
- "default_groundcover": [
- ["t_grass", 4],
- ["t_dirt", 1]
- ]
+ "type": "region_settings",
+ "id": "default",
+ "default_oter": "field",
+ "default_groundcover": [
+ ["t_grass", 4],
+ ["t_dirt", 1]
+ ]
}
```
## Region Terrain / Furniture
-The **region_terrain_and_furniture** section defines the resolution of regional terrain/furniture
-to their actual terrain and furniture types for the region, with a weighted list for
-terrain/furniture entry that defines the relative weight of a given entry when mapgen resolves the
-regional entry to an actual entry.
+The **region_terrain_and_furniture** section defines the resolution of regional terrain/furniture to
+their actual terrain and furniture types for the region, with a weighted list for terrain/furniture
+entry that defines the relative weight of a given entry when mapgen resolves the regional entry to
+an actual entry.
### Fields
-| Identifier | Description |
+| Identifier | Description |
| ----------- | ------------------------------------------------------------------ |
| `terrain` | List of regional terrain and their corresponding weighted lists. |
| `furniture` | List of regional furniture and their corresponding weighted lists. |
### Example
+
```json
{
- "region_terrain_and_furniture": {
- "terrain": {
- "t_region_groundcover": {
- "t_grass": 4,
- "t_grass_long": 2,
- "t_dirt": 1
- }
- },
- "furniture": {
- "f_region_flower": {
- "f_black_eyed_susan": 1,
- "f_lily": 1,
- "f_flower_tulip": 1,
- "f_flower_spurge": 1,
- "f_chamomile": 1,
- "f_dandelion": 1,
- "f_datura": 1,
- "f_dahlia": 1,
- "f_bluebell": 1
- }
- }
- }
+ "region_terrain_and_furniture": {
+ "terrain": {
+ "t_region_groundcover": {
+ "t_grass": 4,
+ "t_grass_long": 2,
+ "t_dirt": 1
+ }
+ },
+ "furniture": {
+ "f_region_flower": {
+ "f_black_eyed_susan": 1,
+ "f_lily": 1,
+ "f_flower_tulip": 1,
+ "f_flower_spurge": 1,
+ "f_chamomile": 1,
+ "f_dandelion": 1,
+ "f_datura": 1,
+ "f_dahlia": 1,
+ "f_bluebell": 1
+ }
+ }
+ }
}
```
-
## Field Coverage
-The **field_coverage** section defines the furniture and terrain that make up the flora that
-cover the `field` overmap terrain.
+The **field_coverage** section defines the furniture and terrain that make up the flora that cover
+the `field` overmap terrain.
### Fields
-| Identifier | Description |
+| Identifier | Description |
| -------------------------- | ---------------------------------------------------------------------------- |
| `percent_coverage` | % of tiles in the overmap terrain that have a plant. |
| `default_ter` | Default terrain feature for plants. |
@@ -103,24 +103,25 @@ cover the `field` overmap terrain.
| `boosted_other_percent` | % of `boosted_percent_coverage` that will be covered by `boosted_other`. |
### Example
+
```json
{
- "field_coverage": {
- "percent_coverage": 0.9333,
- "default_ter": "t_shrub",
- "other": {
- "t_shrub_blueberry": 0.4166,
- "t_shrub_strawberry": 0.4166,
- "f_mutpoppy": 8.3333
- },
- "boost_chance": 0.833,
- "boosted_percent_coverage": 2.5,
- "boosted_other": {
- "t_shrub_blueberry": 40.0,
- "f_dandelion": 6.6
- },
- "boosted_other_percent": 50.0
- }
+ "field_coverage": {
+ "percent_coverage": 0.9333,
+ "default_ter": "t_shrub",
+ "other": {
+ "t_shrub_blueberry": 0.4166,
+ "t_shrub_strawberry": 0.4166,
+ "f_mutpoppy": 8.3333
+ },
+ "boost_chance": 0.833,
+ "boosted_percent_coverage": 2.5,
+ "boosted_other": {
+ "t_shrub_blueberry": 40.0,
+ "f_dandelion": 6.6
+ },
+ "boosted_other_percent": 50.0
+ }
}
```
@@ -128,12 +129,12 @@ cover the `field` overmap terrain.
The **overmap_lake_settings** section defines the attributes used in generating lakes on the
overmap. The actual placement of these features is determined globally across all overmaps so that
-the edges of the features align, and these parameters are mostly about how those global features
-are interpreted.
+the edges of the features align, and these parameters are mostly about how those global features are
+interpreted.
### Fields
-| Identifier | Description |
+| Identifier | Description |
| ------------------------------------------ | --------------------------------------------------------------------------- |
| `noise_threshold_lake` | [0, 1], x > value spawns a `lake_surface` or `lake_shore`. |
| `lake_size_min` | Minimum size of the lake in overmap terrains for it to actually spawn. |
@@ -145,28 +146,28 @@ are interpreted.
```json
{
- "overmap_lake_settings": {
- "noise_threshold_lake": 0.25,
- "lake_size_min": 20,
- "lake_depth": -5,
- "shore_extendable_overmap_terrain": ["forest_thick", "forest_water", "field"],
- "shore_extendable_overmap_terrain_aliases": [
- { "om_terrain": "forest", "om_terrain_match_type": "TYPE", "alias": "forest_thick" }
- ]
- }
+ "overmap_lake_settings": {
+ "noise_threshold_lake": 0.25,
+ "lake_size_min": 20,
+ "lake_depth": -5,
+ "shore_extendable_overmap_terrain": ["forest_thick", "forest_water", "field"],
+ "shore_extendable_overmap_terrain_aliases": [
+ { "om_terrain": "forest", "om_terrain_match_type": "TYPE", "alias": "forest_thick" }
+ ]
+ }
}
```
## Overmap Forest Settings
The **overmap_forest_settings** section defines the attributes used in generating forest and swamps
-on the overmap. The actual placement of these features is determined globally across all overmaps
-so that the edges of the features align, and these parameters are mostly about how those global
+on the overmap. The actual placement of these features is determined globally across all overmaps so
+that the edges of the features align, and these parameters are mostly about how those global
features are interpreted.
### Fields
-| Identifier | Description |
+| Identifier | Description |
| -------------------------------------- | ---------------------------------------------------------------------- |
| `noise_threshold_forest` | [0, 1], x > value spawns `forest`. |
| `noise_threshold_forest_thick` | [0, 1], x > value spawns `forest_thick`. |
@@ -179,37 +180,36 @@ features are interpreted.
```json
{
- "overmap_forest_settings": {
- "noise_threshold_forest": 0.25,
- "noise_threshold_forest_thick": 0.3,
- "noise_threshold_swamp_adjacent_water": 0.3,
- "noise_threshold_swamp_isolated": 0.6,
- "river_floodplain_buffer_distance_min": 3,
- "river_floodplain_buffer_distance_max": 15
- }
+ "overmap_forest_settings": {
+ "noise_threshold_forest": 0.25,
+ "noise_threshold_forest_thick": 0.3,
+ "noise_threshold_swamp_adjacent_water": 0.3,
+ "noise_threshold_swamp_isolated": 0.6,
+ "river_floodplain_buffer_distance_min": 3,
+ "river_floodplain_buffer_distance_max": 15
+ }
}
```
## Forest Map Generation Settings
The **forest_mapgen_settings** section defines the attributes used in generating forest (`forest`,
-`forest_thick`, `forest_water`) terrains, including their items, groundcover, terrain and
-furniture.
+`forest_thick`, `forest_water`) terrains, including their items, groundcover, terrain and furniture.
### General Structure
At the top level, the `forest_mapgen_settings` is a collection of named configurations where each
entry has the name of the overmap terrain that it applies to, e.g. `forest`, `forest_thick`,
-`forest_water`. It is possible to define settings for overmap terrains that are not rendered by
-the forest mapgen, but will be used when blending forest terrains with other terrain types.
+`forest_water`. It is possible to define settings for overmap terrains that are not rendered by the
+forest mapgen, but will be used when blending forest terrains with other terrain types.
```json
{
- "forest_mapgen_settings": {
- "forest": {},
- "forest_thick": {},
- "forest_water": {}
- }
+ "forest_mapgen_settings": {
+ "forest": {},
+ "forest_thick": {},
+ "forest_water": {}
+ }
}
```
@@ -217,7 +217,7 @@ Each terrain then has an independent set of configuration values that control th
### Fields
-| Identifier | Description |
+| Identifier | Description |
| ----------------------------- | ---------------------------------------------------------------------------- |
| `sparseness_adjacency_factor` | Value relative to neighbors controls how sparse the overmap terrain will be. |
| `item_group` | Item group used to place items randomly within the overmap terrain. |
@@ -234,21 +234,21 @@ Each terrain then has an independent set of configuration values that control th
```json
{
- "forest": {
- "sparseness_adjacency_factor": 3,
- "item_group": "forest",
- "item_group_chance": 60,
- "item_spawn_iterations": 1,
- "clear_groundcover": false,
- "groundcover": {
- "t_grass": 3,
- "t_dirt": 1
- },
- "clear_components": false,
- "components": {},
- "clear_terrain_furniture": false,
- "terrain_furniture": {}
- }
+ "forest": {
+ "sparseness_adjacency_factor": 3,
+ "item_group": "forest",
+ "item_group_chance": 60,
+ "item_spawn_iterations": 1,
+ "clear_groundcover": false,
+ "groundcover": {
+ "t_grass": 3,
+ "t_dirt": 1
+ },
+ "clear_components": false,
+ "components": {},
+ "clear_terrain_furniture": false,
+ "terrain_furniture": {}
+ }
}
```
@@ -260,7 +260,7 @@ for the components are only relevant for the purposes of overriding them in regi
### Fields
-| Identifier | Description |
+| Identifier | Description |
| ------------- | -------------------------------------------------------------------- |
| `sequence` | Sequence in which components are processed. |
| `chance` | One in X chance that something from this component will be placed. |
@@ -271,63 +271,62 @@ for the components are only relevant for the purposes of overriding them in regi
```json
{
- "trees": {
- "sequence": 0,
- "chance": 12,
- "clear_types": false,
- "types": {
- "t_tree_young": 128,
- "t_tree": 32,
- "t_tree_birch": 32,
- "t_tree_pine": 32,
- "t_tree_maple": 32,
- "t_tree_willow": 32,
- "t_tree_hickory": 32,
- "t_tree_blackjack": 8,
- "t_tree_coffee": 8,
- "t_tree_apple": 2,
- "t_tree_apricot": 2,
- "t_tree_cherry": 2,
- "t_tree_peach": 2,
- "t_tree_pear": 2,
- "t_tree_plum": 2,
- "t_tree_deadpine": 1,
- "t_tree_hickory_dead": 1,
- "t_tree_dead": 1
- }
- },
- "shrubs_and_flowers": {
- "sequence": 1,
- "chance": 10,
- "clear_types": false,
- "types": {
- "t_underbrush": 8,
- "t_shrub_blueberry": 1,
- "t_shrub_strawberry": 1,
- "t_shrub": 1,
- "f_chamomile": 1,
- "f_dandelion": 1,
- "f_datura": 1,
- "f_dahlia": 1,
- "f_bluebell": 1,
- "f_mutpoppy": 1
- }
- }
+ "trees": {
+ "sequence": 0,
+ "chance": 12,
+ "clear_types": false,
+ "types": {
+ "t_tree_young": 128,
+ "t_tree": 32,
+ "t_tree_birch": 32,
+ "t_tree_pine": 32,
+ "t_tree_maple": 32,
+ "t_tree_willow": 32,
+ "t_tree_hickory": 32,
+ "t_tree_blackjack": 8,
+ "t_tree_coffee": 8,
+ "t_tree_apple": 2,
+ "t_tree_apricot": 2,
+ "t_tree_cherry": 2,
+ "t_tree_peach": 2,
+ "t_tree_pear": 2,
+ "t_tree_plum": 2,
+ "t_tree_deadpine": 1,
+ "t_tree_hickory_dead": 1,
+ "t_tree_dead": 1
+ }
+ },
+ "shrubs_and_flowers": {
+ "sequence": 1,
+ "chance": 10,
+ "clear_types": false,
+ "types": {
+ "t_underbrush": 8,
+ "t_shrub_blueberry": 1,
+ "t_shrub_strawberry": 1,
+ "t_shrub": 1,
+ "f_chamomile": 1,
+ "f_dandelion": 1,
+ "f_datura": 1,
+ "f_dahlia": 1,
+ "f_bluebell": 1,
+ "f_mutpoppy": 1
+ }
+ }
}
```
### Terrain Furniture
-The terrain furniture are a collection of terrain ids with a chance of having furniture
-picked from a weighted list for that given terrain and placed on it during mapgen after
-the normal mapgen has completed. This is used, for example, to place cattails on fresh
-water in swamps. Cattails could be simply placed in the `components` section and placed
-during the normal forest mapgen, but that would not guarantee their placement on fresh
-water only, while this does.
+The terrain furniture are a collection of terrain ids with a chance of having furniture picked from
+a weighted list for that given terrain and placed on it during mapgen after the normal mapgen has
+completed. This is used, for example, to place cattails on fresh water in swamps. Cattails could be
+simply placed in the `components` section and placed during the normal forest mapgen, but that would
+not guarantee their placement on fresh water only, while this does.
### Fields
-| Identifier | Description |
+| Identifier | Description |
| ----------------- | ------------------------------------------------------------------ |
| `chance` | One in X chance that furniture from this component will be placed. |
| `clear_furniture` | Clear all previously defined `furniture` for this terrain. |
@@ -337,13 +336,13 @@ water only, while this does.
```json
{
- "t_water_sh" : {
- "chance": 2,
- "clear_furniture": false,
- "furniture": {
- "f_cattails": 1
- }
- }
+ "t_water_sh": {
+ "chance": 2,
+ "clear_furniture": false,
+ "furniture": {
+ "f_cattails": 1
+ }
+ }
}
```
@@ -355,7 +354,7 @@ trailheads, and some general tuning of the actual trail width/position in mapgen
### Fields
-| Identifier | Description |
+| Identifier | Description |
| -------------------------- | ------------------------------------------------------------------------------------------- |
| `chance` | One in X chance a contiguous forest will have a trail system. |
| `border_point_chance` | One in X chance that the N/S/E/W-most point of the forest will be part of the trail system. |
@@ -376,26 +375,26 @@ trailheads, and some general tuning of the actual trail width/position in mapgen
```json
{
- "forest_trail_settings": {
- "chance": 2,
- "border_point_chance": 2,
- "minimum_forest_size": 100,
- "random_point_min": 4,
- "random_point_max": 50,
- "random_point_size_scalar": 100,
- "trailhead_chance": 1,
- "trailhead_road_distance": 6,
- "trail_center_variance": 3,
- "trail_width_offset_min": 1,
- "trail_width_offset_max": 3,
- "clear_trail_terrain": false,
- "trail_terrain": {
- "t_dirt": 1
- },
- "trailheads": {
- "trailhead_basic": 50
- }
- }
+ "forest_trail_settings": {
+ "chance": 2,
+ "border_point_chance": 2,
+ "minimum_forest_size": 100,
+ "random_point_min": 4,
+ "random_point_max": 50,
+ "random_point_size_scalar": 100,
+ "trailhead_chance": 1,
+ "trailhead_road_distance": 6,
+ "trail_center_variance": 3,
+ "trail_width_offset_min": 1,
+ "trail_width_offset_max": 3,
+ "clear_trail_terrain": false,
+ "trail_terrain": {
+ "t_dirt": 1
+ },
+ "trailheads": {
+ "trailhead_basic": 50
+ }
+ }
}
```
@@ -407,46 +406,47 @@ relative placements of various classes of buildings.
### Fields
-| Identifier | Description |
-| ----------------------- | ------------------------------------------------------------------ |
-| `type` | City type identifier--currently unused. |
-| `shop_radius` | Radial frequency of shop placement. Smaller number = more shops. |
-| `park_radius` | Radial frequency of park placement. Smaller number = more parks. |
-| `houses` | Weighted list of overmap terrains and specials used for houses. |
-| `parks` | Weighted list of overmap terrains and specials used for parks. |
-| `shops` | Weighted list of overmap terrains and specials used for shops. |
+| Identifier | Description |
+| ------------- | ---------------------------------------------------------------- |
+| `type` | City type identifier--currently unused. |
+| `shop_radius` | Radial frequency of shop placement. Smaller number = more shops. |
+| `park_radius` | Radial frequency of park placement. Smaller number = more parks. |
+| `houses` | Weighted list of overmap terrains and specials used for houses. |
+| `parks` | Weighted list of overmap terrains and specials used for parks. |
+| `shops` | Weighted list of overmap terrains and specials used for shops. |
### Placing shops, parks, and houses
When picking a building to place in a given location, the game considers the city size, the
location's distance from the city center, and finally the `shop_radius` and `park_radius` values for
the region. It then tries to place a shop, then a park, and finally a house, where the chance to
-place the shop or park are based on the formula `rng( 0, 99 ) > X_radius * distance from city center
-/ city size`.
+place the shop or park are based on the formula
+`rng( 0, 99 ) > X_radius * distance from city center / city size`.
### Example
+
```json
{
- "city": {
- "type": "town",
- "shop_radius": 80,
- "park_radius": 90,
- "houses": {
- "house_two_story_basement": 1,
- "house": 1000,
- "house_base": 333,
- "emptyresidentiallot": 20
- },
- "parks": {
- "park": 4,
- "pool": 1
- },
- "shops": {
- "s_gas": 5,
- "s_pharm": 3,
- "s_grocery": 15
- }
- }
+ "city": {
+ "type": "town",
+ "shop_radius": 80,
+ "park_radius": 90,
+ "houses": {
+ "house_two_story_basement": 1,
+ "house": 1000,
+ "house_base": 333,
+ "emptyresidentiallot": 20
+ },
+ "parks": {
+ "park": 4,
+ "pool": 1
+ },
+ "shops": {
+ "s_gas": 5,
+ "s_pharm": 3,
+ "s_grocery": 15
+ }
+ }
}
```
@@ -458,7 +458,7 @@ terrain. This includes both the chance of an extra occurring as well as the weig
### Fields
-| Identifier | Description |
+| Identifier | Description |
| ---------- | ---------------------------------------------------------------- |
| `chance` | One in X chance that the overmap terrain will spawn a map extra. |
| `extras` | Weighted list of map extras that can spawn. |
@@ -467,15 +467,15 @@ terrain. This includes both the chance of an extra occurring as well as the weig
```json
{
- "map_extras": {
- "field": {
- "chance": 90,
- "extras": {
- "mx_helicopter": 40,
- "mx_portal_in": 1
- }
- }
- }
+ "map_extras": {
+ "field": {
+ "chance": 90,
+ "extras": {
+ "mx_helicopter": 40,
+ "mx_portal_in": 1
+ }
+ }
+ }
}
```
@@ -485,20 +485,19 @@ The **weather** section defines the base weather attributes used for the region.
### Fields
-| Identifier | Description |
-| ------------------------------ | --------------------------------------------------------------------- |
-| `spring_temp` | Mid spring temperature for the region in degrees Celsius |
-| `summer_temp` | Mid summer temperature for the region in degrees Celsius |
-| `autumn_temp` | Mid autumn temperature for the region in degrees Celsius |
-| `winter_temp` | Mid winter temperature for the region in degrees Celsius |
-| `base_humidity` | Base humidity for the region in relative humidity % |
-| `base_pressure` | Base pressure for the region in millibars. |
-| `base_acid` | Base acid for the region in ? units. Value >= 1 is considered acidic. |
-| `base_wind` | Base wind for the region in mph units. Roughly the yearly average. |
-| `base_wind_distrib_peaks` | How high the wind peaks can go. Higher values produce windier days. |
-| `base_wind_season_variation` | How the wind varies with season. Lower values produce more variation |
-| `weather_types` | Ids of the weather types allowed in this region. First value will be the default weather type. Declaration order will affect weather selection, see [WEATHER_TYPE.md](WEATHER_TYPE.md) for details. |
-
+| Identifier | Description |
+| ---------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `spring_temp` | Mid spring temperature for the region in degrees Celsius |
+| `summer_temp` | Mid summer temperature for the region in degrees Celsius |
+| `autumn_temp` | Mid autumn temperature for the region in degrees Celsius |
+| `winter_temp` | Mid winter temperature for the region in degrees Celsius |
+| `base_humidity` | Base humidity for the region in relative humidity % |
+| `base_pressure` | Base pressure for the region in millibars. |
+| `base_acid` | Base acid for the region in ? units. Value >= 1 is considered acidic. |
+| `base_wind` | Base wind for the region in mph units. Roughly the yearly average. |
+| `base_wind_distrib_peaks` | How high the wind peaks can go. Higher values produce windier days. |
+| `base_wind_season_variation` | How the wind varies with season. Lower values produce more variation |
+| `weather_types` | Ids of the weather types allowed in this region. First value will be the default weather type. Declaration order will affect weather selection, see [WEATHER_TYPE.md](WEATHER_TYPE.md) for details. |
### Example
@@ -538,12 +537,13 @@ The **weather** section defines the base weather attributes used for the region.
## Overmap Feature Flag Settings
-The **overmap_feature_flag_settings** section defines operations that operate on the flags assigned to overmap features.
-This is currently used to provide a mechanism for whitelisting and blacklisting locations on a per-region basis.
+The **overmap_feature_flag_settings** section defines operations that operate on the flags assigned
+to overmap features. This is currently used to provide a mechanism for whitelisting and blacklisting
+locations on a per-region basis.
### Fields
-| Identifier | Description |
+| Identifier | Description |
| ----------------- | ------------------------------------------------------------------------------------------ |
| `clear_blacklist` | Clear all previously defined `blacklist`. |
| `blacklist` | List of flags. Any location with a matching flag will be excluded from overmap generation. |
@@ -554,12 +554,12 @@ This is currently used to provide a mechanism for whitelisting and blacklisting
```json
{
- "overmap_feature_flag_settings": {
- "clear_blacklist": false,
- "blacklist": [ "FUNGAL" ],
- "clear_whitelist": false,
- "whitelist": []
- }
+ "overmap_feature_flag_settings": {
+ "clear_blacklist": false,
+ "blacklist": ["FUNGAL"],
+ "clear_whitelist": false,
+ "whitelist": []
+ }
}
```
@@ -571,7 +571,7 @@ those values which should be changed.
### Fields
-| Identifier | Description |
+| Identifier | Description |
| ---------- | ------------------------------------------------------------------------------------------- |
| `type` | Type identifier. Must be "region_overlay". |
| `id` | Unique identfier for this region overlay. |
@@ -580,15 +580,16 @@ those values which should be changed.
All additional fields and sections are as defined for a `region_overlay`.
### Example
+
```json
[{
- "type": "region_overlay",
- "id": "example_overlay",
- "regions": ["all"],
- "city": {
- "parks": {
- "examplepark": 1
- }
- }
+ "type": "region_overlay",
+ "id": "example_overlay",
+ "regions": ["all"],
+ "city": {
+ "parks": {
+ "examplepark": 1
+ }
+ }
}]
-```
\ No newline at end of file
+```
diff --git a/doc/RELICS.md b/doc/RELICS.md
index d62e50bec020..b2ffb54f3397 100644
--- a/doc/RELICS.md
+++ b/doc/RELICS.md
@@ -7,10 +7,11 @@
Relics are regular items with special relic data attached to them.
-Relic data is defined in JSON in `relic_data` field of corresponding item type definition,
-and whenever the item is spawned a copy of relic data is attached to the item instance.
+Relic data is defined in JSON in `relic_data` field of corresponding item type definition, and
+whenever the item is spawned a copy of relic data is attached to the item instance.
Relic data object can contain the following fields:
+
```c++
{
"name": "Boots of Haste", // Overrides default item name
@@ -24,8 +25,9 @@ Relic data object can contain the following fields:
## Relic recharge
-Relics can recharge under certain conditions.
-Recharge method is defined as follows (all fields optional):
+Relics can recharge under certain conditions. Recharge method is defined as follows (all fields
+optional):
+
```c++
{
"type": "time", // Defines what resource is consumed. Default: time
@@ -42,24 +44,24 @@ Recharge method is defined as follows (all fields optional):
### Recharge type
-| ID | Description
-|----------------|--------------------------------
-|`time` | Needs no additional resources
-|`solar` | Consumes sunlight (character must be in sunlight)
-|`pain` | Causes pain to recharge. Intensity controlled by `int_min` and `int_max`
-|`hp` | Causes damage to all body parts. Intensity controlled by `int_min` and `int_max`
-|`fatigue` | Causes fatigue and drains stamina. Fatigue drain controlled by `int_min` and `int_max`, stamina drain rolled as `[ int_min*100, int_max*100 ]`
-|`field` | Consumes adjacent field. Allowed field intensity controlled by `int_min` and `int_max`
-|`trap` | Consumes adjacent trap.
+| ID | Description |
+| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
+| `time` | Needs no additional resources |
+| `solar` | Consumes sunlight (character must be in sunlight) |
+| `pain` | Causes pain to recharge. Intensity controlled by `int_min` and `int_max` |
+| `hp` | Causes damage to all body parts. Intensity controlled by `int_min` and `int_max` |
+| `fatigue` | Causes fatigue and drains stamina. Fatigue drain controlled by `int_min` and `int_max`, stamina drain rolled as `[ int_min*100, int_max*100 ]` |
+| `field` | Consumes adjacent field. Allowed field intensity controlled by `int_min` and `int_max` |
+| `trap` | Consumes adjacent trap. |
### Recharge requirements
-| ID | Description
-|----------------|--------------------------------
-|`none` | No additional requirements (always works)
-|`equipped` | Must be worn if armor, wielded if weapon.
-|`close_to_skin` | Must be worn underneath all other clothing, or be wielded with bare hands
-|`sleep` | Character must be asleep
-|`rad` | Character or map tile must be irradiated
-|`wet` | Character must be wet, or it's raining
-|`sky` | Character must be above z=0
+| ID | Description |
+| --------------- | ------------------------------------------------------------------------- |
+| `none` | No additional requirements (always works) |
+| `equipped` | Must be worn if armor, wielded if weapon. |
+| `close_to_skin` | Must be worn underneath all other clothing, or be wielded with bare hands |
+| `sleep` | Character must be asleep |
+| `rad` | Character or map tile must be irradiated |
+| `wet` | Character must be wet, or it's raining |
+| `sky` | Character must be above z=0 |
diff --git a/doc/SOUNDPACKS.md b/doc/SOUNDPACKS.md
index 0e757dc8d116..6f21ca751a1b 100644
--- a/doc/SOUNDPACKS.md
+++ b/doc/SOUNDPACKS.md
@@ -1,10 +1,13 @@
# Soundpacks
-A soundpack can be installed in the `data/sound` directory. It has to be a subdirectory that contains at least a file named `soundpack.txt`. It can include any number of json files which add any number of sound_effect or playlist.
+A soundpack can be installed in the `data/sound` directory. It has to be a subdirectory that
+contains at least a file named `soundpack.txt`. It can include any number of json files which add
+any number of sound_effect or playlist.
## soundpack.txt format
-The `soundpack.txt` file format needs 2 values, a NAME and a VIEW. The NAME value should be unique. The VIEW value will be shown in the options menu. Every line starting with a `#` is a comment line.
+The `soundpack.txt` file format needs 2 values, a NAME and a VIEW. The NAME value should be unique.
+The VIEW value will be shown in the options menu. Every line starting with a `#` is a comment line.
```
#Basic provided soundpack
@@ -21,53 +24,59 @@ VIEW: Basic
Sound effects can be included with a format like this:
```javascript
-[
- {
- "type": "sound_effect",
- "id" : "menu_move",
- "volume" : 100,
- "files" : [
- "nenadsimic_menu_selection_click.wav"
- ]
- },
- {
- "type": "sound_effect",
- "id" : "fire_gun",
- "volume" : 90,
- "variant" : "bio_laser_gun",
- "files" : [
- "guns/energy_generic/weapon_fire_laser.ogg"
- ]
- }
+;[
+ {
+ "type": "sound_effect",
+ "id": "menu_move",
+ "volume": 100,
+ "files": [
+ "nenadsimic_menu_selection_click.wav",
+ ],
+ },
+ {
+ "type": "sound_effect",
+ "id": "fire_gun",
+ "volume": 90,
+ "variant": "bio_laser_gun",
+ "files": [
+ "guns/energy_generic/weapon_fire_laser.ogg",
+ ],
+ },
]
```
-Adding variety: If for a certain `id`'s `variant` multiple `files` are defined, they will be chosen at random when `variant` is played.
+
+Adding variety: If for a certain `id`'s `variant` multiple `files` are defined, they will be chosen
+at random when `variant` is played.
The volume key may range from 0-100.
-Cataclysm has its own set of user-controllable volumes that will additionally affect the sound. These range from 0-128, and the default is 100. This means that at default volume, any sound that Cataclysm plays will default to playing at about 78% of the maximum; if you are working on sounds in an external audio editor, expect Cataclysm at default volume settings to play that sound file back more-quietly than your editor does.
+Cataclysm has its own set of user-controllable volumes that will additionally affect the sound.
+These range from 0-128, and the default is 100. This means that at default volume, any sound that
+Cataclysm plays will default to playing at about 78% of the maximum; if you are working on sounds in
+an external audio editor, expect Cataclysm at default volume settings to play that sound file back
+more-quietly than your editor does.
### Preloading SFX
Sound effects can be included for preloading with a format like this:
```javascript
-[
- {
- "type": "sound_effect_preload",
- "preload": [
- { "id": "fire_gun", "variant": "all" },
- { "id": "environment", "variant": "daytime" },
- { "id": "environment" }
- ]
- }
+;[
+ {
+ "type": "sound_effect_preload",
+ "preload": [
+ { "id": "fire_gun", "variant": "all" },
+ { "id": "environment", "variant": "daytime" },
+ { "id": "environment" },
+ ],
+ },
]
```
-`"variant": "all"` will be treated specially and load all variants of the given id.
+`"variant": "all"` will be treated specially and load all variants of the given id.
-> [!WARNING]
-> `"variant": "all"` uses unoptimal algorithm (because the devs were dumb and lazy and used hacks) and will slow down game loading time.
+> [!WARNING] `"variant": "all"` uses unoptimal algorithm (because the devs were dumb and lazy and
+> used hacks) and will slow down game loading time.
If `"variant"` is omitted, it defaults to `"default"`.
@@ -76,188 +85,201 @@ If `"variant"` is omitted, it defaults to `"default"`.
A playlist can be included with a format like this:
```javascript
-[
- {
- "type": "playlist",
- "playlists":
- [
- {
- "id" : "title",
- "shuffle" : false,
- "files" : [
- {
- "file": "Dark_Days_Ahead_demo_2.wav",
- "volume": 100
- },
- {
- "file": "cataclysmthemeREV6.wav",
- "volume": 90
- }
- ]
- }
- ]
- }
+;[
+ {
+ "type": "playlist",
+ "playlists": [
+ {
+ "id": "title",
+ "shuffle": false,
+ "files": [
+ {
+ "file": "Dark_Days_Ahead_demo_2.wav",
+ "volume": 100,
+ },
+ {
+ "file": "cataclysmthemeREV6.wav",
+ "volume": 90,
+ },
+ ],
+ },
+ ],
+ },
]
```
-Each sound effect is identified by an id and a variant. If a sound effect is played with a variant that does not exist in the json files, but a variant "default" exists, then the "default" variant is played instead. The file name of the sound effect is relative to the soundpack directory, so if the file name is set to "sfx.wav" and your soundpack is in `data/sound/mypack`, the file must be placed at `data/sound/mypack/sfx.wav`.
+Each sound effect is identified by an id and a variant. If a sound effect is played with a variant
+that does not exist in the json files, but a variant "default" exists, then the "default" variant is
+played instead. The file name of the sound effect is relative to the soundpack directory, so if the
+file name is set to "sfx.wav" and your soundpack is in `data/sound/mypack`, the file must be placed
+at `data/sound/mypack/sfx.wav`.
## JSON Format Sound Effects List
-A full list of sound effect id's and variants is given in the following. Each line in the list has the following format:
+A full list of sound effect id's and variants is given in the following. Each line in the list has
+the following format:
`id variant1|variant2`
-Where id describes the id of the sound effect, and a list of variants separated by | follows. When the variants are omitted, the variant "default" is assumed. Where the variants do not represent literal strings, but variables, they will be enclosed in `<` `>`. For instance, `` is a placeholder for any valid furniture ID (as in the furniture definition JSON).
+Where id describes the id of the sound effect, and a list of variants separated by | follows. When
+the variants are omitted, the variant "default" is assumed. Where the variants do not represent
+literal strings, but variables, they will be enclosed in `<` `>`. For instance, `` is a
+placeholder for any valid furniture ID (as in the furniture definition JSON).
# open/close doors
-* `open_door default||`
-* `close_door default||`
-
- # smashing attempts and results, few special ones and furniture/terrain specific
-* `bash default`
-* `smash wall|door|door_boarded|glass|swing|web|paper_torn|metal`
-* `smash_success hit_vehicle|smash_glass_contents|smash_cloth||`
-* `smash_fail default||`
-
- # melee sounds
-* `melee_swing default|small_bash|small_cutting|small_stabbing|big_bash|big_cutting|big_stabbing`
-* `melee_hit_flesh default|small_bash|small_cutting|small_stabbing|big_bash|big_cutting|big_stabbing|`
-* `melee_hit_metal default|small_bash|small_cutting|small_stabbing|big_bash|big_cutting|big_stabbing!`
-* `melee_hit ` # note: use weapon id "null" for unarmed attacks
-
- # firearm/ranged weapon sounds
-* `fire_gun |brass_eject|empty`
-* `fire_gun_distant `
-* `reload `
-* `bullet_hit hit_flesh|hit_wall|hit_metal|hit_glass|hit_water`
-
- # environmental sfx, here divided by sections for clarity
-* `environment thunder_near|thunder_far`
-* `environment daytime|nighttime`
-* `environment indoors|indoors_rain|underground`
-* `environment ` # examples: `WEATHER_DRIZZLE|WEATHER_RAINY|WEATHER_THUNDER|WEATHER_FLURRIES|WEATHER_SNOW|WEATHER_SNOWSTORM`
-* `environment alarm|church_bells|police_siren`
-* `environment deafness_shock|deafness_tone_start|deafness_tone_light|deafness_tone_medium|deafness_tone_heavy`
-
- # misc environmental sounds
-* `footstep default|light|clumsy|bionic`
-* `explosion default|small|huge`
-
- # ambient danger theme for seeing large numbers of zombies
-* `danger_low`
-* `danger_medium`
-* `danger_high`
-* `danger_extreme`
-
- # chainsaw pack
-* `chainsaw_cord chainsaw_on`
-* `chainsaw_start chainsaw_on`
-* `chainsaw_start chainsaw_on`
-* `chainsaw_stop chainsaw_on`
-* `chainsaw_idle chainsaw_on`
-* `melee_swing_start chainsaw_on`
-* `melee_swing_end chainsaw_on`
-* `melee_swing chainsaw_on`
-* `melee_hit_flesh chainsaw_on`
-* `melee_hit_metal chainsaw_on`
-* `weapon_theme chainsaw`
-
- # monster death and bite attacks
-* `mon_death zombie_death|zombie_gibbed`
-* `mon_bite bite_miss|bite_hit`
-
-* `melee_attack monster_melee_hit`
-
-* `player_laugh laugh_f|laugh_m`
-
- # player movement sfx
- important: `plmove ` has priority over default `plmove|walk_` (excluding `|barefoot`)
- example: if `plmove|t_grass_long` is defined it will be played before default `plmove|walk_grass` default for all grassy terrains
-
-* `plmove |`
-* `plmove walk_grass|walk_dirt|walk_metal|walk_water|walk_tarmac|walk_barefoot|clear_obstacle`
-
- # fatigue
-* `plmove fatigue_m_low|fatigue_m_med|fatigue_m_high|fatigue_f_low|fatigue_f_med|fatigue_f_high`
-
- # player hurt sounds
-* `deal_damage hurt_f|hurt_m`
-
- # player death and end-game sounds
-* `clean_up_at_end game_over|death_m|death_f`
-
- # variuos bionic sounds
-* `bionic elec_discharge|elec_crackle_low|elec_crackle_med|elec_crackle_high|elec_blast|elec_blast_muffled|acid_discharge|pixelated`
-* `bionic bio_resonator|bio_hydraulics|`
-
- # various tools/traps being used (including some associated terrain/furniture)
-* `tool alarm_clock|jackhammer|pickaxe|oxytorch|hacksaw|axe|shovel|crowbar|boltcutters|compactor|gaspump|noise_emitter|repair_kit|camera_shutter|handcuffs`
-* `tool geiger_low|geiger_medium|geiger_high`
-* `trap bubble_wrap|bear_trap|snare|teleport|dissector|glass_caltrop|glass`
-
- # various activities
-* `activity burrow`
-
- # musical instruments, `_bad` is used when you fail to play it well
-* `musical_instrument `
-* `musical_instrument_bad `
-
- # various shouts and screams
-* `shout default|scream|scream_tortured|roar|squeak|shriek|wail|howl`
-
- # speach, it is currently linked with either item or monster id, or is special `NPC` or `NPC_loud`
- # TODO: full vocalization of speech.json
-* `speech ` # examples: talking_doll, creepy_doll, Granade,
-* `speech ` # examples: eyebot, minitank, mi-go, many robots
-* `speech NPC_m|NPC_f|NPC_m_loud|NPC_f_loud` # special for NPCs
-* `speech robot` # special for robotic voice from a machine etc.
-
- # radio chatter
-* `radio static|inaudible_chatter`
-
- # humming sounds of various origin
-* `humming electric|machinery`
-
- # sounds related to (burning) fire
-* `fire ignition`
-
- # vehicle sounds - engine and other parts in action
- # note: defaults are executed when specific option is not defined
-* `engine_start ` # note: specific engine start (id of any engine/motor/steam_engine/paddle/oar/sail/etc. )
-* `engine_start combustion|electric|muscle|wind` # default engine starts groups
-* `engine_stop ` # note: specific engine stop (id of any engine/motor/steam_engine/paddle/oar/sail/etc. )
-* `engine_stop combustion|electric|muscle|wind` # default engine stop groups
-
- # note: internal engine sound is dynamically pitch shifted depending on vehicle speed
- # it is an ambient looped sound with dedicated channel
-* `engine_working_internal ` # note: sound of engine working heard inside vehicle
-* `engine_working_internal combustion|electric|muscle|wind` # default engine working (inside) groups
-
- # note: external engine sound volume and pan is dynamically shifted depending on distance and angle to vehicle
- # volume heard at given distance is linked to engine's `noise_factor` and stress to the engine (see `vehicle::noise_and_smoke()` )
- # it is an ambient looped sound with dedicated channel
- # this is a single-channel solution (TODO: multi-channel for every heard vehicle); it picks loudest heard vehicle
- # there is no pitch shift here (may be introduced when need for it emerges)
-* `engine_working_external ` # note: sound of engine working heard outside vehicle
-* `engine_working_external combustion|electric|muscle|wind` # default engine working (outside) groups
-
- # note: gear_up/gear_down is done automatically by pitch manipulation
- # gear shift is dependant on max safe speed, and works in assumption, that there are
- # 6 forward gears, gear 0 = neutral, and gear -1 = reverse
-* `vehicle gear_shift`
-
-
-* `vehicle engine_backfire|engine_bangs_start|fault_immobiliser_beep|engine_single_click_fail|engine_multi_click_fail|engine_stutter_fail|engine_clanking_fail`
-* `vehicle horn_loud|horn_medium|horn_low|rear_beeper|chimes|car_alarm`
-* `vehicle reaper|scoop|scoop_thump`
-
-* `vehicle_open ` # note: id of: doors, trunks, hatches, etc.
-* `vehicle_close `
-
- # miscellaneous sounds
-* `misc flashbang|flash|shockwave|earthquake|stairs_movement|stones_grinding|bomb_ticking|lit_fuse|cow_bell|bell|timber`
-* `misc rc_car_hits_obstacle|rc_car_drives`
-* `misc default|whistle|airhorn|horn_bicycle|servomotor`
-* `misc beep|ding|`
-* `misc rattling|spitting|coughing|heartbeat|puff|inhale|exhale|insect_wings|snake_hiss` # mostly organic noises
+
+- `open_door default||`
+- `close_door default||`
+
+ # smashing attempts and results, few special ones and furniture/terrain specific
+- `bash default`
+- `smash wall|door|door_boarded|glass|swing|web|paper_torn|metal`
+- `smash_success hit_vehicle|smash_glass_contents|smash_cloth||`
+- `smash_fail default||`
+
+ # melee sounds
+- `melee_swing default|small_bash|small_cutting|small_stabbing|big_bash|big_cutting|big_stabbing`
+- `melee_hit_flesh default|small_bash|small_cutting|small_stabbing|big_bash|big_cutting|big_stabbing|`
+- `melee_hit_metal default|small_bash|small_cutting|small_stabbing|big_bash|big_cutting|big_stabbing!`
+- `melee_hit ` # note: use weapon id "null" for unarmed attacks
+
+ # firearm/ranged weapon sounds
+- `fire_gun |brass_eject|empty`
+- `fire_gun_distant `
+- `reload `
+- `bullet_hit hit_flesh|hit_wall|hit_metal|hit_glass|hit_water`
+
+ # environmental sfx, here divided by sections for clarity
+- `environment thunder_near|thunder_far`
+- `environment daytime|nighttime`
+- `environment indoors|indoors_rain|underground`
+- `environment ` # examples:
+ `WEATHER_DRIZZLE|WEATHER_RAINY|WEATHER_THUNDER|WEATHER_FLURRIES|WEATHER_SNOW|WEATHER_SNOWSTORM`
+- `environment alarm|church_bells|police_siren`
+- `environment deafness_shock|deafness_tone_start|deafness_tone_light|deafness_tone_medium|deafness_tone_heavy`
+
+ # misc environmental sounds
+- `footstep default|light|clumsy|bionic`
+- `explosion default|small|huge`
+
+ # ambient danger theme for seeing large numbers of zombies
+- `danger_low`
+- `danger_medium`
+- `danger_high`
+- `danger_extreme`
+
+ # chainsaw pack
+- `chainsaw_cord chainsaw_on`
+- `chainsaw_start chainsaw_on`
+- `chainsaw_start chainsaw_on`
+- `chainsaw_stop chainsaw_on`
+- `chainsaw_idle chainsaw_on`
+- `melee_swing_start chainsaw_on`
+- `melee_swing_end chainsaw_on`
+- `melee_swing chainsaw_on`
+- `melee_hit_flesh chainsaw_on`
+- `melee_hit_metal chainsaw_on`
+- `weapon_theme chainsaw`
+
+ # monster death and bite attacks
+- `mon_death zombie_death|zombie_gibbed`
+- `mon_bite bite_miss|bite_hit`
+
+- `melee_attack monster_melee_hit`
+
+- `player_laugh laugh_f|laugh_m`
+
+ # player movement sfx
+ important: `plmove ` has priority over default `plmove|walk_` (excluding
+ `|barefoot`) example: if `plmove|t_grass_long` is defined it will be played before default
+ `plmove|walk_grass` default for all grassy terrains
+
+- `plmove |`
+- `plmove walk_grass|walk_dirt|walk_metal|walk_water|walk_tarmac|walk_barefoot|clear_obstacle`
+
+ # fatigue
+- `plmove fatigue_m_low|fatigue_m_med|fatigue_m_high|fatigue_f_low|fatigue_f_med|fatigue_f_high`
+
+ # player hurt sounds
+- `deal_damage hurt_f|hurt_m`
+
+ # player death and end-game sounds
+- `clean_up_at_end game_over|death_m|death_f`
+
+ # variuos bionic sounds
+- `bionic elec_discharge|elec_crackle_low|elec_crackle_med|elec_crackle_high|elec_blast|elec_blast_muffled|acid_discharge|pixelated`
+- `bionic bio_resonator|bio_hydraulics|`
+
+ # various tools/traps being used (including some associated terrain/furniture)
+- `tool alarm_clock|jackhammer|pickaxe|oxytorch|hacksaw|axe|shovel|crowbar|boltcutters|compactor|gaspump|noise_emitter|repair_kit|camera_shutter|handcuffs`
+- `tool geiger_low|geiger_medium|geiger_high`
+- `trap bubble_wrap|bear_trap|snare|teleport|dissector|glass_caltrop|glass`
+
+ # various activities
+- `activity burrow`
+
+ # musical instruments, `_bad` is used when you fail to play it well
+- `musical_instrument `
+- `musical_instrument_bad `
+
+ # various shouts and screams
+- `shout default|scream|scream_tortured|roar|squeak|shriek|wail|howl`
+
+ # speach, it is currently linked with either item or monster id, or is special `NPC` or `NPC_loud`
+ # TODO: full vocalization of speech.json
+- `speech ` # examples: talking_doll, creepy_doll, Granade,
+- `speech ` # examples: eyebot, minitank, mi-go, many robots
+- `speech NPC_m|NPC_f|NPC_m_loud|NPC_f_loud` # special for NPCs
+- `speech robot` # special for robotic voice from a machine etc.
+
+ # radio chatter
+- `radio static|inaudible_chatter`
+
+ # humming sounds of various origin
+- `humming electric|machinery`
+
+ # sounds related to (burning) fire
+- `fire ignition`
+
+ # vehicle sounds - engine and other parts in action
+ # note: defaults are executed when specific option is not defined
+- `engine_start ` # note: specific engine start (id of any
+ engine/motor/steam_engine/paddle/oar/sail/etc. )
+- `engine_start combustion|electric|muscle|wind` # default engine starts groups
+- `engine_stop ` # note: specific engine stop (id of any
+ engine/motor/steam_engine/paddle/oar/sail/etc. )
+- `engine_stop combustion|electric|muscle|wind` # default engine stop groups
+
+ # note: internal engine sound is dynamically pitch shifted depending on vehicle speed
+ # it is an ambient looped sound with dedicated channel
+- `engine_working_internal ` # note: sound of engine working heard inside vehicle
+- `engine_working_internal combustion|electric|muscle|wind` # default engine working (inside) groups
+
+ # note: external engine sound volume and pan is dynamically shifted depending on distance and angle to vehicle
+ # volume heard at given distance is linked to engine's `noise_factor` and stress to the engine (see `vehicle::noise_and_smoke()` )
+ # it is an ambient looped sound with dedicated channel
+ # this is a single-channel solution (TODO: multi-channel for every heard vehicle); it picks loudest heard vehicle
+ # there is no pitch shift here (may be introduced when need for it emerges)
+- `engine_working_external ` # note: sound of engine working heard outside vehicle
+- `engine_working_external combustion|electric|muscle|wind` # default engine working (outside)
+ groups
+
+ # note: gear_up/gear_down is done automatically by pitch manipulation
+ # gear shift is dependant on max safe speed, and works in assumption, that there are
+ # 6 forward gears, gear 0 = neutral, and gear -1 = reverse
+- `vehicle gear_shift`
+
+- `vehicle engine_backfire|engine_bangs_start|fault_immobiliser_beep|engine_single_click_fail|engine_multi_click_fail|engine_stutter_fail|engine_clanking_fail`
+- `vehicle horn_loud|horn_medium|horn_low|rear_beeper|chimes|car_alarm`
+- `vehicle reaper|scoop|scoop_thump`
+
+- `vehicle_open ` # note: id of: doors, trunks, hatches, etc.
+- `vehicle_close `
+
+ # miscellaneous sounds
+- `misc flashbang|flash|shockwave|earthquake|stairs_movement|stones_grinding|bomb_ticking|lit_fuse|cow_bell|bell|timber`
+- `misc rc_car_hits_obstacle|rc_car_drives`
+- `misc default|whistle|airhorn|horn_bicycle|servomotor`
+- `misc beep|ding|`
+- `misc rattling|spitting|coughing|heartbeat|puff|inhale|exhale|insect_wings|snake_hiss` # mostly
+ organic noises
diff --git a/doc/TER_FURN_TRANSFORM.md b/doc/TER_FURN_TRANSFORM.md
index 043a68df950d..5cfd6f9e9688 100644
--- a/doc/TER_FURN_TRANSFORM.md
+++ b/doc/TER_FURN_TRANSFORM.md
@@ -1,6 +1,7 @@
# ter_furn_transform
-A ter_furn_transform is a type of json object that allows you to specify a transformation of a tile from one terrain to another terrain, and from one furniture to another furniture.
+A ter_furn_transform is a type of json object that allows you to specify a transformation of a tile
+from one terrain to another terrain, and from one furniture to another furniture.
```json
[
@@ -10,7 +11,7 @@ A ter_furn_transform is a type of json object that allows you to specify a trans
"terrain": [
{
"result": "t_dirt",
- "valid_terrain": [ "t_sand" ],
+ "valid_terrain": ["t_sand"],
"message": "sandy!",
"message_good": true
}
@@ -19,8 +20,9 @@ A ter_furn_transform is a type of json object that allows you to specify a trans
]
```
-The example above turns "sand" into "dirt". It does so by comparing the direct terrain ids. In addition, we can add a fail message to the transform.
-If, however, we wanted to turn sand into "dirt or grass" we can do:
+The example above turns "sand" into "dirt". It does so by comparing the direct terrain ids. In
+addition, we can add a fail message to the transform. If, however, we wanted to turn sand into "dirt
+or grass" we can do:
```json
"terrain": [
@@ -33,8 +35,8 @@ If, however, we wanted to turn sand into "dirt or grass" we can do:
]
```
-message_good is optional and defaults to true.
-This example chooses either dirt or grass at a 1:1 ratio. But, if you want a 4:1 ratio:
+message_good is optional and defaults to true. This example chooses either dirt or grass at a 1:1
+ratio. But, if you want a 4:1 ratio:
```json
"terrain": [
@@ -46,7 +48,8 @@ This example chooses either dirt or grass at a 1:1 ratio. But, if you want a 4:1
]
```
-As you can see, you can mix and match arrays with weights with single strings. Each single string has a weight of 1.
+As you can see, you can mix and match arrays with weights with single strings. Each single string
+has a weight of 1.
All of the above applies to furniture as well.
@@ -72,4 +75,5 @@ You can also use flags instead of specific IDs for both furniture and terrain.
]
```
-A ter_furn_transform can have both terrain and furniture fields. It treats them separately, so no "if dirt, add chair."
+A ter_furn_transform can have both terrain and furniture fields. It treats them separately, so no
+"if dirt, add chair."
diff --git a/doc/TESTING.md b/doc/TESTING.md
index 7fc661d7636a..9cbdeaf8b93f 100644
--- a/doc/TESTING.md
+++ b/doc/TESTING.md
@@ -1,47 +1,42 @@
# Testing Cataclysm
-When you `make` Cataclysm from source, an executable `tests/cata_test` is built
-from test cases found in the `tests/` directory. These tests are written in the
+When you `make` Cataclysm from source, an executable `tests/cata_test` is built from test cases
+found in the `tests/` directory. These tests are written in the
[Catch2 framework](https://github.com/catchorg/Catch2).
-Run `tests/cata_test --help` to see the available command-line options, and/or
-consult the [Catch2 tutorial](https://github.com/catchorg/Catch2/blob/master/docs/tutorial.md)
-for a more thorough introduction.
-
+Run `tests/cata_test --help` to see the available command-line options, and/or consult the
+[Catch2 tutorial](https://github.com/catchorg/Catch2/blob/master/docs/tutorial.md) for a more
+thorough introduction.
## Guidelines
-When creating tests, ensure that all objects used (directly or indirectly) are
-fully reset before testing. Several tests have been rendered flaky by
-properties of randomly generated objects or interactions between tests via
-global objects (often the player object). As a general guideline, test cases
-should be standalone (one test should not rely on the output of another).
-
-When generating objects with json definitions, use REQUIRE statements to assert
-the properties of the objects that the test needs. This protects the test from
-shifting json definitions by making it apparent what about the object changed
-to cause the test to break.
+When creating tests, ensure that all objects used (directly or indirectly) are fully reset before
+testing. Several tests have been rendered flaky by properties of randomly generated objects or
+interactions between tests via global objects (often the player object). As a general guideline,
+test cases should be standalone (one test should not rely on the output of another).
+When generating objects with json definitions, use REQUIRE statements to assert the properties of
+the objects that the test needs. This protects the test from shifting json definitions by making it
+apparent what about the object changed to cause the test to break.
## Writing test cases
-You can choose several ways to organize and express your tests, but the basic
-unit is a `TEST_CASE`. Each test `.cpp` file should define at least one test
-case, with a name, and optional (but strongly encouraged) list of tags:
+You can choose several ways to organize and express your tests, but the basic unit is a `TEST_CASE`.
+Each test `.cpp` file should define at least one test case, with a name, and optional (but strongly
+encouraged) list of tags:
```cpp
- TEST_CASE( "sweet junk food", "[food][junk][sweet]" )
- {
- // ...
- }
+TEST_CASE( "sweet junk food", "[food][junk][sweet]" )
+{
+ // ...
+}
```
-Within the `TEST_CASE`, the Catch2 framework allows a number of different
-macros for logically grouping related parts of the test together. One approach
-that encourages a high level of readability is the
-[BDD](https://en.wikipedia.org/wiki/Behavior-driven_development)
-(behavior-driven-development) style using `GIVEN`, `WHEN`, and `THEN` sections.
-Here's an outline of what a test might look like using those:
+Within the `TEST_CASE`, the Catch2 framework allows a number of different macros for logically
+grouping related parts of the test together. One approach that encourages a high level of
+readability is the [BDD](https://en.wikipedia.org/wiki/Behavior-driven_development)
+(behavior-driven-development) style using `GIVEN`, `WHEN`, and `THEN` sections. Here's an outline of
+what a test might look like using those:
```cpp
TEST_CASE( "sweet junk food", "[food][junk][sweet]" )
@@ -57,11 +52,10 @@ Here's an outline of what a test might look like using those:
}
```
-Thinking in these terms may help you understand the logical progression from
-setting up the test and initializing the test data (usually expressed by the
-`GIVEN` part), performing some operation that generates a result you want to
-test (often contained in the `WHEN` part), and verifying this result meets your
-expectations (the `THEN` part, naturally).
+Thinking in these terms may help you understand the logical progression from setting up the test and
+initializing the test data (usually expressed by the `GIVEN` part), performing some operation that
+generates a result you want to test (often contained in the `WHEN` part), and verifying this result
+meets your expectations (the `THEN` part, naturally).
Filling in the above with actual test code might look like this:
@@ -86,76 +80,70 @@ Filling in the above with actual test code might look like this:
}
```
-Let's look at each part in turn to see what's going on. First, we declare an
-`avatar`, representing the character or player. This test is going to check the
-player's morale, so we clear it to ensure a clean slate:
+Let's look at each part in turn to see what's going on. First, we declare an `avatar`, representing
+the character or player. This test is going to check the player's morale, so we clear it to ensure a
+clean slate:
```cpp
- avatar dummy;
- dummy.clear_morale();
+avatar dummy;
+dummy.clear_morale();
```
-Inside the `GIVEN`, we want some code that implements what the `GIVEN` is
-saying - that the character has a sweet tooth. In the game's code, this is
-represented with the `PROJUNK` trait, so we can set that using `toggle_trait`:
+Inside the `GIVEN`, we want some code that implements what the `GIVEN` is saying - that the
+character has a sweet tooth. In the game's code, this is represented with the `PROJUNK` trait, so we
+can set that using `toggle_trait`:
```cpp
- GIVEN( "character has a sweet tooth" ) {
- dummy.toggle_trait( trait_PROJUNK );
+GIVEN( "character has a sweet tooth" ) {
+ dummy.toggle_trait( trait_PROJUNK );
```
-Now, notice we are nested inside the `GIVEN` - for the rest of the scope of
-that `GIVEN`, the `dummy` will have this trait. For this simple test it will
-only affect a couple more lines, but when your tests become larger and more
-complex (which they will), you will need to be aware of these nested scopes and
-how you can use them to avoid cross-pollution between your tests.
+Now, notice we are nested inside the `GIVEN` - for the rest of the scope of that `GIVEN`, the
+`dummy` will have this trait. For this simple test it will only affect a couple more lines, but when
+your tests become larger and more complex (which they will), you will need to be aware of these
+nested scopes and how you can use them to avoid cross-pollution between your tests.
-Anyway, now that our `dummy` has a sweet tooth, we want them to eat something
-sweet, so we can spawn the `neccowafers` item and tell them to eat some:
+Anyway, now that our `dummy` has a sweet tooth, we want them to eat something sweet, so we can spawn
+the `neccowafers` item and tell them to eat some:
```cpp
- WHEN( "they eat some junk food" ) {
- dummy.eat( item( "neccowafers" ) );
+WHEN( "they eat some junk food" ) {
+ dummy.eat( item( "neccowafers" ) );
```
-The function(s) you invoke at this point are often the focus of your testing;
-the goal is to exercise some pathway through those function(s) in such a way
-that your code will be reached, and thus covered by the test. The `eat`
-function is used as an example here, but that is quite a high-level, complex
-function itself, with many behaviors and sub-behaviors. Since this test case is
-only interested in the morale effect, a better test would invoke a lower-level
-function that `eat` invokes, such as `modify_morale`.
+The function(s) you invoke at this point are often the focus of your testing; the goal is to
+exercise some pathway through those function(s) in such a way that your code will be reached, and
+thus covered by the test. The `eat` function is used as an example here, but that is quite a
+high-level, complex function itself, with many behaviors and sub-behaviors. Since this test case is
+only interested in the morale effect, a better test would invoke a lower-level function that `eat`
+invokes, such as `modify_morale`.
-Our `dummy` has eaten the `neccowafers`, but did it do anything? Because they
-have a sweet tooth, they should get a specific morale bonus known as
-`MORALE_SWEETTOOTH`, and it should be at least `5` in magnitude:
+Our `dummy` has eaten the `neccowafers`, but did it do anything? Because they have a sweet tooth,
+they should get a specific morale bonus known as `MORALE_SWEETTOOTH`, and it should be at least `5`
+in magnitude:
```cpp
- THEN( "they get a morale bonus from its sweetness" ) {
- CHECK( dummy.has_morale( MORALE_SWEETTOOTH ) >= 5 );
- }
+THEN( "they get a morale bonus from its sweetness" ) {
+ CHECK( dummy.has_morale( MORALE_SWEETTOOTH ) >= 5 );
+}
```
-This `CHECK` macro takes a boolean expression, failing the test if the
-expression is false. Likewise, you can use `CHECK_FALSE`, which will fail if
-the expression is true.
-
+This `CHECK` macro takes a boolean expression, failing the test if the expression is false.
+Likewise, you can use `CHECK_FALSE`, which will fail if the expression is true.
## Requiring or Checking
-While the `CHECK` and `CHECK_FALSE` macros make assertions about the truth or
-falsity of expressions, they still allow the test to continue, even when they
-fail. This lets you do several `CHECK`s, and be informed if one *or more* of
-them do not meet your expectations.
+While the `CHECK` and `CHECK_FALSE` macros make assertions about the truth or falsity of
+expressions, they still allow the test to continue, even when they fail. This lets you do several
+`CHECK`s, and be informed if one _or more_ of them do not meet your expectations.
-Another kind of assertion is the `REQUIRE` (and its counterpart
-`REQUIRE_FALSE`). Unlike the `CHECK` assertions, `REQUIRE` will not continue if
-it fails - this assertion is considered essential for the test to continue.
+Another kind of assertion is the `REQUIRE` (and its counterpart `REQUIRE_FALSE`). Unlike the `CHECK`
+assertions, `REQUIRE` will not continue if it fails - this assertion is considered essential for the
+test to continue.
-A `REQUIRE` is useful when you wish to double-check your assumptions after
-making some change to the system state. For example, here are a couple of
-`REQUIRE`s added to the sweet-tooth test, to ensure our `dummy` really has the
-desired trait, and that the `neccowafers` really are junk food:
+A `REQUIRE` is useful when you wish to double-check your assumptions after making some change to the
+system state. For example, here are a couple of `REQUIRE`s added to the sweet-tooth test, to ensure
+our `dummy` really has the desired trait, and that the `neccowafers` really are junk food:
```cpp
GIVEN( "character has a sweet tooth" ) {
@@ -175,11 +163,10 @@ desired trait, and that the `neccowafers` really are junk food:
}
```
-We use `REQUIRE` here, because there is no reason to continue the test if these
-fail. If our assumptions are wrong, nothing that follows is valid. Clearly, if
-`toggle_trait` failed to give the character the `PROJUNK` trait, or if the
-`neccowafers` turn out not to be made of sugar after all, then our test of the
-morale bonus is meaningless.
+We use `REQUIRE` here, because there is no reason to continue the test if these fail. If our
+assumptions are wrong, nothing that follows is valid. Clearly, if `toggle_trait` failed to give the
+character the `PROJUNK` trait, or if the `neccowafers` turn out not to be made of sugar after all,
+then our test of the morale bonus is meaningless.
-You can think of `REQUIRE` as being a prerequisite for the test, while `CHECK`
-is looking at the results of the test.
+You can think of `REQUIRE` as being a prerequisite for the test, while `CHECK` is looking at the
+results of the test.
diff --git a/doc/TILESET.md b/doc/TILESET.md
index 51dc6136ed09..0d04cddda02a 100644
--- a/doc/TILESET.md
+++ b/doc/TILESET.md
@@ -1,39 +1,78 @@
# TILESETS
-A tileset provides graphic images for the game. Each tileset has one or more tilesheets of image sprites and a `tile_config.json` file that describes how to map the contents of the sprite sheets to various entities in the game. It also has a `tileset.txt` file that provides metadata.
+
+A tileset provides graphic images for the game. Each tileset has one or more tilesheets of image
+sprites and a `tile_config.json` file that describes how to map the contents of the sprite sheets to
+various entities in the game. It also has a `tileset.txt` file that provides metadata.
## Compositing Tilesets
-Prior October 2019, tilesets had to be submitted to the repo with each tilesheet fully composited and the sprite indices in `tile_config.json` calculated by hand. After October 2019, tilesets can be submitted to repos as directories of individual sprite files and tile entry JSON files that used sprite file names, and a Python script that runs at compile time would merge the sprite images into tilesheets, convert the files names into sprite indices for the tile entries, and merge the tile entries into a `tile_config.json`.
-For the rest of this document, tilesets that are submitted as fully composited tilesheets are called legacy tilesets, and tilesets that submitted as individual sprite image files are compositing tilesets.
+Prior October 2019, tilesets had to be submitted to the repo with each tilesheet fully composited
+and the sprite indices in `tile_config.json` calculated by hand. After October 2019, tilesets can be
+submitted to repos as directories of individual sprite files and tile entry JSON files that used
+sprite file names, and a Python script that runs at compile time would merge the sprite images into
+tilesheets, convert the files names into sprite indices for the tile entries, and merge the tile
+entries into a `tile_config.json`.
+
+For the rest of this document, tilesets that are submitted as fully composited tilesheets are called
+legacy tilesets, and tilesets that submitted as individual sprite image files are compositing
+tilesets.
### tools/gfx_tools/decompose.py
-This is a Python script that will convert a legacy tileset into a compositing tileset. It reads the `tile_config.json` and assigns semi-arbitrary file names to each sprite index. Then it changes all the sprite indexes references to the file names. Then it breaks up `tile_config.json` into many small tile_entry JSON files with arbitrary file names, and pulls out each sprite and writes it to aseparate file.
+
+This is a Python script that will convert a legacy tileset into a compositing tileset. It reads the
+`tile_config.json` and assigns semi-arbitrary file names to each sprite index. Then it changes all
+the sprite indexes references to the file names. Then it breaks up `tile_config.json` into many
+small tile_entry JSON files with arbitrary file names, and pulls out each sprite and writes it to
+aseparate file.
It requires pyvips to do the image processing.
-It takes a single mandatory argument, which is the path to the tileset directory. For example:
-`python tools/gfx_tools/decompose.py gfx/ChestHole16Tileset` will convert the legacy ChestHole16 tileset to a compositing tileset.
+It takes a single mandatory argument, which is the path to the tileset directory. For example:
+`python tools/gfx_tools/decompose.py gfx/ChestHole16Tileset` will convert the legacy ChestHole16
+tileset to a compositing tileset.
-decompose.py creates a sufficient directory hierarchy and file names for a tileset to be compositing, but it is machine generated and badly organized. New compositing tilesets should use more sensible file names and a better organization.
+decompose.py creates a sufficient directory hierarchy and file names for a tileset to be
+compositing, but it is machine generated and badly organized. New compositing tilesets should use
+more sensible file names and a better organization.
-It shouldn't be necessary to run decompose.py very often. Legacy tilesets should only need to be converted to composite tilesets one time.
+It shouldn't be necessary to run decompose.py very often. Legacy tilesets should only need to be
+converted to composite tilesets one time.
### tools/gfx_tools/compose.py
-This is a Python script that creates the tilesheets for a compositing tileset. It reads all of the directories in a tileset's directory with names that start with `pngs_` for sprite files and `tile_entry` JSON files, creates mappings of sprite file names to indices, merges the sprite files into tilesheets, changes all of the sprite file name references in the `tile_entries` to indices, and merges the `tile_entries` into a `tile_config.json`.
+
+This is a Python script that creates the tilesheets for a compositing tileset. It reads all of the
+directories in a tileset's directory with names that start with `pngs_` for sprite files and
+`tile_entry` JSON files, creates mappings of sprite file names to indices, merges the sprite files
+into tilesheets, changes all of the sprite file name references in the `tile_entries` to indices,
+and merges the `tile_entries` into a `tile_config.json`.
Like decompose.py, it requires pyvips to the image processing.
The original sprite files and `tile_entry` JSON files are preserved.
### directory structure
-Each compositing tileset has one or more directories in it with a name that starts with `pngs_`, such as `pngs_tree_32x40` or `pngs_overlay`. These are the image directories. All of the sprites in an image directory must have the same height and width and will be merged into a single tilesheet.
-It is recommended that tileset developers include the sprite dimensions in the image directory name, but this is not required. `pngs_overlay_24x24` is preferred over `pngs_overlay` but both are allowed. As each image directory creates its own tilesheet, and tilesheets should be as large as possible for performance reasons, tileset developers are strongly encouraged to minimize the number of image directories.
+Each compositing tileset has one or more directories in it with a name that starts with `pngs_`,
+such as `pngs_tree_32x40` or `pngs_overlay`. These are the image directories. All of the sprites in
+an image directory must have the same height and width and will be merged into a single tilesheet.
+
+It is recommended that tileset developers include the sprite dimensions in the image directory name,
+but this is not required. `pngs_overlay_24x24` is preferred over `pngs_overlay` but both are
+allowed. As each image directory creates its own tilesheet, and tilesheets should be as large as
+possible for performance reasons, tileset developers are strongly encouraged to minimize the number
+of image directories.
-Each image directory contains a hierarchy of subdirectories, `tile_entry` JSON files, and sprite files. There is no restriction on the arrangement or names of these files, except for `tile_entry` JSON files for expansion tilesheets must be at the top level of the image directory. Subdirectories are not required but are recommended to keep things manageable.
+Each image directory contains a hierarchy of subdirectories, `tile_entry` JSON files, and sprite
+files. There is no restriction on the arrangement or names of these files, except for `tile_entry`
+JSON files for expansion tilesheets must be at the top level of the image directory. Subdirectories
+are not required but are recommended to keep things manageable.
#### `tile_entry` JSON
-Each `tile_entry` JSON is a dictionary that describes how to map one or more game entities to one or more sprites. The simplest version has a single game entity, a single foreground sprite, an *optional* background sprite, and a rotation value. For instance:
+
+Each `tile_entry` JSON is a dictionary that describes how to map one or more game entities to one or
+more sprites. The simplest version has a single game entity, a single foreground sprite, an
+_optional_ background sprite, and a rotation value. For instance:
+
```C++
{ // this is an object and doesn't require a list
"id": "mon_cat", // the game entity represented by this sprite
@@ -43,33 +82,56 @@ Each `tile_entry` JSON is a dictionary that describes how to map one or more gam
}
```
-The values in `"id"`, `"fg"`, and `"bg"` can be repeated within an image directory or in different image directories. `"fg"` and `"bg"` sprite images can be referenced across image directories, but the sprites must be stored in an image directory with other sprites of the same height and width.
+The values in `"id"`, `"fg"`, and `"bg"` can be repeated within an image directory or in different
+image directories. `"fg"` and `"bg"` sprite images can be referenced across image directories, but
+the sprites must be stored in an image directory with other sprites of the same height and width.
+
+`"id"` can also be a list of multiple game entities sharing the same sprite, like
+`"id": ["vp_door"], ["vp_hddoor"]`. `"id"` can be any vehicle part, terrain, furniture, item, or
+monster in the game. The special ids `"player_female", "player_male", "npc_female", "npc_male"` are
+used to identify the sprites for the player avatar and NPCs. The special id `"unknown"` provides a
+sprite that is displayed when an entity has no other sprite.
-`"id"` can also be a list of multiple game entities sharing the same sprite, like `"id": ["vp_door"], ["vp_hddoor"]`. `"id"` can be any vehicle part, terrain, furniture, item, or monster in the game. The special ids `"player_female", "player_male", "npc_female", "npc_male"` are used to identify the sprites for the player avatar and NPCs. The special id `"unknown"` provides a sprite that is displayed when an entity has no other sprite.
+The special suffixes `_season_spring`, `_season_summer`, `_season_autumn`, and `_season_winter` can
+be applied to any entity id to create a seasonal variant for that entity that will be displayed in
+the appropriate season like this `"id": "mon_wolf_season_winter"`.
-The special suffixes `_season_spring`, `_season_summer`, `_season_autumn`, and `_season_winter` can be applied to any entity id to create a seasonal variant for that entity that will be displayed in the appropriate season like this `"id": "mon_wolf_season_winter"`.
+The special prefixes `overlay_mutation_`, `overlay_female_mutation_`, `overlay_male_mutation_` can
+prefix any trait or bionic in the game to specify an overlay image that will be laid over the player
+and NPC sprites to indicate they have that mutation or bionic.
-The special prefixes `overlay_mutation_`, `overlay_female_mutation_`, `overlay_male_mutation_` can prefix any trait or bionic in the game to specify an overlay image that will be laid over the player and NPC sprites to indicate they have that mutation or bionic.
+The special prefixes `overlay_worn_`, `overlay_female_worn_`, `overlay_male_worn_` can prefix any
+item in the game to specify an overlay image that will be laid over the player and NPC sprites to
+indicate they are wearing that item.
-The special prefixes `overlay_worn_`, `overlay_female_worn_`, `overlay_male_worn_` can prefix any item in the game to specify an overlay image that will be laid over the player and NPC sprites to indicate they are wearing that item.
+The special prefixes `overlay_wielded_`, `overlay_female_wielded_`, `overlay_male_wielded_` can
+prefix any item in the game to specify an overlay image that will be laid over the player and NPC
+sprites to indicate they are holding that item.
-The special prefixes `overlay_wielded_`, `overlay_female_wielded_`, `overlay_male_wielded_` can prefix any item in the game to specify an overlay image that will be laid over the player and NPC sprites to indicate they are holding that item.
+`"fg"` and `"bg"` can also be a list of 2 or 4 pre-rotated rotational variants, like
+`"bg": ["t_wall_n", "t_wall_e", "t_wall_s", "t_wall_w"]` or
+`"fg": ["mon_dog_left", "mon_dog_right"]`.
-`"fg"` and `"bg"` can also be a list of 2 or 4 pre-rotated rotational variants, like `"bg": ["t_wall_n", "t_wall_e", "t_wall_s", "t_wall_w"]` or `"fg": ["mon_dog_left", "mon_dog_right"]`.
+`"fg"` and `"bg"` can also be a list of dictionaries of weighted, randomly chosen options, any of
+which can also be a rotated list:
-`"fg"` and `"bg"` can also be a list of dictionaries of weighted, randomly chosen options, any of which can also be a rotated list:
```C++
- "fg": [
- { "weight": 50, "sprite": "t_dirt_brown"}, // appears in 50 of 53 tiles
- { "weight": 1, "sprite": "t_dirt_black_specks"}, // appears 1 in 53 tiles
- { "weight": 1, "sprite": "t_dirt_specks_gray"},
- { "weight": 1, "sprite": "t_patchy_grass"} // file names are arbitrary
- ],
+"fg": [
+ { "weight": 50, "sprite": "t_dirt_brown"}, // appears in 50 of 53 tiles
+ { "weight": 1, "sprite": "t_dirt_black_specks"}, // appears 1 in 53 tiles
+ { "weight": 1, "sprite": "t_dirt_specks_gray"},
+ { "weight": 1, "sprite": "t_patchy_grass"} // file names are arbitrary
+],
```
-`"multitle"` is an *optional* field. If it is present and `true`, there must be an `additional_tiles` list with 1 or more dictionaries for entities and sprites associated with this tile, such as broken versions of an item or wall connections. Each dictionary in the list has an `"id`" field, as above, and a `"fg"` field, which can be a single filename, a list of filenames, or a list of dictionaries as above.
+`"multitle"` is an _optional_ field. If it is present and `true`, there must be an
+`additional_tiles` list with 1 or more dictionaries for entities and sprites associated with this
+tile, such as broken versions of an item or wall connections. Each dictionary in the list has an
+`"id`" field, as above, and a `"fg"` field, which can be a single filename, a list of filenames, or
+a list of dictionaries as above.
Each `tile_entry.json` file can have a single object in it, or a list of 1 or more objects like so:
+
```C++
[
{ "id": "mon_zombie", "fg": "mon_zombie", "bg": "mon_zombie_bg", "rotates": false },
@@ -78,20 +140,33 @@ Each `tile_entry.json` file can have a single object in it, or a list of 1 or mo
]
```
-Having a list of tile entries in a file may be useful for organization, but completely unrelated entries may all exist in the same file without any complications.
+Having a list of tile entries in a file may be useful for organization, but completely unrelated
+entries may all exist in the same file without any complications.
#### expansion `tile_entry` JSON
-Tilesheets can have expansion tilesheets, which are tilesheets from mods. Each expansion tilesheet is a single `"id"` value, `"rotates": false"`, and `"fg": 0`. Expansion `tile_entry` JSON are the only `tile_entry` JSONs that use an integer value for `"fg"` and that value must be 0. Expansion `tile_entry` JSONs must be located at the top layer of each image directory.
+
+Tilesheets can have expansion tilesheets, which are tilesheets from mods. Each expansion tilesheet
+is a single `"id"` value, `"rotates": false"`, and `"fg": 0`. Expansion `tile_entry` JSON are the
+only `tile_entry` JSONs that use an integer value for `"fg"` and that value must be 0. Expansion
+`tile_entry` JSONs must be located at the top layer of each image directory.
#### Sprite Images
-Every sprite inside an image directory must have the same height and width as every other sprite in the image directory.
-Sprites can be organized into subdirectories within the image directory however the tileset developer prefers. Sprite filenames are completely arbitrary and should be chosen using a scheme that makes sense to the tileset developer.
+Every sprite inside an image directory must have the same height and width as every other sprite in
+the image directory.
+
+Sprites can be organized into subdirectories within the image directory however the tileset
+developer prefers. Sprite filenames are completely arbitrary and should be chosen using a scheme
+that makes sense to the tileset developer.
-After loading a tileset, config/debug.log will contain a space separated list of every entity missing a sprite in the tileset. Entities that have sprites because of a `"looks_like"` definition will not show up in the list.
+After loading a tileset, config/debug.log will contain a space separated list of every entity
+missing a sprite in the tileset. Entities that have sprites because of a `"looks_like"` definition
+will not show up in the list.
### `tile_info.json`
-Each compositing tileset *must* have a `tile_info.json`, laid out like so:
+
+Each compositing tileset _must_ have a `tile_info.json`, laid out like so:
+
```
[
{
@@ -118,125 +193,150 @@ Each compositing tileset *must* have a `tile_info.json`, laid out like so:
}
]
```
-The first dictionary is mandatory, and gives the default sprite width and sprite height for all tilesheets in the tileset. Each of the image directories must have a separate dictionary, containing the tilesheet png name as its key. If the tilesheet has the default sprite dimensions and no special offsets, it can have an empty dictionary as the value for the tilesheet name key. Otherwise, it should have a dictionary of the sprite offsets, height, and width.
-
-A special key is `"fallback"` which should be `true` if present. If a tilesheet is designated as fallback, it will be treated as a tilesheet of fallback ASCII characters. `compose.py` will also compose the fallback tilesheet to the end of the tileset, and will add a "fallback.png" to `tile_config.json` if there is no `"fallback"` entry in `tile_info.json`.
-A special is `"filler"` which should be `true` if present. If a tilesheet is designated as filler, entries from its directory will be ignored if an entry from a non-filler directory has already defined the same id. Entries will also be ignored if the id was already defined by in the filler directory. Also, pngs from a filler directory will be ignored if they share a name with a png from a non-filler directory. A filler tilesheet is useful when upgrading the art in a tileset: old, low-quality art can be placed on filler tilesheet and will be automatically replaced as better images are added to the non-filler tilesheets.
+The first dictionary is mandatory, and gives the default sprite width and sprite height for all
+tilesheets in the tileset. Each of the image directories must have a separate dictionary, containing
+the tilesheet png name as its key. If the tilesheet has the default sprite dimensions and no special
+offsets, it can have an empty dictionary as the value for the tilesheet name key. Otherwise, it
+should have a dictionary of the sprite offsets, height, and width.
+
+A special key is `"fallback"` which should be `true` if present. If a tilesheet is designated as
+fallback, it will be treated as a tilesheet of fallback ASCII characters. `compose.py` will also
+compose the fallback tilesheet to the end of the tileset, and will add a "fallback.png" to
+`tile_config.json` if there is no `"fallback"` entry in `tile_info.json`.
+
+A special is `"filler"` which should be `true` if present. If a tilesheet is designated as filler,
+entries from its directory will be ignored if an entry from a non-filler directory has already
+defined the same id. Entries will also be ignored if the id was already defined by in the filler
+directory. Also, pngs from a filler directory will be ignored if they share a name with a png from a
+non-filler directory. A filler tilesheet is useful when upgrading the art in a tileset: old,
+low-quality art can be placed on filler tilesheet and will be automatically replaced as better
+images are added to the non-filler tilesheets.
## Legacy tilesets
+
### tilesheets
-Each tilesheet contains 1 or more sprites with the same width and height. Each tilesheet contains one or more rows of exactly 16 sprites. Sprite index 0 is special and the first sprite of the first tilesheet in a tileset should be blank. Indices run sequentially through each sheet and continue incrementing for each new sheet without reseting, so index 32 is the first sprite in the third row of the first sheet. If the first sheet has 320 sprites in it, index 352 would be the first sprite of the third row of the second sheet.
+
+Each tilesheet contains 1 or more sprites with the same width and height. Each tilesheet contains
+one or more rows of exactly 16 sprites. Sprite index 0 is special and the first sprite of the first
+tilesheet in a tileset should be blank. Indices run sequentially through each sheet and continue
+incrementing for each new sheet without reseting, so index 32 is the first sprite in the third row
+of the first sheet. If the first sheet has 320 sprites in it, index 352 would be the first sprite of
+the third row of the second sheet.
### `tile_config`
-Each legacy tileset has a `tile_config.json` describing how to map the contents of a sprite sheet to various tile identifiers, different orientations, etc. The ordering of the overlays used for displaying mutations can be controlled as well. The ordering can be used to override the default ordering provided in `mutation_ordering.json`. Example:
+
+Each legacy tileset has a `tile_config.json` describing how to map the contents of a sprite sheet to
+various tile identifiers, different orientations, etc. The ordering of the overlays used for
+displaying mutations can be controlled as well. The ordering can be used to override the default
+ordering provided in `mutation_ordering.json`. Example:
```C++
- { // whole file is a single object
- "tile_info": [ // tile_info is mandatory
- {
- "height": 32,
- "width": 32,
- "iso" : true, // Optional. Indicates an isometric tileset. Defaults to false.
- "pixelscale" : 2 // Optional. Sets a multiplier for resizing a tileset. Defaults to 1.
- }
- ],
- "tiles-new": [ // tiles-new is an array of sprite sheets
- { // alternately, just one "tiles" array
- "file": "tiles.png", // file containing sprites in a grid
- "tiles": [ // array with one entry per tile
- {
- "id": "10mm", // id is how the game maps things to sprites
- "fg": 1, // lack of prefix mostly indicates items
- "bg": 632, // fg and bg can be sprite indexes in the image
- "rotates": false
- },
- {
- "id": "t_wall", // "t_" indicates terrain
- "fg": [2918, 2919, 2918, 2919], // 2 or 4 sprite numbers indicates pre-rotated
- "bg": 633,
- "rotates": true,
- "multitile": true,
- "additional_tiles": [ // connected/combined versions of sprite
- { // or variations, see below
- "id": "center",
- "fg": [2919, 2918, 2919, 2918]
- },
- {
- "id": "corner",
- "fg": [2924, 2922, 2922, 2923]
- },
- {
- "id": "end_piece",
- "fg": [2918, 2919, 2918, 2919]
- },
- {
- "id": "t_connection",
- "fg": [2919, 2918, 2919, 2918]
- },
- {
- "id": "unconnected",
- "fg": 2235
- }
- ]
- },
- {
- "id": "vp_atomic_lamp", // "vp_" vehicle part
- "fg": 3019,
- "bg": 632,
- "rotates": false,
- "multitile": true,
- "additional_tiles": [
- {
- "id": "broken", // variant sprite
- "fg": 3021
- }
- ]
- },
- {
- "id": "t_dirt",
- "rotates": false,
- "fg": [
- { "weight":50, "sprite":640}, // weighted random variants
- { "weight":1, "sprite":3620},
- { "weight":1, "sprite":3621},
- { "weight":1, "sprite":3622}
- ]
- },
- {
- "id": [
- "overlay_mutation_GOURMAND", // character overlay for mutation
- "overlay_mutation_male_GOURMAND", // overlay for specified gender
- "overlay_mutation_active_GOURMAND" // overlay for activated mutation
- ],
- "fg": 4040
- }
- ]
- },
- { // second entry in tiles-new
- "file": "moretiles.png", // another sprite sheet
- "tiles": [
- {
- "id": ["xxx","yyy"], // define two ids at once
- "fg": 1,
- "bg": 234
- }
- ]
- }d
- ],
- "overlay_ordering": [
- {
- "id" : "WINGS_BAT", // mutation name, in a string or array of strings
- "order" : 1000 // range from 0 - 9999, 9999 being the topmost layer
- },
- {
- "id" : [ "PLANTSKIN", "BARK" ], // mutation name, in a string or array of strings
- "order" : 3500 // order is applied to all items in the array
- },
- {
- "id" : "bio_armor_torso", // Overlay order of bionics is controlled in the same way
- "order" : 500
- }
- ]
- }
+{ // whole file is a single object
+ "tile_info": [ // tile_info is mandatory
+ {
+ "height": 32,
+ "width": 32,
+ "iso" : true, // Optional. Indicates an isometric tileset. Defaults to false.
+ "pixelscale" : 2 // Optional. Sets a multiplier for resizing a tileset. Defaults to 1.
+ }
+ ],
+ "tiles-new": [ // tiles-new is an array of sprite sheets
+ { // alternately, just one "tiles" array
+ "file": "tiles.png", // file containing sprites in a grid
+ "tiles": [ // array with one entry per tile
+ {
+ "id": "10mm", // id is how the game maps things to sprites
+ "fg": 1, // lack of prefix mostly indicates items
+ "bg": 632, // fg and bg can be sprite indexes in the image
+ "rotates": false
+ },
+ {
+ "id": "t_wall", // "t_" indicates terrain
+ "fg": [2918, 2919, 2918, 2919], // 2 or 4 sprite numbers indicates pre-rotated
+ "bg": 633,
+ "rotates": true,
+ "multitile": true,
+ "additional_tiles": [ // connected/combined versions of sprite
+ { // or variations, see below
+ "id": "center",
+ "fg": [2919, 2918, 2919, 2918]
+ },
+ {
+ "id": "corner",
+ "fg": [2924, 2922, 2922, 2923]
+ },
+ {
+ "id": "end_piece",
+ "fg": [2918, 2919, 2918, 2919]
+ },
+ {
+ "id": "t_connection",
+ "fg": [2919, 2918, 2919, 2918]
+ },
+ {
+ "id": "unconnected",
+ "fg": 2235
+ }
+ ]
+ },
+ {
+ "id": "vp_atomic_lamp", // "vp_" vehicle part
+ "fg": 3019,
+ "bg": 632,
+ "rotates": false,
+ "multitile": true,
+ "additional_tiles": [
+ {
+ "id": "broken", // variant sprite
+ "fg": 3021
+ }
+ ]
+ },
+ {
+ "id": "t_dirt",
+ "rotates": false,
+ "fg": [
+ { "weight":50, "sprite":640}, // weighted random variants
+ { "weight":1, "sprite":3620},
+ { "weight":1, "sprite":3621},
+ { "weight":1, "sprite":3622}
+ ]
+ },
+ {
+ "id": [
+ "overlay_mutation_GOURMAND", // character overlay for mutation
+ "overlay_mutation_male_GOURMAND", // overlay for specified gender
+ "overlay_mutation_active_GOURMAND" // overlay for activated mutation
+ ],
+ "fg": 4040
+ }
+ ]
+ },
+ { // second entry in tiles-new
+ "file": "moretiles.png", // another sprite sheet
+ "tiles": [
+ {
+ "id": ["xxx","yyy"], // define two ids at once
+ "fg": 1,
+ "bg": 234
+ }
+ ]
+ }d
+ ],
+ "overlay_ordering": [
+ {
+ "id" : "WINGS_BAT", // mutation name, in a string or array of strings
+ "order" : 1000 // range from 0 - 9999, 9999 being the topmost layer
+ },
+ {
+ "id" : [ "PLANTSKIN", "BARK" ], // mutation name, in a string or array of strings
+ "order" : 3500 // order is applied to all items in the array
+ },
+ {
+ "id" : "bio_armor_torso", // Overlay order of bionics is controlled in the same way
+ "order" : 500
+ }
+ ]
+}
```
diff --git a/doc/TRANSLATING.md b/doc/TRANSLATING.md
index 845d29f48071..9e704a7047c3 100644
--- a/doc/TRANSLATING.md
+++ b/doc/TRANSLATING.md
@@ -18,77 +18,71 @@
## Translators
-The official location for translating Cataclysm: BN is the
-[Transifex translations project][1].
+The official location for translating Cataclysm: BN is the [Transifex translations project][1].
-If you're looking for a way to translate mods not included
-in game repository, see [TRANSLATING_MODS.md](TRANSLATING_MODS.md).
+If you're looking for a way to translate mods not included in game repository, see
+[TRANSLATING_MODS.md](TRANSLATING_MODS.md).
Some of the currently supported languages are:
-* Arabic
-* Bulgarian
-* Chinese (Simplified)
-* Chinese (Traditional)
-* Dutch
-* Esperanto
-* French
-* German
-* Italian (Italy)
-* Japanese
-* Korean
-* Polish
-* Portuguese (Brazil)
-* Russian
-* Serbian
-* Spanish (Argentina)
-* Spanish (Spain)
-* Turkish
-
-Don't see your language in the list above? You can add it into the project at
-Transifex!
+- Arabic
+- Bulgarian
+- Chinese (Simplified)
+- Chinese (Traditional)
+- Dutch
+- Esperanto
+- French
+- German
+- Italian (Italy)
+- Japanese
+- Korean
+- Polish
+- Portuguese (Brazil)
+- Russian
+- Serbian
+- Spanish (Argentina)
+- Spanish (Spain)
+- Turkish
+
+Don't see your language in the list above? You can add it into the project at Transifex!
### Getting Started
-To begin translating, head over the [translation project][1] and click on the
-"Help Translate Cataclysm: BN" button.
-This should take you to a page where you can either create a free account on
+To begin translating, head over the [translation project][1] and click on the "Help Translate
+Cataclysm: BN" button. This should take you to a page where you can either create a free account on
Transifex, or login using GitHub, Google+ or LinkedIn.
![Start translating](img/translating-start.png)
-After you've created your account, return to the [translation project][1] and
-click on the "Join team" button.
-This will open a window where you can choose the language you are interested on
+After you've created your account, return to the [translation project][1] and click on the "Join
+team" button. This will open a window where you can choose the language you are interested on
translating, so pick one and click the "Join" button.
![Join project](img/translating-join.png)
-After this, the most straightforward thing to do is to reload the page,
-which should redirect you to the translation project's dashboard.
-Here, you can click the "Languages" link on the sidebar to see the list of
-supported languages and the current progress of the translation effort.
+After this, the most straightforward thing to do is to reload the page, which should redirect you to
+the translation project's dashboard. Here, you can click the "Languages" link on the sidebar to see
+the list of supported languages and the current progress of the translation effort.
-Note that you can request for the inclusion of additional languages,
-if the one you are interested in is not available on the list.
+Note that you can request for the inclusion of additional languages, if the one you are interested
+in is not available on the list.
![Language list](img/translating-list.png)
-From this list, you can click on the language of your choice, and then click on
-the "Translate" to get started right away. Otherwise, you can click on any
-other language and click on the "Join team" button, if you are interested in
-translating for that language as well.
+From this list, you can click on the language of your choice, and then click on the "Translate" to
+get started right away. Otherwise, you can click on any other language and click on the "Join team"
+button, if you are interested in translating for that language as well.
-After clicking on the "Translate" button, you will be taken to the web editor.
-To begin, you need to choose a resource to translate. Most of the in-game text
-is contained in the `cataclysm-bright-nights` resource, so click on it to start.
+After clicking on the "Translate" button, you will be taken to the web editor. To begin, you need to
+choose a resource to translate. Most of the in-game text is contained in the
+`cataclysm-bright-nights` resource, so click on it to start.
![Choose a resource](img/translating-resource.png)
-At this point, the editor should show you the list of text available for
-translation, now you only need to click on the string you want to translate and
-type your translation on the translation area on the right side of the screen.
-Click on the "Save" button when you are satisfied with your translation.
+At this point, the editor should show you the list of text available for translation, now you only
+need to click on the string you want to translate and type your translation on the translation area
+on the right side of the screen. Click on the "Save" button when you are satisfied with your
+translation.
![Web editor](img/translating-editor.png)
@@ -96,75 +90,68 @@ See [Transifex's documentation][2] for more information.
### Grammatical gender
-For NPC dialogue (and potentially other strings) some languages may wish to
-have alternate translations depending on the gender of the conversation
-participants. This two pieces of initial configuration.
+For NPC dialogue (and potentially other strings) some languages may wish to have alternate
+translations depending on the gender of the conversation participants. This two pieces of initial
+configuration.
-1. The dialogue must have the relevant genders listed in the json file defining
- it. See [the NPC docs](NPCs.md).
-2. Each language must specify the genders it wishes to use via `genders` list
- of the language's entry in `data/raw/languages.json`. Don't add genders there
- until you're sure you will need them, because it will make more work for
- you. Current choices are: `m` (male), `f` (female), `n` (neuter).
- If you need different genders than the ones currently supported, see
- relevant note in `src/language.h`.
+1. The dialogue must have the relevant genders listed in the json file defining it. See
+ [the NPC docs](NPCs.md).
+2. Each language must specify the genders it wishes to use via `genders` list of the language's
+ entry in `data/raw/languages.json`. Don't add genders there until you're sure you will need them,
+ because it will make more work for you. Current choices are: `m` (male), `f` (female), `n`
+ (neuter). If you need different genders than the ones currently supported, see relevant note in
+ `src/language.h`.
-Having done this, the relevant dialogue lines will appear multiple times for
-translation, with different genders specified in the message context. For
-example, a context of `npc:m` would indicate that the NPC participant in the
-conversation is male.
+Having done this, the relevant dialogue lines will appear multiple times for translation, with
+different genders specified in the message context. For example, a context of `npc:m` would indicate
+that the NPC participant in the conversation is male.
-Because of technical limitations, all supported genders will appear as
-contexts, but you only need to provide translations for the genders listed in
-the grammatical gender list for your language.
+Because of technical limitations, all supported genders will appear as contexts, but you only need
+to provide translations for the genders listed in the grammatical gender list for your language.
-Other parts of the game have various ad hoc solutions to grammatical gender, so
-don't be surprised to see other contexts appearing for other strings.
+Other parts of the game have various ad hoc solutions to grammatical gender, so don't be surprised
+to see other contexts appearing for other strings.
### Tips
-There are issues specific to Cataclysm: BN which translators should be aware of.
-These include the use of terms like `%s` and `%3$d` (leave them as they are),
-and the use of tags like ``, which shouldn't be translated.
+There are issues specific to Cataclysm: BN which translators should be aware of. These include the
+use of terms like `%s` and `%3$d` (leave them as they are), and the use of tags like ``, which
+shouldn't be translated.
-Information about these and any other issues specific to individual languages,
-can be found in Cataclysm: BN's [language notes folder][3].
+Information about these and any other issues specific to individual languages, can be found in
+Cataclysm: BN's [language notes folder][3].
-General notes for all translators are in `README_all_translators.txt`,
-and notes specific to a language may be stored as `.txt`,
-for example `de.txt` for German.
+General notes for all translators are in `README_all_translators.txt`, and notes specific to a
+language may be stored as `.txt`, for example `de.txt` for German.
-Cataclysm: BN has more than 14000 translatable strings, but don't be discouraged.
-The more translators there are, the easier it becomes 😄.
+Cataclysm: BN has more than 14000 translatable strings, but don't be discouraged. The more
+translators there are, the easier it becomes 😄.
## Developers
-Cataclysm: BN uses custom runtime library that works similarly to
-[GNU gettext][4] to display translated texts.
+Cataclysm: BN uses custom runtime library that works similarly to [GNU gettext][4] to display
+translated texts.
Using `gettext` requires two actions:
-* Marking strings that should be translated in the source code.
-* Calling translation functions at run time.
+- Marking strings that should be translated in the source code.
+- Calling translation functions at run time.
-Marking translatable string allows for their automatic extraction.
-This process generates a file that maps the original string (usually in English)
-as it appears in the source code to the translated string.
-These mappings are used at run time by the translation functions.
+Marking translatable string allows for their automatic extraction. This process generates a file
+that maps the original string (usually in English) as it appears in the source code to the
+translated string. These mappings are used at run time by the translation functions.
-Note that only extracted strings can get translated, since the original string
-is acting as the identifier used to request the translation.
-If a translation function can't find the translation, it returns the original
-string.
+Note that only extracted strings can get translated, since the original string is acting as the
+identifier used to request the translation. If a translation function can't find the translation, it
+returns the original string.
### Translation Functions
-In order to mark a string for translation and to obtain its translation at
-runtime, you should use one of the following functions and classes.
+In order to mark a string for translation and to obtain its translation at runtime, you should use
+one of the following functions and classes.
-String *literals* that are used in any of these functions are automatically
-extracted. Non-literal strings are still translated at run time, but they won't
-get extracted.
+String _literals_ that are used in any of these functions are automatically extracted. Non-literal
+strings are still translated at run time, but they won't get extracted.
#### `_()`
@@ -180,21 +167,18 @@ It also works directly:
add_msg( _( "You drop the %s." ), the_item_name );
```
-Strings from the JSON files are extracted by the `lang/extract_json_strings.py`
-script, and can be translated at run time using `_()`. If translation context
-is desired for a JSON string, `class translation` can be used instead, which is
-documented below.
+Strings from the JSON files are extracted by the `lang/extract_json_strings.py` script, and can be
+translated at run time using `_()`. If translation context is desired for a JSON string,
+`class translation` can be used instead, which is documented below.
#### `pgettext()`
-This function is useful when the original string's meaning is ambiguous in
-isolation. For example, the word "blue", which can mean either a color or an
-emotion.
+This function is useful when the original string's meaning is ambiguous in isolation. For example,
+the word "blue", which can mean either a color or an emotion.
-In addition to the translatable string, `pgettext` receives a context which is
-provided to the translators, but is not part of the translated string itself.
-This function's first parameter is the context, the second is the string to be
-translated:
+In addition to the translatable string, `pgettext` receives a context which is provided to the
+translators, but is not part of the translated string itself. This function's first parameter is the
+context, the second is the string to be translated:
```c++
const char *translated = pgettext( "The color", "blue" );
@@ -202,11 +186,10 @@ const char *translated = pgettext( "The color", "blue" );
#### `vgettext()`
-Some languages have complex rules for plural forms. `vgettext` can be used to
-translate these plurals correctly. Its first parameter is the untranslated
-string in singular form, the second parameter is the untranslated string in
-plural form and the third one is used to determine which one of the first two
-should be used at run time:
+Some languages have complex rules for plural forms. `vgettext` can be used to translate these
+plurals correctly. Its first parameter is the untranslated string in singular form, the second
+parameter is the untranslated string in plural form and the third one is used to determine which one
+of the first two should be used at run time:
```c++
const char *translated = vgettext( "%d zombie", "%d zombies", num_of_zombies );
@@ -222,10 +205,9 @@ const char *translated = vpgettext( "water source, not time of year", "%d spring
### `translation`
-There are times when you want to store a string for translation, maybe with
-translation context; Sometimes you may also want to store a string that needs no
-translation or has plural forms. `class translation` in `translations.h|cpp`
-offers these functionalities in a single wrapper:
+There are times when you want to store a string for translation, maybe with translation context;
+Sometimes you may also want to store a string that needs no translation or has plural forms.
+`class translation` in `translations.h|cpp` offers these functionalities in a single wrapper:
```c++
const translation text = to_translation( "Context", "Text" );
@@ -258,9 +240,9 @@ const std::string translated = text.translated();
const std::string translated = text.translated( 2 );
```
-`class translation` can also be read from JSON. The method `translation::deserialize()`
-handles deserialization from a `JsonIn` object, so translations can be read from
-JSON using the appropriate JSON functions. The JSON syntax is as follows:
+`class translation` can also be read from JSON. The method `translation::deserialize()` handles
+deserialization from a `JsonIn` object, so translations can be read from JSON using the appropriate
+JSON functions. The JSON syntax is as follows:
```JSON
"name": "bar"
@@ -276,22 +258,20 @@ or
"name": { "ctxt": "foo", "str_sp": "foo" }
```
-In the above code, `"ctxt"` and `"str_pl"` are both optional, whereas `"str_sp"`
-is equivalent to specifying `"str"` and `"str_pl"` with the same string. Additionally,
-`"str_pl"` and `"str_sp"` will only be read if the translation object is constructed using
-`plural_tag` or `pl_translation()`, or converted using `make_plural()`. Here's
-an example:
+In the above code, `"ctxt"` and `"str_pl"` are both optional, whereas `"str_sp"` is equivalent to
+specifying `"str"` and `"str_pl"` with the same string. Additionally, `"str_pl"` and `"str_sp"` will
+only be read if the translation object is constructed using `plural_tag` or `pl_translation()`, or
+converted using `make_plural()`. Here's an example:
```c++
translation name{ translation::plural_tag() };
jsobj.read( "name", name );
```
-If neither "str_pl" nor "str_sp" is specified, the plural form defaults to the
-singular form + "s".
+If neither "str_pl" nor "str_sp" is specified, the plural form defaults to the singular form + "s".
-You can also add comments for translators by writing it like below (the order
-of the entries does not matter):
+You can also add comments for translators by writing it like below (the order of the entries does
+not matter):
```JSON
"name": {
@@ -300,107 +280,112 @@ of the entries does not matter):
}
```
-Do note that currently the JSON syntax is only supported for some JSON values,
-which are listed below. If you want other json strings to use this format,
-refer to `translations.h|cpp` and migrate the corresponding code. Afterwards
-you may also want to test `update_pot.sh` to ensure that the strings are
-correctly extracted for translation, and run the unit test to fix text styling
-issues reported by the `translation` class.
-
-| Supported JSON values
-|---
-| Effect names
-| Item action names
-| Item category names
-| Activity verbs
-| Gate action messages
-| Spell names and descriptions
-| Terrain/furniture descriptions
-| Monster melee attack messages
-| Morale effect descriptions
-| Mutation names/descriptions
-| NPC class names/descriptions
-| Tool quality names
-| Score descriptions
-| Skill names/descriptions
-| Bionic names/descriptions
-| Terrain bash sound descriptions
-| Trap-vehicle collision sound descriptions
-| Vehicle part names/descriptions
-| Skill display type names
-| NPC dialogue u_buy_monster unique names
-| Spell messages and monster spell messages
-| Martial art names and descriptions
-| Mission names and descriptions
-| Fault names and descriptions
-| Plant names in item seed data
-| Transform use action messages and menu text
-| Template NPC names and name suffixes
-| NPC talk response text
-| Relic name overrides
-| Relic recharge messages
-| Speech text
-| Tutorial messages
-| Vitamin names
-| Recipe blueprint names
-| Recipe group recipe descriptions
-| Item names (plural supported) and descriptions
-| Recipe descriptions
-| Inscribe use action verbs/gerunds
-| Monster names (plural supported) and descriptions
-| Snippets
-| Bodypart names
-| Keybinding action names
-| Field level names
-
+Do note that currently the JSON syntax is only supported for some JSON values, which are listed
+below. If you want other json strings to use this format, refer to `translations.h|cpp` and migrate
+the corresponding code. Afterwards you may also want to test `update_pot.sh` to ensure that the
+strings are correctly extracted for translation, and run the unit test to fix text styling issues
+reported by the `translation` class.
+
+| Supported JSON values |
+| ------------------------------------------------- |
+| Effect names |
+| Item action names |
+| Item category names |
+| Activity verbs |
+| Gate action messages |
+| Spell names and descriptions |
+| Terrain/furniture descriptions |
+| Monster melee attack messages |
+| Morale effect descriptions |
+| Mutation names/descriptions |
+| NPC class names/descriptions |
+| Tool quality names |
+| Score descriptions |
+| Skill names/descriptions |
+| Bionic names/descriptions |
+| Terrain bash sound descriptions |
+| Trap-vehicle collision sound descriptions |
+| Vehicle part names/descriptions |
+| Skill display type names |
+| NPC dialogue u_buy_monster unique names |
+| Spell messages and monster spell messages |
+| Martial art names and descriptions |
+| Mission names and descriptions |
+| Fault names and descriptions |
+| Plant names in item seed data |
+| Transform use action messages and menu text |
+| Template NPC names and name suffixes |
+| NPC talk response text |
+| Relic name overrides |
+| Relic recharge messages |
+| Speech text |
+| Tutorial messages |
+| Vitamin names |
+| Recipe blueprint names |
+| Recipe group recipe descriptions |
+| Item names (plural supported) and descriptions |
+| Recipe descriptions |
+| Inscribe use action verbs/gerunds |
+| Monster names (plural supported) and descriptions |
+| Snippets |
+| Bodypart names |
+| Keybinding action names |
+| Field level names |
### Lua
-The 4 translation functions are exposed to the Lua code.
-See [LUA_SUPPORT.md](LUA_SUPPORT.md) for details.
+
+The 4 translation functions are exposed to the Lua code. See [LUA_SUPPORT.md](LUA_SUPPORT.md) for
+details.
### Recommendations
-In Cataclysm: BN, some classes, like `itype` and `mtype`, provide a wrapper
-for the translation functions, called `nname`.
+In Cataclysm: BN, some classes, like `itype` and `mtype`, provide a wrapper for the translation
+functions, called `nname`.
-When an empty string is marked for translation, it is always translated into
-debug information, rather than an empty string.
-On most cases, strings can be considered to be never empty, and thus always
-safe to mark for translation, however, when handling a string that can be empty
-and *needs* to remain empty after translation, the string should be checked for
-emptiness and only passed to a translation function when is non-empty.
+When an empty string is marked for translation, it is always translated into debug information,
+rather than an empty string. On most cases, strings can be considered to be never empty, and thus
+always safe to mark for translation, however, when handling a string that can be empty and _needs_
+to remain empty after translation, the string should be checked for emptiness and only passed to a
+translation function when is non-empty.
-Error and debug messages must not be marked for translation.
-When they appear, the player is expected to report them *exactly* as they are
-printed by the game.
+Error and debug messages must not be marked for translation. When they appear, the player is
+expected to report them _exactly_ as they are printed by the game.
See the [gettext manual][5] for more information.
## Maintainers
-Several steps need to be done in the correct order to correctly merge and maintain the translation files.
+Several steps need to be done in the correct order to correctly merge and maintain the translation
+files.
There are scripts available for these, so usually the process will be as follows:
1. Download the translations in `.po` format.
2. Put them in `lang/incoming/`, ensuring they are named consistently with the files in `lang/po/`.
-3. Run `lang/update_pot.sh` to update `lang/po/cataclysm-BN.pot` (requires python with `polib` and `luaparser` modules installed).
-4. Run `lang/merge_po.sh` to update `lang/po/*.po`. (This is only used to test translations locally as the project now uses Transifex for translation)
+3. Run `lang/update_pot.sh` to update `lang/po/cataclysm-BN.pot` (requires python with `polib` and
+ `luaparser` modules installed).
+4. Run `lang/merge_po.sh` to update `lang/po/*.po`. (This is only used to test translations locally
+ as the project now uses Transifex for translation)
- This will also merge the translations from `lang/incoming/`.
+ This will also merge the translations from `lang/incoming/`.
These steps should be enough to keep the translation files up-to-date.
-To compile the .po files into `.mo` files for use, run `lang/compile_mo.sh`. It will create a directory in `lang/mo/` for each language found.
-
-Also note that both `lang/merge_po.sh` and `lang/compile_mo.sh` accept arguments specifying which languages to merge or compile. So to compile only the translation for, say, Traditional Chinese (zh_TW), one would run `lang/compile_mo.sh zh_TW`.
+To compile the .po files into `.mo` files for use, run `lang/compile_mo.sh`. It will create a
+directory in `lang/mo/` for each language found.
-After compiling the appropriate .mo file, if the language has been selected in game settings, the translations will be automatically used when you run cataclysm.
+Also note that both `lang/merge_po.sh` and `lang/compile_mo.sh` accept arguments specifying which
+languages to merge or compile. So to compile only the translation for, say, Traditional Chinese
+(zh_TW), one would run `lang/compile_mo.sh zh_TW`.
-When `System language` is selected in settings, the game tries to use language that matches system language based on language definitions file `data/raw/languages.json`.
+After compiling the appropriate .mo file, if the language has been selected in game settings, the
+translations will be automatically used when you run cataclysm.
-If you're testing translations for a new language, or the language does not show up in settings, make sure it has its own entry in the definitions file.
+When `System language` is selected in settings, the game tries to use language that matches system
+language based on language definitions file `data/raw/languages.json`.
+If you're testing translations for a new language, or the language does not show up in settings,
+make sure it has its own entry in the definitions file.
[1]: https://app.transifex.com/bn-team/cataclysm-bright-nights
[2]: https://docs.transifex.com/
diff --git a/doc/TRANSLATING_MODS.md b/doc/TRANSLATING_MODS.md
index 95f1cf99f3f7..d4d12fb42649 100644
--- a/doc/TRANSLATING_MODS.md
+++ b/doc/TRANSLATING_MODS.md
@@ -27,42 +27,49 @@
- [What if 2 or more mods provide different translations for same string?](#what-if-2-or-more-mods-provide-different-translations-for-same-string)
## Intro
-This document aims to give a brief explanation on how to set up and operate
-mod translation workflow for Cataclysm: Bright Nights.
+
+This document aims to give a brief explanation on how to set up and operate mod translation workflow
+for Cataclysm: Bright Nights.
For mod localization the game uses custom localization system that is similar to
[GNU gettext](https://www.gnu.org/software/gettext/) and is compatible with GNU gettext MO files.
-While it's possible to use Transifex or any other platform or software that supports gettext,
-this document only gives examples on how to work with [Poedit](https://poedit.net/) and
-command-line [GNU gettext utilities](https://www.gnu.org/software/gettext/).
+While it's possible to use Transifex or any other platform or software that supports gettext, this
+document only gives examples on how to work with [Poedit](https://poedit.net/) and command-line
+[GNU gettext utilities](https://www.gnu.org/software/gettext/).
-If you desire an in-depth explanation on PO/POT/MO files or how to work with them using GNU gettext utilities,
-see [GNU gettext manual](https://www.gnu.org/software/gettext/manual/gettext.html).
+If you desire an in-depth explanation on PO/POT/MO files or how to work with them using GNU gettext
+utilities, see [GNU gettext manual](https://www.gnu.org/software/gettext/manual/gettext.html).
-To get some generic tips on translating strings for Cataclysm: Bright Nights and its mods,
-see [TRANSLATING.md](TRANSLATING.md).
+To get some generic tips on translating strings for Cataclysm: Bright Nights and its mods, see
+[TRANSLATING.md](TRANSLATING.md).
## A short glossary
+
### POT file
+
Portable Object Template file (`.pot`).
-This is a text file that contains original (English) strings extracted from mod's JSON and Lua source files.
-The POT file is a template used for creating empty or updating existing PO files of any language.
+This is a text file that contains original (English) strings extracted from mod's JSON and Lua
+source files. The POT file is a template used for creating empty or updating existing PO files of
+any language.
### PO file
+
Portable Object file (`.po`).
-This is a text file that contains translated strings for one language.
-The PO files are what translators work with, and what will be compiled into a MO file.
+This is a text file that contains translated strings for one language. The PO files are what
+translators work with, and what will be compiled into a MO file.
### MO file
+
Machine Object file (`.mo`).
-This is a binary file that contains translated strings for one language.
-The MO files are what the game loads, and where it gets translated strings from.
+This is a binary file that contains translated strings for one language. The MO files are what the
+game loads, and where it gets translated strings from.
## Workflow overview
+
The first translation workflow is as follows:
1. Extract strings from mod JSON and Lua source files into a POT file
@@ -71,8 +78,8 @@ The first translation workflow is as follows:
4. Compile PO into MO
5. Put the MO into your mod files
-As the mod changes with time, so may change its strings.
-Updating existing translations is done as follows:
+As the mod changes with time, so may change its strings. Updating existing translations is done as
+follows:
1. Extract strings from mod JSON and Lua source files into a new POT file
2. Update existing PO file from the new POT file
@@ -82,71 +89,87 @@ Updating existing translations is done as follows:
Step 1 in both workflows requires you to set up environment for string extraction (see below).
-Steps 2-4 can be done using translation software either by the mod author/maintainer, or by the translator.
+Steps 2-4 can be done using translation software either by the mod author/maintainer, or by the
+translator.
## Setting up environment for string extraction
+
You'll need Python 3 with `polib` and `luaparser` modules installed (available via `pip`).
Scripts for string extraction can be found in the `lang` subdirectory of the repository:
-* `extract_json_strings.py` - main string extraction routines
-* `dedup_pot_file.py` - fixes errors in POT file produces by the 1st script
-* `extract_mod_strings.bat` (`extract_mod_strings.sh` for Linux/MacOS) - to automate the other 2 scripts
+
+- `extract_json_strings.py` - main string extraction routines
+- `dedup_pot_file.py` - fixes errors in POT file produces by the 1st script
+- `extract_mod_strings.bat` (`extract_mod_strings.sh` for Linux/MacOS) - to automate the other 2
+ scripts
## Extracting strings
+
Copy these 3 scripts into the mod's folder and:
-* on Windows, double-click `extract_mod_strings.bat`
-* on Linux/MacOS, open terminal and run `./extract_mod_strings.sh`
-If the process completed without errors, you'll see a new `lang` folder
-with `extracted_strings.pot` file inside.
+- on Windows, double-click `extract_mod_strings.bat`
+- on Linux/MacOS, open terminal and run `./extract_mod_strings.sh`
+
+If the process completed without errors, you'll see a new `lang` folder with `extracted_strings.pot`
+file inside.
## Creating new PO
+
Before creating PO file, you need to choose language id.
Open `data/raw/languages.json` to see the list of languages supported by the game.
-In this list, each entry has its own id in form of `ln_LN`,
-where `ln` determines language and `LN` - dialect.
-You can either use full `ln_LN` for exact language+dialect match,
-or `ln` if you want the game to use your MO regardless of dialect.
+In this list, each entry has its own id in form of `ln_LN`, where `ln` determines language and
+`LN` - dialect. You can either use full `ln_LN` for exact language+dialect match, or `ln` if you
+want the game to use your MO regardless of dialect.
### Poedit
+
1. Open the POT file with Poedit
2. Press "Create new translation" button (should show up near the bottom)
3. In language selection dialog, enter language id you chose
4. Save the file as `path/to/mod/lang/LANG.po` where `LANG` is the same language id
### msginit
+
```bash
msginit -i lang/index.pot -o lang/LANG.po -l LANG.UTF-8 --no-translator
```
+
Where `LANG` is the language id you chose
## Updating existing PO
+
### Poedit
+
1. Open the PO file with Poedit
2. Choose `Catalog->Update from POT file...` and select the new POT file
3. Save the file
### msgmerge
+
```bash
msgmerge lang/LANG.po lang/index.pot
```
## Compiling PO into MO
+
### Poedit
+
1. Open the PO file with Poedit
-2. Make sure MO file will be encoded using UTF-8 (it should do so by default,
- you can double check in `Catalog->Properties->"Translation properties" tab->Charset`).
-3. By default, each time PO file is saved Poedit automatically compiles it into MO,
- but the same can also be done explicitly via `File->Compile to MO...`
+2. Make sure MO file will be encoded using UTF-8 (it should do so by default, you can double check
+ in `Catalog->Properties->"Translation properties" tab->Charset`).
+3. By default, each time PO file is saved Poedit automatically compiles it into MO, but the same can
+ also be done explicitly via `File->Compile to MO...`
### msgfmt
+
```
msgfmt -o lang/LANG.mo lang/LANG.po
```
## Adding MO file to the mod
+
Create `lang` directory in the mod files directory and put MOs there:
```
@@ -159,9 +182,8 @@ mods/
zh_CN.mo
```
-**Note:** Storing your POT/PO files
-in the same `lang` subdirectory may make it easier to keep track of them.
-The game ignores these files, and your mod folder structure will look like this:
+**Note:** Storing your POT/PO files in the same `lang` subdirectory may make it easier to keep track
+of them. The game ignores these files, and your mod folder structure will look like this:
```
mods/
@@ -178,23 +200,27 @@ mods/
```
## Miscellaneous notes
+
### Is it possible to use arbitrary location or names for MO files, like with JSONs?
-No. The game looks for MO files with specific names that are located in the
-`lang` subdirectory of the mod's `path` directory specified in `modinfo.json`
-(if not specified, `path` matches the mod's directory).
-However, any mod will automatically try to use any other mod's translation
-files to translate its strings. This makes it possible to create mods that are
-purely "translation packs" for other mods (or mod collections).
+No. The game looks for MO files with specific names that are located in the `lang` subdirectory of
+the mod's `path` directory specified in `modinfo.json` (if not specified, `path` matches the mod's
+directory).
+
+However, any mod will automatically try to use any other mod's translation files to translate its
+strings. This makes it possible to create mods that are purely "translation packs" for other mods
+(or mod collections).
### Reloading translations in a running game
-Open debug menu and select `Info...->Reload translations`,
-and the game will reload all MO files from disk.
-This makes it easy to see how translated string looks in game,
-provided the translator has a way to compile MO files.
+Open debug menu and select `Info...->Reload translations`, and the game will reload all MO files
+from disk.
+
+This makes it easy to see how translated string looks in game, provided the translator has a way to
+compile MO files.
Example workflow with Poedit:
+
1. Translate a string
2. Hit Ctrl+S
3. Alt+Tab into the game
@@ -202,35 +228,40 @@ Example workflow with Poedit:
5. The game now displays translated string
### MO load order
+
MO load order is as follows:
-1. First and always goes base game's MO file, which contains translation strings
- for UI, hardcoded functionality, base "mod" (`data/json/`) and in-repo mods.
+
+1. First and always goes base game's MO file, which contains translation strings for UI, hardcoded
+ functionality, base "mod" (`data/json/`) and in-repo mods.
2. Then MO files of mods are loaded, in same order as the mod load order.
### Dialects
-When loading MO files, the game first looks for the file with
-exact language and dialect match in its name.
-If such file is absent, then it looks for a file with no dialect.
+
+When loading MO files, the game first looks for the file with exact language and dialect match in
+its name. If such file is absent, then it looks for a file with no dialect.
For example, when using `Español (España)` the selection order is
+
1. `es_ES.mo`
2. `es.mo`
And when using `Español (Argentina)` the selection order is
+
1. `es_AR.mo`
2. `es.mo`
-Thus, `es.mo` would be loaded for either dialect of Spanish
-if the exact translation files are not present.
+Thus, `es.mo` would be loaded for either dialect of Spanish if the exact translation files are not
+present.
### What if 2 or more mods provide different translations for same string?
+
Then the game selects which one to use according to this set of rules:
-1. If string A's translation has plural forms, but string B's translation does not,
- then translation A is used for both single and plural forms.
-2. If both translation A and B have (or both don't have) plural forms, then
- the first loaded translation is used (see MO load order).
-
-If you want a different translation from the one in the base game,
-or don't want it to conflict with a string from some other mod,
-add a translation context to the string in the corresponding JSON object
-(see [TRANSLATING.md](TRANSLATING.md) for which fields support translation context).
+
+1. If string A's translation has plural forms, but string B's translation does not, then translation
+ A is used for both single and plural forms.
+2. If both translation A and B have (or both don't have) plural forms, then the first loaded
+ translation is used (see MO load order).
+
+If you want a different translation from the one in the base game, or don't want it to conflict with
+a string from some other mod, add a translation context to the string in the corresponding JSON
+object (see [TRANSLATING.md](TRANSLATING.md) for which fields support translation context).
diff --git a/doc/USER_INTERFACE.md b/doc/USER_INTERFACE.md
index 87f0ba27bcf4..7d58e9904f57 100644
--- a/doc/USER_INTERFACE.md
+++ b/doc/USER_INTERFACE.md
@@ -1,12 +1,11 @@
# User Interface
-Cataclysm: Bright Nights uses ncurses, or in the case of the tiles build, an
-ncurses port, for user interface. Window management is achieved by `ui_adaptor`,
-which requires a resizing callback and a redrawing callback for each UI to handle
-resizing and redrawing. Details on how to use `ui_adaptor` can be found within
-`ui_manager.h`.
+Cataclysm: Bright Nights uses ncurses, or in the case of the tiles build, an ncurses port, for user
+interface. Window management is achieved by `ui_adaptor`, which requires a resizing callback and a
+redrawing callback for each UI to handle resizing and redrawing. Details on how to use `ui_adaptor`
+can be found within `ui_manager.h`.
+
+Some good examples of the usage of `ui_adaptor` can be found within the following files:
-Some good examples of the usage of `ui_adaptor` can be found within the following
-files:
- `query_popup` and `static_popup` in `popup.h/cpp`
- `Messages::dialog` in `messages.cpp`
diff --git a/doc/VEHICLES_JSON.md b/doc/VEHICLES_JSON.md
index 962a3d2f6753..7cddfb36d046 100644
--- a/doc/VEHICLES_JSON.md
+++ b/doc/VEHICLES_JSON.md
@@ -1,6 +1,7 @@
# Vehicle prototypes JSON file contents
-Vehicle prototypes are used to spawn stock vehicles. After a vehicle has been spawned, it is saved in a different format.
+Vehicle prototypes are used to spawn stock vehicles. After a vehicle has been spawned, it is saved
+in a different format.
Vehicle prototypes do not currently accept copy-from
@@ -35,27 +36,32 @@ Vehicle prototypes do not currently accept copy-from
]
```
-.* Important! *. Vehicle parts must be defined in the same order you would install them in the game (ie, frames and mount points first). You also cannot break the normal rules of installation (you can't stack non-stackable part flags).
+.* Important! *. Vehicle parts must be defined in the same order you would install them in the game
+(ie, frames and mount points first). You also cannot break the normal rules of installation (you
+can't stack non-stackable part flags).
### Parts list
-The part list contains an arbitary number of lines. Each line is of the form:
- { "x": X, "y": Y, "part": PARTID, ... }
-or
- { "x": X, "y": Y, "parts": [ PARTID1, ... ] }
-In the first form, the line defines a single part at location X,Y of vehicle part type PARTID. It can have the optional "ammo", "ammo_types", "ammo_qty", or "fuel" keys with an appropriate value following.
+The part list contains an arbitary number of lines. Each line is of the form: { "x": X, "y": Y,
+"part": PARTID, ... } or { "x": X, "y": Y, "parts": [ PARTID1, ... ] }
-In the second form, the line defines several parts at location X, Y. Each part is either defined by its PARTID string, or can be an object of the form
- { "part": PARTID, ... }
-with any of the optional keys "ammo", "ammo_types", "ammo_qty", or "fuel" as above.
+In the first form, the line defines a single part at location X,Y of vehicle part type PARTID. It
+can have the optional "ammo", "ammo_types", "ammo_qty", or "fuel" keys with an appropriate value
+following.
-Several different lines can have the same X, Y co-ordinates and each one adds additional parts to that location. Parts must be added in the correct order ie: A wheel hub must be added prior to the wheel, but after the frame.
+In the second form, the line defines several parts at location X, Y. Each part is either defined by
+its PARTID string, or can be an object of the form { "part": PARTID, ... } with any of the optional
+keys "ammo", "ammo_types", "ammo_qty", or "fuel" as above.
+
+Several different lines can have the same X, Y co-ordinates and each one adds additional parts to
+that location. Parts must be added in the correct order ie: A wheel hub must be added prior to the
+wheel, but after the frame.
### Items list
-The items list contains an arbitrary number of lines. Each line is of the form:
- { "x": X, "y": Y, TYPE: DATA },
-and describes the items that may spawn at that location.
-TYPE and DATA may be one of:
+
+The items list contains an arbitrary number of lines. Each line is of the form: { "x": X, "y": Y,
+TYPE: DATA }, and describes the items that may spawn at that location. TYPE and DATA may be one of:
+
```C++
"items": "itemid" // single item of that type
"items": [ "itemid1", "itemid2", ... ] // all the items in the array
@@ -63,6 +69,8 @@ TYPE and DATA may be one of:
// whether the group is a collection or distribution
"item_groups": [ "groupid1", "groupid2" ... ] // one or more items for each group
```
-the optional keyword "chance" provides an X in 100 chance that a particular item definition will spawn.
+
+the optional keyword "chance" provides an X in 100 chance that a particular item definition will
+spawn.
Multiple lines of items may share the same X and Y values.
diff --git a/doc/VITAMIN.md b/doc/VITAMIN.md
index 2abcb854a270..363522a34b34 100644
--- a/doc/VITAMIN.md
+++ b/doc/VITAMIN.md
@@ -18,59 +18,79 @@
"disease_excess": [ [ 10, 19 ], [ 20, 29 ], [ 30, 40 ] ]
},
```
+
### `id`
+
Mandatory. The id of the vitamin.
### `type`
+
Mandatory. Must be `vitamin`.
### `vit_type`
+
The type of the vitamin. Valid values are:
#### `vitamin`
-When simplified nutrition is enabled, this vitamin will not be added to any items and any time the game attempts to retrieve it from the player it will give 0.
-Only nutritional vitamins should have this type.
+
+When simplified nutrition is enabled, this vitamin will not be added to any items and any time the
+game attempts to retrieve it from the player it will give 0. Only nutritional vitamins should have
+this type.
#### `toxin`
+
This is some toxic chemical or component. This currently has no effect.
#### `drug`
+
This is a drug. This currently has no effect.
#### `counter`
-This is a counter for something, that is neither a toxin, vitamin, or drug. This currently has no effect.
+
+This is a counter for something, that is neither a toxin, vitamin, or drug. This currently has no
+effect.
### `name`
-What the vitamin shows up as where vitamins are displayed, such as the vitamins display in the item menu.
+
+What the vitamin shows up as where vitamins are displayed, such as the vitamins display in the item
+menu.
### `deficiency`
+
The id of an effect that is triggered by a deficiency of this vitamin.
### `excess`
+
The id of an effect that is triggered by a excess of this vitamin.
### `min`
+
The smallest amount of this vitamin that the player can have.
### `max`
+
The highest amount of this vitamin that the avatar can have.
### `rate`
+
How long it takes to lose one unit of this vitamin.
### `flags`
+
An array of string flags, see the flags section below for valid ones
### `disease`
-What the thresholds of deficiency of this vitamin are.
-Each pair in the list determines the start and end points of that tier of deficiency.
-Each tier of deficiency corresponds to the intensity level of the effect defined in `deficiency`.
+
+What the thresholds of deficiency of this vitamin are. Each pair in the list determines the start
+and end points of that tier of deficiency. Each tier of deficiency corresponds to the intensity
+level of the effect defined in `deficiency`.
### `disease_excess`
-What the thresholds of excess of this vitamin are.
-Each pair in the list determines the start and end points of that tier of excess.
-Each tier of excess corresponds to the intensity level of the effect defined in `excess`.
+
+What the thresholds of excess of this vitamin are. Each pair in the list determines the start and
+end points of that tier of excess. Each tier of excess corresponds to the intensity level of the
+effect defined in `excess`.
## flags
-- ```NO_DISPLAY``` - This vitamin will not be shown when examining a food
+- `NO_DISPLAY` - This vitamin will not be shown when examining a food
diff --git a/doc/WEATHER_TYPE.md b/doc/WEATHER_TYPE.md
index b5e699b1126a..14cb84205926 100644
--- a/doc/WEATHER_TYPE.md
+++ b/doc/WEATHER_TYPE.md
@@ -1,98 +1,100 @@
## Weather_type
-Weather type specifies conditions under which it can occur
-(temperature, humidity, pressure, windpower, time of day, etc.)
-and what effects it causes on the game world and reality bubble.
+Weather type specifies conditions under which it can occur (temperature, humidity, pressure,
+windpower, time of day, etc.) and what effects it causes on the game world and reality bubble.
-When selecting weather type, the game goes over the list defined in region settings
-and selects the last entry that is considered eligible under current conditions.
-If none of the entries are eligible, invalid weather type `"none"` will be used.
+When selecting weather type, the game goes over the list defined in region settings and selects the
+last entry that is considered eligible under current conditions. If none of the entries are
+eligible, invalid weather type `"none"` will be used.
### Fields
-| Identifier | Description
-|--- |---
-| id | (_mandatory_) Unique ID. Must be one continuous word, use underscores if necessary.
-| name | (_mandatory_) In-game name displayed.
-| color | (_mandatory_) Color of in-game name.
-| glyph | (_mandatory_) Glyph used on overmap.
-| map_color | (_mandatory_) Color of overmap glyph.
-| ranged_penalty | (_mandatory_) Penalty to ranged attacks.
-| sight_penalty | (_mandatory_) Sight penalty, aka multiplier to tile transparency.
-| light_modifier | (_mandatory_) Flat bonus to ambient light.
-| sound_attn | (_mandatory_) Sound attenuation (flat reduction to volume).
-| dangerous | (_mandatory_) If true, prompts for activity interrupt.
-| precip | (_mandatory_) Amount of associated precipitation. Valid values are: `none`, `very_light`, `light` and `heavy`.
-| rains | (_mandatory_) Whether said precipitation falls as rain.
-| acidic | (_optional_) Whether said precipitation is acidic.
-| sound_category | (_optional_) Sound effects to play. Valid values are: `silent`, `drizzle`, `rainy`, `thunder`, `flurries`, `snowstorm` and `snow`.
-| sun_intensity | (_mandatory_) Sunlight intensity. Valid values are: `none`, `light`, `normal`, and `high`. Normal and high are considered "direct sunlight".
-| weather_animation | (_optional_) Weather animation in reality bubble. [Details](#weather_animation)
-| effects | (_optional_) `[string, int]` pair array for the effects the weather causes. [Details](#effects)
-| requirements | (_optional_) Conditions under which this weather type will be eligible to be selected. [Details](#requirements)
+| Identifier | Description |
+| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
+| id | (_mandatory_) Unique ID. Must be one continuous word, use underscores if necessary. |
+| name | (_mandatory_) In-game name displayed. |
+| color | (_mandatory_) Color of in-game name. |
+| glyph | (_mandatory_) Glyph used on overmap. |
+| map_color | (_mandatory_) Color of overmap glyph. |
+| ranged_penalty | (_mandatory_) Penalty to ranged attacks. |
+| sight_penalty | (_mandatory_) Sight penalty, aka multiplier to tile transparency. |
+| light_modifier | (_mandatory_) Flat bonus to ambient light. |
+| sound_attn | (_mandatory_) Sound attenuation (flat reduction to volume). |
+| dangerous | (_mandatory_) If true, prompts for activity interrupt. |
+| precip | (_mandatory_) Amount of associated precipitation. Valid values are: `none`, `very_light`, `light` and `heavy`. |
+| rains | (_mandatory_) Whether said precipitation falls as rain. |
+| acidic | (_optional_) Whether said precipitation is acidic. |
+| sound_category | (_optional_) Sound effects to play. Valid values are: `silent`, `drizzle`, `rainy`, `thunder`, `flurries`, `snowstorm` and `snow`. |
+| sun_intensity | (_mandatory_) Sunlight intensity. Valid values are: `none`, `light`, `normal`, and `high`. Normal and high are considered "direct sunlight". |
+| weather_animation | (_optional_) Weather animation in reality bubble. [Details](#weather_animation) |
+| effects | (_optional_) `[string, int]` pair array for the effects the weather causes. [Details](#effects) |
+| requirements | (_optional_) Conditions under which this weather type will be eligible to be selected. [Details](#requirements) |
### weather_animation
+
All members are mandatory.
-| Identifier | Description
-|--- |---
-| factor | Display density: 0 is none, 1 will blot out the screen.
-| glyph | Glyph to use in ASCII mode.
-| color | Glyph color.
-| tile | Graphical tile to use in TILES mode.
+| Identifier | Description |
+| ---------- | ------------------------------------------------------- |
+| factor | Display density: 0 is none, 1 will blot out the screen. |
+| glyph | Glyph to use in ASCII mode. |
+| color | Glyph color. |
+| tile | Graphical tile to use in TILES mode. |
### effects
+
`int` here is effect intensity.
-| Identifier | Description
-|--- |---
-| wet | wets player by `int` amount
-| thunder | thunder sound with chance 1 in `int`
-| lightening | 1 in `int` chance of sound plus message and possible super charging electric fields
-| light_acid | causes pain unless waterproof
-| acid_rain | causes more pain unless waterproof
+| Identifier | Description |
+| ---------- | ----------------------------------------------------------------------------------- |
+| wet | wets player by `int` amount |
+| thunder | thunder sound with chance 1 in `int` |
+| lightening | 1 in `int` chance of sound plus message and possible super charging electric fields |
+| light_acid | causes pain unless waterproof |
+| acid_rain | causes more pain unless waterproof |
### requirements
+
All members are optional.
-| Identifier | Description
-|--- |---
-| pressure_min | Min pressure
-| pressure_max | Max pressure
-| humidity_min | Min humidity
-| humidity_max | Max humidity
-| temperature_min | Min temperature
-| temperature_max | Max temperature
-| windpower_min | Min windpower
-| windpower_max | Max windpower
-| humidity_and_pressure | If there are pressure and humidity requirements are they both required or just one
-| acidic | Does this require acidic precipitation
-| time | Time of day. Valid values are: day, night, and both.
-| required_weathers | Will only be selected if conditions match for any of the specified types, i.e. rain can only happen if the conditions for clouds, light drizzle or drizzle are present. Required weathers should be "before" this one in the region weather list.
+| Identifier | Description |
+| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| pressure_min | Min pressure |
+| pressure_max | Max pressure |
+| humidity_min | Min humidity |
+| humidity_max | Max humidity |
+| temperature_min | Min temperature |
+| temperature_max | Max temperature |
+| windpower_min | Min windpower |
+| windpower_max | Max windpower |
+| humidity_and_pressure | If there are pressure and humidity requirements are they both required or just one |
+| acidic | Does this require acidic precipitation |
+| time | Time of day. Valid values are: day, night, and both. |
+| required_weathers | Will only be selected if conditions match for any of the specified types, i.e. rain can only happen if the conditions for clouds, light drizzle or drizzle are present. Required weathers should be "before" this one in the region weather list. |
### Example
```json
{
- "id": "lightning",
- "type": "weather_type",
- "name": "Lightning Storm",
- "color": "c_yellow",
- "map_color": "h_yellow",
- "glyph": "%",
- "ranged_penalty": 4,
- "sight_penalty": 1.25,
- "light_modifier": -45,
- "sound_attn": 8,
- "dangerous": false,
- "precip": "heavy",
- "rains": true,
- "acidic": false,
- "effects": [ { "name": "thunder", "intensity": 50 }, { "name": "lightning", "intensity": 600 } ],
- "tiles_animation": "weather_rain_drop",
- "weather_animation": { "factor": 0.04, "color": "c_light_blue", "glyph": "," },
- "sound_category": "thunder",
- "sun_intensity": "none",
- "requirements": { "pressure_max": 990, "required_weathers": [ "thunder" ] }
+ "id": "lightning",
+ "type": "weather_type",
+ "name": "Lightning Storm",
+ "color": "c_yellow",
+ "map_color": "h_yellow",
+ "glyph": "%",
+ "ranged_penalty": 4,
+ "sight_penalty": 1.25,
+ "light_modifier": -45,
+ "sound_attn": 8,
+ "dangerous": false,
+ "precip": "heavy",
+ "rains": true,
+ "acidic": false,
+ "effects": [{ "name": "thunder", "intensity": 50 }, { "name": "lightning", "intensity": 600 }],
+ "tiles_animation": "weather_rain_drop",
+ "weather_animation": { "factor": 0.04, "color": "c_light_blue", "glyph": "," },
+ "sound_category": "thunder",
+ "sun_intensity": "none",
+ "requirements": { "pressure_max": 990, "required_weathers": ["thunder"] }
}
```
diff --git a/doc/melee_weapons/MELEE_BALANCE_SPREADSHEET.md b/doc/melee_weapons/MELEE_BALANCE_SPREADSHEET.md
index 7b73ac3cd3e4..aa866ada87a9 100644
--- a/doc/melee_weapons/MELEE_BALANCE_SPREADSHEET.md
+++ b/doc/melee_weapons/MELEE_BALANCE_SPREADSHEET.md
@@ -1,69 +1,138 @@
## Overview
-This is documentation for the 'Melee Weapons Evaluation.md' spreadsheet. This is the spreadsheet that drove the 0.E experimental melee weapon rebalance project. The original spreadsheet is available as a [google doc](https://docs.google.com/spreadsheets/d/14eQIe4AO_f6OxCt1XcB4NLAs6-5R1wQW-ydZG0orYdY/edit#gid=1787713396) but the static copy is preserved in case stuff moves.
-This is a complicated spreadsheet, with a lot of moving parts. The following are the tabs and the data flow:
+This is documentation for the 'Melee Weapons Evaluation.md' spreadsheet. This is the spreadsheet
+that drove the 0.E experimental melee weapon rebalance project. The original spreadsheet is
+available as a
+[google doc](https://docs.google.com/spreadsheets/d/14eQIe4AO_f6OxCt1XcB4NLAs6-5R1wQW-ydZG0orYdY/edit#gid=1787713396)
+but the static copy is preserved in case stuff moves.
+
+This is a complicated spreadsheet, with a lot of moving parts. The following are the tabs and the
+data flow:
### Raw
-Raw was the initial data dump, taken from some October 2019 version of the 0.D experimental using mlangsdorf's usual mods (hence all the Blazemod stuff). Raw was slightly annoyed with some extra categories:
-* Weapon Class - this is a simple numeric rating. 0 is not a weapon, 1 is an explosive device, 2 is a ranged weapon or gun, 3 is a tool that makes a poor weapon like a cooking pot, 4 is a helmet, 5 is a tool that makes a good weapon like a sledgehammer, 6 is an improvised or fake weapon, and 7 is an actual dedicated weapon
-* Category - this is a categorization of items as weapons, to make it easier to compare similar weapons. Melee weapon categories are Ax, Ax2, Club, Club2, Flail, Flail2, Knife, Polearm, Spear, Staff, Shortsword, Sword, and Sword2. Categories that end with 2 are two-handed weapons.
-* Acc - this is a recaluclation of weapon accuracy based on the accuracy factors below, because review of the data showed that a lot of weapons have accuracy values that are not supported by the criteria in GAME_BALANCE.md.
-* Grip - the item's grip, as described in GAME_BALANCE.md
-* Leng - the item's leng, as described in GAME_BALANCE.md
-* Surf - the item's striking surface, as described in GAME_BALANCE.md.
-* Bal - the item's balance, as described in GAME_BALANCE.md. Additional categories beyond Clumsy were added and assigned by eye.
-### Filter
-Filter takes the initial data from raw and a weapon class (in cell B1) and filters out items with a lower weapon class to make further analysis easier.
+Raw was the initial data dump, taken from some October 2019 version of the 0.D experimental using
+mlangsdorf's usual mods (hence all the Blazemod stuff). Raw was slightly annoyed with some extra
+categories:
+
+- Weapon Class - this is a simple numeric rating. 0 is not a weapon, 1 is an explosive device, 2 is
+ a ranged weapon or gun, 3 is a tool that makes a poor weapon like a cooking pot, 4 is a helmet, 5
+ is a tool that makes a good weapon like a sledgehammer, 6 is an improvised or fake weapon, and 7
+ is an actual dedicated weapon
+- Category - this is a categorization of items as weapons, to make it easier to compare similar
+ weapons. Melee weapon categories are Ax, Ax2, Club, Club2, Flail, Flail2, Knife, Polearm, Spear,
+ Staff, Shortsword, Sword, and Sword2. Categories that end with 2 are two-handed weapons.
+- Acc - this is a recaluclation of weapon accuracy based on the accuracy factors below, because
+ review of the data showed that a lot of weapons have accuracy values that are not supported by the
+ criteria in GAME_BALANCE.md.
+- Grip - the item's grip, as described in GAME_BALANCE.md
+- Leng - the item's leng, as described in GAME_BALANCE.md
+- Surf - the item's striking surface, as described in GAME_BALANCE.md.
+- Bal - the item's balance, as described in GAME_BALANCE.md. Additional categories beyond Clumsy
+ were added and assigned by eye.
-### New Formula
-This calculates the new weapon evaluation formaula on the inital stats. This is complicated.
-
-The first 7 rows have some header data. The bulk of the calculation starts on row 8.
+### Filter
-The weapons were evaluated using a Strength 10, Dexterity 10, Perception 10 survivor with skill 4 in all weapons. The base hit, stat crit, skill crit, bash mult, cut mult, and stab mult values are derived from the relevant bits of src/melee.cpp.
+Filter takes the initial data from raw and a weapon class (in cell B1) and filters out items with a
+lower weapon class to make further analysis easier.
-* Columnn A "Average" is the new weapon evaluation value for the weapon, on the edge of the sheet for easy reference.
-* Columns B-J are the weapon's original stats, taken from the Raw tab via the Filter tab.
-* Column K "roll_hit" is sum of the evaluator's base_hit and the weapon's acc.
-* Column L "Wpn Crit" is weapon's contribution to critical hits.
-* Columns M-N "3 Crit" and "2 Crit" are the chances of a triple and double critical hit occuring, based on skill, accuracy, and stats.
-* Columns O-Q "Average Non-Crit" damage are the weapon's calculated average damage before armor for non-critical hits in each of the 3 categories.
+### New Formula
-All that is pretty straightforward. The next three blocks are where it gets complicated. Columns S-Z are repeated as AB-AI and AK-AR with different monster stats.
-* Row S "Hits" is the expected number of hits per 1000 attacks, calculated against a normal distribution with a mean value of 5 * ( roll_hit - monster Dodge ) and a standard deviation of 25.
-* Row T "Crit %s" is the percentage of those hits that should be critical hits.
-* Row U "Dmg" is the average expected damage past armor. This is simply the sum of max( 0, damage type - armor amount ) for each of the 3 damage types.
-* Row V "Crit" is the average expected critical damage past armor. This is the sum of the critical damage - armor amount for each of the three damage amounts, but the formula is substantially more complicated because the 3 damage types have different critical damage multipliers and reduce effective armor by different amounts on a critical.
-* Rows W-Y repeat damage and critical damage, but for rapid strikes where the base damage is multiplied by 2/3rds.
-* Row Z "Dmg/Turn" is either:
-** 100 * ( Dmg * ( Hits - num crits ) + Crit Dmg * ( num hits ) ) / ( 1000 * Moves ) - ie, sum of damage per hit for each normal hit + crit damage for each critical hit divided by the number of moves in 1000 attacks, multiplied by 100 moves/second, OR
-** 100 * ( Dmg * ( Hits - num crits ) / 2 + Crit Dmg * ( num hits ) / 2 + rapid strike Dmg * ( Hits - num crits ) / 2 + rapid strike Crit Dmg * ( num hits ) / 2 ) / ( 1000 - ( hits / 2 ) * Moves + Hits * 0.33 * Moves ) - same as above, but accounting for rapid strike reduced damage and movement cost.
+This calculates the new weapon evaluation formaula on the inital stats. This is complicated.
+
+The first 7 rows have some header data. The bulk of the calculation starts on row 8.
+
+The weapons were evaluated using a Strength 10, Dexterity 10, Perception 10 survivor with skill 4 in
+all weapons. The base hit, stat crit, skill crit, bash mult, cut mult, and stab mult values are
+derived from the relevant bits of src/melee.cpp.
+
+- Columnn A "Average" is the new weapon evaluation value for the weapon, on the edge of the sheet
+ for easy reference.
+- Columns B-J are the weapon's original stats, taken from the Raw tab via the Filter tab.
+- Column K "roll_hit" is sum of the evaluator's base_hit and the weapon's acc.
+- Column L "Wpn Crit" is weapon's contribution to critical hits.
+- Columns M-N "3 Crit" and "2 Crit" are the chances of a triple and double critical hit occuring,
+ based on skill, accuracy, and stats.
+- Columns O-Q "Average Non-Crit" damage are the weapon's calculated average damage before armor for
+ non-critical hits in each of the 3 categories.
+
+All that is pretty straightforward. The next three blocks are where it gets complicated. Columns S-Z
+are repeated as AB-AI and AK-AR with different monster stats.
+
+- Row S "Hits" is the expected number of hits per 1000 attacks, calculated against a normal
+ distribution with a mean value of 5 * ( roll_hit - monster Dodge ) and a standard deviation of 25.
+- Row T "Crit %s" is the percentage of those hits that should be critical hits.
+- Row U "Dmg" is the average expected damage past armor. This is simply the sum of max( 0, damage
+ type - armor amount ) for each of the 3 damage types.
+- Row V "Crit" is the average expected critical damage past armor. This is the sum of the critical
+ damage - armor amount for each of the three damage amounts, but the formula is substantially more
+ complicated because the 3 damage types have different critical damage multipliers and reduce
+ effective armor by different amounts on a critical.
+- Rows W-Y repeat damage and critical damage, but for rapid strikes where the base damage is
+ multiplied by 2/3rds.
+- Row Z "Dmg/Turn" is either: ** 100 * ( Dmg * ( Hits - num crits ) + Crit Dmg * ( num hits ) ) / (
+ 1000 * Moves ) - ie, sum of damage per hit for each normal hit + crit damage for each critical hit
+ divided by the number of moves in 1000 attacks, multiplied by 100 moves/second, OR ** 100 * (
+ Dmg * ( Hits - num crits ) / 2 + Crit Dmg * ( num hits ) / 2 + rapid strike Dmg * ( Hits - num
+ crits ) / 2 + rapid strike Crit Dmg * ( num hits ) / 2 ) / ( 1000 - ( hits / 2 ) * Moves + Hits *
+ 0.33 * Moves ) - same as above, but accounting for rapid strike reduced damage and movement cost.
Finally,
-* Column AT "Weapon" is a repeat of the weapon name for refernce
-* Column Au "Value" is the average of columns Z, AI, and AR, multiplied by 1.5 for Reach 2 weapons and 1.75 for Reach 3 weapons.
+
+- Column AT "Weapon" is a repeat of the weapon name for refernce
+- Column Au "Value" is the average of columns Z, AI, and AR, multiplied by 1.5 for Reach 2 weapons
+ and 1.75 for Reach 3 weapons.
### New Formula Sorted
-This compares the old weapon values versus the values from the new formula, and sorts weapons by decreasing new value by weapon category to make it easier to spot weapons that are unsually good (I'm looking at you, broadsword) or bad for their category.
+
+This compares the old weapon values versus the values from the new formula, and sorts weapons by
+decreasing new value by weapon category to make it easier to spot weapons that are unsually good
+(I'm looking at you, broadsword) or bad for their category.
### Proposed Values
-This repeats the New Formula tab, except that Columns C-J were copied over and pasted as values, and then adjusted to make the numbers nice.
-* Accuracy was adjusted to the new values based on grip, length, striking surface, and balance from the Raw tab. That means a bunch of previously accurate weapons like bionic claws got a nerf, and inappropriately inaccurate weapons like katanas got a buff.
-* Weapons in the same category were generally adjusted to have roughly the same evaluation, though with different values. In general, European weapons get more of their damage from bash and less from cut, and are often heavier and slower, than Asian weapons. This is a little arbitrary and not entirely realistic, but everyone seems to expect it. As a case in point, the Japanese two-handed sword "nodachi" has 164 attack speed, bash 6, and cut 47, while the European two-handed sword zweihander has 169 attack speed, base 18, cut 39. They both have values of about 26.
-* Inferior weapons got a 1 step penalty in balance compared to the real weapon, and half of the cut/pierce damage is moved to bash, and the cut/pierce damage is 1/4th's the real weapons. Ie, an inferior pike does Bash 30, Stab 11 to a pike's Bash 8, Stab 44.
-* Fake weapons are as badly balanced as the inferior version of a weapon, but are basically blunt so the striking surface usually got upgraded to "every", ironically making them as accurate or more accurate than the real version of the weapon. Bash damage was halved from the inferior version, and cut/pierce damage was again reduced to 1/4th of the inferior version, which is 1/16th the real version. A fake pike does Bash 15, Stab 3.
-* A lot of weapons got damage boosts to bring up their evaluated value. A lot of low damage weapons with rapid strike were being drastically overvalued, but the damage past armor tests showed that rapid strike often just lets you bounce off armor twice as fast.
-* Spears got some rough formula for pierce damage based on weight that I can't recover anymore, but in general the differences between spears are more minor than they used to be.
-* Polearms got the same rough damage as Ax2 at range 2, but got a separate balance line at range 1 with the raw damage reduced by 0.7. This makes polearms very impressive at range, but slightly worse than quarterstaffs against adjacent targets.
+This repeats the New Formula tab, except that Columns C-J were copied over and pasted as values, and
+then adjusted to make the numbers nice.
+
+- Accuracy was adjusted to the new values based on grip, length, striking surface, and balance from
+ the Raw tab. That means a bunch of previously accurate weapons like bionic claws got a nerf, and
+ inappropriately inaccurate weapons like katanas got a buff.
+- Weapons in the same category were generally adjusted to have roughly the same evaluation, though
+ with different values. In general, European weapons get more of their damage from bash and less
+ from cut, and are often heavier and slower, than Asian weapons. This is a little arbitrary and not
+ entirely realistic, but everyone seems to expect it. As a case in point, the Japanese two-handed
+ sword "nodachi" has 164 attack speed, bash 6, and cut 47, while the European two-handed sword
+ zweihander has 169 attack speed, base 18, cut 39. They both have values of about 26.
+- Inferior weapons got a 1 step penalty in balance compared to the real weapon, and half of the
+ cut/pierce damage is moved to bash, and the cut/pierce damage is 1/4th's the real weapons. Ie, an
+ inferior pike does Bash 30, Stab 11 to a pike's Bash 8, Stab 44.
+- Fake weapons are as badly balanced as the inferior version of a weapon, but are basically blunt so
+ the striking surface usually got upgraded to "every", ironically making them as accurate or more
+ accurate than the real version of the weapon. Bash damage was halved from the inferior version,
+ and cut/pierce damage was again reduced to 1/4th of the inferior version, which is 1/16th the real
+ version. A fake pike does Bash 15, Stab 3.
+- A lot of weapons got damage boosts to bring up their evaluated value. A lot of low damage weapons
+ with rapid strike were being drastically overvalued, but the damage past armor tests showed that
+ rapid strike often just lets you bounce off armor twice as fast.
+- Spears got some rough formula for pierce damage based on weight that I can't recover anymore, but
+ in general the differences between spears are more minor than they used to be.
+- Polearms got the same rough damage as Ax2 at range 2, but got a separate balance line at range 1
+ with the raw damage reduced by 0.7. This makes polearms very impressive at range, but slightly
+ worse than quarterstaffs against adjacent targets.
### Poposed Values Sorted
+
This is another comparison tab like New Formula Sorted, but used the data from Proposed Values.
### Comparison
+
This is a summary tab.
-In columns A-P, each weapon from the filter tab gets it's current and proposed stats, it's original value, value under the new formula, and value under the new formula using the proposed values. For proposed values, values that improved are highlighted in green and those that got worse are in red. Ideally, this will make it easy to compare changes and catch mistakes.
+In columns A-P, each weapon from the filter tab gets it's current and proposed stats, it's original
+value, value under the new formula, and value under the new formula using the proposed values. For
+proposed values, values that improved are highlighted in green and those that got worse are in red.
+Ideally, this will make it easy to compare changes and catch mistakes.
-Columns S-AH repeat the process, but cells S1, T1, U1, and V1 can be used to specify category names, and then the subtotal shows a selected subset of weapons that match those categories. This simplifies comparing things.
+Columns S-AH repeat the process, but cells S1, T1, U1, and V1 can be used to specify category names,
+and then the subtotal shows a selected subset of weapons that match those categories. This
+simplifies comparing things.
diff --git a/lang/concat_pot_files.py b/lang/concat_pot_files.py
index 71c3f830e103..837ad5af914e 100755
--- a/lang/concat_pot_files.py
+++ b/lang/concat_pot_files.py
@@ -18,13 +18,13 @@
destination_file = args[2]
if not os.path.isfile(source_file_1):
- print("Error: Couldn't find file '{}'.".format(source_file_1))
+ print(f"Error: Couldn't find file '{source_file_1}'.")
exit(1)
if not os.path.isfile(source_file_2):
- print("Error: Couldn't find file '{}'.".format(source_file_2))
+ print(f"Error: Couldn't find file '{source_file_2}'.")
exit(1)
-print("==> Merging '{}' and '{}' into '{}".format(source_file_1, source_file_2, destination_file))
+print(f"==> Merging '{source_file_1}' and '{source_file_2}' into '{destination_file}")
pot1 = polib.pofile(source_file_1)
pot2 = polib.pofile(source_file_2)
diff --git a/lang/extract_json_strings.py b/lang/extract_json_strings.py
index d9cc0c93381d..7cd9d7e4e795 100755
--- a/lang/extract_json_strings.py
+++ b/lang/extract_json_strings.py
@@ -62,7 +62,7 @@ def __init__(self, msg, item):
self.item = item
def __str__(self):
- return ("---\nJSON error\n{0}\n--- JSON Item:\n{1}\n---".format(self.msg, self.item))
+ return (f"---\nJSON error\n{self.msg}\n--- JSON Item:\n{self.item}\n---")
git_files_list = {os.path.normpath(i) for i in {
".",
@@ -222,7 +222,7 @@ def warning_supressed(filename):
all_genders = ["f", "m", "n"]
def gender_options(subject):
- return [subject + ":" + g for g in all_genders]
+ return [f"{subject}:{g}" for g in all_genders]
##
## SPECIALIZED EXTRACTION FUNCTIONS
@@ -276,7 +276,7 @@ def extract_material(state, item):
writestr(state, item["dmg_adj"][3])
wrote = True
if not wrote and not "copy-from" in item:
- print("WARNING: {}: no mandatory field in item: {}".format(state.current_source_file, item))
+ print(f"WARNING: {state.current_source_file}: no mandatory field in item: {item}")
def extract_martial_art(state, item):
@@ -287,10 +287,10 @@ def extract_martial_art(state, item):
name = item["id"]
if "description" in item:
writestr(state, item["description"],
- comment="Description for martial art '{}'".format(name))
+ comment=f"Description for martial art '{name}'")
if "initiate" in item:
writestr(state, item["initiate"], format_strings=True,
- comment="Initiate message for martial art '{}'".format(name))
+ comment=f"Initiate message for martial art '{name}'")
onhit_buffs = item.get("onhit_buffs", list())
static_buffs = item.get("static_buffs", list())
onmove_buffs = item.get("onmove_buffs", list())
@@ -299,9 +299,9 @@ def extract_martial_art(state, item):
for buff in buffs:
writestr(state, buff["name"])
if buff["name"] == item["name"]:
- c="Description of buff for martial art '{}'".format(name)
+ c=f"Description of buff for martial art '{name}'"
else:
- c="Description of buff '{}' for martial art '{}'".format(buff["name"], name)
+ c=f"Description of buff '{buff['name']}' for martial art '{name}'"
writestr(state, buff["description"], comment=c)
@@ -314,7 +314,7 @@ def extract_effect_type(state, item):
for nm_desc in zip(ctxt_name, item.get("desc", ())):
writestr(state, nm_desc[0])
writestr(state, nm_desc[1], format_strings=True,
- comment="Description of effect '{}'.".format(nm_desc[0]))
+ comment=f"Description of effect '{nm_desc[0]}'.")
else:
for i in ctxt_name:
writestr(state, i)
@@ -331,7 +331,7 @@ def extract_effect_type(state, item):
writestr(state, msg, format_strings=True)
else:
writestr(state, msg, format_strings=True,
- comment="Apply message for effect(s) '{}'.".format(', '.join(name)))
+ comment=f"Apply message for effect(s) '{', '.join(name)}'.")
# remove_message
msg = item.get("remove_message")
@@ -339,7 +339,7 @@ def extract_effect_type(state, item):
writestr(state, msg, format_strings=True)
else:
writestr(state, msg, format_strings=True,
- comment="Remove message for effect(s) '{}'.".format(', '.join(name)))
+ comment=f"Remove message for effect(s) '{', '.join(name)}'.")
# miss messages
msg = item.get("miss_messages", ())
@@ -349,7 +349,7 @@ def extract_effect_type(state, item):
else:
for m in msg:
writestr(state, m[0],
- comment="Miss message for effect(s) '{}'.".format(', '.join(name)))
+ comment=f"Miss message for effect(s) '{', '.join(name)}'.")
msg = item.get("decay_messages", ())
if not name:
for m in msg:
@@ -357,14 +357,14 @@ def extract_effect_type(state, item):
else:
for m in msg:
writestr(state, m[0],
- comment="Decay message for effect(s) '{}'.".format(', '.join(name)))
+ comment=f"Decay message for effect(s) '{', '.join(name)}'.")
# speed_name
if "speed_name" in item:
if not name:
writestr(state, item.get("speed_name"))
else:
- writestr(state, item.get("speed_name"), comment="Speed name of effect(s) '{}'.".format(', '.join(name)))
+ writestr(state, item.get("speed_name"), comment=f"Speed name of effect(s) '{', '.join(name)}'.")
# apply and remove memorial messages.
msg = item.get("apply_memorial_log")
@@ -373,18 +373,18 @@ def extract_effect_type(state, item):
writestr(state, msg, context="memorial_female")
else:
writestr(state, msg, context="memorial_male",
- comment="Male memorial apply log for effect(s) '{}'.".format(', '.join(name)))
+ comment=f"Male memorial apply log for effect(s) '{', '.join(name)}'.")
writestr(state, msg, context="memorial_female",
- comment="Female memorial apply log for effect(s) '{}'.".format(', '.join(name)))
+ comment=f"Female memorial apply log for effect(s) '{', '.join(name)}'.")
msg = item.get("remove_memorial_log")
if not name:
writestr(state, msg, context="memorial_male")
writestr(state, msg, context="memorial_female")
else:
writestr(state, msg, context="memorial_male",
- comment="Male memorial remove log for effect(s) '{}'.".format(', '.join(name)))
+ comment=f"Male memorial remove log for effect(s) '{', '.join(name)}'.")
writestr(state, msg, context="memorial_female",
- comment="Female memorial remove log for effect(s) '{}'.".format(', '.join(name)))
+ comment=f"Female memorial remove log for effect(s) '{', '.join(name)}'.")
def extract_gun(state, item):
@@ -458,9 +458,9 @@ def extract_profession(state, item):
comment_f = entry_f["str"]
if "description" in item:
writestr(state, add_context(item["description"], "prof_desc_male"),
- comment="Profession (male {}) description".format(comment_m))
+ comment=f"Profession (male {comment_m}) description")
writestr(state, add_context(item["description"], "prof_desc_female"),
- comment="Profession (female {}) description".format(comment_f))
+ comment=f"Profession (female {comment_f}) description")
def extract_scenario(state, item):
@@ -469,28 +469,28 @@ def extract_scenario(state, item):
writestr(state,
name,
context="scenario_male",
- comment="Name for scenario '{}' for a male character".format(name))
+ comment=f"Name for scenario '{name}' for a male character")
writestr(state,
name,
context="scenario_female",
- comment="Name for scenario '{}' for a female character".format(name))
+ comment=f"Name for scenario '{name}' for a female character")
if name:
msg = item.get("description")
if msg:
writestr(state,
msg,
context="scen_desc_male",
- comment="Description for scenario '{}' for a male character.".format(name))
+ comment=f"Description for scenario '{name}' for a male character.")
writestr(state,
msg,
context="scen_desc_female",
- comment="Description for scenario '{}' for a female character.".format(name))
+ comment=f"Description for scenario '{name}' for a female character.")
msg = item.get("start_name")
if msg:
writestr(state,
msg,
context="start_name",
- comment="Starting location for scenario '{}'.".format(name))
+ comment=f"Starting location for scenario '{name}'.")
else:
for f in ["description", "start_name"]:
found = item.get(f, None)
@@ -599,7 +599,7 @@ def extract_talk_effects(state, effects):
for eff in effects:
if type(eff) == dict:
if "u_buy_monster" in eff and "name" in eff:
- writestr(state, eff["name"], comment="Nickname for creature '{}'".format(eff["u_buy_monster"]))
+ writestr(state, eff["name"], comment=f"Nickname for creature '{eff['u_buy_monster']}'")
def extract_talk_response(state, response):
@@ -645,7 +645,7 @@ def extract_technique(state, item):
def extract_trap(state, item):
writestr(state, item["name"])
if "vehicle_data" in item and "sound" in item["vehicle_data"]:
- writestr(state, item["vehicle_data"]["sound"], comment="Trap-vehicle collision message for trap '{}'".format(item["name"]))
+ writestr(state, item["vehicle_data"]["sound"], comment=f"Trap-vehicle collision message for trap '{item['name']}'")
def extract_missiondef(state, item):
@@ -654,7 +654,7 @@ def extract_missiondef(state, item):
raise WrongJSONItem("JSON item don't contain 'name' field", item)
writestr(state, item_name)
if "description" in item:
- writestr(state, item["description"], comment="Description for mission '{}'".format(item_name))
+ writestr(state, item["description"], comment=f"Description for mission '{item_name}'")
if "dialogue" in item:
dialogue = item.get("dialogue")
if "describe" in dialogue:
@@ -699,7 +699,7 @@ def extract_mutation(state, item):
found = item.get(f)
# Need that check due format string argument
if found is not None:
- writestr(state, found, comment="Description for {}".format(item_name_or_id))
+ writestr(state, found, comment=f"Description for {item_name_or_id}")
if "attacks" in item:
attacks = item.get("attacks")
@@ -736,13 +736,13 @@ def extract_mutation_category(state, item):
found = item.get(f)
# Need that check due format string argument
if found is not None:
- writestr(state, found, comment="Mutation class: {} {}".format(item_name, f))
+ writestr(state, found, comment=f"Mutation class: {item_name} {f}")
found = item.get("memorial_message")
writestr(state, found, context="memorial_male",
- comment="Mutation class: {} Male memorial messsage".format(item_name))
+ comment=f"Mutation class: {item_name} Male memorial messsage")
writestr(state, found, context="memorial_female",
- comment="Mutation class: {} Female memorial messsage".format(item_name))
+ comment=f"Mutation class: {item_name} Female memorial messsage")
def extract_vehspawn(state, item):
@@ -771,7 +771,7 @@ def extract_recipe_category(state, item):
continue
subcat_name = subcat.split('_')[2]
writestr(state, subcat_name,
- comment="Crafting recipes subcategory of '{}' category".format(cat_name))
+ comment=f"Crafting recipes subcategory of '{cat_name}' category")
def extract_gate(state, item):
@@ -779,7 +779,7 @@ def extract_gate(state, item):
for (k, v) in sorted(messages.items(), key=lambda x: x[0]):
writestr(state, v,
- comment="'{}' action message of some gate object.".format(k))
+ comment=f"'{k}' action message of some gate object.")
def extract_field_type(state, item):
@@ -799,19 +799,19 @@ def extract_ter_furn_transform(state, item):
def extract_skill_display_type(state, item):
- writestr(state, item["display_string"], comment="Display string for skill display type '{}'".format(item["id"]))
+ writestr(state, item["display_string"], comment=f"Display string for skill display type '{item['id']}'")
def extract_fault(state, item):
writestr(state, item["name"])
- writestr(state, item["description"], comment="Description for fault '{}'".format(item["name"]))
+ writestr(state, item["description"], comment=f"Description for fault '{item['name']}'")
for method in item["mending_methods"]:
if "name" in method:
- writestr(state, method["name"], comment="Name of mending method for fault '{}'".format(item["name"]))
+ writestr(state, method["name"], comment=f"Name of mending method for fault '{item['name']}'")
if "description" in method:
- writestr(state, method["description"], comment="Description for mending method '{}' of fault '{}'".format(method["name"], item["name"]))
+ writestr(state, method["description"], comment=f"Description for mending method '{method['name']}' of fault '{item['name']}'")
if "success_msg" in method:
- writestr(state, method["success_msg"], format_strings=True, comment="Success message for mending method '{}' of fault '{}'".format(method["name"], item["name"]))
+ writestr(state, method["success_msg"], format_strings=True, comment=f"Success message for mending method '{method['name']}' of fault '{item['name']}'")
def extract_snippet(state, item):
@@ -875,7 +875,7 @@ def add_context(entry, ctxt):
entry = deepcopy(entry)
if type(entry) == dict:
if "ctxt" in entry:
- entry["ctxt"] += "|" + ctxt
+ entry["ctxt"] += f"|{ctxt}"
else:
entry["ctxt"] = ctxt
return entry
@@ -893,7 +893,7 @@ def writestr_basic(state, msgid, msgid_plural, msgctxt, comment, check_c_format)
if comment:
# Append `~ ` to help translators distinguish between comments
- comment = '~ ' + comment
+ comment = f"~ {comment}"
entry = polib.POEntry(
msgid=msgid,
@@ -917,7 +917,7 @@ def writestr(state, string, context=None, format_strings=False, comment=None, pl
if comment is None:
comment = string["//~"]
else:
- comment = "{}\n{}".format(comment, string["//~"])
+ comment = f"{comment}\n{string['//~']}"
context = string.get( "ctxt" )
str_pl = None
if pl_fmt:
@@ -927,7 +927,7 @@ def writestr(state, string, context=None, format_strings=False, comment=None, pl
str_pl = string["str_sp"]
else:
# no "str_pl" entry in json, assuming regular plural form as in translations.cpp
- str_pl = "{}s".format(string["str"])
+ str_pl = f"{string['str']}s"
elif "str_pl" in string or "str_sp" in string:
raise WrongJSONItem("ERROR: 'str_pl' and 'str_sp' not supported here", string)
if "str" in string:
@@ -943,7 +943,7 @@ def writestr(state, string, context=None, format_strings=False, comment=None, pl
str_singular = string
if pl_fmt:
# no "str_pl" entry in json, assuming regular plural form as in translations.cpp
- str_pl = "{}s".format(string)
+ str_pl = f"{string}s"
else:
str_pl = None
elif string is None:
@@ -996,7 +996,7 @@ def extract_use_action_msgs(state, use_action, it_name):
if type(use_action) is dict and f in use_action:
if it_name:
writestr(state, use_action[f],
- comment="Use action {} for {}.".format(f, it_name))
+ comment=f"Use action {f} for {it_name}.")
# Recursively check sub objects as they may contain more messages.
if type(use_action) is list:
for i in use_action:
@@ -1022,9 +1022,9 @@ def extract_json(state, item):
extract_specials[object_type](state, item)
return
elif object_type not in automatically_convertible:
- raise WrongJSONItem("ERROR: Unrecognized object type '{}'!".format(object_type), item)
+ raise WrongJSONItem(f"ERROR: Unrecognized object type '{object_type}'!", item)
if object_type not in known_types:
- print("WARNING: known_types does not contain object type '{}'".format(object_type))
+ print(f"WARNING: known_types does not contain object type '{object_type}'")
# Use mod id as project name if project name is not specified
if object_type == "MOD_INFO" and not state.project_name:
state.project_name = item.get("id")
@@ -1053,12 +1053,12 @@ def extract_json(state, item):
wrote = True
if "conditional_names" in item:
for cname in item["conditional_names"]:
- c = "Conditional name for {} when {} matches {}".format(name, cname["type"], cname["condition"])
+ c = f"Conditional name for {name} when {cname['type']} matches {cname['condition']}"
writestr(state, cname["name"], comment=c, format_strings=True, pl_fmt=True)
wrote = True
if "description" in item:
if name:
- c = "Description for {}".format(name)
+ c = f"Description for {name}"
else:
c = None
writestr(state, item["description"], comment=c)
@@ -1070,7 +1070,7 @@ def extract_json(state, item):
writestr(state, item["sound"])
wrote = True
if "sound_description" in item:
- writestr(state, item["sound_description"], comment="Description for the sound of spell '{}'".format(name))
+ writestr(state, item["sound_description"], comment=f"Description for the sound of spell '{name}'")
wrote = True
if "snippet_category" in item and type(item["snippet_category"]) is list:
# snippet_category is either a simple string (the category ident)
@@ -1124,7 +1124,7 @@ def extract_json(state, item):
for rech in relic_data["recharge_scheme"]:
if "message" in rech:
writestr(state, rech["message"],
- comment="Relic recharge message for {} '{}'".format(object_type, name)
+ comment=f"Relic recharge message for {object_type} '{name}'"
)
wrote = True
if "text" in item:
@@ -1135,7 +1135,7 @@ def extract_json(state, item):
wrote = True
if "message" in item:
writestr(state, item["message"], format_strings=True,
- comment="Message for {} '{}'".format(object_type, name) )
+ comment=f"Message for {object_type} '{name}'" )
wrote = True
if "messages" in item:
for message in item["messages"]:
@@ -1168,19 +1168,19 @@ def extract_json(state, item):
wrote = True
if not wrote and not "copy-from" in item:
if not warning_supressed(state.current_source_file):
- print("WARNING: {}: nothing translatable found in item: {}".format(state.current_source_file, item))
+ print(f"WARNING: {state.current_source_file}: nothing translatable found in item: {item}")
def assert_num_args(node, args, n):
if len(args) != n:
- raise Exception("invalid amount of arguments in translation call (found {}, expected {}). Error source: {}".format(len(args), n, ast.to_lua_source(node)))
+ raise Exception(f"invalid amount of arguments in translation call (found {len(args)}, expected {n}). Error source: {ast.to_lua_source(node)}")
def get_string_literal(node, args, pos):
if isinstance(args[pos], astnodes.String):
return args[pos].s
else:
- raise Exception("argument to translation call should be string. Error source: {}".format(ast.to_lua_source(node)))
+ raise Exception(f"argument to translation call should be string. Error source: {ast.to_lua_source(node)}")
class LuaComment:
@@ -1233,7 +1233,7 @@ def load_comments(self, comments):
def report_unused_comments(self):
for comment in self.trans_comments:
if not comment.used:
- print("WARNING: unused translator comment at {}:{}".format(self.state.current_source_file, comment.line ))
+ print(f"WARNING: unused translator comment at {self.state.current_source_file}:{comment.line}")
def __find_trans_comments_before(self, line):
for comment in self.trans_comments:
@@ -1257,7 +1257,7 @@ def __find_comment(self, line):
else:
comment = self.__find_regular_comment_before(line)
if comment:
- print("WARNING: regular comment used when translation comment may be intended. Error source: {}:{}".format(self.state.current_source_file, comment.line ))
+ print(f"WARNING: regular comment used when translation comment may be intended. Error source: {self.state.current_source_file}:{comment.line}")
return None
def visit_Call(self, node):
@@ -1301,7 +1301,7 @@ def visit_Call(self, node):
msgid_plural = get_string_literal(node, func_args, 2)
write = True
except Exception as E:
- print("WARNING: {}".format(E))
+ print(f"WARNING: {E}")
if write:
comment = self.__find_comment(func_line)
writestr_basic(self.state, msgid, msgid_plural, msgctxt, comment, check_c_format = True)
@@ -1323,7 +1323,7 @@ def extract_lua(state, source):
for comment in comments:
if comment.is_trans_comment:
- print("Line {}: {}".format( comment.line, comment.text))
+ print(f"Line {comment.line}: {comment.text}")
visitor = LuaCallVisitor()
visitor.register_state(state)
@@ -1348,25 +1348,25 @@ def extract_all_from_dir(state, dir):
full_name = os.path.join(dir, f)
if os.path.isdir(full_name):
if os.path.normpath(full_name) in ignore_dirs:
- log_verbose("Skipping dir (ignored): {}".format(f))
+ log_verbose(f"Skipping dir (ignored): {f}")
else:
dirs.append(f)
elif f in skiplist:
- log_verbose("Skipping file (skiplist): '{}'".format(f))
+ log_verbose(f"Skipping file (skiplist): '{f}'")
elif full_name in ignore_files:
- log_verbose("Skipping file (ignored): '{}'".format(f))
+ log_verbose(f"Skipping file (ignored): '{f}'")
elif f.endswith(".json"):
if not options.tracked_only or full_name in git_files_list:
extract_all_from_json_file(state, full_name)
else:
- log_verbose("Skipping file (untracked): '{}'".format(full_name))
+ log_verbose(f"Skipping file (untracked): '{full_name}'")
elif f.endswith(".lua"):
if not options.tracked_only or full_name in git_files_list:
extract_all_from_lua_file(state, full_name)
else:
- log_verbose("Skipping file (untracked): '{}'".format(full_name))
+ log_verbose(f"Skipping file (untracked): '{full_name}'")
else:
- log_verbose("Skipping file (not applicable): '{}'".format(f))
+ log_verbose(f"Skipping file (not applicable): '{f}'")
for d in dirs:
extract_all_from_dir(state, os.path.join(dir, d))
@@ -1374,7 +1374,7 @@ def extract_all_from_dir(state, dir):
def extract_all_from_json_file(state, json_file):
"Extract translatable strings from every object in the specified JSON file."
state.current_source_file = json_file
- log_verbose("Loading {}".format(json_file))
+ log_verbose(f"Loading {json_file}")
with open(json_file, encoding="utf-8") as fp:
jsondata = json.load(fp)
@@ -1386,7 +1386,7 @@ def extract_all_from_json_file(state, json_file):
for jsonobject in jsondata:
extract_json(state, jsonobject)
except WrongJSONItem as E:
- print("---\nFile: '{0}'".format(json_file))
+ print(f"---\nFile: '{json_file}'")
print(E)
exit(1)
@@ -1394,7 +1394,7 @@ def extract_all_from_json_file(state, json_file):
def extract_all_from_lua_file(state, lua_file):
"Extract translatable strings from lua code in the specified file."
state.current_source_file = lua_file
- log_verbose("Loading {}".format(lua_file))
+ log_verbose(f"Loading {lua_file}")
with open(lua_file, encoding="utf-8") as fp:
luadata_raw = fp.read()
@@ -1402,7 +1402,7 @@ def extract_all_from_lua_file(state, lua_file):
try:
extract_lua(state, luadata_raw)
except Exception as E:
- print("---\nFile: '{0}'".format(lua_file))
+ print(f"---\nFile: '{lua_file}'")
print(E)
exit(1)
@@ -1417,7 +1417,7 @@ def prepare_git_file_list():
output = res.stdout.readlines()
res.communicate()
if res.returncode != 0:
- print("'git ls-files' command exited with non-zero exit code: {}".format(res.returncode))
+ print(f"'git ls-files' command exited with non-zero exit code: {res.returncode}")
exit(1)
for f in output:
if len(f) > 0:
@@ -1467,15 +1467,15 @@ def write_pot(entries, output_path, project_name):
print("==> Parsing JSON")
for i in sorted(directories):
- print("----> Traversing directory {}".format(i))
+ print(f"----> Traversing directory {i}")
extract_all_from_dir(state, i)
if options.warn_unused_types:
print("==> Checking types")
if len(known_types - found_types) != 0:
- print("WARNING: type {} not found in any JSON objects".format(known_types - found_types))
+ print(f"WARNING: type {known_types - found_types} not found in any JSON objects")
if len(needs_plural - found_types) != 0:
- print("WARNING: type {} from needs_plural not found in any JSON objects".format(needs_plural - found_types))
+ print(f"WARNING: type {needs_plural - found_types} from needs_plural not found in any JSON objects")
print("==> Writing POT")
if not state.project_name:
diff --git a/lang/po/ar.po b/lang/po/ar.po
index c9d79242e189..e6ddf48e2a23 100644
--- a/lang/po/ar.po
+++ b/lang/po/ar.po
@@ -1,12 +1,12 @@
#
# Translators:
-# Coolthulhu , 2020
+# Coolthulhu , 2023
#
msgid ""
msgstr ""
"Project-Id-Version: cataclysm-bn\n"
-"POT-Creation-Date: 2023-08-03 04:45+0000\n"
-"Last-Translator: Coolthulhu , 2020\n"
+"POT-Creation-Date: 2023-09-15 13:27+0000\n"
+"Last-Translator: Coolthulhu , 2023\n"
"Language-Team: Arabic (https://app.transifex.com/bn-team/teams/113585/ar/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1490,10 +1490,18 @@ msgstr ""
msgid "[Combat] One Down, Billions to Go…"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] The Undertaker"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Rude Awakening"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] Pacifist"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Decamate"
msgstr ""
@@ -3948,10 +3956,28 @@ msgstr ""
#: data/json/bionics.json data/json/items/bionics.json
msgid ""
"Installed within you is a perpetual generator powered by nonsensoleum. When"
-" activated it's power gen doubles. If you are seeing this, you'd better be "
+" activated its power gen doubles. If you are seeing this, you'd better be "
"debugging."
msgstr ""
+#: data/json/bionics.json data/json/items/bionics.json
+msgid "Debug Fuel Cell CBM"
+msgid_plural "Debug Fuel Cell CBMs"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'Debug Fuel Cell CBM'}
+#: data/json/bionics.json data/json/items/bionics.json
+msgid ""
+"The power of the sun, in the palm of my hand! Installed within you is a "
+"perpetual generator powered by nonsensoleum. When activated its power gen "
+"doubles. If you are seeing this, you'd better be debugging."
+msgstr ""
+
#: data/json/body_parts.json
msgid "appendix"
msgstr ""
@@ -8090,6 +8116,17 @@ msgstr ""
msgid "You're winded."
msgstr ""
+#: data/json/effects.json
+msgid "Bronchospasms"
+msgstr ""
+
+#. ~ Description of effect 'Bronchospasms'.
+#: data/json/effects.json
+msgid ""
+"Something in the air is making it harder to breathe, aggravating your "
+"asthma. Increases the chance of suffering an asthma attack."
+msgstr ""
+
#: data/json/effects.json
msgid "The ceiling collapses on you!"
msgstr ""
@@ -22063,34 +22100,122 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+#: data/json/species.json
+msgid "mammal"
+msgid_plural "mammals"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'mammal'}
#: data/json/species.json
msgid "a mammal"
msgstr ""
+#: data/json/species.json
+msgid "amphibian"
+msgid_plural "amphibians"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'amphibian'}
#: data/json/species.json
msgid "an amphibian"
msgstr ""
+#: data/json/species.json
+msgid "bird"
+msgid_plural "birds"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'bird'}
#: data/json/species.json
msgid "a bird"
msgstr ""
+#: data/json/species.json
+msgid "reptile"
+msgid_plural "reptiles"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'reptile'}
#: data/json/species.json
msgid "a reptile"
msgstr ""
+#: data/json/species.json
+msgid "fish"
+msgid_plural "fish"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str_sp': 'fish'}
#: data/json/species.json
msgid "a fish"
msgstr ""
+#: data/json/species.json
+msgid "mutant"
+msgid_plural "mutants"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'mutant'}
#: data/json/species.json
msgid "a mutant"
msgstr ""
+#: data/json/species.json
+msgid "nether creature"
+msgid_plural "nether creatures"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'nether creature'}
#: data/json/species.json
msgid "a nether creature"
msgstr ""
+#: data/json/species.json data/json/monsters/slimes.json
+msgid "blob"
+msgid_plural "blobs"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'blob'}
#: data/json/species.json
msgid "a blob"
msgstr ""
@@ -22099,30 +22224,107 @@ msgstr ""
msgid "plop."
msgstr ""
+#: data/json/species.json
+msgid "fungus"
+msgid_plural "fungi"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'fungus', 'str_pl': 'fungi'}
#: data/json/species.json
msgid "a fungus"
msgstr ""
+#: data/json/species.json
+msgid "leech plant"
+msgid_plural "leech plants"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'leech plant'}
#: data/json/species.json
msgid "a leech plant"
msgstr ""
+#: data/json/species.json
+msgid "insect"
+msgid_plural "insects"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'insect'}
#: data/json/species.json
msgid "an insect"
msgstr ""
+#: data/json/species.json
+msgid "spider"
+msgid_plural "spiders"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'spider'}
#: data/json/species.json
msgid "a spider"
msgstr ""
+#: data/json/species.json
+msgid "plant"
+msgid_plural "plants"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'plant'}
#: data/json/species.json
msgid "a plant"
msgstr ""
+#: data/json/species.json
+msgid "mollusk"
+msgid_plural "mollusks"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'mollusk'}
#: data/json/species.json
msgid "a mollusk"
msgstr ""
+#: data/json/species.json
+msgid "worm"
+msgid_plural "worms"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'worm'}
#: data/json/species.json
msgid "a worm"
msgstr ""
@@ -22131,6 +22333,18 @@ msgstr ""
msgid "rustle."
msgstr ""
+#: data/json/species.json data/json/monsters/zed-classic.json
+#: data/json/npcs/talk_tags.json
+msgid "zombie"
+msgid_plural "zombies"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'zombie'}
#: data/json/species.json
msgid "a zombie"
msgstr ""
@@ -22139,6 +22353,17 @@ msgstr ""
msgid "shuffling."
msgstr ""
+#: data/json/species.json
+msgid "robot"
+msgid_plural "robots"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'robot'}
#: data/json/species.json
msgid "a robot"
msgstr ""
@@ -22147,18 +22372,71 @@ msgstr ""
msgid "mechanical whirring."
msgstr ""
+#: data/json/species.json data/json/npcs/talk_tags.json
+msgid "horror"
+msgid_plural "horrors"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'horror'}
#: data/json/species.json
msgid "a horror"
msgstr ""
+#: data/json/species.json
+msgid "abberation"
+msgid_plural "abberations"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'abberation'}
#: data/json/species.json
msgid "an aberration"
msgstr ""
+#: data/json/species.json
+msgid "hallucination"
+msgid_plural "hallucinations"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#: data/json/species.json src/mtype.cpp
+msgid "human"
+msgid_plural "humans"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'human'}
#: data/json/species.json
msgid "a human"
msgstr ""
+#: data/json/species.json
+msgid "unknown species"
+msgid_plural "unknown species"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
#: data/json/speech.json data/mods/Aftershock/speech.json
#: data/mods/CrazyCataclysm/crazy_speech.json
msgid "\"Hello?\""
@@ -51184,8 +51462,8 @@ msgstr[5] ""
#. flechettes, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless flechette rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless flechette rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
#: data/json/items/ammo/20x66mm.json
@@ -51201,8 +51479,8 @@ msgstr[5] ""
#. ~ Description for {'str': '20x66mm buckshot, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless buckshot rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless buckshot rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
#: data/json/items/ammo/20x66mm.json
@@ -51219,8 +51497,8 @@ msgstr[5] ""
#. slugs, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless solid projectile "
-"rounds. Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless solid projectile rounds. "
+"Being caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
#: data/json/items/ammo/20x66mm.json
@@ -53175,8 +53453,25 @@ msgid ""
msgstr ""
#: data/json/items/ammo/8x40mm.json
-msgid "bootleg 8x40mm JHP"
-msgid_plural "bootleg 8x40mm JHPs"
+msgid "8x40mm JHP, handmade"
+msgid_plural "8x40mm JHP, handmades"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': '8x40mm JHP, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm JHP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm caseless, handmade"
+msgid_plural "8x40mm caseless, handmades"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
@@ -53184,13 +53479,47 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
-#. ~ Description for {'str': 'bootleg 8x40mm JHP'}
+#. ~ Description for {'str': '8x40mm caseless, handmade'}
#: data/json/items/ammo/8x40mm.json
msgid ""
-"Bootleg duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
+"Handmade duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
"rounds, these cannot be disassembled or reloaded."
msgstr ""
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm HVP, handmade"
+msgid_plural "8x40mm HVP, handmades"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': '8x40mm HVP, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm HVP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm tracer, handmade"
+msgid_plural "8x40mm tracer, handmades"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': '8x40mm tracer, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm tracer rounds. Being caseless rounds,"
+" these cannot be disassembled or reloaded."
+msgstr ""
+
#. ~ Description for {'str_sp': '8x40mm caseless'}
#: data/json/items/ammo/8x40mm.json
msgid ""
@@ -53623,8 +53952,8 @@ msgid "A tube of small paintballs. They deal virtually no damage."
msgstr ""
#: data/json/items/ammo/rpg.json
-msgid "PG-7VL 93mm rocket"
-msgid_plural "PG-7VL 93mm rockets"
+msgid "PG-7VL RPG-7 rocket"
+msgid_plural "PG-7VL RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
@@ -53632,14 +53961,14 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
-#. ~ Description for PG-7VL 93mm rocket
+#. ~ Description for PG-7VL RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "93mm single-stage high-explosive ammunition for the RPG-7."
msgstr ""
#: data/json/items/ammo/rpg.json
-msgid "PG-7VR 64mm/105mm rocket"
-msgid_plural "PG-7VR 64mm/105mm rockets"
+msgid "PG-7VR RPG-7 rocket"
+msgid_plural "PG-7VR RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
@@ -53647,14 +53976,14 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
-#. ~ Description for PG-7VR 64mm/105mm rocket
+#. ~ Description for PG-7VR RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "64mm/105mm high-explosive tandem ammunition for the RPG-7."
msgstr ""
#: data/json/items/ammo/rpg.json
-msgid "TBG-7V 105mm rocket"
-msgid_plural "TBG-7V 105mm rockets"
+msgid "TBG-7V RPG-7 rocket"
+msgid_plural "TBG-7V RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
@@ -53662,14 +53991,14 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
-#. ~ Description for TBG-7V 105mm rocket
+#. ~ Description for TBG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "105mm thermobaric ammunition for the RPG-7."
msgstr ""
#: data/json/items/ammo/rpg.json
-msgid "OG-7V 40mm rocket"
-msgid_plural "OG-7V 40mm rockets"
+msgid "OG-7V RPG-7 rocket"
+msgid_plural "OG-7V RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
@@ -53677,7 +54006,7 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
-#. ~ Description for OG-7V 40mm rocket
+#. ~ Description for OG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid ""
"40mm high-explosive fragmentation antipersonnel ammunition for the RPG-7."
@@ -82127,6 +82456,66 @@ msgid ""
"A pickled egg. Rather salty, but tastes good and lasts for a long time."
msgstr ""
+#: data/json/items/comestibles/egg.json
+msgid "salsify omelette"
+msgid_plural "salsify omelette"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str_sp': 'salsify omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A salsify omelette."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "wild veggetable omelette"
+msgid_plural "wild veggetable omelette"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str_sp': 'wild veggetable omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with wild vegetables."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "mushroom omelette"
+msgid_plural "mushroom omelette"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str_sp': 'mushroom omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with mushrooms."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "spanish omelette"
+msgid_plural "spanish omelette"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str_sp': 'spanish omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A spanish omelette."
+msgstr ""
+
#: data/json/items/comestibles/frozen.json
msgid "milkshake"
msgid_plural "milkshakes"
@@ -83531,6 +83920,7 @@ msgstr ""
#: data/json/items/comestibles/junkfood.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cookie"
msgid_plural "cookies"
msgstr[0] ""
@@ -86738,6 +87128,7 @@ msgstr ""
#: data/json/items/comestibles/med.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "chewing gum"
msgid_plural "chewing gum"
msgstr[0] ""
@@ -95093,6 +95484,7 @@ msgstr ""
#: data/json/items/comestibles/wheat.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cracker"
msgid_plural "crackers"
msgstr[0] ""
@@ -109787,6 +110179,23 @@ msgid ""
"likely evolved."
msgstr ""
+#: data/json/items/melee/spears_and_polearms.json
+msgid "makeshift glaive"
+msgid_plural "makeshift glaives"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'makeshift glaive'}
+#: data/json/items/melee/spears_and_polearms.json
+msgid ""
+"This is a large blade attached to a long stick. It could do a considerable "
+"amount of damage."
+msgstr ""
+
#: data/json/items/melee/spears_and_polearms.json
msgid "glaive"
msgid_plural "glaives"
@@ -117488,7 +117897,7 @@ msgstr ""
#. ~ Use action need_charges_msg for {'str': 'refillable lighter'}.
#: data/json/items/tool/fire.json src/activity_actor.cpp src/explosion.cpp
-#: src/gates.cpp
+#: src/gates.cpp src/iuse.cpp
msgid "Nothing happens."
msgstr ""
@@ -119773,23 +120182,6 @@ msgid ""
"from uncertain sources like a river may be dirty."
msgstr ""
-#: data/json/items/tool/misc.json
-msgid "makeshift glaive"
-msgid_plural "makeshift glaives"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-msgstr[4] ""
-msgstr[5] ""
-
-#. ~ Description for {'str': 'makeshift glaive'}
-#: data/json/items/tool/misc.json
-msgid ""
-"This is a large blade attached to a long stick. It could do a considerable "
-"amount of damage."
-msgstr ""
-
#: data/json/items/tool/misc.json
msgid "mind splicer kit"
msgid_plural "mind splicer kits"
@@ -133189,16 +133581,6 @@ msgid ""
"of infesting sewer lines."
msgstr ""
-#: data/json/monsters/slimes.json
-msgid "blob"
-msgid_plural "blobs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-msgstr[4] ""
-msgstr[5] ""
-
#. ~ Description for {'str': 'blob'}
#: data/json/monsters/slimes.json
msgid ""
@@ -134016,16 +134398,6 @@ msgid ""
"envelope of scar tissue."
msgstr ""
-#: data/json/monsters/zed-classic.json data/json/npcs/talk_tags.json
-msgid "zombie"
-msgid_plural "zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-msgstr[4] ""
-msgstr[5] ""
-
#. ~ Description for {'str': 'zombie'}
#: data/json/monsters/zed-classic.json
msgid ""
@@ -144539,7 +144911,8 @@ msgid "I'll kill you if you don't."
msgstr ""
#: data/json/npcs/TALK_COMMON_OTHER.json
-#: data/json/npcs/TALK_TRUE_FOODPERSON.json src/iuse.cpp
+#: data/json/npcs/TALK_TRUE_FOODPERSON.json
+#: data/mods/smart_house_remotes/main.lua src/iuse.cpp
msgid "Nevermind."
msgstr ""
@@ -152343,10 +152716,6 @@ msgstr ""
msgid "demon"
msgstr ""
-#: data/json/npcs/talk_tags.json
-msgid "horror"
-msgstr ""
-
#: data/json/npcs/talk_tags.json
msgid "indescribable beast"
msgstr ""
@@ -165688,6 +166057,16 @@ msgid ""
"coming no further. Go away."
msgstr ""
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"I was sent here by the traders at the refugee center. They told me to "
+"deliver this hard drive to you."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "The traders also mentioned you were looking for help."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "Wait! What??"
msgstr ""
@@ -165724,6 +166103,20 @@ msgstr ""
msgid "Alright, I'm leaving."
msgstr ""
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"Understood. Please drop the drive on the box embedded beneath the intercom."
+" You are welcome to leave afterwards."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "[Do as the Intercom Says]"
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "Didn't bring the hard drive now, let me return with it."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "No. Now leave."
msgstr ""
@@ -197636,6 +198029,17 @@ msgid ""
"constant jet of warm air to heat an enclosed space."
msgstr ""
+#: data/mods/Aftershock/mobs/species.json
+msgid "intelligent animal"
+msgid_plural "intelligent animals"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'intelligent animal'}
#: data/mods/Aftershock/mobs/species.json
msgid "an intelligent animal created by man before the Cataclysm"
msgstr ""
@@ -208585,6 +208989,17 @@ msgstr ""
msgid "DinoLab Operating Theater Access Control"
msgstr ""
+#: data/mods/DinoMod/monsters/dinosaur.json
+msgid "dinosaur"
+msgid_plural "dinosaurs"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'dinosaur'}
#: data/mods/DinoMod/monsters/dinosaur.json
msgid "a dinosaur"
msgstr ""
@@ -223735,6 +224150,11 @@ msgstr ""
msgid "RUNES"
msgstr ""
+#. ~ Crafting recipes subcategory of 'ENCHANTED' category
+#: data/mods/Magiclysm/qualities.json
+msgid "ENCHANTING"
+msgstr ""
+
#: data/mods/Magiclysm/qualities.json
msgid "mana focusing"
msgstr ""
@@ -223862,6 +224282,36 @@ msgctxt "start_name"
msgid "Wizard's Retreat Vacation"
msgstr ""
+#: data/mods/Magiclysm/species.json
+msgid "magical beast"
+msgid_plural "magical beasts"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "dragon"
+msgid_plural "dragons"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "lizardfolk"
+msgid_plural "lizardfolk"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
#: data/mods/Magiclysm/start_locations.json
msgid "Wizard's Secret Basement Study"
msgstr ""
@@ -224038,6 +224488,42 @@ msgid ""
"lights."
msgstr ""
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Bless"
+msgstr ""
+
+#. ~ Description for {'str': 'Bless'}
+#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "A spell of blessing that gives you energy and boosts your abilities."
+msgstr ""
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Holy Blade"
+msgstr ""
+
+#. ~ Description for Holy Blade
+#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
+#. Holy Blade'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "This blade of light will cut through any evil it makes contact with!"
+msgstr ""
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Spiritual Armor"
+msgstr ""
+
+#. ~ Description for Spiritual Armor
+#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
+#. of Spiritual Armor'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid ""
+"Evil will not make it through your defenses if your faith is strong enough!"
+msgstr ""
+
#: data/mods/Magiclysm/Spells/biomancer.json
msgid "Cure Light Wounds"
msgstr ""
@@ -225501,17 +225987,6 @@ msgid ""
"harmless."
msgstr ""
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Bless"
-msgstr ""
-
-#. ~ Description for {'str': 'Bless'}
-#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "A spell of blessing that gives you energy and boosts your abilities."
-msgstr ""
-
#: data/mods/Magiclysm/Spells/technomancer.json
#: data/mods/Magiclysm/effects/effects.json
msgid "Invisibility"
@@ -225529,31 +226004,6 @@ msgstr ""
msgid "To the outside world, your body fades away and you cease to exist!"
msgstr ""
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Holy Blade"
-msgstr ""
-
-#. ~ Description for Holy Blade
-#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
-#. Holy Blade'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "This blade of light will cut through any evil it makes contact with!"
-msgstr ""
-
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Spiritual Armor"
-msgstr ""
-
-#. ~ Description for Spiritual Armor
-#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
-#. of Spiritual Armor'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid ""
-"Evil will not make it through your defenses if your faith is strong enough!"
-msgstr ""
-
#: data/mods/Magiclysm/Spells/technomancer.json
msgid "Lamp"
msgstr ""
@@ -228219,6 +228669,26 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "heavy sledge hammer +1"
+msgid_plural "heavy sledge hammers +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "heavy sledge hammer +2"
+msgid_plural "heavy sledge hammers +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "warhammer +1"
msgid_plural "warhammer +1s"
@@ -228560,6 +229030,7 @@ msgstr[4] ""
msgstr[5] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +1"
msgid_plural "crowbar +1s"
msgstr[0] ""
@@ -228570,6 +229041,7 @@ msgstr[4] ""
msgstr[5] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +2"
msgid_plural "crowbar +2s"
msgstr[0] ""
@@ -228660,6 +229132,7 @@ msgstr[4] ""
msgstr[5] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +1"
msgid_plural "hunting knife +1s"
msgstr[0] ""
@@ -228670,6 +229143,7 @@ msgstr[4] ""
msgstr[5] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +2"
msgid_plural "hunting knife +2s"
msgstr[0] ""
@@ -228959,6 +229433,26 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +1"
+msgid_plural "lucerne hammers +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +2"
+msgid_plural "lucerne hammers +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "Biomancer spear"
msgid_plural "Biomancer spears"
@@ -230083,6 +230577,126 @@ msgid ""
"turns into the item pictured on the front, in this case a crowbar."
msgstr ""
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +1"
+msgid_plural "bottle jacks +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +2"
+msgid_plural "bottle jacks +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +1"
+msgid_plural "scalpels +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +2"
+msgid_plural "scalpels +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +1"
+msgid_plural "butcher knives +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +2"
+msgid_plural "butcher knives +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +1"
+msgid_plural "meat cleavers +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +2"
+msgid_plural "meat cleavers +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +1"
+msgid_plural "carving knives +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +2"
+msgid_plural "carving knives +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +1"
+msgid_plural "butchering kits +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +2"
+msgid_plural "butchering kits +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
#: data/mods/Magiclysm/items/enchanted_unarmed.json
msgid "cestus +1"
msgid_plural "cestus +1s"
@@ -231521,6 +232135,24 @@ msgid ""
"protective equipment inside."
msgstr ""
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid "Enchanter's Guidebook"
+msgid_plural "copies of Enchanter's Guidebooks"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': "Enchanter's Guidebook", 'str_pl': "copies of
+#. Enchanter's Guidebooks"}
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid ""
+"A hefty textbook on the theory and practice of magically strengthening "
+"weapons and tools."
+msgstr ""
+
#: data/mods/Magiclysm/items/spell_scrolls.json
msgid "Spell Scroll"
msgid_plural "Spell Scrolls"
@@ -233100,6 +233732,16 @@ msgid ""
"much more expensive."
msgstr ""
+#: data/mods/Magiclysm/monsters/demon_spider.json
+msgid "demon spider"
+msgid_plural "demon spiders"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid "demon spiderling"
msgid_plural "demon spiderlings"
@@ -233119,16 +233761,6 @@ msgid ""
"with venom."
msgstr ""
-#: data/mods/Magiclysm/monsters/demon_spider.json
-msgid "demon spider"
-msgid_plural "demon spiders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-msgstr[4] ""
-msgstr[5] ""
-
#. ~ Description for demon spider
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid ""
@@ -236482,10 +237114,30 @@ msgid ""
"human candy! Are you a real monster? Will you be able to devour it all?\""
msgstr ""
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "marshmallow"
+msgid_plural "marshmallows"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "shlop."
msgstr ""
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "gummy"
+msgid_plural "gummies"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "pop."
msgstr ""
@@ -239039,6 +239691,15 @@ msgid ""
"city size set to 1 and spacing set to 8."
msgstr ""
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "SaveLoad Lua Test"
+msgstr ""
+
+#. ~ Description for SaveLoad Lua Test
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "Mod for testing Lua save/load API."
+msgstr ""
+
#: data/mods/sees_player_hitbutton/modinfo.json
msgid "sees-player icon, HitButton_iso"
msgstr ""
@@ -239061,6 +239722,82 @@ msgid ""
"retrodays tileset."
msgstr ""
+#: data/mods/smart_house_remotes/item.json
+msgid "smart house remote"
+msgid_plural "smart house remotes"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+msgstr[3] ""
+msgstr[4] ""
+msgstr[5] ""
+
+#. ~ Description for {'str': 'smart house remote'}
+#: data/mods/smart_house_remotes/item.json
+msgid ""
+"A small remote with lcd display used to control garage doors and window "
+"curtains. Completely useless now, unless you manage to restore power to the"
+" house."
+msgstr ""
+
+#: data/mods/smart_house_remotes/iuse.json
+msgid "Control doors and shutters"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Open curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Close curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Raise garage door"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Lower garage door"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's not enough grid charge.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Low Current At Endpoint"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when player is too far away from the area.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Signal"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's nothing to activate.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Endpoints Available"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "The remote beeps quietly."
+msgstr ""
+
+#. ~ Title of the menu prompting player to select what to activate with the
+#. remote.
+#. Typically it's doors, garage doors or window curtains.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Select endpoint"
+msgstr ""
+
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Smart House Remotes"
+msgstr ""
+
+#. ~ Description for Smart House Remotes
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Add remotes for controlling garage doors and window curtains."
+msgstr ""
+
#: data/mods/speedydex/modinfo.json
msgid "SpeedyDex"
msgstr ""
@@ -240487,6 +241224,14 @@ msgstr ""
msgid "Debug Menu"
msgstr ""
+#: data/raw/keybindings/keybindings.json
+msgid "Lua Console"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Reload Lua Code"
+msgstr ""
+
#: data/raw/keybindings/keybindings.json
msgid "View Scentmap"
msgstr ""
@@ -241042,6 +241787,26 @@ msgstr ""
msgid "Add new page"
msgstr ""
+#: data/raw/keybindings/keybindings.json
+msgid "Edit command"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History up"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History down"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the top"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the bottom"
+msgstr ""
+
#: data/raw/keybindings/messages.json
msgid "Toggle wide display"
msgstr ""
@@ -241200,7 +241965,31 @@ msgstr ""
#: src/achievement.cpp
#, c-format
-msgid "Attain %s skill level of %i (%i/%i)."
+msgid "Kill at least %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Don't kill even a single %s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Kill no more than %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+msgid " (failed)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Attain skill level of %i in %s (%i/%i)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Stay at or below skill level of %i in %s (%i/%i)"
msgstr ""
#: src/achievement.cpp
@@ -246898,6 +247687,30 @@ msgstr ""
msgid "に坂索トし荷測のンおク妙免イロコヤ梅棋厚れ表幌"
msgstr ""
+#: src/catalua_console.cpp
+msgid "Press Ctrl+S to run script, press Esc to cancel"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press arrow keys to navigate text input"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to add new line"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to enter/edit command, Esc to quit"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Up/Down arrows to select from history"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press PgUp/PgDn/Home/End to scroll output window"
+msgstr ""
+
#: src/character.cpp src/debug_menu.cpp src/game.cpp src/iuse.cpp
#: src/npctrade.cpp
msgid "You"
@@ -251751,6 +252564,10 @@ msgstr ""
msgid "Change [b]attery charge"
msgstr ""
+#: src/debug_menu.cpp
+msgid "Export [j]son template"
+msgstr ""
+
#: src/debug_menu.cpp
msgid "Vehicle…"
msgstr ""
@@ -251867,6 +252684,10 @@ msgstr ""
msgid "Player…"
msgstr ""
+#: src/debug_menu.cpp
+msgid "Lua console"
+msgstr ""
+
#: src/debug_menu.cpp
msgid ""
"Debug Functions - Manipulate the fabric of reality!\n"
@@ -252737,6 +253558,10 @@ msgstr ""
msgid "By how much? (in kJ, negative to discharge)"
msgstr ""
+#: src/debug_menu.cpp
+msgid "JSON template written to debug.log"
+msgstr ""
+
#: src/dependency_tree.cpp
msgid "Missing Dependency(ies): "
msgstr ""
@@ -257118,21 +257943,19 @@ msgstr ""
#: src/game.cpp
#, c-format
-msgid "Stepping into that %1$s looks risky, but you enter anyway."
+msgid "Stepping into that %1$s looks risky. %2$s"
msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Run into it if you wish to enter "
-"anyway."
+msgid "But you enter anyway."
msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Crouch and move into it if you wish to"
-" enter anyway."
+msgid "Run into it if you wish to enter anyway."
+msgstr ""
+
+#: src/game.cpp
+msgid "Crouch and move into it if you wish to enter anyway."
msgstr ""
#: src/game.cpp
@@ -265149,6 +265972,11 @@ msgstr ""
msgid "You try to feed the %s some %s, but it vanishes!"
msgstr ""
+#: src/iuse.cpp
+#, c-format
+msgid "You reach for the %s, but it recoils away from you!"
+msgstr ""
+
#: src/iuse.cpp
msgid "You want to feed it the dog food, but it bites your fingers!"
msgstr ""
@@ -271055,6 +271883,11 @@ msgstr ""
msgid "Create World"
msgstr ""
+#. ~ Marker for worlds that need Lua in game builds without Lua
+#: src/main_menu.cpp src/worldfactory.cpp
+msgid "Needs Lua!"
+msgstr ""
+
#: src/main_menu.cpp
msgid "Bugs? Suggestions? Use links in MOTD to report them."
msgstr ""
@@ -271285,6 +272118,17 @@ msgstr ""
msgid "Unable to make graphics directory. Check permissions."
msgstr ""
+#: src/main_menu.cpp
+msgid ""
+"You are running x32 build of the game on a x64 operating system. This means"
+" the game will NOT be able to access all memory, and you may experience "
+"random out-of-memory crashes. Consider obtaining a x64 build of the game to"
+" avoid that, but if you *really* want to be running x32 build of the game "
+"for some reason (or don't have a choice), you may want to lower your memory "
+"usage by disabling tileset, soundpack and mods and increasing autosave "
+"frequency."
+msgstr ""
+
#: src/main_menu.cpp
msgid "Really quit?"
msgstr ""
@@ -271315,6 +272159,13 @@ msgstr ""
msgid "Sorry, something went wrong."
msgstr ""
+#. ~ Error when attempting to load a world whose mods depend on Lua
+#. ~ on game build that doesn't have Lua. %s = world name.
+#: src/main_menu.cpp
+#, c-format
+msgid "%s needs game build with Lua support!"
+msgstr ""
+
#. ~ %s = world name
#: src/main_menu.cpp
#, c-format
@@ -275074,6 +275925,15 @@ msgstr[5] ""
msgid "Mod version"
msgstr ""
+#: src/mod_manager_ui.cpp
+#, c-format
+msgid "%s: API version %s\n"
+msgstr ""
+
+#: src/mod_manager_ui.cpp
+msgid "Needs Lua"
+msgstr ""
+
#: src/mod_manager_ui.cpp
msgid "Mod info path"
msgstr ""
@@ -278035,16 +278895,6 @@ msgstr ""
msgid "Focus trends towards:"
msgstr ""
-#: src/mtype.cpp
-msgid "human"
-msgid_plural "humans"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-msgstr[3] ""
-msgstr[4] ""
-msgstr[5] ""
-
#: src/mutation.cpp
#, c-format
msgid "Your %s is pushed off!"
@@ -280684,6 +281534,14 @@ msgstr ""
msgid "Messages related to SDL, tiles, tilesets and sound."
msgstr ""
+#: src/options.cpp
+msgid "Lua"
+msgstr ""
+
+#: src/options.cpp
+msgid "Messages from Lua scripts."
+msgstr ""
+
#: src/options.cpp
msgid "General"
msgstr ""
@@ -281756,6 +282614,16 @@ msgstr ""
msgid "The amount of time to pause between animation frames in ms."
msgstr ""
+#: src/options.cpp
+msgid "Draw bullets as lines"
+msgstr ""
+
+#: src/options.cpp
+msgid ""
+"If true, bullets are drawn as lines of images, and the animation lasts only "
+"one frame."
+msgstr ""
+
#: src/options.cpp
msgid "Blinking effects speed"
msgstr ""
@@ -281830,7 +282698,7 @@ msgid "Font height"
msgstr ""
#: src/options.cpp
-msgid "Set the font height. Requires restart."
+msgid "Set the font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -281838,7 +282706,7 @@ msgid "Font size"
msgstr ""
#: src/options.cpp
-msgid "Set the font size. Requires restart."
+msgid "Set the font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -281846,7 +282714,7 @@ msgid "Map font width"
msgstr ""
#: src/options.cpp
-msgid "Set the map font width. Requires restart."
+msgid "Set the map font width. Requires restart."
msgstr ""
#: src/options.cpp
@@ -281854,7 +282722,7 @@ msgid "Map font height"
msgstr ""
#: src/options.cpp
-msgid "Set the map font height. Requires restart."
+msgid "Set the map font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -281862,7 +282730,7 @@ msgid "Map font size"
msgstr ""
#: src/options.cpp
-msgid "Set the map font size. Requires restart."
+msgid "Set the map font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -281870,7 +282738,7 @@ msgid "Overmap font width"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font width. Requires restart."
+msgid "Set the overmap font width. Requires restart."
msgstr ""
#: src/options.cpp
@@ -281878,7 +282746,7 @@ msgid "Overmap font height"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font height. Requires restart."
+msgid "Set the overmap font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -281886,7 +282754,7 @@ msgid "Overmap font size"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font size. Requires restart."
+msgid "Set the overmap font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -289503,6 +290371,11 @@ msgstr ""
msgid " [%s]"
msgstr ""
+#. ~ Tag for mods that use Lua in game builds without Lua.
+#: src/worldfactory.cpp
+msgid "(Needs Lua) "
+msgstr ""
+
#: src/worldfactory.cpp
msgid "N/A"
msgstr ""
diff --git a/lang/po/da.po b/lang/po/da.po
index d8732bf53f77..2e216b40f0e2 100644
--- a/lang/po/da.po
+++ b/lang/po/da.po
@@ -1,12 +1,12 @@
#
# Translators:
-# Coolthulhu , 2020
+# Coolthulhu , 2023
#
msgid ""
msgstr ""
"Project-Id-Version: cataclysm-bn\n"
-"POT-Creation-Date: 2023-08-03 04:45+0000\n"
-"Last-Translator: Coolthulhu , 2020\n"
+"POT-Creation-Date: 2023-09-15 13:27+0000\n"
+"Last-Translator: Coolthulhu , 2023\n"
"Language-Team: Danish (https://app.transifex.com/bn-team/teams/113585/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1490,10 +1490,18 @@ msgstr ""
msgid "[Combat] One Down, Billions to Go…"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] The Undertaker"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Rude Awakening"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] Pacifist"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Decamate"
msgstr ""
@@ -3856,10 +3864,24 @@ msgstr ""
#: data/json/bionics.json data/json/items/bionics.json
msgid ""
"Installed within you is a perpetual generator powered by nonsensoleum. When"
-" activated it's power gen doubles. If you are seeing this, you'd better be "
+" activated its power gen doubles. If you are seeing this, you'd better be "
"debugging."
msgstr ""
+#: data/json/bionics.json data/json/items/bionics.json
+msgid "Debug Fuel Cell CBM"
+msgid_plural "Debug Fuel Cell CBMs"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'Debug Fuel Cell CBM'}
+#: data/json/bionics.json data/json/items/bionics.json
+msgid ""
+"The power of the sun, in the palm of my hand! Installed within you is a "
+"perpetual generator powered by nonsensoleum. When activated its power gen "
+"doubles. If you are seeing this, you'd better be debugging."
+msgstr ""
+
#: data/json/body_parts.json
msgid "appendix"
msgstr ""
@@ -7998,6 +8020,17 @@ msgstr ""
msgid "You're winded."
msgstr ""
+#: data/json/effects.json
+msgid "Bronchospasms"
+msgstr ""
+
+#. ~ Description of effect 'Bronchospasms'.
+#: data/json/effects.json
+msgid ""
+"Something in the air is making it harder to breathe, aggravating your "
+"asthma. Increases the chance of suffering an asthma attack."
+msgstr ""
+
#: data/json/effects.json
msgid "The ceiling collapses on you!"
msgstr ""
@@ -21871,34 +21904,90 @@ msgid_plural "seeing this is a bug"
msgstr[0] ""
msgstr[1] ""
+#: data/json/species.json
+msgid "mammal"
+msgid_plural "mammals"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'mammal'}
#: data/json/species.json
msgid "a mammal"
msgstr ""
+#: data/json/species.json
+msgid "amphibian"
+msgid_plural "amphibians"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'amphibian'}
#: data/json/species.json
msgid "an amphibian"
msgstr ""
+#: data/json/species.json
+msgid "bird"
+msgid_plural "birds"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'bird'}
#: data/json/species.json
msgid "a bird"
msgstr ""
+#: data/json/species.json
+msgid "reptile"
+msgid_plural "reptiles"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'reptile'}
#: data/json/species.json
msgid "a reptile"
msgstr ""
+#: data/json/species.json
+msgid "fish"
+msgid_plural "fish"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'fish'}
#: data/json/species.json
msgid "a fish"
msgstr ""
+#: data/json/species.json
+msgid "mutant"
+msgid_plural "mutants"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'mutant'}
#: data/json/species.json
msgid "a mutant"
msgstr ""
+#: data/json/species.json
+msgid "nether creature"
+msgid_plural "nether creatures"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'nether creature'}
#: data/json/species.json
msgid "a nether creature"
msgstr ""
+#: data/json/species.json data/json/monsters/slimes.json
+msgid "blob"
+msgid_plural "blobs"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'blob'}
#: data/json/species.json
msgid "a blob"
msgstr ""
@@ -21907,30 +21996,79 @@ msgstr ""
msgid "plop."
msgstr ""
+#: data/json/species.json
+msgid "fungus"
+msgid_plural "fungi"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'fungus', 'str_pl': 'fungi'}
#: data/json/species.json
msgid "a fungus"
msgstr ""
+#: data/json/species.json
+msgid "leech plant"
+msgid_plural "leech plants"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'leech plant'}
#: data/json/species.json
msgid "a leech plant"
msgstr ""
+#: data/json/species.json
+msgid "insect"
+msgid_plural "insects"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'insect'}
#: data/json/species.json
msgid "an insect"
msgstr ""
+#: data/json/species.json
+msgid "spider"
+msgid_plural "spiders"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'spider'}
#: data/json/species.json
msgid "a spider"
msgstr ""
+#: data/json/species.json
+msgid "plant"
+msgid_plural "plants"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'plant'}
#: data/json/species.json
msgid "a plant"
msgstr ""
+#: data/json/species.json
+msgid "mollusk"
+msgid_plural "mollusks"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'mollusk'}
#: data/json/species.json
msgid "a mollusk"
msgstr ""
+#: data/json/species.json
+msgid "worm"
+msgid_plural "worms"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'worm'}
#: data/json/species.json
msgid "a worm"
msgstr ""
@@ -21939,6 +22077,14 @@ msgstr ""
msgid "rustle."
msgstr ""
+#: data/json/species.json data/json/monsters/zed-classic.json
+#: data/json/npcs/talk_tags.json
+msgid "zombie"
+msgid_plural "zombies"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'zombie'}
#: data/json/species.json
msgid "a zombie"
msgstr ""
@@ -21947,6 +22093,13 @@ msgstr ""
msgid "shuffling."
msgstr ""
+#: data/json/species.json
+msgid "robot"
+msgid_plural "robots"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'robot'}
#: data/json/species.json
msgid "a robot"
msgstr ""
@@ -21955,18 +22108,51 @@ msgstr ""
msgid "mechanical whirring."
msgstr ""
+#: data/json/species.json data/json/npcs/talk_tags.json
+msgid "horror"
+msgid_plural "horrors"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'horror'}
#: data/json/species.json
msgid "a horror"
msgstr ""
+#: data/json/species.json
+msgid "abberation"
+msgid_plural "abberations"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'abberation'}
#: data/json/species.json
msgid "an aberration"
msgstr ""
+#: data/json/species.json
+msgid "hallucination"
+msgid_plural "hallucinations"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/json/species.json src/mtype.cpp
+msgid "human"
+msgid_plural "humans"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'human'}
#: data/json/species.json
msgid "a human"
msgstr ""
+#: data/json/species.json
+msgid "unknown species"
+msgid_plural "unknown species"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/json/speech.json data/mods/Aftershock/speech.json
#: data/mods/CrazyCataclysm/crazy_speech.json
msgid "\"Hello?\""
@@ -47532,8 +47718,8 @@ msgstr[1] ""
#. flechettes, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless flechette rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless flechette rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
#: data/json/items/ammo/20x66mm.json
@@ -47545,8 +47731,8 @@ msgstr[1] ""
#. ~ Description for {'str': '20x66mm buckshot, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless buckshot rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless buckshot rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
#: data/json/items/ammo/20x66mm.json
@@ -47559,8 +47745,8 @@ msgstr[1] ""
#. slugs, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless solid projectile "
-"rounds. Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless solid projectile rounds. "
+"Being caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
#: data/json/items/ammo/20x66mm.json
@@ -49031,18 +49217,57 @@ msgid ""
msgstr ""
#: data/json/items/ammo/8x40mm.json
-msgid "bootleg 8x40mm JHP"
-msgid_plural "bootleg 8x40mm JHPs"
+msgid "8x40mm JHP, handmade"
+msgid_plural "8x40mm JHP, handmades"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': '8x40mm JHP, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm JHP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm caseless, handmade"
+msgid_plural "8x40mm caseless, handmades"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for {'str': 'bootleg 8x40mm JHP'}
+#. ~ Description for {'str': '8x40mm caseless, handmade'}
#: data/json/items/ammo/8x40mm.json
msgid ""
-"Bootleg duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
+"Handmade duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
"rounds, these cannot be disassembled or reloaded."
msgstr ""
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm HVP, handmade"
+msgid_plural "8x40mm HVP, handmades"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': '8x40mm HVP, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm HVP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm tracer, handmade"
+msgid_plural "8x40mm tracer, handmades"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': '8x40mm tracer, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm tracer rounds. Being caseless rounds,"
+" these cannot be disassembled or reloaded."
+msgstr ""
+
#. ~ Description for {'str_sp': '8x40mm caseless'}
#: data/json/items/ammo/8x40mm.json
msgid ""
@@ -49375,45 +49600,45 @@ msgid "A tube of small paintballs. They deal virtually no damage."
msgstr ""
#: data/json/items/ammo/rpg.json
-msgid "PG-7VL 93mm rocket"
-msgid_plural "PG-7VL 93mm rockets"
+msgid "PG-7VL RPG-7 rocket"
+msgid_plural "PG-7VL RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for PG-7VL 93mm rocket
+#. ~ Description for PG-7VL RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "93mm single-stage high-explosive ammunition for the RPG-7."
msgstr ""
#: data/json/items/ammo/rpg.json
-msgid "PG-7VR 64mm/105mm rocket"
-msgid_plural "PG-7VR 64mm/105mm rockets"
+msgid "PG-7VR RPG-7 rocket"
+msgid_plural "PG-7VR RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for PG-7VR 64mm/105mm rocket
+#. ~ Description for PG-7VR RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "64mm/105mm high-explosive tandem ammunition for the RPG-7."
msgstr ""
#: data/json/items/ammo/rpg.json
-msgid "TBG-7V 105mm rocket"
-msgid_plural "TBG-7V 105mm rockets"
+msgid "TBG-7V RPG-7 rocket"
+msgid_plural "TBG-7V RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for TBG-7V 105mm rocket
+#. ~ Description for TBG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "105mm thermobaric ammunition for the RPG-7."
msgstr ""
#: data/json/items/ammo/rpg.json
-msgid "OG-7V 40mm rocket"
-msgid_plural "OG-7V 40mm rockets"
+msgid "OG-7V RPG-7 rocket"
+msgid_plural "OG-7V RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for OG-7V 40mm rocket
+#. ~ Description for OG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid ""
"40mm high-explosive fragmentation antipersonnel ammunition for the RPG-7."
@@ -71435,6 +71660,50 @@ msgid ""
"A pickled egg. Rather salty, but tastes good and lasts for a long time."
msgstr ""
+#: data/json/items/comestibles/egg.json
+msgid "salsify omelette"
+msgid_plural "salsify omelette"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'salsify omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A salsify omelette."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "wild veggetable omelette"
+msgid_plural "wild veggetable omelette"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'wild veggetable omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with wild vegetables."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "mushroom omelette"
+msgid_plural "mushroom omelette"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'mushroom omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with mushrooms."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "spanish omelette"
+msgid_plural "spanish omelette"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'spanish omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A spanish omelette."
+msgstr ""
+
#: data/json/items/comestibles/frozen.json
msgid "milkshake"
msgid_plural "milkshakes"
@@ -72513,6 +72782,7 @@ msgstr ""
#: data/json/items/comestibles/junkfood.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cookie"
msgid_plural "cookies"
msgstr[0] ""
@@ -74912,6 +75182,7 @@ msgstr ""
#: data/json/items/comestibles/med.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "chewing gum"
msgid_plural "chewing gum"
msgstr[0] ""
@@ -81223,6 +81494,7 @@ msgstr ""
#: data/json/items/comestibles/wheat.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cracker"
msgid_plural "crackers"
msgstr[0] ""
@@ -92605,6 +92877,19 @@ msgid ""
"likely evolved."
msgstr ""
+#: data/json/items/melee/spears_and_polearms.json
+msgid "makeshift glaive"
+msgid_plural "makeshift glaives"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'makeshift glaive'}
+#: data/json/items/melee/spears_and_polearms.json
+msgid ""
+"This is a large blade attached to a long stick. It could do a considerable "
+"amount of damage."
+msgstr ""
+
#: data/json/items/melee/spears_and_polearms.json
msgid "glaive"
msgid_plural "glaives"
@@ -98638,7 +98923,7 @@ msgstr ""
#. ~ Use action need_charges_msg for {'str': 'refillable lighter'}.
#: data/json/items/tool/fire.json src/activity_actor.cpp src/explosion.cpp
-#: src/gates.cpp
+#: src/gates.cpp src/iuse.cpp
msgid "Nothing happens."
msgstr ""
@@ -100479,19 +100764,6 @@ msgid ""
"from uncertain sources like a river may be dirty."
msgstr ""
-#: data/json/items/tool/misc.json
-msgid "makeshift glaive"
-msgid_plural "makeshift glaives"
-msgstr[0] ""
-msgstr[1] ""
-
-#. ~ Description for {'str': 'makeshift glaive'}
-#: data/json/items/tool/misc.json
-msgid ""
-"This is a large blade attached to a long stick. It could do a considerable "
-"amount of damage."
-msgstr ""
-
#: data/json/items/tool/misc.json
msgid "mind splicer kit"
msgid_plural "mind splicer kits"
@@ -111223,12 +111495,6 @@ msgid ""
"of infesting sewer lines."
msgstr ""
-#: data/json/monsters/slimes.json
-msgid "blob"
-msgid_plural "blobs"
-msgstr[0] ""
-msgstr[1] ""
-
#. ~ Description for {'str': 'blob'}
#: data/json/monsters/slimes.json
msgid ""
@@ -111866,12 +112132,6 @@ msgid ""
"envelope of scar tissue."
msgstr ""
-#: data/json/monsters/zed-classic.json data/json/npcs/talk_tags.json
-msgid "zombie"
-msgid_plural "zombies"
-msgstr[0] ""
-msgstr[1] ""
-
#. ~ Description for {'str': 'zombie'}
#: data/json/monsters/zed-classic.json
msgid ""
@@ -122005,7 +122265,8 @@ msgid "I'll kill you if you don't."
msgstr ""
#: data/json/npcs/TALK_COMMON_OTHER.json
-#: data/json/npcs/TALK_TRUE_FOODPERSON.json src/iuse.cpp
+#: data/json/npcs/TALK_TRUE_FOODPERSON.json
+#: data/mods/smart_house_remotes/main.lua src/iuse.cpp
msgid "Nevermind."
msgstr ""
@@ -129809,10 +130070,6 @@ msgstr ""
msgid "demon"
msgstr ""
-#: data/json/npcs/talk_tags.json
-msgid "horror"
-msgstr ""
-
#: data/json/npcs/talk_tags.json
msgid "indescribable beast"
msgstr ""
@@ -143142,6 +143399,16 @@ msgid ""
"coming no further. Go away."
msgstr ""
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"I was sent here by the traders at the refugee center. They told me to "
+"deliver this hard drive to you."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "The traders also mentioned you were looking for help."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "Wait! What??"
msgstr ""
@@ -143178,6 +143445,20 @@ msgstr ""
msgid "Alright, I'm leaving."
msgstr ""
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"Understood. Please drop the drive on the box embedded beneath the intercom."
+" You are welcome to leave afterwards."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "[Do as the Intercom Says]"
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "Didn't bring the hard drive now, let me return with it."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "No. Now leave."
msgstr ""
@@ -172938,6 +173219,13 @@ msgid ""
"constant jet of warm air to heat an enclosed space."
msgstr ""
+#: data/mods/Aftershock/mobs/species.json
+msgid "intelligent animal"
+msgid_plural "intelligent animals"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'intelligent animal'}
#: data/mods/Aftershock/mobs/species.json
msgid "an intelligent animal created by man before the Cataclysm"
msgstr ""
@@ -182823,6 +183111,13 @@ msgstr ""
msgid "DinoLab Operating Theater Access Control"
msgstr ""
+#: data/mods/DinoMod/monsters/dinosaur.json
+msgid "dinosaur"
+msgid_plural "dinosaurs"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'dinosaur'}
#: data/mods/DinoMod/monsters/dinosaur.json
msgid "a dinosaur"
msgstr ""
@@ -194813,6 +195108,11 @@ msgstr ""
msgid "RUNES"
msgstr ""
+#. ~ Crafting recipes subcategory of 'ENCHANTED' category
+#: data/mods/Magiclysm/qualities.json
+msgid "ENCHANTING"
+msgstr ""
+
#: data/mods/Magiclysm/qualities.json
msgid "mana focusing"
msgstr ""
@@ -194940,6 +195240,24 @@ msgctxt "start_name"
msgid "Wizard's Retreat Vacation"
msgstr ""
+#: data/mods/Magiclysm/species.json
+msgid "magical beast"
+msgid_plural "magical beasts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "dragon"
+msgid_plural "dragons"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "lizardfolk"
+msgid_plural "lizardfolk"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/start_locations.json
msgid "Wizard's Secret Basement Study"
msgstr ""
@@ -195116,6 +195434,42 @@ msgid ""
"lights."
msgstr ""
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Bless"
+msgstr ""
+
+#. ~ Description for {'str': 'Bless'}
+#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "A spell of blessing that gives you energy and boosts your abilities."
+msgstr ""
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Holy Blade"
+msgstr ""
+
+#. ~ Description for Holy Blade
+#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
+#. Holy Blade'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "This blade of light will cut through any evil it makes contact with!"
+msgstr ""
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Spiritual Armor"
+msgstr ""
+
+#. ~ Description for Spiritual Armor
+#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
+#. of Spiritual Armor'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid ""
+"Evil will not make it through your defenses if your faith is strong enough!"
+msgstr ""
+
#: data/mods/Magiclysm/Spells/biomancer.json
msgid "Cure Light Wounds"
msgstr ""
@@ -196579,17 +196933,6 @@ msgid ""
"harmless."
msgstr ""
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Bless"
-msgstr ""
-
-#. ~ Description for {'str': 'Bless'}
-#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "A spell of blessing that gives you energy and boosts your abilities."
-msgstr ""
-
#: data/mods/Magiclysm/Spells/technomancer.json
#: data/mods/Magiclysm/effects/effects.json
msgid "Invisibility"
@@ -196607,31 +196950,6 @@ msgstr ""
msgid "To the outside world, your body fades away and you cease to exist!"
msgstr ""
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Holy Blade"
-msgstr ""
-
-#. ~ Description for Holy Blade
-#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
-#. Holy Blade'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "This blade of light will cut through any evil it makes contact with!"
-msgstr ""
-
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Spiritual Armor"
-msgstr ""
-
-#. ~ Description for Spiritual Armor
-#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
-#. of Spiritual Armor'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid ""
-"Evil will not make it through your defenses if your faith is strong enough!"
-msgstr ""
-
#: data/mods/Magiclysm/Spells/technomancer.json
msgid "Lamp"
msgstr ""
@@ -198777,6 +199095,18 @@ msgid_plural "sledge hammer +2s"
msgstr[0] ""
msgstr[1] ""
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "heavy sledge hammer +1"
+msgid_plural "heavy sledge hammers +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "heavy sledge hammer +2"
+msgid_plural "heavy sledge hammers +2"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "warhammer +1"
msgid_plural "warhammer +1s"
@@ -198982,12 +199312,14 @@ msgstr[0] ""
msgstr[1] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +1"
msgid_plural "crowbar +1s"
msgstr[0] ""
msgstr[1] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +2"
msgid_plural "crowbar +2s"
msgstr[0] ""
@@ -199042,12 +199374,14 @@ msgstr[0] ""
msgstr[1] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +1"
msgid_plural "hunting knife +1s"
msgstr[0] ""
msgstr[1] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +2"
msgid_plural "hunting knife +2s"
msgstr[0] ""
@@ -199221,6 +199555,18 @@ msgid_plural "dao +2s"
msgstr[0] ""
msgstr[1] ""
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +1"
+msgid_plural "lucerne hammers +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +2"
+msgid_plural "lucerne hammers +2"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "Biomancer spear"
msgid_plural "Biomancer spears"
@@ -200109,6 +200455,78 @@ msgid ""
"turns into the item pictured on the front, in this case a crowbar."
msgstr ""
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +1"
+msgid_plural "bottle jacks +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +2"
+msgid_plural "bottle jacks +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +1"
+msgid_plural "scalpels +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +2"
+msgid_plural "scalpels +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +1"
+msgid_plural "butcher knives +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +2"
+msgid_plural "butcher knives +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +1"
+msgid_plural "meat cleavers +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +2"
+msgid_plural "meat cleavers +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +1"
+msgid_plural "carving knives +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +2"
+msgid_plural "carving knives +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +1"
+msgid_plural "butchering kits +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +2"
+msgid_plural "butchering kits +2"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/items/enchanted_unarmed.json
msgid "cestus +1"
msgid_plural "cestus +1s"
@@ -201183,6 +201601,20 @@ msgid ""
"protective equipment inside."
msgstr ""
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid "Enchanter's Guidebook"
+msgid_plural "copies of Enchanter's Guidebooks"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': "Enchanter's Guidebook", 'str_pl': "copies of
+#. Enchanter's Guidebooks"}
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid ""
+"A hefty textbook on the theory and practice of magically strengthening "
+"weapons and tools."
+msgstr ""
+
#: data/mods/Magiclysm/items/spell_scrolls.json
msgid "Spell Scroll"
msgid_plural "Spell Scrolls"
@@ -202258,6 +202690,12 @@ msgid ""
"much more expensive."
msgstr ""
+#: data/mods/Magiclysm/monsters/demon_spider.json
+msgid "demon spider"
+msgid_plural "demon spiders"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid "demon spiderling"
msgid_plural "demon spiderlings"
@@ -202273,12 +202711,6 @@ msgid ""
"with venom."
msgstr ""
-#: data/mods/Magiclysm/monsters/demon_spider.json
-msgid "demon spider"
-msgid_plural "demon spiders"
-msgstr[0] ""
-msgstr[1] ""
-
#. ~ Description for demon spider
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid ""
@@ -205104,10 +205536,22 @@ msgid ""
"human candy! Are you a real monster? Will you be able to devour it all?\""
msgstr ""
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "marshmallow"
+msgid_plural "marshmallows"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "shlop."
msgstr ""
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "gummy"
+msgid_plural "gummies"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "pop."
msgstr ""
@@ -207429,6 +207873,15 @@ msgid ""
"city size set to 1 and spacing set to 8."
msgstr ""
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "SaveLoad Lua Test"
+msgstr ""
+
+#. ~ Description for SaveLoad Lua Test
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "Mod for testing Lua save/load API."
+msgstr ""
+
#: data/mods/sees_player_hitbutton/modinfo.json
msgid "sees-player icon, HitButton_iso"
msgstr ""
@@ -207451,6 +207904,78 @@ msgid ""
"retrodays tileset."
msgstr ""
+#: data/mods/smart_house_remotes/item.json
+msgid "smart house remote"
+msgid_plural "smart house remotes"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'smart house remote'}
+#: data/mods/smart_house_remotes/item.json
+msgid ""
+"A small remote with lcd display used to control garage doors and window "
+"curtains. Completely useless now, unless you manage to restore power to the"
+" house."
+msgstr ""
+
+#: data/mods/smart_house_remotes/iuse.json
+msgid "Control doors and shutters"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Open curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Close curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Raise garage door"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Lower garage door"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's not enough grid charge.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Low Current At Endpoint"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when player is too far away from the area.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Signal"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's nothing to activate.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Endpoints Available"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "The remote beeps quietly."
+msgstr ""
+
+#. ~ Title of the menu prompting player to select what to activate with the
+#. remote.
+#. Typically it's doors, garage doors or window curtains.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Select endpoint"
+msgstr ""
+
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Smart House Remotes"
+msgstr ""
+
+#. ~ Description for Smart House Remotes
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Add remotes for controlling garage doors and window curtains."
+msgstr ""
+
#: data/mods/speedydex/modinfo.json
msgid "SpeedyDex"
msgstr ""
@@ -208877,6 +209402,14 @@ msgstr ""
msgid "Debug Menu"
msgstr ""
+#: data/raw/keybindings/keybindings.json
+msgid "Lua Console"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Reload Lua Code"
+msgstr ""
+
#: data/raw/keybindings/keybindings.json
msgid "View Scentmap"
msgstr ""
@@ -209432,6 +209965,26 @@ msgstr ""
msgid "Add new page"
msgstr ""
+#: data/raw/keybindings/keybindings.json
+msgid "Edit command"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History up"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History down"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the top"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the bottom"
+msgstr ""
+
#: data/raw/keybindings/messages.json
msgid "Toggle wide display"
msgstr ""
@@ -209590,7 +210143,31 @@ msgstr ""
#: src/achievement.cpp
#, c-format
-msgid "Attain %s skill level of %i (%i/%i)."
+msgid "Kill at least %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Don't kill even a single %s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Kill no more than %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+msgid " (failed)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Attain skill level of %i in %s (%i/%i)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Stay at or below skill level of %i in %s (%i/%i)"
msgstr ""
#: src/achievement.cpp
@@ -215132,6 +215709,30 @@ msgstr ""
msgid "に坂索トし荷測のンおク妙免イロコヤ梅棋厚れ表幌"
msgstr ""
+#: src/catalua_console.cpp
+msgid "Press Ctrl+S to run script, press Esc to cancel"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press arrow keys to navigate text input"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to add new line"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to enter/edit command, Esc to quit"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Up/Down arrows to select from history"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press PgUp/PgDn/Home/End to scroll output window"
+msgstr ""
+
#: src/character.cpp src/debug_menu.cpp src/game.cpp src/iuse.cpp
#: src/npctrade.cpp
msgid "You"
@@ -219933,6 +220534,10 @@ msgstr ""
msgid "Change [b]attery charge"
msgstr ""
+#: src/debug_menu.cpp
+msgid "Export [j]son template"
+msgstr ""
+
#: src/debug_menu.cpp
msgid "Vehicle…"
msgstr ""
@@ -220049,6 +220654,10 @@ msgstr ""
msgid "Player…"
msgstr ""
+#: src/debug_menu.cpp
+msgid "Lua console"
+msgstr ""
+
#: src/debug_menu.cpp
msgid ""
"Debug Functions - Manipulate the fabric of reality!\n"
@@ -220915,6 +221524,10 @@ msgstr ""
msgid "By how much? (in kJ, negative to discharge)"
msgstr ""
+#: src/debug_menu.cpp
+msgid "JSON template written to debug.log"
+msgstr ""
+
#: src/dependency_tree.cpp
msgid "Missing Dependency(ies): "
msgstr ""
@@ -225280,21 +225893,19 @@ msgstr ""
#: src/game.cpp
#, c-format
-msgid "Stepping into that %1$s looks risky, but you enter anyway."
+msgid "Stepping into that %1$s looks risky. %2$s"
msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Run into it if you wish to enter "
-"anyway."
+msgid "But you enter anyway."
msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Crouch and move into it if you wish to"
-" enter anyway."
+msgid "Run into it if you wish to enter anyway."
+msgstr ""
+
+#: src/game.cpp
+msgid "Crouch and move into it if you wish to enter anyway."
msgstr ""
#: src/game.cpp
@@ -233211,6 +233822,11 @@ msgstr ""
msgid "You try to feed the %s some %s, but it vanishes!"
msgstr ""
+#: src/iuse.cpp
+#, c-format
+msgid "You reach for the %s, but it recoils away from you!"
+msgstr ""
+
#: src/iuse.cpp
msgid "You want to feed it the dog food, but it bites your fingers!"
msgstr ""
@@ -239069,6 +239685,11 @@ msgstr ""
msgid "Create World"
msgstr ""
+#. ~ Marker for worlds that need Lua in game builds without Lua
+#: src/main_menu.cpp src/worldfactory.cpp
+msgid "Needs Lua!"
+msgstr ""
+
#: src/main_menu.cpp
msgid "Bugs? Suggestions? Use links in MOTD to report them."
msgstr ""
@@ -239299,6 +239920,17 @@ msgstr ""
msgid "Unable to make graphics directory. Check permissions."
msgstr ""
+#: src/main_menu.cpp
+msgid ""
+"You are running x32 build of the game on a x64 operating system. This means"
+" the game will NOT be able to access all memory, and you may experience "
+"random out-of-memory crashes. Consider obtaining a x64 build of the game to"
+" avoid that, but if you *really* want to be running x32 build of the game "
+"for some reason (or don't have a choice), you may want to lower your memory "
+"usage by disabling tileset, soundpack and mods and increasing autosave "
+"frequency."
+msgstr ""
+
#: src/main_menu.cpp
msgid "Really quit?"
msgstr ""
@@ -239329,6 +239961,13 @@ msgstr ""
msgid "Sorry, something went wrong."
msgstr ""
+#. ~ Error when attempting to load a world whose mods depend on Lua
+#. ~ on game build that doesn't have Lua. %s = world name.
+#: src/main_menu.cpp
+#, c-format
+msgid "%s needs game build with Lua support!"
+msgstr ""
+
#. ~ %s = world name
#: src/main_menu.cpp
#, c-format
@@ -243040,6 +243679,15 @@ msgstr[1] ""
msgid "Mod version"
msgstr ""
+#: src/mod_manager_ui.cpp
+#, c-format
+msgid "%s: API version %s\n"
+msgstr ""
+
+#: src/mod_manager_ui.cpp
+msgid "Needs Lua"
+msgstr ""
+
#: src/mod_manager_ui.cpp
msgid "Mod info path"
msgstr ""
@@ -245997,12 +246645,6 @@ msgstr ""
msgid "Focus trends towards:"
msgstr ""
-#: src/mtype.cpp
-msgid "human"
-msgid_plural "humans"
-msgstr[0] ""
-msgstr[1] ""
-
#: src/mutation.cpp
#, c-format
msgid "Your %s is pushed off!"
@@ -248598,6 +249240,14 @@ msgstr ""
msgid "Messages related to SDL, tiles, tilesets and sound."
msgstr ""
+#: src/options.cpp
+msgid "Lua"
+msgstr ""
+
+#: src/options.cpp
+msgid "Messages from Lua scripts."
+msgstr ""
+
#: src/options.cpp
msgid "General"
msgstr "Generel"
@@ -249678,6 +250328,16 @@ msgstr ""
msgid "The amount of time to pause between animation frames in ms."
msgstr ""
+#: src/options.cpp
+msgid "Draw bullets as lines"
+msgstr ""
+
+#: src/options.cpp
+msgid ""
+"If true, bullets are drawn as lines of images, and the animation lasts only "
+"one frame."
+msgstr ""
+
#: src/options.cpp
msgid "Blinking effects speed"
msgstr ""
@@ -249752,7 +250412,7 @@ msgid "Font height"
msgstr ""
#: src/options.cpp
-msgid "Set the font height. Requires restart."
+msgid "Set the font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -249760,7 +250420,7 @@ msgid "Font size"
msgstr ""
#: src/options.cpp
-msgid "Set the font size. Requires restart."
+msgid "Set the font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -249768,7 +250428,7 @@ msgid "Map font width"
msgstr ""
#: src/options.cpp
-msgid "Set the map font width. Requires restart."
+msgid "Set the map font width. Requires restart."
msgstr ""
#: src/options.cpp
@@ -249776,7 +250436,7 @@ msgid "Map font height"
msgstr ""
#: src/options.cpp
-msgid "Set the map font height. Requires restart."
+msgid "Set the map font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -249784,7 +250444,7 @@ msgid "Map font size"
msgstr ""
#: src/options.cpp
-msgid "Set the map font size. Requires restart."
+msgid "Set the map font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -249792,7 +250452,7 @@ msgid "Overmap font width"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font width. Requires restart."
+msgid "Set the overmap font width. Requires restart."
msgstr ""
#: src/options.cpp
@@ -249800,7 +250460,7 @@ msgid "Overmap font height"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font height. Requires restart."
+msgid "Set the overmap font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -249808,7 +250468,7 @@ msgid "Overmap font size"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font size. Requires restart."
+msgid "Set the overmap font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -257357,6 +258017,11 @@ msgstr ""
msgid " [%s]"
msgstr ""
+#. ~ Tag for mods that use Lua in game builds without Lua.
+#: src/worldfactory.cpp
+msgid "(Needs Lua) "
+msgstr ""
+
#: src/worldfactory.cpp
msgid "N/A"
msgstr ""
diff --git a/lang/po/de.po b/lang/po/de.po
index e04e0f9907bf..dc618cfb7811 100644
--- a/lang/po/de.po
+++ b/lang/po/de.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: cataclysm-bn\n"
-"POT-Creation-Date: 2023-08-03 04:45+0000\n"
+"POT-Creation-Date: 2023-09-15 13:27+0000\n"
"Last-Translator: Coolthulhu , 2023\n"
"Language-Team: German (https://app.transifex.com/bn-team/teams/113585/de/)\n"
"MIME-Version: 1.0\n"
@@ -1611,10 +1611,18 @@ msgstr ""
msgid "[Combat] One Down, Billions to Go…"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] The Undertaker"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Rude Awakening"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] Pacifist"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Decamate"
msgstr ""
@@ -4186,10 +4194,24 @@ msgstr ""
#: data/json/bionics.json data/json/items/bionics.json
msgid ""
"Installed within you is a perpetual generator powered by nonsensoleum. When"
-" activated it's power gen doubles. If you are seeing this, you'd better be "
+" activated its power gen doubles. If you are seeing this, you'd better be "
"debugging."
msgstr ""
+#: data/json/bionics.json data/json/items/bionics.json
+msgid "Debug Fuel Cell CBM"
+msgid_plural "Debug Fuel Cell CBMs"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'Debug Fuel Cell CBM'}
+#: data/json/bionics.json data/json/items/bionics.json
+msgid ""
+"The power of the sun, in the palm of my hand! Installed within you is a "
+"perpetual generator powered by nonsensoleum. When activated its power gen "
+"doubles. If you are seeing this, you'd better be debugging."
+msgstr ""
+
#: data/json/body_parts.json
msgid "appendix"
msgstr "Blinddarm"
@@ -8567,6 +8589,17 @@ msgstr ""
msgid "You're winded."
msgstr "Du bist erschöpft."
+#: data/json/effects.json
+msgid "Bronchospasms"
+msgstr ""
+
+#. ~ Description of effect 'Bronchospasms'.
+#: data/json/effects.json
+msgid ""
+"Something in the air is making it harder to breathe, aggravating your "
+"asthma. Increases the chance of suffering an asthma attack."
+msgstr ""
+
#: data/json/effects.json
msgid "The ceiling collapses on you!"
msgstr "Die Decke bricht auf dich herab!"
@@ -23515,34 +23548,90 @@ msgid_plural "seeing this is a bug"
msgstr[0] ""
msgstr[1] ""
+#: data/json/species.json
+msgid "mammal"
+msgid_plural "mammals"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'mammal'}
#: data/json/species.json
msgid "a mammal"
msgstr ""
+#: data/json/species.json
+msgid "amphibian"
+msgid_plural "amphibians"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'amphibian'}
#: data/json/species.json
msgid "an amphibian"
msgstr ""
+#: data/json/species.json
+msgid "bird"
+msgid_plural "birds"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'bird'}
#: data/json/species.json
msgid "a bird"
msgstr ""
+#: data/json/species.json
+msgid "reptile"
+msgid_plural "reptiles"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'reptile'}
#: data/json/species.json
msgid "a reptile"
msgstr ""
+#: data/json/species.json
+msgid "fish"
+msgid_plural "fish"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'fish'}
#: data/json/species.json
msgid "a fish"
msgstr ""
+#: data/json/species.json
+msgid "mutant"
+msgid_plural "mutants"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'mutant'}
#: data/json/species.json
msgid "a mutant"
msgstr ""
+#: data/json/species.json
+msgid "nether creature"
+msgid_plural "nether creatures"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'nether creature'}
#: data/json/species.json
msgid "a nether creature"
msgstr ""
+#: data/json/species.json data/json/monsters/slimes.json
+msgid "blob"
+msgid_plural "blobs"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'blob'}
#: data/json/species.json
msgid "a blob"
msgstr ""
@@ -23551,30 +23640,79 @@ msgstr ""
msgid "plop."
msgstr ""
+#: data/json/species.json
+msgid "fungus"
+msgid_plural "fungi"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'fungus', 'str_pl': 'fungi'}
#: data/json/species.json
msgid "a fungus"
msgstr "ein Fungus"
+#: data/json/species.json
+msgid "leech plant"
+msgid_plural "leech plants"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'leech plant'}
#: data/json/species.json
msgid "a leech plant"
msgstr ""
+#: data/json/species.json
+msgid "insect"
+msgid_plural "insects"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'insect'}
#: data/json/species.json
msgid "an insect"
msgstr "ein Insekt"
+#: data/json/species.json
+msgid "spider"
+msgid_plural "spiders"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'spider'}
#: data/json/species.json
msgid "a spider"
msgstr ""
+#: data/json/species.json
+msgid "plant"
+msgid_plural "plants"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'plant'}
#: data/json/species.json
msgid "a plant"
msgstr ""
+#: data/json/species.json
+msgid "mollusk"
+msgid_plural "mollusks"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'mollusk'}
#: data/json/species.json
msgid "a mollusk"
msgstr ""
+#: data/json/species.json
+msgid "worm"
+msgid_plural "worms"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'worm'}
#: data/json/species.json
msgid "a worm"
msgstr ""
@@ -23583,6 +23721,14 @@ msgstr ""
msgid "rustle."
msgstr ""
+#: data/json/species.json data/json/monsters/zed-classic.json
+#: data/json/npcs/talk_tags.json
+msgid "zombie"
+msgid_plural "zombies"
+msgstr[0] "Zombie"
+msgstr[1] "Zombies"
+
+#. ~ Description for {'str': 'zombie'}
#: data/json/species.json
msgid "a zombie"
msgstr "ein Zombie"
@@ -23591,6 +23737,13 @@ msgstr "ein Zombie"
msgid "shuffling."
msgstr ""
+#: data/json/species.json
+msgid "robot"
+msgid_plural "robots"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'robot'}
#: data/json/species.json
msgid "a robot"
msgstr ""
@@ -23599,18 +23752,51 @@ msgstr ""
msgid "mechanical whirring."
msgstr ""
+#: data/json/species.json data/json/npcs/talk_tags.json
+msgid "horror"
+msgid_plural "horrors"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'horror'}
#: data/json/species.json
msgid "a horror"
msgstr ""
+#: data/json/species.json
+msgid "abberation"
+msgid_plural "abberations"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'abberation'}
#: data/json/species.json
msgid "an aberration"
msgstr "eine Anomalie"
+#: data/json/species.json
+msgid "hallucination"
+msgid_plural "hallucinations"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/json/species.json src/mtype.cpp
+msgid "human"
+msgid_plural "humans"
+msgstr[0] "Mensch"
+msgstr[1] "Menschen"
+
+#. ~ Description for {'str': 'human'}
#: data/json/species.json
msgid "a human"
msgstr ""
+#: data/json/species.json
+msgid "unknown species"
+msgid_plural "unknown species"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/json/speech.json data/mods/Aftershock/speech.json
#: data/mods/CrazyCataclysm/crazy_speech.json
msgid "\"Hello?\""
@@ -50700,12 +50886,9 @@ msgstr[1] "20x66mm-Flechet, selbstgemacht"
#. flechettes, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless flechette rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless flechette rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
-"Selbstgemachte, illegale Duplikate von Rivtechs hülsenlosen 20×66mm "
-"Flechetpatronen. Weil sie hülsenlos sind, können diese Patronen weder "
-"demontiert noch wiedergeladen werden."
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm buckshot, handmade"
@@ -50716,12 +50899,9 @@ msgstr[1] ""
#. ~ Description for {'str': '20x66mm buckshot, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless buckshot rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless buckshot rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
-"Selbstgemachte, illegale Duplikate von Rivtechs hülsenlosen 20×66mm-Posten. "
-"Weil sie hülsenlos sind, können diese Patronen weder demontiert noch "
-"wiedergeladen werden."
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm slug, handmade"
@@ -50733,12 +50913,9 @@ msgstr[1] ""
#. slugs, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless solid projectile "
-"rounds. Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless solid projectile rounds. "
+"Being caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
-"Selbstgemachte, illegale Duplikate von Rivtechs hülsenlosen 20×66mm-"
-"Massivpatronen. Weil sie hülsenlos sind, können diese Patronen weder "
-"demontiert noch wiedergeladen werden."
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm explosive"
@@ -52487,20 +52664,56 @@ msgstr ""
"Truppenbewegungen."
#: data/json/items/ammo/8x40mm.json
-msgid "bootleg 8x40mm JHP"
-msgid_plural "bootleg 8x40mm JHPs"
+msgid "8x40mm JHP, handmade"
+msgid_plural "8x40mm JHP, handmades"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': '8x40mm JHP, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm JHP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm caseless, handmade"
+msgid_plural "8x40mm caseless, handmades"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for {'str': 'bootleg 8x40mm JHP'}
+#. ~ Description for {'str': '8x40mm caseless, handmade'}
#: data/json/items/ammo/8x40mm.json
msgid ""
-"Bootleg duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
+"Handmade duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
"rounds, these cannot be disassembled or reloaded."
msgstr ""
-"Selbstgemachte, illegale Duplikate von Rivtechs hülsenlosen 8×40mm-Patronen."
-" Weil sie hülsenlos sind, können diese Patronen weder demontiert noch "
-"wiedergeladen werden."
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm HVP, handmade"
+msgid_plural "8x40mm HVP, handmades"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': '8x40mm HVP, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm HVP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm tracer, handmade"
+msgid_plural "8x40mm tracer, handmades"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': '8x40mm tracer, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm tracer rounds. Being caseless rounds,"
+" these cannot be disassembled or reloaded."
+msgstr ""
#. ~ Description for {'str_sp': '8x40mm caseless'}
#: data/json/items/ammo/8x40mm.json
@@ -52905,45 +53118,45 @@ msgstr ""
"Ein Rohr mit kleinen Paintballs. Sie richten praktisch keinen Schaden an."
#: data/json/items/ammo/rpg.json
-msgid "PG-7VL 93mm rocket"
-msgid_plural "PG-7VL 93mm rockets"
+msgid "PG-7VL RPG-7 rocket"
+msgid_plural "PG-7VL RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for PG-7VL 93mm rocket
+#. ~ Description for PG-7VL RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "93mm single-stage high-explosive ammunition for the RPG-7."
msgstr "93mm-Einstufen-Hochexplosiv-Munition für die RPG-7."
#: data/json/items/ammo/rpg.json
-msgid "PG-7VR 64mm/105mm rocket"
-msgid_plural "PG-7VR 64mm/105mm rockets"
+msgid "PG-7VR RPG-7 rocket"
+msgid_plural "PG-7VR RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for PG-7VR 64mm/105mm rocket
+#. ~ Description for PG-7VR RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "64mm/105mm high-explosive tandem ammunition for the RPG-7."
msgstr "64mm/105mm Hochexplosive - Tandemmunition für den RPG-7."
#: data/json/items/ammo/rpg.json
-msgid "TBG-7V 105mm rocket"
-msgid_plural "TBG-7V 105mm rockets"
+msgid "TBG-7V RPG-7 rocket"
+msgid_plural "TBG-7V RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for TBG-7V 105mm rocket
+#. ~ Description for TBG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "105mm thermobaric ammunition for the RPG-7."
msgstr "105mm thermobarische Munition für den RPG-7."
#: data/json/items/ammo/rpg.json
-msgid "OG-7V 40mm rocket"
-msgid_plural "OG-7V 40mm rockets"
+msgid "OG-7V RPG-7 rocket"
+msgid_plural "OG-7V RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for OG-7V 40mm rocket
+#. ~ Description for OG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid ""
"40mm high-explosive fragmentation antipersonnel ammunition for the RPG-7."
@@ -76784,6 +76997,50 @@ msgid ""
"A pickled egg. Rather salty, but tastes good and lasts for a long time."
msgstr "Ein Solei. Recht salzig, aber schmeckt gut und ist lange haltbar."
+#: data/json/items/comestibles/egg.json
+msgid "salsify omelette"
+msgid_plural "salsify omelette"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'salsify omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A salsify omelette."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "wild veggetable omelette"
+msgid_plural "wild veggetable omelette"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'wild veggetable omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with wild vegetables."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "mushroom omelette"
+msgid_plural "mushroom omelette"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'mushroom omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with mushrooms."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "spanish omelette"
+msgid_plural "spanish omelette"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'spanish omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A spanish omelette."
+msgstr ""
+
#: data/json/items/comestibles/frozen.json
msgid "milkshake"
msgid_plural "milkshakes"
@@ -78001,6 +78258,7 @@ msgstr ""
#: data/json/items/comestibles/junkfood.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cookie"
msgid_plural "cookies"
msgstr[0] ""
@@ -80591,6 +80849,7 @@ msgstr ""
#: data/json/items/comestibles/med.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "chewing gum"
msgid_plural "chewing gum"
msgstr[0] "Kaugummi"
@@ -87432,6 +87691,7 @@ msgstr ""
#: data/json/items/comestibles/wheat.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cracker"
msgid_plural "crackers"
msgstr[0] ""
@@ -99825,6 +100085,21 @@ msgstr ""
"Ihre Klinge ähnelt der einer landwirtschaftlichen Sense, aus der sie sich "
"entwickelte. "
+#: data/json/items/melee/spears_and_polearms.json
+msgid "makeshift glaive"
+msgid_plural "makeshift glaives"
+msgstr[0] "selbstgebaute Glefe"
+msgstr[1] "selbstgebaute Glefen"
+
+#. ~ Description for {'str': 'makeshift glaive'}
+#: data/json/items/melee/spears_and_polearms.json
+msgid ""
+"This is a large blade attached to a long stick. It could do a considerable "
+"amount of damage."
+msgstr ""
+"Dies ist eine große Klinge, die an einem langen Stock angebracht wurde. Sie "
+"könnte einen bemerkenswerten Schaden verursachen."
+
#: data/json/items/melee/spears_and_polearms.json
msgid "glaive"
msgid_plural "glaives"
@@ -106702,7 +106977,7 @@ msgstr "Du knipst das Feuerzeug an."
#. ~ Use action need_charges_msg for {'str': 'refillable lighter'}.
#: data/json/items/tool/fire.json src/activity_actor.cpp src/explosion.cpp
-#: src/gates.cpp
+#: src/gates.cpp src/iuse.cpp
msgid "Nothing happens."
msgstr "Nichts passiert."
@@ -108759,21 +109034,6 @@ msgid ""
"from uncertain sources like a river may be dirty."
msgstr ""
-#: data/json/items/tool/misc.json
-msgid "makeshift glaive"
-msgid_plural "makeshift glaives"
-msgstr[0] "selbstgebaute Glefe"
-msgstr[1] "selbstgebaute Glefen"
-
-#. ~ Description for {'str': 'makeshift glaive'}
-#: data/json/items/tool/misc.json
-msgid ""
-"This is a large blade attached to a long stick. It could do a considerable "
-"amount of damage."
-msgstr ""
-"Dies ist eine große Klinge, die an einem langen Stock angebracht wurde. Sie "
-"könnte einen bemerkenswerten Schaden verursachen."
-
#: data/json/items/tool/misc.json
msgid "mind splicer kit"
msgid_plural "mind splicer kits"
@@ -117171,8 +117431,8 @@ msgstr ""
msgctxt "fish"
msgid "pike"
msgid_plural "pikes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Pike"
+msgstr[1] "Piken"
#. ~ Description for {'ctxt': 'fish', 'str': 'pike'}
#: data/json/monsters/fish.json
@@ -120560,12 +120820,6 @@ msgstr ""
"färbte sich blassgelb vom Leben unter der Erde. Sie schwärmt unter dem Boden"
" aus und ist nach ihrer Gewohnheit, Abwässerkanäle zu verseuchen, benannt."
-#: data/json/monsters/slimes.json
-msgid "blob"
-msgid_plural "blobs"
-msgstr[0] ""
-msgstr[1] ""
-
#. ~ Description for {'str': 'blob'}
#: data/json/monsters/slimes.json
msgid ""
@@ -121294,12 +121548,6 @@ msgid ""
"envelope of scar tissue."
msgstr ""
-#: data/json/monsters/zed-classic.json data/json/npcs/talk_tags.json
-msgid "zombie"
-msgid_plural "zombies"
-msgstr[0] "Zombie"
-msgstr[1] "Zombies"
-
#. ~ Description for {'str': 'zombie'}
#: data/json/monsters/zed-classic.json
msgid ""
@@ -132372,7 +132620,8 @@ msgid "I'll kill you if you don't."
msgstr "Wenn du es nicht tust, werd ich dich töten."
#: data/json/npcs/TALK_COMMON_OTHER.json
-#: data/json/npcs/TALK_TRUE_FOODPERSON.json src/iuse.cpp
+#: data/json/npcs/TALK_TRUE_FOODPERSON.json
+#: data/mods/smart_house_remotes/main.lua src/iuse.cpp
msgid "Nevermind."
msgstr "Vergiss es."
@@ -140770,10 +141019,6 @@ msgstr "Monster"
msgid "demon"
msgstr "Dämon"
-#: data/json/npcs/talk_tags.json
-msgid "horror"
-msgstr "Schrecken"
-
#: data/json/npcs/talk_tags.json
msgid "indescribable beast"
msgstr "unbeschreibliche Bestie"
@@ -155367,6 +155612,16 @@ msgid ""
"coming no further. Go away."
msgstr ""
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"I was sent here by the traders at the refugee center. They told me to "
+"deliver this hard drive to you."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "The traders also mentioned you were looking for help."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "Wait! What??"
msgstr ""
@@ -155403,6 +155658,20 @@ msgstr ""
msgid "Alright, I'm leaving."
msgstr ""
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"Understood. Please drop the drive on the box embedded beneath the intercom."
+" You are welcome to leave afterwards."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "[Do as the Intercom Says]"
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "Didn't bring the hard drive now, let me return with it."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "No. Now leave."
msgstr ""
@@ -187445,6 +187714,13 @@ msgid ""
"constant jet of warm air to heat an enclosed space."
msgstr ""
+#: data/mods/Aftershock/mobs/species.json
+msgid "intelligent animal"
+msgid_plural "intelligent animals"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'intelligent animal'}
#: data/mods/Aftershock/mobs/species.json
msgid "an intelligent animal created by man before the Cataclysm"
msgstr ""
@@ -197433,6 +197709,13 @@ msgstr ""
msgid "DinoLab Operating Theater Access Control"
msgstr ""
+#: data/mods/DinoMod/monsters/dinosaur.json
+msgid "dinosaur"
+msgid_plural "dinosaurs"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'dinosaur'}
#: data/mods/DinoMod/monsters/dinosaur.json
msgid "a dinosaur"
msgstr ""
@@ -209530,6 +209813,11 @@ msgstr ""
msgid "RUNES"
msgstr ""
+#. ~ Crafting recipes subcategory of 'ENCHANTED' category
+#: data/mods/Magiclysm/qualities.json
+msgid "ENCHANTING"
+msgstr ""
+
#: data/mods/Magiclysm/qualities.json
msgid "mana focusing"
msgstr ""
@@ -209657,6 +209945,24 @@ msgctxt "start_name"
msgid "Wizard's Retreat Vacation"
msgstr ""
+#: data/mods/Magiclysm/species.json
+msgid "magical beast"
+msgid_plural "magical beasts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "dragon"
+msgid_plural "dragons"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "lizardfolk"
+msgid_plural "lizardfolk"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/start_locations.json
msgid "Wizard's Secret Basement Study"
msgstr ""
@@ -209833,6 +210139,42 @@ msgid ""
"lights."
msgstr ""
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Bless"
+msgstr ""
+
+#. ~ Description for {'str': 'Bless'}
+#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "A spell of blessing that gives you energy and boosts your abilities."
+msgstr ""
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Holy Blade"
+msgstr ""
+
+#. ~ Description for Holy Blade
+#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
+#. Holy Blade'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "This blade of light will cut through any evil it makes contact with!"
+msgstr ""
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Spiritual Armor"
+msgstr ""
+
+#. ~ Description for Spiritual Armor
+#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
+#. of Spiritual Armor'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid ""
+"Evil will not make it through your defenses if your faith is strong enough!"
+msgstr ""
+
#: data/mods/Magiclysm/Spells/biomancer.json
msgid "Cure Light Wounds"
msgstr ""
@@ -211296,17 +211638,6 @@ msgid ""
"harmless."
msgstr ""
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Bless"
-msgstr ""
-
-#. ~ Description for {'str': 'Bless'}
-#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "A spell of blessing that gives you energy and boosts your abilities."
-msgstr ""
-
#: data/mods/Magiclysm/Spells/technomancer.json
#: data/mods/Magiclysm/effects/effects.json
msgid "Invisibility"
@@ -211324,31 +211655,6 @@ msgstr ""
msgid "To the outside world, your body fades away and you cease to exist!"
msgstr ""
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Holy Blade"
-msgstr ""
-
-#. ~ Description for Holy Blade
-#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
-#. Holy Blade'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "This blade of light will cut through any evil it makes contact with!"
-msgstr ""
-
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Spiritual Armor"
-msgstr ""
-
-#. ~ Description for Spiritual Armor
-#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
-#. of Spiritual Armor'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid ""
-"Evil will not make it through your defenses if your faith is strong enough!"
-msgstr ""
-
#: data/mods/Magiclysm/Spells/technomancer.json
msgid "Lamp"
msgstr ""
@@ -213494,6 +213800,18 @@ msgid_plural "sledge hammer +2s"
msgstr[0] ""
msgstr[1] ""
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "heavy sledge hammer +1"
+msgid_plural "heavy sledge hammers +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "heavy sledge hammer +2"
+msgid_plural "heavy sledge hammers +2"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "warhammer +1"
msgid_plural "warhammer +1s"
@@ -213699,12 +214017,14 @@ msgstr[0] ""
msgstr[1] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +1"
msgid_plural "crowbar +1s"
msgstr[0] ""
msgstr[1] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +2"
msgid_plural "crowbar +2s"
msgstr[0] ""
@@ -213759,12 +214079,14 @@ msgstr[0] ""
msgstr[1] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +1"
msgid_plural "hunting knife +1s"
msgstr[0] ""
msgstr[1] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +2"
msgid_plural "hunting knife +2s"
msgstr[0] ""
@@ -213938,6 +214260,18 @@ msgid_plural "dao +2s"
msgstr[0] ""
msgstr[1] ""
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +1"
+msgid_plural "lucerne hammers +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +2"
+msgid_plural "lucerne hammers +2"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "Biomancer spear"
msgid_plural "Biomancer spears"
@@ -214826,6 +215160,78 @@ msgid ""
"turns into the item pictured on the front, in this case a crowbar."
msgstr ""
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +1"
+msgid_plural "bottle jacks +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +2"
+msgid_plural "bottle jacks +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +1"
+msgid_plural "scalpels +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +2"
+msgid_plural "scalpels +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +1"
+msgid_plural "butcher knives +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +2"
+msgid_plural "butcher knives +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +1"
+msgid_plural "meat cleavers +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +2"
+msgid_plural "meat cleavers +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +1"
+msgid_plural "carving knives +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +2"
+msgid_plural "carving knives +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +1"
+msgid_plural "butchering kits +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +2"
+msgid_plural "butchering kits +2"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/items/enchanted_unarmed.json
msgid "cestus +1"
msgid_plural "cestus +1s"
@@ -215902,6 +216308,20 @@ msgid ""
"protective equipment inside."
msgstr ""
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid "Enchanter's Guidebook"
+msgid_plural "copies of Enchanter's Guidebooks"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': "Enchanter's Guidebook", 'str_pl': "copies of
+#. Enchanter's Guidebooks"}
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid ""
+"A hefty textbook on the theory and practice of magically strengthening "
+"weapons and tools."
+msgstr ""
+
#: data/mods/Magiclysm/items/spell_scrolls.json
msgid "Spell Scroll"
msgid_plural "Spell Scrolls"
@@ -216977,6 +217397,12 @@ msgid ""
"much more expensive."
msgstr ""
+#: data/mods/Magiclysm/monsters/demon_spider.json
+msgid "demon spider"
+msgid_plural "demon spiders"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid "demon spiderling"
msgid_plural "demon spiderlings"
@@ -216992,12 +217418,6 @@ msgid ""
"with venom."
msgstr ""
-#: data/mods/Magiclysm/monsters/demon_spider.json
-msgid "demon spider"
-msgid_plural "demon spiders"
-msgstr[0] ""
-msgstr[1] ""
-
#. ~ Description for demon spider
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid ""
@@ -220045,10 +220465,22 @@ msgid ""
"human candy! Are you a real monster? Will you be able to devour it all?\""
msgstr ""
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "marshmallow"
+msgid_plural "marshmallows"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "shlop."
msgstr ""
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "gummy"
+msgid_plural "gummies"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "pop."
msgstr ""
@@ -222498,6 +222930,15 @@ msgid ""
"city size set to 1 and spacing set to 8."
msgstr ""
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "SaveLoad Lua Test"
+msgstr ""
+
+#. ~ Description for SaveLoad Lua Test
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "Mod for testing Lua save/load API."
+msgstr ""
+
#: data/mods/sees_player_hitbutton/modinfo.json
msgid "sees-player icon, HitButton_iso"
msgstr ""
@@ -222520,6 +222961,78 @@ msgid ""
"retrodays tileset."
msgstr ""
+#: data/mods/smart_house_remotes/item.json
+msgid "smart house remote"
+msgid_plural "smart house remotes"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'smart house remote'}
+#: data/mods/smart_house_remotes/item.json
+msgid ""
+"A small remote with lcd display used to control garage doors and window "
+"curtains. Completely useless now, unless you manage to restore power to the"
+" house."
+msgstr ""
+
+#: data/mods/smart_house_remotes/iuse.json
+msgid "Control doors and shutters"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Open curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Close curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Raise garage door"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Lower garage door"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's not enough grid charge.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Low Current At Endpoint"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when player is too far away from the area.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Signal"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's nothing to activate.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Endpoints Available"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "The remote beeps quietly."
+msgstr ""
+
+#. ~ Title of the menu prompting player to select what to activate with the
+#. remote.
+#. Typically it's doors, garage doors or window curtains.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Select endpoint"
+msgstr ""
+
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Smart House Remotes"
+msgstr ""
+
+#. ~ Description for Smart House Remotes
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Add remotes for controlling garage doors and window curtains."
+msgstr ""
+
#: data/mods/speedydex/modinfo.json
msgid "SpeedyDex"
msgstr ""
@@ -224054,6 +224567,14 @@ msgstr "Debugmodus umschalten"
msgid "Debug Menu"
msgstr "Debugmenü"
+#: data/raw/keybindings/keybindings.json
+msgid "Lua Console"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Reload Lua Code"
+msgstr ""
+
#: data/raw/keybindings/keybindings.json
msgid "View Scentmap"
msgstr "Duftnotenvisualisierung ein/aus"
@@ -224609,6 +225130,26 @@ msgstr ""
msgid "Add new page"
msgstr ""
+#: data/raw/keybindings/keybindings.json
+msgid "Edit command"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History up"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History down"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the top"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the bottom"
+msgstr ""
+
#: data/raw/keybindings/messages.json
msgid "Toggle wide display"
msgstr ""
@@ -224767,7 +225308,31 @@ msgstr "Turmzielmodus anpassen"
#: src/achievement.cpp
#, c-format
-msgid "Attain %s skill level of %i (%i/%i)."
+msgid "Kill at least %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Don't kill even a single %s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Kill no more than %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+msgid " (failed)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Attain skill level of %i in %s (%i/%i)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Stay at or below skill level of %i in %s (%i/%i)"
msgstr ""
#: src/achievement.cpp
@@ -230463,6 +231028,30 @@ msgstr "abcdefghijklmnopqrstuvwxyzäöüß"
msgid "に坂索トし荷測のンおク妙免イロコヤ梅棋厚れ表幌"
msgstr "に坂索トし荷測のンおク妙免イロコヤ梅棋厚れ表幌"
+#: src/catalua_console.cpp
+msgid "Press Ctrl+S to run script, press Esc to cancel"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press arrow keys to navigate text input"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to add new line"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to enter/edit command, Esc to quit"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Up/Down arrows to select from history"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press PgUp/PgDn/Home/End to scroll output window"
+msgstr ""
+
#: src/character.cpp src/debug_menu.cpp src/game.cpp src/iuse.cpp
#: src/npctrade.cpp
msgid "You"
@@ -235347,6 +235936,10 @@ msgstr ""
msgid "Change [b]attery charge"
msgstr ""
+#: src/debug_menu.cpp
+msgid "Export [j]son template"
+msgstr ""
+
#: src/debug_menu.cpp
msgid "Vehicle…"
msgstr ""
@@ -235463,6 +236056,10 @@ msgstr ""
msgid "Player…"
msgstr ""
+#: src/debug_menu.cpp
+msgid "Lua console"
+msgstr ""
+
#: src/debug_menu.cpp
msgid ""
"Debug Functions - Manipulate the fabric of reality!\n"
@@ -236332,6 +236929,10 @@ msgstr "Dort ist kein Fahrzeug."
msgid "By how much? (in kJ, negative to discharge)"
msgstr ""
+#: src/debug_menu.cpp
+msgid "JSON template written to debug.log"
+msgstr ""
+
#: src/dependency_tree.cpp
msgid "Missing Dependency(ies): "
msgstr ""
@@ -240797,21 +241398,19 @@ msgstr ""
#: src/game.cpp
#, c-format
-msgid "Stepping into that %1$s looks risky, but you enter anyway."
+msgid "Stepping into that %1$s looks risky. %2$s"
msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Run into it if you wish to enter "
-"anyway."
+msgid "But you enter anyway."
msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Crouch and move into it if you wish to"
-" enter anyway."
+msgid "Run into it if you wish to enter anyway."
+msgstr ""
+
+#: src/game.cpp
+msgid "Crouch and move into it if you wish to enter anyway."
msgstr ""
#: src/game.cpp
@@ -248977,6 +249576,11 @@ msgstr "%s wirft es dir aus deiner Hand!"
msgid "You try to feed the %s some %s, but it vanishes!"
msgstr "Du versuchst, %s mit etwas %s zu füttern, aber es verschwindet!"
+#: src/iuse.cpp
+#, c-format
+msgid "You reach for the %s, but it recoils away from you!"
+msgstr ""
+
#: src/iuse.cpp
msgid "You want to feed it the dog food, but it bites your fingers!"
msgstr ""
@@ -254967,6 +255571,11 @@ msgstr ""
msgid "Create World"
msgstr "Welt erstellen"
+#. ~ Marker for worlds that need Lua in game builds without Lua
+#: src/main_menu.cpp src/worldfactory.cpp
+msgid "Needs Lua!"
+msgstr ""
+
#: src/main_menu.cpp
msgid "Bugs? Suggestions? Use links in MOTD to report them."
msgstr "Bugs? Vorschläge? Verwende die Links unter MOTD, um sie zu melden. "
@@ -255197,6 +255806,17 @@ msgstr ""
msgid "Unable to make graphics directory. Check permissions."
msgstr ""
+#: src/main_menu.cpp
+msgid ""
+"You are running x32 build of the game on a x64 operating system. This means"
+" the game will NOT be able to access all memory, and you may experience "
+"random out-of-memory crashes. Consider obtaining a x64 build of the game to"
+" avoid that, but if you *really* want to be running x32 build of the game "
+"for some reason (or don't have a choice), you may want to lower your memory "
+"usage by disabling tileset, soundpack and mods and increasing autosave "
+"frequency."
+msgstr ""
+
#: src/main_menu.cpp
msgid "Really quit?"
msgstr "Wirklich beenden?"
@@ -255227,6 +255847,13 @@ msgstr "Willst du %s wirklich löschen?"
msgid "Sorry, something went wrong."
msgstr "Tschuldigung, etwas ging schief."
+#. ~ Error when attempting to load a world whose mods depend on Lua
+#. ~ on game build that doesn't have Lua. %s = world name.
+#: src/main_menu.cpp
+#, c-format
+msgid "%s needs game build with Lua support!"
+msgstr ""
+
#. ~ %s = world name
#: src/main_menu.cpp
#, c-format
@@ -258986,6 +259613,15 @@ msgstr[1] ""
msgid "Mod version"
msgstr "Mod-Version"
+#: src/mod_manager_ui.cpp
+#, c-format
+msgid "%s: API version %s\n"
+msgstr ""
+
+#: src/mod_manager_ui.cpp
+msgid "Needs Lua"
+msgstr ""
+
#: src/mod_manager_ui.cpp
msgid "Mod info path"
msgstr ""
@@ -262029,12 +262665,6 @@ msgstr ""
msgid "Focus trends towards:"
msgstr ""
-#: src/mtype.cpp
-msgid "human"
-msgid_plural "humans"
-msgstr[0] "Mensch"
-msgstr[1] "Menschen"
-
#: src/mutation.cpp
#, c-format
msgid "Your %s is pushed off!"
@@ -264693,6 +265323,14 @@ msgstr ""
msgid "Messages related to SDL, tiles, tilesets and sound."
msgstr ""
+#: src/options.cpp
+msgid "Lua"
+msgstr ""
+
+#: src/options.cpp
+msgid "Messages from Lua scripts."
+msgstr ""
+
#: src/options.cpp
msgid "General"
msgstr "Allgemein"
@@ -265853,6 +266491,16 @@ msgstr "Animationsverzögerung"
msgid "The amount of time to pause between animation frames in ms."
msgstr "Die Zeit in ms, welche zwischen Animationseinzelbildern vergeht."
+#: src/options.cpp
+msgid "Draw bullets as lines"
+msgstr ""
+
+#: src/options.cpp
+msgid ""
+"If true, bullets are drawn as lines of images, and the animation lasts only "
+"one frame."
+msgstr ""
+
#: src/options.cpp
msgid "Blinking effects speed"
msgstr ""
@@ -265927,7 +266575,7 @@ msgid "Font height"
msgstr ""
#: src/options.cpp
-msgid "Set the font height. Requires restart."
+msgid "Set the font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -265935,7 +266583,7 @@ msgid "Font size"
msgstr ""
#: src/options.cpp
-msgid "Set the font size. Requires restart."
+msgid "Set the font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -265943,7 +266591,7 @@ msgid "Map font width"
msgstr ""
#: src/options.cpp
-msgid "Set the map font width. Requires restart."
+msgid "Set the map font width. Requires restart."
msgstr ""
#: src/options.cpp
@@ -265951,7 +266599,7 @@ msgid "Map font height"
msgstr ""
#: src/options.cpp
-msgid "Set the map font height. Requires restart."
+msgid "Set the map font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -265959,7 +266607,7 @@ msgid "Map font size"
msgstr ""
#: src/options.cpp
-msgid "Set the map font size. Requires restart."
+msgid "Set the map font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -265967,7 +266615,7 @@ msgid "Overmap font width"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font width. Requires restart."
+msgid "Set the overmap font width. Requires restart."
msgstr ""
#: src/options.cpp
@@ -265975,7 +266623,7 @@ msgid "Overmap font height"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font height. Requires restart."
+msgid "Set the overmap font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -265983,7 +266631,7 @@ msgid "Overmap font size"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font size. Requires restart."
+msgid "Set the overmap font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -273794,6 +274442,11 @@ msgstr ""
msgid " [%s]"
msgstr ""
+#. ~ Tag for mods that use Lua in game builds without Lua.
+#: src/worldfactory.cpp
+msgid "(Needs Lua) "
+msgstr ""
+
#: src/worldfactory.cpp
msgid "N/A"
msgstr "(entfällt)"
diff --git a/lang/po/el.po b/lang/po/el.po
index 790a93827371..03f1d1540274 100644
--- a/lang/po/el.po
+++ b/lang/po/el.po
@@ -1,12 +1,12 @@
#
# Translators:
-# Coolthulhu , 2020
+# Coolthulhu , 2023
#
msgid ""
msgstr ""
"Project-Id-Version: cataclysm-bn\n"
-"POT-Creation-Date: 2023-08-03 04:45+0000\n"
-"Last-Translator: Coolthulhu , 2020\n"
+"POT-Creation-Date: 2023-09-15 13:27+0000\n"
+"Last-Translator: Coolthulhu , 2023\n"
"Language-Team: Greek (https://app.transifex.com/bn-team/teams/113585/el/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1490,10 +1490,18 @@ msgstr ""
msgid "[Combat] One Down, Billions to Go…"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] The Undertaker"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Rude Awakening"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] Pacifist"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Decamate"
msgstr ""
@@ -3856,10 +3864,24 @@ msgstr ""
#: data/json/bionics.json data/json/items/bionics.json
msgid ""
"Installed within you is a perpetual generator powered by nonsensoleum. When"
-" activated it's power gen doubles. If you are seeing this, you'd better be "
+" activated its power gen doubles. If you are seeing this, you'd better be "
"debugging."
msgstr ""
+#: data/json/bionics.json data/json/items/bionics.json
+msgid "Debug Fuel Cell CBM"
+msgid_plural "Debug Fuel Cell CBMs"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'Debug Fuel Cell CBM'}
+#: data/json/bionics.json data/json/items/bionics.json
+msgid ""
+"The power of the sun, in the palm of my hand! Installed within you is a "
+"perpetual generator powered by nonsensoleum. When activated its power gen "
+"doubles. If you are seeing this, you'd better be debugging."
+msgstr ""
+
#: data/json/body_parts.json
msgid "appendix"
msgstr ""
@@ -7998,6 +8020,17 @@ msgstr ""
msgid "You're winded."
msgstr ""
+#: data/json/effects.json
+msgid "Bronchospasms"
+msgstr ""
+
+#. ~ Description of effect 'Bronchospasms'.
+#: data/json/effects.json
+msgid ""
+"Something in the air is making it harder to breathe, aggravating your "
+"asthma. Increases the chance of suffering an asthma attack."
+msgstr ""
+
#: data/json/effects.json
msgid "The ceiling collapses on you!"
msgstr ""
@@ -21880,34 +21913,90 @@ msgid_plural "seeing this is a bug"
msgstr[0] ""
msgstr[1] ""
+#: data/json/species.json
+msgid "mammal"
+msgid_plural "mammals"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'mammal'}
#: data/json/species.json
msgid "a mammal"
msgstr ""
+#: data/json/species.json
+msgid "amphibian"
+msgid_plural "amphibians"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'amphibian'}
#: data/json/species.json
msgid "an amphibian"
msgstr ""
+#: data/json/species.json
+msgid "bird"
+msgid_plural "birds"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'bird'}
#: data/json/species.json
msgid "a bird"
msgstr ""
+#: data/json/species.json
+msgid "reptile"
+msgid_plural "reptiles"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'reptile'}
#: data/json/species.json
msgid "a reptile"
msgstr ""
+#: data/json/species.json
+msgid "fish"
+msgid_plural "fish"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'fish'}
#: data/json/species.json
msgid "a fish"
msgstr ""
+#: data/json/species.json
+msgid "mutant"
+msgid_plural "mutants"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'mutant'}
#: data/json/species.json
msgid "a mutant"
msgstr ""
+#: data/json/species.json
+msgid "nether creature"
+msgid_plural "nether creatures"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'nether creature'}
#: data/json/species.json
msgid "a nether creature"
msgstr ""
+#: data/json/species.json data/json/monsters/slimes.json
+msgid "blob"
+msgid_plural "blobs"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'blob'}
#: data/json/species.json
msgid "a blob"
msgstr ""
@@ -21916,30 +22005,79 @@ msgstr ""
msgid "plop."
msgstr ""
+#: data/json/species.json
+msgid "fungus"
+msgid_plural "fungi"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'fungus', 'str_pl': 'fungi'}
#: data/json/species.json
msgid "a fungus"
msgstr ""
+#: data/json/species.json
+msgid "leech plant"
+msgid_plural "leech plants"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'leech plant'}
#: data/json/species.json
msgid "a leech plant"
msgstr ""
+#: data/json/species.json
+msgid "insect"
+msgid_plural "insects"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'insect'}
#: data/json/species.json
msgid "an insect"
msgstr ""
+#: data/json/species.json
+msgid "spider"
+msgid_plural "spiders"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'spider'}
#: data/json/species.json
msgid "a spider"
msgstr ""
+#: data/json/species.json
+msgid "plant"
+msgid_plural "plants"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'plant'}
#: data/json/species.json
msgid "a plant"
msgstr ""
+#: data/json/species.json
+msgid "mollusk"
+msgid_plural "mollusks"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'mollusk'}
#: data/json/species.json
msgid "a mollusk"
msgstr ""
+#: data/json/species.json
+msgid "worm"
+msgid_plural "worms"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'worm'}
#: data/json/species.json
msgid "a worm"
msgstr ""
@@ -21948,6 +22086,14 @@ msgstr ""
msgid "rustle."
msgstr ""
+#: data/json/species.json data/json/monsters/zed-classic.json
+#: data/json/npcs/talk_tags.json
+msgid "zombie"
+msgid_plural "zombies"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'zombie'}
#: data/json/species.json
msgid "a zombie"
msgstr ""
@@ -21956,6 +22102,13 @@ msgstr ""
msgid "shuffling."
msgstr ""
+#: data/json/species.json
+msgid "robot"
+msgid_plural "robots"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'robot'}
#: data/json/species.json
msgid "a robot"
msgstr ""
@@ -21964,18 +22117,51 @@ msgstr ""
msgid "mechanical whirring."
msgstr ""
+#: data/json/species.json data/json/npcs/talk_tags.json
+msgid "horror"
+msgid_plural "horrors"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'horror'}
#: data/json/species.json
msgid "a horror"
msgstr ""
+#: data/json/species.json
+msgid "abberation"
+msgid_plural "abberations"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'abberation'}
#: data/json/species.json
msgid "an aberration"
msgstr ""
+#: data/json/species.json
+msgid "hallucination"
+msgid_plural "hallucinations"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/json/species.json src/mtype.cpp
+msgid "human"
+msgid_plural "humans"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'human'}
#: data/json/species.json
msgid "a human"
msgstr ""
+#: data/json/species.json
+msgid "unknown species"
+msgid_plural "unknown species"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/json/speech.json data/mods/Aftershock/speech.json
#: data/mods/CrazyCataclysm/crazy_speech.json
msgid "\"Hello?\""
@@ -47566,11 +47752,9 @@ msgstr[1] ""
#. flechettes, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless flechette rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless flechette rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
-"Χειροποίητα λαθραίο αντίγραφα του Rivtech 20x66mm χωρίς κασετίνα τύπου "
-"flechette. Οι σφαίρες δεν μπορούν να αποσυναρμολογηθούν ή να οπλιστούν ξανά."
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm buckshot, handmade"
@@ -47581,11 +47765,9 @@ msgstr[1] ""
#. ~ Description for {'str': '20x66mm buckshot, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless buckshot rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless buckshot rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
-"Χειροποίητα λαθραίο αντίγραφα του Rivtech 8x40mm χωρίς κασετίνα τύπου "
-"buckshot. Οι σφαίρες δεν μπορούν να αποσυναρμολογηθούν ή να οπλιστούν ξανά."
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm slug, handmade"
@@ -47597,11 +47779,9 @@ msgstr[1] ""
#. slugs, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless solid projectile "
-"rounds. Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless solid projectile rounds. "
+"Being caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
-"Χειροποίητα λαθραία αντίγραφα του Rivtech 20x66mm χωρίς κασετίνα βλήματα. Τα"
-" βλήματα δεν μπορούν να αποσυναρμολογηθούν ή να οπλιστούν ξανά."
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm explosive"
@@ -49113,18 +49293,57 @@ msgid ""
msgstr ""
#: data/json/items/ammo/8x40mm.json
-msgid "bootleg 8x40mm JHP"
-msgid_plural "bootleg 8x40mm JHPs"
+msgid "8x40mm JHP, handmade"
+msgid_plural "8x40mm JHP, handmades"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': '8x40mm JHP, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm JHP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm caseless, handmade"
+msgid_plural "8x40mm caseless, handmades"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for {'str': 'bootleg 8x40mm JHP'}
+#. ~ Description for {'str': '8x40mm caseless, handmade'}
#: data/json/items/ammo/8x40mm.json
msgid ""
-"Bootleg duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
+"Handmade duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
"rounds, these cannot be disassembled or reloaded."
msgstr ""
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm HVP, handmade"
+msgid_plural "8x40mm HVP, handmades"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': '8x40mm HVP, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm HVP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm tracer, handmade"
+msgid_plural "8x40mm tracer, handmades"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': '8x40mm tracer, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm tracer rounds. Being caseless rounds,"
+" these cannot be disassembled or reloaded."
+msgstr ""
+
#. ~ Description for {'str_sp': '8x40mm caseless'}
#: data/json/items/ammo/8x40mm.json
msgid ""
@@ -49468,45 +49687,45 @@ msgid "A tube of small paintballs. They deal virtually no damage."
msgstr ""
#: data/json/items/ammo/rpg.json
-msgid "PG-7VL 93mm rocket"
-msgid_plural "PG-7VL 93mm rockets"
+msgid "PG-7VL RPG-7 rocket"
+msgid_plural "PG-7VL RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for PG-7VL 93mm rocket
+#. ~ Description for PG-7VL RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "93mm single-stage high-explosive ammunition for the RPG-7."
msgstr "93mm μονής φάσης, υψηλής εκρηκτικής δύναμης πυρομαχικά για το RPG-7."
#: data/json/items/ammo/rpg.json
-msgid "PG-7VR 64mm/105mm rocket"
-msgid_plural "PG-7VR 64mm/105mm rockets"
+msgid "PG-7VR RPG-7 rocket"
+msgid_plural "PG-7VR RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for PG-7VR 64mm/105mm rocket
+#. ~ Description for PG-7VR RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "64mm/105mm high-explosive tandem ammunition for the RPG-7."
msgstr ""
#: data/json/items/ammo/rpg.json
-msgid "TBG-7V 105mm rocket"
-msgid_plural "TBG-7V 105mm rockets"
+msgid "TBG-7V RPG-7 rocket"
+msgid_plural "TBG-7V RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for TBG-7V 105mm rocket
+#. ~ Description for TBG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "105mm thermobaric ammunition for the RPG-7."
msgstr ""
#: data/json/items/ammo/rpg.json
-msgid "OG-7V 40mm rocket"
-msgid_plural "OG-7V 40mm rockets"
+msgid "OG-7V RPG-7 rocket"
+msgid_plural "OG-7V RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for OG-7V 40mm rocket
+#. ~ Description for OG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid ""
"40mm high-explosive fragmentation antipersonnel ammunition for the RPG-7."
@@ -71897,6 +72116,50 @@ msgid ""
"A pickled egg. Rather salty, but tastes good and lasts for a long time."
msgstr ""
+#: data/json/items/comestibles/egg.json
+msgid "salsify omelette"
+msgid_plural "salsify omelette"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'salsify omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A salsify omelette."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "wild veggetable omelette"
+msgid_plural "wild veggetable omelette"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'wild veggetable omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with wild vegetables."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "mushroom omelette"
+msgid_plural "mushroom omelette"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'mushroom omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with mushrooms."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "spanish omelette"
+msgid_plural "spanish omelette"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'spanish omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A spanish omelette."
+msgstr ""
+
#: data/json/items/comestibles/frozen.json
msgid "milkshake"
msgid_plural "milkshakes"
@@ -72973,6 +73236,7 @@ msgstr ""
#: data/json/items/comestibles/junkfood.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cookie"
msgid_plural "cookies"
msgstr[0] ""
@@ -75372,6 +75636,7 @@ msgstr ""
#: data/json/items/comestibles/med.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "chewing gum"
msgid_plural "chewing gum"
msgstr[0] ""
@@ -81685,6 +81950,7 @@ msgstr ""
#: data/json/items/comestibles/wheat.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cracker"
msgid_plural "crackers"
msgstr[0] ""
@@ -93071,6 +93337,19 @@ msgid ""
"likely evolved."
msgstr ""
+#: data/json/items/melee/spears_and_polearms.json
+msgid "makeshift glaive"
+msgid_plural "makeshift glaives"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'makeshift glaive'}
+#: data/json/items/melee/spears_and_polearms.json
+msgid ""
+"This is a large blade attached to a long stick. It could do a considerable "
+"amount of damage."
+msgstr ""
+
#: data/json/items/melee/spears_and_polearms.json
msgid "glaive"
msgid_plural "glaives"
@@ -99117,7 +99396,7 @@ msgstr ""
#. ~ Use action need_charges_msg for {'str': 'refillable lighter'}.
#: data/json/items/tool/fire.json src/activity_actor.cpp src/explosion.cpp
-#: src/gates.cpp
+#: src/gates.cpp src/iuse.cpp
msgid "Nothing happens."
msgstr ""
@@ -100958,19 +101237,6 @@ msgid ""
"from uncertain sources like a river may be dirty."
msgstr ""
-#: data/json/items/tool/misc.json
-msgid "makeshift glaive"
-msgid_plural "makeshift glaives"
-msgstr[0] ""
-msgstr[1] ""
-
-#. ~ Description for {'str': 'makeshift glaive'}
-#: data/json/items/tool/misc.json
-msgid ""
-"This is a large blade attached to a long stick. It could do a considerable "
-"amount of damage."
-msgstr ""
-
#: data/json/items/tool/misc.json
msgid "mind splicer kit"
msgid_plural "mind splicer kits"
@@ -111702,12 +111968,6 @@ msgid ""
"of infesting sewer lines."
msgstr ""
-#: data/json/monsters/slimes.json
-msgid "blob"
-msgid_plural "blobs"
-msgstr[0] ""
-msgstr[1] ""
-
#. ~ Description for {'str': 'blob'}
#: data/json/monsters/slimes.json
msgid ""
@@ -112345,12 +112605,6 @@ msgid ""
"envelope of scar tissue."
msgstr ""
-#: data/json/monsters/zed-classic.json data/json/npcs/talk_tags.json
-msgid "zombie"
-msgid_plural "zombies"
-msgstr[0] ""
-msgstr[1] ""
-
#. ~ Description for {'str': 'zombie'}
#: data/json/monsters/zed-classic.json
msgid ""
@@ -122484,7 +122738,8 @@ msgid "I'll kill you if you don't."
msgstr ""
#: data/json/npcs/TALK_COMMON_OTHER.json
-#: data/json/npcs/TALK_TRUE_FOODPERSON.json src/iuse.cpp
+#: data/json/npcs/TALK_TRUE_FOODPERSON.json
+#: data/mods/smart_house_remotes/main.lua src/iuse.cpp
msgid "Nevermind."
msgstr ""
@@ -130288,10 +130543,6 @@ msgstr ""
msgid "demon"
msgstr ""
-#: data/json/npcs/talk_tags.json
-msgid "horror"
-msgstr ""
-
#: data/json/npcs/talk_tags.json
msgid "indescribable beast"
msgstr ""
@@ -143621,6 +143872,16 @@ msgid ""
"coming no further. Go away."
msgstr ""
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"I was sent here by the traders at the refugee center. They told me to "
+"deliver this hard drive to you."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "The traders also mentioned you were looking for help."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "Wait! What??"
msgstr ""
@@ -143657,6 +143918,20 @@ msgstr ""
msgid "Alright, I'm leaving."
msgstr ""
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"Understood. Please drop the drive on the box embedded beneath the intercom."
+" You are welcome to leave afterwards."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "[Do as the Intercom Says]"
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "Didn't bring the hard drive now, let me return with it."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "No. Now leave."
msgstr ""
@@ -173434,6 +173709,13 @@ msgid ""
"constant jet of warm air to heat an enclosed space."
msgstr ""
+#: data/mods/Aftershock/mobs/species.json
+msgid "intelligent animal"
+msgid_plural "intelligent animals"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'intelligent animal'}
#: data/mods/Aftershock/mobs/species.json
msgid "an intelligent animal created by man before the Cataclysm"
msgstr ""
@@ -183319,6 +183601,13 @@ msgstr ""
msgid "DinoLab Operating Theater Access Control"
msgstr ""
+#: data/mods/DinoMod/monsters/dinosaur.json
+msgid "dinosaur"
+msgid_plural "dinosaurs"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'dinosaur'}
#: data/mods/DinoMod/monsters/dinosaur.json
msgid "a dinosaur"
msgstr ""
@@ -195309,6 +195598,11 @@ msgstr ""
msgid "RUNES"
msgstr ""
+#. ~ Crafting recipes subcategory of 'ENCHANTED' category
+#: data/mods/Magiclysm/qualities.json
+msgid "ENCHANTING"
+msgstr ""
+
#: data/mods/Magiclysm/qualities.json
msgid "mana focusing"
msgstr ""
@@ -195436,6 +195730,24 @@ msgctxt "start_name"
msgid "Wizard's Retreat Vacation"
msgstr ""
+#: data/mods/Magiclysm/species.json
+msgid "magical beast"
+msgid_plural "magical beasts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "dragon"
+msgid_plural "dragons"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "lizardfolk"
+msgid_plural "lizardfolk"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/start_locations.json
msgid "Wizard's Secret Basement Study"
msgstr ""
@@ -195612,6 +195924,42 @@ msgid ""
"lights."
msgstr ""
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Bless"
+msgstr ""
+
+#. ~ Description for {'str': 'Bless'}
+#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "A spell of blessing that gives you energy and boosts your abilities."
+msgstr ""
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Holy Blade"
+msgstr ""
+
+#. ~ Description for Holy Blade
+#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
+#. Holy Blade'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "This blade of light will cut through any evil it makes contact with!"
+msgstr ""
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Spiritual Armor"
+msgstr ""
+
+#. ~ Description for Spiritual Armor
+#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
+#. of Spiritual Armor'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid ""
+"Evil will not make it through your defenses if your faith is strong enough!"
+msgstr ""
+
#: data/mods/Magiclysm/Spells/biomancer.json
msgid "Cure Light Wounds"
msgstr ""
@@ -197075,17 +197423,6 @@ msgid ""
"harmless."
msgstr ""
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Bless"
-msgstr ""
-
-#. ~ Description for {'str': 'Bless'}
-#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "A spell of blessing that gives you energy and boosts your abilities."
-msgstr ""
-
#: data/mods/Magiclysm/Spells/technomancer.json
#: data/mods/Magiclysm/effects/effects.json
msgid "Invisibility"
@@ -197103,31 +197440,6 @@ msgstr ""
msgid "To the outside world, your body fades away and you cease to exist!"
msgstr ""
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Holy Blade"
-msgstr ""
-
-#. ~ Description for Holy Blade
-#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
-#. Holy Blade'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "This blade of light will cut through any evil it makes contact with!"
-msgstr ""
-
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Spiritual Armor"
-msgstr ""
-
-#. ~ Description for Spiritual Armor
-#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
-#. of Spiritual Armor'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid ""
-"Evil will not make it through your defenses if your faith is strong enough!"
-msgstr ""
-
#: data/mods/Magiclysm/Spells/technomancer.json
msgid "Lamp"
msgstr ""
@@ -199273,6 +199585,18 @@ msgid_plural "sledge hammer +2s"
msgstr[0] ""
msgstr[1] ""
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "heavy sledge hammer +1"
+msgid_plural "heavy sledge hammers +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "heavy sledge hammer +2"
+msgid_plural "heavy sledge hammers +2"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "warhammer +1"
msgid_plural "warhammer +1s"
@@ -199478,12 +199802,14 @@ msgstr[0] ""
msgstr[1] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +1"
msgid_plural "crowbar +1s"
msgstr[0] ""
msgstr[1] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +2"
msgid_plural "crowbar +2s"
msgstr[0] ""
@@ -199538,12 +199864,14 @@ msgstr[0] ""
msgstr[1] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +1"
msgid_plural "hunting knife +1s"
msgstr[0] ""
msgstr[1] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +2"
msgid_plural "hunting knife +2s"
msgstr[0] ""
@@ -199717,6 +200045,18 @@ msgid_plural "dao +2s"
msgstr[0] ""
msgstr[1] ""
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +1"
+msgid_plural "lucerne hammers +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +2"
+msgid_plural "lucerne hammers +2"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "Biomancer spear"
msgid_plural "Biomancer spears"
@@ -200605,6 +200945,78 @@ msgid ""
"turns into the item pictured on the front, in this case a crowbar."
msgstr ""
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +1"
+msgid_plural "bottle jacks +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +2"
+msgid_plural "bottle jacks +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +1"
+msgid_plural "scalpels +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +2"
+msgid_plural "scalpels +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +1"
+msgid_plural "butcher knives +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +2"
+msgid_plural "butcher knives +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +1"
+msgid_plural "meat cleavers +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +2"
+msgid_plural "meat cleavers +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +1"
+msgid_plural "carving knives +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +2"
+msgid_plural "carving knives +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +1"
+msgid_plural "butchering kits +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +2"
+msgid_plural "butchering kits +2"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/items/enchanted_unarmed.json
msgid "cestus +1"
msgid_plural "cestus +1s"
@@ -201679,6 +202091,20 @@ msgid ""
"protective equipment inside."
msgstr ""
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid "Enchanter's Guidebook"
+msgid_plural "copies of Enchanter's Guidebooks"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': "Enchanter's Guidebook", 'str_pl': "copies of
+#. Enchanter's Guidebooks"}
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid ""
+"A hefty textbook on the theory and practice of magically strengthening "
+"weapons and tools."
+msgstr ""
+
#: data/mods/Magiclysm/items/spell_scrolls.json
msgid "Spell Scroll"
msgid_plural "Spell Scrolls"
@@ -202754,6 +203180,12 @@ msgid ""
"much more expensive."
msgstr ""
+#: data/mods/Magiclysm/monsters/demon_spider.json
+msgid "demon spider"
+msgid_plural "demon spiders"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid "demon spiderling"
msgid_plural "demon spiderlings"
@@ -202769,12 +203201,6 @@ msgid ""
"with venom."
msgstr ""
-#: data/mods/Magiclysm/monsters/demon_spider.json
-msgid "demon spider"
-msgid_plural "demon spiders"
-msgstr[0] ""
-msgstr[1] ""
-
#. ~ Description for demon spider
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid ""
@@ -205600,10 +206026,22 @@ msgid ""
"human candy! Are you a real monster? Will you be able to devour it all?\""
msgstr ""
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "marshmallow"
+msgid_plural "marshmallows"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "shlop."
msgstr ""
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "gummy"
+msgid_plural "gummies"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "pop."
msgstr ""
@@ -207925,6 +208363,15 @@ msgid ""
"city size set to 1 and spacing set to 8."
msgstr ""
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "SaveLoad Lua Test"
+msgstr ""
+
+#. ~ Description for SaveLoad Lua Test
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "Mod for testing Lua save/load API."
+msgstr ""
+
#: data/mods/sees_player_hitbutton/modinfo.json
msgid "sees-player icon, HitButton_iso"
msgstr ""
@@ -207947,6 +208394,78 @@ msgid ""
"retrodays tileset."
msgstr ""
+#: data/mods/smart_house_remotes/item.json
+msgid "smart house remote"
+msgid_plural "smart house remotes"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'smart house remote'}
+#: data/mods/smart_house_remotes/item.json
+msgid ""
+"A small remote with lcd display used to control garage doors and window "
+"curtains. Completely useless now, unless you manage to restore power to the"
+" house."
+msgstr ""
+
+#: data/mods/smart_house_remotes/iuse.json
+msgid "Control doors and shutters"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Open curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Close curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Raise garage door"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Lower garage door"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's not enough grid charge.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Low Current At Endpoint"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when player is too far away from the area.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Signal"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's nothing to activate.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Endpoints Available"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "The remote beeps quietly."
+msgstr ""
+
+#. ~ Title of the menu prompting player to select what to activate with the
+#. remote.
+#. Typically it's doors, garage doors or window curtains.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Select endpoint"
+msgstr ""
+
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Smart House Remotes"
+msgstr ""
+
+#. ~ Description for Smart House Remotes
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Add remotes for controlling garage doors and window curtains."
+msgstr ""
+
#: data/mods/speedydex/modinfo.json
msgid "SpeedyDex"
msgstr ""
@@ -209373,6 +209892,14 @@ msgstr ""
msgid "Debug Menu"
msgstr ""
+#: data/raw/keybindings/keybindings.json
+msgid "Lua Console"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Reload Lua Code"
+msgstr ""
+
#: data/raw/keybindings/keybindings.json
msgid "View Scentmap"
msgstr ""
@@ -209928,6 +210455,26 @@ msgstr ""
msgid "Add new page"
msgstr ""
+#: data/raw/keybindings/keybindings.json
+msgid "Edit command"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History up"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History down"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the top"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the bottom"
+msgstr ""
+
#: data/raw/keybindings/messages.json
msgid "Toggle wide display"
msgstr ""
@@ -210086,7 +210633,31 @@ msgstr ""
#: src/achievement.cpp
#, c-format
-msgid "Attain %s skill level of %i (%i/%i)."
+msgid "Kill at least %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Don't kill even a single %s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Kill no more than %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+msgid " (failed)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Attain skill level of %i in %s (%i/%i)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Stay at or below skill level of %i in %s (%i/%i)"
msgstr ""
#: src/achievement.cpp
@@ -215628,6 +216199,30 @@ msgstr ""
msgid "に坂索トし荷測のンおク妙免イロコヤ梅棋厚れ表幌"
msgstr ""
+#: src/catalua_console.cpp
+msgid "Press Ctrl+S to run script, press Esc to cancel"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press arrow keys to navigate text input"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to add new line"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to enter/edit command, Esc to quit"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Up/Down arrows to select from history"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press PgUp/PgDn/Home/End to scroll output window"
+msgstr ""
+
#: src/character.cpp src/debug_menu.cpp src/game.cpp src/iuse.cpp
#: src/npctrade.cpp
msgid "You"
@@ -220429,6 +221024,10 @@ msgstr ""
msgid "Change [b]attery charge"
msgstr ""
+#: src/debug_menu.cpp
+msgid "Export [j]son template"
+msgstr ""
+
#: src/debug_menu.cpp
msgid "Vehicle…"
msgstr ""
@@ -220545,6 +221144,10 @@ msgstr ""
msgid "Player…"
msgstr ""
+#: src/debug_menu.cpp
+msgid "Lua console"
+msgstr ""
+
#: src/debug_menu.cpp
msgid ""
"Debug Functions - Manipulate the fabric of reality!\n"
@@ -221411,6 +222014,10 @@ msgstr ""
msgid "By how much? (in kJ, negative to discharge)"
msgstr ""
+#: src/debug_menu.cpp
+msgid "JSON template written to debug.log"
+msgstr ""
+
#: src/dependency_tree.cpp
msgid "Missing Dependency(ies): "
msgstr ""
@@ -225776,21 +226383,19 @@ msgstr ""
#: src/game.cpp
#, c-format
-msgid "Stepping into that %1$s looks risky, but you enter anyway."
+msgid "Stepping into that %1$s looks risky. %2$s"
msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Run into it if you wish to enter "
-"anyway."
+msgid "But you enter anyway."
msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Crouch and move into it if you wish to"
-" enter anyway."
+msgid "Run into it if you wish to enter anyway."
+msgstr ""
+
+#: src/game.cpp
+msgid "Crouch and move into it if you wish to enter anyway."
msgstr ""
#: src/game.cpp
@@ -233707,6 +234312,11 @@ msgstr ""
msgid "You try to feed the %s some %s, but it vanishes!"
msgstr ""
+#: src/iuse.cpp
+#, c-format
+msgid "You reach for the %s, but it recoils away from you!"
+msgstr ""
+
#: src/iuse.cpp
msgid "You want to feed it the dog food, but it bites your fingers!"
msgstr ""
@@ -239565,6 +240175,11 @@ msgstr ""
msgid "Create World"
msgstr ""
+#. ~ Marker for worlds that need Lua in game builds without Lua
+#: src/main_menu.cpp src/worldfactory.cpp
+msgid "Needs Lua!"
+msgstr ""
+
#: src/main_menu.cpp
msgid "Bugs? Suggestions? Use links in MOTD to report them."
msgstr ""
@@ -239795,6 +240410,17 @@ msgstr ""
msgid "Unable to make graphics directory. Check permissions."
msgstr ""
+#: src/main_menu.cpp
+msgid ""
+"You are running x32 build of the game on a x64 operating system. This means"
+" the game will NOT be able to access all memory, and you may experience "
+"random out-of-memory crashes. Consider obtaining a x64 build of the game to"
+" avoid that, but if you *really* want to be running x32 build of the game "
+"for some reason (or don't have a choice), you may want to lower your memory "
+"usage by disabling tileset, soundpack and mods and increasing autosave "
+"frequency."
+msgstr ""
+
#: src/main_menu.cpp
msgid "Really quit?"
msgstr ""
@@ -239825,6 +240451,13 @@ msgstr ""
msgid "Sorry, something went wrong."
msgstr ""
+#. ~ Error when attempting to load a world whose mods depend on Lua
+#. ~ on game build that doesn't have Lua. %s = world name.
+#: src/main_menu.cpp
+#, c-format
+msgid "%s needs game build with Lua support!"
+msgstr ""
+
#. ~ %s = world name
#: src/main_menu.cpp
#, c-format
@@ -243536,6 +244169,15 @@ msgstr[1] ""
msgid "Mod version"
msgstr ""
+#: src/mod_manager_ui.cpp
+#, c-format
+msgid "%s: API version %s\n"
+msgstr ""
+
+#: src/mod_manager_ui.cpp
+msgid "Needs Lua"
+msgstr ""
+
#: src/mod_manager_ui.cpp
msgid "Mod info path"
msgstr ""
@@ -246493,12 +247135,6 @@ msgstr ""
msgid "Focus trends towards:"
msgstr ""
-#: src/mtype.cpp
-msgid "human"
-msgid_plural "humans"
-msgstr[0] ""
-msgstr[1] ""
-
#: src/mutation.cpp
#, c-format
msgid "Your %s is pushed off!"
@@ -249094,6 +249730,14 @@ msgstr ""
msgid "Messages related to SDL, tiles, tilesets and sound."
msgstr ""
+#: src/options.cpp
+msgid "Lua"
+msgstr ""
+
+#: src/options.cpp
+msgid "Messages from Lua scripts."
+msgstr ""
+
#: src/options.cpp
msgid "General"
msgstr "Γενικές"
@@ -250193,6 +250837,16 @@ msgstr ""
msgid "The amount of time to pause between animation frames in ms."
msgstr ""
+#: src/options.cpp
+msgid "Draw bullets as lines"
+msgstr ""
+
+#: src/options.cpp
+msgid ""
+"If true, bullets are drawn as lines of images, and the animation lasts only "
+"one frame."
+msgstr ""
+
#: src/options.cpp
msgid "Blinking effects speed"
msgstr ""
@@ -250267,7 +250921,7 @@ msgid "Font height"
msgstr ""
#: src/options.cpp
-msgid "Set the font height. Requires restart."
+msgid "Set the font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -250275,7 +250929,7 @@ msgid "Font size"
msgstr ""
#: src/options.cpp
-msgid "Set the font size. Requires restart."
+msgid "Set the font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -250283,7 +250937,7 @@ msgid "Map font width"
msgstr ""
#: src/options.cpp
-msgid "Set the map font width. Requires restart."
+msgid "Set the map font width. Requires restart."
msgstr ""
#: src/options.cpp
@@ -250291,7 +250945,7 @@ msgid "Map font height"
msgstr ""
#: src/options.cpp
-msgid "Set the map font height. Requires restart."
+msgid "Set the map font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -250299,7 +250953,7 @@ msgid "Map font size"
msgstr ""
#: src/options.cpp
-msgid "Set the map font size. Requires restart."
+msgid "Set the map font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -250307,7 +250961,7 @@ msgid "Overmap font width"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font width. Requires restart."
+msgid "Set the overmap font width. Requires restart."
msgstr ""
#: src/options.cpp
@@ -250315,7 +250969,7 @@ msgid "Overmap font height"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font height. Requires restart."
+msgid "Set the overmap font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -250323,7 +250977,7 @@ msgid "Overmap font size"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font size. Requires restart."
+msgid "Set the overmap font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -257872,6 +258526,11 @@ msgstr ""
msgid " [%s]"
msgstr ""
+#. ~ Tag for mods that use Lua in game builds without Lua.
+#: src/worldfactory.cpp
+msgid "(Needs Lua) "
+msgstr ""
+
#: src/worldfactory.cpp
msgid "N/A"
msgstr ""
diff --git a/lang/po/es_AR.po b/lang/po/es_AR.po
index 9724a32815f5..38fbb1df7cda 100644
--- a/lang/po/es_AR.po
+++ b/lang/po/es_AR.po
@@ -1,12 +1,12 @@
#
# Translators:
-# Jean Germain , 2020
+# Jean Germain , 2023
# Coolthulhu , 2023
#
msgid ""
msgstr ""
"Project-Id-Version: cataclysm-bn\n"
-"POT-Creation-Date: 2023-08-03 04:45+0000\n"
+"POT-Creation-Date: 2023-09-15 13:27+0000\n"
"Last-Translator: Coolthulhu , 2023\n"
"Language-Team: Spanish (Argentina) (https://app.transifex.com/bn-team/teams/113585/es_AR/)\n"
"MIME-Version: 1.0\n"
@@ -2237,10 +2237,18 @@ msgstr ""
msgid "[Combat] One Down, Billions to Go…"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] The Undertaker"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Rude Awakening"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] Pacifist"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Decamate"
msgstr ""
@@ -4821,10 +4829,25 @@ msgstr ""
#: data/json/bionics.json data/json/items/bionics.json
msgid ""
"Installed within you is a perpetual generator powered by nonsensoleum. When"
-" activated it's power gen doubles. If you are seeing this, you'd better be "
+" activated its power gen doubles. If you are seeing this, you'd better be "
"debugging."
msgstr ""
+#: data/json/bionics.json data/json/items/bionics.json
+msgid "Debug Fuel Cell CBM"
+msgid_plural "Debug Fuel Cell CBMs"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'Debug Fuel Cell CBM'}
+#: data/json/bionics.json data/json/items/bionics.json
+msgid ""
+"The power of the sun, in the palm of my hand! Installed within you is a "
+"perpetual generator powered by nonsensoleum. When activated its power gen "
+"doubles. If you are seeing this, you'd better be debugging."
+msgstr ""
+
#: data/json/body_parts.json
msgid "appendix"
msgstr "apéndice"
@@ -9160,6 +9183,17 @@ msgstr ""
msgid "You're winded."
msgstr "Te falta el aire."
+#: data/json/effects.json
+msgid "Bronchospasms"
+msgstr ""
+
+#. ~ Description of effect 'Bronchospasms'.
+#: data/json/effects.json
+msgid ""
+"Something in the air is making it harder to breathe, aggravating your "
+"asthma. Increases the chance of suffering an asthma attack."
+msgstr ""
+
#: data/json/effects.json
msgid "The ceiling collapses on you!"
msgstr "¡El techo se te cae encima!"
@@ -10141,9 +10175,9 @@ msgstr ""
#: data/json/field_type.json data/json/monsters/nether.json
msgid "shadow"
msgid_plural "shadows"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sombra"
+msgstr[1] "sombras"
+msgstr[2] "sombras"
#: data/json/field_type.json
msgid "sparks"
@@ -24306,34 +24340,98 @@ msgstr[0] "si ves esto es un bug"
msgstr[1] "si ves esto es un bug"
msgstr[2] "si ves esto es un bug"
+#: data/json/species.json
+msgid "mammal"
+msgid_plural "mammals"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'mammal'}
#: data/json/species.json
msgid "a mammal"
msgstr ""
+#: data/json/species.json
+msgid "amphibian"
+msgid_plural "amphibians"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'amphibian'}
#: data/json/species.json
msgid "an amphibian"
msgstr ""
+#: data/json/species.json
+msgid "bird"
+msgid_plural "birds"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'bird'}
#: data/json/species.json
msgid "a bird"
msgstr ""
+#: data/json/species.json
+msgid "reptile"
+msgid_plural "reptiles"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'reptile'}
#: data/json/species.json
msgid "a reptile"
msgstr ""
+#: data/json/species.json
+msgid "fish"
+msgid_plural "fish"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str_sp': 'fish'}
#: data/json/species.json
msgid "a fish"
msgstr ""
+#: data/json/species.json
+msgid "mutant"
+msgid_plural "mutants"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'mutant'}
#: data/json/species.json
msgid "a mutant"
msgstr ""
+#: data/json/species.json
+msgid "nether creature"
+msgid_plural "nether creatures"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'nether creature'}
#: data/json/species.json
msgid "a nether creature"
msgstr ""
+#: data/json/species.json data/json/monsters/slimes.json
+msgid "blob"
+msgid_plural "blobs"
+msgstr[0] "masa"
+msgstr[1] "masas"
+msgstr[2] "masas"
+
+#. ~ Description for {'str': 'blob'}
#: data/json/species.json
msgid "a blob"
msgstr ""
@@ -24342,30 +24440,86 @@ msgstr ""
msgid "plop."
msgstr ""
+#: data/json/species.json
+msgid "fungus"
+msgid_plural "fungi"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'fungus', 'str_pl': 'fungi'}
#: data/json/species.json
msgid "a fungus"
msgstr "un hongo"
+#: data/json/species.json
+msgid "leech plant"
+msgid_plural "leech plants"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'leech plant'}
#: data/json/species.json
msgid "a leech plant"
msgstr ""
+#: data/json/species.json
+msgid "insect"
+msgid_plural "insects"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'insect'}
#: data/json/species.json
msgid "an insect"
msgstr "un insecto"
+#: data/json/species.json
+msgid "spider"
+msgid_plural "spiders"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'spider'}
#: data/json/species.json
msgid "a spider"
msgstr ""
+#: data/json/species.json
+msgid "plant"
+msgid_plural "plants"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'plant'}
#: data/json/species.json
msgid "a plant"
msgstr ""
+#: data/json/species.json
+msgid "mollusk"
+msgid_plural "mollusks"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'mollusk'}
#: data/json/species.json
msgid "a mollusk"
msgstr ""
+#: data/json/species.json
+msgid "worm"
+msgid_plural "worms"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'worm'}
#: data/json/species.json
msgid "a worm"
msgstr ""
@@ -24374,6 +24528,15 @@ msgstr ""
msgid "rustle."
msgstr ""
+#: data/json/species.json data/json/monsters/zed-classic.json
+#: data/json/npcs/talk_tags.json
+msgid "zombie"
+msgid_plural "zombies"
+msgstr[0] "zombi"
+msgstr[1] "zombis"
+msgstr[2] "zombis"
+
+#. ~ Description for {'str': 'zombie'}
#: data/json/species.json
msgid "a zombie"
msgstr "un zombi"
@@ -24382,6 +24545,14 @@ msgstr "un zombi"
msgid "shuffling."
msgstr ""
+#: data/json/species.json
+msgid "robot"
+msgid_plural "robots"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'robot'}
#: data/json/species.json
msgid "a robot"
msgstr ""
@@ -24390,18 +24561,56 @@ msgstr ""
msgid "mechanical whirring."
msgstr ""
+#: data/json/species.json data/json/npcs/talk_tags.json
+msgid "horror"
+msgid_plural "horrors"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'horror'}
#: data/json/species.json
msgid "a horror"
msgstr ""
+#: data/json/species.json
+msgid "abberation"
+msgid_plural "abberations"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'abberation'}
#: data/json/species.json
msgid "an aberration"
msgstr "una aberración"
+#: data/json/species.json
+msgid "hallucination"
+msgid_plural "hallucinations"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/json/species.json src/mtype.cpp
+msgid "human"
+msgid_plural "humans"
+msgstr[0] "humano"
+msgstr[1] "humanos"
+msgstr[2] "humanos"
+
+#. ~ Description for {'str': 'human'}
#: data/json/species.json
msgid "a human"
msgstr ""
+#: data/json/species.json
+msgid "unknown species"
+msgid_plural "unknown species"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/json/speech.json data/mods/Aftershock/speech.json
#: data/mods/CrazyCataclysm/crazy_speech.json
msgid "\"Hello?\""
@@ -36365,9 +36574,9 @@ msgstr ""
#: data/json/monsters/fungus.json data/mods/Limit Fungal Growth/modinfo.json
msgid "fungal wall"
msgid_plural "fungal walls"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pared fúngica"
+msgstr[1] "paredes fúngicas"
+msgstr[2] "paredes fúngicas"
#. ~ Description for fungal wall
#: data/json/furniture_and_terrain/terrain-fungal.json
@@ -41068,9 +41277,9 @@ msgstr ""
#: data/json/items/battery.json
msgid "ultra-light battery"
msgid_plural "ultra-light batteries"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "batería ultraligera"
+msgstr[1] "baterías ultraligeras"
+msgstr[2] "baterías ultraligeras"
#. ~ Description for {'str': 'ultra-light battery', 'str_pl': 'ultra-light
#. batteries'}
@@ -41102,9 +41311,9 @@ msgstr ""
#: data/json/items/battery.json
msgid "ultra-light disposable battery"
msgid_plural "ultra-light disposable batteries"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "batería desechable ultraligera"
+msgstr[1] "baterías desechables ultraligeras"
+msgstr[2] "baterías desechables ultraligeras"
#. ~ Description for {'str': 'ultra-light disposable battery', 'str_pl':
#. 'ultra-light disposable batteries'}
@@ -41122,9 +41331,9 @@ msgstr ""
#: data/json/items/battery.json
msgid "light battery"
msgid_plural "light batteries"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "batería ligera"
+msgstr[1] "baterías ligeras"
+msgstr[2] "baterías ligeras"
#. ~ Description for {'str': 'light battery', 'str_pl': 'light batteries'}
#: data/json/items/battery.json
@@ -41138,9 +41347,9 @@ msgstr ""
#: data/json/items/battery.json
msgid "light battery (high-capacity)"
msgid_plural "light batteries (high-capacity)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "batería ligera (alta capacidad)"
+msgstr[1] "baterías ligeras (alta capacidad)"
+msgstr[2] "baterías ligeras (alta capacidad)"
#. ~ Description for {'str': 'light battery (high-capacity)', 'str_pl': 'light
#. batteries (high-capacity)'}
@@ -41172,9 +41381,9 @@ msgstr ""
#: data/json/items/battery.json
msgid "light disposable battery"
msgid_plural "light disposable batteries"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "batería desechable ligera"
+msgstr[1] "baterías desechables ligeras"
+msgstr[2] "baterías desechables ligeras"
#. ~ Description for {'str': 'light disposable battery', 'str_pl': 'light
#. disposable batteries'}
@@ -52257,9 +52466,9 @@ msgstr ""
#: data/json/items/tool_armor.json
msgid "electric guitar"
msgid_plural "electric guitars"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "guitarra eléctrica"
+msgstr[1] "guitarras eléctricas"
+msgstr[2] "guitarras eléctricas"
#. ~ Description for {'str': 'electric guitar'}
#: data/json/items/tool_armor.json
@@ -52685,9 +52894,9 @@ msgstr ""
#: data/json/items/toolmod.json
msgid "light battery mod"
msgid_plural "light battery mods"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "modificador de batería ligera"
+msgstr[1] "modificadores de baterías ligeras"
+msgstr[2] "modificadores de baterías ligeras"
#. ~ Description for {'str': 'light battery mod'}
#: data/json/items/toolmod.json
@@ -52794,12 +53003,9 @@ msgstr[2] "20x66mm dardos perforantes, casera"
#. flechettes, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless flechette rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless flechette rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
-"Son réplicas truchas de las balas de Rivtech 20x66mm sin casquillo, con una "
-"carga de dardos perforantes. Al no tener casquillo, no pueden ser desarmadas"
-" ni recargadas."
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm buckshot, handmade"
@@ -52811,11 +53017,9 @@ msgstr[2] "perdigones grandes 20x66mm, casero"
#. ~ Description for {'str': '20x66mm buckshot, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless buckshot rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless buckshot rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
-"Son réplicas truchas de las balas de Rivtech 20x66mm sin casquillo. Al no "
-"tener casquillo, no pueden ser desarmadas ni recargadas."
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm slug, handmade"
@@ -52828,12 +53032,9 @@ msgstr[2] "postas 20x66mm, casera"
#. slugs, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless solid projectile "
-"rounds. Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless solid projectile rounds. "
+"Being caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
-"Son réplicas truchas de las balas de Rivtech 20x66mm sin casquillo, de "
-"proyectil sólido. Al no tener casquillo, no pueden ser desarmadas ni "
-"recargadas."
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm explosive"
@@ -54682,20 +54883,60 @@ msgstr ""
"los movimientos de las tropas."
#: data/json/items/ammo/8x40mm.json
-msgid "bootleg 8x40mm JHP"
-msgid_plural "bootleg 8x40mm JHPs"
-msgstr[0] "8x40mm JHP trucho"
-msgstr[1] "8x40mm JHP truchos"
-msgstr[2] "8x40mm JHP truchos"
+msgid "8x40mm JHP, handmade"
+msgid_plural "8x40mm JHP, handmades"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': '8x40mm JHP, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm JHP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm caseless, handmade"
+msgid_plural "8x40mm caseless, handmades"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
-#. ~ Description for {'str': 'bootleg 8x40mm JHP'}
+#. ~ Description for {'str': '8x40mm caseless, handmade'}
#: data/json/items/ammo/8x40mm.json
msgid ""
-"Bootleg duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
+"Handmade duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
"rounds, these cannot be disassembled or reloaded."
msgstr ""
-"Son unas réplicas truchas de las balas 8x40mm sin casquillo de Rivtech. Al "
-"no tener casquillo, no pueden ser desarmadas ni recargadas."
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm HVP, handmade"
+msgid_plural "8x40mm HVP, handmades"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': '8x40mm HVP, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm HVP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm tracer, handmade"
+msgid_plural "8x40mm tracer, handmades"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': '8x40mm tracer, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm tracer rounds. Being caseless rounds,"
+" these cannot be disassembled or reloaded."
+msgstr ""
#. ~ Description for {'str_sp': '8x40mm caseless'}
#: data/json/items/ammo/8x40mm.json
@@ -55119,49 +55360,49 @@ msgstr ""
" daño."
#: data/json/items/ammo/rpg.json
-msgid "PG-7VL 93mm rocket"
-msgid_plural "PG-7VL 93mm rockets"
-msgstr[0] "misil PG-7VL 93mm"
-msgstr[1] "misiles PG-7VL 93mm"
-msgstr[2] "misiles PG-7VL 93mm"
+msgid "PG-7VL RPG-7 rocket"
+msgid_plural "PG-7VL RPG-7 rockets"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
-#. ~ Description for PG-7VL 93mm rocket
+#. ~ Description for PG-7VL RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "93mm single-stage high-explosive ammunition for the RPG-7."
msgstr "Es munición 93mm monoetapa de alta explosividad para el RPG-7."
#: data/json/items/ammo/rpg.json
-msgid "PG-7VR 64mm/105mm rocket"
-msgid_plural "PG-7VR 64mm/105mm rockets"
-msgstr[0] "misil PG-7VR 64mm/105mm"
-msgstr[1] "misiles PG-7VR 64mm/105mm"
-msgstr[2] "misiles PG-7VR 64mm/105mm"
+msgid "PG-7VR RPG-7 rocket"
+msgid_plural "PG-7VR RPG-7 rockets"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
-#. ~ Description for PG-7VR 64mm/105mm rocket
+#. ~ Description for PG-7VR RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "64mm/105mm high-explosive tandem ammunition for the RPG-7."
msgstr "Es munición 64mm/105mm de alta explosividad para el RPG-7."
#: data/json/items/ammo/rpg.json
-msgid "TBG-7V 105mm rocket"
-msgid_plural "TBG-7V 105mm rockets"
-msgstr[0] "misil TBG-7V 105mm"
-msgstr[1] "misiles TBG-7V 105mm"
-msgstr[2] "misiles TBG-7V 105mm"
+msgid "TBG-7V RPG-7 rocket"
+msgid_plural "TBG-7V RPG-7 rockets"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
-#. ~ Description for TBG-7V 105mm rocket
+#. ~ Description for TBG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "105mm thermobaric ammunition for the RPG-7."
msgstr "Es munición termobárica 105mm para el RPG-7."
#: data/json/items/ammo/rpg.json
-msgid "OG-7V 40mm rocket"
-msgid_plural "OG-7V 40mm rockets"
-msgstr[0] "misil OG-7V 40mm"
-msgstr[1] "misiles OG-7V 40mm"
-msgstr[2] "misiles OG-7V 40mm"
+msgid "OG-7V RPG-7 rocket"
+msgid_plural "OG-7V RPG-7 rockets"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
-#. ~ Description for OG-7V 40mm rocket
+#. ~ Description for OG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid ""
"40mm high-explosive fragmentation antipersonnel ammunition for the RPG-7."
@@ -81800,6 +82041,54 @@ msgstr ""
"Es huevo al escabeche. Bastante salado, pero tiene buen sabor y dura mucho "
"tiempo."
+#: data/json/items/comestibles/egg.json
+msgid "salsify omelette"
+msgid_plural "salsify omelette"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str_sp': 'salsify omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A salsify omelette."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "wild veggetable omelette"
+msgid_plural "wild veggetable omelette"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str_sp': 'wild veggetable omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with wild vegetables."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "mushroom omelette"
+msgid_plural "mushroom omelette"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str_sp': 'mushroom omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with mushrooms."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "spanish omelette"
+msgid_plural "spanish omelette"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str_sp': 'spanish omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A spanish omelette."
+msgstr ""
+
#: data/json/items/comestibles/frozen.json
msgid "milkshake"
msgid_plural "milkshakes"
@@ -83086,6 +83375,7 @@ msgstr ""
#: data/json/items/comestibles/junkfood.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cookie"
msgid_plural "cookies"
msgstr[0] "masita"
@@ -85889,6 +86179,7 @@ msgstr ""
#: data/json/items/comestibles/med.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "chewing gum"
msgid_plural "chewing gum"
msgstr[0] "chicle"
@@ -93398,6 +93689,7 @@ msgstr ""
#: data/json/items/comestibles/wheat.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cracker"
msgid_plural "crackers"
msgstr[0] "galletita"
@@ -94105,9 +94397,9 @@ msgstr ""
#: data/json/items/corpses/inactive_bots.json
msgid "inactive prototype cyborg"
msgid_plural "inactive prototype cyborgs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "prototipo de ciborg inactivo"
+msgstr[1] "prototipos de ciborg inactivos"
+msgstr[2] "prototipos de ciborg inactivos"
#. ~ Use action friendly_msg for {'str': 'inactive prototype cyborg'}.
#: data/json/items/corpses/inactive_bots.json
@@ -94784,9 +95076,9 @@ msgstr ""
#: data/json/items/generic/casing.json
msgid "unused .22 casing"
msgid_plural "unused .22 casings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "casquillo nuevo .22"
+msgstr[1] "casquillos nuevos .22"
+msgstr[2] "casquillos nuevos .22"
#. ~ Description for {'str': 'unused .22 casing'}
#: data/json/items/generic/casing.json
@@ -94810,9 +95102,9 @@ msgstr "Es una vaina servida de una bala calibre .30-06."
#: data/json/items/generic/casing.json
msgid ".270 Winchester casing"
msgid_plural ".270 Winchester casings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "casquillo .270 Winchester"
+msgstr[1] "casquillos .270 Winchester"
+msgstr[2] "casquillos .270 Winchester"
#. ~ Description for {'str': '.270 Winchester casing'}
#: data/json/items/generic/casing.json
@@ -94882,9 +95174,9 @@ msgstr "Es una vaina servida de una bala calibre .38 Special."
#: data/json/items/generic/casing.json
msgid ".38 Super casing"
msgid_plural ".38 Super casings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "casquillo .38 Super"
+msgstr[1] "casquillos .38 Super"
+msgstr[2] "casquillos .38 Super"
#. ~ Description for {'str': '.38 Super casing'}
#: data/json/items/generic/casing.json
@@ -94906,9 +95198,9 @@ msgstr "Es una vaina servida de una bala calibre .40 S&W."
#: data/json/items/generic/casing.json
msgid "10mm Auto casing"
msgid_plural "10mm Auto casings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "casquillo 10mm Auto"
+msgstr[1] "casquillos 10mm Auto"
+msgstr[2] "casquillos 10mm Auto"
#. ~ Description for {'str': '10mm Auto casing'}
#: data/json/items/generic/casing.json
@@ -94918,9 +95210,9 @@ msgstr ""
#: data/json/items/generic/casing.json
msgid "40x46mm M212 casing"
msgid_plural "40x46mm M212 casings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "casquillo 40x46mm M212"
+msgstr[1] "casquillos 40x46mm M212"
+msgstr[2] "casquillos 40x46mm M212"
#. ~ Description for {'str': '40x46mm M212 casing'}
#: data/json/items/generic/casing.json
@@ -94933,9 +95225,9 @@ msgstr ""
#: data/json/items/generic/casing.json
msgid "40x46mm M118 casing"
msgid_plural "40x46mm M118 casings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "casquillo 40x46mm M118"
+msgstr[1] "casquillos 40x46mm M118"
+msgstr[2] "casquillos 40x46mm M118"
#. ~ Description for {'str': '40x46mm M118 casing'}
#: data/json/items/generic/casing.json
@@ -94947,9 +95239,9 @@ msgstr ""
#: data/json/items/generic/casing.json
msgid "40x46mm M199 casing"
msgid_plural "40x46mm M199 casings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "casquillo 40x46mm M199"
+msgstr[1] "casquillos 40x46mm M199"
+msgstr[2] "casquillos 40x46mm M199"
#. ~ Description for {'str': '40x46mm M199 casing'}
#: data/json/items/generic/casing.json
@@ -94961,9 +95253,9 @@ msgstr ""
#: data/json/items/generic/casing.json
msgid "40x46mm M195 casing"
msgid_plural "40x46mm M195 casings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "casquillo 40x46mm M195"
+msgstr[1] "casquillos 40x46mm M195"
+msgstr[2] "casquillos 40x46mm M195"
#. ~ Description for {'str': '40x46mm M195 casing'}
#: data/json/items/generic/casing.json
@@ -94976,9 +95268,9 @@ msgstr ""
#: data/json/items/generic/casing.json
msgid "40x53mm M169 casing"
msgid_plural "40x53mm M169 casings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "casquillo 40x53mm M169"
+msgstr[1] "casquillos 40x53mm M169"
+msgstr[2] "casquillos 40x53mm M169"
#. ~ Description for {'str': '40x53mm M169 casing'}
#: data/json/items/generic/casing.json
@@ -95024,9 +95316,9 @@ msgstr "Es una vaina servida de una bala calibre .45 ACP."
#: data/json/items/generic/casing.json
msgid ".45 Colt casing"
msgid_plural ".45 Colt casings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "casquillo .45 Colt"
+msgstr[1] "casquillos .45 Colt"
+msgstr[2] "casquillos .45 Colt"
#. ~ Description for {'str': '.45 Colt casing'}
#: data/json/items/generic/casing.json
@@ -95036,9 +95328,9 @@ msgstr ""
#: data/json/items/generic/casing.json
msgid ".45-70 casing"
msgid_plural ".45-70 casings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "casquillo .45-70"
+msgstr[1] "casquillos .45-70"
+msgstr[2] "casquillos .45-70"
#. ~ Description for {'str': '.45-70 casing'}
#: data/json/items/generic/casing.json
@@ -95060,9 +95352,9 @@ msgstr "Es una vaina servida de una bala calibre 4.6x30mm."
#: data/json/items/generic/casing.json
msgid ".460 Rowland casing"
msgid_plural ".460 Rowland casings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "casquillo .460 Rowland"
+msgstr[1] "casquillos .460 Rowland"
+msgstr[2] "casquillos .460 Rowland"
#. ~ Description for {'str': '.460 Rowland casing'}
#: data/json/items/generic/casing.json
@@ -95216,9 +95508,9 @@ msgstr "Es una vaina servida de una bala calibre .357 SIG."
#: data/json/items/generic/casing.json
msgid ".357 magnum casing"
msgid_plural ".357 magnum casings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "casquillo magnum .357"
+msgstr[1] "casquillos magnum .357"
+msgstr[2] "casquillos magnum .357"
#. ~ Description for {'str': '.357 magnum casing'}
#: data/json/items/generic/casing.json
@@ -95240,9 +95532,9 @@ msgstr "Es una vaina servida de una bala calibre 9x18mm."
#: data/json/items/generic/casing.json
msgid ".380 ACP casing"
msgid_plural ".380 ACP casings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "casquillo .380 ACP"
+msgstr[1] "casquillos .380 ACP"
+msgstr[2] "casquillos .380 ACP"
#. ~ Description for {'str': '.380 ACP casing'}
#: data/json/items/generic/casing.json
@@ -95290,9 +95582,9 @@ msgstr ""
#: data/json/items/generic/casing.json
msgid ".300BLK casing"
msgid_plural ".300BLK casings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "casquillo .300BLK"
+msgstr[1] "casquillos .300BLK"
+msgstr[2] "casquillos .300BLK"
#. ~ Description for {'str': '.300BLK casing'}
#: data/json/items/generic/casing.json
@@ -95541,9 +95833,9 @@ msgstr ""
#: data/json/items/generic/dining_kitchen.json
msgid "tin cup"
msgid_plural "tin cups"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "taza de lata"
+msgstr[1] "tazas de lata"
+msgstr[2] "tazas de lata"
#. ~ Description for {'str': 'tin cup'}
#: data/json/items/generic/dining_kitchen.json
@@ -95569,9 +95861,9 @@ msgstr ""
#: data/json/items/generic/dining_kitchen.json
msgid "drinking glass"
msgid_plural "drinking glasses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "vaso"
+msgstr[1] "vasos"
+msgstr[2] "vasos"
#. ~ Description for {'str': 'drinking glass', 'str_pl': 'drinking glasses'}
#: data/json/items/generic/dining_kitchen.json
@@ -95812,9 +96104,9 @@ msgstr ""
#: data/json/items/generic/dining_kitchen.json
msgid "cast-iron frying pan"
msgid_plural "cast-iron frying pans"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sartén de hierro fundido"
+msgstr[1] "sartenes de hierro fundido"
+msgstr[2] "sartenes de hierro fundido"
#. ~ Description for {'str': 'cast-iron frying pan'}
#: data/json/items/generic/dining_kitchen.json
@@ -95827,9 +96119,9 @@ msgstr ""
#: data/json/items/generic/dining_kitchen.json
msgid "steel frying pan"
msgid_plural "steel frying pans"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sartén de acero"
+msgstr[1] "sartenes de acero"
+msgstr[2] "sartenes de acero"
#. ~ Description for {'str': 'steel frying pan'}
#: data/json/items/generic/dining_kitchen.json
@@ -95842,9 +96134,9 @@ msgstr ""
#: data/json/items/generic/dining_kitchen.json
msgid "copper frying pan"
msgid_plural "copper frying pans"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sartén de cobre"
+msgstr[1] "sartenes de cobre"
+msgstr[2] "sartenes de cobre"
#. ~ Description for {'str': 'copper frying pan'}
#: data/json/items/generic/dining_kitchen.json
@@ -96227,9 +96519,9 @@ msgstr ""
#: data/json/items/generic/string.json
msgid "short string"
msgid_plural "short strings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cuerda corta"
+msgstr[1] "cuerdas cortas"
+msgstr[2] "cuerdas cortas"
#. ~ Description for {'str': 'short string'}
#: data/json/items/generic/string.json
@@ -102262,9 +102554,9 @@ msgstr ""
#: data/json/items/magazine/12mm.json
msgid "H&K G80 magazine"
msgid_plural "H&K G80 magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Cargador H&K G80"
+msgstr[1] "Cargadores H&K G80"
+msgstr[2] "Cargadores H&K G80"
#. ~ Description for {'str': 'H&K G80 magazine'}
#: data/json/items/magazine/12mm.json
@@ -102402,9 +102694,9 @@ msgstr ""
#: data/json/items/magazine/22.json
msgid "S&W 22A magazine"
msgid_plural "S&W 22A magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cargador S&W 22A"
+msgstr[1] "cargadores S&W 22A"
+msgstr[2] "cargadores S&W 22A"
#. ~ Description for {'str': 'S&W 22A magazine'}
#: data/json/items/magazine/22.json
@@ -103443,9 +103735,9 @@ msgstr ""
#: data/json/items/magazine/40.json
msgid "Glock 22 magazine"
msgid_plural "Glock 22 magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cargador Glock 22"
+msgstr[1] "cargadores Glock 22"
+msgstr[2] "cargadores Glock 22"
#. ~ Description for {'str': 'Glock 22 magazine'}
#: data/json/items/magazine/40.json
@@ -103457,9 +103749,9 @@ msgstr ""
#: data/json/items/magazine/40.json
msgid "Px4 .40 magazine"
msgid_plural "Px4 .40 magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cargador Px4 .40"
+msgstr[1] "cargadores Px4 .40"
+msgstr[2] "cargadores Px4 .40"
#. ~ Description for {'str': 'Px4 .40 magazine'}
#: data/json/items/magazine/40.json
@@ -103470,9 +103762,9 @@ msgstr ""
#: data/json/items/magazine/40.json
msgid "SIG Pro .40 magazine"
msgid_plural "SIG Pro .40 magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cargador SIG Pro .40"
+msgstr[1] "cargadores SIG Pro .40"
+msgstr[2] "cargadores SIG Pro .40"
#. ~ Description for {'str': 'SIG Pro .40 magazine'}
#: data/json/items/magazine/40.json
@@ -103559,9 +103851,9 @@ msgstr ""
#: data/mods/Generic_Guns/vehicles/ammo_redefine_hacks/temp_magazine_json_load_hack.json
msgid "grenade belt"
msgid_plural "grenade belts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cinturón de granadas"
+msgstr[1] "cinturones de granadas"
+msgstr[2] "cinturones de granadas"
#. ~ Description for {'str': 'grenade belt'}
#: data/json/items/magazine/40mm.json
@@ -103634,9 +103926,9 @@ msgstr ""
#: data/json/items/magazine/45.json
msgid "MAC-10 magazine"
msgid_plural "MAC-10 magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cargador MAC-10"
+msgstr[1] "cargadores MAC-10"
+msgstr[2] "cargadores MAC-10"
#. ~ Description for {'str': 'MAC-10 magazine'}
#: data/json/items/magazine/45.json
@@ -103733,9 +104025,9 @@ msgstr ""
#: data/json/items/magazine/45.json
msgid "UMP45 magazine"
msgid_plural "UMP45 magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cargador UMP45"
+msgstr[1] "cargadores UMP45"
+msgstr[2] "cargadores UMP45"
#. ~ Description for {'str': 'UMP45 magazine'}
#: data/json/items/magazine/45.json
@@ -103760,9 +104052,9 @@ msgstr ""
#: data/json/items/magazine/45.json
msgid "USP .45 magazine"
msgid_plural "USP .45 magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cargador USP .45"
+msgstr[1] "cargadores USP .45"
+msgstr[2] "cargadores USP .45"
#. ~ Description for {'str': 'USP .45 magazine'}
#: data/json/items/magazine/45.json
@@ -103859,9 +104151,9 @@ msgstr ""
#: data/json/items/magazine/46.json
msgid "H&K 4.6mm magazine"
msgid_plural "H&K 4.6mm magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cargador H&K 4.6mm"
+msgstr[1] "cargadores H&K 4.6mm"
+msgstr[2] "cargadores H&K 4.6mm"
#. ~ Description for {'str': 'H&K 4.6mm magazine'}
#: data/json/items/magazine/46.json
@@ -103875,9 +104167,9 @@ msgstr ""
#: data/json/items/magazine/460.json
msgid "M1911 extended magazine"
msgid_plural "M1911 extended magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cargador M1911 extendido"
+msgstr[1] "cargadores M1911 extendido"
+msgstr[2] "cargadores M1911 extendido"
#. ~ Description for {'str': 'M1911 extended magazine'}
#: data/json/items/magazine/460.json
@@ -103887,9 +104179,9 @@ msgstr "Es un cargador extendido de 10 balas para usar en la pistola M1911."
#: data/json/items/magazine/460.json
msgid "M1911 magazine"
msgid_plural "M1911 magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cargador M1911"
+msgstr[1] "cargadores M1911"
+msgstr[2] "cargadores M1911"
#. ~ Description for {'str': 'M1911 magazine'}
#: data/json/items/magazine/460.json
@@ -103921,9 +104213,9 @@ msgstr ""
#: data/json/items/magazine/50.json
msgid "AS50 magazine"
msgid_plural "AS50 magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cargador AS50"
+msgstr[1] "cargadores AS50"
+msgstr[2] "cargadores AS50"
#. ~ Description for {'str': 'AS50 magazine'}
#: data/json/items/magazine/50.json
@@ -103933,9 +104225,9 @@ msgstr ""
#: data/json/items/magazine/50.json
msgid "TAC-50 magazine"
msgid_plural "TAC-50 magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cargador TAC-50"
+msgstr[1] "cargadores TAC-50"
+msgstr[2] "cargadores TAC-50"
#. ~ Description for {'str': 'TAC-50 magazine'}
#: data/json/items/magazine/50.json
@@ -103959,9 +104251,9 @@ msgstr ""
#: data/json/items/magazine/545x39.json
msgid "AK-74M magazine"
msgid_plural "AK-74M magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cargador AK-74M"
+msgstr[1] "cargadores AK-74M"
+msgstr[2] "cargadores AK-74M"
#. ~ Description for {'str': 'AK-74M magazine'}
#: data/json/items/magazine/545x39.json
@@ -103991,9 +104283,9 @@ msgstr ""
#: data/json/items/magazine/57.json
msgid "FN-57 magazine"
msgid_plural "FN-57 magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cargador FN-57"
+msgstr[1] "cargadores FN-57"
+msgstr[2] "cargadores FN-57"
#. ~ Description for {'str': 'FN-57 magazine'}
#: data/json/items/magazine/57.json
@@ -104003,9 +104295,9 @@ msgstr "Es un cargador de capacidad estándar para usar en el FN Five-Seven."
#: data/json/items/magazine/57.json
msgid "FN-P90 magazine"
msgid_plural "FN-P90 magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cargador FN-P90"
+msgstr[1] "cargadores FN-P90"
+msgstr[2] "cargadores FN-P90"
#. ~ Description for {'str': 'FN-P90 magazine'}
#: data/json/items/magazine/57.json
@@ -104180,9 +104472,9 @@ msgstr "Es un cargador estándar de 8 balas para la Tokarev TT-33."
#: data/json/items/magazine/8x40mm.json
msgid "RMGB100 8x40mm magazine"
msgid_plural "RMGB100 8x40mm magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cargador RMGB100 8x40mm"
+msgstr[1] "cargadores RMGB100 8x40mm"
+msgstr[2] "cargadores RMGB100 8x40mm"
#. ~ Description for {'str': 'RMGB100 8x40mm magazine'}
#: data/json/items/magazine/8x40mm.json
@@ -104315,9 +104607,9 @@ msgstr ""
#: data/json/items/magazine/9mm.json
msgid "Glock magazine"
msgid_plural "Glock magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cargador Glock"
+msgstr[1] "cargadores Glock"
+msgstr[2] "cargadores Glock"
#. ~ Description for {'str': 'Glock magazine'}
#: data/json/items/magazine/9mm.json
@@ -104427,9 +104719,9 @@ msgstr ""
#: data/json/items/magazine/9mm.json
msgid "MP5 magazine"
msgid_plural "MP5 magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cargador MP5"
+msgstr[1] "cargadores MP5"
+msgstr[2] "cargadores MP5"
#. ~ Description for {'str': 'MP5 magazine'}
#: data/json/items/magazine/9mm.json
@@ -104514,9 +104806,9 @@ msgstr ""
#: data/json/items/magazine/9mm.json
msgid "UZI magazine"
msgid_plural "UZI magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cargador UZI"
+msgstr[1] "cargadores UZI"
+msgstr[2] "cargadores UZI"
#. ~ Description for {'str': 'UZI magazine'}
#: data/json/items/magazine/9mm.json
@@ -104696,9 +104988,9 @@ msgstr ""
#: data/json/items/magazine/9mm.json
msgid "CCP magazine"
msgid_plural "CCP magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cargador CCP"
+msgstr[1] "cargadores CCP"
+msgstr[2] "cargadores CCP"
#. ~ Description for {'str': 'CCP magazine'}
#: data/json/items/magazine/9mm.json
@@ -106456,6 +106748,22 @@ msgid ""
"likely evolved."
msgstr ""
+#: data/json/items/melee/spears_and_polearms.json
+msgid "makeshift glaive"
+msgid_plural "makeshift glaives"
+msgstr[0] "guja improvisada"
+msgstr[1] "gujas improvisadas"
+msgstr[2] "gujas improvisadas"
+
+#. ~ Description for {'str': 'makeshift glaive'}
+#: data/json/items/melee/spears_and_polearms.json
+msgid ""
+"This is a large blade attached to a long stick. It could do a considerable "
+"amount of damage."
+msgstr ""
+"Es una gran cuchilla unida a un palo largo. Puede causar un daño "
+"considerable."
+
#: data/json/items/melee/spears_and_polearms.json
msgid "glaive"
msgid_plural "glaives"
@@ -106600,9 +106908,9 @@ msgstr ""
msgctxt "weapon"
msgid "pike"
msgid_plural "pikes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lucio"
+msgstr[1] "lucios"
+msgstr[2] "lucios"
#. ~ Description for {'ctxt': 'weapon', 'str': 'pike'}
#: data/json/items/melee/spears_and_polearms.json
@@ -109164,9 +109472,9 @@ msgstr ""
msgctxt "weapon"
msgid "sling"
msgid_plural "slings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "honda"
+msgstr[1] "hondas"
+msgstr[2] "hondas"
#: data/json/items/ranged/slings.json
msgid ""
@@ -109373,9 +109681,9 @@ msgstr ""
#: data/json/items/ranged/throwing.json
msgid "frisbee"
msgid_plural "frisbees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "frisbee"
+msgstr[1] "frisbees"
+msgstr[2] "frisbees"
#. ~ Description for {'str': 'frisbee'}
#: data/json/items/ranged/throwing.json
@@ -109401,9 +109709,9 @@ msgstr ""
#: data/json/items/ranged/throwing.json
msgid "lawn dart"
msgid_plural "lawn darts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "dardo de plástico"
+msgstr[1] "dardos de plástico"
+msgstr[2] "dardos de plástico"
#. ~ Description for {'str': 'lawn dart'}
#: data/json/items/ranged/throwing.json
@@ -109413,9 +109721,9 @@ msgstr "Un dardo largo de plástico para deportes al aire libre."
#: data/json/items/ranged/throwing.json
msgid "throwing axe"
msgid_plural "throwing axes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hacha arrojadiza"
+msgstr[1] "hachas arrojadizas"
+msgstr[2] "hachas arrojadizas"
#. ~ Description for {'str': 'throwing axe'}
#: data/json/items/ranged/throwing.json
@@ -110798,9 +111106,9 @@ msgstr ""
#: data/json/items/resources/wood.json src/crafting_gui.cpp
msgid "plank"
msgid_plural "planks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tablón"
+msgstr[1] "tablones"
+msgstr[2] "tablones"
#. ~ Description for {'str': 'plank'}
#: data/json/items/resources/wood.json
@@ -113642,7 +113950,7 @@ msgstr "Encendés el encendedor de un golpe."
#. ~ Use action need_charges_msg for {'str': 'refillable lighter'}.
#: data/json/items/tool/fire.json src/activity_actor.cpp src/explosion.cpp
-#: src/gates.cpp
+#: src/gates.cpp src/iuse.cpp
msgid "Nothing happens."
msgstr "No pasa nada."
@@ -115783,22 +116091,6 @@ msgid ""
"from uncertain sources like a river may be dirty."
msgstr ""
-#: data/json/items/tool/misc.json
-msgid "makeshift glaive"
-msgid_plural "makeshift glaives"
-msgstr[0] "guja improvisada"
-msgstr[1] "gujas improvisadas"
-msgstr[2] "gujas improvisadas"
-
-#. ~ Description for {'str': 'makeshift glaive'}
-#: data/json/items/tool/misc.json
-msgid ""
-"This is a large blade attached to a long stick. It could do a considerable "
-"amount of damage."
-msgstr ""
-"Es una gran cuchilla unida a un palo largo. Puede causar un daño "
-"considerable."
-
#: data/json/items/tool/misc.json
msgid "mind splicer kit"
msgid_plural "mind splicer kits"
@@ -117473,9 +117765,9 @@ msgstr ""
#: data/json/items/tool/toiletries.json
msgid "scrub brush"
msgid_plural "scrub brushes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cepillo de fregar"
+msgstr[1] "cepillos de fregar"
+msgstr[2] "cepillos de fregar"
#. ~ Description for {'str': 'scrub brush', 'str_pl': 'scrub brushes'}
#: data/json/items/tool/toiletries.json
@@ -117564,9 +117856,9 @@ msgstr ""
#: data/json/items/tool/toiletries.json
msgid "sponge"
msgid_plural "sponges"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "esponja"
+msgstr[1] "esponjas"
+msgstr[2] "esponjas"
#. ~ Description for {'str': 'sponge'}
#: data/json/items/tool/toiletries.json
@@ -118506,9 +118798,9 @@ msgstr ""
#: data/json/items/tool/workshop.json
msgid "misc repair kit"
msgid_plural "misc repair kits"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "kit de reparación misceláneo"
+msgstr[1] "kits de reparación misceláneos"
+msgstr[2] "kits de reparación misceláneos"
#. ~ Description for {'str': 'misc repair kit'}
#: data/json/items/tool/workshop.json
@@ -118769,9 +119061,9 @@ msgstr ""
#: data/json/items/tool/workshop.json
msgid "extended toolset"
msgid_plural "extended toolsets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "conjunto de herramientas extendida"
+msgstr[1] "conjuntos de herramientas extendidas"
+msgstr[2] "conjuntos de herramientas extendidas"
#. ~ Description for {'str': 'extended toolset'}
#: data/json/items/tool/workshop.json
@@ -118783,9 +119075,9 @@ msgstr ""
#: data/json/items/tool/workshop.json
msgid "arc welder"
msgid_plural "arc welders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "soldador de arco"
+msgstr[1] "soldadores de arco"
+msgstr[2] "soldadores de arco"
#. ~ Description for {'str': 'arc welder'}
#: data/json/items/tool/workshop.json
@@ -118797,9 +119089,9 @@ msgstr ""
#: data/json/items/tool/workshop.json
msgid "makeshift arc welder"
msgid_plural "makeshift arc welders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "soldador de arco improvisado"
+msgstr[1] "soldadores de arco improvisados"
+msgstr[2] "soldadores de arco improvisados"
#. ~ Description for {'str': 'makeshift arc welder'}
#: data/json/items/tool/workshop.json
@@ -121464,9 +121756,9 @@ msgstr ""
#: data/json/items/vehicle/wheel.json data/json/vehicleparts/wheel.json
msgid "wheel"
msgid_plural "wheels"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rueda"
+msgstr[1] "ruedas"
+msgstr[2] "ruedas"
#. ~ Description for {'str': 'wheel'}
#: data/json/items/vehicle/wheel.json
@@ -121492,9 +121784,9 @@ msgstr ""
#: data/json/items/vehicle/wheel.json data/json/vehicleparts/wheel.json
msgid "armored wheel"
msgid_plural "armored wheels"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rueda blindada"
+msgstr[1] "ruedas blindadas"
+msgstr[2] "ruedas blindadas"
#. ~ Description for {'str': 'armored wheel'}
#: data/json/items/vehicle/wheel.json
@@ -121516,9 +121808,9 @@ msgstr "Una rueda chica como la de una carretilla normal de jardinería."
#: data/json/items/vehicle/wheel.json data/json/vehicleparts/wheel.json
msgid "bicycle wheel"
msgid_plural "bicycle wheels"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rueda de bicicleta"
+msgstr[1] "ruedas de bicicleta"
+msgstr[2] "ruedas de bicicleta"
#. ~ Description for {'str': 'bicycle wheel'}
#: data/json/items/vehicle/wheel.json
@@ -121566,9 +121858,9 @@ msgstr ""
#: data/json/items/vehicle/wheel.json data/json/obsoletion/uncategorized.json
msgid "metal wheel"
msgid_plural "metal wheels"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rueda de metal"
+msgstr[1] "ruedas de metal"
+msgstr[2] "ruedas de metal"
#. ~ Description for {'str': 'metal wheel'}
#: data/json/items/vehicle/wheel.json
@@ -121607,9 +121899,9 @@ msgstr ""
#: data/json/items/vehicle/wheel.json data/json/vehicleparts/wheel.json
msgid "motorbike wheel"
msgid_plural "motorbike wheels"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rueda de moto"
+msgstr[1] "ruedas de moto"
+msgstr[2] "ruedas de moto"
#. ~ Description for {'str': 'motorbike wheel'}
#: data/json/items/vehicle/wheel.json
@@ -121633,9 +121925,9 @@ msgstr ""
#: data/json/items/vehicle/wheel.json
msgid "large steel drum"
msgid_plural "large steel drums"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tambor grande de acero"
+msgstr[1] "tambores grande de acero"
+msgstr[2] "tambores grande de acero"
#. ~ Description for {'str': 'large steel drum'}
#: data/json/items/vehicle/wheel.json
@@ -121653,9 +121945,9 @@ msgstr ""
#: data/json/items/vehicle/wheel.json data/json/vehicleparts/wheel.json
msgid "small wheel"
msgid_plural "small wheels"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rueda pequeña"
+msgstr[1] "ruedas pequeñas"
+msgstr[2] "ruedas pequeñas"
#. ~ Description for {'str': 'small wheel'}
#: data/json/items/vehicle/wheel.json
@@ -121697,9 +121989,9 @@ msgstr "Un par de ruedas de una silla de ruedas."
#: data/json/items/vehicle/wheel.json data/json/vehicleparts/wheel.json
msgid "wide wheel"
msgid_plural "wide wheels"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rueda ancha"
+msgstr[1] "ruedas anchas"
+msgstr[2] "ruedas anchas"
#. ~ Description for {'str': 'wide wheel'}
#: data/json/items/vehicle/wheel.json
@@ -121725,9 +122017,9 @@ msgstr ""
#: data/json/items/vehicle/wheel.json data/json/vehicleparts/wheel.json
msgid "wooden cart wheel"
msgid_plural "wooden cart wheels"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rueda de madera para carro"
+msgstr[1] "ruedas de madera para carro"
+msgstr[2] "ruedas de madera para carro"
#. ~ Description for {'str': 'wooden cart wheel'}
#: data/json/items/vehicle/wheel.json
@@ -121737,9 +122029,9 @@ msgstr "Una rueda de madera para carro, hecha a mano."
#: data/json/items/vehicle/wheel.json data/json/vehicleparts/wheel.json
msgid "banded wooden cart wheel"
msgid_plural "banded wooden cart wheels"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rueda reforzada de madera para carro"
+msgstr[1] "ruedas reforzada de madera para carro"
+msgstr[2] "ruedas reforzada de madera para carro"
#. ~ Description for {'str': 'banded wooden cart wheel'}
#: data/json/items/vehicle/wheel.json
@@ -123349,9 +123641,9 @@ msgstr ""
#: data/json/monsters/bird.json
msgid "chicken"
msgid_plural "chickens"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pollo"
+msgstr[1] "pollos"
+msgstr[2] "pollos"
#. ~ Description for {'str': 'chicken'}
#: data/json/monsters/bird.json
@@ -123383,9 +123675,9 @@ msgstr ""
#: data/json/monsters/bird.json
msgid "crow"
msgid_plural "crows"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cuervo"
+msgstr[1] "cuervos"
+msgstr[2] "cuervos"
#. ~ Description for {'str': 'crow'}
#: data/json/monsters/bird.json
@@ -123399,9 +123691,9 @@ msgstr ""
#: data/json/monsters/bird.json
msgid "duck"
msgid_plural "ducks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pato"
+msgstr[1] "patos"
+msgstr[2] "patos"
#. ~ Description for {'str': 'duck'}
#: data/json/monsters/bird.json
@@ -123427,9 +123719,9 @@ msgstr ""
#: data/json/monsters/bird.json
msgid "turkey"
msgid_plural "turkeys"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pavo"
+msgstr[1] "pavos"
+msgstr[2] "pavos"
#. ~ Description for {'str': 'turkey'}
#: data/json/monsters/bird.json
@@ -123529,9 +123821,9 @@ msgstr ""
#: data/json/monsters/cyborgs.json
msgid "broken cyborg"
msgid_plural "broken cyborgs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cyborg roto"
+msgstr[1] "cyborgs rotos"
+msgstr[2] "cyborgs rotos"
#. ~ Description for {'str': 'broken cyborg'}
#: data/json/monsters/cyborgs.json
@@ -123549,9 +123841,9 @@ msgstr ""
#: data/json/monsters/cyborgs.json
msgid "prototype cyborg"
msgid_plural "prototype cyborgs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "prototipo de ciborg"
+msgstr[1] "prototipos de ciborg"
+msgstr[2] "prototipos de ciborg"
#. ~ Description for {'str': 'prototype cyborg'}
#: data/json/monsters/cyborgs.json
@@ -123565,9 +123857,9 @@ msgstr ""
#: data/json/monsters/defense_bot.json
msgid "police bot"
msgid_plural "police bots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "policíabot"
+msgstr[1] "policíabots"
+msgstr[2] "policíabots"
#. ~ Description for {'str': 'police bot'}
#: data/json/monsters/defense_bot.json
@@ -123586,9 +123878,9 @@ msgstr ""
#: data/json/monsters/defense_bot.json
msgid "riot control bot"
msgid_plural "riot control bots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "antidisturbot"
+msgstr[1] "antidisturbots"
+msgstr[2] "antidisturbots"
#. ~ Description for {'str': 'riot control bot'}
#: data/json/monsters/defense_bot.json
@@ -123636,9 +123928,9 @@ msgstr ""
#: data/mods/Modular_Turrets/monster_override.json
msgid "skitterbot"
msgid_plural "skitterbots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "arañabot"
+msgstr[1] "arañabots"
+msgstr[2] "arañabots"
#. ~ Description for {'str': 'skitterbot'}
#. ~ Description for skitterbot
@@ -123797,9 +124089,9 @@ msgstr ""
#: data/json/monsters/drones.json
msgid "manhack"
msgid_plural "manhacks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "manhack"
+msgstr[1] "manhacks"
+msgstr[2] "manhacks"
#. ~ Description for {'str': 'manhack'}
#: data/json/monsters/drones.json
@@ -124180,9 +124472,9 @@ msgstr ""
#: data/json/monsters/fish.json
msgid "trout"
msgid_plural "trouts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "trucha"
+msgstr[1] "truchas"
+msgstr[2] "truchas"
#. ~ Description for {'str': 'trout'}
#: data/json/monsters/fish.json
@@ -124264,9 +124556,9 @@ msgstr ""
#: data/json/monsters/fish.json
msgid "salmon"
msgid_plural "salmons"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "salmón"
+msgstr[1] "salmones"
+msgstr[2] "salmones"
#. ~ Description for {'str': 'salmon'}
#: data/json/monsters/fish.json
@@ -124315,9 +124607,9 @@ msgstr ""
#: data/json/monsters/fish.json
msgid "whitefish"
msgid_plural "whitefish"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bacalao"
+msgstr[1] "bacalaos"
+msgstr[2] "bacalaos"
#. ~ Description for {'str_sp': 'whitefish'}
#: data/json/monsters/fish.json
@@ -124331,9 +124623,9 @@ msgstr ""
#: data/json/monsters/fish.json
msgid "largemouth bass"
msgid_plural "largemouth bass"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "perca americana"
+msgstr[1] "percas americanas"
+msgstr[2] "percas americanas"
#. ~ Description for {'str_sp': 'largemouth bass'}
#: data/json/monsters/fish.json
@@ -124344,9 +124636,9 @@ msgstr ""
#: data/json/monsters/fish.json
msgid "smallmouth bass"
msgid_plural "smallmouth bass"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "perca americana de boca pequeña "
+msgstr[1] "percas americanas de boca pequeña"
+msgstr[2] "percas americanas de boca pequeña"
#. ~ Description for {'str_sp': 'smallmouth bass'}
#: data/json/monsters/fish.json
@@ -124358,9 +124650,9 @@ msgstr ""
#: data/json/monsters/fish.json
msgid "striped bass"
msgid_plural "striped bass"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "perca americana rayada"
+msgstr[1] "percas americanas rayada"
+msgstr[2] "percas americanas rayada"
#. ~ Description for {'str_sp': 'striped bass'}
#: data/json/monsters/fish.json
@@ -124388,9 +124680,9 @@ msgstr ""
#: data/json/monsters/fish.json
msgid "perch"
msgid_plural "perches"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lucioperca"
+msgstr[1] "luciopercas"
+msgstr[2] "luciopercas"
#. ~ Description for {'str': 'perch', 'str_pl': 'perches'}
#: data/json/monsters/fish.json
@@ -124414,9 +124706,9 @@ msgstr ""
#: data/json/monsters/fish.json
msgid "sunfish"
msgid_plural "sunfish"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "peces sol"
+msgstr[1] "pez sol"
+msgstr[2] "pez sol"
#. ~ Description for {'str_sp': 'sunfish'}
#: data/json/monsters/fish.json
@@ -124438,9 +124730,9 @@ msgstr ""
#: data/json/monsters/fish.json
msgid "bluegill"
msgid_plural "bluegills"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mojarra de agallas azules"
+msgstr[1] "mojarras de agallas azules"
+msgstr[2] "mojarras de agallas azules"
#. ~ Description for {'str': 'bluegill'}
#: data/json/monsters/fish.json
@@ -124541,9 +124833,9 @@ msgstr ""
#: data/json/monsters/fish.json
msgid "bullhead"
msgid_plural "bullheads"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "siluro"
+msgstr[1] "siluros"
+msgstr[2] "siluros"
#. ~ Description for {'str': 'bullhead'}
#: data/json/monsters/fish.json
@@ -124578,9 +124870,9 @@ msgstr ""
msgctxt "fish"
msgid "pike"
msgid_plural "pikes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lucio"
+msgstr[1] "lucios"
+msgstr[2] "lucios"
#. ~ Description for {'ctxt': 'fish', 'str': 'pike'}
#: data/json/monsters/fish.json
@@ -124630,9 +124922,9 @@ msgstr ""
#: data/json/monsters/fish.json
msgid "carp"
msgid_plural "carps"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "carpa"
+msgstr[1] "carpas"
+msgstr[2] "carpas"
#. ~ Description for {'str': 'carp'}
#: data/json/monsters/fish.json
@@ -124656,9 +124948,9 @@ msgstr ""
#: data/json/monsters/fish.json
msgid "bowfin"
msgid_plural "bowfins"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "amia calva"
+msgstr[1] "amias calva"
+msgstr[2] "amias calva"
#. ~ Description for {'str': 'bowfin'}
#: data/json/monsters/fish.json
@@ -124725,9 +125017,9 @@ msgstr "Un extraño pez de tres ojos."
#: data/json/monsters/fish.json
msgid "freshwater eel"
msgid_plural "freshwater eels"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anguila de agua dulce"
+msgstr[1] "anguilas de agua dulce"
+msgstr[2] "anguilas de agua dulce"
#. ~ Description for {'str': 'freshwater eel'}
#: data/json/monsters/fish.json
@@ -124777,9 +125069,9 @@ msgstr ""
#: data/json/monsters/fish.json
msgid "giant carp"
msgid_plural "giant carps"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "carpa gigante"
+msgstr[1] "carpas gigantes"
+msgstr[2] "carpas gigantes"
#. ~ Description for {'str': 'giant carp'}
#: data/json/monsters/fish.json
@@ -124793,9 +125085,9 @@ msgstr ""
#: data/json/monsters/fish.json
msgid "giant salmon"
msgid_plural "giant salmons"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "salmón gigante"
+msgstr[1] "salmones gigantes"
+msgstr[2] "salmones gigantes"
#. ~ Description for {'str': 'giant salmon'}
#: data/json/monsters/fish.json
@@ -124809,9 +125101,9 @@ msgstr ""
#: data/json/monsters/fish.json
msgid "seweranha"
msgid_plural "seweranhas"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "piraña de cloaca"
+msgstr[1] "pirañas de cloaca"
+msgstr[2] "pirañas de cloaca"
#. ~ Description for {'str': 'seweranha'}
#: data/json/monsters/fish.json
@@ -124825,9 +125117,9 @@ msgstr ""
#: data/json/monsters/fungus.json data/mods/Limit Fungal Growth/modinfo.json
msgid "fungal boomer"
msgid_plural "fungal boomers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "boomer con hongos"
+msgstr[1] "boomers con hongos"
+msgstr[2] "boomers con hongos"
#. ~ Description for {'str': 'fungal boomer'}
#: data/json/monsters/fungus.json
@@ -124841,9 +125133,9 @@ msgstr ""
#: data/json/monsters/fungus.json data/mods/Limit Fungal Growth/modinfo.json
msgid "fungal blossom"
msgid_plural "fungal blossoms"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "capullo fúngico"
+msgstr[1] "capullos fúngicos"
+msgstr[2] "capullos fúngicos"
#. ~ Description for {'str': 'fungal blossom'}
#: data/json/monsters/fungus.json
@@ -124857,9 +125149,9 @@ msgstr ""
#: data/json/monsters/fungus.json
msgid "fungal hedgerow"
msgid_plural "fungal hedgerows"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "seto fúngico"
+msgstr[1] "setos fúngicos"
+msgstr[2] "setos fúngicos"
#. ~ Description for {'str': 'fungal hedgerow'}
#: data/json/monsters/fungus.json
@@ -124874,9 +125166,9 @@ msgstr ""
#: data/json/monsters/fungus.json
msgid "fungal tendril"
msgid_plural "fungal tendrils"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zarcillo fúngico"
+msgstr[1] "zarcillos fúngicos"
+msgstr[2] "zarcillos fúngicos"
#. ~ Description for {'str': 'fungal tendril'}
#: data/json/monsters/fungus.json
@@ -124896,9 +125188,9 @@ msgstr ""
#: data/mods/Limit Fungal Growth/modinfo.json
msgid "fungaloid"
msgid_plural "fungaloids"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "fungaloide"
+msgstr[1] "fungaloides"
+msgstr[2] "fungaloides"
#. ~ Description for {'str': 'fungaloid'}
#: data/json/monsters/fungus.json
@@ -124915,9 +125207,9 @@ msgstr ""
#: data/json/monsters/fungus.json
msgid "fungal spire"
msgid_plural "fungal spires"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "torre fúngica"
+msgstr[1] "torres fúngicas"
+msgstr[2] "torres fúngicas"
#. ~ Description for {'str': 'fungal spire'}
#: data/json/monsters/fungus.json
@@ -124931,9 +125223,9 @@ msgstr ""
#: data/json/monsters/fungus.json
msgid "giant fungal blossom"
msgid_plural "giant fungal blossoms"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "capullo fúngico gigante"
+msgstr[1] "capullos fúngicos gigantes"
+msgstr[2] "capullos fúngicos gigantes"
#. ~ Description for {'str': 'giant fungal blossom'}
#: data/json/monsters/fungus.json
@@ -124950,9 +125242,9 @@ msgstr ""
#: data/mods/alt_map_key/overmap_terrain.json
msgid "fungal tower"
msgid_plural "fungal towers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "torre fúngica"
+msgstr[1] "torres fúngicas"
+msgstr[2] "torres fúngicas"
#. ~ Description for {'str': 'fungal tower'}
#: data/json/monsters/fungus.json
@@ -124972,9 +125264,9 @@ msgstr ""
#: data/json/monsters/fungus.json
msgid "fungal sporeling"
msgid_plural "fungal sporelings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "espora fúngica"
+msgstr[1] "esporas fúngicas"
+msgstr[2] "esporas fúngicas"
#. ~ Description for {'str': 'fungal sporeling'}
#: data/json/monsters/fungus.json
@@ -124990,9 +125282,9 @@ msgstr ""
#: data/json/monsters/fungus.json data/mods/Limit Fungal Growth/modinfo.json
msgid "spore cloud"
msgid_plural "spore clouds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "nube de esporas"
+msgstr[1] "nubes de esporas"
+msgstr[2] "nubes de esporas"
#. ~ Description for {'str': 'spore cloud'}
#: data/json/monsters/fungus.json
@@ -125002,9 +125294,9 @@ msgstr "Es una masa de esporas del tamaño de puños flotando por el aire."
#: data/json/monsters/fungus.json data/mods/Limit Fungal Growth/modinfo.json
msgid "fungal zombie"
msgid_plural "fungal zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi con hongos"
+msgstr[1] "zombis con hongos"
+msgstr[2] "zombis con hongos"
#. ~ Description for {'str': 'fungal zombie'}
#: data/json/monsters/fungus.json
@@ -125081,9 +125373,9 @@ msgstr ""
#: data/json/monsters/fungus.json data/mods/Limit Fungal Growth/modinfo.json
msgid "fungal ant"
msgid_plural "fungal ants"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hormiga fúngica"
+msgstr[1] "hormigas fúngicas"
+msgstr[2] "hormigas fúngicas"
#. ~ Description for {'str': 'fungal ant'}
#: data/json/monsters/fungus.json
@@ -125113,9 +125405,9 @@ msgstr ""
#: data/json/monsters/insect_spider.json
msgid "dark wyrm"
msgid_plural "dark wyrms"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "wyrm oscuro"
+msgstr[1] "wyrms oscuros"
+msgstr[2] "wyrms oscuros"
#. ~ Description for {'str': 'dark wyrm'}
#: data/json/monsters/insect_spider.json
@@ -125131,9 +125423,9 @@ msgstr ""
#: data/json/monsters/insect_spider.json
msgid "graboid"
msgid_plural "graboids"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "graboid"
+msgstr[1] "graboides"
+msgstr[2] "graboides"
#. ~ Description for {'str': 'graboid'}
#: data/json/monsters/insect_spider.json
@@ -125150,9 +125442,9 @@ msgstr ""
#: data/json/monsters/insect_spider.json
msgid "half worm"
msgid_plural "half worms"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mediogusano"
+msgstr[1] "mediogusanos"
+msgstr[2] "mediogusanos"
#. ~ Description for {'str': 'half worm'}
#: data/json/monsters/insect_spider.json
@@ -125162,9 +125454,9 @@ msgstr "Una parte movediza cortada de un gusano gigante herido."
#: data/json/monsters/insect_spider.json
msgid "giant worm"
msgid_plural "giant worms"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "gusano gigante"
+msgstr[1] "gusanos gigantes"
+msgstr[2] "gusanos gigantes"
#. ~ Description for {'str': 'giant worm'}
#: data/json/monsters/insect_spider.json
@@ -125261,9 +125553,9 @@ msgstr ""
#: data/json/monsters/insect_spider.json
msgid "giant bee"
msgid_plural "giant bees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "abeja gigante"
+msgstr[1] "abejas gigantes"
+msgstr[2] "abejas gigantes"
#. ~ Description for {'str': 'giant bee'}
#: data/json/monsters/insect_spider.json
@@ -125278,9 +125570,9 @@ msgstr ""
#: data/json/monsters/insect_spider.json
msgid "giant centipede"
msgid_plural "giant centipedes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Ciempiés gigante"
+msgstr[1] "Ciempiés gigantes"
+msgstr[2] "Ciempiés gigantes"
#. ~ Description for {'str': 'giant centipede'}
#: data/json/monsters/insect_spider.json
@@ -125326,9 +125618,9 @@ msgstr ""
#: data/json/monsters/insect_spider.json
msgid "giant mosquito"
msgid_plural "giant mosquitos"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mosquito gigante"
+msgstr[1] "mosquitos gigantes"
+msgstr[2] "mosquitos gigantes"
#. ~ Description for {'str': 'giant mosquito'}
#: data/json/monsters/insect_spider.json
@@ -125376,9 +125668,9 @@ msgstr ""
#: data/json/monsters/insect_spider.json
msgid "giant jumping spider"
msgid_plural "giant jumping spiders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "araña saltarina gigante"
+msgstr[1] "arañas saltarinas gigantes"
+msgstr[2] "arañas saltarinas gigantes"
#. ~ Description for {'str': 'giant jumping spider'}
#: data/json/monsters/insect_spider.json
@@ -125392,9 +125684,9 @@ msgstr ""
#: data/json/monsters/insect_spider.json
msgid "giant trapdoor spider"
msgid_plural "giant trapdoor spiders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "araña tapadera gigante"
+msgstr[1] "arañas tapadera gigantes"
+msgstr[2] "arañas tapadera gigantes"
#. ~ Description for {'str': 'giant trapdoor spider'}
#: data/json/monsters/insect_spider.json
@@ -125408,9 +125700,9 @@ msgstr ""
#: data/json/monsters/insect_spider.json
msgid "giant web spider"
msgid_plural "giant web spiders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "araña gigante"
+msgstr[1] "arañas gigantes"
+msgstr[2] "arañas gigantes"
#. ~ Description for {'str': 'giant web spider'}
#: data/json/monsters/insect_spider.json
@@ -125424,9 +125716,9 @@ msgstr ""
#: data/json/monsters/insect_spider.json
msgid "immature giant web spider"
msgid_plural "immature giant web spiders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "araña gigante inmadura"
+msgstr[1] "arañas gigantes inmaduras"
+msgstr[2] "arañas gigantes inmaduras"
#. ~ Description for {'str': 'immature giant web spider'}
#: data/json/monsters/insect_spider.json
@@ -125440,9 +125732,9 @@ msgstr ""
#: data/json/monsters/insect_spider.json
msgid "giant black widow"
msgid_plural "giant black widows"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "viuda negra gigante"
+msgstr[1] "viudas negras gigantes"
+msgstr[2] "viudas negras gigantes"
#. ~ Description for {'str': 'giant black widow'}
#: data/json/monsters/insect_spider.json
@@ -125456,9 +125748,9 @@ msgstr ""
#: data/json/monsters/insect_spider.json
msgid "giant black widow spiderling"
msgid_plural "giant black widow spiderlings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cría de viuda negra gigante"
+msgstr[1] "crías de viuda negra gigante"
+msgstr[2] "crías de viuda negra gigante"
#. ~ Description for {'str': 'giant black widow spiderling'}
#: data/json/monsters/insect_spider.json
@@ -125472,9 +125764,9 @@ msgstr ""
#: data/json/monsters/insect_spider.json
msgid "giant wolf spider"
msgid_plural "giant wolf spiders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "araña-lobo gigante"
+msgstr[1] "arañas-lobo gigantes"
+msgstr[2] "arañas-lobo gigantes"
#. ~ Description for {'str': 'giant wolf spider'}
#: data/json/monsters/insect_spider.json
@@ -125488,9 +125780,9 @@ msgstr ""
#: data/json/monsters/insect_spider.json
msgid "giant wasp"
msgid_plural "giant wasps"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "avispa gigante"
+msgstr[1] "avispas gigantes"
+msgstr[2] "avispas gigantes"
#. ~ Description for {'str': 'giant wasp'}
#: data/json/monsters/insect_spider.json
@@ -125505,9 +125797,9 @@ msgstr ""
#: data/json/monsters/insect_spider.json
msgid "dermatik"
msgid_plural "dermatiks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "dermatik"
+msgstr[1] "dermatiks"
+msgstr[2] "dermatiks"
#. ~ Description for {'str': 'dermatik'}
#: data/json/monsters/insect_spider.json
@@ -125537,9 +125829,9 @@ msgstr ""
#: data/json/monsters/insect_spider.json
msgid "giant ant"
msgid_plural "giant ants"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hormiga gigante"
+msgstr[1] "hormigas gigantes"
+msgstr[2] "hormigas gigantes"
#. ~ Description for {'str': 'giant ant'}
#: data/json/monsters/insect_spider.json
@@ -125570,9 +125862,9 @@ msgstr ""
#: data/json/monsters/insect_spider.json
msgid "acidic ant larva"
msgid_plural "acidic ant larvae"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "larva de hormiga ácida"
+msgstr[1] "larvas de hormiga ácida"
+msgstr[2] "larvas de hormiga ácida"
#. ~ Description for {'str': 'acidic ant larva', 'str_pl': 'acidic ant
#. larvae'}
@@ -125588,9 +125880,9 @@ msgstr ""
#: data/json/monsters/insect_spider.json
msgid "acidic queen ant"
msgid_plural "acidic queen ants"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hormiga ácida reina"
+msgstr[1] "hormigas ácidas reina"
+msgstr[2] "hormigas ácidas reina"
#. ~ Description for {'str': 'acidic queen ant'}
#: data/json/monsters/insect_spider.json
@@ -125607,9 +125899,9 @@ msgstr ""
#: data/json/monsters/insect_spider.json
msgid "acidic soldier ant"
msgid_plural "acidic soldier ants"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hormiga ácida soldado"
+msgstr[1] "hormigas ácidas soldado"
+msgstr[2] "hormigas ácidas soldado"
#. ~ Description for {'str': 'acidic soldier ant'}
#: data/json/monsters/insect_spider.json
@@ -125625,9 +125917,9 @@ msgstr ""
#: data/json/monsters/insect_spider.json
msgid "ant larva"
msgid_plural "ant larvae"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "larva de hormiga"
+msgstr[1] "larvas de hormiga"
+msgstr[2] "larvas de hormiga"
#. ~ Description for {'str': 'ant larva', 'str_pl': 'ant larvae'}
#: data/json/monsters/insect_spider.json
@@ -125641,9 +125933,9 @@ msgstr ""
#: data/json/monsters/insect_spider.json
msgid "queen ant"
msgid_plural "queen ants"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hormiga reina"
+msgstr[1] "hormigas reinas"
+msgstr[2] "hormigas reinas"
#. ~ Description for {'str': 'queen ant'}
#: data/json/monsters/insect_spider.json
@@ -125657,9 +125949,9 @@ msgstr ""
#: data/json/monsters/insect_spider.json
msgid "soldier ant"
msgid_plural "soldier ants"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hormiga soldado"
+msgstr[1] "hormigas soldado"
+msgstr[2] "hormigas soldado"
#. ~ Description for {'str': 'soldier ant'}
#: data/json/monsters/insect_spider.json
@@ -125673,9 +125965,9 @@ msgstr ""
#: data/json/monsters/insect_spider.json
msgid "giant locust"
msgid_plural "giant locusts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "langosta gigante"
+msgstr[1] "langostas gigantes"
+msgstr[2] "langostas gigantes"
#. ~ Description for {'str': 'giant locust'}
#: data/json/monsters/insect_spider.json
@@ -125720,9 +126012,9 @@ msgstr ""
#: data/json/monsters/jabberwock.json
msgid "flesh golem"
msgid_plural "flesh golems"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "golem de carne"
+msgstr[1] "golems de carne"
+msgstr[2] "golems de carne"
#. ~ Description for {'str': 'flesh golem'}
#: data/json/monsters/jabberwock.json
@@ -125735,9 +126027,9 @@ msgstr ""
#: data/json/monsters/jabberwock.json
msgid "jabberwock"
msgid_plural "jabberwocks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "jabberwock"
+msgstr[1] "jabberwocks"
+msgstr[2] "jabberwocks"
#. ~ Description for {'str': 'jabberwock'}
#: data/json/monsters/jabberwock.json
@@ -125754,9 +126046,9 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "bat"
msgid_plural "bats"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "murciélago"
+msgstr[1] "murciélagos"
+msgstr[2] "murciélagos"
#. ~ Description for {'str': 'bat'}
#: data/json/monsters/mammal.json
@@ -125789,9 +126081,9 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "black bear"
msgid_plural "black bears"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "oso negro"
+msgstr[1] "osos negros"
+msgstr[2] "osos negros"
#. ~ Description for {'str': 'black bear'}
#: data/json/monsters/mammal.json
@@ -125807,9 +126099,9 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "beaver"
msgid_plural "beavers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "castor"
+msgstr[1] "castores"
+msgstr[2] "castores"
#. ~ Description for {'str': 'beaver'}
#: data/json/monsters/mammal.json
@@ -125827,9 +126119,9 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "black rat"
msgid_plural "black rats"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rata negra"
+msgstr[1] "ratas negras"
+msgstr[2] "ratas negras"
#. ~ Description for {'str': 'black rat'}
#: data/json/monsters/mammal.json
@@ -125869,9 +126161,9 @@ msgstr[2] ""
#: data/json/monsters/mammal.json
msgid "bobcat"
msgid_plural "bobcats"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "gato montés"
+msgstr[1] "gatos monteses"
+msgstr[2] "gatos monteses"
#. ~ Description for {'str': 'bobcat'}
#: data/json/monsters/mammal.json
@@ -125969,9 +126261,9 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "Siamese cat"
msgid_plural "Siamese cats"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "gato siamés"
+msgstr[1] "gatos siameses"
+msgstr[2] "gatos siameses"
#. ~ Description for Siamese cat
#: data/json/monsters/mammal.json
@@ -126194,9 +126486,9 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "chipmunk"
msgid_plural "chipmunks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "ardilla"
+msgstr[1] "ardillas"
+msgstr[2] "ardillas"
#. ~ Description for {'str': 'chipmunk'}
#: data/json/monsters/mammal.json
@@ -126253,16 +126545,16 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "cow"
msgid_plural "cows"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "vaca"
+msgstr[1] "vacas"
+msgstr[2] "vacas"
#: data/json/monsters/mammal.json
msgid "coyote"
msgid_plural "coyotes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "coyote"
+msgstr[1] "coyotes"
+msgstr[2] "coyotes"
#. ~ Description for {'str': 'coyote'}
#: data/json/monsters/mammal.json
@@ -126309,9 +126601,9 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "deer"
msgid_plural "deers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "ciervo"
+msgstr[1] "ciervos"
+msgstr[2] "ciervos"
#. ~ Description for {'str': 'deer'}
#: data/json/monsters/mammal.json
@@ -126722,9 +127014,9 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "groundhog"
msgid_plural "groundhogs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "marmota"
+msgstr[1] "marmotas"
+msgstr[2] "marmotas"
#. ~ Description for {'str': 'groundhog'}
#: data/json/monsters/mammal.json
@@ -126737,9 +127029,9 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "jackrabbit"
msgid_plural "jackrabbits"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "liebre"
+msgstr[1] "liebres"
+msgstr[2] "liebres"
#. ~ Description for {'str': 'jackrabbit'}
#: data/json/monsters/mammal.json
@@ -126753,9 +127045,9 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "horse"
msgid_plural "horses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "caballo"
+msgstr[1] "caballos"
+msgstr[2] "caballos"
#. ~ Description for {'str': 'horse'}
#: data/json/monsters/mammal.json
@@ -126769,9 +127061,9 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "lemming"
msgid_plural "lemmings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lemming"
+msgstr[1] "lemmings"
+msgstr[2] "lemmings"
#. ~ Description for {'str': 'lemming'}
#: data/json/monsters/mammal.json
@@ -126790,9 +127082,9 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "mink"
msgid_plural "minks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "visón"
+msgstr[1] "visones"
+msgstr[2] "visones"
#. ~ Description for {'str': 'mink'}
#: data/json/monsters/mammal.json
@@ -126823,9 +127115,9 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "muskrat"
msgid_plural "muskrats"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rata almizclera"
+msgstr[1] "ratas almizcleras"
+msgstr[2] "ratas almizcleras"
#. ~ Description for {'str': 'muskrat'}
#: data/json/monsters/mammal.json
@@ -126858,9 +127150,9 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "opossum"
msgid_plural "opossums"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zarigüeya"
+msgstr[1] "zarigüeyas"
+msgstr[2] "zarigüeyas"
#. ~ Description for {'str': 'opossum'}
#: data/json/monsters/mammal.json
@@ -126876,9 +127168,9 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "otter"
msgid_plural "otters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "nutria"
+msgstr[1] "nutrias"
+msgstr[2] "nutrias"
#. ~ Description for {'str': 'otter'}
#: data/json/monsters/mammal.json
@@ -126892,9 +127184,9 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "piglet"
msgid_plural "piglets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lechón"
+msgstr[1] "lechones"
+msgstr[2] "lechones"
#. ~ Description for {'str': 'piglet'}
#: data/json/monsters/mammal.json
@@ -126907,9 +127199,9 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "pig"
msgid_plural "pigs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cerdo"
+msgstr[1] "cerdos"
+msgstr[2] "cerdos"
#. ~ Description for {'str': 'pig'}
#: data/json/monsters/mammal.json
@@ -126923,9 +127215,9 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "rabbit"
msgid_plural "rabbits"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "conejo"
+msgstr[1] "conejos"
+msgstr[2] "conejos"
#. ~ Description for {'str': 'rabbit'}
#: data/json/monsters/mammal.json
@@ -126939,9 +127231,9 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "raccoon"
msgid_plural "raccoons"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mapache"
+msgstr[1] "mapaches"
+msgstr[2] "mapaches"
#. ~ Description for {'str': 'raccoon'}
#: data/json/monsters/mammal.json
@@ -126957,9 +127249,9 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "rat king"
msgid_plural "rat kings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rata rey"
+msgstr[1] "ratas rey"
+msgstr[2] "ratas rey"
#. ~ Description for {'str': 'rat king'}
#: data/json/monsters/mammal.json
@@ -126974,9 +127266,9 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "sewer rat"
msgid_plural "sewer rats"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rata de cloaca"
+msgstr[1] "ratas de cloaca"
+msgstr[2] "ratas de cloaca"
#. ~ Description for {'str': 'sewer rat'}
#: data/json/monsters/mammal.json
@@ -127018,9 +127310,9 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "squirrel"
msgid_plural "squirrels"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "ardilla"
+msgstr[1] "ardillas"
+msgstr[2] "ardillas"
#. ~ Description for {'str': 'squirrel'}
#: data/json/monsters/mammal.json
@@ -127048,9 +127340,9 @@ msgstr ""
#: data/json/monsters/mammal.json
msgid "weasel"
msgid_plural "weasels"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "comadreja"
+msgstr[1] "comadrejas"
+msgstr[2] "comadrejas"
#. ~ Description for {'str': 'weasel'}
#: data/json/monsters/mammal.json
@@ -127162,9 +127454,9 @@ msgstr ""
#: data/json/monsters/mi-go.json
msgid "mi-go"
msgid_plural "mi-gos"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mi-go"
+msgstr[1] "mi-gos"
+msgstr[2] "mi-gos"
#. ~ Description for {'str': 'mi-go'}
#: data/json/monsters/mi-go.json
@@ -127279,9 +127571,9 @@ msgstr ""
#: data/json/monsters/misc.json
msgid "debug monster"
msgid_plural "debug monsters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "monstruo de depuración"
+msgstr[1] "monstruos de depuración"
+msgstr[2] "monstruos de depuración"
#. ~ Description for {'str': 'debug monster'}
#: data/json/monsters/misc.json
@@ -127320,9 +127612,9 @@ msgstr ""
#: data/json/monsters/misc.json
msgid "generator"
msgid_plural "generators"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "generador"
+msgstr[1] "generadores"
+msgstr[2] "generadores"
#. ~ Description for {'str': 'generator'}
#: data/json/monsters/misc.json
@@ -127335,9 +127627,9 @@ msgstr ""
#: data/json/monsters/misc.json
msgid "your mother"
msgid_plural "your mothers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tu madre"
+msgstr[1] "tus madres"
+msgstr[2] "tus madres"
#. ~ Description for {'str': 'your mother'}
#: data/json/monsters/misc.json
@@ -127347,9 +127639,9 @@ msgstr "¿Mamá?"
#: data/json/monsters/misc.json
msgid "evil multi-cooker"
msgid_plural "evil multi-cookers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "multicocina malévola"
+msgstr[1] "multicocinas malévolas"
+msgstr[2] "multicocinas malévolas"
#. ~ Description for {'str': 'evil multi-cooker'}
#: data/json/monsters/misc.json
@@ -127359,9 +127651,9 @@ msgstr "¡Esta cocina malévola tiene vida propia! ¡Cuidado!"
#: data/json/monsters/misc.json data/mods/Magiclysm/monsters.json
msgid "hologram"
msgid_plural "holograms"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "holograma"
+msgstr[1] "hologramas"
+msgstr[2] "hologramas"
#. ~ Description for {'str': 'hologram'}
#. ~ Description for hologram
@@ -127387,9 +127679,9 @@ msgstr ""
#: data/json/monsters/mutant_human.json
msgid "C.H.U.D."
msgid_plural "C.H.U.D.s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "H.H.S.C."
+msgstr[1] "H.H.S.C."
+msgstr[2] "H.H.S.C."
#. ~ Description for {'str': 'C.H.U.D.'}
#: data/json/monsters/mutant_human.json
@@ -127435,9 +127727,9 @@ msgstr ""
#: data/json/monsters/mutant_human.json
msgid "cyclopean"
msgid_plural "cyclopeans"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "ciclópeo"
+msgstr[1] "ciclópeos"
+msgstr[2] "ciclópeos"
#. ~ Description for {'str': 'cyclopean'}
#: data/json/monsters/mutant_human.json
@@ -127451,9 +127743,9 @@ msgstr ""
#: data/json/monsters/nether.json
msgid "albino penguin"
msgid_plural "albino penguins"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pingüino albino"
+msgstr[1] "pingüinos albino"
+msgstr[2] "pingüinos albino"
#. ~ Description for {'str': 'albino penguin'}
#: data/json/monsters/nether.json
@@ -127466,9 +127758,9 @@ msgstr ""
#: data/json/monsters/nether.json
msgid "amigara horror"
msgid_plural "amigara horrors"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "horror amigara"
+msgstr[1] "horrores amigara"
+msgstr[2] "horrores amigara"
#. ~ Description for {'str': 'amigara horror'}
#: data/json/monsters/nether.json
@@ -127508,9 +127800,9 @@ msgstr ""
#: data/json/monsters/nether.json
msgid "blood sacrifice"
msgid_plural "blood sacrifices"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sacrificio sangriento"
+msgstr[1] "sacrificios sangrientos"
+msgstr[2] "sacrificios sangrientos"
#. ~ Description for {'str': 'blood sacrifice'}
#: data/json/monsters/nether.json
@@ -127527,9 +127819,9 @@ msgstr ""
#: data/json/monsters/nether.json
msgid "breather"
msgid_plural "breathers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "respirador"
+msgstr[1] "respiradores"
+msgstr[2] "respiradores"
#. ~ Description for {'str': 'breather'}
#: data/json/monsters/nether.json
@@ -127551,9 +127843,9 @@ msgstr "Es una rara masa de viscosidad rosa inmóvil. Parece respirar."
#: data/json/monsters/nether.json
msgid "wraith"
msgid_plural "wraiths"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "espectro"
+msgstr[1] "espectros"
+msgstr[2] "espectros"
#. ~ Description for {'str': 'wraith'}
#: data/json/monsters/nether.json
@@ -127565,9 +127857,9 @@ msgstr ""
#: data/json/monsters/nether.json
msgid "dementia"
msgid_plural "dementias"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "dementia"
+msgstr[1] "dementias"
+msgstr[2] "dementias"
#. ~ Description for {'str': 'dementia'}
#: data/json/monsters/nether.json
@@ -127581,9 +127873,9 @@ msgstr ""
#: data/json/monsters/nether.json
msgid "dog"
msgid_plural "dogs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "perro"
+msgstr[1] "perros"
+msgstr[2] "perros"
#. ~ Description for {'str': 'dog'}
#: data/json/monsters/nether.json
@@ -127597,9 +127889,9 @@ msgstr ""
#: data/json/monsters/nether.json
msgid "flaming eye"
msgid_plural "flaming eyes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "ojo llameante"
+msgstr[1] "ojos llameantes"
+msgstr[2] "ojos llameantes"
#. ~ Description for {'str': 'flaming eye'}
#: data/json/monsters/nether.json
@@ -127620,9 +127912,9 @@ msgstr ""
#: data/json/monsters/nether.json
msgid "flesh angel"
msgid_plural "flesh angels"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "ángel cárnico"
+msgstr[1] "ángeles cárnicos"
+msgstr[2] "ángeles cárnicos"
#. ~ Description for {'str': 'flesh angel'}
#: data/json/monsters/nether.json
@@ -127636,9 +127928,9 @@ msgstr ""
#: data/json/monsters/nether.json
msgid "flying polyp"
msgid_plural "flying polyps"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pólipo volador"
+msgstr[1] "pólipos voladores"
+msgstr[2] "pólipos voladores"
#. ~ Description for {'str': 'flying polyp'}
#: data/json/monsters/nether.json
@@ -127651,9 +127943,9 @@ msgstr ""
#: data/json/monsters/nether.json
msgid "gozu"
msgid_plural "gozus"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "gozu"
+msgstr[1] "gozus"
+msgstr[2] "gozus"
#. ~ Description for {'str': 'gozu'}
#: data/json/monsters/nether.json
@@ -127674,9 +127966,9 @@ msgstr ""
#: data/json/monsters/nether.json
msgid "gracken"
msgid_plural "grackens"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "gracken"
+msgstr[1] "grackens"
+msgstr[2] "grackens"
#. ~ Description for {'str': 'gracken'}
#: data/json/monsters/nether.json
@@ -127698,9 +127990,9 @@ msgstr ""
#: data/json/monsters/nether.json
msgid "tentacle dog"
msgid_plural "tentacle dogs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "perro tentáculo"
+msgstr[1] "perros tentáculo"
+msgstr[2] "perros tentáculo"
#. ~ Description for {'str': 'tentacle dog'}
#: data/json/monsters/nether.json
@@ -127749,9 +128041,9 @@ msgstr ""
#: data/json/monsters/nether.json
msgid "human snail"
msgid_plural "human snails"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "caracol humano"
+msgstr[1] "caracoles humanos"
+msgstr[2] "caracoles humanos"
#. ~ Description for {'str': 'human snail'}
#: data/json/monsters/nether.json
@@ -127765,9 +128057,9 @@ msgstr ""
#: data/json/monsters/nether.json
msgid "hunting horror"
msgid_plural "hunting horrors"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "horror cazador"
+msgstr[1] "horrores cazador"
+msgstr[2] "horrores cazador"
#. ~ Description for {'str': 'hunting horror'}
#: data/json/monsters/nether.json
@@ -127785,9 +128077,9 @@ msgstr ""
#: data/json/monsters/nether.json
msgid "kreck"
msgid_plural "krecks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "kreck"
+msgstr[1] "krecks"
+msgstr[2] "krecks"
#. ~ Description for {'str': 'kreck'}
#: data/json/monsters/nether.json
@@ -127825,9 +128117,9 @@ msgstr ""
#: data/json/monsters/nether.json
msgid "shadow snake"
msgid_plural "shadow snakes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "serpiente de sombra"
+msgstr[1] "serpientes de sombra"
+msgstr[2] "serpientes de sombra"
#. ~ Description for {'str': 'shadow snake'}
#: data/json/monsters/nether.json
@@ -127842,9 +128134,9 @@ msgstr ""
#: data/json/monsters/nether.json
msgid "shoggoth"
msgid_plural "shoggoths"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "shoggoth"
+msgstr[1] "shoggoths"
+msgstr[2] "shoggoths"
#. ~ Description for {'str': 'shoggoth'}
#: data/json/monsters/nether.json
@@ -127860,9 +128152,9 @@ msgstr ""
#: data/json/monsters/nether.json
msgid "thing"
msgid_plural "things"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cosa"
+msgstr[1] "cosas"
+msgstr[2] "cosas"
#. ~ Description for {'str': 'thing'}
#: data/json/monsters/nether.json
@@ -127893,9 +128185,9 @@ msgstr ""
#: data/json/monsters/nether.json
msgid "yugg"
msgid_plural "yuggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "yugg"
+msgstr[1] "yuggs"
+msgstr[2] "yuggs"
#. ~ Description for {'str': 'yugg'}
#: data/json/monsters/nether.json
@@ -128047,9 +128339,9 @@ msgstr ""
#: data/json/monsters/reptile_amphibian.json
msgid "giant frog"
msgid_plural "giant frogs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rana gigante"
+msgstr[1] "ranas gigantes"
+msgstr[2] "ranas gigantes"
#. ~ Description for {'str': 'giant frog'}
#: data/json/monsters/reptile_amphibian.json
@@ -128079,9 +128371,9 @@ msgstr ""
#: data/json/monsters/reptile_amphibian.json
msgid "rattlesnake"
msgid_plural "rattlesnakes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "serpiente de cascabel"
+msgstr[1] "serpientes de cascabel"
+msgstr[2] "serpientes de cascabel"
#. ~ Description for {'str': 'rattlesnake'}
#: data/json/monsters/reptile_amphibian.json
@@ -128114,9 +128406,9 @@ msgstr ""
#: data/json/monsters/reptile_amphibian.json
msgid "sewer snake"
msgid_plural "sewer snakes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "serpiente de cloaca"
+msgstr[1] "serpientes de cloaca"
+msgstr[2] "serpientes de cloaca"
#. ~ Description for {'str': 'sewer snake'}
#: data/json/monsters/reptile_amphibian.json
@@ -128129,13 +128421,6 @@ msgstr ""
"pálido por su vida subterránea. Se mueve en manada por debajo del suelo y su"
" nombre es por su hábito de infestar las cloacas."
-#: data/json/monsters/slimes.json
-msgid "blob"
-msgid_plural "blobs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
#. ~ Description for {'str': 'blob'}
#: data/json/monsters/slimes.json
msgid ""
@@ -128148,9 +128433,9 @@ msgstr ""
#: data/json/monsters/slimes.json
msgid "brain blob"
msgid_plural "brain blobs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "masa con cerebro"
+msgstr[1] "masas con cerebro"
+msgstr[2] "masas con cerebro"
#. ~ Description for {'str': 'brain blob'}
#: data/json/monsters/slimes.json
@@ -128165,9 +128450,9 @@ msgstr ""
#: data/json/monsters/slimes.json
msgid "big blob"
msgid_plural "big blobs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "masa grande"
+msgstr[1] "masas grandes"
+msgstr[2] "masas grandes"
#. ~ Description for {'str': 'big blob'}
#: data/json/monsters/slimes.json
@@ -128181,9 +128466,9 @@ msgstr ""
#: data/json/monsters/slimes.json
msgid "small blob"
msgid_plural "small blobs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "masa pequeña"
+msgstr[1] "masas pequeñas"
+msgstr[2] "masas pequeñas"
#. ~ Description for {'str': 'small blob'}
#: data/json/monsters/slimes.json
@@ -128197,9 +128482,9 @@ msgstr ""
#: data/json/monsters/slimes.json
msgid "amoebic mold"
msgid_plural "amoebic molds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "moho amebiano"
+msgstr[1] "mohos amebianos"
+msgstr[2] "mohos amebianos"
#. ~ Description for {'str': 'amoebic mold'}
#: data/json/monsters/slimes.json
@@ -128213,9 +128498,9 @@ msgstr ""
#: data/json/monsters/slimes.json
msgid "slimespring"
msgid_plural "slimesprings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "slime elástico"
+msgstr[1] "slimes elásticos"
+msgstr[2] "slimes elásticos"
#. ~ Description for {'str': 'slimespring'}
#: data/json/monsters/slimes.json
@@ -128227,9 +128512,9 @@ msgstr ""
#: data/json/monsters/slugs.json
msgid "sludge crawler"
msgid_plural "sludge crawlers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "arrastrador de barro"
+msgstr[1] "arrastradores de barro"
+msgstr[2] "arrastradores de barro"
#. ~ Description for {'str': 'sludge crawler'}
#: data/json/monsters/slugs.json
@@ -128246,9 +128531,9 @@ msgstr ""
#: data/json/monsters/slugs.json
msgid "giant slug"
msgid_plural "giant slugs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "babosa gigante"
+msgstr[1] "babosas gigantes"
+msgstr[2] "babosas gigantes"
#. ~ Description for {'str': 'giant slug'}
#: data/json/monsters/slugs.json
@@ -128292,9 +128577,9 @@ msgstr ""
#: data/json/monsters/triffid.json
msgid "biollante"
msgid_plural "biollantes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "biollante"
+msgstr[1] "biollantes"
+msgstr[2] "biollantes"
#. ~ Description for {'str': 'biollante'}
#: data/json/monsters/triffid.json
@@ -128308,9 +128593,9 @@ msgstr ""
#: data/json/monsters/triffid.json
msgid "creeper hub"
msgid_plural "creeper hubs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "enredadera central"
+msgstr[1] "enredaderas centrales"
+msgstr[2] "enredaderas centrales"
#. ~ Description for {'str': 'creeper hub'}
#: data/json/monsters/triffid.json
@@ -128324,9 +128609,9 @@ msgstr ""
#: data/json/monsters/triffid.json
msgid "creeper vine"
msgid_plural "creeper vines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "enredadera brotada"
+msgstr[1] "enredaderas brotadas"
+msgstr[2] "enredaderas brotadas"
#. ~ Description for {'str': 'creeper vine'}
#: data/json/monsters/triffid.json
@@ -128354,9 +128639,9 @@ msgstr ""
#: data/json/monsters/triffid.json
msgid "triffid sprout"
msgid_plural "triffid sprouts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "brote de trífido"
+msgstr[1] "brotes de trífido"
+msgstr[2] "brotes de trífido"
#. ~ Description for {'str': 'triffid sprout'}
#: data/json/monsters/triffid.json
@@ -128370,9 +128655,9 @@ msgstr ""
#: data/json/monsters/triffid.json
msgid "triffid"
msgid_plural "triffids"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "trífido"
+msgstr[1] "trífidos"
+msgstr[2] "trífidos"
#. ~ Description for {'str': 'triffid'}
#: data/json/monsters/triffid.json
@@ -128388,9 +128673,9 @@ msgstr ""
#: data/json/monsters/triffid.json
msgid "triffid queen"
msgid_plural "triffid queens"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "trífido reina"
+msgstr[1] "trífidos reina"
+msgstr[2] "trífidos reina"
#. ~ Description for {'str': 'triffid queen'}
#: data/json/monsters/triffid.json
@@ -128406,9 +128691,9 @@ msgstr ""
#: data/json/monsters/triffid.json
msgid "vine beast"
msgid_plural "vine beasts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bestia enredadera"
+msgstr[1] "bestias enredaderas"
+msgstr[2] "bestias enredaderas"
#. ~ Description for {'str': 'vine beast'}
#: data/json/monsters/triffid.json
@@ -128424,9 +128709,9 @@ msgstr ""
#: data/json/monsters/triffid.json
msgid "fungal fighter"
msgid_plural "fungal fighters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "guerrero fúngico"
+msgstr[1] "guerreros fúngicos"
+msgstr[2] "guerreros fúngicos"
#. ~ Description for {'str': 'fungal fighter'}
#: data/json/monsters/triffid.json
@@ -128442,9 +128727,9 @@ msgstr ""
#: data/json/monsters/triffid.json
msgid "triffid flower"
msgid_plural "triffid flowers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "trífido flor"
+msgstr[1] "trífidos flor"
+msgstr[2] "trífidos flor"
#. ~ Description for {'str': 'triffid flower'}
#: data/json/monsters/triffid.json
@@ -128458,9 +128743,9 @@ msgstr ""
#: data/mods/alt_map_key/overmap_terrain.json
msgid "triffid heart"
msgid_plural "triffid hearts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "trífido corazón"
+msgstr[1] "trífidos corazón"
+msgstr[2] "trífidos corazón"
#. ~ Description for {'str': 'triffid heart'}
#: data/json/monsters/triffid.json
@@ -128474,9 +128759,9 @@ msgstr ""
#: data/json/monsters/turrets.json
msgid "milspec searchlight"
msgid_plural "milspec searchlights"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "foco reflector milspec"
+msgstr[1] "focos reflectores milspec"
+msgstr[2] "focos reflectores milspec"
#. ~ Description for {'str': 'milspec searchlight'}
#: data/json/monsters/turrets.json
@@ -128493,9 +128778,9 @@ msgstr ""
#: data/mods/No_Hope/monsters.json
msgid "laser turret"
msgid_plural "laser turrets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "torreta láser"
+msgstr[1] "torretas láser"
+msgstr[2] "torretas láser"
#. ~ Description for {'str': 'laser turret'}
#: data/json/monsters/turrets.json
@@ -128588,9 +128873,9 @@ msgstr ""
#: data/mods/Modular_Turrets/monster_override.json
msgid "eyebot"
msgid_plural "eyebots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "ojobot"
+msgstr[1] "ojobots"
+msgstr[2] "ojobots"
#. ~ Description for {'str': 'eyebot'}
#: data/json/monsters/utility_bot.json
@@ -128638,9 +128923,9 @@ msgstr ""
#: data/json/monsters/utility_bot.json
msgid "cleaner bot"
msgid_plural "cleaner bots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "robot de limpieza"
+msgstr[1] "robots de limpieza"
+msgstr[2] "robots de limpieza"
#. ~ Description for {'str': 'cleaner bot'}
#: data/json/monsters/utility_bot.json
@@ -128671,9 +128956,9 @@ msgstr ""
#: data/json/monsters/utility_bot.json
msgid "miner bot"
msgid_plural "miner bots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "robot anti-minas"
+msgstr[1] "robots anti-minas"
+msgstr[2] "robots anti-minas"
#. ~ Description for {'str': 'miner bot'}
#: data/json/monsters/utility_bot.json
@@ -128703,9 +128988,9 @@ msgstr ""
#: data/json/monsters/zed-animal.json
msgid "jawed terror"
msgid_plural "jawed terrors"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "terror dentado"
+msgstr[1] "terrores dentados"
+msgstr[2] "terrores dentados"
#. ~ Description for {'str': 'jawed terror'}
#: data/json/monsters/zed-animal.json
@@ -128719,9 +129004,9 @@ msgstr ""
#: data/json/monsters/zed-animal.json
msgid "zombie dog"
msgid_plural "zombie dogs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "perro zombi"
+msgstr[1] "perros zombis"
+msgstr[2] "perros zombis"
#. ~ Description for {'str': 'zombie dog'}
#: data/json/monsters/zed-animal.json
@@ -128735,9 +129020,9 @@ msgstr ""
#: data/json/monsters/zed-animal.json
msgid "skeletal dog"
msgid_plural "skeletal dogs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "perro esquelético"
+msgstr[1] "perros esqueléticos"
+msgstr[2] "perros esqueléticos"
#. ~ Description for {'str': 'skeletal dog'}
#: data/json/monsters/zed-animal.json
@@ -128755,9 +129040,9 @@ msgstr ""
#: data/json/monsters/zed-animal.json
msgid "Z-9"
msgid_plural "Z-9s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Z-9"
+msgstr[1] "Z-9s"
+msgstr[2] "Z-9s"
#. ~ Description for {'str': 'Z-9'}
#: data/json/monsters/zed-animal.json
@@ -128771,9 +129056,9 @@ msgstr ""
#: data/json/monsters/zed-animal.json
msgid "rot-weiler"
msgid_plural "rot-weilers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rot-weiler"
+msgstr[1] "rot-weilers"
+msgstr[2] "rot-weilers"
#. ~ Description for {'str': 'rot-weiler'}
#: data/json/monsters/zed-animal.json
@@ -128785,9 +129070,9 @@ msgstr ""
#: data/json/monsters/zed-animal.json
msgid "grim howler"
msgid_plural "grim howlers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "aullador sombrío"
+msgstr[1] "aulladores sombríos"
+msgstr[2] "aulladores sombríos"
#. ~ Description for {'str': 'grim howler'}
#: data/json/monsters/zed-animal.json
@@ -128801,9 +129086,9 @@ msgstr ""
#: data/json/monsters/zed-animal.json
msgid "zombear"
msgid_plural "zombears"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "oso zombi"
+msgstr[1] "osos zombis"
+msgstr[2] "osos zombis"
#. ~ Description for {'str': 'zombear'}
#: data/json/monsters/zed-animal.json
@@ -128817,9 +129102,9 @@ msgstr ""
#: data/json/monsters/zed-animal.json
msgid "festering boar"
msgid_plural "festering boars"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "jabalí podrido"
+msgstr[1] "jabalís podridos"
+msgstr[2] "jabalís podridos"
#. ~ Description for {'str': 'festering boar'}
#: data/json/monsters/zed-animal.json
@@ -128850,9 +129135,9 @@ msgstr ""
#: data/json/monsters/zed-animal.json
msgid "antlered horror"
msgid_plural "antlered horrors"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "horror con cuernos"
+msgstr[1] "horrores con cuernos"
+msgstr[2] "horrores con cuernos"
#. ~ Description for {'str': 'antlered horror'}
#: data/json/monsters/zed-animal.json
@@ -128870,9 +129155,9 @@ msgstr ""
#: data/json/monsters/zed-animal.json
msgid "decayed pouncer"
msgid_plural "decayed pouncers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "saltador putrefacto"
+msgstr[1] "saltadores putrefactos"
+msgstr[2] "saltadores putrefactos"
#. ~ Description for {'str': 'decayed pouncer'}
#: data/json/monsters/zed-animal.json
@@ -128886,9 +129171,9 @@ msgstr ""
#: data/json/monsters/zed-classic.json
msgid "scarred zombie"
msgid_plural "scarred zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi cicatrizado"
+msgstr[1] "zombis cicatrizados"
+msgstr[2] "zombis cicatrizados"
#. ~ Description for {'str': 'scarred zombie'}
#: data/json/monsters/zed-classic.json
@@ -128897,13 +129182,6 @@ msgid ""
"envelope of scar tissue."
msgstr ""
-#: data/json/monsters/zed-classic.json data/json/npcs/talk_tags.json
-msgid "zombie"
-msgid_plural "zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
#. ~ Description for {'str': 'zombie'}
#: data/json/monsters/zed-classic.json
msgid ""
@@ -128916,9 +129194,9 @@ msgstr ""
#: data/json/monsters/zed-classic.json
msgid "zombie cop"
msgid_plural "zombie cops"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi policía"
+msgstr[1] "zombis policías"
+msgstr[2] "zombis policías"
#. ~ Description for {'str': 'zombie cop'}
#: data/json/monsters/zed-classic.json
@@ -128931,9 +129209,9 @@ msgstr ""
#: data/json/monsters/zed-classic.json
msgid "crawling zombie"
msgid_plural "crawling zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi arrastrador"
+msgstr[1] "zombis arrastradores"
+msgstr[2] "zombis arrastradores"
#. ~ Description for {'str': 'crawling zombie'}
#: data/json/monsters/zed-classic.json
@@ -128947,9 +129225,9 @@ msgstr ""
#: data/json/monsters/zed-classic.json
msgid "zombie dancer"
msgid_plural "zombie dancers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi bailarín"
+msgstr[1] "zombis bailarines"
+msgstr[2] "zombis bailarines"
#. ~ Description for {'str': 'zombie dancer'}
#: data/json/monsters/zed-classic.json
@@ -128971,9 +129249,9 @@ msgstr ""
#: data/json/monsters/zed-classic.json
msgid "fat zombie"
msgid_plural "fat zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi gordo"
+msgstr[1] "zombis gordos"
+msgstr[2] "zombis gordos"
#. ~ Description for {'str': 'fat zombie'}
#: data/json/monsters/zed-classic.json
@@ -128987,9 +129265,9 @@ msgstr ""
#: data/json/monsters/zed-classic.json
msgid "firefighter zombie"
msgid_plural "firefighter zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi bombero"
+msgstr[1] "zombis bomberos"
+msgstr[2] "zombis bomberos"
#. ~ Description for {'str': 'firefighter zombie'}
#: data/json/monsters/zed-classic.json
@@ -129004,9 +129282,9 @@ msgstr ""
#: data/json/monsters/zed-classic.json
msgid "hazmat zombie"
msgid_plural "hazmat zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi con materiales peligrosos"
+msgstr[1] "zombis con materiales peligrosos"
+msgstr[2] "zombis con materiales peligrosos"
#. ~ Description for {'str': 'hazmat zombie'}
#: data/json/monsters/zed-classic.json
@@ -129020,9 +129298,9 @@ msgstr ""
#: data/json/monsters/zed-classic.json
msgid "decayed zombie"
msgid_plural "decayed zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi deteriorado"
+msgstr[1] "zombis deteriorados"
+msgstr[2] "zombis deteriorados"
#. ~ Description for {'str': 'decayed zombie'}
#: data/json/monsters/zed-classic.json
@@ -129050,9 +129328,9 @@ msgstr ""
#: data/json/monsters/zed-classic.json
msgid "tough zombie"
msgid_plural "tough zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi fuerte"
+msgstr[1] "zombis fuertes"
+msgstr[2] "zombis fuertes"
#. ~ Description for {'str': 'tough zombie'}
#: data/json/monsters/zed-classic.json
@@ -129092,9 +129370,9 @@ msgstr ""
#: data/json/monsters/zed_acid.json
msgid "acidic zombie"
msgid_plural "acidic zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi ácido"
+msgstr[1] "zombis ácidos"
+msgstr[2] "zombis ácidos"
#. ~ Description for {'str': 'acidic zombie'}
#: data/json/monsters/zed_acid.json
@@ -129109,9 +129387,9 @@ msgstr ""
#: data/json/monsters/zed_acid.json
msgid "corrosive zombie"
msgid_plural "corrosive zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi corrosivo"
+msgstr[1] "zombis corrosivos"
+msgstr[2] "zombis corrosivos"
#. ~ Description for {'str': 'corrosive zombie'}
#: data/json/monsters/zed_acid.json
@@ -129132,9 +129410,9 @@ msgstr "¡El zombi corrosivo escupe una pegote de ácido!"
#: data/json/monsters/zed_acid.json
msgid "spitter zombie"
msgid_plural "spitter zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi escupidor"
+msgstr[1] "zombis escupidores"
+msgstr[2] "zombis escupidores"
#. ~ Description for {'str': 'spitter zombie'}
#: data/json/monsters/zed_acid.json
@@ -129184,9 +129462,9 @@ msgstr ""
#: data/json/monsters/zed_burned.json
msgid "fiend"
msgid_plural "fiends"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "diablillo"
+msgstr[1] "diablillos"
+msgstr[2] "diablillos"
#. ~ Description for {'str': 'fiend'}
#: data/json/monsters/zed_burned.json
@@ -129334,9 +129612,9 @@ msgstr ""
#: data/json/monsters/zed_electric.json
msgid "shocker brute"
msgid_plural "shocker brutes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "shocker bruto"
+msgstr[1] "shockers bruto"
+msgstr[2] "shockers bruto"
#. ~ Description for {'str': 'shocker brute'}
#: data/json/monsters/zed_electric.json
@@ -129353,9 +129631,9 @@ msgstr ""
#: data/mods/CrazyCataclysm/crazy_monsters.json
msgid "shocker zombie"
msgid_plural "shocker zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi cargado"
+msgstr[1] "zombis cargados"
+msgstr[2] "zombis cargados"
#. ~ Description for {'str': 'shocker zombie'}
#: data/json/monsters/zed_electric.json
@@ -129402,9 +129680,9 @@ msgstr ""
#: data/json/monsters/zed_explosive.json
msgid "boomer"
msgid_plural "boomers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "boomer"
+msgstr[1] "boomers"
+msgstr[2] "boomers"
#. ~ Description for {'str': 'boomer'}
#: data/json/monsters/zed_explosive.json
@@ -129447,9 +129725,9 @@ msgstr ""
#: data/json/monsters/zed_explosive.json
msgid "bloated zombie"
msgid_plural "bloated zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi hinchado"
+msgstr[1] "zombis hinchados"
+msgstr[2] "zombis hinchados"
#. ~ Description for {'str': 'bloated zombie'}
#: data/json/monsters/zed_explosive.json
@@ -129498,9 +129776,9 @@ msgstr ""
#: data/json/monsters/zed_fusion.json
msgid "crawler"
msgid_plural "crawlers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "arrastrador"
+msgstr[1] "arrastradores"
+msgstr[2] "arrastradores"
#. ~ Description for {'str': 'crawler'}
#: data/json/monsters/zed_fusion.json
@@ -129609,9 +129887,9 @@ msgstr ""
#: data/json/monsters/zed_lab.json
msgid "zombie scientist"
msgid_plural "zombie scientists"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "científico zombi"
+msgstr[1] "científicos zombis"
+msgstr[2] "científicos zombis"
#. ~ Description for {'str': 'zombie scientist'}
#: data/json/monsters/zed_lab.json
@@ -129720,9 +129998,9 @@ msgstr ""
#: data/json/monsters/zed_misc.json
msgid "zombie brute"
msgid_plural "zombie brutes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi bruto"
+msgstr[1] "zombis brutos"
+msgstr[2] "zombis brutos"
#. ~ Description for {'str': 'zombie brute'}
#: data/json/monsters/zed_misc.json
@@ -129735,9 +130013,9 @@ msgstr ""
#: data/json/monsters/zed_misc.json
msgid "zombie wrestler"
msgid_plural "zombie wrestlers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi luchador"
+msgstr[1] "zombis luchadores"
+msgstr[2] "zombis luchadores"
#. ~ Description for {'str': 'zombie wrestler'}
#: data/json/monsters/zed_misc.json
@@ -129751,9 +130029,9 @@ msgstr ""
#: data/json/monsters/zed_misc.json
msgid "zombie nightstalker"
msgid_plural "zombie nightstalkers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi acosador nocturno"
+msgstr[1] "zombis acosadores nocturnos"
+msgstr[2] "zombis acosadores nocturnos"
#. ~ Description for {'str': 'zombie nightstalker'}
#: data/json/monsters/zed_misc.json
@@ -129783,9 +130061,9 @@ msgstr ""
#: data/json/monsters/zed_misc.json
msgid "grabber zombie"
msgid_plural "grabber zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi agarrador"
+msgstr[1] "zombis agarradores"
+msgstr[2] "zombis agarradores"
#. ~ Description for {'str': 'grabber zombie'}
#: data/json/monsters/zed_misc.json
@@ -129800,9 +130078,9 @@ msgstr ""
#: data/json/monsters/zed_misc.json
msgid "grappler zombie"
msgid_plural "grappler zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi aferrador"
+msgstr[1] "zombis aferradores"
+msgstr[2] "zombis aferradores"
#. ~ Description for {'str': 'grappler zombie'}
#: data/json/monsters/zed_misc.json
@@ -129841,9 +130119,9 @@ msgstr ""
#: data/json/monsters/zed_misc.json
msgid "zombie hulk"
msgid_plural "zombie hulks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi hulk"
+msgstr[1] "zombis hulk"
+msgstr[2] "zombis hulk"
#. ~ Description for {'str': 'zombie hulk'}
#: data/json/monsters/zed_misc.json
@@ -129874,9 +130152,9 @@ msgstr ""
#: data/json/monsters/zed_misc.json
msgid "Thriller"
msgid_plural "Thrillers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Thriller"
+msgstr[1] "Thrillers"
+msgstr[2] "Thrillers"
#. ~ Description for {'str': 'Thriller'}
#: data/json/monsters/zed_misc.json
@@ -129911,9 +130189,9 @@ msgstr ""
#: data/json/monsters/zed_misc.json
msgid "zombie master"
msgid_plural "zombie masters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "maestro zombi"
+msgstr[1] "maestros zombis"
+msgstr[2] "maestros zombis"
#. ~ Description for {'str': 'zombie master'}
#: data/json/monsters/zed_misc.json
@@ -129934,9 +130212,9 @@ msgstr ""
#: data/json/monsters/zed_misc.json
msgid "zombie necromancer"
msgid_plural "zombie necromancers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi nigromante"
+msgstr[1] "zombis nigromantes"
+msgstr[2] "zombis nigromantes"
#. ~ Description for {'str': 'zombie necromancer'}
#: data/json/monsters/zed_misc.json
@@ -130040,9 +130318,9 @@ msgstr ""
#: data/json/monsters/zed_misc.json
msgid "shrieker zombie"
msgid_plural "shrieker zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi aullador"
+msgstr[1] "zombis aulladores"
+msgstr[2] "zombis aulladores"
#. ~ Description for {'str': 'shrieker zombie'}
#: data/json/monsters/zed_misc.json
@@ -130056,9 +130334,9 @@ msgstr ""
#: data/json/monsters/zed_misc.json
msgid "skull zombie"
msgid_plural "skull zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi calavera"
+msgstr[1] "zombis calavera"
+msgstr[2] "zombis calavera"
#. ~ Description for {'str': 'skull zombie'}
#: data/json/monsters/zed_misc.json
@@ -130073,9 +130351,9 @@ msgstr ""
#: data/json/monsters/zed_misc.json
msgid "smoker zombie"
msgid_plural "smoker zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi humeante"
+msgstr[1] "zombis humeantes"
+msgstr[2] "zombis humeantes"
#. ~ Description for {'str': 'smoker zombie'}
#: data/json/monsters/zed_misc.json
@@ -130089,9 +130367,9 @@ msgstr ""
#: data/json/monsters/zed_misc.json
msgid "swimmer zombie"
msgid_plural "swimmer zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi nadador"
+msgstr[1] "zombis nadadores"
+msgstr[2] "zombis nadadores"
#. ~ Description for {'str': 'swimmer zombie'}
#: data/json/monsters/zed_misc.json
@@ -130105,9 +130383,9 @@ msgstr ""
#: data/json/monsters/zed_misc.json
msgid "zombie technician"
msgid_plural "zombie technicians"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi técnico"
+msgstr[1] "zombis técnicos"
+msgstr[2] "zombis técnicos"
#. ~ Description for {'str': 'zombie technician'}
#: data/json/monsters/zed_misc.json
@@ -130167,9 +130445,9 @@ msgstr ""
#: data/json/monsters/zed_radiation.json
msgid "charred nightmare"
msgid_plural "charred nightmares"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pesadilla chamuscada"
+msgstr[1] "pesadillas chamuscadas"
+msgstr[2] "pesadillas chamuscadas"
#. ~ Description for {'str': 'charred nightmare'}
#: data/json/monsters/zed_radiation.json
@@ -130184,9 +130462,9 @@ msgstr ""
#: data/json/monsters/zed_radiation.json
msgid "irradiated wanderer"
msgid_plural "irradiated wanderers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "errante irradiado"
+msgstr[1] "errantes irradiados"
+msgstr[2] "errantes irradiados"
#. ~ Description for {'str': 'irradiated wanderer'}
#: data/json/monsters/zed_radiation.json
@@ -130201,9 +130479,9 @@ msgstr ""
#: data/json/monsters/zed_skeletal.json
msgid "skeleton"
msgid_plural "skeletons"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "esqueleto"
+msgstr[1] "esqueletos"
+msgstr[2] "esqueletos"
#. ~ Description for {'str': 'skeleton'}
#: data/json/monsters/zed_skeletal.json
@@ -130271,9 +130549,9 @@ msgstr ""
#: data/json/monsters/zed_soldiers.json data/mods/No_Hope/monsters.json
msgid "zombie soldier"
msgid_plural "zombie soldiers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "soldado zombi"
+msgstr[1] "soldados zombis"
+msgstr[2] "soldados zombis"
#. ~ Description for {'str': 'zombie soldier'}
#: data/json/monsters/zed_soldiers.json data/mods/No_Hope/monsters.json
@@ -130438,9 +130716,9 @@ msgstr ""
#: data/json/monsters/zed_soldiers.json
msgid "zombie bio-operator"
msgid_plural "zombie bio-operators"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi bio-operador"
+msgstr[1] "zombis bio-operador"
+msgstr[2] "zombis bio-operador"
#. ~ Description for {'str': 'zombie bio-operator'}
#: data/json/monsters/zed_soldiers.json
@@ -130468,9 +130746,9 @@ msgstr ""
#: data/json/monsters/zed_survivor.json
msgid "survivor zombie"
msgid_plural "survivor zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zombi superviviente"
+msgstr[1] "zombis supervivientes"
+msgstr[2] "zombis supervivientes"
#. ~ Description for {'str': 'survivor zombie'}
#: data/json/monsters/zed_survivor.json
@@ -139993,7 +140271,8 @@ msgid "I'll kill you if you don't."
msgstr "Te voy a matar si no lo hacés."
#: data/json/npcs/TALK_COMMON_OTHER.json
-#: data/json/npcs/TALK_TRUE_FOODPERSON.json src/iuse.cpp
+#: data/json/npcs/TALK_TRUE_FOODPERSON.json
+#: data/mods/smart_house_remotes/main.lua src/iuse.cpp
msgid "Nevermind."
msgstr "Olvidate."
@@ -148245,10 +148524,6 @@ msgstr "monstruo"
msgid "demon"
msgstr "demonio"
-#: data/json/npcs/talk_tags.json
-msgid "horror"
-msgstr "horror"
-
#: data/json/npcs/talk_tags.json
msgid "indescribable beast"
msgstr "bestia indescifrable"
@@ -162544,6 +162819,16 @@ msgid ""
"coming no further. Go away."
msgstr ""
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"I was sent here by the traders at the refugee center. They told me to "
+"deliver this hard drive to you."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "The traders also mentioned you were looking for help."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "Wait! What??"
msgstr ""
@@ -162580,6 +162865,20 @@ msgstr ""
msgid "Alright, I'm leaving."
msgstr ""
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"Understood. Please drop the drive on the box embedded beneath the intercom."
+" You are welcome to leave afterwards."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "[Do as the Intercom Says]"
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "Didn't bring the hard drive now, let me return with it."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "No. Now leave."
msgstr ""
@@ -166492,9 +166791,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "RDX sand bomb"
msgid_plural "RDX sand bombs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bomba de RDX y arena"
+msgstr[1] "bombas de RDX y arena"
+msgstr[2] "bombas de RDX y arena"
#. ~ Use action msg for {'str': 'RDX sand bomb'}.
#: data/json/obsoletion/items.json
@@ -166515,9 +166814,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "active RDX sand bomb"
msgid_plural "active RDX sand bombs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bomba encendida de RDX y arena"
+msgstr[1] "bombas encendidas de RDX y arena"
+msgstr[2] "bombas encendidas de RDX y arena"
#. ~ Description for {'str': 'active RDX sand bomb'}
#: data/json/obsoletion/items.json
@@ -167226,9 +167525,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "plastic fork"
msgid_plural "plastic forks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tenedor de plástico"
+msgstr[1] "tenedores de plástico"
+msgstr[2] "tenedores de plástico"
#. ~ Description for {'str': 'plastic fork'}
#: data/json/obsoletion/items.json
@@ -167242,9 +167541,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "plastic spoon"
msgid_plural "plastic spoons"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cuchara de plástico"
+msgstr[1] "cucharas de plástico"
+msgstr[2] "cucharas de plástico"
#. ~ Description for {'str': 'plastic spoon'}
#: data/json/obsoletion/items.json
@@ -167292,9 +167591,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "plastic knife"
msgid_plural "plastic knives"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cuchillo de plástico"
+msgstr[1] "cuchillos de plástico"
+msgstr[2] "cuchillos de plástico"
#. ~ Description for {'str': 'plastic knife', 'str_pl': 'plastic knives'}
#: data/json/obsoletion/items.json
@@ -169464,9 +169763,9 @@ msgstr "¿Ya conseguiste la vacuna para la gripe?"
#: data/json/obsoletion/monsters.json
msgid "centipede"
msgid_plural "centipedes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "ciempiés"
+msgstr[1] "ciempiés"
+msgstr[2] "ciempiés"
#. ~ Description for {'str': 'centipede'}
#: data/json/obsoletion/monsters.json
@@ -169479,9 +169778,9 @@ msgstr ""
#: data/json/obsoletion/monsters.json
msgid "deer mouse"
msgid_plural "deer mouses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "arce"
+msgstr[1] "arces"
+msgstr[2] "arces"
#. ~ Description for {'str': 'deer mouse'}
#: data/json/obsoletion/monsters.json
@@ -169512,9 +169811,9 @@ msgstr ""
#: data/json/obsoletion/monsters.json
msgid "bull frog"
msgid_plural "bull frogs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rana toro"
+msgstr[1] "ranas toro"
+msgstr[2] "ranas toro"
#. ~ Description for {'str': 'bull frog'}
#: data/json/obsoletion/monsters.json
@@ -169528,9 +169827,9 @@ msgstr ""
#: data/json/obsoletion/monsters.json
msgid "mosquito"
msgid_plural "mosquitos"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mosquito"
+msgstr[1] "mosquitos"
+msgstr[2] "mosquitos"
#. ~ Description for {'str': 'mosquito'}
#: data/json/obsoletion/monsters.json
@@ -169544,9 +169843,9 @@ msgstr ""
#: data/json/obsoletion/monsters.json
msgid "shrew"
msgid_plural "shrews"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "musaraña"
+msgstr[1] "musarañas"
+msgstr[2] "musarañas"
#. ~ Description for {'str': 'shrew'}
#: data/json/obsoletion/monsters.json
@@ -169561,9 +169860,9 @@ msgstr ""
#: data/json/obsoletion/monsters.json
msgid "slug"
msgid_plural "slugs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "babosa"
+msgstr[1] "babosas"
+msgstr[2] "babosas"
#. ~ Description for {'str': 'slug'}
#: data/json/obsoletion/monsters.json
@@ -169579,9 +169878,9 @@ msgstr ""
#: data/json/obsoletion/monsters.json
msgid "jumping spider"
msgid_plural "jumping spiders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "araña saltarina"
+msgstr[1] "arañas saltarinas"
+msgstr[2] "arañas saltarinas"
#. ~ Description for {'str': 'jumping spider'}
#: data/json/obsoletion/monsters.json
@@ -169597,9 +169896,9 @@ msgstr ""
#: data/json/obsoletion/monsters.json
msgid "trapdoor spider"
msgid_plural "trapdoor spiders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "araña tapadera"
+msgstr[1] "arañas tapadera"
+msgstr[2] "arañas tapadera"
#. ~ Description for {'str': 'trapdoor spider'}
#: data/json/obsoletion/monsters.json
@@ -169614,9 +169913,9 @@ msgstr ""
#: data/json/obsoletion/monsters.json
msgid "black widow spider"
msgid_plural "black widow spiders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "viuda negra"
+msgstr[1] "viudas negras"
+msgstr[2] "viudas negras"
#. ~ Description for {'str': 'black widow spider'}
#: data/json/obsoletion/monsters.json
@@ -169630,9 +169929,9 @@ msgstr ""
#: data/json/obsoletion/monsters.json
msgid "wolf spider"
msgid_plural "wolf spiders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "araña lobo"
+msgstr[1] "arañas lobo"
+msgstr[2] "arañas lobo"
#. ~ Description for {'str': 'wolf spider'}
#: data/json/obsoletion/monsters.json
@@ -169646,9 +169945,9 @@ msgstr ""
#: data/json/obsoletion/monsters.json
msgid "wasp"
msgid_plural "wasps"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "avispa"
+msgstr[1] "avispas"
+msgstr[2] "avispas"
#. ~ Description for {'str': 'wasp'}
#: data/json/obsoletion/monsters.json
@@ -169701,9 +170000,9 @@ msgstr ""
#: data/mods/No_Hope/monsters.json
msgid "chicken walker"
msgid_plural "chicken walkers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mecha-gallina"
+msgstr[1] "mecha-gallinas"
+msgstr[2] "mecha-gallinas"
#. ~ Description for {'str': 'chicken walker'}
#. ~ Description for chicken walker
@@ -192820,9 +193119,9 @@ msgstr ""
#: data/mods/Aftershock/items/items.json
msgid "titanium implant"
msgid_plural "titanium implants"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "implante de titanio"
+msgstr[1] "implantes de titanio"
+msgstr[2] "implantes de titanio"
#. ~ Description for {'str': 'titanium implant'}
#: data/mods/Aftershock/items/items.json
@@ -192837,9 +193136,9 @@ msgstr ""
#: data/mods/Aftershock/items/items.json
msgid "titanium tooth"
msgid_plural "titanium tooths"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "diente de titanio"
+msgstr[1] "dientes de titanio"
+msgstr[2] "dientes de titanio"
#. ~ Description for {'str': 'titanium tooth'}
#: data/mods/Aftershock/items/items.json
@@ -195088,6 +195387,14 @@ msgid ""
"constant jet of warm air to heat an enclosed space."
msgstr ""
+#: data/mods/Aftershock/mobs/species.json
+msgid "intelligent animal"
+msgid_plural "intelligent animals"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'intelligent animal'}
#: data/mods/Aftershock/mobs/species.json
msgid "an intelligent animal created by man before the Cataclysm"
msgstr ""
@@ -195172,9 +195479,9 @@ msgstr ""
#: data/mods/Aftershock/mobs/zombies.json
msgid "headless horror"
msgid_plural "headless horrors"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "horror decapitado"
+msgstr[1] "horrores decapitados"
+msgstr[2] "horrores decapitados"
#. ~ Description for {'str': 'headless horror'}
#: data/mods/Aftershock/mobs/zombies.json
@@ -205377,6 +205684,14 @@ msgstr ""
msgid "DinoLab Operating Theater Access Control"
msgstr ""
+#: data/mods/DinoMod/monsters/dinosaur.json
+msgid "dinosaur"
+msgid_plural "dinosaurs"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'dinosaur'}
#: data/mods/DinoMod/monsters/dinosaur.json
msgid "a dinosaur"
msgstr ""
@@ -217501,16 +217816,16 @@ msgstr ""
#: data/mods/Generic_Guns/vehicles/ammo_redefine_hacks/temp_magazine_json_load_hack.json
msgid "HK417 magazine"
msgid_plural "HK417 magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cargador HK417"
+msgstr[1] "cargadores HK417"
+msgstr[2] "cargadores HK417"
#: data/mods/Generic_Guns/vehicles/ammo_redefine_hacks/temp_magazine_json_load_hack.json
msgid "HK417 compact magazine"
msgid_plural "HK417 compact magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cargador compacto HK417"
+msgstr[1] "cargadores compacto HK417"
+msgstr[2] "cargadores compacto HK417"
#: data/mods/Generic_Guns/vehicles/ammo_redefine_hacks/temp_magazine_json_load_hack.json
msgid "HK417 makeshift magazine"
@@ -218313,6 +218628,11 @@ msgstr ""
msgid "RUNES"
msgstr ""
+#. ~ Crafting recipes subcategory of 'ENCHANTED' category
+#: data/mods/Magiclysm/qualities.json
+msgid "ENCHANTING"
+msgstr ""
+
#: data/mods/Magiclysm/qualities.json
msgid "mana focusing"
msgstr ""
@@ -218448,6 +218768,27 @@ msgctxt "start_name"
msgid "Wizard's Retreat Vacation"
msgstr ""
+#: data/mods/Magiclysm/species.json
+msgid "magical beast"
+msgid_plural "magical beasts"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "dragon"
+msgid_plural "dragons"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "lizardfolk"
+msgid_plural "lizardfolk"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/Magiclysm/start_locations.json
msgid "Wizard's Secret Basement Study"
msgstr ""
@@ -218624,6 +218965,42 @@ msgid ""
"lights."
msgstr ""
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Bless"
+msgstr ""
+
+#. ~ Description for {'str': 'Bless'}
+#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "A spell of blessing that gives you energy and boosts your abilities."
+msgstr ""
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Holy Blade"
+msgstr ""
+
+#. ~ Description for Holy Blade
+#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
+#. Holy Blade'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "This blade of light will cut through any evil it makes contact with!"
+msgstr ""
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Spiritual Armor"
+msgstr ""
+
+#. ~ Description for Spiritual Armor
+#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
+#. of Spiritual Armor'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid ""
+"Evil will not make it through your defenses if your faith is strong enough!"
+msgstr ""
+
#: data/mods/Magiclysm/Spells/biomancer.json
msgid "Cure Light Wounds"
msgstr ""
@@ -220087,17 +220464,6 @@ msgid ""
"harmless."
msgstr ""
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Bless"
-msgstr ""
-
-#. ~ Description for {'str': 'Bless'}
-#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "A spell of blessing that gives you energy and boosts your abilities."
-msgstr ""
-
#: data/mods/Magiclysm/Spells/technomancer.json
#: data/mods/Magiclysm/effects/effects.json
msgid "Invisibility"
@@ -220115,31 +220481,6 @@ msgstr ""
msgid "To the outside world, your body fades away and you cease to exist!"
msgstr ""
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Holy Blade"
-msgstr ""
-
-#. ~ Description for Holy Blade
-#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
-#. Holy Blade'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "This blade of light will cut through any evil it makes contact with!"
-msgstr ""
-
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Spiritual Armor"
-msgstr ""
-
-#. ~ Description for Spiritual Armor
-#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
-#. of Spiritual Armor'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid ""
-"Evil will not make it through your defenses if your faith is strong enough!"
-msgstr ""
-
#: data/mods/Magiclysm/Spells/technomancer.json
msgid "Lamp"
msgstr ""
@@ -222478,16 +222819,16 @@ msgstr ""
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "cudgel +1"
msgid_plural "cudgel +1s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "garrote +1s"
+msgstr[1] "garrotes +1s"
+msgstr[2] "garrotes +1s"
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "cudgel +2"
msgid_plural "cudgel +2s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "garrote +2s"
+msgstr[1] "garrotes +2s"
+msgstr[2] "garrotes +2s"
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "quarterstaff +1"
@@ -222520,58 +222861,72 @@ msgstr[2] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "longsword +1"
msgid_plural "longsword +1s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "espada larga +1s"
+msgstr[1] "espadas largas +1s"
+msgstr[2] "espadas largas +1s"
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "longsword +2"
msgid_plural "longsword +2s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "espadas largas +1s"
+msgstr[1] "espadas largas +2s"
+msgstr[2] "espadas largas +2s"
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "sledge hammer +1"
msgid_plural "sledge hammer +1s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "maza +1s"
+msgstr[1] "mazas +1s"
+msgstr[2] "mazas +1s"
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "sledge hammer +2"
msgid_plural "sledge hammer +2s"
+msgstr[0] "maza +2s"
+msgstr[1] "mazas +2s"
+msgstr[2] "mazas +2s"
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "heavy sledge hammer +1"
+msgid_plural "heavy sledge hammers +1"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
-msgid "warhammer +1"
-msgid_plural "warhammer +1s"
+msgid "heavy sledge hammer +2"
+msgid_plural "heavy sledge hammers +2"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "warhammer +1"
+msgid_plural "warhammer +1s"
+msgstr[0] "martillo de guerra +1s"
+msgstr[1] "martillos de guerra +1s"
+msgstr[2] "martillos de guerra +1s"
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "warhammer +2"
msgid_plural "warhammer +2s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "martillo de guerra +2s"
+msgstr[1] "martillos de guerra +2s"
+msgstr[2] "martillos de guerra +2s"
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "bat +1"
msgid_plural "bat +1s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bate +1s"
+msgstr[1] "bates +1s"
+msgstr[2] "bates +1s"
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "bat +2"
msgid_plural "bat +2s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bate +2s"
+msgstr[1] "bates +2s"
+msgstr[2] "bates +2s"
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "aluminum bat +1"
@@ -222784,6 +223139,7 @@ msgstr[1] ""
msgstr[2] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +1"
msgid_plural "crowbar +1s"
msgstr[0] ""
@@ -222791,6 +223147,7 @@ msgstr[1] ""
msgstr[2] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +2"
msgid_plural "crowbar +2s"
msgstr[0] ""
@@ -222854,6 +223211,7 @@ msgstr[1] ""
msgstr[2] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +1"
msgid_plural "hunting knife +1s"
msgstr[0] ""
@@ -222861,6 +223219,7 @@ msgstr[1] ""
msgstr[2] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +2"
msgid_plural "hunting knife +2s"
msgstr[0] ""
@@ -223063,6 +223422,20 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +1"
+msgid_plural "lucerne hammers +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +2"
+msgid_plural "lucerne hammers +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "Biomancer spear"
msgid_plural "Biomancer spears"
@@ -223716,9 +224089,9 @@ msgstr ""
#: data/mods/Magiclysm/items/enchanted_rings.json
msgid "ring of protection +2"
msgid_plural "rings of protection +2"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de protección +2"
+msgstr[1] "anillos de protección +2"
+msgstr[2] "anillos de protección +2"
#. ~ Description for {'str': 'ring of protection +2', 'str_pl': 'rings of
#. protection +2'}
@@ -223731,9 +224104,9 @@ msgstr ""
#: data/mods/Magiclysm/items/enchanted_rings.json
msgid "ring of protection +4"
msgid_plural "rings of protection +4"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de protección +4"
+msgstr[1] "anillos de protección +4"
+msgstr[2] "anillos de protección +4"
#. ~ Description for {'str': 'ring of protection +4', 'str_pl': 'rings of
#. protection +4'}
@@ -223746,9 +224119,9 @@ msgstr ""
#: data/mods/Magiclysm/items/enchanted_rings.json
msgid "ring of protection +6"
msgid_plural "rings of protection +6"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de protección +6"
+msgstr[1] "anillos de protección +6"
+msgstr[2] "anillos de protección +6"
#. ~ Description for {'str': 'ring of protection +6', 'str_pl': 'rings of
#. protection +6'}
@@ -223761,9 +224134,9 @@ msgstr ""
#: data/mods/Magiclysm/items/enchanted_rings.json
msgid "ring of protection +8"
msgid_plural "rings of protection +8"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de protección +8"
+msgstr[1] "anillos de protección +8"
+msgstr[2] "anillos de protección +8"
#. ~ Description for {'str': 'ring of protection +8', 'str_pl': 'rings of
#. protection +8'}
@@ -223776,9 +224149,9 @@ msgstr ""
#: data/mods/Magiclysm/items/enchanted_tokens.json
msgid "magic token"
msgid_plural "magic tokens"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "token mágico"
+msgstr[1] "tokens mágicos"
+msgstr[2] "tokens mágicos"
#: data/mods/Magiclysm/items/enchanted_tokens.json
msgid "longsword token"
@@ -224011,6 +224384,90 @@ msgid ""
"turns into the item pictured on the front, in this case a crowbar."
msgstr ""
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +1"
+msgid_plural "bottle jacks +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +2"
+msgid_plural "bottle jacks +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +1"
+msgid_plural "scalpels +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +2"
+msgid_plural "scalpels +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +1"
+msgid_plural "butcher knives +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +2"
+msgid_plural "butcher knives +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +1"
+msgid_plural "meat cleavers +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +2"
+msgid_plural "meat cleavers +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +1"
+msgid_plural "carving knives +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +2"
+msgid_plural "carving knives +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +1"
+msgid_plural "butchering kits +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +2"
+msgid_plural "butchering kits +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/Magiclysm/items/enchanted_unarmed.json
msgid "cestus +1"
msgid_plural "cestus +1s"
@@ -225230,6 +225687,21 @@ msgstr ""
"fuego de un dragón en la tapa. Adentro, tiene muchas maneras de convertir la"
" piel y el pellejo de un monstruo en equipo de protección."
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid "Enchanter's Guidebook"
+msgid_plural "copies of Enchanter's Guidebooks"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': "Enchanter's Guidebook", 'str_pl': "copies of
+#. Enchanter's Guidebooks"}
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid ""
+"A hefty textbook on the theory and practice of magically strengthening "
+"weapons and tools."
+msgstr ""
+
#: data/mods/Magiclysm/items/spell_scrolls.json
msgid "Spell Scroll"
msgid_plural "Spell Scrolls"
@@ -225334,9 +225806,9 @@ msgstr[2] ""
#: data/mods/Magiclysm/items/spell_scrolls.json
msgid "Scroll of Summon Skeleton"
msgid_plural "Scrolls of Summon Skeleton"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Pergamino para Invocar Esqueleto"
+msgstr[1] "Pergaminos para Invocar Esqueletos"
+msgstr[2] "Pergaminos para Invocar Esqueletos"
#: data/mods/Magiclysm/items/spell_scrolls.json
msgid "Scroll of Summon Floating Disk"
@@ -226434,6 +226906,13 @@ msgid ""
"much more expensive."
msgstr ""
+#: data/mods/Magiclysm/monsters/demon_spider.json
+msgid "demon spider"
+msgid_plural "demon spiders"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid "demon spiderling"
msgid_plural "demon spiderlings"
@@ -226450,13 +226929,6 @@ msgid ""
"with venom."
msgstr ""
-#: data/mods/Magiclysm/monsters/demon_spider.json
-msgid "demon spider"
-msgid_plural "demon spiders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
#. ~ Description for demon spider
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid ""
@@ -229630,10 +230102,24 @@ msgid ""
"human candy! Are you a real monster? Will you be able to devour it all?\""
msgstr ""
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "marshmallow"
+msgid_plural "marshmallows"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "shlop."
msgstr ""
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "gummy"
+msgid_plural "gummies"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "pop."
msgstr ""
@@ -232142,6 +232628,15 @@ msgid ""
"city size set to 1 and spacing set to 8."
msgstr ""
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "SaveLoad Lua Test"
+msgstr ""
+
+#. ~ Description for SaveLoad Lua Test
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "Mod for testing Lua save/load API."
+msgstr ""
+
#: data/mods/sees_player_hitbutton/modinfo.json
msgid "sees-player icon, HitButton_iso"
msgstr ""
@@ -232164,6 +232659,79 @@ msgid ""
"retrodays tileset."
msgstr ""
+#: data/mods/smart_house_remotes/item.json
+msgid "smart house remote"
+msgid_plural "smart house remotes"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'smart house remote'}
+#: data/mods/smart_house_remotes/item.json
+msgid ""
+"A small remote with lcd display used to control garage doors and window "
+"curtains. Completely useless now, unless you manage to restore power to the"
+" house."
+msgstr ""
+
+#: data/mods/smart_house_remotes/iuse.json
+msgid "Control doors and shutters"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Open curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Close curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Raise garage door"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Lower garage door"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's not enough grid charge.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Low Current At Endpoint"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when player is too far away from the area.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Signal"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's nothing to activate.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Endpoints Available"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "The remote beeps quietly."
+msgstr ""
+
+#. ~ Title of the menu prompting player to select what to activate with the
+#. remote.
+#. Typically it's doors, garage doors or window curtains.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Select endpoint"
+msgstr ""
+
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Smart House Remotes"
+msgstr ""
+
+#. ~ Description for Smart House Remotes
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Add remotes for controlling garage doors and window curtains."
+msgstr ""
+
#: data/mods/speedydex/modinfo.json
msgid "SpeedyDex"
msgstr ""
@@ -233687,6 +234255,14 @@ msgstr "Act./Desact. Modo Debug"
msgid "Debug Menu"
msgstr "Modo Debug"
+#: data/raw/keybindings/keybindings.json
+msgid "Lua Console"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Reload Lua Code"
+msgstr ""
+
#: data/raw/keybindings/keybindings.json
msgid "View Scentmap"
msgstr "Ver Mapa de Olor"
@@ -234242,6 +234818,26 @@ msgstr ""
msgid "Add new page"
msgstr ""
+#: data/raw/keybindings/keybindings.json
+msgid "Edit command"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History up"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History down"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the top"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the bottom"
+msgstr ""
+
#: data/raw/keybindings/messages.json
msgid "Toggle wide display"
msgstr ""
@@ -234400,7 +234996,31 @@ msgstr "Establecer modos de torreta"
#: src/achievement.cpp
#, c-format
-msgid "Attain %s skill level of %i (%i/%i)."
+msgid "Kill at least %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Don't kill even a single %s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Kill no more than %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+msgid " (failed)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Attain skill level of %i in %s (%i/%i)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Stay at or below skill level of %i in %s (%i/%i)"
msgstr ""
#: src/achievement.cpp
@@ -240134,6 +240754,30 @@ msgstr "abcdefghijklmnopqrstuvwxyz"
msgid "に坂索トし荷測のンおク妙免イロコヤ梅棋厚れ表幌"
msgstr "に坂索トし荷測のンおク妙免イロコヤ梅棋厚れ表幌"
+#: src/catalua_console.cpp
+msgid "Press Ctrl+S to run script, press Esc to cancel"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press arrow keys to navigate text input"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to add new line"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to enter/edit command, Esc to quit"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Up/Down arrows to select from history"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press PgUp/PgDn/Home/End to scroll output window"
+msgstr ""
+
#: src/character.cpp src/debug_menu.cpp src/game.cpp src/iuse.cpp
#: src/npctrade.cpp
msgid "You"
@@ -245048,6 +245692,10 @@ msgstr "Información..."
msgid "Change [b]attery charge"
msgstr ""
+#: src/debug_menu.cpp
+msgid "Export [j]son template"
+msgstr ""
+
#: src/debug_menu.cpp
msgid "Vehicle…"
msgstr ""
@@ -245164,6 +245812,10 @@ msgstr "Salir a menú principal"
msgid "Player…"
msgstr "Jugador..."
+#: src/debug_menu.cpp
+msgid "Lua console"
+msgstr ""
+
#: src/debug_menu.cpp
msgid ""
"Debug Functions - Manipulate the fabric of reality!\n"
@@ -246037,6 +246689,10 @@ msgstr "Ahí no hay un vehículo."
msgid "By how much? (in kJ, negative to discharge)"
msgstr ""
+#: src/debug_menu.cpp
+msgid "JSON template written to debug.log"
+msgstr ""
+
#: src/dependency_tree.cpp
msgid "Missing Dependency(ies): "
msgstr ""
@@ -250495,21 +251151,19 @@ msgstr ""
#: src/game.cpp
#, c-format
-msgid "Stepping into that %1$s looks risky, but you enter anyway."
+msgid "Stepping into that %1$s looks risky. %2$s"
msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Run into it if you wish to enter "
-"anyway."
+msgid "But you enter anyway."
msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Crouch and move into it if you wish to"
-" enter anyway."
+msgid "Run into it if you wish to enter anyway."
+msgstr ""
+
+#: src/game.cpp
+msgid "Crouch and move into it if you wish to enter anyway."
msgstr ""
#: src/game.cpp
@@ -258661,6 +259315,11 @@ msgstr "¡Te sacan el/a %s de la mano!"
msgid "You try to feed the %s some %s, but it vanishes!"
msgstr "Intentás darle al/a %s de comer un poco de %s, ¡pero desaparece!"
+#: src/iuse.cpp
+#, c-format
+msgid "You reach for the %s, but it recoils away from you!"
+msgstr ""
+
#: src/iuse.cpp
msgid "You want to feed it the dog food, but it bites your fingers!"
msgstr "Querés darle la comida para perros, pero ¡te muerde los dedos!"
@@ -264623,6 +265282,11 @@ msgstr ""
msgid "Create World"
msgstr "Crear Mundo"
+#. ~ Marker for worlds that need Lua in game builds without Lua
+#: src/main_menu.cpp src/worldfactory.cpp
+msgid "Needs Lua!"
+msgstr ""
+
#: src/main_menu.cpp
msgid "Bugs? Suggestions? Use links in MOTD to report them."
msgstr "¿Bugs? ¿Sugerencias? Usá los links en MOTD para reportarlos."
@@ -264863,6 +265527,17 @@ msgstr ""
msgid "Unable to make graphics directory. Check permissions."
msgstr ""
+#: src/main_menu.cpp
+msgid ""
+"You are running x32 build of the game on a x64 operating system. This means"
+" the game will NOT be able to access all memory, and you may experience "
+"random out-of-memory crashes. Consider obtaining a x64 build of the game to"
+" avoid that, but if you *really* want to be running x32 build of the game "
+"for some reason (or don't have a choice), you may want to lower your memory "
+"usage by disabling tileset, soundpack and mods and increasing autosave "
+"frequency."
+msgstr ""
+
#: src/main_menu.cpp
msgid "Really quit?"
msgstr "¿Querés salir?"
@@ -264893,6 +265568,13 @@ msgstr "¿Seguro que querés borrar %s?"
msgid "Sorry, something went wrong."
msgstr "Perdón, algo no funcionó."
+#. ~ Error when attempting to load a world whose mods depend on Lua
+#. ~ on game build that doesn't have Lua. %s = world name.
+#: src/main_menu.cpp
+#, c-format
+msgid "%s needs game build with Lua support!"
+msgstr ""
+
#. ~ %s = world name
#: src/main_menu.cpp
#, c-format
@@ -268647,6 +269329,15 @@ msgstr[2] ""
msgid "Mod version"
msgstr "Versión de Mod"
+#: src/mod_manager_ui.cpp
+#, c-format
+msgid "%s: API version %s\n"
+msgstr ""
+
+#: src/mod_manager_ui.cpp
+msgid "Needs Lua"
+msgstr ""
+
#: src/mod_manager_ui.cpp
msgid "Mod info path"
msgstr ""
@@ -271666,13 +272357,6 @@ msgstr ""
msgid "Focus trends towards:"
msgstr "Enfocar las tendencias hacia:"
-#: src/mtype.cpp
-msgid "human"
-msgid_plural "humans"
-msgstr[0] "humano"
-msgstr[1] "humanos"
-msgstr[2] "humanos"
-
#: src/mutation.cpp
#, c-format
msgid "Your %s is pushed off!"
@@ -274323,6 +275007,14 @@ msgstr ""
msgid "Messages related to SDL, tiles, tilesets and sound."
msgstr ""
+#: src/options.cpp
+msgid "Lua"
+msgstr ""
+
+#: src/options.cpp
+msgid "Messages from Lua scripts."
+msgstr ""
+
#: src/options.cpp
msgid "General"
msgstr "General"
@@ -275534,6 +276226,16 @@ msgstr ""
"Es la cantidad de tiempo que dura la pausa entre los frames de una "
"animación, medido en ms."
+#: src/options.cpp
+msgid "Draw bullets as lines"
+msgstr ""
+
+#: src/options.cpp
+msgid ""
+"If true, bullets are drawn as lines of images, and the animation lasts only "
+"one frame."
+msgstr ""
+
#: src/options.cpp
msgid "Blinking effects speed"
msgstr ""
@@ -275613,64 +276315,77 @@ msgid "Font height"
msgstr "Altura de fuente de texto"
#: src/options.cpp
-msgid "Set the font height. Requires restart."
+msgid "Set the font height. Requires restart."
msgstr ""
+"Establece la altura de la fuente de texto. Requiere reiniciar el juego."
#: src/options.cpp
msgid "Font size"
msgstr "Tamaño de fuente de texto"
#: src/options.cpp
-msgid "Set the font size. Requires restart."
-msgstr ""
+msgid "Set the font size. Requires restart."
+msgstr "Establece el tamaño de fuente de texto. Requiere reiniciar el juego."
#: src/options.cpp
msgid "Map font width"
msgstr "Anchura de fuente de texto del mapa"
#: src/options.cpp
-msgid "Set the map font width. Requires restart."
+msgid "Set the map font width. Requires restart."
msgstr ""
+"Establece la anchura de la fuente de texto del mapa. Requiere reiniciar el "
+"juego."
#: src/options.cpp
msgid "Map font height"
msgstr "Altura de fuente de texto del mapa"
#: src/options.cpp
-msgid "Set the map font height. Requires restart."
+msgid "Set the map font height. Requires restart."
msgstr ""
+"Establece la altura de la fuente de texto del mapa. Requiere reiniciar el "
+"juego."
#: src/options.cpp
msgid "Map font size"
msgstr "Tamaño de fuente de texto del mapa"
#: src/options.cpp
-msgid "Set the map font size. Requires restart."
+msgid "Set the map font size. Requires restart."
msgstr ""
+"Establece el tamaño de fuente de texto del mapa. Requiere reiniciar el "
+"juego."
#: src/options.cpp
msgid "Overmap font width"
msgstr "Anchura de fuente de texto sobre el mapa"
#: src/options.cpp
-msgid "Set the overmap font width. Requires restart."
+msgid "Set the overmap font width. Requires restart."
msgstr ""
+"Establece la anchura de la fuente de texto sobre el mapa. Requiere reiniciar"
+" el juego."
#: src/options.cpp
msgid "Overmap font height"
msgstr "Altura de fuente de texto sobre el mapa"
#: src/options.cpp
-msgid "Set the overmap font height. Requires restart."
+msgid "Set the overmap font height. Requires restart."
msgstr ""
+"Establece la altura de la fuente de texto sobre el mapa. Requiere reiniciar "
+"el juego."
#: src/options.cpp
msgid "Overmap font size"
msgstr "Tamaño de fuente de texto sobre el mapa"
#: src/options.cpp
-msgid "Set the overmap font size. Requires restart."
+msgid "Set the overmap font size. Requires restart."
msgstr ""
+"Establece el tamaño de fuente de texto sobre el mapa. Requiere reiniciar el "
+"juego."
#: src/options.cpp
msgid "Enable ASCII art in item descriptions"
@@ -283479,6 +284194,11 @@ msgstr ""
msgid " [%s]"
msgstr ""
+#. ~ Tag for mods that use Lua in game builds without Lua.
+#: src/worldfactory.cpp
+msgid "(Needs Lua) "
+msgstr ""
+
#: src/worldfactory.cpp
msgid "N/A"
msgstr "N/D"
diff --git a/lang/po/es_ES.po b/lang/po/es_ES.po
index 5ebe4ec99a5b..537d60acf4ed 100644
--- a/lang/po/es_ES.po
+++ b/lang/po/es_ES.po
@@ -1,12 +1,12 @@
#
# Translators:
-# Jean Germain , 2022
+# Jean Germain , 2023
# Coolthulhu , 2023
#
msgid ""
msgstr ""
"Project-Id-Version: cataclysm-bn\n"
-"POT-Creation-Date: 2023-08-03 04:45+0000\n"
+"POT-Creation-Date: 2023-09-15 13:27+0000\n"
"Last-Translator: Coolthulhu , 2023\n"
"Language-Team: Spanish (Spain) (https://app.transifex.com/bn-team/teams/113585/es_ES/)\n"
"MIME-Version: 1.0\n"
@@ -2247,10 +2247,18 @@ msgstr ""
msgid "[Combat] One Down, Billions to Go…"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] The Undertaker"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Rude Awakening"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] Pacifist"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Decamate"
msgstr ""
@@ -3128,9 +3136,9 @@ msgstr ""
#: data/json/bionics.json data/json/items/bionics.json
msgid "Squeaky Ankles"
msgid_plural "Squeaky Ankles"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Tobillos Chillones"
+msgstr[1] "Tobillos Chillones"
+msgstr[2] "Tobillos Chillones"
#. ~ Description for {'str': 'Squeaky Ankles'}
#: data/json/bionics.json
@@ -3528,9 +3536,9 @@ msgstr ""
#: data/json/bionics.json data/json/items/gun/bio.json
msgid "EMP Projector"
msgid_plural "EMP Projectors"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "proyector PEM"
+msgstr[1] "proyectores PEM"
+msgstr[2] "proyectores PEM"
#. ~ Description for {'str': 'EMP Projector'}
#: data/json/bionics.json
@@ -3681,9 +3689,9 @@ msgstr ""
#: data/json/bionics.json data/json/items/bionics.json
msgid "Glowy Thing"
msgid_plural "Glowy Things"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Cosa Brillante"
+msgstr[1] "Cosas Brillantes"
+msgstr[2] "Cosas Brillantes"
#. ~ Description for {'str': 'Glowy Thing'}
#: data/json/bionics.json
@@ -4379,9 +4387,9 @@ msgstr ""
#: data/json/bionics.json data/json/items/bionics.json
msgid "Wire-Induced Stiffness"
msgid_plural "Wire-Induced Stiffnesses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Rigidez Inducida por Cable"
+msgstr[1] "Rigidez Inducida por Cable"
+msgstr[2] "Rigidez Inducida por Cable"
#. ~ Description for {'str': 'Wire-Induced Stiffness'}
#: data/json/bionics.json
@@ -4466,9 +4474,9 @@ msgstr ""
#: data/json/bionics.json data/json/items/bionics.json
msgid "Self-Locking Thumbs"
msgid_plural "Self-Locking Thumbs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Pulgares Auto-Trabables"
+msgstr[1] "Pulgares Auto-Trabables"
+msgstr[2] "Pulgares Auto-Trabables"
#. ~ Description for {'str': 'Self-Locking Thumbs'}
#: data/json/bionics.json
@@ -4632,9 +4640,9 @@ msgstr ""
#: data/json/bionics.json data/json/items/bionics.json
msgid "Gasoline Fuel Cell CBM"
msgid_plural "Gasoline Fuel Cell CBMs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MCB Celda de Nafta"
+msgstr[1] "MCB Celda de Nafta"
+msgstr[2] "MCB Celda de Nafta"
#. ~ Description for {'str': 'Gasoline Fuel Cell CBM'}
#: data/json/bionics.json
@@ -4831,10 +4839,25 @@ msgstr ""
#: data/json/bionics.json data/json/items/bionics.json
msgid ""
"Installed within you is a perpetual generator powered by nonsensoleum. When"
-" activated it's power gen doubles. If you are seeing this, you'd better be "
+" activated its power gen doubles. If you are seeing this, you'd better be "
"debugging."
msgstr ""
+#: data/json/bionics.json data/json/items/bionics.json
+msgid "Debug Fuel Cell CBM"
+msgid_plural "Debug Fuel Cell CBMs"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'Debug Fuel Cell CBM'}
+#: data/json/bionics.json data/json/items/bionics.json
+msgid ""
+"The power of the sun, in the palm of my hand! Installed within you is a "
+"perpetual generator powered by nonsensoleum. When activated its power gen "
+"doubles. If you are seeing this, you'd better be debugging."
+msgstr ""
+
#: data/json/body_parts.json
msgid "appendix"
msgstr "apéndice"
@@ -9172,6 +9195,17 @@ msgstr ""
msgid "You're winded."
msgstr "Te falta el aire."
+#: data/json/effects.json
+msgid "Bronchospasms"
+msgstr ""
+
+#. ~ Description of effect 'Bronchospasms'.
+#: data/json/effects.json
+msgid ""
+"Something in the air is making it harder to breathe, aggravating your "
+"asthma. Increases the chance of suffering an asthma attack."
+msgstr ""
+
#: data/json/effects.json
msgid "The ceiling collapses on you!"
msgstr "¡El techo se te cae encima!"
@@ -24319,38 +24353,102 @@ msgstr "arma"
#: data/json/items/book/maps.json data/json/items/tool/deployable.json
msgid "seeing this is a bug"
msgid_plural "seeing this is a bug"
+msgstr[0] "si ves esto es un bug"
+msgstr[1] "si ves esto es un bug"
+msgstr[2] "si ves esto es un bug"
+
+#: data/json/species.json
+msgid "mammal"
+msgid_plural "mammals"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+#. ~ Description for {'str': 'mammal'}
#: data/json/species.json
msgid "a mammal"
msgstr ""
+#: data/json/species.json
+msgid "amphibian"
+msgid_plural "amphibians"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'amphibian'}
#: data/json/species.json
msgid "an amphibian"
msgstr ""
+#: data/json/species.json
+msgid "bird"
+msgid_plural "birds"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'bird'}
#: data/json/species.json
msgid "a bird"
msgstr ""
+#: data/json/species.json
+msgid "reptile"
+msgid_plural "reptiles"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'reptile'}
#: data/json/species.json
msgid "a reptile"
msgstr ""
+#: data/json/species.json
+msgid "fish"
+msgid_plural "fish"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str_sp': 'fish'}
#: data/json/species.json
msgid "a fish"
msgstr ""
+#: data/json/species.json
+msgid "mutant"
+msgid_plural "mutants"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'mutant'}
#: data/json/species.json
msgid "a mutant"
msgstr ""
+#: data/json/species.json
+msgid "nether creature"
+msgid_plural "nether creatures"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'nether creature'}
#: data/json/species.json
msgid "a nether creature"
msgstr ""
+#: data/json/species.json data/json/monsters/slimes.json
+msgid "blob"
+msgid_plural "blobs"
+msgstr[0] "masa"
+msgstr[1] "masas"
+msgstr[2] "masas"
+
+#. ~ Description for {'str': 'blob'}
#: data/json/species.json
msgid "a blob"
msgstr ""
@@ -24359,30 +24457,86 @@ msgstr ""
msgid "plop."
msgstr ""
+#: data/json/species.json
+msgid "fungus"
+msgid_plural "fungi"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'fungus', 'str_pl': 'fungi'}
#: data/json/species.json
msgid "a fungus"
msgstr "un hongo"
+#: data/json/species.json
+msgid "leech plant"
+msgid_plural "leech plants"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'leech plant'}
#: data/json/species.json
msgid "a leech plant"
msgstr ""
+#: data/json/species.json
+msgid "insect"
+msgid_plural "insects"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'insect'}
#: data/json/species.json
msgid "an insect"
msgstr "un insecto"
+#: data/json/species.json
+msgid "spider"
+msgid_plural "spiders"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'spider'}
#: data/json/species.json
msgid "a spider"
msgstr ""
+#: data/json/species.json
+msgid "plant"
+msgid_plural "plants"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'plant'}
#: data/json/species.json
msgid "a plant"
msgstr ""
+#: data/json/species.json
+msgid "mollusk"
+msgid_plural "mollusks"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'mollusk'}
#: data/json/species.json
msgid "a mollusk"
msgstr ""
+#: data/json/species.json
+msgid "worm"
+msgid_plural "worms"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'worm'}
#: data/json/species.json
msgid "a worm"
msgstr ""
@@ -24391,6 +24545,15 @@ msgstr ""
msgid "rustle."
msgstr ""
+#: data/json/species.json data/json/monsters/zed-classic.json
+#: data/json/npcs/talk_tags.json
+msgid "zombie"
+msgid_plural "zombies"
+msgstr[0] "zombi"
+msgstr[1] "zombis"
+msgstr[2] "zombis"
+
+#. ~ Description for {'str': 'zombie'}
#: data/json/species.json
msgid "a zombie"
msgstr "un zombi"
@@ -24399,6 +24562,14 @@ msgstr "un zombi"
msgid "shuffling."
msgstr ""
+#: data/json/species.json
+msgid "robot"
+msgid_plural "robots"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'robot'}
#: data/json/species.json
msgid "a robot"
msgstr ""
@@ -24407,18 +24578,56 @@ msgstr ""
msgid "mechanical whirring."
msgstr ""
+#: data/json/species.json data/json/npcs/talk_tags.json
+msgid "horror"
+msgid_plural "horrors"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'horror'}
#: data/json/species.json
msgid "a horror"
msgstr ""
+#: data/json/species.json
+msgid "abberation"
+msgid_plural "abberations"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'abberation'}
#: data/json/species.json
msgid "an aberration"
msgstr "una aberración"
+#: data/json/species.json
+msgid "hallucination"
+msgid_plural "hallucinations"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/json/species.json src/mtype.cpp
+msgid "human"
+msgid_plural "humans"
+msgstr[0] "humano"
+msgstr[1] "humanos"
+msgstr[2] "humanos"
+
+#. ~ Description for {'str': 'human'}
#: data/json/species.json
msgid "a human"
msgstr ""
+#: data/json/species.json
+msgid "unknown species"
+msgid_plural "unknown species"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/json/speech.json data/mods/Aftershock/speech.json
#: data/mods/CrazyCataclysm/crazy_speech.json
msgid "\"Hello?\""
@@ -28653,9 +28862,9 @@ msgstr ""
#: src/magic.cpp src/map_extras.cpp src/recipe.cpp
msgid "none"
msgid_plural "none"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "nada"
+msgstr[1] "nada"
+msgstr[2] "nada"
#: data/json/traps.json data/json/items/tool/traps.json
msgid "bubble wrap"
@@ -29543,9 +29752,9 @@ msgstr ""
#: data/json/vehicleparts/vehicle_parts.json
msgid "washing machine"
msgid_plural "washing machines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lavarropas"
+msgstr[1] "lavarropas"
+msgstr[2] "lavarropas"
#. ~ Description for washing machine
#: data/json/furniture_and_terrain/furniture-appliances.json
@@ -30110,9 +30319,9 @@ msgstr ""
#: data/json/vehicleparts/vehicle_parts.json
msgid "minifreezer"
msgid_plural "minifreezers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "minifreezer"
+msgstr[1] "minifreezers"
+msgstr[2] "minifreezers"
#: data/json/furniture_and_terrain/furniture-appliances.json
msgid "Switch off the minifreezer."
@@ -30817,9 +31026,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "tulip"
msgid_plural "tulips"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tulipán"
+msgstr[1] "tulipanes"
+msgstr[2] "tulipanes"
#. ~ Description for tulip
#: data/json/furniture_and_terrain/furniture-flora.json
@@ -30850,9 +31059,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "black eyed susan"
msgid_plural "black eyed susans"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rudbeckia"
+msgstr[1] "rudbeckias"
+msgstr[2] "rudbeckias"
#. ~ Description for black eyed susan
#: data/json/furniture_and_terrain/furniture-flora.json
@@ -30865,9 +31074,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "lily"
msgid_plural "lilies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lirio"
+msgstr[1] "lirios"
+msgstr[2] "lirios"
#. ~ Description for lily
#: data/json/furniture_and_terrain/furniture-flora.json
@@ -30878,9 +31087,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "lotus"
msgid_plural "lotuses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lotus"
+msgstr[1] "lotus"
+msgstr[2] "lotus"
#. ~ Description for lotus
#. ~ Description for {'str': 'lotus flower'}
@@ -30950,9 +31159,9 @@ msgstr ""
#: data/json/items/comestibles/seed.json
msgid "chicory"
msgid_plural "chicory"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "achicoria"
+msgstr[1] "achicoria"
+msgstr[2] "achicoria"
#. ~ Description for chicory
#: data/json/furniture_and_terrain/furniture-flora.json
@@ -32261,9 +32470,9 @@ msgstr "¿Qué habrá adentro? ¡Vamos a ver!"
#: data/json/items/containers.json
msgid "large cardboard box"
msgid_plural "large cardboard boxes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "caja grande de cartón"
+msgstr[1] "cajas grandes de cartón"
+msgstr[2] "cajas grandes de cartón"
#. ~ Description for large cardboard box
#: data/json/furniture_and_terrain/furniture-storage.json
@@ -32588,9 +32797,9 @@ msgstr ""
#: data/json/vehicleparts/vehicle_parts.json
msgid "workbench"
msgid_plural "workbenches"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mesa de trabajo"
+msgstr[1] "mesas de trabajo"
+msgstr[2] "mesas de trabajo"
#. ~ Description for workbench
#. ~ Description for {'str': 'workbench', 'str_pl': 'workbenches'}
@@ -32663,9 +32872,9 @@ msgstr ""
#: data/json/items/tool/deployable.json
msgid "tourist table"
msgid_plural "tourist tables"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mesa de turista"
+msgstr[1] "mesas de turista"
+msgstr[2] "mesas de turista"
#. ~ Description for tourist table
#: data/json/furniture_and_terrain/furniture-surfaces.json
@@ -33338,9 +33547,9 @@ msgstr ""
#: data/json/items/tool/deployable.json
msgid "metal butchering rack"
msgid_plural "metal butchering racks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "soporte de metal para carnear"
+msgstr[1] "soportes de metal para carnear"
+msgstr[2] "soportes de metal para carnear"
#. ~ Description for metal butchering rack
#: data/json/furniture_and_terrain/furniture-tools.json
@@ -35993,9 +36202,9 @@ msgstr ""
#: data/json/items/comestibles/other.json
msgid "underbrush"
msgid_plural "underbrushes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "underbrush"
+msgstr[1] "malezas"
+msgstr[2] "malezas"
#. ~ Description for underbrush
#: data/json/furniture_and_terrain/terrain-flora.json
@@ -36229,9 +36438,9 @@ msgstr ""
#: data/json/items/comestibles/other.json
msgid "grass"
msgid_plural "grasses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pasto"
+msgstr[1] "pastos"
+msgstr[2] "pastos"
#. ~ Description for grass
#: data/json/furniture_and_terrain/terrain-flora.json
@@ -37548,9 +37757,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "small railroad track"
msgid_plural "small railroad tracks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "vía pequeña"
+msgstr[1] "vías pequeñas"
+msgstr[2] "vías pequeñas"
#. ~ Description for small railroad track
#: data/json/furniture_and_terrain/terrain-railroads.json
@@ -39865,9 +40074,9 @@ msgstr ""
#: data/json/items/ammo.json data/json/items/ammo_types.json
msgid "plutonium slurry"
msgid_plural "plutonium slurry"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulpa de plutonio"
+msgstr[1] "pulpa de plutonio"
+msgstr[2] "pulpa de plutonio"
#. ~ Description for {'str_sp': 'plutonium slurry'}
#. ~ Description for {'str_sp': 'watery plutonium slurry'}
@@ -39881,9 +40090,9 @@ msgstr ""
#: data/json/items/ammo.json
msgid "watery plutonium slurry"
msgid_plural "watery plutonium slurry"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulpa acuosa de plutonio"
+msgstr[1] "pulpa acuosa de plutonio"
+msgstr[2] "pulpa acuosa de plutonio"
#: data/json/items/ammo.json data/json/snippets/music.json
msgid "rock"
@@ -39918,9 +40127,9 @@ msgstr ""
#: data/json/items/ammo.json
msgid "clay pellet"
msgid_plural "clay pellets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bolita de arcilla"
+msgstr[1] "bolitas de arcilla"
+msgstr[2] "bolitas de arcilla"
#. ~ Description for {'str': 'clay pellet'}
#: data/json/items/ammo.json
@@ -40014,9 +40223,9 @@ msgstr ""
#: data/json/items/ammo.json
msgid "hydrogen canister"
msgid_plural "hydrogen canisters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lata de hidrógeno"
+msgstr[1] "latas de hidrógeno"
+msgstr[2] "latas de hidrógeno"
#. ~ Description for {'str': 'hydrogen canister'}
#: data/json/items/ammo.json
@@ -40043,9 +40252,9 @@ msgstr ""
#: data/json/items/ammo.json
msgid "oxidizer powder"
msgid_plural "oxidizer powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "polvo oxidante"
+msgstr[1] "polvo oxidante"
+msgstr[2] "polvo oxidante"
#. ~ Description for {'str': 'oxidizer powder'}
#: data/json/items/ammo.json
@@ -40055,9 +40264,9 @@ msgstr "Polvo volátil de oxidante químico."
#: data/json/items/ammo.json
msgid "lye powder"
msgid_plural "lye powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "polvo de lejía"
+msgstr[1] "polvo de lejía"
+msgstr[2] "polvo de lejía"
#. ~ Description for {'str': 'lye powder'}
#: data/json/items/ammo.json
@@ -40143,9 +40352,9 @@ msgstr ""
#: data/json/items/ammo.json
msgid "chunk of rubber"
msgid_plural "chunks of rubber"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pedazo de goma"
+msgstr[1] "pedazos de goma"
+msgstr[2] "pedazos de goma"
#. ~ Description for {'str': 'chunk of rubber', 'str_pl': 'chunks of rubber'}
#: data/json/items/ammo.json
@@ -40183,9 +40392,9 @@ msgstr "Un rollo de cinta médica, parecida a la cinta adhesiva."
#: data/json/items/ammo.json
msgid "placeholder ammunition"
msgid_plural "placeholder ammunitions"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "munición de referencia"
+msgstr[1] "municiones de referencia"
+msgstr[2] "municiones de referencia"
#: data/json/items/ammo.json data/json/items/ammo_types.json
msgid "charcoal"
@@ -40209,9 +40418,9 @@ msgstr ""
#: data/json/items/ammo.json
msgid "calcium carbide premix"
msgid_plural "calcium carbide premix"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "premezcla de carburo de calcio"
+msgstr[1] "premezcla de carburo de calcio"
+msgstr[2] "premezcla de carburo de calcio"
#. ~ Description for {'str_sp': 'calcium carbide premix'}
#: data/json/items/ammo.json
@@ -40225,9 +40434,9 @@ msgstr ""
#: data/json/items/ammo.json
msgid "coal"
msgid_plural "coals"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "carbón"
+msgstr[1] "carbón"
+msgstr[2] "carbón"
#. ~ Description for {'str': 'coal'}
#: data/json/items/ammo.json
@@ -40259,9 +40468,9 @@ msgstr ""
#: data/json/items/ammo.json
msgid "RA10K stimulant module"
msgid_plural "RA10K stimulant modules"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "módulo estimulante RA10K"
+msgstr[1] "módulos estimulantes RA10K"
+msgstr[2] "módulos estimulantes RA10K"
#. ~ Description for {'str': 'RA10K stimulant module'}
#: data/json/items/ammo.json
@@ -40289,9 +40498,9 @@ msgstr "Un cartucho de filtros de repuesto para el rebreather."
#: data/json/items/ammo.json data/json/items/ammo_types.json
msgid "filter mask cartridge"
msgid_plural "filter mask cartridges"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho de barbijo"
+msgstr[1] "cartuchos de barbijo"
+msgstr[2] "cartuchos de barbijo"
#. ~ Description for {'str': 'filter mask cartridge'}
#: data/json/items/ammo.json
@@ -40303,9 +40512,9 @@ msgstr ""
#: data/json/items/ammo.json data/json/items/ammo_types.json
msgid "gas mask cartridge"
msgid_plural "gas mask cartridges"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho de máscara de gas"
+msgstr[1] "cartuchos de máscara de gas"
+msgstr[2] "cartuchos de máscara de gas"
#. ~ Description for {'str': 'gas mask cartridge'}
#: data/json/items/ammo.json
@@ -40316,9 +40525,9 @@ msgstr ""
#: data/json/items/ammo.json
msgid "chemical mask cartridge"
msgid_plural "chemical mask cartridges"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho de máscara química"
+msgstr[1] "cartuchos de máscara química"
+msgstr[2] "cartuchos de máscara química"
#. ~ Description for {'str': 'chemical mask cartridge'}
#: data/json/items/ammo.json
@@ -40345,9 +40554,9 @@ msgstr ""
#: data/json/items/ammo.json data/json/items/ammo_types.json
msgid "fish bait"
msgid_plural "fish baits"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "carnada"
+msgstr[1] "carnadas"
+msgstr[2] "carnadas"
#. ~ Description for {'str': 'fish bait'}
#: data/json/items/ammo.json
@@ -40357,9 +40566,9 @@ msgstr "Un cebo utilizado en trampas para atraer a los peces."
#: data/json/items/ammo.json
msgid "spiked homemade rocket"
msgid_plural "spiked homemade rockets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "misil casero con espiga"
+msgstr[1] "misiles caseros con espiga"
+msgstr[2] "misiles caseros con espiga"
#. ~ Description for {'str': 'spiked homemade rocket'}
#: data/json/items/ammo.json
@@ -40376,9 +40585,9 @@ msgstr ""
#: data/json/items/ammo.json
msgid "explosive homemade rocket"
msgid_plural "explosive homemade rockets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "misil casero explosivo"
+msgstr[1] "misiles caseros explosivos"
+msgstr[2] "misiles caseros explosivos"
#. ~ Description for {'str': 'explosive homemade rocket'}
#: data/json/items/ammo.json
@@ -40394,9 +40603,9 @@ msgstr ""
#: data/json/items/ammo.json
msgid "incendiary homemade rocket"
msgid_plural "incendiary homemade rockets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "misil casero incendiario"
+msgstr[1] "misiles caseros incendiarios"
+msgstr[2] "misiles caseros incendiarios"
#. ~ Description for {'str': 'incendiary homemade rocket'}
#: data/json/items/ammo.json
@@ -40428,9 +40637,9 @@ msgstr ""
#: data/json/items/ammo.json
msgid "unfinished calcium carbide"
msgid_plural "unfinished calcium carbide"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "carburo de calcio inconcluso"
+msgstr[1] "carburo de calcio inconcluso"
+msgstr[2] "carburo de calcio inconcluso"
#. ~ Description for {'str_sp': 'unfinished calcium carbide'}
#: data/json/items/ammo.json
@@ -40444,9 +40653,9 @@ msgstr ""
#: data/json/items/ammo.json
msgid "chain link"
msgid_plural "chain links"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "eslabón"
+msgstr[1] "eslabones"
+msgstr[2] "eslabones"
#. ~ Description for {'str': 'chain link'}
#: data/json/items/ammo.json
@@ -40601,9 +40810,9 @@ msgstr "disparos de .410"
#: data/mods/Generic_Guns/firearms/black_powder.json
msgid "blunderbuss"
msgid_plural "blunderbusses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "trabuco"
+msgstr[1] "trabucos"
+msgstr[2] "trabucos"
#: data/json/items/ammo_types.json
#: data/mods/Generic_Guns/gg_ammunition_types.json
@@ -40637,9 +40846,9 @@ msgstr ".38"
#: data/json/items/ammo_types.json data/json/items/ammo/38super.json
msgid ".38 Super"
msgid_plural ".38 Supers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".38 Super"
+msgstr[1] ".38 Super"
+msgstr[2] ".38 Super"
#: data/json/items/ammo_types.json
msgid ".40"
@@ -40709,16 +40918,16 @@ msgstr ""
#: data/json/items/ammo_types.json data/json/items/ammo/40x46mm.json
msgid "40x46mm grenade"
msgid_plural "40x46mm grenades"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "granada 40x46mm"
+msgstr[1] "granadas 40x46mm"
+msgstr[2] "granadas 40x46mm"
#: data/json/items/ammo_types.json data/json/items/ammo/40x53mm.json
msgid "40x53mm grenade"
msgid_plural "40x53mm grenades"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "granada 40x53mm"
+msgstr[1] "granadas 40x53mm"
+msgstr[2] "granadas 40x53mm"
#: data/json/items/ammo_types.json
msgid "high-explosive anti-tank warhead"
@@ -40772,9 +40981,9 @@ msgstr[2] "aceites de motor"
#: data/json/items/chemicals_and_resources.json
msgid "anesthetic"
msgid_plural "anesthetics"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anestesia"
+msgstr[1] "anestesia"
+msgstr[2] "anestesia"
#: data/json/items/ammo_types.json
msgid "soap"
@@ -40944,16 +41153,16 @@ msgstr[2] "leche"
#: data/json/items/ammo_types.json data/json/items/comestibles/dairy.json
msgid "raw milk"
msgid_plural "raw milk"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "leche sin pasteurizar"
+msgstr[1] "leche sin pasteurizar"
+msgstr[2] "leche sin pasteurizar"
#: data/json/items/ammo_types.json data/json/items/ammo/paintball.json
msgid "paintball"
msgid_plural "paintballs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bola de paintball"
+msgstr[1] "bolas de paintball"
+msgstr[2] "bolas de paintball"
#: data/json/items/ammo_types.json
msgid "compressed air"
@@ -40970,9 +41179,9 @@ msgstr[2] "hexamina"
#: data/json/items/ammo_types.json data/json/items/ammo/300blk.json
msgid ".300 AAC Blackout"
msgid_plural ".300 AAC Blackouts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".300 AAC Blackout"
+msgstr[1] ".300 AAC Blackout"
+msgstr[2] ".300 AAC Blackout"
#: data/json/items/ammo_types.json data/json/items/comestibles/drink.json
msgid "water"
@@ -41060,9 +41269,9 @@ msgstr ""
#: data/json/items/battery.json
msgid "test battery"
msgid_plural "test batteries"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "batería de prueba"
+msgstr[1] "baterías de prueba"
+msgstr[2] "baterías de prueba"
#. ~ Description for {'str': 'test battery', 'str_pl': 'test batteries'}
#: data/json/items/battery.json
@@ -41348,16 +41557,16 @@ msgstr[2] "módulos biónicos abstractos"
#: data/json/items/bionics.json
msgid "abstract bionic module (npc usable)"
msgid_plural "abstract bionic modules (npc usable)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "módulo biónico abstracto (usable por PNJ)"
+msgstr[1] "módulos biónicos abstractos (usables por PNJ)"
+msgstr[2] "módulos biónicos abstractos (usables por PNJ)"
#: data/json/items/bionics.json
msgid "abstract faulty bionic module"
msgid_plural "abstract faulty bionic modules"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "módulo biónico abstracto defectuoso"
+msgstr[1] "módulos biónicos abstractos defectuosos"
+msgstr[2] "módulos biónicos abstractos defectuosos"
#. ~ Description for {'str': 'abstract faulty bionic module'}
#: data/json/items/bionics.json
@@ -41521,9 +41730,9 @@ msgstr ""
#: data/json/items/bionics.json
msgid "Shotgun Arm CBM"
msgid_plural "Shotgun Arm CBMs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MCB Brazo Escopeta"
+msgstr[1] "MCB Brazo Escopeta"
+msgstr[2] "MCB Brazo Escopeta"
#. ~ Description for {'str': 'Shotgun Arm CBM'}
#: data/json/items/bionics.json
@@ -41960,9 +42169,9 @@ msgstr ""
#: data/json/items/bionics.json
msgid "Respirator CBM"
msgid_plural "Respirator CBMs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MCB Respirador"
+msgstr[1] "MCB Respirador"
+msgstr[2] "MCB Respirador"
#. ~ Description for {'str': 'Respirator CBM'}
#: data/json/items/bionics.json
@@ -42121,9 +42330,9 @@ msgstr ""
#: data/json/items/bionics.json
msgid "Finger Lighter CBM"
msgid_plural "Finger Lighter CBMs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MCB Dedo Encendedor"
+msgstr[1] "MCB Dedo Encendedor"
+msgstr[2] "MCB Dedo Encendedor"
#. ~ Description for {'str': 'Finger Lighter CBM'}
#: data/json/items/bionics.json
@@ -42383,9 +42592,9 @@ msgstr ""
#: data/json/items/bionics.json
msgid "Power Storage CBM Mk. II"
msgid_plural "Power Storage CBM Mk. II"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MCB Almacenamiento de energía Mk. II"
+msgstr[1] "MCB Almacenamiento de energía Mk. II"
+msgstr[2] "MCB Almacenamiento de energía Mk. II"
#. ~ Description for {'str_sp': 'Power Storage CBM Mk. II'}
#: data/json/items/bionics.json
@@ -42687,9 +42896,9 @@ msgstr ""
#: data/json/items/bionics.json
msgid "Autonomous Surgical Scalpels CBM"
msgid_plural "Autonomous Surgical Scalpels CBMs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MCB Escalpelo Quirúrgico Autónomo"
+msgstr[1] "MCB Escalpelos Quirúrgicos Autónomos"
+msgstr[2] "MCB Escalpelos Quirúrgicos Autónomos"
#. ~ Description for {'str': 'Autonomous Surgical Scalpels CBM'}
#: data/json/items/bionics.json
@@ -42815,9 +43024,9 @@ msgstr ""
#: data/json/items/bionics.json
msgid "Joint Servo CBM"
msgid_plural "Joint Servo CBMs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MCB Articulaciones Servo"
+msgstr[1] "MCB Articulaciones Servo"
+msgstr[2] "MCB Articulaciones Servo"
#. ~ Description for {'str': 'Joint Servo CBM'}
#: data/json/items/bionics.json
@@ -42905,9 +43114,9 @@ msgstr ""
#: data/json/items/bionics.json
msgid "Intravenous Needletip CBM"
msgid_plural "Intravenous Needletip CBMs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MCB de Aguja Intravenosa"
+msgstr[1] "MCB de Aguja Intravenosa"
+msgstr[2] "MCB de Aguja Intravenosa"
#. ~ Description for {'str': 'Intravenous Needletip CBM'}
#: data/json/items/bionics.json
@@ -42962,9 +43171,9 @@ msgstr ""
#: data/json/items/bionics.json
msgid "Taste Modifier CBM"
msgid_plural "Taste Modifier CBMs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MCB Modificador de Gusto"
+msgstr[1] "MCB Modificador de Gusto"
+msgstr[2] "MCB Modificador de Gusto"
#. ~ Description for {'str': 'Taste Modifier CBM'}
#: data/json/items/bionics.json
@@ -42980,9 +43189,9 @@ msgstr ""
#: data/json/items/bionics.json
msgid "Soporific Induction CBM"
msgid_plural "Soporific Induction CBMs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MCB Inducción Soporífera"
+msgstr[1] "MCB Inducción Soporífera"
+msgstr[2] "MCB Inducción Soporífera"
#. ~ Description for {'str': 'Soporific Induction CBM'}
#: data/json/items/bionics.json
@@ -43183,9 +43392,9 @@ msgstr[2] "MCBs Lanzagranadas desplegable"
#: data/json/items/bionics.json
msgid "Linguistic Coprocessor CBM"
msgid_plural "Linguistic Coprocessor CBMs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MCB Coprocesador Lingüístico"
+msgstr[1] "MCB Coprocesador Lingüístico"
+msgstr[2] "MCB Coprocesador Lingüístico"
#. ~ Description for {'str': 'Linguistic Coprocessor CBM'}
#: data/json/items/bionics.json
@@ -43201,9 +43410,9 @@ msgstr ""
#: data/json/items/bionics.json
msgid "Dopamine Stimulators CBM"
msgid_plural "Dopamine Stimulators CBMs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MCB Simulador de Dopamina"
+msgstr[1] "MCB Simulador de Dopamina"
+msgstr[2] "MCB Simulador de Dopamina"
#. ~ Description for {'str': 'Dopamine Stimulators CBM'}
#: data/json/items/bionics.json
@@ -43242,9 +43451,9 @@ msgstr[2] ""
#: data/json/items/biosignatures.json
msgid "bird litter"
msgid_plural "bird litter"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "basura de pájaro"
+msgstr[1] "basura de pájaro"
+msgstr[2] "basura de pájaro"
#. ~ Description for {'str_sp': 'bird litter'}
#: data/json/items/biosignatures.json
@@ -43254,9 +43463,9 @@ msgstr "Son cagadas, plumas y pedazos mugre de pájaro."
#: data/json/items/biosignatures.json
msgid "cow pie"
msgid_plural "cow pies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "torta de vaca"
+msgstr[1] "tortas de vaca"
+msgstr[2] "tortas de vaca"
#. ~ Description for cow pie
#: data/json/items/biosignatures.json
@@ -43268,9 +43477,9 @@ msgstr ""
#: data/json/items/biosignatures.json
msgid "dog dung"
msgid_plural "dog dungs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sorete de perro"
+msgstr[1] "soretes de perro"
+msgstr[2] "soretes de perro"
#. ~ Description for dog dung
#: data/json/items/biosignatures.json
@@ -43280,9 +43489,9 @@ msgstr "Son las deposiciones de un canino."
#: data/json/items/biosignatures.json
msgid "manure"
msgid_plural "manures"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bosta"
+msgstr[1] "bostas"
+msgstr[2] "bostas"
#. ~ Description for manure
#: data/json/items/biosignatures.json
@@ -43293,9 +43502,9 @@ msgstr ""
#: data/json/items/biosignatures.json
msgid "roach dirt"
msgid_plural "roach dirts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mugre de cucaracha"
+msgstr[1] "mugres de cucaracha"
+msgstr[2] "mugres de cucaracha"
#. ~ Description for roach dirt
#: data/json/items/biosignatures.json
@@ -43305,9 +43514,9 @@ msgstr "Son bolitas grandes y negras de materia en descomposición."
#: data/json/items/biosignatures.json
msgid "fetid goop"
msgid_plural "fetid goops"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pegote fétido"
+msgstr[1] "pegotes fétidos"
+msgstr[2] "pegotes fétidos"
#. ~ Description for {'str': 'fetid goop'}
#: data/json/items/biosignatures.json
@@ -43477,9 +43686,9 @@ msgstr ""
#: data/json/items/chemicals_and_resources.json
msgid "rhodonite"
msgid_plural "rhodonite"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rodonita"
+msgstr[1] "rodonita"
+msgstr[2] "rodonita"
#. ~ Description for {'str_sp': 'rhodonite'}
#: data/json/items/chemicals_and_resources.json
@@ -43493,9 +43702,9 @@ msgstr ""
#: data/json/items/chemicals_and_resources.json
msgid "zincite"
msgid_plural "zincite"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zincita"
+msgstr[1] "zincita"
+msgstr[2] "zincita"
#. ~ Description for {'str_sp': 'zincite'}
#: data/json/items/chemicals_and_resources.json
@@ -43581,9 +43790,9 @@ msgstr ""
#: data/json/items/chemicals_and_resources.json
msgid "insecticide"
msgid_plural "insecticide"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "insecticida"
+msgstr[1] "insecticida"
+msgstr[2] "insecticida"
#. ~ Description for {'str_sp': 'insecticide'}
#: data/json/items/chemicals_and_resources.json
@@ -43609,9 +43818,9 @@ msgstr "Es agua con sal añadida. No sirve para beber."
#: data/json/items/chemicals_and_resources.json
msgid "soapy water"
msgid_plural "soapy water"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "agua jabonosa"
+msgstr[1] "agua jabonosa"
+msgstr[2] "agua jabonosa"
#. ~ Description for {'str_sp': 'soapy water'}
#: data/json/items/chemicals_and_resources.json
@@ -43731,9 +43940,9 @@ msgstr ""
#: data/json/items/chemicals_and_resources.json
msgid "potassium chloride"
msgid_plural "potassium chloride"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cloruro de potasio"
+msgstr[1] "cloruro de potasio"
+msgstr[2] "cloruro de potasio"
#. ~ Description for {'str_sp': 'potassium chloride'}
#: data/json/items/chemicals_and_resources.json
@@ -43789,9 +43998,9 @@ msgstr ""
#: data/json/items/chemicals_and_resources.json
msgid "hydrochloric acid"
msgid_plural "hydrochloric acid"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "ácido hidroclórico"
+msgstr[1] "ácido hidroclórico"
+msgstr[2] "ácido hidroclórico"
#. ~ Description for {'str_sp': 'hydrochloric acid'}
#: data/json/items/chemicals_and_resources.json
@@ -43929,9 +44138,9 @@ msgstr ""
#: data/json/items/chemicals_and_resources.json
msgid "ammonium nitrate pellets"
msgid_plural "ammonium nitrate pellets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "gránulos de nitrato de amonio"
+msgstr[1] "gránulos de nitrato de amonio"
+msgstr[2] "gránulos de nitrato de amonio"
#. ~ Description for {'str_sp': 'ammonium nitrate pellets'}
#: data/json/items/chemicals_and_resources.json
@@ -44108,9 +44317,9 @@ msgstr ""
#: data/json/items/chemicals_and_resources.json
msgid "match head powder"
msgid_plural "match head powder"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "polvo de fósforo"
+msgstr[1] "polvo de fósforo"
+msgstr[2] "polvo de fósforo"
#. ~ Description for {'str_sp': 'match head powder'}
#: data/json/items/chemicals_and_resources.json
@@ -44145,9 +44354,9 @@ msgstr ""
#: data/json/items/chemicals_and_resources.json
msgid "composition b"
msgid_plural "composition b"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "composición B"
+msgstr[1] "composición B"
+msgstr[2] "composición B"
#. ~ Description for {'str_sp': 'composition b'}
#: data/json/items/chemicals_and_resources.json
@@ -44182,9 +44391,9 @@ msgstr ""
#: data/json/items/chemicals_and_resources.json
msgid "improvised rocket fuel"
msgid_plural "improvised rocket fuel"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "combustible de misiles improvisado"
+msgstr[1] "combustible de misiles improvisado"
+msgstr[2] "combustible de misiles improvisado"
#. ~ Description for {'str_sp': 'improvised rocket fuel'}
#: data/json/items/chemicals_and_resources.json
@@ -44280,9 +44489,9 @@ msgstr ""
#: data/json/items/chemicals_and_resources.json
msgid "nanomaterial canister"
msgid_plural "nanomaterial canisters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "carcasa de nanomaterial"
+msgstr[1] "carcasas de nanomaterial"
+msgstr[2] "carcasas de nanomaterial"
#. ~ Description for {'str': 'nanomaterial canister'}
#: data/json/items/chemicals_and_resources.json
@@ -44331,9 +44540,9 @@ msgstr ""
#: data/json/items/chemicals_and_resources.json
msgid "dimethyl sulfoxide"
msgid_plural "dimethyl sulfoxide"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "dimetilsulfóxido"
+msgstr[1] "dimetilsulfóxido"
+msgstr[2] "dimetilsulfóxido"
#. ~ Use action activation_message for {'str_sp': 'dimethyl sulfoxide'}.
#: data/json/items/chemicals_and_resources.json
@@ -44352,9 +44561,9 @@ msgstr ""
#: data/json/items/chemicals_and_resources.json
msgid "chloroform"
msgid_plural "chloroform"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cloroformo"
+msgstr[1] "cloroformo"
+msgstr[2] "cloroformo"
#. ~ Description for {'str_sp': 'chloroform'}
#: data/json/items/chemicals_and_resources.json
@@ -44370,9 +44579,9 @@ msgstr ""
#: data/json/items/chemicals_and_resources.json
msgid "phenol"
msgid_plural "phenol"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "fenol"
+msgstr[1] "fenol"
+msgstr[2] "fenol"
#. ~ Description for {'str_sp': 'phenol'}
#: data/json/items/chemicals_and_resources.json
@@ -44391,9 +44600,9 @@ msgstr ""
#: data/json/items/chemicals_and_resources.json
msgid "peptone broth powder"
msgid_plural "peptone broth powder"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "caldo de peptona"
+msgstr[1] "caldo de peptona"
+msgstr[2] "caldo de peptona"
#. ~ Description for {'str_sp': 'peptone broth powder'}
#: data/json/items/chemicals_and_resources.json
@@ -44441,9 +44650,9 @@ msgstr ""
#: data/json/items/chemicals_and_resources.json
msgid "cobalt-60 pellet"
msgid_plural "cobalt-60 pellets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bolita cobalto-60"
+msgstr[1] "bolitas cobalto-60"
+msgstr[2] "bolitas cobalto-60"
#. ~ Description for {'str': 'cobalt-60 pellet'}
#: data/json/items/chemicals_and_resources.json
@@ -44457,9 +44666,9 @@ msgstr ""
#: data/json/items/chemicals_and_resources.json
msgid "wooden bead"
msgid_plural "wooden beads"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cuenta de madera"
+msgstr[1] "cuentas de madera"
+msgstr[2] "cuentas de madera"
#. ~ Description for {'str': 'wooden bead'}
#: data/json/items/chemicals_and_resources.json
@@ -44473,9 +44682,9 @@ msgstr ""
#: data/json/items/chemicals_and_resources.json
msgid "sandbag"
msgid_plural "sandbags"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bolsa de arena"
+msgstr[1] "bolsas de arena"
+msgstr[2] "bolsas de arena"
#. ~ Description for {'str': 'sandbag'}
#: data/json/items/chemicals_and_resources.json
@@ -44489,9 +44698,9 @@ msgstr ""
#: data/json/items/chemicals_and_resources.json
msgid "earthbag"
msgid_plural "earthbags"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bolsa de tierra"
+msgstr[1] "bolsas de tierra"
+msgstr[2] "bolsas de tierra"
#. ~ Description for {'str': 'earthbag'}
#: data/json/items/chemicals_and_resources.json
@@ -44519,9 +44728,9 @@ msgstr ""
#: data/json/items/chemicals_and_resources.json
msgid "rosin"
msgid_plural "rosins"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colofonia"
+msgstr[1] "colofonia"
+msgstr[2] "colofonia"
#. ~ Description for {'str': 'rosin'}
#: data/json/items/chemicals_and_resources.json
@@ -44533,9 +44742,9 @@ msgstr ""
#: data/json/items/chemicals_and_resources.json
msgid "acetylene"
msgid_plural "acetylene"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "acetileno"
+msgstr[1] "acetileno"
+msgstr[2] "acetileno"
#. ~ Description for {'str_sp': 'acetylene'}
#: data/json/items/chemicals_and_resources.json
@@ -44643,9 +44852,9 @@ msgstr "Es una bolsa de plástico pequeña y abierta. Esencialmente, basura."
#: data/json/items/containers.json
msgid "zipper bag"
msgid_plural "zipper bags"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bolsa zipper"
+msgstr[1] "bolsas zipper"
+msgstr[2] "bolsas zipper"
#. ~ Description for {'str': 'zipper bag'}
#: data/json/items/containers.json
@@ -44661,9 +44870,9 @@ msgstr ""
#: data/json/items/containers.json
msgid "body bag"
msgid_plural "body bags"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bolsa de cadáver"
+msgstr[1] "bolsas de cadáver"
+msgstr[2] "bolsas de cadáver"
#. ~ Description for {'str': 'body bag'}
#: data/json/items/containers.json
@@ -44677,9 +44886,9 @@ msgstr ""
#: data/json/items/containers.json
msgid "IV bag"
msgid_plural "IV bags"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bolsa IV"
+msgstr[1] "bolsas IV"
+msgstr[2] "bolsas IV"
#. ~ Description for {'str': 'IV bag'}
#: data/json/items/containers.json
@@ -44717,9 +44926,9 @@ msgstr ""
#: data/json/items/containers.json
msgid "condiment bottle"
msgid_plural "condiment bottles"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "botella para condimento"
+msgstr[1] "botellas para condimento"
+msgstr[2] "botellas para condimento"
#. ~ Description for {'str': 'condiment bottle'}
#: data/json/items/containers.json
@@ -44948,9 +45157,9 @@ msgstr "Es una bolsa de comida cerrada al vacío."
#: data/json/items/containers.json
msgid "small tin can"
msgid_plural "small tin cans"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lata pequeña de estaño"
+msgstr[1] "latas pequeñas de estaño"
+msgstr[2] "latas pequeñas de estaño"
#. ~ Description for {'str': 'small tin can'}
#: data/json/items/containers.json
@@ -44960,9 +45169,9 @@ msgstr "Es una lata chica de estaño, como las del atún."
#: data/json/items/containers.json
msgid "small opened tin can"
msgid_plural "small opened tin cans"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lata pequeña de estaño abierta"
+msgstr[1] "latas pequeñas de estaño abiertas"
+msgstr[2] "latas pequeñas de estaño abiertas"
#. ~ Description for {'str': 'small opened tin can'}
#: data/json/items/containers.json
@@ -44976,9 +45185,9 @@ msgstr ""
#: data/json/items/containers.json
msgid "medium tin can"
msgid_plural "medium tin cans"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lata mediana de estaño"
+msgstr[1] "latas medianas de estaño"
+msgstr[2] "latas medianas de estaño"
#. ~ Description for {'str': 'medium tin can'}
#: data/json/items/containers.json
@@ -44988,9 +45197,9 @@ msgstr "Es una lata mediana de estaño, como las de tomate."
#: data/json/items/containers.json
msgid "medium opened tin can"
msgid_plural "medium opened tin cans"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lata mediana de estaño abierta"
+msgstr[1] "latas medianas de estaño abiertas"
+msgstr[2] "latas medianas de estaño abiertas"
#. ~ Description for {'str': 'medium opened tin can'}
#: data/json/items/containers.json
@@ -45123,9 +45332,9 @@ msgstr ""
#: data/json/items/containers.json
msgid "test tube"
msgid_plural "test tubes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tubo de ensayo"
+msgstr[1] "tubos de ensayo"
+msgstr[2] "tubos de ensayo"
#. ~ Description for {'str': 'test tube'}
#: data/json/items/containers.json
@@ -45137,9 +45346,9 @@ msgstr ""
#: data/json/items/containers.json
msgid "beaker"
msgid_plural "beakers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "vaso de precipitado"
+msgstr[1] "vasos de precipitado"
+msgstr[2] "vasos de precipitado"
#. ~ Description for {'str': 'beaker'}
#: data/json/items/containers.json
@@ -45152,9 +45361,9 @@ msgstr ""
#: data/json/items/containers.json
msgid "graduated cylinder"
msgid_plural "graduated cylinders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "probetas"
+msgstr[1] "probeta"
+msgstr[2] "probeta"
#. ~ Description for {'str': 'graduated cylinder'}
#: data/json/items/containers.json
@@ -45170,9 +45379,9 @@ msgstr ""
#: data/json/items/containers.json
msgid "microcentrifuge tube"
msgid_plural "microcentrifuge tubes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tubo de microcentrífuga"
+msgstr[1] "tubos de microcentrífuga"
+msgstr[2] "tubos de microcentrífuga"
#. ~ Description for {'str': 'microcentrifuge tube'}
#: data/json/items/containers.json
@@ -45526,9 +45735,9 @@ msgstr "Es un vasito descartable y barato con tapa plástica y pajita."
#: data/json/items/containers.json
msgid "plastic tub"
msgid_plural "plastic tubs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "balde de plástico"
+msgstr[1] "baldes de plástico"
+msgstr[2] "baldes de plástico"
#. ~ Description for {'str': 'plastic tub'}
#: data/json/items/containers.json
@@ -45540,9 +45749,9 @@ msgstr ""
#: data/json/items/containers.json
msgid "condom"
msgid_plural "condoms"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "preservativo"
+msgstr[1] "preservativos"
+msgstr[2] "preservativos"
#. ~ Description for {'str': 'condom'}
#: data/json/items/containers.json
@@ -45558,9 +45767,9 @@ msgstr ""
#: data/json/items/containers.json
msgid "balloon"
msgid_plural "balloons"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "globo"
+msgstr[1] "globos"
+msgstr[2] "globos"
#. ~ Description for {'str': 'balloon'}
#: data/json/items/containers.json
@@ -45572,9 +45781,9 @@ msgstr ""
#: data/json/items/containers.json
msgid "large tin can"
msgid_plural "large tin cans"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lata grande de estaño"
+msgstr[1] "latas grandes de estaño"
+msgstr[2] "latas grandes de estaño"
#. ~ Description for {'str': 'large tin can'}
#: data/json/items/containers.json
@@ -45588,9 +45797,9 @@ msgstr ""
#: data/json/items/containers.json
msgid "large opened tin can"
msgid_plural "large opened tin cans"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lata grande de estaño abierta"
+msgstr[1] "latas grandes de estaño abiertas"
+msgstr[2] "latas grandes de estaño abiertas"
#. ~ Description for {'str': 'large opened tin can'}
#: data/json/items/containers.json
@@ -45604,9 +45813,9 @@ msgstr ""
#: data/json/items/containers.json
msgid "survival kit box"
msgid_plural "survival kit boxes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "caja de kit de supervivencia"
+msgstr[1] "cajas de kit de supervivencia"
+msgstr[2] "cajas de kit de supervivencia"
#. ~ Description for {'str': 'survival kit box', 'str_pl': 'survival kit
#. boxes'}
@@ -45709,16 +45918,16 @@ msgstr ""
#: data/json/items/fake.json
msgid "boulder anvil"
msgid_plural "boulder anvils"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "yunque de piedra"
+msgstr[1] "yunques de piedra"
+msgstr[2] "yunques de piedra"
#: data/json/items/fake.json
msgid "semi ground grains"
msgid_plural "semi ground grains"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "granos semimolidos"
+msgstr[1] "granos semimolidos"
+msgstr[2] "granos semimolidos"
#. ~ Description for {'str_sp': 'semi ground grains'}
#: data/json/items/fake.json
@@ -45743,9 +45952,9 @@ msgstr ""
#: data/json/items/fake.json
msgid "bionic firestarter"
msgid_plural "bionic firestarters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "magiclick biónico"
+msgstr[1] "magiclicks biónicos"
+msgstr[2] "magiclicks biónicos"
#: data/json/items/fake.json
msgid "mi-go bio-gun"
@@ -45803,9 +46012,9 @@ msgstr ""
#: data/json/items/fluff.json
msgid "Magic 8-Ball"
msgid_plural "Magic 8-Balls"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Bola 8 Mágica"
+msgstr[1] "Bolas 8 Mágicas"
+msgstr[2] "Bolas 8 Mágicas"
#. ~ Description for {'str': 'Magic 8-Ball'}
#: data/json/items/fluff.json
@@ -45819,9 +46028,9 @@ msgstr ""
#: data/json/items/fluff.json data/mods/Fuji_Structures/items/items_games.json
msgid "deck of cards"
msgid_plural "decks of cards"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mazo de cartas"
+msgstr[1] "mazos de cartas"
+msgstr[2] "mazos de cartas"
#. ~ Description for {'str': 'deck of cards', 'str_pl': 'decks of cards'}
#: data/json/items/fluff.json
@@ -45831,9 +46040,9 @@ msgstr "Es un mazo de 52 cartas."
#: data/json/items/fluff.json
msgid "coin"
msgid_plural "coins"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "moneda"
+msgstr[1] "monedas"
+msgstr[2] "monedas"
#. ~ Description for {'str': 'coin'}
#: data/json/items/fluff.json
@@ -45847,9 +46056,9 @@ msgstr ""
#: data/json/items/fluff.json
msgid "family photo"
msgid_plural "family photos"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "foto familiar"
+msgstr[1] "fotos familiares"
+msgstr[2] "fotos familiares"
#. ~ Description for {'str': 'family photo'}
#: data/json/items/fluff.json
@@ -45881,9 +46090,9 @@ msgstr ""
#: data/json/items/fuel.json
msgid "denatured alcohol"
msgid_plural "denatured alcohols"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "alcohol de quemar"
+msgstr[1] "alcohol de quemar"
+msgstr[2] "alcohol de quemar"
#. ~ Description for {'str': 'denatured alcohol'}
#: data/json/items/fuel.json
@@ -45899,9 +46108,9 @@ msgstr ""
#: data/json/items/fuel.json
msgid "methanol"
msgid_plural "methanols"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "metanol"
+msgstr[1] "metanol"
+msgstr[2] "metanol"
#. ~ Description for {'str': 'methanol'}
#: data/json/items/fuel.json
@@ -45940,9 +46149,9 @@ msgstr ""
#: data/json/items/fuel.json
msgid "avgas fuel"
msgid_plural "avgas fuel"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "combustible avgas"
+msgstr[1] "combustible avgas"
+msgstr[2] "combustible avgas"
#. ~ Description for {'str_sp': 'avgas fuel'}
#: data/json/items/fuel.json
@@ -46009,9 +46218,9 @@ msgstr ""
#: data/json/items/fuel.json
msgid "gelled gasoline"
msgid_plural "gelled gasoline"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "nafta gel"
+msgstr[1] "nafta gel"
+msgstr[2] "nafta gel"
#. ~ Description for {'str_sp': 'gelled gasoline'}
#: data/json/items/fuel.json
@@ -46027,9 +46236,9 @@ msgstr ""
#: data/json/items/fuel.json
msgid "flamethrower fuel"
msgid_plural "flamethrower fuel"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "combustible para lanzallamas"
+msgstr[1] "combustible para lanzallamas"
+msgstr[2] "combustible para lanzallamas"
#. ~ Description for {'str_sp': 'flamethrower fuel'}
#: data/json/items/fuel.json
@@ -46121,9 +46330,9 @@ msgstr[2] ""
#: data/json/items/generic.json
msgid "metabolism"
msgid_plural "metabolisms"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "metabolismo"
+msgstr[1] "metabolismos"
+msgstr[2] "metabolismos"
#: data/json/items/generic.json
msgid "nonsensoleum"
@@ -46158,9 +46367,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "INCIDENT REPORT: IMMERSION-27A"
msgid_plural "INCIDENT REPORT: IMMERSION-27As"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "REPORTE DE INCIDENTE: INMERSIÓN-27A"
+msgstr[1] "REPORTE DE INCIDENTE: INMERSIÓN-27A"
+msgstr[2] "REPORTE DE INCIDENTE: INMERSIÓN-27A"
#. ~ Description for {'str': 'INCIDENT REPORT: IMMERSION-27A'}
#: data/json/items/generic.json
@@ -46174,23 +46383,23 @@ msgstr ""
#: data/json/items/generic.json
msgid "MATERIAL: T-SUBSTRATE"
msgid_plural "MATERIAL: T-SUBSTRATEs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MATERIAL: T-SUSTRATO"
+msgstr[1] "MATERIAL: T-SUSTRATO"
+msgstr[2] "MATERIAL: T-SUSTRATO"
#: data/json/items/generic.json
msgid "HAADF MICROGRAPH: T-SUBSTRATE"
msgid_plural "HAADF MICROGRAPH: T-SUBSTRATEs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "HAADF MICROGRÁFICO: T-SUSTRATO"
+msgstr[1] "HAADF MICROGRÁFICO: T-SUSTRATO"
+msgstr[2] "HAADF MICROGRÁFICO: T-SUSTRATO"
#: data/json/items/generic.json
msgid "foodplace loyalty card"
msgid_plural "foodplace loyalty cards"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tarjeta de cliente de Foodplace"
+msgstr[1] "tarjetas de cliente de Foodplace"
+msgstr[2] "tarjetas de cliente de Foodplace"
#. ~ Description for {'str': 'foodplace loyalty card'}
#: data/json/items/generic.json
@@ -46235,9 +46444,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "faux fur pelt"
msgid_plural "faux fur pelts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pelaje artificial"
+msgstr[1] "pelajes artificiales"
+msgstr[2] "pelajes artificiales"
#. ~ Description for {'str': 'faux fur pelt'}
#: data/json/items/generic.json
@@ -46289,9 +46498,9 @@ msgstr "Un pequeño rollo de nomex, que es una tela ignífuga."
#: data/json/items/generic.json
msgid "superglue"
msgid_plural "superglue"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "superpegamento"
+msgstr[1] "superpegamento"
+msgstr[2] "superpegamento"
#. ~ Description for {'str_sp': 'superglue'}
#: data/json/items/generic.json
@@ -46359,9 +46568,9 @@ msgstr "Un pedazo del exoesqueleto de un insecto. Es liviano y muy duradero."
#: data/json/items/generic.json
msgid "set of 100 ceramic disk"
msgid_plural "ceramic disks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "conjunto de 100 discos de cerámica"
+msgstr[1] "discos de cerámica"
+msgstr[2] "discos de cerámica"
#. ~ Description for {'str': 'set of 100 ceramic disk', 'str_pl': 'ceramic
#. disks'}
@@ -46393,9 +46602,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "bundle of rags"
msgid_plural "bundles of rags"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "paquete de trapos"
+msgstr[1] "paquetes de trapos"
+msgstr[2] "paquetes de trapos"
#. ~ Description for {'str': 'bundle of rags', 'str_pl': 'bundles of rags'}
#: data/json/items/generic.json
@@ -46407,9 +46616,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "bundle of leather"
msgid_plural "bundles of leather"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "paquete de cueros"
+msgstr[1] "paquetes de cueros"
+msgstr[2] "paquetes de cueros"
#. ~ Description for {'str': 'bundle of leather', 'str_pl': 'bundles of
#. leather'}
@@ -46424,9 +46633,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "bundle of felt"
msgid_plural "bundles of felt"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "paquete de fieltros"
+msgstr[1] "paquetes de fieltros"
+msgstr[2] "paquetes de fieltros"
#. ~ Description for {'str': 'bundle of felt', 'str_pl': 'bundles of felt'}
#: data/json/items/generic.json
@@ -46439,9 +46648,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "t-substrate sample"
msgid_plural "t-substrate samples"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "muestra t-sustrato"
+msgstr[1] "muestras t-sustrato"
+msgstr[2] "muestras t-sustrato"
#. ~ Description for {'str': 't-substrate sample'}
#: data/json/items/generic.json
@@ -46531,9 +46740,9 @@ msgstr "Es un pendrive con puerto USB. Útil para almacenar software."
#: data/json/items/generic.json
msgid "data card"
msgid_plural "data cards"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tarjeta de información"
+msgstr[1] "tarjetas de información"
+msgstr[2] "tarjetas de información"
#. ~ Description for {'str': 'data card'}
#: data/json/items/generic.json
@@ -46590,9 +46799,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "scythe blade"
msgid_plural "scythe blades"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cuchilla de guadaña"
+msgstr[1] "cuchillas de guadaña"
+msgstr[2] "cuchillas de guadaña"
#. ~ Description for {'str': 'scythe blade'}
#: data/json/items/generic.json
@@ -46669,9 +46878,9 @@ msgstr "Un pedazo de alambre rígido, cubierto con púas puntiagudas."
#: data/json/items/generic.json
msgid "steel mesh"
msgid_plural "steel meshes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "malla de acero"
+msgstr[1] "mallas de acero"
+msgstr[2] "mallas de acero"
#. ~ Description for {'str': 'steel mesh', 'str_pl': 'steel meshes'}
#: data/json/items/generic.json
@@ -46834,9 +47043,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "bimetal thermostat"
msgid_plural "bimetal thermostats"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "termostato bimetálico"
+msgstr[1] "termostatos bimetálicos"
+msgstr[2] "termostatos bimetálicos"
#. ~ Description for {'str': 'bimetal thermostat'}
#: data/json/items/generic.json
@@ -46877,9 +47086,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "delayed fuze"
msgid_plural "delayed fuzes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mecha retrasada"
+msgstr[1] "mechas retrasadas"
+msgstr[2] "mechas retrasadas"
#. ~ Description for delayed fuze
#: data/json/items/generic.json
@@ -46893,9 +47102,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "impact fuze"
msgid_plural "impact fuzes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mecha de impacto"
+msgstr[1] "mechas de impacto"
+msgstr[2] "mechas de impacto"
#. ~ Description for impact fuze
#: data/json/items/generic.json
@@ -46984,9 +47193,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "broken lab defense bot"
msgid_plural "broken lab defense bots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "robot defensor de laboratorio roto"
+msgstr[1] "robots defensores de laboratorio rotos"
+msgstr[2] "robots defensores de laboratorio rotos"
#. ~ Description for {'str': 'broken lab defense bot'}
#: data/json/items/generic.json
@@ -47016,9 +47225,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "broken nurse bot"
msgid_plural "broken nurse bots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "enfermerobot roto"
+msgstr[1] "enfermerobots rotos"
+msgstr[2] "enfermerobots rotos"
#. ~ Description for {'str': 'broken nurse bot'}
#: data/json/items/generic.json
@@ -47032,9 +47241,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "broken grocery bot"
msgid_plural "broken grocery bots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "reposibot roto"
+msgstr[1] "reposibots rotos"
+msgstr[2] "reposibots rotos"
#. ~ Description for {'str': 'broken grocery bot'}
#: data/json/items/generic.json
@@ -47087,9 +47296,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "broken prototype robot"
msgid_plural "broken prototype robots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "robot prototipo roto"
+msgstr[1] "robots prototipo rotos"
+msgstr[2] "robots prototipo rotos"
#. ~ Description for {'str': 'broken prototype robot'}
#: data/json/items/generic.json
@@ -47120,9 +47329,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "broken recon mech"
msgid_plural "broken recon mechs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mecha de reconocimiento roto"
+msgstr[1] "mechas de reconocimiento rotos"
+msgstr[2] "mechas de reconocimiento rotos"
#. ~ Description for {'str': 'broken recon mech'}
#. ~ Description for {'str': 'broken mech lifter'}
@@ -47135,23 +47344,23 @@ msgstr ""
#: data/json/items/generic.json
msgid "broken mech lifter"
msgid_plural "broken mech lifters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mecha de levantamiento roto"
+msgstr[1] "mechas de levantamiento rotos"
+msgstr[2] "mechas de levantamiento rotos"
#: data/json/items/generic.json
msgid "broken combat mech"
msgid_plural "broken combat mechs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mecha de combate roto"
+msgstr[1] "mechas de combate rotos"
+msgstr[2] "mechas de combate rotos"
#: data/json/items/generic.json
msgid "broken riot dispatch"
msgid_plural "broken riot dispatches"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "desplegador de disturbios roto"
+msgstr[1] "desplegadores de disturbios rotos"
+msgstr[2] "desplegadores de disturbios rotos"
#. ~ Description for {'str': 'broken riot dispatch', 'str_pl': 'broken riot
#. dispatches'}
@@ -47167,9 +47376,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "broken military dispatch"
msgid_plural "broken military dispatches"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "desplegador militar roto"
+msgstr[1] "desplegadores militares rotos"
+msgstr[2] "desplegadores militares rotos"
#. ~ Description for {'str': 'broken military dispatch', 'str_pl': 'broken
#. military dispatches'}
@@ -47394,9 +47603,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "large LCD screen"
msgid_plural "large LCD screens"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pantalla LCD grande"
+msgstr[1] "pantallas LCD grandes"
+msgstr[2] "pantallas LCD grandes"
#. ~ Description for {'str': 'large LCD screen'}
#: data/json/items/generic.json
@@ -47443,9 +47652,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "small high-quality lens"
msgid_plural "small high-quality lenses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lente pequeño de alta calidad"
+msgstr[1] "lentes pequeños de alta calidad"
+msgstr[2] "lentes pequeños de alta calidad"
#. ~ Description for {'str': 'small high-quality lens', 'str_pl': 'small high-
#. quality lenses'}
@@ -47460,9 +47669,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "pair of tinted glass"
msgid_plural "pairs of tinted glass"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de anteojos polarizados"
+msgstr[1] "pares de anteojos polarizados"
+msgstr[2] "pares de anteojos polarizados"
#. ~ Description for {'str': 'pair of tinted glass', 'str_pl': 'pairs of
#. tinted glass'}
@@ -47512,9 +47721,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "nanofabricator template (silicon photonics)"
msgid_plural "nanofabricator templates (silicon photonics)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "plantilla para nanofabricador (fotónica con silicona)"
+msgstr[1] "plantillas para nanofabricador (fotónica con silicona)"
+msgstr[2] "plantillas para nanofabricador (fotónica con silicona)"
#. ~ Description for {'str': 'nanofabricator template (silicon photonics)',
#. 'str_pl': 'nanofabricator templates (silicon photonics)'}
@@ -47548,9 +47757,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "micro motor"
msgid_plural "micro motors"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "micro motor"
+msgstr[1] "micro motores"
+msgstr[2] "micro motores"
#. ~ Description for {'str': 'micro motor'}
#: data/json/items/generic.json
@@ -47639,9 +47848,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "fishbowl"
msgid_plural "fishbowls"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pecera"
+msgstr[1] "peceras"
+msgstr[2] "peceras"
#. ~ Description for {'str': 'fishbowl'}
#: data/json/items/generic.json
@@ -47669,9 +47878,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "pipe cleaner"
msgid_plural "pipe cleaners"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "destapacañerías"
+msgstr[1] "destapacañerías"
+msgstr[2] "destapacañerías"
#. ~ Description for {'str': 'pipe cleaner'}
#: data/json/items/generic.json
@@ -47851,9 +48060,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "chamomile flowers"
msgid_plural "chamomile flowers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "flores de manzanilla"
+msgstr[1] "flores de manzanilla"
+msgstr[2] "flores de manzanilla"
#. ~ Description for {'str_sp': 'chamomile flowers'}
#: data/json/items/generic.json
@@ -47866,16 +48075,16 @@ msgstr ""
#: data/json/items/generic.json
msgid "lotus flower"
msgid_plural "lotus flowers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "flor de loto"
+msgstr[1] "flores de loto"
+msgstr[2] "flores de loto"
#: data/json/items/generic.json
msgid "spurge flowers"
msgid_plural "spurge flowers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "flor de euforbio"
+msgstr[1] "flores de euforbio"
+msgstr[2] "flores de euforbio"
#. ~ Description for {'str_sp': 'spurge flowers'}
#: data/json/items/generic.json
@@ -47926,9 +48135,9 @@ msgstr "Es un poco de mortero, listo para ser usado en alguna construcción."
#: data/json/items/generic.json
msgid "soft adobe brick"
msgid_plural "soft adobe bricks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "ladrillo blando de adobe"
+msgstr[1] "ladrillos blandos de adobe"
+msgstr[2] "ladrillos blandos de adobe"
#. ~ Use action msg for {'str': 'soft adobe brick'}.
#: data/json/items/generic.json
@@ -47950,9 +48159,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "adobe brick"
msgid_plural "adobe bricks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "ladrillo de adobe"
+msgstr[1] "ladrillos de adobe"
+msgstr[2] "ladrillos de adobe"
#. ~ Description for {'str': 'adobe brick'}
#: data/json/items/generic.json
@@ -47966,9 +48175,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "adobe mortar"
msgid_plural "adobe mortar"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mezcla de adobe"
+msgstr[1] "mezcla de adobe"
+msgstr[2] "mezcla de adobe"
#. ~ Description for {'str_sp': 'adobe mortar'}
#: data/json/items/generic.json
@@ -47983,9 +48192,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "tanbark"
msgid_plural "tanbark"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "casca"
+msgstr[1] "casca"
+msgstr[2] "casca"
#. ~ Description for {'str_sp': 'tanbark'}
#: data/json/items/generic.json
@@ -48009,9 +48218,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "willowbark"
msgid_plural "willowbark"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cortezas de sauce"
+msgstr[1] "corteza de sauce"
+msgstr[2] "corteza de sauce"
#. ~ Description for {'str_sp': 'willowbark'}
#: data/json/items/generic.json
@@ -48037,9 +48246,9 @@ msgstr "Un diamante brillante."
#: data/json/items/generic.json
msgid "garnet"
msgid_plural "garnets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "granate"
+msgstr[1] "granates"
+msgstr[2] "granates"
#. ~ Description for {'str': 'garnet'}
#: data/json/items/generic.json
@@ -48049,9 +48258,9 @@ msgstr "Es un granate brillante."
#: data/json/items/generic.json
msgid "amethyst"
msgid_plural "amethysts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "amatista"
+msgstr[1] "amatistas"
+msgstr[2] "amatistas"
#. ~ Description for {'str': 'amethyst'}
#: data/json/items/generic.json
@@ -48061,9 +48270,9 @@ msgstr "Es una amatista brillante."
#: data/json/items/generic.json
msgid "aquamarine"
msgid_plural "aquamarines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "aguamarina"
+msgstr[1] "aguamarinas"
+msgstr[2] "aguamarinas"
#. ~ Description for {'str': 'aquamarine'}
#: data/json/items/generic.json
@@ -48073,9 +48282,9 @@ msgstr "Es una aguamarina brillante."
#: data/json/items/generic.json
msgid "emerald"
msgid_plural "emeralds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "esmeralda"
+msgstr[1] "esmeraldas"
+msgstr[2] "esmeraldas"
#. ~ Description for {'str': 'emerald'}
#: data/json/items/generic.json
@@ -48085,9 +48294,9 @@ msgstr "Es una esmeralda brillante."
#: data/json/items/generic.json
msgid "alexandrite"
msgid_plural "alexandrites"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "alejandrita"
+msgstr[1] "alejandritas"
+msgstr[2] "alejandritas"
#. ~ Description for {'str': 'alexandrite'}
#: data/json/items/generic.json
@@ -48097,9 +48306,9 @@ msgstr "Es una alejandrita brillante."
#: data/json/items/generic.json
msgid "pearl"
msgid_plural "pearls"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "perla"
+msgstr[1] "perlas"
+msgstr[2] "perlas"
#. ~ Description for {'str': 'pearl'}
#: data/json/items/generic.json
@@ -48109,9 +48318,9 @@ msgstr "Es una perla lustrosa."
#: data/json/items/generic.json
msgid "ruby"
msgid_plural "rubies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rubí"
+msgstr[1] "rubíes"
+msgstr[2] "rubíes"
#. ~ Description for {'str': 'ruby', 'str_pl': 'rubies'}
#: data/json/items/generic.json
@@ -48121,9 +48330,9 @@ msgstr "Es un rubí brillante."
#: data/json/items/generic.json
msgid "peridot"
msgid_plural "peridots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "peridoto"
+msgstr[1] "peridotos"
+msgstr[2] "peridotos"
#. ~ Description for {'str': 'peridot'}
#: data/json/items/generic.json
@@ -48133,9 +48342,9 @@ msgstr "Es un peridoto brillante."
#: data/json/items/generic.json
msgid "sapphire"
msgid_plural "sapphires"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zafiro"
+msgstr[1] "zafiros"
+msgstr[2] "zafiros"
#. ~ Description for {'str': 'sapphire'}
#: data/json/items/generic.json
@@ -48145,9 +48354,9 @@ msgstr "Es un zafiro brillante."
#: data/json/items/generic.json
msgid "opal"
msgid_plural "opals"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "ópalo"
+msgstr[1] "ópalos"
+msgstr[2] "ópalos"
#. ~ Description for {'str': 'opal'}
#: data/json/items/generic.json
@@ -48157,9 +48366,9 @@ msgstr "Es un ópalo lustroso."
#: data/json/items/generic.json
msgid "tourmaline"
msgid_plural "tourmalines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "turmalina"
+msgstr[1] "turmalinas"
+msgstr[2] "turmalinas"
#. ~ Description for {'str': 'tourmaline'}
#: data/json/items/generic.json
@@ -48169,9 +48378,9 @@ msgstr "Es una turmalina brillante."
#: data/json/items/generic.json
msgid "citrine"
msgid_plural "citrines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "citrino"
+msgstr[1] "citrinos"
+msgstr[2] "citrinos"
#. ~ Description for {'str': 'citrine'}
#: data/json/items/generic.json
@@ -48181,9 +48390,9 @@ msgstr "Es un citrino brillante."
#: data/json/items/generic.json
msgid "topaz"
msgid_plural "topazs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "topacio"
+msgstr[1] "topacios"
+msgstr[2] "topacios"
#. ~ Description for {'str': 'topaz'}
#: data/json/items/generic.json
@@ -48331,9 +48540,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "autoclave pouch"
msgid_plural "autoclave pouches"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bolsa autoclave"
+msgstr[1] "bolsas autoclave"
+msgstr[2] "bolsas autoclave"
#. ~ Description for {'str': 'autoclave pouch', 'str_pl': 'autoclave pouches'}
#: data/json/items/generic.json
@@ -48495,9 +48704,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "raw tobacco"
msgid_plural "raw tobacco"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tabaco crudo"
+msgstr[1] "tabaco crudo"
+msgstr[2] "tabaco crudo"
#. ~ Description for {'str_sp': 'raw tobacco'}
#: data/json/items/generic.json
@@ -48616,9 +48825,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "industrial ID card"
msgid_plural "industrial ID cards"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "carné de industrial"
+msgstr[1] "carnés de industrial"
+msgstr[2] "carnés de industrial"
#. ~ Description for {'str': 'industrial ID card'}
#: data/json/items/generic.json
@@ -48634,9 +48843,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "neoprene patch"
msgid_plural "neoprene patches"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "fragmento de neopreno"
+msgstr[1] "fragmentos de neopreno"
+msgstr[2] "fragmentos de neopreno"
#. ~ Description for {'str': 'neoprene patch', 'str_pl': 'neoprene patches'}
#: data/json/items/generic.json
@@ -48709,9 +48918,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "shrapnel"
msgid_plural "shrapnels"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "esquirla"
+msgstr[1] "esquirlas"
+msgstr[2] "esquirlas"
#. ~ Description for {'str': 'shrapnel'}
#: data/json/items/generic.json
@@ -48721,9 +48930,9 @@ msgstr "Es un pedazo de metal retorcido y con puntas."
#: data/json/items/generic.json
msgid "clay flower pot"
msgid_plural "clay flower pots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "maceta de arcilla"
+msgstr[1] "macetas de arcilla"
+msgstr[2] "macetas de arcilla"
#. ~ Description for {'str': 'clay flower pot'}
#: data/json/items/generic.json
@@ -48733,9 +48942,9 @@ msgstr "Es una linda maceta de arcilla en la que se puede plantar algo."
#: data/json/items/generic.json
msgid "plastic flower pot"
msgid_plural "plastic flower pots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "maceta de plástico"
+msgstr[1] "macetas de plástico"
+msgstr[2] "macetas de plástico"
#. ~ Description for {'str': 'plastic flower pot'}
#: data/json/items/generic.json
@@ -48760,9 +48969,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "evaporator coil"
msgid_plural "evaporator coils"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bobina evaporadora"
+msgstr[1] "bobinas evaporadoras"
+msgstr[2] "bobinas evaporadoras"
#. ~ Description for {'str': 'evaporator coil'}
#: data/json/items/generic.json
@@ -48774,9 +48983,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "condensor coil"
msgid_plural "condensor coils"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bobina condensadora"
+msgstr[1] "bobinas condensadoras"
+msgstr[2] "bobinas condensadoras"
#. ~ Description for {'str': 'condensor coil'}
#: data/json/items/generic.json
@@ -48839,9 +49048,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "small lock and key"
msgid_plural "small locks and keys"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "llave y candado pequeño"
+msgstr[1] "llaves y candados pequeños"
+msgstr[2] "llaves y candados pequeños"
#. ~ Description for {'str': 'small lock and key', 'str_pl': 'small locks and
#. keys'}
@@ -48852,9 +49061,9 @@ msgstr "Es un candado chico, con unas llaves puestas."
#: data/json/items/generic.json
msgid "in progress craft"
msgid_plural "in progress crafts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "fabricación en progreso"
+msgstr[1] "fabricaciones en progreso"
+msgstr[2] "fabricaciones en progreso"
#. ~ Description for {'str': 'in progress craft'}
#: data/json/items/generic.json
@@ -48864,9 +49073,9 @@ msgstr "Esto es una fabricación en progreso."
#: data/json/items/generic.json
msgid "spare tire carrier"
msgid_plural "spare tire carriers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "porta rueda de auxilio"
+msgstr[1] "porta rueda de auxilio"
+msgstr[2] "porta rueda de auxilio"
#. ~ Description for {'str': 'spare tire carrier'}
#: data/json/items/generic.json
@@ -48880,9 +49089,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "welding component kit"
msgid_plural "welding component kits"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "equipo de soldadura"
+msgstr[1] "equipos de soldadura"
+msgstr[2] "equipos de soldadura"
#. ~ Description for {'str': 'welding component kit'}
#: data/json/items/generic.json
@@ -48896,9 +49105,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "amplifier head"
msgid_plural "amplifier heads"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cabezal de amplificador"
+msgstr[1] "cabezales de amplificador"
+msgstr[2] "cabezales de amplificador"
#. ~ Description for {'str': 'amplifier head'}
#: data/json/items/generic.json
@@ -48953,9 +49162,9 @@ msgstr[2] "torretas láseres rotas"
#: data/json/items/generic.json
msgid "broken secubot"
msgid_plural "broken secubots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "secubot roto"
+msgstr[1] "secubots rotos"
+msgstr[2] "secubots rotos"
#. ~ Description for {'str': 'broken secubot'}
#: data/json/items/generic.json
@@ -48969,9 +49178,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "broken M202A1 TALON"
msgid_plural "broken M202A1 TALONs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "M202A1 TALON roto"
+msgstr[1] "M202A1 TALON rotos"
+msgstr[2] "M202A1 TALON rotos"
#. ~ Description for {'str': 'broken M202A1 TALON'}
#. ~ Description for {'str': 'broken launcher TALON UGV'}
@@ -48987,9 +49196,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "fire brick"
msgid_plural "fire bricks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "ladrillo refractario"
+msgstr[1] "ladrillos refractarios"
+msgstr[2] "ladrillos refractarios"
#. ~ Description for {'str': 'fire brick'}
#: data/json/items/generic.json
@@ -49001,9 +49210,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "survival kit"
msgid_plural "survival kits"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "kit de supervivencia"
+msgstr[1] "kits de supervivencia"
+msgstr[2] "kits de supervivencia"
#. ~ Description for {'str': 'survival kit'}
#: data/json/items/generic.json
@@ -49030,9 +49239,9 @@ msgstr ""
#: data/json/items/generic.json
msgid "plastic dice"
msgid_plural "plastic dice"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "dado de plástico"
+msgstr[1] "dados de plástico"
+msgstr[2] "dados de plástico"
#. ~ Description for {'str_sp': 'plastic dice'}
#: data/json/items/generic.json
@@ -49042,9 +49251,9 @@ msgstr "Es un dado de plástico de seis cara."
#: data/json/items/generic.json
msgid "salt lick"
msgid_plural "salt licks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bloque de sal"
+msgstr[1] "bloques de sal"
+msgstr[2] "bloques de sal"
#. ~ Description for {'str': 'salt lick'}
#: data/json/items/generic.json
@@ -49228,9 +49437,9 @@ msgstr ""
#: data/json/items/newspaper.json
msgid "character sheet"
msgid_plural "character sheets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "planilla de personaje"
+msgstr[1] "planillas de personaje"
+msgstr[2] "planillas de personaje"
#. ~ Description for {'str': 'character sheet'}
#: data/json/items/newspaper.json
@@ -49363,9 +49572,9 @@ msgstr ""
#: data/json/items/robot_parts.json
msgid "module template"
msgid_plural "module templates"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "plantilla de módulo"
+msgstr[1] "plantillas de módulo"
+msgstr[2] "plantillas de módulo"
#. ~ Description for {'str': 'module template'}
#: data/json/items/robot_parts.json
@@ -49377,9 +49586,9 @@ msgstr ""
#: data/json/items/robot_parts.json
msgid "targeting module"
msgid_plural "targeting modules"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "módulo de objetivo"
+msgstr[1] "módulos de objetivo"
+msgstr[2] "módulos de objetivo"
#. ~ Description for {'str': 'targeting module'}
#: data/json/items/robot_parts.json
@@ -49394,9 +49603,9 @@ msgstr ""
#: data/json/items/robot_parts.json
msgid "identification module"
msgid_plural "identification modules"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "módulo de identificación"
+msgstr[1] "módulos de identificación"
+msgstr[2] "módulos de identificación"
#. ~ Description for {'str': 'identification module'}
#: data/json/items/robot_parts.json
@@ -49410,9 +49619,9 @@ msgstr ""
#: data/json/items/robot_parts.json
msgid "pathfinding module"
msgid_plural "pathfinding modules"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "módulo de reconocimiento"
+msgstr[1] "módulos de reconocimiento"
+msgstr[2] "módulos de reconocimiento"
#. ~ Description for {'str': 'pathfinding module'}
#: data/json/items/robot_parts.json
@@ -49426,9 +49635,9 @@ msgstr ""
#: data/json/items/robot_parts.json
msgid "memory banks module"
msgid_plural "memory banks modules"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "módulo de memoria"
+msgstr[1] "módulos de memoria"
+msgstr[2] "módulos de memoria"
#. ~ Description for {'str': 'memory banks module'}
#: data/json/items/robot_parts.json
@@ -49438,9 +49647,9 @@ msgstr "Este módulo permite almacenar y recuperar información."
#: data/json/items/robot_parts.json
msgid "sensor array"
msgid_plural "sensor arrays"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "matriz de sensores"
+msgstr[1] "matrices de sensores"
+msgstr[2] "matrices de sensores"
#. ~ Description for {'str': 'sensor array'}
#: data/json/items/robot_parts.json
@@ -49454,9 +49663,9 @@ msgstr ""
#: data/json/items/robot_parts.json
msgid "self monitoring sensors"
msgid_plural "self monitoring sensors"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sensores de automonitoreo"
+msgstr[1] "sensores de automonitoreo"
+msgstr[2] "sensores de automonitoreo"
#. ~ Description for {'str_sp': 'self monitoring sensors'}
#: data/json/items/robot_parts.json
@@ -49486,9 +49695,9 @@ msgstr ""
#: data/json/items/robot_parts.json
msgid "basic AI core"
msgid_plural "basic AI cores"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "núcleo básico de IA"
+msgstr[1] "núcleos básicos de IA"
+msgstr[2] "núcleos básicos de IA"
#. ~ Description for {'str': 'basic AI core'}
#: data/json/items/robot_parts.json
@@ -49498,9 +49707,9 @@ msgstr "Es un núcleo muy básico de IA con las mínimas habilidades cognitivas.
#: data/json/items/robot_parts.json
msgid "advanced AI core"
msgid_plural "advanced AI cores"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "núcleo avanzado de IA"
+msgstr[1] "núcleos avanzados de IA"
+msgstr[2] "núcleos avanzados de IA"
#. ~ Description for {'str': 'advanced AI core'}
#: data/json/items/robot_parts.json
@@ -49511,9 +49720,9 @@ msgstr ""
#: data/json/items/robot_parts.json
msgid "gun operating system"
msgid_plural "gun operating systems"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sistema de operación de armas"
+msgstr[1] "sistemas de operación de armas"
+msgstr[2] "sistemas de operación de armas"
#. ~ Description for {'str': 'gun operating system'}
#: data/json/items/robot_parts.json
@@ -49523,9 +49732,9 @@ msgstr "Este sistema puede operar la mayoría de armas convencionales."
#: data/json/items/robot_parts.json
msgid "set of tiny spidery legs"
msgid_plural "sets of tiny spidery legs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "grupo de pequeñas piernas arácnidas"
+msgstr[1] "grupos de pequeñas piernas arácnidas"
+msgstr[2] "grupos de pequeñas piernas arácnidas"
#. ~ Description for {'str': 'set of tiny spidery legs', 'str_pl': 'sets of
#. tiny spidery legs'}
@@ -49537,9 +49746,9 @@ msgstr ""
#: data/json/items/robot_parts.json
msgid "set of reverse-jointed legs"
msgid_plural "sets of reverse-jointed legs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "grupo de piernas con articulaciones inversas"
+msgstr[1] "grupos de piernas con articulaciones inversas"
+msgstr[2] "grupos de piernas con articulaciones inversas"
#. ~ Description for {'str': 'set of reverse-jointed legs', 'str_pl': 'sets of
#. reverse-jointed legs'}
@@ -49553,9 +49762,9 @@ msgstr ""
#: data/json/items/robot_parts.json
msgid "set of omni wheels"
msgid_plural "sets of omni wheels"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "grupo de ruedas multidireccionales"
+msgstr[1] "grupos de ruedas multidireccionales"
+msgstr[2] "grupos de ruedas multidireccionales"
#. ~ Description for {'str': 'set of omni wheels', 'str_pl': 'sets of omni
#. wheels'}
@@ -49567,9 +49776,9 @@ msgstr ""
#: data/json/items/robot_parts.json
msgid "set of rotors"
msgid_plural "sets of rotors"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "grupo de rotores"
+msgstr[1] "grupos de rotores"
+msgstr[2] "grupos de rotores"
#. ~ Description for {'str': 'set of rotors', 'str_pl': 'sets of rotors'}
#: data/json/items/robot_parts.json
@@ -49579,9 +49788,9 @@ msgstr "Es un grupo de rotores que pueden levantar a un pequeño drone."
#: data/json/items/robot_parts.json
msgid "set of android legs"
msgid_plural "sets of android legs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "grupo de piernas androides"
+msgstr[1] "grupos de piernas androides"
+msgstr[2] "grupos de piernas androides"
#. ~ Description for {'str': 'set of android legs', 'str_pl': 'sets of android
#. legs'}
@@ -49592,9 +49801,9 @@ msgstr "Es un grupo de piernas similares a las humanas."
#: data/json/items/robot_parts.json
msgid "set of android arms"
msgid_plural "sets of android arms"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "grupo de brazos androides"
+msgstr[1] "grupos de brazos androides"
+msgstr[2] "grupos de brazos androides"
#. ~ Description for {'str': 'set of android arms', 'str_pl': 'sets of android
#. arms'}
@@ -49605,9 +49814,9 @@ msgstr "Es un grupo de brazos similares a las humanos."
#: data/json/items/robot_parts.json
msgid "set of small tank tread"
msgid_plural "sets of small tank tread"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de orugas pequeñas de tanque"
+msgstr[1] "pares de orugas pequeñas de tanque"
+msgstr[2] "pares de orugas pequeñas de tanque"
#. ~ Description for {'str': 'set of small tank tread', 'str_pl': 'sets of
#. small tank tread'}
@@ -49620,9 +49829,9 @@ msgstr ""
#: data/json/items/robot_parts.json
msgid "turret interior chassis"
msgid_plural "turret interior chassis"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "chasis interior de torreta"
+msgstr[1] "chasis interiores de torreta"
+msgstr[2] "chasis interiores de torreta"
#. ~ Description for {'str_sp': 'turret interior chassis'}
#: data/json/items/robot_parts.json
@@ -49650,9 +49859,9 @@ msgstr ""
#: data/json/items/robot_parts.json
msgid "android skeleton"
msgid_plural "android skeletons"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "esqueleto androide"
+msgstr[1] "esqueletos androides"
+msgstr[2] "esqueletos androides"
#. ~ Description for {'str': 'android skeleton'}
#: data/json/items/robot_parts.json
@@ -50046,9 +50255,9 @@ msgstr ""
#: data/json/items/software.json src/cata_tiles.cpp src/options.cpp
msgid "software"
msgid_plural "software"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "software"
+msgstr[1] "software"
+msgstr[2] "software"
#: data/json/items/software.json
msgid "misc software"
@@ -50138,9 +50347,9 @@ msgstr ""
#: data/json/items/software.json
msgid "neural data"
msgid_plural "neural data"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "información neural"
+msgstr[1] "información neural"
+msgstr[2] "información neural"
#. ~ Description for {'str_sp': 'neural data'}
#: data/json/items/software.json
@@ -50156,9 +50365,9 @@ msgstr ""
#: data/json/items/software.json
msgid "integrated circuit datasheet archives"
msgid_plural "misc software"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "software variado"
+msgstr[1] "software variado"
+msgstr[2] "software variado"
#. ~ Description for {'str': 'integrated circuit datasheet archives',
#. 'str_pl': 'misc software'}
@@ -50190,9 +50399,9 @@ msgstr ""
#: data/json/items/tool_armor.json
msgid "arm splint XL"
msgid_plural "arm splints XL"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tablilla para brazo XL"
+msgstr[1] "tablillas para brazo XL"
+msgstr[2] "tablillas para brazo XL"
#. ~ Description for {'str': 'arm splint XL', 'str_pl': 'arm splints XL'}
#: data/json/items/tool_armor.json
@@ -50254,9 +50463,9 @@ msgstr ""
#: data/json/items/tool_armor.json
msgid "personal go bag"
msgid_plural "personal go bags"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bolso de evacuación personal"
+msgstr[1] "bolsos de evacuación personales"
+msgstr[2] "bolsos de evacuación personales"
#. ~ Description for {'str': 'personal go bag'}
#: data/json/items/tool_armor.json
@@ -50278,9 +50487,9 @@ msgstr[2] "tablillas para piernas"
#: data/json/items/tool_armor.json
msgid "leg splint XL"
msgid_plural "leg splints XL"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tablilla para pierna XL"
+msgstr[1] "tablillas para pierna XL"
+msgstr[2] "tablillas para pierna XL"
#. ~ Description for {'str': 'leg splint XL', 'str_pl': 'leg splints XL'}
#: data/json/items/tool_armor.json
@@ -50380,9 +50589,9 @@ msgstr ""
#: data/json/items/tool_armor.json
msgid "crude welding mask"
msgid_plural "crude welding masks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "careta rudimentaria de soldador"
+msgstr[1] "caretas rudimentarias de soldador"
+msgstr[2] "caretas rudimentarias de soldador"
#. ~ Description for {'str': 'crude welding mask'}
#: data/json/items/tool_armor.json
@@ -50399,9 +50608,9 @@ msgstr ""
#: data/json/items/tool_armor.json
msgid "crude welding mask (raised)"
msgid_plural "crude welding masks (raised)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "careta rudimentaria de soldador (levantada)"
+msgstr[1] "caretas rudimentarias de soldador (levantadas)"
+msgstr[2] "caretas rudimentarias de soldador (levantadas)"
#. ~ Use action menu_text for {'str': 'crude welding mask (raised)', 'str_pl':
#. 'crude welding masks (raised)'}.
@@ -50433,9 +50642,9 @@ msgstr ""
#: data/json/items/tool_armor.json
msgid "welding mask (raised)"
msgid_plural "welding masks (raised)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "careta de soldador (levantada)"
+msgstr[1] "caretas de soldador (levantadas)"
+msgstr[2] "caretas de soldador (levantadas)"
#. ~ Use action msg for {'str': 'welding mask (raised)', 'str_pl': 'welding
#. masks (raised)'}.
@@ -50472,9 +50681,9 @@ msgstr ""
#: data/json/items/tool_armor.json
msgid "hologram cloak"
msgid_plural "hologram cloaks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "capa de holograma"
+msgstr[1] "capas de holograma"
+msgstr[2] "capas de holograma"
#. ~ Description for {'str': 'hologram cloak'}
#: data/json/items/tool_armor.json
@@ -50792,9 +51001,9 @@ msgstr ""
#: data/json/items/tool_armor.json
msgid "survivor headlamp"
msgid_plural "survivor headlamps"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "faro delantero de supervivencia"
+msgstr[1] "faros delanteros de supervivencia"
+msgstr[2] "faros delanteros de supervivencia"
#. ~ Use action msg for {'str': 'survivor headlamp'}.
#: data/json/items/tool_armor.json
@@ -50818,9 +51027,9 @@ msgstr ""
#: data/json/items/tool_armor.json
msgid "survivor headlamp (on)"
msgid_plural "survivor headlamps (on)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "faro delantero de supervivencia (enc.)"
+msgstr[1] "faros delanteros de supervivencia (enc.)"
+msgstr[2] "faros delanteros de supervivencia (enc.)"
#. ~ Description for {'str': 'survivor headlamp (on)', 'str_pl': 'survivor
#. headlamps (on)'}
@@ -52390,9 +52599,9 @@ msgstr ""
#: data/json/items/tool_armor.json
msgid "solar backpack (folded)"
msgid_plural "solar backpacks (folded)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mochila solar (plegada)"
+msgstr[1] "mochilas solares (plegadas)"
+msgstr[2] "mochilas solares (plegadas)"
#. ~ Description for {'str': 'solar backpack (folded)', 'str_pl': 'solar
#. backpacks (folded)'}
@@ -52595,9 +52804,9 @@ msgstr[2] ""
#: data/json/items/tool_armor.json
msgid "pair of attached ear plugs (in)"
msgid_plural "pairs of attached ear plugs (in)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de tapones para los oídos unidos (puesto)"
+msgstr[1] "pares de tapones para los oídos unidos (puestos)"
+msgstr[2] "pares de tapones para los oídos unidos (puestos)"
#. ~ Use action menu_text for {'str': 'pair of attached ear plugs (in)',
#. 'str_pl': 'pairs of attached ear plugs (in)'}.
@@ -52624,9 +52833,9 @@ msgstr ""
#: data/json/items/tool_armor.json
msgid "pair of attached ear plugs (out)"
msgid_plural "pairs of attached ear plugs (out)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de tapones para los oídos unidos"
+msgstr[1] "pares de tapones para los oídos unidos"
+msgstr[2] "pares de tapones para los oídos unidos"
#. ~ Use action menu_text for {'str': 'pair of attached ear plugs (out)',
#. 'str_pl': 'pairs of attached ear plugs (out)'}.
@@ -52735,9 +52944,9 @@ msgstr ""
#: data/json/items/ammo/10mm.json
msgid "10mm Auto FMJ"
msgid_plural "10mm Auto FMJs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "10mm Auto FMJ"
+msgstr[1] "10mm Auto FMJ"
+msgstr[2] "10mm Auto FMJ"
#. ~ Description for {'str': '10mm Auto FMJ'}
#: data/json/items/ammo/10mm.json
@@ -52751,16 +52960,16 @@ msgstr ""
#: data/json/items/ammo/10mm.json
msgid "10mm Auto FMJ, black powder"
msgid_plural "10mm Auto FMJ, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "10mm Auto FMJ, pólvora"
+msgstr[1] "10mm Auto FMJ, pólvora"
+msgstr[2] "10mm Auto FMJ, pólvora"
#: data/json/items/ammo/12mm.json
msgid "H&K 12mm"
msgid_plural "H&K 12mms"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "H&K 12mm"
+msgstr[1] "H&K 12mm"
+msgstr[2] "H&K 12mm"
#. ~ Description for {'str': 'H&K 12mm'}
#: data/json/items/ammo/12mm.json
@@ -52792,54 +53001,46 @@ msgstr ""
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm flechette, handmade"
msgid_plural "20x66mm flechettes, handmade"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "20x66mm dardos perforantes, casera"
+msgstr[1] "20x66mm dardos perforantes, casera"
+msgstr[2] "20x66mm dardos perforantes, casera"
#. ~ Description for {'str': '20x66mm flechette, handmade', 'str_pl': '20x66mm
#. flechettes, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless flechette rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless flechette rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
-"Son réplicas falsas de las balas de Rivtech 20x66mm sin casquillo, con una "
-"carga de dardos perforantes. Al no tener casquillo, no pueden ser desarmadas"
-" ni recargadas."
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm buckshot, handmade"
msgid_plural "20x66mm buckshot, handmades"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "perdigones grandes 20x66mm, casero"
+msgstr[1] "perdigones grandes 20x66mm, casero"
+msgstr[2] "perdigones grandes 20x66mm, casero"
#. ~ Description for {'str': '20x66mm buckshot, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless buckshot rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless buckshot rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
-"Son réplicas cutres de las balas de Rivtech 20x66mm sin casquillo. Al no "
-"tener casquillo, no pueden ser desarmadas ni recargadas."
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm slug, handmade"
msgid_plural "20x66mm slugs, handmade"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "posta 20x66mm, casera"
+msgstr[1] "postas 20x66mm, casera"
+msgstr[2] "postas 20x66mm, casera"
#. ~ Description for {'str': '20x66mm slug, handmade', 'str_pl': '20x66mm
#. slugs, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless solid projectile "
-"rounds. Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless solid projectile rounds. "
+"Being caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
-"Son réplicas falsas de las balas de Rivtech 20x66mm sin casquillo, de "
-"proyectil sólido. Al no tener casquillo, no pueden ser desarmadas ni "
-"recargadas."
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm explosive"
@@ -52987,9 +53188,9 @@ msgstr ""
#: data/json/items/ammo/22.json
msgid ".22 LR"
msgid_plural ".22 LRs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".22 LR"
+msgstr[1] ".22 LR"
+msgstr[2] ".22 LR"
#. ~ Description for {'str': '.22 LR'}
#: data/json/items/ammo/22.json
@@ -53032,9 +53233,9 @@ msgstr[2] ""
#: data/json/items/ammo/22.json
msgid ".22 LR, black powder"
msgid_plural ".22 LR, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".22 LR, pólvora"
+msgstr[1] ".22 LR, pólvora"
+msgstr[2] ".22 LR, pólvora"
#: data/json/items/ammo/223.json
msgid "5.56x45mm '.223 Remington'"
@@ -53112,9 +53313,9 @@ msgstr[2] ""
#: data/json/items/ammo/270win.json
msgid ".270 Winchester JSP"
msgid_plural ".270 Winchester JSPs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".270 Winchester JSP"
+msgstr[1] ".270 Winchester JSP"
+msgstr[2] ".270 Winchester JSP"
#. ~ Description for {'str': '.270 Winchester JSP'}
#: data/json/items/ammo/270win.json
@@ -53132,16 +53333,16 @@ msgstr ""
#: data/json/items/ammo/270win.json
msgid ".270 Winchester JSP, black powder"
msgid_plural ".270 Winchester JSP, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".270 Winchester JSP, pólvora"
+msgstr[1] ".270 Winchester JSP, pólvora"
+msgstr[2] ".270 Winchester JSP, pólvora"
#: data/json/items/ammo/300.json
msgid ".300 Winchester Magnum"
msgid_plural ".300 Winchester Magnums"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".300 Winchester Magnum"
+msgstr[1] ".300 Winchester Magnum"
+msgstr[2] ".300 Winchester Magnum"
#. ~ Description for {'str': '.300 Winchester Magnum'}
#: data/json/items/ammo/300.json
@@ -53159,16 +53360,16 @@ msgstr ""
#: data/json/items/ammo/300.json
msgid ".300 Winchester Magnum, black powder"
msgid_plural ".300 Winchester Magnum, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".300 Winchester Magnum, pólvora"
+msgstr[1] ".300 Winchester Magnum, pólvora"
+msgstr[2] ".300 Winchester Magnum, pólvora"
#: data/json/items/ammo/3006.json
msgid ".30-06 Springfield"
msgid_plural ".30-06 Springfields"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".30-06 Springfield"
+msgstr[1] ".30-06 Springfield"
+msgstr[2] ".30-06 Springfield"
#. ~ Description for {'str': '.30-06 Springfield'}
#: data/json/items/ammo/3006.json
@@ -53184,9 +53385,9 @@ msgstr ""
#: data/json/items/ammo/3006.json
msgid ".30-06 M14A1 tracer"
msgid_plural ".30-06 M14A1 tracers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".30-06 M14A1 trazadora"
+msgstr[1] ".30-06 M14A1 trazadoras"
+msgstr[2] ".30-06 M14A1 trazadoras"
#. ~ Description for {'str': '.30-06 M14A1 tracer'}
#: data/json/items/ammo/3006.json
@@ -53202,9 +53403,9 @@ msgstr ""
#: data/json/items/ammo/3006.json
msgid ".30-06 M2 AP"
msgid_plural ".30-06 M2 APs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".30-06 M2 AP"
+msgstr[1] ".30-06 M2 AP"
+msgstr[2] ".30-06 M2 AP"
#. ~ Description for {'str': '.30-06 M2 AP'}
#: data/json/items/ammo/3006.json
@@ -53220,16 +53421,16 @@ msgstr ""
#: data/json/items/ammo/3006.json
msgid ".30-06 Springfield, black powder"
msgid_plural ".30-06 Springfield, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".30-06 Springfield, pólvora"
+msgstr[1] ".30-06 Springfield, pólvora"
+msgstr[2] ".30-06 Springfield, pólvora"
#: data/json/items/ammo/3006.json
msgid ".30-06 Springfield tracer, black powder"
msgid_plural ".30-06 Springfield tracer, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".30-06 Springfield trazadora, pólvora"
+msgstr[1] ".30-06 Springfield trazadoras, pólvora"
+msgstr[2] ".30-06 Springfield trazadoras, pólvora"
#: data/json/items/ammo/3006.json
msgid ".30-06 M2 AP, black powder"
@@ -53274,9 +53475,9 @@ msgstr ""
#: data/json/items/ammo/300blk.json
msgid ".300 AAC Blackout, black powder"
msgid_plural ".300 AAC Blackout, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".300 AAC Blackout, pólvora"
+msgstr[1] ".300 AAC Blackout, pólvora"
+msgstr[2] ".300 AAC Blackout, pólvora"
#: data/json/items/ammo/308.json
msgid "7.62x51mm '.308 Winchester'"
@@ -53316,9 +53517,9 @@ msgstr ""
#: data/json/items/ammo/308.json
msgid "7.62x51mm NATO tracer"
msgid_plural "7.62x51mm NATO tracers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "7.62x51mm NATO trazadora"
+msgstr[1] "7.62x51mm NATO trazadoras"
+msgstr[2] "7.62x51mm NATO trazadoras"
#. ~ Description for {'str': '7.62x51mm NATO tracer'}
#: data/json/items/ammo/308.json
@@ -53353,9 +53554,9 @@ msgstr[2] ""
#: data/json/items/ammo/32.json
msgid ".32 ACP"
msgid_plural ".32 ACPs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".32 ACP"
+msgstr[1] ".32 ACP"
+msgstr[2] ".32 ACP"
#. ~ Description for {'str': '.32 ACP'}
#: data/json/items/ammo/32.json
@@ -53369,16 +53570,16 @@ msgstr ""
#: data/json/items/ammo/32.json
msgid ".32 ACP, black powder"
msgid_plural ".32 ACP, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".32 ACP, pólvora"
+msgstr[1] ".32 ACP, pólvora"
+msgstr[2] ".32 ACP, pólvora"
#: data/json/items/ammo/357mag.json
msgid ".357 magnum FMJ"
msgid_plural ".357 magnum FMJs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".357 Magnum FMJ"
+msgstr[1] ".357 Magnum FMJ"
+msgstr[2] ".357 Magnum FMJ"
#. ~ Description for {'str': '.357 magnum FMJ'}
#: data/json/items/ammo/357mag.json
@@ -53393,9 +53594,9 @@ msgstr ""
#: data/json/items/ammo/357mag.json
msgid ".357 magnum JHP"
msgid_plural ".357 magnum JHPs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".357 magnum JHP"
+msgstr[1] ".357 magnum JHP"
+msgstr[2] ".357 magnum JHP"
#. ~ Description for {'str': '.357 magnum JHP'}
#: data/json/items/ammo/357mag.json
@@ -53410,23 +53611,23 @@ msgstr ""
#: data/json/items/ammo/357mag.json
msgid ".357 Magnum FMJ, black powder"
msgid_plural ".357 Magnum FMJ, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".357 Magnum FMJ, pólvora"
+msgstr[1] ".357 Magnum FMJ, pólvora"
+msgstr[2] ".357 Magnum FMJ, pólvora"
#: data/json/items/ammo/357mag.json
msgid ".357 Magnum JHP, black powder"
msgid_plural ".357 Magnum JHP, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".357 Magnum JHP, pólvora"
+msgstr[1] ".357 Magnum JHP, pólvora"
+msgstr[2] ".357 Magnum JHP, pólvora"
#: data/json/items/ammo/357sig.json
msgid ".357 SIG FMJ"
msgid_plural ".357 SIG FMJs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".357 SIG FMJ"
+msgstr[1] ".357 SIG FMJ"
+msgstr[2] ".357 SIG FMJ"
#. ~ Description for {'str': '.357 SIG FMJ'}
#: data/json/items/ammo/357sig.json
@@ -53440,9 +53641,9 @@ msgstr ""
#: data/json/items/ammo/357sig.json
msgid ".357 SIG JHP"
msgid_plural ".357 SIG JHPs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".357 SIG JHP"
+msgstr[1] ".357 SIG JHP"
+msgstr[2] ".357 SIG JHP"
#. ~ Description for {'str': '.357 SIG JHP'}
#: data/json/items/ammo/357sig.json
@@ -53474,9 +53675,9 @@ msgstr ""
#: data/json/items/ammo/38.json
msgid ".38 FMJ"
msgid_plural ".38 FMJs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".38 FMJ"
+msgstr[1] ".38 FMJ"
+msgstr[2] ".38 FMJ"
#. ~ Description for {'str': '.38 FMJ'}
#: data/json/items/ammo/38.json
@@ -53490,9 +53691,9 @@ msgstr ""
#: data/json/items/ammo/38.json
msgid ".38 Special"
msgid_plural ".38 Specials"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".38 Special"
+msgstr[1] ".38 Special"
+msgstr[2] ".38 Special"
#. ~ Description for {'str': '.38 Special'}
#: data/json/items/ammo/38.json
@@ -53506,23 +53707,23 @@ msgstr ""
#: data/json/items/ammo/38.json
msgid ".38 FMJ, black powder"
msgid_plural ".38 FMJ, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".38 FMJ, pólvora"
+msgstr[1] ".38 FMJ, pólvora"
+msgstr[2] ".38 FMJ, pólvora"
#: data/json/items/ammo/38.json
msgid ".38 Special, black powder"
msgid_plural ".38 Special, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".38 Special, pólvora"
+msgstr[1] ".38 Special, pólvora"
+msgstr[2] ".38 Special, pólvora"
#: data/json/items/ammo/380.json
msgid ".380 ACP FMJ"
msgid_plural ".380 ACP FMJs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".380 ACP FMJ"
+msgstr[1] ".380 ACP FMJ"
+msgstr[2] ".380 ACP FMJ"
#. ~ Description for {'str': '.380 ACP FMJ'}
#: data/json/items/ammo/380.json
@@ -53539,9 +53740,9 @@ msgstr ""
#: data/json/items/ammo/380.json
msgid ".380 ACP JHP"
msgid_plural ".380 ACP JHPs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".380 ACP JHP"
+msgstr[1] ".380 ACP JHP"
+msgstr[2] ".380 ACP JHP"
#. ~ Description for {'str': '.380 ACP JHP'}
#: data/json/items/ammo/380.json
@@ -53558,9 +53759,9 @@ msgstr ""
#: data/json/items/ammo/380.json
msgid ".380 ACP +P"
msgid_plural ".380 ACP +Ps"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".380 ACP +P"
+msgstr[1] ".380 ACP +P"
+msgstr[2] ".380 ACP +P"
#. ~ Description for {'str': '.380 ACP +P'}
#: data/json/items/ammo/380.json
@@ -53578,23 +53779,23 @@ msgstr ""
#: data/json/items/ammo/380.json
msgid ".380 ACP FMJ, black powder"
msgid_plural ".380 ACP FMJ, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".380 ACP FMJ, pólvora"
+msgstr[1] ".380 ACP FMJ, pólvora"
+msgstr[2] ".380 ACP FMJ, pólvora"
#: data/json/items/ammo/380.json
msgid ".380 ACP JHP, black powder"
msgid_plural ".380 ACP JHP, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".380 ACP JHP, pólvora"
+msgstr[1] ".380 ACP JHP, pólvora"
+msgstr[2] ".380 ACP JHP, pólvora"
#: data/json/items/ammo/38super.json
msgid ".38 Super FMJ"
msgid_plural ".38 Super FMJs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".38 Super FMJ"
+msgstr[1] ".38 Super FMJ"
+msgstr[2] ".38 Super FMJ"
#. ~ Description for {'str': '.38 Super FMJ'}
#: data/json/items/ammo/38super.json
@@ -53619,9 +53820,9 @@ msgstr ""
#: data/json/items/ammo/40.json
msgid ".40 S&W FMJ"
msgid_plural ".40 S&W FMJs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".40 S&W FMJ"
+msgstr[1] ".40 S&W FMJ"
+msgstr[2] ".40 S&W FMJ"
#. ~ Description for {'str': '.40 S&W FMJ'}
#: data/json/items/ammo/40.json
@@ -53637,9 +53838,9 @@ msgstr ""
#: data/json/items/ammo/40.json
msgid ".40 S&W JHP"
msgid_plural ".40 S&W JHPs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".40 S&W JHP"
+msgstr[1] ".40 S&W JHP"
+msgstr[2] ".40 S&W JHP"
#. ~ Description for {'str': '.40 S&W JHP'}
#: data/json/items/ammo/40.json
@@ -53655,16 +53856,16 @@ msgstr ""
#: data/json/items/ammo/40.json
msgid ".40 S&W FMJ, black powder"
msgid_plural ".40 S&W FMJ, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".40 S&W FMJ, pólvora"
+msgstr[1] ".40 S&W FMJ, pólvora"
+msgstr[2] ".40 S&W FMJ, pólvora"
#: data/json/items/ammo/40.json
msgid ".40 S&W JHP, black powder"
msgid_plural ".40 S&W JHP, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".40 S&W JHP, pólvora"
+msgstr[1] ".40 S&W JHP, pólvora"
+msgstr[2] ".40 S&W JHP, pólvora"
#: data/json/items/ammo/40x46mm.json
msgid "40x46mm M1006 stun"
@@ -53854,9 +54055,9 @@ msgstr ""
#: data/json/items/ammo/410shot.json
msgid ".410 000 shot"
msgid_plural ".410 000 shots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho .410 000"
+msgstr[1] "cartuchos .410 000"
+msgstr[2] "cartuchos .410 000"
#. ~ Description for {'str': '.410 000 shot'}
#: data/json/items/ammo/410shot.json
@@ -53867,9 +54068,9 @@ msgstr ""
#: data/json/items/ammo/44.json
msgid ".44 Magnum FMJ"
msgid_plural ".44 Magnum FMJs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".44 Magnum FMJ"
+msgstr[1] ".44 Magnum FMJ"
+msgstr[2] ".44 Magnum FMJ"
#. ~ Description for {'str': '.44 Magnum FMJ'}
#: data/json/items/ammo/44.json
@@ -53881,9 +54082,9 @@ msgstr ""
#: data/json/items/ammo/44.json
msgid ".44 Magnum"
msgid_plural ".44 Magnums"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".44 Magnum"
+msgstr[1] ".44 Magnum"
+msgstr[2] ".44 Magnum"
#. ~ Description for {'str': '.44 Magnum'}
#: data/json/items/ammo/44.json
@@ -53900,16 +54101,16 @@ msgstr ""
#: data/json/items/ammo/44.json
msgid ".44 Magnum, black powder"
msgid_plural ".44 Magnum, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".44 Magnum, pólvora"
+msgstr[1] ".44 Magnum, pólvora"
+msgstr[2] ".44 Magnum, pólvora"
#: data/json/items/ammo/44.json
msgid ".44 Magnum FMJ, black powder"
msgid_plural ".44 Magnum FMJ, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".44 Magnum FMJ, pólvora"
+msgstr[1] ".44 Magnum FMJ, pólvora"
+msgstr[2] ".44 Magnum FMJ, pólvora"
#: data/json/items/ammo/44paper.json
msgid ".44 paper cartridge"
@@ -53930,9 +54131,9 @@ msgstr ""
#: data/json/items/ammo/45.json
msgid ".45 ACP FMJ"
msgid_plural ".45 ACP FMJs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".45 ACP FMJ"
+msgstr[1] ".45 ACP FMJ"
+msgstr[2] ".45 ACP FMJ"
#. ~ Description for {'str': '.45 ACP FMJ'}
#: data/json/items/ammo/45.json
@@ -53946,9 +54147,9 @@ msgstr ""
#: data/json/items/ammo/45.json
msgid ".45 ACP JHP"
msgid_plural ".45 ACP JHPs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".45 ACP JHP"
+msgstr[1] ".45 ACP JHP"
+msgstr[2] ".45 ACP JHP"
#. ~ Description for {'str': '.45 ACP JHP'}
#: data/json/items/ammo/45.json
@@ -53964,9 +54165,9 @@ msgstr ""
#: data/json/items/ammo/45.json
msgid ".45 ACP +P"
msgid_plural ".45 ACP +Ps"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".45 ACP +P"
+msgstr[1] ".45 ACP +P"
+msgstr[2] ".45 ACP +P"
#. ~ Description for {'str': '.45 ACP +P'}
#: data/json/items/ammo/45.json
@@ -53982,23 +54183,23 @@ msgstr ""
#: data/json/items/ammo/45.json
msgid ".45 ACP FMJ, black powder"
msgid_plural ".45 ACP FMJ, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".45 ACP FMJ, pólvora"
+msgstr[1] ".45 ACP FMJ, pólvora"
+msgstr[2] ".45 ACP FMJ, pólvora"
#: data/json/items/ammo/45.json
msgid ".45 ACP JHP, black powder"
msgid_plural ".45 ACP JHP, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".45 ACP JHP, pólvora"
+msgstr[1] ".45 ACP JHP, pólvora"
+msgstr[2] ".45 ACP JHP, pólvora"
#: data/json/items/ammo/454.json
msgid ".454 Casull"
msgid_plural ".454 Casulls"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".454 Casull"
+msgstr[1] ".454 Casull"
+msgstr[2] ".454 Casull"
#. ~ Description for {'str': '.454 Casull'}
#: data/json/items/ammo/454.json
@@ -54018,16 +54219,16 @@ msgstr ""
#: data/json/items/ammo/454.json
msgid ".454 Casull, black powder"
msgid_plural ".454 Casull, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".454 Casull, pólvora"
+msgstr[1] ".454 Casull, pólvora"
+msgstr[2] ".454 Casull, pólvora"
#: data/json/items/ammo/4570.json
msgid ".45-70 SP"
msgid_plural ".45-70 SPs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".45-70 SP"
+msgstr[1] ".45-70 SP"
+msgstr[2] ".45-70 SP"
#. ~ Description for {'str': '.45-70 SP'}
#: data/json/items/ammo/4570.json
@@ -54043,9 +54244,9 @@ msgstr ""
#: data/json/items/ammo/4570.json
msgid ".45-70 +P penetrator"
msgid_plural ".45-70 +P penetrators"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".45-70 +P perforante"
+msgstr[1] ".45-70 +P perforante"
+msgstr[2] ".45-70 +P perforante"
#. ~ Description for {'str': '.45-70 +P penetrator'}
#: data/json/items/ammo/4570.json
@@ -54061,9 +54262,9 @@ msgstr ""
#: data/json/items/ammo/4570.json
msgid ".45-70 LFN cowboy"
msgid_plural ".45-70 LFN cowboys"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".45-70 LFN cowboy"
+msgstr[1] ".45-70 LFN cowboy"
+msgstr[2] ".45-70 LFN cowboy"
#. ~ Description for {'str': '.45-70 LFN cowboy'}
#: data/json/items/ammo/4570.json
@@ -54079,9 +54280,9 @@ msgstr ""
#: data/json/items/ammo/4570.json
msgid ".45-70, black powder"
msgid_plural ".45-70, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".45-70, pólvora"
+msgstr[1] ".45-70, pólvora"
+msgstr[2] ".45-70, pólvora"
#. ~ Description for {'str': '.45-70, black powder'}
#: data/json/items/ammo/4570.json
@@ -54099,9 +54300,9 @@ msgstr ""
#: data/json/items/ammo/45colt.json
msgid ".45 Colt JHP"
msgid_plural ".45 Colt JHPs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".45 Colt JHP"
+msgstr[1] ".45 Colt JHP"
+msgstr[2] ".45 Colt JHP"
#. ~ Description for {'str': '.45 Colt JHP'}
#: data/json/items/ammo/45colt.json
@@ -54126,9 +54327,9 @@ msgstr[2] ""
#: data/json/items/ammo/46.json
msgid "4.6x30mm"
msgid_plural "4.6x30mms"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "4.6x30mm"
+msgstr[1] "4.6x30mm"
+msgstr[2] "4.6x30mm"
#. ~ Description for {'str': '4.6x30mm'}
#: data/json/items/ammo/46.json
@@ -54144,9 +54345,9 @@ msgstr ""
#: data/json/items/ammo/46.json
msgid "4.6x30mm, black powder"
msgid_plural "4.6x30mm, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "4.6x30mm, pólvora"
+msgstr[1] "4.6x30mm, pólvora"
+msgstr[2] "4.6x30mm, pólvora"
#. ~ Description for {'str': '4.6x30mm, black powder'}
#. ~ Description for {'str': '4.6x30mm, reloaded'}
@@ -54166,9 +54367,9 @@ msgstr ""
#: data/json/items/ammo/460.json
msgid ".460 Rowland HCFN"
msgid_plural ".460 Rowland HCFNs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".460 Rowland HCFN"
+msgstr[1] ".460 Rowland HCFN"
+msgstr[2] ".460 Rowland HCFN"
#. ~ Description for {'str': '.460 Rowland HCFN'}
#: data/json/items/ammo/460.json
@@ -54182,9 +54383,9 @@ msgstr ""
#: data/json/items/ammo/460.json
msgid ".460 Rowland"
msgid_plural ".460 Rowlands"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".460 Rowland"
+msgstr[1] ".460 Rowland"
+msgstr[2] ".460 Rowland"
#. ~ Description for {'str': '.460 Rowland'}
#: data/json/items/ammo/460.json
@@ -54204,23 +54405,23 @@ msgstr ""
#: data/json/items/ammo/460.json
msgid ".460 Rowland FMJ, black powder"
msgid_plural ".460 Rowland FMJ, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".460 Rowland FMJ, pólvora"
+msgstr[1] ".460 Rowland FMJ, pólvora"
+msgstr[2] ".460 Rowland FMJ, pólvora"
#: data/json/items/ammo/460.json
msgid ".460 Rowland, black powder"
msgid_plural ".460 Rowland, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".460 Rowland, pólvora"
+msgstr[1] ".460 Rowland, pólvora"
+msgstr[2] ".460 Rowland, pólvora"
#: data/json/items/ammo/50.json
msgid ".50 BMG M17 tracer"
msgid_plural ".50 BMG M17 tracers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".50 BMG M17 trazadora"
+msgstr[1] ".50 BMG M17 trazadoras"
+msgstr[2] ".50 BMG M17 trazadoras"
#. ~ Description for {'str': '.50 BMG M17 tracer'}
#: data/json/items/ammo/50.json
@@ -54236,9 +54437,9 @@ msgstr ""
#: data/json/items/ammo/50.json
msgid ".50 BMG M33 Ball"
msgid_plural ".50 BMG M33 Balls"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".50 BMG M33 Bola"
+msgstr[1] ".50 BMG M33 Bola"
+msgstr[2] ".50 BMG M33 Bola"
#. ~ Description for {'str': '.50 BMG M33 Ball'}
#: data/json/items/ammo/50.json
@@ -54258,9 +54459,9 @@ msgstr ""
#: data/json/items/ammo/50.json
msgid ".50 BMG Match"
msgid_plural ".50 BMG Matches"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".50 BMG Match"
+msgstr[1] ".50 BMG Match"
+msgstr[2] ".50 BMG Match"
#. ~ Description for {'str': '.50 BMG Match', 'str_pl': '.50 BMG Matches'}
#: data/json/items/ammo/50.json
@@ -54274,9 +54475,9 @@ msgstr ""
#: data/json/items/ammo/50.json
msgid ".50 BMG M2 AP"
msgid_plural ".50 BMG M2 APs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".50 BMG M2 AP"
+msgstr[1] ".50 BMG M2 AP"
+msgstr[2] ".50 BMG M2 AP"
#. ~ Description for {'str': '.50 BMG M2 AP'}
#: data/json/items/ammo/50.json
@@ -54290,9 +54491,9 @@ msgstr ""
#: data/json/items/ammo/50.json
msgid ".50 BMG Raufoss Mk 211"
msgid_plural ".50 BMG Raufoss Mk 211s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".50 BMG Raufoss Mk 211"
+msgstr[1] ".50 BMG Raufoss Mk 211"
+msgstr[2] ".50 BMG Raufoss Mk 211"
#. ~ Description for {'str': '.50 BMG Raufoss Mk 211'}
#: data/json/items/ammo/50.json
@@ -54318,9 +54519,9 @@ msgstr ""
#: data/json/items/ammo/500.json
msgid ".500 S&W Magnum"
msgid_plural ".500 S&W Magnums"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".500 S&W Magnum"
+msgstr[1] ".500 S&W Magnum"
+msgstr[2] ".500 S&W Magnum"
#. ~ Description for {'str': '.500 S&W Magnum'}
#: data/json/items/ammo/500.json
@@ -54337,16 +54538,16 @@ msgstr ""
#: data/json/items/ammo/500.json
msgid ".500 S&W Magnum, black powder"
msgid_plural ".500 S&W Magnum, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".500 S&W Magnum, pólvora"
+msgstr[1] ".500 S&W Magnum, pólvora"
+msgstr[2] ".500 S&W Magnum, pólvora"
#: data/json/items/ammo/545x39.json
msgid "5.45x39mm 7N10"
msgid_plural "5.45x39mm 7N10s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "5.45x39mm 7N10"
+msgstr[1] "5.45x39mm 7N10"
+msgstr[2] "5.45x39mm 7N10"
#. ~ Description for {'str': '5.45x39mm 7N10'}
#: data/json/items/ammo/545x39.json
@@ -54363,9 +54564,9 @@ msgstr ""
#: data/json/items/ammo/545x39.json
msgid "5.45x39mm 7N22"
msgid_plural "5.45x39mm 7N22s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "5.45x39mm 7N22"
+msgstr[1] "5.45x39mm 7N22"
+msgstr[2] "5.45x39mm 7N22"
#. ~ Description for {'str': '5.45x39mm 7N22'}
#: data/json/items/ammo/545x39.json
@@ -54379,9 +54580,9 @@ msgstr ""
#: data/json/items/ammo/57.json
msgid "5.7x28mm SS190"
msgid_plural "5.7x28mm SS190s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "5.7x28mm SS190"
+msgstr[1] "5.7x28mm SS190"
+msgstr[2] "5.7x28mm SS190"
#. ~ Description for {'str': '5.7x28mm SS190'}
#: data/json/items/ammo/57.json
@@ -54403,9 +54604,9 @@ msgstr ""
#: data/json/items/ammo/57.json
msgid "5.7x28mm, black powder"
msgid_plural "5.7x28mm, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "5.7x28mm, pólvora"
+msgstr[1] "5.7x28mm, pólvora"
+msgstr[2] "5.7x28mm, pólvora"
#. ~ Description for {'str': '5.7x28mm, black powder'}
#. ~ Description for {'str': '5.7x28mm, reloaded'}
@@ -54465,9 +54666,9 @@ msgstr ""
#: data/json/items/ammo/66mm.json
msgid "M74 rocket"
msgid_plural "M74 rockets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "misil M74"
+msgstr[1] "misiles M74"
+msgstr[2] "misiles M74"
#. ~ Description for {'str': 'M74 rocket'}
#: data/json/items/ammo/66mm.json
@@ -54498,9 +54699,9 @@ msgstr ""
#: data/json/items/ammo/700nx.json
msgid ".700 NX"
msgid_plural ".700 NXs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".700 NX"
+msgstr[1] ".700 NX"
+msgstr[2] ".700 NX"
#. ~ Description for {'str': '.700 NX'}
#: data/json/items/ammo/700nx.json
@@ -54518,9 +54719,9 @@ msgstr ""
#: data/json/items/ammo/762.json
msgid "7.62x39mm 57-N-231"
msgid_plural "7.62x39mm 57-N-231s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "7.62x39mm 57-N-231"
+msgstr[1] "7.62x39mm 57-N-231"
+msgstr[2] "7.62x39mm 57-N-231"
#. ~ Description for {'str': '7.62x39mm 57-N-231'}
#: data/json/items/ammo/762.json
@@ -54539,9 +54740,9 @@ msgstr ""
#: data/json/items/ammo/762.json
msgid "7.62x39mm M67"
msgid_plural "7.62x39mm M67s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "7.62x39mm M67"
+msgstr[1] "7.62x39mm M67"
+msgstr[2] "7.62x39mm M67"
#. ~ Description for {'str': '7.62x39mm M67'}
#: data/json/items/ammo/762.json
@@ -54559,9 +54760,9 @@ msgstr ""
#: data/json/items/ammo/762R.json
msgid "7.62x54mmR"
msgid_plural "7.62x54mmRs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "7.62x54mmR"
+msgstr[1] "7.62x54mmR"
+msgstr[2] "7.62x54mmR"
#. ~ Description for {'str': '7.62x54mmR'}
#: data/json/items/ammo/762R.json
@@ -54615,9 +54816,9 @@ msgstr ""
#: data/json/items/ammo/762x25.json
msgid "7.62x25mm Type P"
msgid_plural "7.62x25mm Type Ps"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "7.62x25mm Tipo P"
+msgstr[1] "7.62x25mm Tipo P"
+msgstr[2] "7.62x25mm Tipo P"
#. ~ Description for {'str': '7.62x25mm Type P'}
#: data/json/items/ammo/762x25.json
@@ -54633,16 +54834,16 @@ msgstr ""
#: data/json/items/ammo/762x25.json
msgid "7.62x25mm FMJ, black powder"
msgid_plural "7.62x25mm FMJ, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "7.62x25mm FMJ, pólvora"
+msgstr[1] "7.62x25mm FMJ, pólvora"
+msgstr[2] "7.62x25mm FMJ, pólvora"
#: data/json/items/ammo/84x246mm.json
msgid "84x246mm HE rocket"
msgid_plural "84x246mm HE rockets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "misil 84x246mm HE"
+msgstr[1] "misiles 84x246mm HE"
+msgstr[2] "misiles 84x246mm HE"
#. ~ Description for {'str': '84x246mm HE rocket'}
#: data/json/items/ammo/84x246mm.json
@@ -54657,9 +54858,9 @@ msgstr ""
#: data/json/items/ammo/84x246mm.json
msgid "84x246mm HEDP rocket"
msgid_plural "84x246mm HEDP rockets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "misil 84x246mm HEDP"
+msgstr[1] "misiles 84x246mm HEDP"
+msgstr[2] "misiles 84x246mm HEDP"
#. ~ Description for {'str': '84x246mm HEDP rocket'}
#: data/json/items/ammo/84x246mm.json
@@ -54675,9 +54876,9 @@ msgstr ""
#: data/json/items/ammo/84x246mm.json
msgid "84x246mm smoke rocket"
msgid_plural "84x246mm smoke rockets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "misil fumígeno 84x246mm"
+msgstr[1] "misiles fumígenos 84x246mm"
+msgstr[2] "misiles fumígenos 84x246mm"
#. ~ Description for {'str': '84x246mm smoke rocket'}
#: data/json/items/ammo/84x246mm.json
@@ -54691,20 +54892,60 @@ msgstr ""
"los movimientos de las tropas."
#: data/json/items/ammo/8x40mm.json
-msgid "bootleg 8x40mm JHP"
-msgid_plural "bootleg 8x40mm JHPs"
+msgid "8x40mm JHP, handmade"
+msgid_plural "8x40mm JHP, handmades"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': '8x40mm JHP, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm JHP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm caseless, handmade"
+msgid_plural "8x40mm caseless, handmades"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
-#. ~ Description for {'str': 'bootleg 8x40mm JHP'}
+#. ~ Description for {'str': '8x40mm caseless, handmade'}
#: data/json/items/ammo/8x40mm.json
msgid ""
-"Bootleg duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
+"Handmade duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
"rounds, these cannot be disassembled or reloaded."
msgstr ""
-"Son unas réplicas falsas de las balas 8x40mm sin casquillo de Rivtech. Al no"
-" tener casquillo, no pueden ser desarmadas ni recargadas."
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm HVP, handmade"
+msgid_plural "8x40mm HVP, handmades"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': '8x40mm HVP, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm HVP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm tracer, handmade"
+msgid_plural "8x40mm tracer, handmades"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': '8x40mm tracer, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm tracer rounds. Being caseless rounds,"
+" these cannot be disassembled or reloaded."
+msgstr ""
#. ~ Description for {'str_sp': '8x40mm caseless'}
#: data/json/items/ammo/8x40mm.json
@@ -54718,9 +54959,9 @@ msgstr ""
#: data/json/items/ammo/8x40mm.json
msgid "8x40mm sporting"
msgid_plural "8x40mm sportings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "8x40mm deportiva"
+msgstr[1] "8x40mm deportivas"
+msgstr[2] "8x40mm deportivas"
#. ~ Description for {'str': '8x40mm sporting'}
#: data/json/items/ammo/8x40mm.json
@@ -54736,9 +54977,9 @@ msgstr ""
#: data/json/items/ammo/8x40mm.json
msgid "8x40mm HVP"
msgid_plural "8x40mm HVPs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "8x40mm HVP"
+msgstr[1] "8x40mm HVP"
+msgstr[2] "8x40mm HVP"
#. ~ Description for {'str': '8x40mm HVP'}
#: data/json/items/ammo/8x40mm.json
@@ -54755,9 +54996,9 @@ msgstr ""
#: data/json/items/ammo/8x40mm.json
msgid "8x40mm tracer"
msgid_plural "8x40mm tracers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "8x40mm trazadora"
+msgstr[1] "8x40mm trazadoras"
+msgstr[2] "8x40mm trazadoras"
#. ~ Description for {'str': '8x40mm tracer'}
#: data/json/items/ammo/8x40mm.json
@@ -54775,9 +55016,9 @@ msgstr ""
#: data/json/items/ammo/8x40mm.json
msgid "8x40mm JHP"
msgid_plural "8x40mm JHPs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "8x40mm JHP"
+msgstr[1] "8x40mm JHP"
+msgstr[2] "8x40mm JHP"
#. ~ Description for {'str': '8x40mm JHP'}
#: data/json/items/ammo/8x40mm.json
@@ -54793,9 +55034,9 @@ msgstr ""
#: data/json/items/ammo/9mm.json
msgid "9x19mm JHP"
msgid_plural "9x19mm JHPs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "9x19mm JHP"
+msgstr[1] "9x19mm JHP"
+msgstr[2] "9x19mm JHP"
#. ~ Description for {'str': '9x19mm JHP'}
#: data/json/items/ammo/9mm.json
@@ -54813,9 +55054,9 @@ msgstr ""
#: data/json/items/ammo/9mm.json
msgid "9x19mm FMJ"
msgid_plural "9x19mm FMJs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "9x19mm FMJ"
+msgstr[1] "9x19mm FMJ"
+msgstr[2] "9x19mm FMJ"
#. ~ Description for {'str': '9x19mm FMJ'}
#: data/json/items/ammo/9mm.json
@@ -54830,9 +55071,9 @@ msgstr ""
#: data/json/items/ammo/9mm.json
msgid "9x19mm +P"
msgid_plural "9x19mm +Ps"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "9x19mm +P"
+msgstr[1] "9x19mm +P"
+msgstr[2] "9x19mm +P"
#. ~ Description for {'str': '9x19mm +P'}
#: data/json/items/ammo/9mm.json
@@ -54847,9 +55088,9 @@ msgstr ""
#: data/json/items/ammo/9mm.json
msgid "9x19mm +P+"
msgid_plural "9x19mm +P+s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "9x19mm +P+"
+msgstr[1] "9x19mm +P+"
+msgstr[2] "9x19mm +P+"
#. ~ Description for {'str': '9x19mm +P+'}
#: data/json/items/ammo/9mm.json
@@ -54863,23 +55104,23 @@ msgstr ""
#: data/json/items/ammo/9mm.json
msgid "9x19mm JHP, black powder"
msgid_plural "9x19mm JHP, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "9x19mm JHP, pólvora"
+msgstr[1] "9x19mm JHP, pólvora"
+msgstr[2] "9x19mm JHP, pólvora"
#: data/json/items/ammo/9mm.json
msgid "9x19mm FMJ, black powder"
msgid_plural "9x19mm FMJ, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "9x19mm FMJ, pólvora"
+msgstr[1] "9x19mm FMJ, pólvora"
+msgstr[2] "9x19mm FMJ, pólvora"
#: data/json/items/ammo/9x18.json
msgid "9x18mm 57-N-181S"
msgid_plural "9x18mm 57-N-181Ss"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "9x18mm 57-N-181S"
+msgstr[1] "9x18mm 57-N-181S"
+msgstr[2] "9x18mm 57-N-181S"
#. ~ Description for {'str': '9x18mm 57-N-181S'}
#: data/json/items/ammo/9x18.json
@@ -54895,9 +55136,9 @@ msgstr ""
#: data/json/items/ammo/9x18.json
msgid "9x18mm SP-7"
msgid_plural "9x18mm SP-7s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "9x18mm SP-7"
+msgstr[1] "9x18mm SP-7"
+msgstr[2] "9x18mm SP-7"
#. ~ Description for {'str': '9x18mm SP-7'}
#: data/json/items/ammo/9x18.json
@@ -54913,9 +55154,9 @@ msgstr ""
#: data/json/items/ammo/9x18.json
msgid "9x18mm RG028"
msgid_plural "9x18mm RG028s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "9x18mm RG028"
+msgstr[1] "9x18mm RG028"
+msgstr[2] "9x18mm RG028"
#. ~ Description for {'str': '9x18mm RG028'}
#: data/json/items/ammo/9x18.json
@@ -54929,23 +55170,23 @@ msgstr ""
#: data/json/items/ammo/9x18.json
msgid "9x18mm, black powder"
msgid_plural "9x18mm, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "9x18mm, pólvora"
+msgstr[1] "9x18mm, pólvora"
+msgstr[2] "9x18mm, pólvora"
#: data/json/items/ammo/9x18.json
msgid "9x18mm FMJ, black powder"
msgid_plural "9x18mm FMJ, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "9x18mm FMJ, pólvora"
+msgstr[1] "9x18mm FMJ, pólvora"
+msgstr[2] "9x18mm FMJ, pólvora"
#: data/json/items/ammo/atgm.json
msgid "152mm ATGM HEAT"
msgid_plural "152mm ATGM HEATs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "152mm ATGM HEAT"
+msgstr[1] "152mm ATGM HEAT"
+msgstr[2] "152mm ATGM HEAT"
#. ~ Description for {'str': '152mm ATGM HEAT'}
#: data/json/items/ammo/atgm.json
@@ -54960,9 +55201,9 @@ msgstr ""
#: data/json/items/ammo/barb.json
msgid "paralyzing barb"
msgid_plural "paralyzing barbs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pincho paralizante"
+msgstr[1] "pinchos paralizantes"
+msgstr[2] "pinchos paralizantes"
#. ~ Description for {'str': 'paralyzing barb'}
#: data/json/items/ammo/barb.json
@@ -54976,9 +55217,9 @@ msgstr ""
#: data/json/items/ammo/chemical_spray.json
msgid "sprayable toxic gas"
msgid_plural "sprayable toxic gas"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "gas tóxico en aerosol"
+msgstr[1] "gas tóxico en aerosol"
+msgstr[2] "gas tóxico en aerosol"
#. ~ Description for {'str_sp': 'sprayable toxic gas'}
#: data/json/items/ammo/chemical_spray.json
@@ -54993,9 +55234,9 @@ msgstr ""
#: data/json/items/ammo/chemical_spray.json
msgid "sprayable fungicide"
msgid_plural "sprayable fungicide"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "fungicida en aerosol"
+msgstr[1] "fungicida en aerosol"
+msgstr[2] "fungicida en aerosol"
#. ~ Description for {'str_sp': 'sprayable fungicide'}
#: data/json/items/ammo/chemical_spray.json
@@ -55010,9 +55251,9 @@ msgstr ""
#: data/json/items/ammo/chemical_spray.json
msgid "sprayable insecticide"
msgid_plural "sprayable insecticide"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "insecticida en aerosol"
+msgstr[1] "insecticida en aerosol"
+msgstr[2] "insecticida en aerosol"
#. ~ Description for {'str_sp': 'sprayable insecticide'}
#: data/json/items/ammo/chemical_spray.json
@@ -55038,9 +55279,9 @@ msgstr ""
#: data/mods/Generic_Guns/ammo/obsolete.json
msgid "paper shot cartridge"
msgid_plural "paper shot cartridges"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho de papel de escopeta"
+msgstr[1] "cartuchos de papel de escopeta"
+msgstr[2] "cartuchos de papel de escopeta"
#. ~ Description for {'str': 'paper shot cartridge'}
#: data/json/items/ammo/flintlock.json
@@ -55091,9 +55332,9 @@ msgstr ""
#: data/json/items/ammo/nail.json
msgid "flechette"
msgid_plural "flechettes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "dardo perforante"
+msgstr[1] "dardos perforantes"
+msgstr[2] "dardos perforantes"
#. ~ Description for {'str': 'flechette'}
#: data/json/items/ammo/nail.json
@@ -55126,49 +55367,49 @@ msgid "A tube of small paintballs. They deal virtually no damage."
msgstr "Un tubo de bolas de paintball. Virtualmente no hacen daño."
#: data/json/items/ammo/rpg.json
-msgid "PG-7VL 93mm rocket"
-msgid_plural "PG-7VL 93mm rockets"
+msgid "PG-7VL RPG-7 rocket"
+msgid_plural "PG-7VL RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
-#. ~ Description for PG-7VL 93mm rocket
+#. ~ Description for PG-7VL RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "93mm single-stage high-explosive ammunition for the RPG-7."
msgstr "Es munición 93mm monoetapa de alta explosividad para el RPG-7."
#: data/json/items/ammo/rpg.json
-msgid "PG-7VR 64mm/105mm rocket"
-msgid_plural "PG-7VR 64mm/105mm rockets"
+msgid "PG-7VR RPG-7 rocket"
+msgid_plural "PG-7VR RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
-#. ~ Description for PG-7VR 64mm/105mm rocket
+#. ~ Description for PG-7VR RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "64mm/105mm high-explosive tandem ammunition for the RPG-7."
msgstr "Es munición 64mm/105mm de alta explosividad para el RPG-7."
#: data/json/items/ammo/rpg.json
-msgid "TBG-7V 105mm rocket"
-msgid_plural "TBG-7V 105mm rockets"
+msgid "TBG-7V RPG-7 rocket"
+msgid_plural "TBG-7V RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
-#. ~ Description for TBG-7V 105mm rocket
+#. ~ Description for TBG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "105mm thermobaric ammunition for the RPG-7."
msgstr "Es munición termobárica 105mm para el RPG-7."
#: data/json/items/ammo/rpg.json
-msgid "OG-7V 40mm rocket"
-msgid_plural "OG-7V 40mm rockets"
+msgid "OG-7V RPG-7 rocket"
+msgid_plural "OG-7V RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
-#. ~ Description for OG-7V 40mm rocket
+#. ~ Description for OG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid ""
"40mm high-explosive fragmentation antipersonnel ammunition for the RPG-7."
@@ -55177,37 +55418,37 @@ msgstr "Es munición antipersonal 40mm de alta explosividad para el RPG-7."
#: data/json/items/ammo/shot.json
msgid "birdshot, black powder"
msgid_plural "birdshot, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "perdigones pequeños, pólvora"
+msgstr[1] "perdigones pequeños, pólvora"
+msgstr[2] "perdigones pequeños, pólvora"
#: data/json/items/ammo/shot.json
msgid "dragon's breath shell, black powder"
msgid_plural "dragon's breath shell, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho aliento de dragón, pólvora"
+msgstr[1] "cartuchos aliento de dragón, pólvora"
+msgstr[2] "cartuchos aliento de dragón, pólvora"
#: data/json/items/ammo/shot.json
msgid "00 shot, black powder"
msgid_plural "00 shot, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho 00, pólvora"
+msgstr[1] "cartuchos 00, pólvora"
+msgstr[2] "cartuchos 00, pólvora"
#: data/json/items/ammo/shot.json
msgid "flechette shell, black powder"
msgid_plural "flechette shell, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho de dardos perforantes, pólvora"
+msgstr[1] "cartuchos de dardos perforantes, pólvora"
+msgstr[2] "cartuchos de dardos perforantes, pólvora"
#: data/json/items/ammo/shot.json
msgid "shotgun slug, black powder"
msgid_plural "shotgun slug, black powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "posta de escopeta, pólvora"
+msgstr[1] "postas de escopeta, pólvora"
+msgstr[2] "postas de escopeta, pólvora"
#: data/json/items/ammo/shot.json
msgid "00 shot"
@@ -55261,9 +55502,9 @@ msgstr ""
#: data/json/items/ammo/shot.json
msgid "dragon's breath shell"
msgid_plural "dragon's breath shells"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho aliento de dragón"
+msgstr[1] "cartuchos aliento de dragón"
+msgstr[2] "cartuchos aliento de dragón"
#. ~ Description for {'str': "dragon's breath shell"}
#: data/json/items/ammo/shot.json
@@ -55316,9 +55557,9 @@ msgstr ""
#: data/json/items/ammo/shot.json
msgid "00 shot, scrap loaded"
msgid_plural "00 shot, scrap loadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho 00, con chatarra"
+msgstr[1] "cartuchos 00, con chatarra"
+msgstr[2] "cartuchos 00, con chatarra"
#. ~ Description for {'str': '00 shot, scrap loaded'}
#. ~ Description for {'str_sp': 'shotshell, junk'}
@@ -55334,9 +55575,9 @@ msgstr ""
#: data/json/items/ammo/shot.json
msgid "00 shot, black powder, scrap loaded"
msgid_plural "00 shot, black powder, scrap loadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho 00, pólvora, con chatarra"
+msgstr[1] "cartuchos 00, pólvora, con chatarra"
+msgstr[2] "cartuchos 00, pólvora, con chatarra"
#: data/json/items/ammo/shot.json
msgid "shotgun slug"
@@ -55357,9 +55598,9 @@ msgstr ""
#: data/json/items/ammo/shotpaper.json
msgid "birdshot paper cartridge"
msgid_plural "birdshot paper cartridges"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho de papel de perdigones pequeños"
+msgstr[1] "cartuchos de papel de perdigones pequeños"
+msgstr[2] "cartuchos de papel de perdigones pequeños"
#. ~ Description for {'str': 'birdshot paper cartridge'}
#: data/json/items/ammo/shotpaper.json
@@ -55374,9 +55615,9 @@ msgstr ""
#: data/json/items/ammo/shotpaper.json
msgid "pyrotechnic paper cartridge"
msgid_plural "pyrotechnic paper cartridges"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho de papel pirotécnico"
+msgstr[1] "cartuchos de papel pirotécnico"
+msgstr[2] "cartuchos de papel pirotécnico"
#. ~ Description for {'str': 'pyrotechnic paper cartridge'}
#: data/json/items/ammo/shotpaper.json
@@ -55392,9 +55633,9 @@ msgstr ""
#: data/json/items/ammo/shotpaper.json
msgid "buckshot paper cartridge"
msgid_plural "buckshot paper cartridges"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho de papel de perdigones grandes"
+msgstr[1] "cartuchos de papel de perdigones grandes"
+msgstr[2] "cartuchos de papel de perdigones grandes"
#. ~ Description for {'str': 'buckshot paper cartridge'}
#: data/json/items/ammo/shotpaper.json
@@ -55408,9 +55649,9 @@ msgstr ""
#: data/json/items/ammo/shotpaper.json
msgid ".62 paper cartridge"
msgid_plural ".62 paper cartridges"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho de papel .62"
+msgstr[1] "cartuchos de papel .62"
+msgstr[2] "cartuchos de papel .62"
#. ~ Description for {'str': '.62 paper cartridge'}
#: data/json/items/ammo/shotpaper.json
@@ -55433,9 +55674,9 @@ msgstr ""
#: data/json/items/ammo/weldgas.json
msgid "oxyacetylene"
msgid_plural "oxyacetylenes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "oxiacetileno"
+msgstr[1] "oxiacetileno"
+msgstr[2] "oxiacetileno"
#. ~ Description for {'str': 'oxyacetylene'}
#: data/json/items/ammo/weldgas.json
@@ -55450,9 +55691,9 @@ msgstr ""
#: data/mods/Generic_Guns/bandoliers/bandolier.json
msgid "ammo pouch"
msgid_plural "ammo pouches"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bolsa de munición"
+msgstr[1] "bolsas de munición"
+msgstr[2] "bolsas de munición"
#. ~ Description for {'str': 'ammo pouch', 'str_pl': 'ammo pouches'}
#: data/json/items/armor/ammo_pouch.json
@@ -55567,9 +55808,9 @@ msgstr ""
#: data/json/items/armor/ammo_pouch.json
msgid "chest rig"
msgid_plural "chest rig"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tirador utilitario"
+msgstr[1] "tirador utilitario"
+msgstr[2] "tirador utilitario"
#. ~ Description for {'str_sp': 'chest rig'}
#: data/json/items/armor/ammo_pouch.json
@@ -55797,9 +56038,9 @@ msgstr ""
#: data/json/items/armor/ammo_pouch.json
msgid "tac vest"
msgid_plural "tac vests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "chaleco táctico"
+msgstr[1] "chalecos tácticos"
+msgstr[2] "chalecos tácticos"
#. ~ Description for {'str': 'tac vest'}
#: data/json/items/armor/ammo_pouch.json
@@ -55818,9 +56059,9 @@ msgstr ""
#: data/json/items/armor/ammo_pouch.json
msgid "XL Kevlar vest"
msgid_plural "XL Kevlar vests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "chaleco XL de Kevlar"
+msgstr[1] "chalecos XL de Kevlar"
+msgstr[2] "chalecos XL de Kevlar"
#. ~ Description for {'str': 'XL Kevlar vest'}
#: data/json/items/armor/ammo_pouch.json
@@ -56064,9 +56305,9 @@ msgstr ""
#: data/json/items/armor/ballistic_armor.json
msgid "lamellar Kevlar vest"
msgid_plural "lamellar Kevlar vests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "chaleco de Kevlar lamelar"
+msgstr[1] "chalecos de Kevlar lamelar"
+msgstr[2] "chalecos de Kevlar lamelar"
#. ~ Description for {'str': 'lamellar Kevlar vest'}
#: data/json/items/armor/ballistic_armor.json
@@ -56112,9 +56353,9 @@ msgstr "Son unas bandoleras de cuero para tener a mano cartuchos de rifle."
#: data/mods/Generic_Guns/bandoliers/bandolier.json
msgid "waist shotgun bandolier"
msgid_plural "waist shotgun bandoliers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "canana de escopeta para cintura"
+msgstr[1] "cananas de escopeta para cintura"
+msgstr[2] "cananas de escopeta para cintura"
#. ~ Description for {'str': 'waist shotgun bandolier'}
#: data/json/items/armor/bandolier.json
@@ -56129,9 +56370,9 @@ msgstr ""
#: data/mods/Generic_Guns/bandoliers/bandolier.json
msgid "torso shotgun bandolier"
msgid_plural "torso shotgun bandoliers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "canana de escopeta para torso"
+msgstr[1] "cananas de escopeta para torso"
+msgstr[2] "cananas de escopeta para torso"
#. ~ Description for {'str': 'torso shotgun bandolier'}
#: data/json/items/armor/bandolier.json
@@ -56197,9 +56438,9 @@ msgstr ""
#: data/json/items/armor/bandolier.json
msgid "stone pouch"
msgid_plural "stone pouches"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bolsa de piedras"
+msgstr[1] "bolsas de piedras"
+msgstr[2] "bolsas de piedras"
#. ~ Description for {'str': 'stone pouch', 'str_pl': 'stone pouches'}
#: data/json/items/armor/bandolier.json
@@ -56213,9 +56454,9 @@ msgstr ""
#: data/json/items/armor/bandolier.json
msgid "large grenade pouch"
msgid_plural "large grenade pouches"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bolso grande de granadas"
+msgstr[1] "bolsos grandes de granadas"
+msgstr[2] "bolsos grandes de granadas"
#. ~ Use action holster_prompt for {'str': 'large grenade pouch', 'str_pl':
#. 'large grenade pouches'}.
@@ -56428,9 +56669,9 @@ msgstr "Es un obi gi ancho y negro."
#: data/json/items/armor/belts.json
msgid "police duty belt"
msgid_plural "police duty belts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cinturón de policía"
+msgstr[1] "cinturones de policía"
+msgstr[2] "cinturones de policía"
#. ~ Use action holster_msg for {'str': 'police duty belt'}.
#: data/json/items/armor/belts.json
@@ -56499,9 +56740,9 @@ msgstr ""
#: data/json/items/armor/belts.json
msgid "webbing belt"
msgid_plural "webbing belts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cinturón cincha"
+msgstr[1] "cinturones cincha"
+msgstr[2] "cinturones cincha"
#. ~ Description for {'str': 'webbing belt'}
#: data/json/items/armor/belts.json
@@ -56542,9 +56783,9 @@ msgstr "Son botas de cuero duras. Muy duraderas."
#: data/json/items/armor/boots.json
msgid "pair of occult boots"
msgid_plural "pairs of occult boots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de botas místicas"
+msgstr[1] "pares de botas místicas"
+msgstr[2] "pares de botas místicas"
#. ~ Description for {'str': 'pair of occult boots', 'str_pl': 'pairs of
#. occult boots'}
@@ -56783,9 +57024,9 @@ msgstr ""
#: data/json/items/armor/boots.json
msgid "pair of scrap boots"
msgid_plural "pairs of scrap boots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de botas de chatarra"
+msgstr[1] "pares de botas de chatarra"
+msgstr[2] "pares de botas de chatarra"
#. ~ Description for {'str': 'pair of scrap boots', 'str_pl': 'pairs of scrap
#. boots'}
@@ -56997,9 +57238,9 @@ msgstr "Son sandalias simples. Muy difícil correr con esto puesto."
#: data/json/items/armor/boots.json
msgid "pair of expensive flip-flops"
msgid_plural "pairs of flip-flops"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de ojotas caras"
+msgstr[1] "pares de ojotas caras"
+msgstr[2] "pares de ojotas caras"
#. ~ Description for {'str': 'pair of expensive flip-flops', 'str_pl': 'pairs
#. of flip-flops'}
@@ -57342,9 +57583,9 @@ msgstr ""
#: data/json/items/armor/boots.json
msgid "pair of heelys (off)"
msgid_plural "pairs of heelys (off)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de heelys (apag.)"
+msgstr[1] "pares de heelys (apag.)"
+msgstr[2] "pares de heelys (apag.)"
#. ~ Use action msg for {'str': 'pair of heelys (off)', 'str_pl': 'pairs of
#. heelys (off)'}.
@@ -57362,9 +57603,9 @@ msgstr ""
#: data/json/items/armor/boots.json
msgid "pair of heelys (on)"
msgid_plural "pairs of heelys (on)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de heelys (enc.)"
+msgstr[1] "pares de heelys (enc.)"
+msgstr[2] "pares de heelys (enc.)"
#. ~ Use action msg for {'str': 'pair of heelys (on)', 'str_pl': 'pairs of
#. heelys (on)'}.
@@ -57382,9 +57623,9 @@ msgstr ""
#: data/json/items/armor/boots.json
msgid "pair of chainmail chausses"
msgid_plural "pairs of chainmail chausses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de chausses cota de malla"
+msgstr[1] "pares de chausses cota de malla"
+msgstr[2] "pares de chausses cota de malla"
#. ~ Description for {'str': 'pair of chainmail chausses', 'str_pl': 'pairs of
#. chainmail chausses'}
@@ -57443,9 +57684,9 @@ msgstr "Son calcetines. Se ponen en los pies."
#: data/json/items/armor/boots.json
msgid "pair of ankle socks"
msgid_plural "pairs of ankle socks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de soquetes"
+msgstr[1] "pares de soquetes"
+msgstr[2] "pares de soquetes"
#. ~ Description for {'str': 'pair of ankle socks', 'str_pl': 'pairs of ankle
#. socks'}
@@ -57578,9 +57819,9 @@ msgstr ""
#: data/json/items/armor/cloaks.json
msgid "Foodperson's cape"
msgid_plural "Foodperson's capes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "capa Foodperson"
+msgstr[1] "capas Foodperson"
+msgstr[2] "capas Foodperson"
#. ~ Description for {'str': "Foodperson's cape"}
#: data/json/items/armor/cloaks.json
@@ -58204,9 +58445,9 @@ msgstr ""
#: data/json/items/armor/coats.json
msgid "yukata"
msgid_plural "yukatas"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "yukata"
+msgstr[1] "yukatas"
+msgstr[2] "yukatas"
#. ~ Description for {'str': 'yukata'}
#: data/json/items/armor/coats.json
@@ -58220,9 +58461,9 @@ msgstr ""
#: data/json/items/armor/coats.json
msgid "haori"
msgid_plural "haoris"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "haori"
+msgstr[1] "haoris"
+msgstr[2] "haoris"
#. ~ Description for {'str': 'haori'}
#: data/json/items/armor/coats.json
@@ -58281,9 +58522,9 @@ msgstr ""
#: data/json/items/armor/coats.json
msgid "ski jacket"
msgid_plural "ski jackets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "campera de ski"
+msgstr[1] "camperas de ski"
+msgstr[2] "camperas de ski"
#. ~ Description for {'str': 'ski jacket'}
#: data/json/items/armor/coats.json
@@ -58329,9 +58570,9 @@ msgstr ""
#: data/json/items/armor/coats.json
msgid "sleeveless faux fur duster"
msgid_plural "sleeveless faux fur dusters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "gabardina de piel sintética sin mangas"
+msgstr[1] "gabardinas de piel sintética sin mangas"
+msgstr[2] "gabardinas de piel sintética sin mangas"
#. ~ Description for {'str': 'sleeveless faux fur duster'}
#: data/json/items/armor/coats.json
@@ -58410,9 +58651,9 @@ msgstr ""
#: data/json/items/armor/coats.json
msgid "sleeveless faux fur trenchcoat"
msgid_plural "sleeveless faux fur trenchcoats"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sobretodo de piel artificial sin mangas"
+msgstr[1] "sobretodos de piel artificial sin mangas"
+msgstr[2] "sobretodos de piel artificial sin mangas"
#. ~ Description for {'str': 'sleeveless faux fur trenchcoat'}
#: data/json/items/armor/coats.json
@@ -58513,9 +58754,9 @@ msgstr ""
#: data/json/items/armor/coats.json
msgid "faux fur trenchcoat"
msgid_plural "faux fur trenchcoats"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sobretodo de piel artificial"
+msgstr[1] "sobretodos de piel artificial"
+msgstr[2] "sobretodos de piel artificial"
#. ~ Description for {'str': 'faux fur trenchcoat'}
#: data/json/items/armor/coats.json
@@ -58830,9 +59071,9 @@ msgstr ""
#: data/json/items/armor/eyewear.json
msgid "pair of snow goggles"
msgid_plural "pairs of snow goggles"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de anteojos de nieve"
+msgstr[1] "pares de anteojos de nieve"
+msgstr[2] "pares de anteojos de nieve"
#. ~ Description for {'str': 'pair of snow goggles', 'str_pl': 'pairs of snow
#. goggles'}
@@ -58911,9 +59152,9 @@ msgstr ""
#: data/json/items/armor/gloves.json
msgid "pair of chainmail gloves"
msgid_plural "pairs of chainmail gloves"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de guantes de cota de malla"
+msgstr[1] "pares de guantes de cota de malla"
+msgstr[2] "pares de guantes de cota de malla"
#. ~ Description for {'str': 'pair of chainmail gloves', 'str_pl': 'pairs of
#. chainmail gloves'}
@@ -58963,9 +59204,9 @@ msgstr ""
#: data/json/items/armor/gloves.json
msgid "pair of biosilicified chitin gauntlets"
msgid_plural "pairs of biosilicified chitin gauntlets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de guantes de quitina biosilicificada"
+msgstr[1] "pares de guantes de quitina biosilicificada"
+msgstr[2] "pares de guantes de quitina biosilicificada"
#. ~ Description for {'str': 'pair of biosilicified chitin gauntlets',
#. 'str_pl': 'pairs of biosilicified chitin gauntlets'}
@@ -58981,9 +59222,9 @@ msgstr ""
#: data/json/items/armor/gloves.json
msgid "fencing gauntlet"
msgid_plural "fencing gauntlets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "guante de esgrima"
+msgstr[1] "guantes de esgrima"
+msgstr[2] "guantes de esgrima"
#. ~ Description for {'str': 'fencing gauntlet'}
#: data/json/items/armor/gloves.json
@@ -58997,9 +59238,9 @@ msgstr ""
#: data/json/items/armor/gloves.json
msgid "fencing gauntlet (left)"
msgid_plural "fencing gauntlets (left)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "guante de esgrima (izq.)"
+msgstr[1] "guantes de esgrima (izq.)"
+msgstr[2] "guantes de esgrima (izq.)"
#. ~ Description for {'str': 'fencing gauntlet (left)', 'str_pl': 'fencing
#. gauntlets (left)'}
@@ -59212,9 +59453,9 @@ msgstr ""
#: data/json/items/armor/gloves.json
msgid "pair of fingerless survivor gloves"
msgid_plural "pairs of fingerless survivor gloves"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de guantes de supervivencia sin dedos"
+msgstr[1] "pares de guantes de supervivencia sin dedos"
+msgstr[2] "pares de guantes de supervivencia sin dedos"
#. ~ Description for {'str': 'pair of fingerless survivor gloves', 'str_pl':
#. 'pairs of fingerless survivor gloves'}
@@ -59652,9 +59893,9 @@ msgstr ""
#: data/json/items/armor/hats.json
msgid "drinking hat"
msgid_plural "drinking hats"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "gorra para bebidas"
+msgstr[1] "gorras para bebidas"
+msgstr[2] "gorras para bebidas"
#. ~ Description for {'str': 'drinking hat'}
#: data/json/items/armor/hats.json
@@ -59758,9 +59999,9 @@ msgstr "Una gorra hecha con piel de animal. Extremadamente abrigada."
#: data/json/items/armor/hats.json
msgid "faux fur hat"
msgid_plural "faux fur hats"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sombrero de piel artificial"
+msgstr[1] "sombreros de piel artificial"
+msgstr[2] "sombreros de piel artificial"
#. ~ Description for {'str': 'faux fur hat'}
#: data/json/items/armor/hats.json
@@ -60227,9 +60468,9 @@ msgstr ""
#: data/json/items/armor/helmets.json
msgid "biosilicified chitin helmet"
msgid_plural "biosilicified chitin helmets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "casco de quitina biosilicificada"
+msgstr[1] "cascos de quitina biosilicificada"
+msgstr[2] "cascos de quitina biosilicificada"
#. ~ Description for {'str': 'biosilicified chitin helmet'}
#: data/json/items/armor/helmets.json
@@ -60305,9 +60546,9 @@ msgstr ""
#: data/json/items/armor/helmets.json
msgid "large wolf skull"
msgid_plural "large wolf skulls"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "calavera grande de lobo"
+msgstr[1] "calaveras grandes de lobo"
+msgstr[2] "calaveras grandes de lobo"
#. ~ Description for {'str': 'large wolf skull'}
#: data/json/items/armor/helmets.json
@@ -60405,9 +60646,9 @@ msgstr ""
#: data/json/items/armor/helmets.json
msgid "great helm"
msgid_plural "great helmets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "gran casco"
+msgstr[1] "grandes cascos"
+msgstr[2] "grandes cascos"
#. ~ Description for {'str': 'great helm', 'str_pl': 'great helmets'}
#: data/json/items/armor/helmets.json
@@ -60619,9 +60860,9 @@ msgstr ""
#: data/json/items/armor/holster.json
msgid "bow sling"
msgid_plural "bow slings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "correa para arco"
+msgstr[1] "correas para arco"
+msgstr[2] "correas para arco"
#. ~ Description for {'str': 'bow sling'}
#: data/json/items/armor/holster.json
@@ -60668,9 +60909,9 @@ msgstr ""
#: data/json/items/armor/holster.json
msgid "deep concealment holster"
msgid_plural "deep concealment holsters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "funda secreta"
+msgstr[1] "fundas secretas"
+msgstr[2] "fundas secretas"
#. ~ Description for {'str': 'deep concealment holster'}
#: data/json/items/armor/holster.json
@@ -60877,9 +61118,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of beaded earrings"
msgid_plural "pairs of beaded earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros con cuentas"
+msgstr[1] "pares de aros con cuentas"
+msgstr[2] "pares de aros con cuentas"
#. ~ Description for {'str': 'pair of beaded earrings', 'str_pl': 'pairs of
#. beaded earrings'}
@@ -60912,9 +61153,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "friendship bracelet"
msgid_plural "friendship bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de amistad"
+msgstr[1] "pulseras de amistad"
+msgstr[2] "pulseras de amistad"
#. ~ Description for {'str': 'friendship bracelet'}
#: data/json/items/armor/jewelry.json
@@ -60928,9 +61169,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "bronze medal"
msgid_plural "bronze medals"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "medalla de bronce"
+msgstr[1] "medallas de bronce"
+msgstr[2] "medallas de bronce"
#. ~ Description for {'str': 'bronze medal'}
#: data/json/items/armor/jewelry.json
@@ -60961,9 +61202,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "garnet dental grill"
msgid_plural "garnet dental grills"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "grill dental de granate"
+msgstr[1] "grills dentales de granate"
+msgstr[2] "grills dentales de granate"
#. ~ Description for {'str': 'garnet dental grill'}
#: data/json/items/armor/jewelry.json
@@ -60976,9 +61217,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "amethyst dental grill"
msgid_plural "amethyst dental grills"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "grill dental de amatista"
+msgstr[1] "grills dentales de amatista"
+msgstr[2] "grills dentales de amatista"
#. ~ Description for {'str': 'amethyst dental grill'}
#: data/json/items/armor/jewelry.json
@@ -60991,9 +61232,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "aquamarine dental grill"
msgid_plural "aquamarine dental grills"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "grill dental de aguamarina"
+msgstr[1] "grills dentales de aguamarina"
+msgstr[2] "grills dentales de aguamarina"
#. ~ Description for {'str': 'aquamarine dental grill'}
#: data/json/items/armor/jewelry.json
@@ -61007,9 +61248,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "emerald dental grill"
msgid_plural "emerald dental grills"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "grill dental de esmeralda"
+msgstr[1] "grills dentales de esmeralda"
+msgstr[2] "grills dentales de esmeralda"
#. ~ Description for {'str': 'emerald dental grill'}
#: data/json/items/armor/jewelry.json
@@ -61022,9 +61263,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "alexandrite dental grill"
msgid_plural "alexandrite dental grills"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "grill dental de alejandrita"
+msgstr[1] "grills dentales de alejandrita"
+msgstr[2] "grills dentales de alejandrita"
#. ~ Description for {'str': 'alexandrite dental grill'}
#: data/json/items/armor/jewelry.json
@@ -61038,9 +61279,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "ruby dental grill"
msgid_plural "ruby dental grills"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "grill dental de rubí"
+msgstr[1] "grills dentales de rubí"
+msgstr[2] "grills dentales de rubí"
#. ~ Description for {'str': 'ruby dental grill'}
#: data/json/items/armor/jewelry.json
@@ -61053,9 +61294,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "peridot dental grill"
msgid_plural "peridot dental grills"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "grill dental de peridoto"
+msgstr[1] "grills dentales de peridoto"
+msgstr[2] "grills dentales de peridoto"
#. ~ Description for {'str': 'peridot dental grill'}
#: data/json/items/armor/jewelry.json
@@ -61068,9 +61309,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "sapphire dental grill"
msgid_plural "sapphire dental grills"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "grill dental de zafiro"
+msgstr[1] "grills dentales de zafiro"
+msgstr[2] "grills dentales de zafiro"
#. ~ Description for {'str': 'sapphire dental grill'}
#: data/json/items/armor/jewelry.json
@@ -61083,9 +61324,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "tourmaline dental grill"
msgid_plural "tourmaline dental grills"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "grill dental de turmalina"
+msgstr[1] "grills dentales de turmalina"
+msgstr[2] "grills dentales de turmalina"
#. ~ Description for {'str': 'tourmaline dental grill'}
#: data/json/items/armor/jewelry.json
@@ -61099,9 +61340,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "citrine dental grill"
msgid_plural "citrine dental grills"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "grill dental de citrino"
+msgstr[1] "grills dentales de citrino"
+msgstr[2] "grills dentales de citrino"
#. ~ Description for {'str': 'citrine dental grill'}
#: data/json/items/armor/jewelry.json
@@ -61126,9 +61367,9 @@ msgstr "Un pasador para el pelo con muchos adornos."
#: data/json/items/armor/jewelry.json
msgid "blue topaz dental grill"
msgid_plural "blue topaz dental grills"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "grill dental de topacio azul"
+msgstr[1] "grills dentales de topacio azul"
+msgstr[2] "grills dentales de topacio azul"
#. ~ Description for {'str': 'blue topaz dental grill'}
#: data/json/items/armor/jewelry.json
@@ -61142,9 +61383,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "diamond and gold ring"
msgid_plural "diamond and gold rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de oro y diamante"
+msgstr[1] "anillos de oro y diamante"
+msgstr[2] "anillos de oro y diamante"
#. ~ Description for {'str': 'diamond and gold ring'}
#: data/json/items/armor/jewelry.json
@@ -61211,9 +61452,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of copper earrings"
msgid_plural "pairs of copper earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de cobre"
+msgstr[1] "pares de aros de cobre"
+msgstr[2] "pares de aros de cobre"
#. ~ Description for {'str': 'pair of copper earrings', 'str_pl': 'pairs of
#. copper earrings'}
@@ -61228,9 +61469,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "copper hairpin"
msgid_plural "copper hairpins"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hebilla de cobre"
+msgstr[1] "hebillas de cobre"
+msgstr[2] "hebillas de cobre"
#. ~ Description for {'str': 'copper hairpin'}
#: data/json/items/armor/jewelry.json
@@ -61244,9 +61485,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "copper locket"
msgid_plural "copper lockets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "relicario de cobre"
+msgstr[1] "relicarios de cobre"
+msgstr[2] "relicarios de cobre"
#. ~ Description for {'str': 'copper locket'}
#: data/json/items/armor/jewelry.json
@@ -61278,9 +61519,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "copper ring"
msgid_plural "copper rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de cobre"
+msgstr[1] "anillos de cobre"
+msgstr[2] "anillos de cobre"
#. ~ Description for {'str': 'copper ring'}
#: data/json/items/armor/jewelry.json
@@ -61294,9 +61535,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of cufflinks"
msgid_plural "pairs of cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de gemelos"
+msgstr[1] "pares de gemelos"
+msgstr[2] "pares de gemelos"
#. ~ Description for {'str': 'pair of cufflinks', 'str_pl': 'pairs of
#. cufflinks'}
@@ -61313,9 +61554,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of intricate cufflinks"
msgid_plural "pairs of intricate cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de gemelos intrincados"
+msgstr[1] "pares de gemelos intrincados"
+msgstr[2] "pares de gemelos intrincados"
#. ~ Description for {'str': 'pair of intricate cufflinks', 'str_pl': 'pairs
#. of intricate cufflinks'}
@@ -61332,9 +61573,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "garnet and gold cufflinks"
msgid_plural "garnet and gold cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de granate y oro"
+msgstr[1] "pares de gemelos de granate y oro"
+msgstr[2] "pares de gemelos de granate y oro"
#. ~ Description for {'str_sp': 'garnet and gold cufflinks'}
#. ~ Description for {'str_sp': 'garnet and silver cufflinks'}
@@ -61346,9 +61587,9 @@ msgstr "Es un par de gemelos con granates incrustados."
#: data/json/items/armor/jewelry.json
msgid "diamond and gold cufflinks"
msgid_plural "diamond and gold cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de diamante y oro"
+msgstr[1] "pares de gemelos de diamante y oro"
+msgstr[2] "pares de gemelos de diamante y oro"
#. ~ Description for {'str_sp': 'diamond and gold cufflinks'}
#. ~ Description for {'str_sp': 'diamond and silver cufflinks'}
@@ -61360,9 +61601,9 @@ msgstr "Es un par de gemelos con diamantes incrustados."
#: data/json/items/armor/jewelry.json
msgid "amethyst and gold cufflinks"
msgid_plural "amethyst and gold cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de amatista y oro"
+msgstr[1] "pares de gemelos de amatista y oro"
+msgstr[2] "pares de gemelos de amatista y oro"
#. ~ Description for {'str_sp': 'amethyst and gold cufflinks'}
#. ~ Description for {'str_sp': 'amethyst and silver cufflinks'}
@@ -61374,9 +61615,9 @@ msgstr "Es un par de gemelos con amatistas incrustadas."
#: data/json/items/armor/jewelry.json
msgid "aquamarine and gold cufflinks"
msgid_plural "aquamarine and gold cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de aguamarina y oro"
+msgstr[1] "pares de gemelos de aguamarina y oro"
+msgstr[2] "pares de gemelos de aguamarina y oro"
#. ~ Description for {'str_sp': 'aquamarine and gold cufflinks'}
#. ~ Description for {'str_sp': 'aquamarine and silver cufflinks'}
@@ -61388,9 +61629,9 @@ msgstr "Es un par de gemelos con aguamarinas incrustadas."
#: data/json/items/armor/jewelry.json
msgid "emerald and gold cufflinks"
msgid_plural "emerald and gold cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de esmeralda y oro"
+msgstr[1] "pares de gemelos de esmeralda y oro"
+msgstr[2] "pares de gemelos de esmeralda y oro"
#. ~ Description for {'str_sp': 'emerald and gold cufflinks'}
#. ~ Description for {'str_sp': 'emerald and silver cufflinks'}
@@ -61402,9 +61643,9 @@ msgstr "Es un par de gemelos con esmeraldas incrustadas."
#: data/json/items/armor/jewelry.json
msgid "alexandrite and gold cufflinks"
msgid_plural "alexandrite and gold cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de alejandrita y oro"
+msgstr[1] "pares de gemelos de alejandrita y oro"
+msgstr[2] "pares de gemelos de alejandrita y oro"
#. ~ Description for {'str_sp': 'alexandrite and gold cufflinks'}
#. ~ Description for {'str_sp': 'alexandrite and silver cufflinks'}
@@ -61416,9 +61657,9 @@ msgstr "Es un par de gemelos con alejandritas incrustadas."
#: data/json/items/armor/jewelry.json
msgid "ruby and gold cufflinks"
msgid_plural "ruby and gold cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de rubí y oro"
+msgstr[1] "pares de gemelos de rubí y oro"
+msgstr[2] "pares de gemelos de rubí y oro"
#. ~ Description for {'str_sp': 'ruby and gold cufflinks'}
#. ~ Description for {'str_sp': 'ruby and silver cufflinks'}
@@ -61430,9 +61671,9 @@ msgstr "Es un par de gemelos con rubíes incrustados."
#: data/json/items/armor/jewelry.json
msgid "peridot and gold cufflinks"
msgid_plural "peridot and gold cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de peridoto y oro"
+msgstr[1] "pares de gemelos de peridoto y oro"
+msgstr[2] "pares de gemelos de peridoto y oro"
#. ~ Description for {'str_sp': 'peridot and gold cufflinks'}
#. ~ Description for {'str_sp': 'peridot and silver cufflinks'}
@@ -61444,9 +61685,9 @@ msgstr "Es un par de gemelos con peridotos incrustados."
#: data/json/items/armor/jewelry.json
msgid "sapphire and gold cufflinks"
msgid_plural "sapphire and gold cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de zafiro y oro"
+msgstr[1] "pares de gemelos de zafiro y oro"
+msgstr[2] "pares de gemelos de zafiro y oro"
#. ~ Description for {'str_sp': 'sapphire and gold cufflinks'}
#. ~ Description for {'str_sp': 'sapphire and silver cufflinks'}
@@ -61458,9 +61699,9 @@ msgstr "Es un par de gemelos con zafiros incrustados."
#: data/json/items/armor/jewelry.json
msgid "tourmaline and gold cufflinks"
msgid_plural "tourmaline and gold cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de turmalina y oro"
+msgstr[1] "pares de gemelos de turmalina y oro"
+msgstr[2] "pares de gemelos de turmalina y oro"
#. ~ Description for {'str_sp': 'tourmaline and gold cufflinks'}
#. ~ Description for {'str_sp': 'tourmaline and silver cufflinks'}
@@ -61472,9 +61713,9 @@ msgstr "Es un par de gemelos con turmalinas incrustadas."
#: data/json/items/armor/jewelry.json
msgid "citrine and gold cufflinks"
msgid_plural "citrine and gold cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de citrino y oro"
+msgstr[1] "pares de gemelos de citrino y oro"
+msgstr[2] "pares de gemelos de citrino y oro"
#. ~ Description for {'str_sp': 'citrine and gold cufflinks'}
#. ~ Description for {'str_sp': 'citrine and silver cufflinks'}
@@ -61486,9 +61727,9 @@ msgstr "Es un par de gemelos con citrinos incrustados."
#: data/json/items/armor/jewelry.json
msgid "blue topaz and gold cufflinks"
msgid_plural "blue topaz and gold cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de topacio azul y oro"
+msgstr[1] "pares de gemelos de topacio azul y oro"
+msgstr[2] "pares de gemelos de topacio azul y oro"
#. ~ Description for {'str_sp': 'blue topaz and gold cufflinks'}
#. ~ Description for {'str_sp': 'blue topaz and silver cufflinks'}
@@ -61500,9 +61741,9 @@ msgstr "Es un par de gemelos con topacios azules incrustados."
#: data/json/items/armor/jewelry.json
msgid "opal and gold cufflinks"
msgid_plural "opal and gold cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de ópalo y oro"
+msgstr[1] "pares de gemelos de ópalo y oro"
+msgstr[2] "pares de gemelos de ópalo y oro"
#. ~ Description for {'str_sp': 'opal and gold cufflinks'}
#. ~ Description for {'str_sp': 'opal and silver cufflinks'}
@@ -61514,9 +61755,9 @@ msgstr "Es un par de gemelos con ópalos incrustados."
#: data/json/items/armor/jewelry.json
msgid "pearl and gold cufflinks"
msgid_plural "pearl and gold cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de perla y oro"
+msgstr[1] "pares de gemelos de perla y oro"
+msgstr[2] "pares de gemelos de perla y oro"
#. ~ Description for {'str_sp': 'pearl and gold cufflinks'}
#. ~ Description for {'str_sp': 'pearl and silver cufflinks'}
@@ -61528,198 +61769,198 @@ msgstr "Es un par de gemelos con perlas incrustadas."
#: data/json/items/armor/jewelry.json
msgid "garnet and silver cufflinks"
msgid_plural "garnet and silver cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de granate y plata"
+msgstr[1] "pares de gemelos de granate y plata"
+msgstr[2] "pares de gemelos de granate y plata"
#: data/json/items/armor/jewelry.json
msgid "diamond and silver cufflinks"
msgid_plural "diamond and silver cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de diamante y plata"
+msgstr[1] "pares de gemelos de diamante y plata"
+msgstr[2] "pares de gemelos de diamante y plata"
#: data/json/items/armor/jewelry.json
msgid "amethyst and silver cufflinks"
msgid_plural "amethyst and silver cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de amatista y plata"
+msgstr[1] "pares de gemelos de amatista y plata"
+msgstr[2] "pares de gemelos de amatista y plata"
#: data/json/items/armor/jewelry.json
msgid "aquamarine and silver cufflinks"
msgid_plural "aquamarine and silver cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de aguamarina y plata"
+msgstr[1] "pares de gemelos de aguamarina y plata"
+msgstr[2] "pares de gemelos de aguamarina y plata"
#: data/json/items/armor/jewelry.json
msgid "emerald and silver cufflinks"
msgid_plural "emerald and silver cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de esmeralda y plata"
+msgstr[1] "pares de gemelos de esmeralda y plata"
+msgstr[2] "pares de gemelos de esmeralda y plata"
#: data/json/items/armor/jewelry.json
msgid "alexandrite and silver cufflinks"
msgid_plural "alexandrite and silver cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de alejandrita y plata"
+msgstr[1] "pares de gemelos de alejandrita y plata"
+msgstr[2] "pares de gemelos de alejandrita y plata"
#: data/json/items/armor/jewelry.json
msgid "ruby and silver cufflinks"
msgid_plural "ruby and silver cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de rubí y plata"
+msgstr[1] "pares de gemelos de rubí y plata"
+msgstr[2] "pares de gemelos de rubí y plata"
#: data/json/items/armor/jewelry.json
msgid "peridot and silver cufflinks"
msgid_plural "peridot and silver cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de peridoto y plata"
+msgstr[1] "pares de gemelos de peridoto y plata"
+msgstr[2] "pares de gemelos de peridoto y plata"
#: data/json/items/armor/jewelry.json
msgid "sapphire and silver cufflinks"
msgid_plural "sapphire and silver cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de zafiro y plata"
+msgstr[1] "pares de gemelos de zafiro y plata"
+msgstr[2] "pares de gemelos de zafiro y plata"
#: data/json/items/armor/jewelry.json
msgid "tourmaline and silver cufflinks"
msgid_plural "tourmaline and silver cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de turmalina y plata"
+msgstr[1] "pares de gemelos de turmalina y plata"
+msgstr[2] "pares de gemelos de turmalina y plata"
#: data/json/items/armor/jewelry.json
msgid "citrine and silver cufflinks"
msgid_plural "citrine and silver cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de citrino y plata"
+msgstr[1] "pares de gemelos de citrino y plata"
+msgstr[2] "pares de gemelos de citrino y plata"
#: data/json/items/armor/jewelry.json
msgid "blue topaz and silver cufflinks"
msgid_plural "blue topaz and silver cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de topacio azul y plata"
+msgstr[1] "pares de gemelos de topacio azul y plata"
+msgstr[2] "pares de gemelos de topacio azul y plata"
#: data/json/items/armor/jewelry.json
msgid "opal and silver cufflinks"
msgid_plural "opal and silver cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de ópalo y plata"
+msgstr[1] "pares de gemelos de ópalo y plata"
+msgstr[2] "pares de gemelos de ópalo y plata"
#: data/json/items/armor/jewelry.json
msgid "pearl and silver cufflinks"
msgid_plural "pearl and silver cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de perla y plata"
+msgstr[1] "pares de gemelos de perla y plata"
+msgstr[2] "pares de gemelos de perla y plata"
#: data/json/items/armor/jewelry.json
msgid "garnet and platinum cufflinks"
msgid_plural "garnet and platinum cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de granate y platino"
+msgstr[1] "pares de gemelos de granate y platino"
+msgstr[2] "pares de gemelos de granate y platino"
#: data/json/items/armor/jewelry.json
msgid "diamond and platinum cufflinks"
msgid_plural "diamond and platinum cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de diamante y platino"
+msgstr[1] "pares de gemelos de diamante y platino"
+msgstr[2] "pares de gemelos de diamante y platino"
#: data/json/items/armor/jewelry.json
msgid "amethyst and platinum cufflinks"
msgid_plural "amethyst and platinum cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de amatista y platino"
+msgstr[1] "pares de gemelos de amatista y platino"
+msgstr[2] "pares de gemelos de amatista y platino"
#: data/json/items/armor/jewelry.json
msgid "aquamarine and platinum cufflinks"
msgid_plural "aquamarine and platinum cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de aguamarina y platino"
+msgstr[1] "pares de gemelos de aguamarina y platino"
+msgstr[2] "pares de gemelos de aguamarina y platino"
#: data/json/items/armor/jewelry.json
msgid "emerald and platinum cufflinks"
msgid_plural "emerald and platinum cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de esmeralda y platino"
+msgstr[1] "pares de gemelos de esmeralda y platino"
+msgstr[2] "pares de gemelos de esmeralda y platino"
#: data/json/items/armor/jewelry.json
msgid "alexandrite and platinum cufflinks"
msgid_plural "alexandrite and platinum cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de alejandrita y platino"
+msgstr[1] "pares de gemelos de alejandrita y platino"
+msgstr[2] "pares de gemelos de alejandrita y platino"
#: data/json/items/armor/jewelry.json
msgid "ruby and platinum cufflinks"
msgid_plural "ruby and platinum cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de rubí y platino"
+msgstr[1] "pares de gemelos de rubí y platino"
+msgstr[2] "pares de gemelos de rubí y platino"
#: data/json/items/armor/jewelry.json
msgid "peridot and platinum cufflinks"
msgid_plural "peridot and platinum cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de peridoto y platino"
+msgstr[1] "pares de gemelos de peridoto y platino"
+msgstr[2] "pares de gemelos de peridoto y platino"
#: data/json/items/armor/jewelry.json
msgid "sapphire and platinum cufflinks"
msgid_plural "sapphire and platinum cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de zafiro y platino"
+msgstr[1] "pares de gemelos de zafiro y platino"
+msgstr[2] "pares de gemelos de zafiro y platino"
#: data/json/items/armor/jewelry.json
msgid "tourmaline and platinum cufflinks"
msgid_plural "tourmaline and platinum cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de turmalina y platino"
+msgstr[1] "pares de gemelos de turmalina y platino"
+msgstr[2] "pares de gemelos de turmalina y platino"
#: data/json/items/armor/jewelry.json
msgid "citrine and platinum cufflinks"
msgid_plural "citrine and platinum cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de citrino y platino"
+msgstr[1] "pares de gemelos de citrino y platino"
+msgstr[2] "pares de gemelos de citrino y platino"
#: data/json/items/armor/jewelry.json
msgid "blue topaz and platinum cufflinks"
msgid_plural "blue topaz and platinum cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de topacio azul y platino"
+msgstr[1] "pares de gemelos de topacio azul y platino"
+msgstr[2] "pares de gemelos de topacio azul y platino"
#: data/json/items/armor/jewelry.json
msgid "opal and platinum cufflinks"
msgid_plural "opal and platinum cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de ópalo y platino"
+msgstr[1] "pares de gemelos de ópalo y platino"
+msgstr[2] "pares de gemelos de ópalo y platino"
#: data/json/items/armor/jewelry.json
msgid "pearl and platinum cufflinks"
msgid_plural "pearl and platinum cufflinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pares de gemelos de perla y platino"
+msgstr[1] "pares de gemelos de perla y platino"
+msgstr[2] "pares de gemelos de perla y platino"
#: data/json/items/armor/jewelry.json
msgid "plug"
@@ -61773,9 +62014,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of gold earrings"
msgid_plural "pairs of gold earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de oro"
+msgstr[1] "pares de aros de oro"
+msgstr[2] "pares de aros de oro"
#. ~ Description for {'str': 'pair of gold earrings', 'str_pl': 'pairs of gold
#. earrings'}
@@ -61790,9 +62031,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "gold hairpin"
msgid_plural "gold hairpins"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hebilla de oro"
+msgstr[1] "hebillas de oro"
+msgstr[2] "hebillas de oro"
#. ~ Description for {'str': 'gold hairpin'}
#: data/json/items/armor/jewelry.json
@@ -61806,9 +62047,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "gold locket"
msgid_plural "gold lockets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "relicario de oro"
+msgstr[1] "relicarios de oro"
+msgstr[2] "relicarios de oro"
#. ~ Description for {'str': 'gold locket'}
#: data/json/items/armor/jewelry.json
@@ -61824,9 +62065,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "gold medal"
msgid_plural "gold medals"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "medalla de oro"
+msgstr[1] "medallas de oro"
+msgstr[2] "medallas de oro"
#. ~ Description for {'str': 'gold medal'}
#: data/json/items/armor/jewelry.json
@@ -61842,9 +62083,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "gold necklace"
msgid_plural "gold necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "collar de oro"
+msgstr[1] "collares de oro"
+msgstr[2] "collares de oro"
#. ~ Description for {'str': 'gold necklace'}
#: data/json/items/armor/jewelry.json
@@ -61906,9 +62147,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "silver watch"
msgid_plural "silver watches"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "reloj de plata"
+msgstr[1] "relojes de plata"
+msgstr[2] "relojes de plata"
#. ~ Description for {'str': 'silver watch', 'str_pl': 'silver watches'}
#: data/json/items/armor/jewelry.json
@@ -61940,9 +62181,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of silver earrings"
msgid_plural "pairs of silver earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de plata"
+msgstr[1] "pares de aros de plata"
+msgstr[2] "pares de aros de plata"
#. ~ Description for {'str': 'pair of silver earrings', 'str_pl': 'pairs of
#. silver earrings'}
@@ -62050,9 +62291,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "platinum watch"
msgid_plural "platinum watches"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "reloj de platino"
+msgstr[1] "relojes de platino"
+msgstr[2] "relojes de platino"
#. ~ Description for {'str': 'platinum watch', 'str_pl': 'platinum watches'}
#: data/json/items/armor/jewelry.json
@@ -62066,9 +62307,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "platinum bracelet"
msgid_plural "platinum bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de platino"
+msgstr[1] "pulseras de platino"
+msgstr[2] "pulseras de platino"
#. ~ Description for {'str': 'platinum bracelet'}
#: data/json/items/armor/jewelry.json
@@ -62082,9 +62323,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "platinum dental grill"
msgid_plural "platinum dental grills"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "grills dentales de platino"
+msgstr[1] "grills dentales de platino"
+msgstr[2] "grills dentales de platino"
#. ~ Description for {'str': 'platinum dental grill'}
#: data/json/items/armor/jewelry.json
@@ -62099,9 +62340,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of platinum earrings"
msgid_plural "pairs of platinum earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de platino"
+msgstr[1] "pares de aros de platino"
+msgstr[2] "pares de aros de platino"
#. ~ Description for {'str': 'pair of platinum earrings', 'str_pl': 'pairs of
#. platinum earrings'}
@@ -62118,9 +62359,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "platinum hairpin"
msgid_plural "platinum hairpins"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hebilla de platino"
+msgstr[1] "hebillas de platino"
+msgstr[2] "hebillas de platino"
#. ~ Description for {'str': 'platinum hairpin'}
#: data/json/items/armor/jewelry.json
@@ -62136,9 +62377,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "platinum locket"
msgid_plural "platinum lockets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "relicario de platino"
+msgstr[1] "relicarios de platino"
+msgstr[2] "relicarios de platino"
#. ~ Description for {'str': 'platinum locket'}
#: data/json/items/armor/jewelry.json
@@ -62152,9 +62393,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "platinum necklace"
msgid_plural "platinum necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "collar de platino"
+msgstr[1] "collares de platino"
+msgstr[2] "collares de platino"
#. ~ Description for {'str': 'platinum necklace'}
#: data/json/items/armor/jewelry.json
@@ -62168,9 +62409,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "platinum ring"
msgid_plural "platinum rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de platino"
+msgstr[1] "anillos de platino"
+msgstr[2] "anillos de platino"
#. ~ Description for {'str': 'platinum ring'}
#: data/json/items/armor/jewelry.json
@@ -62184,9 +62425,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "engagement ring"
msgid_plural "engagement rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de compromiso"
+msgstr[1] "anillos de compromiso"
+msgstr[2] "anillos de compromiso"
#. ~ Description for {'str': 'engagement ring'}
#: data/json/items/armor/jewelry.json
@@ -62202,9 +62443,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "purity ring"
msgid_plural "purity rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillos de castidad"
+msgstr[1] "anillos de castidad"
+msgstr[2] "anillos de castidad"
#. ~ Description for {'str': 'purity ring'}
#: data/json/items/armor/jewelry.json
@@ -62219,9 +62460,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "signet ring"
msgid_plural "signet rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de sello"
+msgstr[1] "anillos de sello"
+msgstr[2] "anillos de sello"
#. ~ Description for {'str': 'signet ring'}
#: data/json/items/armor/jewelry.json
@@ -62237,9 +62478,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "wedding ring"
msgid_plural "wedding rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de casamiento"
+msgstr[1] "anillos de casamiento"
+msgstr[2] "anillos de casamiento"
#. ~ Description for {'str': 'wedding ring'}
#: data/json/items/armor/jewelry.json
@@ -62269,9 +62510,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "silver hairpin"
msgid_plural "silver hairpins"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hebilla de plata"
+msgstr[1] "hebillas de plata"
+msgstr[2] "hebillas de plata"
#. ~ Description for {'str': 'silver hairpin'}
#: data/json/items/armor/jewelry.json
@@ -62285,9 +62526,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "silver locket"
msgid_plural "silver lockets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "relicario de plata"
+msgstr[1] "relicarios de plata"
+msgstr[2] "relicarios de plata"
#. ~ Description for {'str': 'silver locket'}
#: data/json/items/armor/jewelry.json
@@ -62302,9 +62543,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "silver medal"
msgid_plural "silver medals"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "medalla de plata"
+msgstr[1] "medallas de plata"
+msgstr[2] "medallas de plata"
#. ~ Description for {'str': 'silver medal'}
#: data/json/items/armor/jewelry.json
@@ -62474,9 +62715,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "doctor badge"
msgid_plural "doctor badges"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "placa de médico"
+msgstr[1] "placas de médico"
+msgstr[2] "placas de médico"
#. ~ Description for {'str': 'doctor badge'}
#: data/json/items/armor/jewelry.json
@@ -62637,9 +62878,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of diamond and gold earrings"
msgid_plural "pairs of diamond and gold earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de diamante y oro"
+msgstr[1] "pares de aros de diamante y oro"
+msgstr[2] "pares de aros de diamante y oro"
#. ~ Description for {'str': 'pair of diamond and gold earrings', 'str_pl':
#. 'pairs of diamond and gold earrings'}
@@ -62654,9 +62895,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of garnet and gold earrings"
msgid_plural "pairs of garnet and gold earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de granate y oro"
+msgstr[1] "pares de aros de granate y oro"
+msgstr[2] "pares de aros de granate y oro"
#. ~ Description for {'str': 'pair of garnet and gold earrings', 'str_pl':
#. 'pairs of garnet and gold earrings'}
@@ -62671,9 +62912,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of amethyst and gold earrings"
msgid_plural "pairs of amethyst and gold earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de amatista y oro"
+msgstr[1] "pares de aros de amatista y oro"
+msgstr[2] "pares de aros de amatista y oro"
#. ~ Description for {'str': 'pair of amethyst and gold earrings', 'str_pl':
#. 'pairs of amethyst and gold earrings'}
@@ -62688,9 +62929,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of aquamarine and gold earrings"
msgid_plural "pairs of aquamarine and gold earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de aguamarina y oro"
+msgstr[1] "pares de aros de aguamarina y oro"
+msgstr[2] "pares de aros de aguamarina y oro"
#. ~ Description for {'str': 'pair of aquamarine and gold earrings', 'str_pl':
#. 'pairs of aquamarine and gold earrings'}
@@ -62705,9 +62946,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of emerald and gold earrings"
msgid_plural "pairs of emerald and gold earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de esmeralda y oro"
+msgstr[1] "pares de aros de esmeralda y oro"
+msgstr[2] "pares de aros de esmeralda y oro"
#. ~ Description for {'str': 'pair of emerald and gold earrings', 'str_pl':
#. 'pairs of emerald and gold earrings'}
@@ -62722,9 +62963,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of alexandrite and gold earrings"
msgid_plural "pairs of alexandrite and gold earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de alejandrita y oro"
+msgstr[1] "pares de aros de alejandrita y oro"
+msgstr[2] "pares de aros de alejandrita y oro"
#. ~ Description for {'str': 'pair of alexandrite and gold earrings',
#. 'str_pl': 'pairs of alexandrite and gold earrings'}
@@ -62739,9 +62980,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of ruby and gold earrings"
msgid_plural "pairs of ruby and gold earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de rubí y oro"
+msgstr[1] "pares de aros de rubí y oro"
+msgstr[2] "pares de aros de rubí y oro"
#. ~ Description for {'str': 'pair of ruby and gold earrings', 'str_pl':
#. 'pairs of ruby and gold earrings'}
@@ -62756,9 +62997,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of peridot and gold earrings"
msgid_plural "pairs of peridot and gold earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de peridoto y oro"
+msgstr[1] "pares de aros de peridoto y oro"
+msgstr[2] "pares de aros de peridoto y oro"
#. ~ Description for {'str': 'pair of peridot and gold earrings', 'str_pl':
#. 'pairs of peridot and gold earrings'}
@@ -62773,9 +63014,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of sapphire and gold earrings"
msgid_plural "pairs of sapphire and gold earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de zafiro y oro"
+msgstr[1] "pares de aros de zafiro y oro"
+msgstr[2] "pares de aros de zafiro y oro"
#. ~ Description for {'str': 'pair of sapphire and gold earrings', 'str_pl':
#. 'pairs of sapphire and gold earrings'}
@@ -62790,9 +63031,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of tourmaline and gold earrings"
msgid_plural "pairs of tourmaline and gold earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de turmalina y oro"
+msgstr[1] "pares de aros de turmalina y oro"
+msgstr[2] "pares de aros de turmalina y oro"
#. ~ Description for {'str': 'pair of tourmaline and gold earrings', 'str_pl':
#. 'pairs of tourmaline and gold earrings'}
@@ -62807,9 +63048,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of citrine and gold earrings"
msgid_plural "pairs of citrine and gold earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de citrino y oro"
+msgstr[1] "pares de aros de citrino y oro"
+msgstr[2] "pares de aros de citrino y oro"
#. ~ Description for {'str': 'pair of citrine and gold earrings', 'str_pl':
#. 'pairs of citrine and gold earrings'}
@@ -62824,9 +63065,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of blue topaz and gold earrings"
msgid_plural "pairs of blue topaz and gold earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de topacio azul y oro"
+msgstr[1] "pares de aros de topacio azul y oro"
+msgstr[2] "pares de aros de topacio azul y oro"
#. ~ Description for {'str': 'pair of blue topaz and gold earrings', 'str_pl':
#. 'pairs of blue topaz and gold earrings'}
@@ -62841,9 +63082,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of opal and gold earrings"
msgid_plural "pairs of opal and gold earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de ópalo y oro"
+msgstr[1] "pares de aros de ópalo y oro"
+msgstr[2] "pares de aros de ópalo y oro"
#. ~ Description for {'str': 'pair of opal and gold earrings', 'str_pl':
#. 'pairs of opal and gold earrings'}
@@ -62858,9 +63099,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of pearl and gold earrings"
msgid_plural "pairs of pearl and gold earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de perla y oro"
+msgstr[1] "pares de aros de perla y oro"
+msgstr[2] "pares de aros de perla y oro"
#. ~ Description for {'str': 'pair of pearl and gold earrings', 'str_pl':
#. 'pairs of pearl and gold earrings'}
@@ -62875,9 +63116,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of diamond and silver earrings"
msgid_plural "pairs of diamond and silver earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de diamante y plata"
+msgstr[1] "pares de aros de diamante y plata"
+msgstr[2] "pares de aros de diamante y plata"
#. ~ Description for {'str': 'pair of diamond and silver earrings', 'str_pl':
#. 'pairs of diamond and silver earrings'}
@@ -62892,9 +63133,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of garnet and silver earrings"
msgid_plural "pairs of garnet and silver earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de granate y plata"
+msgstr[1] "pares de aros de granate y plata"
+msgstr[2] "pares de aros de granate y plata"
#. ~ Description for {'str': 'pair of garnet and silver earrings', 'str_pl':
#. 'pairs of garnet and silver earrings'}
@@ -62926,9 +63167,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of aquamarine and silver earrings"
msgid_plural "pairs of aquamarine and silver earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de aguamarina y plata"
+msgstr[1] "pares de aros de aguamarina y plata"
+msgstr[2] "pares de aros de aguamarina y plata"
#. ~ Description for {'str': 'pair of aquamarine and silver earrings',
#. 'str_pl': 'pairs of aquamarine and silver earrings'}
@@ -62943,9 +63184,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of emerald and silver earrings"
msgid_plural "pairs of emerald and silver earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de esmeralda y plata"
+msgstr[1] "pares de aros de esmeralda y plata"
+msgstr[2] "pares de aros de esmeralda y plata"
#. ~ Description for {'str': 'pair of emerald and silver earrings', 'str_pl':
#. 'pairs of emerald and silver earrings'}
@@ -62960,9 +63201,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of alexandrite and silver earrings"
msgid_plural "pairs of alexandrite and silver earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de alejandrita y plata"
+msgstr[1] "pares de aros de alejandrita y plata"
+msgstr[2] "pares de aros de alejandrita y plata"
#. ~ Description for {'str': 'pair of alexandrite and silver earrings',
#. 'str_pl': 'pairs of alexandrite and silver earrings'}
@@ -62977,9 +63218,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of ruby and silver earrings"
msgid_plural "pairs of ruby and silver earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de rubí y plata"
+msgstr[1] "pares de aros de rubí y plata"
+msgstr[2] "pares de aros de rubí y plata"
#. ~ Description for {'str': 'pair of ruby and silver earrings', 'str_pl':
#. 'pairs of ruby and silver earrings'}
@@ -62994,9 +63235,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of peridot and silver earrings"
msgid_plural "pairs of peridot and silver earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de peridoto y plata"
+msgstr[1] "pares de aros de peridoto y plata"
+msgstr[2] "pares de aros de peridoto y plata"
#. ~ Description for {'str': 'pair of peridot and silver earrings', 'str_pl':
#. 'pairs of peridot and silver earrings'}
@@ -63011,9 +63252,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of sapphire and silver earrings"
msgid_plural "pairs of sapphire and silver earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de zafiro y plata"
+msgstr[1] "pares de aros de zafiro y plata"
+msgstr[2] "pares de aros de zafiro y plata"
#. ~ Description for {'str': 'pair of sapphire and silver earrings', 'str_pl':
#. 'pairs of sapphire and silver earrings'}
@@ -63028,9 +63269,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of tourmaline and silver earrings"
msgid_plural "pairs of tourmaline and silver earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de turmalina y plata"
+msgstr[1] "pares de aros de turmalina y plata"
+msgstr[2] "pares de aros de turmalina y plata"
#. ~ Description for {'str': 'pair of tourmaline and silver earrings',
#. 'str_pl': 'pairs of tourmaline and silver earrings'}
@@ -63045,9 +63286,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of citrine and silver earrings"
msgid_plural "pairs of citrine and silver earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de citrino y plata"
+msgstr[1] "pares de aros de citrino y plata"
+msgstr[2] "pares de aros de citrino y plata"
#. ~ Description for {'str': 'pair of citrine and silver earrings', 'str_pl':
#. 'pairs of citrine and silver earrings'}
@@ -63062,9 +63303,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of blue topaz and silver earrings"
msgid_plural "pairs of blue topaz and silver earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de topacio azul y plata"
+msgstr[1] "pares de aros de topacio azul y plata"
+msgstr[2] "pares de aros de topacio azul y plata"
#. ~ Description for {'str': 'pair of blue topaz and silver earrings',
#. 'str_pl': 'pairs of blue topaz and silver earrings'}
@@ -63079,9 +63320,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of opal and silver earrings"
msgid_plural "pairs of opal and silver earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de ópalo y plata"
+msgstr[1] "pares de aros de ópalo y plata"
+msgstr[2] "pares de aros de ópalo y plata"
#. ~ Description for {'str': 'pair of opal and silver earrings', 'str_pl':
#. 'pairs of opal and silver earrings'}
@@ -63096,9 +63337,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of pearl and silver earrings"
msgid_plural "pairs of pearl and silver earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de perla y plata"
+msgstr[1] "pares de aros de perla y plata"
+msgstr[2] "pares de aros de perla y plata"
#. ~ Description for {'str': 'pair of pearl and silver earrings', 'str_pl':
#. 'pairs of pearl and silver earrings'}
@@ -63113,9 +63354,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of diamond and platinum earrings"
msgid_plural "pairs of diamond and platinum earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de diamante y platino"
+msgstr[1] "pares de aros de diamante y platino"
+msgstr[2] "pares de aros de diamante y platino"
#. ~ Description for {'str': 'pair of diamond and platinum earrings',
#. 'str_pl': 'pairs of diamond and platinum earrings'}
@@ -63130,9 +63371,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of garnet and platinum earrings"
msgid_plural "pairs of garnet and platinum earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de granate y platino"
+msgstr[1] "pares de aros de granate y platino"
+msgstr[2] "pares de aros de granate y platino"
#. ~ Description for {'str': 'pair of garnet and platinum earrings', 'str_pl':
#. 'pairs of garnet and platinum earrings'}
@@ -63147,9 +63388,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of amethyst and platinum earrings"
msgid_plural "pairs of amethyst and platinum earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de amatista y platino"
+msgstr[1] "pares de aros de amatista y platino"
+msgstr[2] "pares de aros de amatista y platino"
#. ~ Description for {'str': 'pair of amethyst and platinum earrings',
#. 'str_pl': 'pairs of amethyst and platinum earrings'}
@@ -63164,9 +63405,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of aquamarine and platinum earrings"
msgid_plural "pairs of aquamarine and platinum earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de aguamarina y platino"
+msgstr[1] "pares de aros de aguamarina y platino"
+msgstr[2] "pares de aros de aguamarina y platino"
#. ~ Description for {'str': 'pair of aquamarine and platinum earrings',
#. 'str_pl': 'pairs of aquamarine and platinum earrings'}
@@ -63181,9 +63422,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of emerald and platinum earrings"
msgid_plural "pairs of emerald and platinum earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de esmeralda y platino"
+msgstr[1] "pares de aros de esmeralda y platino"
+msgstr[2] "pares de aros de esmeralda y platino"
#. ~ Description for {'str': 'pair of emerald and platinum earrings',
#. 'str_pl': 'pairs of emerald and platinum earrings'}
@@ -63198,9 +63439,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of alexandrite and platinum earrings"
msgid_plural "pairs of alexandrite and platinum earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de alejandrita y platino"
+msgstr[1] "pares de aros de alejandrita y platino"
+msgstr[2] "pares de aros de alejandrita y platino"
#. ~ Description for {'str': 'pair of alexandrite and platinum earrings',
#. 'str_pl': 'pairs of alexandrite and platinum earrings'}
@@ -63215,9 +63456,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of ruby and platinum earrings"
msgid_plural "pairs of ruby and platinum earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de rubí y platino"
+msgstr[1] "pares de aros de rubí y platino"
+msgstr[2] "pares de aros de rubí y platino"
#. ~ Description for {'str': 'pair of ruby and platinum earrings', 'str_pl':
#. 'pairs of ruby and platinum earrings'}
@@ -63232,9 +63473,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of peridot and platinum earrings"
msgid_plural "pairs of peridot and platinum earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de peridoto y platino"
+msgstr[1] "pares de aros de peridoto y platino"
+msgstr[2] "pares de aros de peridoto y platino"
#. ~ Description for {'str': 'pair of peridot and platinum earrings',
#. 'str_pl': 'pairs of peridot and platinum earrings'}
@@ -63249,9 +63490,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of sapphire and platinum earrings"
msgid_plural "pairs of sapphire and platinum earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de zafiro y platino"
+msgstr[1] "pares de aros de zafiro y platino"
+msgstr[2] "pares de aros de zafiro y platino"
#. ~ Description for {'str': 'pair of sapphire and platinum earrings',
#. 'str_pl': 'pairs of sapphire and platinum earrings'}
@@ -63266,9 +63507,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of tourmaline and platinum earrings"
msgid_plural "pairs of tourmaline and platinum earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de turmalina y platino"
+msgstr[1] "pares de aros de turmalina y platino"
+msgstr[2] "pares de aros de turmalina y platino"
#. ~ Description for {'str': 'pair of tourmaline and platinum earrings',
#. 'str_pl': 'pairs of tourmaline and platinum earrings'}
@@ -63283,9 +63524,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of citrine and platinum earrings"
msgid_plural "pairs of citrine and platinum earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de citrino y platino"
+msgstr[1] "pares de aros de citrino y platino"
+msgstr[2] "pares de aros de citrino y platino"
#. ~ Description for {'str': 'pair of citrine and platinum earrings',
#. 'str_pl': 'pairs of citrine and platinum earrings'}
@@ -63300,9 +63541,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of blue topaz and platinum earrings"
msgid_plural "pairs of blue topaz and platinum earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de topacio azul y platino"
+msgstr[1] "pares de aros de topacio azul y platino"
+msgstr[2] "pares de aros de topacio azul y platino"
#. ~ Description for {'str': 'pair of blue topaz and platinum earrings',
#. 'str_pl': 'pairs of blue topaz and platinum earrings'}
@@ -63317,9 +63558,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of opal and platinum earrings"
msgid_plural "pairs of opal and platinum earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de ópalo y platino"
+msgstr[1] "pares de aros de ópalo y platino"
+msgstr[2] "pares de aros de ópalo y platino"
#. ~ Description for {'str': 'pair of opal and platinum earrings', 'str_pl':
#. 'pairs of opal and platinum earrings'}
@@ -63334,9 +63575,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pair of pearl and platinum earrings"
msgid_plural "pairs of pearl and platinum earrings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de aros de perla y platino"
+msgstr[1] "pares de aros de perla y platino"
+msgstr[2] "pares de aros de perla y platino"
#. ~ Description for {'str': 'pair of pearl and platinum earrings', 'str_pl':
#. 'pairs of pearl and platinum earrings'}
@@ -63351,9 +63592,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "garnet and gold ring"
msgid_plural "garnet and gold rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de granate y oro"
+msgstr[1] "anillos de granate y oro"
+msgstr[2] "anillos de granate y oro"
#. ~ Description for {'str': 'garnet and gold ring'}
#: data/json/items/armor/jewelry.json
@@ -63367,9 +63608,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "amethyst and gold ring"
msgid_plural "amethyst and gold rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de amatista y oro"
+msgstr[1] "anillos de amatista y oro"
+msgstr[2] "anillos de amatista y oro"
#. ~ Description for {'str': 'amethyst and gold ring'}
#: data/json/items/armor/jewelry.json
@@ -63383,9 +63624,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "aquamarine and gold ring"
msgid_plural "aquamarine and gold rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de aguamarina y oro"
+msgstr[1] "anillos de aguamarina y oro"
+msgstr[2] "anillos de aguamarina y oro"
#. ~ Description for {'str': 'aquamarine and gold ring'}
#: data/json/items/armor/jewelry.json
@@ -63399,9 +63640,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "emerald and gold ring"
msgid_plural "emerald and gold rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de esmeralda y oro"
+msgstr[1] "anillos de esmeralda y oro"
+msgstr[2] "anillos de esmeralda y oro"
#. ~ Description for {'str': 'emerald and gold ring'}
#: data/json/items/armor/jewelry.json
@@ -63431,9 +63672,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "ruby and gold ring"
msgid_plural "ruby and gold rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de rubí y oro"
+msgstr[1] "anillos de rubí y oro"
+msgstr[2] "anillos de rubí y oro"
#. ~ Description for {'str': 'ruby and gold ring'}
#: data/json/items/armor/jewelry.json
@@ -63447,9 +63688,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "peridot and gold ring"
msgid_plural "peridot and gold rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de peridoto y oro"
+msgstr[1] "anillos de peridoto y oro"
+msgstr[2] "anillos de peridoto y oro"
#. ~ Description for {'str': 'peridot and gold ring'}
#: data/json/items/armor/jewelry.json
@@ -63463,9 +63704,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "sapphire and gold ring"
msgid_plural "sapphire and gold rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de zafiro y oro"
+msgstr[1] "anillos de zafiro y oro"
+msgstr[2] "anillos de zafiro y oro"
#. ~ Description for {'str': 'sapphire and gold ring'}
#: data/json/items/armor/jewelry.json
@@ -63479,9 +63720,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "tourmaline and gold ring"
msgid_plural "tourmaline and gold rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de turmalina y oro"
+msgstr[1] "anillos de turmalina y oro"
+msgstr[2] "anillos de turmalina y oro"
#. ~ Description for {'str': 'tourmaline and gold ring'}
#: data/json/items/armor/jewelry.json
@@ -63495,9 +63736,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "citrine and gold ring"
msgid_plural "citrine and gold rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de citrino y oro"
+msgstr[1] "anillos de citrino y oro"
+msgstr[2] "anillos de citrino y oro"
#. ~ Description for {'str': 'citrine and gold ring'}
#: data/json/items/armor/jewelry.json
@@ -63511,9 +63752,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "blue topaz and gold ring"
msgid_plural "blue topaz and gold rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de topacio azul y oro"
+msgstr[1] "anillos de topacio azul y oro"
+msgstr[2] "anillos de topacio azul y oro"
#. ~ Description for {'str': 'blue topaz and gold ring'}
#: data/json/items/armor/jewelry.json
@@ -63527,9 +63768,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "opal and gold ring"
msgid_plural "opal and gold rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de ópalo y oro"
+msgstr[1] "anillos de ópalo y oro"
+msgstr[2] "anillos de ópalo y oro"
#. ~ Description for {'str': 'opal and gold ring'}
#: data/json/items/armor/jewelry.json
@@ -63543,9 +63784,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pearl and gold ring"
msgid_plural "pearl and gold rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de perla y oro"
+msgstr[1] "anillos de perla y oro"
+msgstr[2] "anillos de perla y oro"
#. ~ Description for {'str': 'pearl and gold ring'}
#: data/json/items/armor/jewelry.json
@@ -63559,9 +63800,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "diamond and silver ring"
msgid_plural "diamond and silver rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de diamante y plata"
+msgstr[1] "anillos de diamante y plata"
+msgstr[2] "anillos de diamante y plata"
#. ~ Description for {'str': 'diamond and silver ring'}
#: data/json/items/armor/jewelry.json
@@ -63575,9 +63816,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "garnet and silver ring"
msgid_plural "garnet and silver rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de granate y plata"
+msgstr[1] "anillos de granate y plata"
+msgstr[2] "anillos de granate y plata"
#. ~ Description for {'str': 'garnet and silver ring'}
#: data/json/items/armor/jewelry.json
@@ -63591,9 +63832,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "amethyst and silver ring"
msgid_plural "amethyst and silver rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de amatista y plata"
+msgstr[1] "anillos de amatista y plata"
+msgstr[2] "anillos de amatista y plata"
#. ~ Description for {'str': 'amethyst and silver ring'}
#: data/json/items/armor/jewelry.json
@@ -63623,9 +63864,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "emerald and silver ring"
msgid_plural "emerald and silver rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de esmeralda y plata"
+msgstr[1] "anillos de esmeralda y plata"
+msgstr[2] "anillos de esmeralda y plata"
#. ~ Description for {'str': 'emerald and silver ring'}
#: data/json/items/armor/jewelry.json
@@ -63639,9 +63880,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "alexandrite and silver ring"
msgid_plural "alexandrite and silver rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de alejandrita y plata"
+msgstr[1] "anillos de alejandrita y plata"
+msgstr[2] "anillos de alejandrita y plata"
#. ~ Description for {'str': 'alexandrite and silver ring'}
#: data/json/items/armor/jewelry.json
@@ -63671,9 +63912,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "peridot and silver ring"
msgid_plural "peridot and silver rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de peridoto y plata"
+msgstr[1] "anillos de peridoto y plata"
+msgstr[2] "anillos de peridoto y plata"
#. ~ Description for {'str': 'peridot and silver ring'}
#: data/json/items/armor/jewelry.json
@@ -63687,9 +63928,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "sapphire and silver ring"
msgid_plural "sapphire and silver rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de zafiro y plata"
+msgstr[1] "anillos de zafiro y plata"
+msgstr[2] "anillos de zafiro y plata"
#. ~ Description for {'str': 'sapphire and silver ring'}
#: data/json/items/armor/jewelry.json
@@ -63703,9 +63944,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "tourmaline and silver ring"
msgid_plural "tourmaline and silver rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de turmalina y plata"
+msgstr[1] "anillos de turmalina y plata"
+msgstr[2] "anillos de turmalina y plata"
#. ~ Description for {'str': 'tourmaline and silver ring'}
#: data/json/items/armor/jewelry.json
@@ -63719,9 +63960,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "citrine and silver ring"
msgid_plural "citrine and silver rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de citrino y plata"
+msgstr[1] "anillos de citrino y plata"
+msgstr[2] "anillos de citrino y plata"
#. ~ Description for {'str': 'citrine and silver ring'}
#: data/json/items/armor/jewelry.json
@@ -63735,9 +63976,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "blue topaz and silver ring"
msgid_plural "blue topaz and silver rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de topacio azul y plata"
+msgstr[1] "anillos de topacio azul y plata"
+msgstr[2] "anillos de topacio azul y plata"
#. ~ Description for {'str': 'blue topaz and silver ring'}
#: data/json/items/armor/jewelry.json
@@ -63751,9 +63992,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "opal and silver ring"
msgid_plural "opal and silver rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de ópalo y plata"
+msgstr[1] "anillos de ópalo y plata"
+msgstr[2] "anillos de ópalo y plata"
#. ~ Description for {'str': 'opal and silver ring'}
#: data/json/items/armor/jewelry.json
@@ -63767,9 +64008,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pearl and silver ring"
msgid_plural "pearl and silver rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de perla y plata"
+msgstr[1] "anillos de perla y plata"
+msgstr[2] "anillos de perla y plata"
#. ~ Description for {'str': 'pearl and silver ring'}
#: data/json/items/armor/jewelry.json
@@ -63783,9 +64024,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "diamond and platinum ring"
msgid_plural "diamond and platinum rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de diamante y platino"
+msgstr[1] "anillos de diamante y platino"
+msgstr[2] "anillos de diamante y platino"
#. ~ Description for {'str': 'diamond and platinum ring'}
#: data/json/items/armor/jewelry.json
@@ -63799,9 +64040,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "garnet and platinum ring"
msgid_plural "garnet and platinum rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de granate y platino"
+msgstr[1] "anillos de granate y platino"
+msgstr[2] "anillos de granate y platino"
#. ~ Description for {'str': 'garnet and platinum ring'}
#: data/json/items/armor/jewelry.json
@@ -63815,9 +64056,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "amethyst and platinum ring"
msgid_plural "amethyst and platinum rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de amatista y platino"
+msgstr[1] "anillos de amatista y platino"
+msgstr[2] "anillos de amatista y platino"
#. ~ Description for {'str': 'amethyst and platinum ring'}
#: data/json/items/armor/jewelry.json
@@ -63831,9 +64072,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "aquamarine and platinum ring"
msgid_plural "aquamarine and platinum rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de aguamarina y platino"
+msgstr[1] "anillos de aguamarina y platino"
+msgstr[2] "anillos de aguamarina y platino"
#. ~ Description for {'str': 'aquamarine and platinum ring'}
#: data/json/items/armor/jewelry.json
@@ -63847,9 +64088,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "emerald and platinum ring"
msgid_plural "emerald and platinum rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de esmeralda y platino"
+msgstr[1] "anillos de esmeralda y platino"
+msgstr[2] "anillos de esmeralda y platino"
#. ~ Description for {'str': 'emerald and platinum ring'}
#: data/json/items/armor/jewelry.json
@@ -63863,9 +64104,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "alexandrite and platinum ring"
msgid_plural "alexandrite and platinum rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de alejandrita y platino"
+msgstr[1] "anillos de alejandrita y platino"
+msgstr[2] "anillos de alejandrita y platino"
#. ~ Description for {'str': 'alexandrite and platinum ring'}
#: data/json/items/armor/jewelry.json
@@ -63879,9 +64120,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "ruby and platinum ring"
msgid_plural "ruby and platinum rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de rubí y platino"
+msgstr[1] "anillos de rubí y platino"
+msgstr[2] "anillos de rubí y platino"
#. ~ Description for {'str': 'ruby and platinum ring'}
#: data/json/items/armor/jewelry.json
@@ -63895,9 +64136,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "peridot and platinum ring"
msgid_plural "peridot and platinum rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de peridoto y platino"
+msgstr[1] "anillos de peridoto y platino"
+msgstr[2] "anillos de peridoto y platino"
#. ~ Description for {'str': 'peridot and platinum ring'}
#: data/json/items/armor/jewelry.json
@@ -63911,9 +64152,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "sapphire and platinum ring"
msgid_plural "sapphire and platinum rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de zafiro y platino"
+msgstr[1] "anillos de zafiro y platino"
+msgstr[2] "anillos de zafiro y platino"
#. ~ Description for {'str': 'sapphire and platinum ring'}
#: data/json/items/armor/jewelry.json
@@ -63927,9 +64168,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "tourmaline and platinum ring"
msgid_plural "tourmaline and platinum rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de turmalina y platino"
+msgstr[1] "anillos de turmalina y platino"
+msgstr[2] "anillos de turmalina y platino"
#. ~ Description for {'str': 'tourmaline and platinum ring'}
#: data/json/items/armor/jewelry.json
@@ -63943,9 +64184,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "citrine and platinum ring"
msgid_plural "citrine and platinum rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de citrino y platino"
+msgstr[1] "anillos de citrino y platino"
+msgstr[2] "anillos de citrino y platino"
#. ~ Description for {'str': 'citrine and platinum ring'}
#: data/json/items/armor/jewelry.json
@@ -63975,9 +64216,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "opal and platinum ring"
msgid_plural "opal and platinum rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de ópalo y platino"
+msgstr[1] "anillos de ópalo y platino"
+msgstr[2] "anillos de ópalo y platino"
#. ~ Description for {'str': 'opal and platinum ring'}
#: data/json/items/armor/jewelry.json
@@ -64007,9 +64248,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "diamond and gold bracelet"
msgid_plural "diamond and gold bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de diamante y oro"
+msgstr[1] "pulseras de diamante y oro"
+msgstr[2] "pulseras de diamante y oro"
#. ~ Description for {'str': 'diamond and gold bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64023,9 +64264,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "garnet and gold bracelet"
msgid_plural "garnet and gold bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de granate y oro"
+msgstr[1] "pulseras de granate y oro"
+msgstr[2] "pulseras de granate y oro"
#. ~ Description for {'str': 'garnet and gold bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64039,9 +64280,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "amethyst and gold bracelet"
msgid_plural "amethyst and gold bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de amatista y oro"
+msgstr[1] "pulseras de amatista y oro"
+msgstr[2] "pulseras de amatista y oro"
#. ~ Description for {'str': 'amethyst and gold bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64055,9 +64296,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "aquamarine and gold bracelet"
msgid_plural "aquamarine and gold bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de aguamarina y oro"
+msgstr[1] "pulseras de aguamarina y oro"
+msgstr[2] "pulseras de aguamarina y oro"
#. ~ Description for {'str': 'aquamarine and gold bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64071,9 +64312,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "emerald and gold bracelet"
msgid_plural "emerald and gold bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de esmeralda y oro"
+msgstr[1] "pulseras de esmeralda y oro"
+msgstr[2] "pulseras de esmeralda y oro"
#. ~ Description for {'str': 'emerald and gold bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64087,9 +64328,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "alexandrite and gold bracelet"
msgid_plural "alexandrite and gold bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de alejandrita y oro"
+msgstr[1] "pulseras de alejandrita y oro"
+msgstr[2] "pulseras de alejandrita y oro"
#. ~ Description for {'str': 'alexandrite and gold bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64103,9 +64344,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "ruby and gold bracelet"
msgid_plural "ruby and gold bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de rubí y oro"
+msgstr[1] "pulseras de rubí y oro"
+msgstr[2] "pulseras de rubí y oro"
#. ~ Description for {'str': 'ruby and gold bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64119,9 +64360,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "peridot and gold bracelet"
msgid_plural "peridot and gold bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de peridoto y oro"
+msgstr[1] "pulseras de peridoto y oro"
+msgstr[2] "pulseras de peridoto y oro"
#. ~ Description for {'str': 'peridot and gold bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64135,9 +64376,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "sapphire and gold bracelet"
msgid_plural "sapphire and gold bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de zafiro y oro"
+msgstr[1] "pulseras de zafiro y oro"
+msgstr[2] "pulseras de zafiro y oro"
#. ~ Description for {'str': 'sapphire and gold bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64151,9 +64392,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "tourmaline and gold bracelet"
msgid_plural "tourmaline and gold bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de turmalina y oro"
+msgstr[1] "pulseras de turmalina y oro"
+msgstr[2] "pulseras de turmalina y oro"
#. ~ Description for {'str': 'tourmaline and gold bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64167,9 +64408,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "citrine and gold bracelet"
msgid_plural "citrine and gold bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de citrino y oro"
+msgstr[1] "pulseras de citrino y oro"
+msgstr[2] "pulseras de citrino y oro"
#. ~ Description for {'str': 'citrine and gold bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64183,9 +64424,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "blue topaz and gold bracelet"
msgid_plural "blue topaz and gold bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de topacio azul y oro"
+msgstr[1] "pulseras de topacio azul y oro"
+msgstr[2] "pulseras de topacio azul y oro"
#. ~ Description for {'str': 'blue topaz and gold bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64199,9 +64440,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "opal and gold bracelet"
msgid_plural "opal and gold bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de ópalo y oro"
+msgstr[1] "pulseras de ópalo y oro"
+msgstr[2] "pulseras de ópalo y oro"
#. ~ Description for {'str': 'opal and gold bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64215,9 +64456,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pearl and gold bracelet"
msgid_plural "pearl and gold bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de perla y oro"
+msgstr[1] "pulseras de perla y oro"
+msgstr[2] "pulseras de perla y oro"
#. ~ Description for {'str': 'pearl and gold bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64231,9 +64472,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "diamond and silver bracelet"
msgid_plural "diamond and silver bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de diamante y plata"
+msgstr[1] "pulseras de diamante y plata"
+msgstr[2] "pulseras de diamante y plata"
#. ~ Description for {'str': 'diamond and silver bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64263,9 +64504,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "amethyst and silver bracelet"
msgid_plural "amethyst and silver bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de amatista y plata"
+msgstr[1] "pulseras de amatista y plata"
+msgstr[2] "pulseras de amatista y plata"
#. ~ Description for {'str': 'amethyst and silver bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64279,9 +64520,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "aquamarine and silver bracelet"
msgid_plural "aquamarine and silver bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de aguamarina y plata"
+msgstr[1] "pulseras de aguamarina y plata"
+msgstr[2] "pulseras de aguamarina y plata"
#. ~ Description for {'str': 'aquamarine and silver bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64295,9 +64536,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "emerald and silver bracelet"
msgid_plural "emerald and silver bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de esmeralda y plata"
+msgstr[1] "pulseras de esmeralda y plata"
+msgstr[2] "pulseras de esmeralda y plata"
#. ~ Description for {'str': 'emerald and silver bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64311,9 +64552,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "alexandrite and silver bracelet"
msgid_plural "alexandrite and silver bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de alejandrita y plata"
+msgstr[1] "pulseras de alejandrita y plata"
+msgstr[2] "pulseras de alejandrita y plata"
#. ~ Description for {'str': 'alexandrite and silver bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64327,9 +64568,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "ruby and silver bracelet"
msgid_plural "ruby and silver bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de rubí y plata"
+msgstr[1] "pulseras de rubí y plata"
+msgstr[2] "pulseras de rubí y plata"
#. ~ Description for {'str': 'ruby and silver bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64343,9 +64584,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "peridot and silver bracelet"
msgid_plural "peridot and silver bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de peridoto y plata"
+msgstr[1] "pulseras de peridoto y plata"
+msgstr[2] "pulseras de peridoto y plata"
#. ~ Description for {'str': 'peridot and silver bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64359,9 +64600,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "sapphire and silver bracelet"
msgid_plural "sapphire and silver bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de zafiro y plata"
+msgstr[1] "pulseras de zafiro y plata"
+msgstr[2] "pulseras de zafiro y plata"
#. ~ Description for {'str': 'sapphire and silver bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64375,9 +64616,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "tourmaline and silver bracelet"
msgid_plural "tourmaline and silver bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de turmalina y plata"
+msgstr[1] "pulseras de turmalina y plata"
+msgstr[2] "pulseras de turmalina y plata"
#. ~ Description for {'str': 'tourmaline and silver bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64391,9 +64632,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "citrine and silver bracelet"
msgid_plural "citrine and silver bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de citrino y plata"
+msgstr[1] "pulseras de citrino y plata"
+msgstr[2] "pulseras de citrino y plata"
#. ~ Description for {'str': 'citrine and silver bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64407,9 +64648,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "blue topaz and silver bracelet"
msgid_plural "blue topaz and silver bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de topacio azul y plata"
+msgstr[1] "pulseras de topacio azul y plata"
+msgstr[2] "pulseras de topacio azul y plata"
#. ~ Description for {'str': 'blue topaz and silver bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64423,9 +64664,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "opal and silver bracelet"
msgid_plural "opal and silver bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de ópalo y plata"
+msgstr[1] "pulseras de ópalo y plata"
+msgstr[2] "pulseras de ópalo y plata"
#. ~ Description for {'str': 'opal and silver bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64439,9 +64680,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pearl and silver bracelet"
msgid_plural "pearl and silver bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de perla y plata"
+msgstr[1] "pulseras de perla y plata"
+msgstr[2] "pulseras de perla y plata"
#. ~ Description for {'str': 'pearl and silver bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64471,9 +64712,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "garnet and platinum bracelet"
msgid_plural "garnet and platinum bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de granate y platino"
+msgstr[1] "pulseras de granate y platino"
+msgstr[2] "pulseras de granate y platino"
#. ~ Description for {'str': 'garnet and platinum bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64487,9 +64728,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "amethyst and platinum bracelet"
msgid_plural "amethyst and platinum bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de amatista y platino"
+msgstr[1] "pulseras de amatista y platino"
+msgstr[2] "pulseras de amatista y platino"
#. ~ Description for {'str': 'amethyst and platinum bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64503,9 +64744,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "aquamarine and platinum bracelet"
msgid_plural "aquamarine and platinum bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de aguamarina y platino"
+msgstr[1] "pulseras de aguamarina y platino"
+msgstr[2] "pulseras de aguamarina y platino"
#. ~ Description for {'str': 'aquamarine and platinum bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64519,9 +64760,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "emerald and platinum bracelet"
msgid_plural "emerald and platinum bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de esmeralda y platino"
+msgstr[1] "pulseras de esmeralda y platino"
+msgstr[2] "pulseras de esmeralda y platino"
#. ~ Description for {'str': 'emerald and platinum bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64535,9 +64776,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "alexandrite and platinum bracelet"
msgid_plural "alexandrite and platinum bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de alejandrita y platino"
+msgstr[1] "pulseras de alejandrita y platino"
+msgstr[2] "pulseras de alejandrita y platino"
#. ~ Description for {'str': 'alexandrite and platinum bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64551,9 +64792,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "ruby and platinum bracelet"
msgid_plural "ruby and platinum bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de rubí y platino"
+msgstr[1] "pulseras de rubí y platino"
+msgstr[2] "pulseras de rubí y platino"
#. ~ Description for {'str': 'ruby and platinum bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64567,9 +64808,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "peridot and platinum bracelet"
msgid_plural "peridot and platinum bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de peridoto y platino"
+msgstr[1] "pulseras de peridoto y platino"
+msgstr[2] "pulseras de peridoto y platino"
#. ~ Description for {'str': 'peridot and platinum bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64583,9 +64824,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "sapphire and platinum bracelet"
msgid_plural "sapphire and platinum bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de zafiro y platino"
+msgstr[1] "pulseras de zafiro y platino"
+msgstr[2] "pulseras de zafiro y platino"
#. ~ Description for {'str': 'sapphire and platinum bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64599,9 +64840,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "tourmaline and platinum bracelet"
msgid_plural "tourmaline and platinum bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de turmalina y platino"
+msgstr[1] "pulseras de turmalina y platino"
+msgstr[2] "pulseras de turmalina y platino"
#. ~ Description for {'str': 'tourmaline and platinum bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64615,9 +64856,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "citrine and platinum bracelet"
msgid_plural "citrine and platinum bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de citrino y platino"
+msgstr[1] "pulseras de citrino y platino"
+msgstr[2] "pulseras de citrino y platino"
#. ~ Description for {'str': 'citrine and platinum bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64631,9 +64872,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "blue topaz and platinum bracelet"
msgid_plural "blue topaz and platinum bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de topacio azul y platino"
+msgstr[1] "pulseras de topacio azul y platino"
+msgstr[2] "pulseras de topacio azul y platino"
#. ~ Description for {'str': 'blue topaz and platinum bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64647,9 +64888,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "opal and platinum bracelet"
msgid_plural "opal and platinum bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de ópalo y platino"
+msgstr[1] "pulseras de ópalo y platino"
+msgstr[2] "pulseras de ópalo y platino"
#. ~ Description for {'str': 'opal and platinum bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64663,9 +64904,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pearl and platinum bracelet"
msgid_plural "pearl and platinum bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de perla y platino"
+msgstr[1] "pulseras de perla y platino"
+msgstr[2] "pulseras de perla y platino"
#. ~ Description for {'str': 'pearl and platinum bracelet'}
#: data/json/items/armor/jewelry.json
@@ -64679,9 +64920,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "garnet and gold necklace"
msgid_plural "garnet and gold necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "collar de granate y oro"
+msgstr[1] "collares de granate y oro"
+msgstr[2] "collares de granate y oro"
#. ~ Description for {'str': 'garnet and gold necklace'}
#: data/json/items/armor/jewelry.json
@@ -64695,9 +64936,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "diamond and gold pendant necklace"
msgid_plural "diamond and gold pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de diamante y oro"
+msgstr[1] "colgantes de diamante y oro"
+msgstr[2] "colgantes de diamante y oro"
#. ~ Description for {'str': 'diamond and gold pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -64711,9 +64952,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "amethyst and gold pendant necklace"
msgid_plural "amethyst and gold pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de amatista y oro"
+msgstr[1] "colgantes de amatista y oro"
+msgstr[2] "colgantes de amatista y oro"
#. ~ Description for {'str': 'amethyst and gold pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -64727,9 +64968,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "aquamarine and gold pendant necklace"
msgid_plural "aquamarine and gold pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de aguamarina y oro"
+msgstr[1] "colgantes de aguamarina y oro"
+msgstr[2] "colgantes de aguamarina y oro"
#. ~ Description for {'str': 'aquamarine and gold pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -64743,9 +64984,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "emerald and gold pendant necklace"
msgid_plural "emerald and gold pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de esmeralda y oro"
+msgstr[1] "colgantes de esmeralda y oro"
+msgstr[2] "colgantes de esmeralda y oro"
#. ~ Description for {'str': 'emerald and gold pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -64759,9 +65000,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "alexandrite and gold pendant necklace"
msgid_plural "alexandrite and gold pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de alejandrita y oro"
+msgstr[1] "colgantes de alejandrita y oro"
+msgstr[2] "colgantes de alejandrita y oro"
#. ~ Description for {'str': 'alexandrite and gold pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -64775,9 +65016,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "ruby and gold pendant necklace"
msgid_plural "ruby and gold pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de rubí y oro"
+msgstr[1] "colgantes de rubí y oro"
+msgstr[2] "colgantes de rubí y oro"
#. ~ Description for {'str': 'ruby and gold pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -64791,9 +65032,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "peridot and gold pendant necklace"
msgid_plural "peridot and gold pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de peridoto y oro"
+msgstr[1] "colgantes de peridoto y oro"
+msgstr[2] "colgantes de peridoto y oro"
#. ~ Description for {'str': 'peridot and gold pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -64807,9 +65048,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "sapphire and gold pendant necklace"
msgid_plural "sapphire and gold pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de zafiro y oro"
+msgstr[1] "colgantes de zafiro y oro"
+msgstr[2] "colgantes de zafiro y oro"
#. ~ Description for {'str': 'sapphire and gold pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -64823,9 +65064,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "tourmaline and gold pendant necklace"
msgid_plural "tourmaline and gold pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de turmalina y oro"
+msgstr[1] "colgantes de turmalina y oro"
+msgstr[2] "colgantes de turmalina y oro"
#. ~ Description for {'str': 'tourmaline and gold pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -64839,9 +65080,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "citrine and gold pendant necklace"
msgid_plural "citrine and gold pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de citrino y oro"
+msgstr[1] "colgantes de citrino y oro"
+msgstr[2] "colgantes de citrino y oro"
#. ~ Description for {'str': 'citrine and gold pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -64855,9 +65096,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "blue topaz and gold pendant necklace"
msgid_plural "blue topaz and gold pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de topacio azul y oro"
+msgstr[1] "colgantes de topacio azul y oro"
+msgstr[2] "colgantes de topacio azul y oro"
#. ~ Description for {'str': 'blue topaz and gold pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -64871,9 +65112,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "opal and gold pendant necklace"
msgid_plural "opal and gold pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de ópalo y oro"
+msgstr[1] "colgantes de ópalo y oro"
+msgstr[2] "colgantes de ópalo y oro"
#. ~ Description for {'str': 'opal and gold pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -64887,9 +65128,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pearl and gold pendant necklace"
msgid_plural "pearl and gold pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de perla y oro"
+msgstr[1] "colgantes de perla y oro"
+msgstr[2] "colgantes de perla y oro"
#. ~ Description for {'str': 'pearl and gold pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -64903,9 +65144,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "garnet and silver necklace"
msgid_plural "garnet and silver necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de granate y plata"
+msgstr[1] "colgantes de granate y plata"
+msgstr[2] "colgantes de granate y plata"
#. ~ Description for {'str': 'garnet and silver necklace'}
#: data/json/items/armor/jewelry.json
@@ -64919,9 +65160,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "diamond and silver pendant necklace"
msgid_plural "diamond and silver pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de granate y plata"
+msgstr[1] "colgantes de granate y plata"
+msgstr[2] "colgantes de granate y plata"
#. ~ Description for {'str': 'diamond and silver pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -64935,9 +65176,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "amethyst and silver pendant necklace"
msgid_plural "amethyst and silver pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de amatista y plata"
+msgstr[1] "colgantes de amatista y plata"
+msgstr[2] "colgantes de amatista y plata"
#. ~ Description for {'str': 'amethyst and silver pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -64951,9 +65192,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "aquamarine and silver pendant necklace"
msgid_plural "aquamarine and silver pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de aguamarina y plata"
+msgstr[1] "colgantes de aguamarina y plata"
+msgstr[2] "colgantes de aguamarina y plata"
#. ~ Description for {'str': 'aquamarine and silver pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -64967,9 +65208,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "emerald and silver pendant necklace"
msgid_plural "emerald and silver pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de esmeralda y plata"
+msgstr[1] "colgantes de esmeralda y plata"
+msgstr[2] "colgantes de esmeralda y plata"
#. ~ Description for {'str': 'emerald and silver pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -64983,9 +65224,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "alexandrite and silver pendant necklace"
msgid_plural "alexandrite and silver pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de alejandrita y plata"
+msgstr[1] "colgantes de alejandrita y plata"
+msgstr[2] "colgantes de alejandrita y plata"
#. ~ Description for {'str': 'alexandrite and silver pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -64999,9 +65240,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "ruby and silver pendant necklace"
msgid_plural "ruby and silver pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de rubí y plata"
+msgstr[1] "colgantes de rubí y plata"
+msgstr[2] "colgantes de rubí y plata"
#. ~ Description for {'str': 'ruby and silver pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -65015,9 +65256,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "peridot and silver pendant necklace"
msgid_plural "peridot and silver pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de peridoto y plata"
+msgstr[1] "colgantes de peridoto y plata"
+msgstr[2] "colgantes de peridoto y plata"
#. ~ Description for {'str': 'peridot and silver pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -65031,9 +65272,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "sapphire and silver pendant necklace"
msgid_plural "sapphire and silver pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de zafiro y plata"
+msgstr[1] "colgantes de zafiro y plata"
+msgstr[2] "colgantes de zafiro y plata"
#. ~ Description for {'str': 'sapphire and silver pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -65047,9 +65288,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "tourmaline and silver pendant necklace"
msgid_plural "tourmaline and silver pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de turmalina y plata"
+msgstr[1] "colgantes de turmalina y plata"
+msgstr[2] "colgantes de turmalina y plata"
#. ~ Description for {'str': 'tourmaline and silver pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -65063,9 +65304,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "citrine and silver pendant necklace"
msgid_plural "citrine and silver pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de citrino y plata"
+msgstr[1] "colgantes de citrino y plata"
+msgstr[2] "colgantes de citrino y plata"
#. ~ Description for {'str': 'citrine and silver pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -65079,9 +65320,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "blue topaz and silver pendant necklace"
msgid_plural "blue topaz and silver pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de topacio azul y plata"
+msgstr[1] "colgantes de topacio azul y plata"
+msgstr[2] "colgantes de topacio azul y plata"
#. ~ Description for {'str': 'blue topaz and silver pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -65095,9 +65336,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "opal and silver pendant necklace"
msgid_plural "opal and silver pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de ópalo y plata"
+msgstr[1] "colgantes de ópalo y plata"
+msgstr[2] "colgantes de ópalo y plata"
#. ~ Description for {'str': 'opal and silver pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -65111,9 +65352,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pearl and silver pendant necklace"
msgid_plural "pearl and silver pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de perla y plata"
+msgstr[1] "colgantes de perla y plata"
+msgstr[2] "colgantes de perla y plata"
#. ~ Description for {'str': 'pearl and silver pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -65127,9 +65368,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "garnet and platinum necklace"
msgid_plural "garnet and platinum necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de granate y platino"
+msgstr[1] "colgantes de granate y platino"
+msgstr[2] "colgantes de granate y platino"
#. ~ Description for {'str': 'garnet and platinum necklace'}
#: data/json/items/armor/jewelry.json
@@ -65143,9 +65384,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "diamond and platinum pendant necklace"
msgid_plural "diamond and platinum pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de diamante y platino"
+msgstr[1] "colgantes de diamante y platino"
+msgstr[2] "colgantes de diamante y platino"
#. ~ Description for {'str': 'diamond and platinum pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -65159,9 +65400,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "amethyst and platinum pendant necklace"
msgid_plural "amethyst and platinum pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de amatista y platino"
+msgstr[1] "colgantes de amatista y platino"
+msgstr[2] "colgantes de amatista y platino"
#. ~ Description for {'str': 'amethyst and platinum pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -65175,9 +65416,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "aquamarine and platinum pendant necklace"
msgid_plural "aquamarine and platinum pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de aguamarina y platino"
+msgstr[1] "colgantes de aguamarina y platino"
+msgstr[2] "colgantes de aguamarina y platino"
#. ~ Description for {'str': 'aquamarine and platinum pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -65191,9 +65432,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "emerald and platinum pendant necklace"
msgid_plural "emerald and platinum pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de esmeralda y platino"
+msgstr[1] "colgantes de esmeralda y platino"
+msgstr[2] "colgantes de esmeralda y platino"
#. ~ Description for {'str': 'emerald and platinum pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -65207,9 +65448,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "alexandrite and platinum pendant necklace"
msgid_plural "alexandrite and platinum pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de alejandrita y platino"
+msgstr[1] "colgantes de alejandrita y platino"
+msgstr[2] "colgantes de alejandrita y platino"
#. ~ Description for {'str': 'alexandrite and platinum pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -65223,9 +65464,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "ruby and platinum pendant necklace"
msgid_plural "ruby and platinum pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de rubí y platino"
+msgstr[1] "colgantes de rubí y platino"
+msgstr[2] "colgantes de rubí y platino"
#. ~ Description for {'str': 'ruby and platinum pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -65239,9 +65480,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "peridot and platinum pendant necklace"
msgid_plural "peridot and platinum pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de peridoto y platino"
+msgstr[1] "colgantes de peridoto y platino"
+msgstr[2] "colgantes de peridoto y platino"
#. ~ Description for {'str': 'peridot and platinum pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -65255,9 +65496,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "sapphire and platinum pendant necklace"
msgid_plural "sapphire and platinum pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de zafiro y platino"
+msgstr[1] "colgantes de zafiro y platino"
+msgstr[2] "colgantes de zafiro y platino"
#. ~ Description for {'str': 'sapphire and platinum pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -65271,9 +65512,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "tourmaline and platinum pendant necklace"
msgid_plural "tourmaline and platinum pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de turmalina y platino"
+msgstr[1] "colgantes de turmalina y platino"
+msgstr[2] "colgantes de turmalina y platino"
#. ~ Description for {'str': 'tourmaline and platinum pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -65287,9 +65528,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "citrine and platinum pendant necklace"
msgid_plural "citrine and platinum pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de citrino y platino"
+msgstr[1] "colgantes de citrino y platino"
+msgstr[2] "colgantes de citrino y platino"
#. ~ Description for {'str': 'citrine and platinum pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -65303,9 +65544,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "blue topaz and platinum pendant necklace"
msgid_plural "blue topaz and platinum pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de topacio azul y platino"
+msgstr[1] "colgantes de topacio azul y platino"
+msgstr[2] "colgantes de topacio azul y platino"
#. ~ Description for {'str': 'blue topaz and platinum pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -65319,9 +65560,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "opal and platinum pendant necklace"
msgid_plural "opal and platinum pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de ópalo y platino"
+msgstr[1] "colgantes de ópalo y platino"
+msgstr[2] "colgantes de ópalo y platino"
#. ~ Description for {'str': 'opal and platinum pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -65335,9 +65576,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "pearl and platinum pendant necklace"
msgid_plural "pearl and platinum pendant necklaces"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colgante de perla y platino"
+msgstr[1] "colgantes de perla y platino"
+msgstr[2] "colgantes de perla y platino"
#. ~ Description for {'str': 'pearl and platinum pendant necklace'}
#: data/json/items/armor/jewelry.json
@@ -65351,9 +65592,9 @@ msgstr ""
#: data/json/items/armor/jewelry.json
msgid "garnet and platinum tiara"
msgid_plural "garnet and platinum tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de granate y platino"
+msgstr[1] "tiaras de granate y platino"
+msgstr[2] "tiaras de granate y platino"
#. ~ Description for {'str': 'garnet and platinum tiara'}
#: data/json/items/armor/jewelry.json
@@ -65363,9 +65604,9 @@ msgstr "Es una tiara brillante de platino, adornada con granates."
#: data/json/items/armor/jewelry.json
msgid "diamond and platinum tiara"
msgid_plural "diamond and platinum tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de diamante y platino"
+msgstr[1] "tiaras de diamante y platino"
+msgstr[2] "tiaras de diamante y platino"
#. ~ Description for {'str': 'diamond and platinum tiara'}
#: data/json/items/armor/jewelry.json
@@ -65375,9 +65616,9 @@ msgstr "Es una tiara brillante de platino, adornada con diamantes."
#: data/json/items/armor/jewelry.json
msgid "amethyst and platinum tiara"
msgid_plural "amethyst and platinum tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de amatista y platino"
+msgstr[1] "tiaras de amatista y platino"
+msgstr[2] "tiaras de amatista y platino"
#. ~ Description for {'str': 'amethyst and platinum tiara'}
#: data/json/items/armor/jewelry.json
@@ -65387,9 +65628,9 @@ msgstr "Es una tiara brillante de platino, adornada con amatista."
#: data/json/items/armor/jewelry.json
msgid "aquamarine and platinum tiara"
msgid_plural "aquamarine and platinum tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de aguamarina y platino"
+msgstr[1] "tiaras de aguamarina y platino"
+msgstr[2] "tiaras de aguamarina y platino"
#. ~ Description for {'str': 'aquamarine and platinum tiara'}
#: data/json/items/armor/jewelry.json
@@ -65399,9 +65640,9 @@ msgstr "Es una tiara brillante de platino, adornada con aguamarina."
#: data/json/items/armor/jewelry.json
msgid "emerald and platinum tiara"
msgid_plural "emerald and platinum tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de esmeralda y platino"
+msgstr[1] "tiaras de esmeralda y platino"
+msgstr[2] "tiaras de esmeralda y platino"
#. ~ Description for {'str': 'emerald and platinum tiara'}
#: data/json/items/armor/jewelry.json
@@ -65411,9 +65652,9 @@ msgstr "Es una tiara brillante de platino, adornada con esmeraldas."
#: data/json/items/armor/jewelry.json
msgid "alexandrite and platinum tiara"
msgid_plural "alexandrite and platinum tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de alejandrita y platino"
+msgstr[1] "tiaras de alejandrita y platino"
+msgstr[2] "tiaras de alejandrita y platino"
#. ~ Description for {'str': 'alexandrite and platinum tiara'}
#: data/json/items/armor/jewelry.json
@@ -65423,9 +65664,9 @@ msgstr "Es una tiara brillante de platino, adornada con alejandritas."
#: data/json/items/armor/jewelry.json
msgid "ruby and platinum tiara"
msgid_plural "ruby and platinum tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de rubí y platino"
+msgstr[1] "tiaras de rubí y platino"
+msgstr[2] "tiaras de rubí y platino"
#. ~ Description for {'str': 'ruby and platinum tiara'}
#: data/json/items/armor/jewelry.json
@@ -65435,9 +65676,9 @@ msgstr "Es una tiara brillante de platino, adornada con rubíes."
#: data/json/items/armor/jewelry.json
msgid "peridot and platinum tiara"
msgid_plural "peridot and platinum tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de peridoto y platino"
+msgstr[1] "tiaras de peridoto y platino"
+msgstr[2] "tiaras de peridoto y platino"
#. ~ Description for {'str': 'peridot and platinum tiara'}
#: data/json/items/armor/jewelry.json
@@ -65447,9 +65688,9 @@ msgstr "Es una tiara brillante de platino, adornada con peridotos."
#: data/json/items/armor/jewelry.json
msgid "sapphire and platinum tiara"
msgid_plural "sapphire and platinum tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de zafiro y platino"
+msgstr[1] "tiaras de zafiro y platino"
+msgstr[2] "tiaras de zafiro y platino"
#. ~ Description for {'str': 'sapphire and platinum tiara'}
#: data/json/items/armor/jewelry.json
@@ -65459,9 +65700,9 @@ msgstr "Es una tiara brillante de platino, adornada con zafiros."
#: data/json/items/armor/jewelry.json
msgid "tourmaline and platinum tiara"
msgid_plural "tourmaline and platinum tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de turmalina y platino"
+msgstr[1] "tiaras de turmalina y platino"
+msgstr[2] "tiaras de turmalina y platino"
#. ~ Description for {'str': 'tourmaline and platinum tiara'}
#: data/json/items/armor/jewelry.json
@@ -65471,9 +65712,9 @@ msgstr "Es una tiara brillante de platino, adornada con turmalinas."
#: data/json/items/armor/jewelry.json
msgid "citrine and platinum tiara"
msgid_plural "citrine and platinum tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de citrino y platino"
+msgstr[1] "tiaras de citrino y platino"
+msgstr[2] "tiaras de citrino y platino"
#. ~ Description for {'str': 'citrine and platinum tiara'}
#: data/json/items/armor/jewelry.json
@@ -65483,9 +65724,9 @@ msgstr "Es una tiara brillante de platino, adornada con citrinos."
#: data/json/items/armor/jewelry.json
msgid "blue topaz and platinum tiara"
msgid_plural "blue topaz and platinum tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de topacio azul y platino"
+msgstr[1] "tiaras de topacio azul y platino"
+msgstr[2] "tiaras de topacio azul y platino"
#. ~ Description for {'str': 'blue topaz and platinum tiara'}
#: data/json/items/armor/jewelry.json
@@ -65495,9 +65736,9 @@ msgstr "Es una tiara brillante de platino, adornada con topacio azul."
#: data/json/items/armor/jewelry.json
msgid "opal and platinum tiara"
msgid_plural "opal and platinum tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de ópalo y platino"
+msgstr[1] "tiaras de ópalo y platino"
+msgstr[2] "tiaras de ópalo y platino"
#. ~ Description for {'str': 'opal and platinum tiara'}
#: data/json/items/armor/jewelry.json
@@ -65507,9 +65748,9 @@ msgstr "Es una tiara brillante de platino, adornada con ópalos."
#: data/json/items/armor/jewelry.json
msgid "pearl and platinum tiara"
msgid_plural "pearl and platinum tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de perla y platino"
+msgstr[1] "tiaras de perla y platino"
+msgstr[2] "tiaras de perla y platino"
#. ~ Description for {'str': 'pearl and platinum tiara'}
#: data/json/items/armor/jewelry.json
@@ -65519,9 +65760,9 @@ msgstr "Es una tiara brillante de platino, adornada con perlas."
#: data/json/items/armor/jewelry.json
msgid "garnet and gold tiara"
msgid_plural "garnet and gold tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de granate y oro"
+msgstr[1] "tiaras de granate y oro"
+msgstr[2] "tiaras de granate y oro"
#. ~ Description for {'str': 'garnet and gold tiara'}
#: data/json/items/armor/jewelry.json
@@ -65531,9 +65772,9 @@ msgstr "Es una tiara brillante de oro, adornada con granates."
#: data/json/items/armor/jewelry.json
msgid "diamond and gold tiara"
msgid_plural "diamond and gold tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de diamante y oro"
+msgstr[1] "tiaras de diamante y oro"
+msgstr[2] "tiaras de diamante y oro"
#. ~ Description for {'str': 'diamond and gold tiara'}
#: data/json/items/armor/jewelry.json
@@ -65543,9 +65784,9 @@ msgstr "Es una tiara brillante de oro, adornada con diamantes."
#: data/json/items/armor/jewelry.json
msgid "amethyst and gold tiara"
msgid_plural "amethyst and gold tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de amatista y oro"
+msgstr[1] "tiaras de amatista y oro"
+msgstr[2] "tiaras de amatista y oro"
#. ~ Description for {'str': 'amethyst and gold tiara'}
#: data/json/items/armor/jewelry.json
@@ -65555,9 +65796,9 @@ msgstr "Es una tiara brillante de oro, adornada con amatista."
#: data/json/items/armor/jewelry.json
msgid "aquamarine and gold tiara"
msgid_plural "aquamarine and gold tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de aguamarina y oro"
+msgstr[1] "tiaras de aguamarina y oro"
+msgstr[2] "tiaras de aguamarina y oro"
#. ~ Description for {'str': 'aquamarine and gold tiara'}
#: data/json/items/armor/jewelry.json
@@ -65567,9 +65808,9 @@ msgstr "Es una tiara brillante de oro, adornada con aguamarina."
#: data/json/items/armor/jewelry.json
msgid "emerald and gold tiara"
msgid_plural "emerald and gold tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de esmeralda y oro"
+msgstr[1] "tiaras de esmeralda y oro"
+msgstr[2] "tiaras de esmeralda y oro"
#. ~ Description for {'str': 'emerald and gold tiara'}
#: data/json/items/armor/jewelry.json
@@ -65579,9 +65820,9 @@ msgstr "Es una tiara brillante de oro, adornada con esmeraldas."
#: data/json/items/armor/jewelry.json
msgid "alexandrite and gold tiara"
msgid_plural "alexandrite and gold tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de alejandrita y oro"
+msgstr[1] "tiaras de alejandrita y oro"
+msgstr[2] "tiaras de alejandrita y oro"
#. ~ Description for {'str': 'alexandrite and gold tiara'}
#: data/json/items/armor/jewelry.json
@@ -65591,9 +65832,9 @@ msgstr "Es una tiara brillante de oro, adornada con alejandritas."
#: data/json/items/armor/jewelry.json
msgid "ruby and gold tiara"
msgid_plural "ruby and gold tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de rubí y oro"
+msgstr[1] "tiaras de rubí y oro"
+msgstr[2] "tiaras de rubí y oro"
#. ~ Description for {'str': 'ruby and gold tiara'}
#: data/json/items/armor/jewelry.json
@@ -65603,9 +65844,9 @@ msgstr "Es una tiara brillante de oro, adornada con rubíes."
#: data/json/items/armor/jewelry.json
msgid "peridot and gold tiara"
msgid_plural "peridot and gold tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de peridoto y oro"
+msgstr[1] "tiaras de peridoto y oro"
+msgstr[2] "tiaras de peridoto y oro"
#. ~ Description for {'str': 'peridot and gold tiara'}
#: data/json/items/armor/jewelry.json
@@ -65615,9 +65856,9 @@ msgstr "Es una tiara brillante de oro, adornada con peridotos."
#: data/json/items/armor/jewelry.json
msgid "sapphire and gold tiara"
msgid_plural "sapphire and gold tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de zafiro y oro"
+msgstr[1] "tiaras de zafiro y oro"
+msgstr[2] "tiaras de zafiro y oro"
#. ~ Description for {'str': 'sapphire and gold tiara'}
#: data/json/items/armor/jewelry.json
@@ -65627,9 +65868,9 @@ msgstr "Es una tiara brillante de oro, adornada con zafiros."
#: data/json/items/armor/jewelry.json
msgid "tourmaline and gold tiara"
msgid_plural "tourmaline and gold tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de turmalina y oro"
+msgstr[1] "tiaras de turmalina y oro"
+msgstr[2] "tiaras de turmalina y oro"
#. ~ Description for {'str': 'tourmaline and gold tiara'}
#: data/json/items/armor/jewelry.json
@@ -65639,9 +65880,9 @@ msgstr "Es una tiara brillante de oro, adornada con turmalinas."
#: data/json/items/armor/jewelry.json
msgid "citrine and gold tiara"
msgid_plural "citrine and gold tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de citrino y oro"
+msgstr[1] "tiaras de citrino y oro"
+msgstr[2] "tiaras de citrino y oro"
#. ~ Description for {'str': 'citrine and gold tiara'}
#: data/json/items/armor/jewelry.json
@@ -65651,9 +65892,9 @@ msgstr "Es una tiara brillante de oro, adornada con citrinos."
#: data/json/items/armor/jewelry.json
msgid "blue topaz and gold tiara"
msgid_plural "blue topaz and gold tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de topacio azul y oro"
+msgstr[1] "tiaras de topacio azul y oro"
+msgstr[2] "tiaras de topacio azul y oro"
#. ~ Description for {'str': 'blue topaz and gold tiara'}
#: data/json/items/armor/jewelry.json
@@ -65663,9 +65904,9 @@ msgstr "Es una tiara brillante de oro, adornada con topacio azul."
#: data/json/items/armor/jewelry.json
msgid "opal and gold tiara"
msgid_plural "opal and gold tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de ópalo y oro"
+msgstr[1] "tiaras de ópalo y oro"
+msgstr[2] "tiaras de ópalo y oro"
#. ~ Description for {'str': 'opal and gold tiara'}
#: data/json/items/armor/jewelry.json
@@ -65675,9 +65916,9 @@ msgstr "Es una tiara brillante de oro, adornada con ópalos."
#: data/json/items/armor/jewelry.json
msgid "pearl and gold tiara"
msgid_plural "pearl and gold tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de perla y oro"
+msgstr[1] "tiaras de perla y oro"
+msgstr[2] "tiaras de perla y oro"
#. ~ Description for {'str': 'pearl and gold tiara'}
#: data/json/items/armor/jewelry.json
@@ -65687,9 +65928,9 @@ msgstr "Es una tiara brillante de oro, adornada con perlas."
#: data/json/items/armor/jewelry.json
msgid "garnet and silver tiara"
msgid_plural "garnet and silver tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de granate y plata"
+msgstr[1] "tiaras de granate y plata"
+msgstr[2] "tiaras de granate y plata"
#. ~ Description for {'str': 'garnet and silver tiara'}
#: data/json/items/armor/jewelry.json
@@ -65699,9 +65940,9 @@ msgstr "Es una tiara brillante de plata, adornada con granates."
#: data/json/items/armor/jewelry.json
msgid "diamond and silver tiara"
msgid_plural "diamond and silver tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de diamante y plata"
+msgstr[1] "tiaras de diamante y plata"
+msgstr[2] "tiaras de diamante y plata"
#. ~ Description for {'str': 'diamond and silver tiara'}
#: data/json/items/armor/jewelry.json
@@ -65711,9 +65952,9 @@ msgstr "Es una tiara brillante de plata, adornada con diamantes."
#: data/json/items/armor/jewelry.json
msgid "amethyst and silver tiara"
msgid_plural "amethyst and silver tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de amatista y plata"
+msgstr[1] "tiaras de amatista y plata"
+msgstr[2] "tiaras de amatista y plata"
#. ~ Description for {'str': 'amethyst and silver tiara'}
#: data/json/items/armor/jewelry.json
@@ -65723,9 +65964,9 @@ msgstr "Es una tiara brillante de plata, adornada con amatista."
#: data/json/items/armor/jewelry.json
msgid "aquamarine and silver tiara"
msgid_plural "aquamarine and silver tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de aguamarina y plata"
+msgstr[1] "tiaras de aguamarina y plata"
+msgstr[2] "tiaras de aguamarina y plata"
#. ~ Description for {'str': 'aquamarine and silver tiara'}
#: data/json/items/armor/jewelry.json
@@ -65735,9 +65976,9 @@ msgstr "Es una tiara brillante de plata, adornada con aguamarina."
#: data/json/items/armor/jewelry.json
msgid "emerald and silver tiara"
msgid_plural "emerald and silver tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de esmeralda y plata"
+msgstr[1] "tiaras de esmeralda y plata"
+msgstr[2] "tiaras de esmeralda y plata"
#. ~ Description for {'str': 'emerald and silver tiara'}
#: data/json/items/armor/jewelry.json
@@ -65747,9 +65988,9 @@ msgstr "Es una tiara brillante de plata, adornada con esmeraldas."
#: data/json/items/armor/jewelry.json
msgid "alexandrite and silver tiara"
msgid_plural "alexandrite and silver tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de alejandrita y plata"
+msgstr[1] "tiaras de alejandrita y plata"
+msgstr[2] "tiaras de alejandrita y plata"
#. ~ Description for {'str': 'alexandrite and silver tiara'}
#: data/json/items/armor/jewelry.json
@@ -65759,9 +66000,9 @@ msgstr "Es una tiara brillante de plata, adornada con alejandritas."
#: data/json/items/armor/jewelry.json
msgid "ruby and silver tiara"
msgid_plural "ruby and silver tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de rubí y plata"
+msgstr[1] "tiaras de rubí y plata"
+msgstr[2] "tiaras de rubí y plata"
#. ~ Description for {'str': 'ruby and silver tiara'}
#: data/json/items/armor/jewelry.json
@@ -65771,9 +66012,9 @@ msgstr "Es una tiara brillante de plata, adornada con rubíes."
#: data/json/items/armor/jewelry.json
msgid "peridot and silver tiara"
msgid_plural "peridot and silver tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de peridoto y plata"
+msgstr[1] "tiaras de peridoto y plata"
+msgstr[2] "tiaras de peridoto y plata"
#. ~ Description for {'str': 'peridot and silver tiara'}
#: data/json/items/armor/jewelry.json
@@ -65783,9 +66024,9 @@ msgstr "Es una tiara brillante de plata, adornada con peridotos."
#: data/json/items/armor/jewelry.json
msgid "sapphire and silver tiara"
msgid_plural "sapphire and silver tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de zafiro y plata"
+msgstr[1] "tiaras de zafiro y plata"
+msgstr[2] "tiaras de zafiro y plata"
#. ~ Description for {'str': 'sapphire and silver tiara'}
#: data/json/items/armor/jewelry.json
@@ -65795,9 +66036,9 @@ msgstr "Es una tiara brillante de plata, adornada con zafiros."
#: data/json/items/armor/jewelry.json
msgid "tourmaline and silver tiara"
msgid_plural "tourmaline and silver tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de turmalina y plata"
+msgstr[1] "tiaras de turmalina y plata"
+msgstr[2] "tiaras de turmalina y plata"
#. ~ Description for {'str': 'tourmaline and silver tiara'}
#: data/json/items/armor/jewelry.json
@@ -65807,9 +66048,9 @@ msgstr "Es una tiara brillante de plata, adornada con turmalinas."
#: data/json/items/armor/jewelry.json
msgid "citrine and silver tiara"
msgid_plural "citrine and silver tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de citrino y plata"
+msgstr[1] "tiaras de citrino y plata"
+msgstr[2] "tiaras de citrino y plata"
#. ~ Description for {'str': 'citrine and silver tiara'}
#: data/json/items/armor/jewelry.json
@@ -65819,9 +66060,9 @@ msgstr "Es una tiara brillante de plata, adornada con citrinos."
#: data/json/items/armor/jewelry.json
msgid "blue topaz and silver tiara"
msgid_plural "blue topaz and silver tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de topacio azul y plata"
+msgstr[1] "tiaras de topacio azul y plata"
+msgstr[2] "tiaras de topacio azul y plata"
#. ~ Description for {'str': 'blue topaz and silver tiara'}
#: data/json/items/armor/jewelry.json
@@ -65831,9 +66072,9 @@ msgstr "Es una tiara brillante de plata, adornada con topacio azul."
#: data/json/items/armor/jewelry.json
msgid "opal and silver tiara"
msgid_plural "opal and silver tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de ópalo y plata"
+msgstr[1] "tiaras de ópalo y plata"
+msgstr[2] "tiaras de ópalo y plata"
#. ~ Description for {'str': 'opal and silver tiara'}
#: data/json/items/armor/jewelry.json
@@ -65843,9 +66084,9 @@ msgstr "Es una tiara brillante de plata, adornada con ópalos."
#: data/json/items/armor/jewelry.json
msgid "pearl and silver tiara"
msgid_plural "pearl and silver tiaras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tiara de perla y plata"
+msgstr[1] "tiaras de perla y plata"
+msgstr[2] "tiaras de perla y plata"
#. ~ Description for {'str': 'pearl and silver tiara'}
#: data/json/items/armor/jewelry.json
@@ -66028,9 +66269,9 @@ msgstr ""
#: data/json/items/armor/legs_armor.json
msgid "pair of scrap leg guards"
msgid_plural "pairs of scrap leg guards"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de perneras de chatarra"
+msgstr[1] "pares de perneras de chatarra"
+msgstr[2] "pares de perneras de chatarra"
#. ~ Description for {'str': 'pair of scrap leg guards', 'str_pl': 'pairs of
#. scrap leg guards'}
@@ -66738,9 +66979,9 @@ msgstr ""
#: data/json/items/armor/misc.json
msgid "clown wig"
msgid_plural "clown wigs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "peluca de payaso"
+msgstr[1] "pelucas de payaso"
+msgstr[2] "pelucas de payaso"
#. ~ Description for {'str': 'clown wig'}
#: data/json/items/armor/misc.json
@@ -66750,9 +66991,9 @@ msgstr "Es una peluca colorida y ridícula ideal para un payaso."
#: data/json/items/armor/misc.json
msgid "clown nose"
msgid_plural "clown noses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "nariz de payaso"
+msgstr[1] "narices de payaso"
+msgstr[2] "narices de payaso"
#. ~ Description for {'str': 'clown nose'}
#: data/json/items/armor/misc.json
@@ -66880,9 +67121,9 @@ msgstr ""
#: data/json/items/armor/misc.json
msgid "bow tie"
msgid_plural "bow ties"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "moño"
+msgstr[1] "moños"
+msgstr[2] "moños"
#. ~ Description for {'str': 'bow tie'}
#: data/json/items/armor/misc.json
@@ -66892,9 +67133,9 @@ msgstr "Es un moño negro común. Lo mejor es usarlo con un traje."
#: data/json/items/armor/misc.json
msgid "clip-on tie"
msgid_plural "clip-on ties"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "corbata con gancho"
+msgstr[1] "corbatas con gancho"
+msgstr[2] "corbatas con gancho"
#. ~ Description for {'str': 'clip-on tie'}
#: data/json/items/armor/misc.json
@@ -67137,9 +67378,9 @@ msgstr ""
#: data/json/items/armor/pets_medium_quadruped_armor.json
msgid "pair of saddle bags"
msgid_plural "pairs of saddle bags"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de bolsas de montura"
+msgstr[1] "pares de bolsas de montura"
+msgstr[2] "pares de bolsas de montura"
#. ~ Description for {'str': 'pair of saddle bags', 'str_pl': 'pairs of saddle
#. bags'}
@@ -67776,9 +68017,9 @@ msgstr ""
#: data/json/items/armor/scarfs.json
msgid "headscarf"
msgid_plural "headscarfs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "justka"
+msgstr[1] "justkas"
+msgstr[2] "justkas"
#. ~ Description for {'str': 'headscarf'}
#: data/json/items/armor/scarfs.json
@@ -67807,9 +68048,9 @@ msgstr ""
#: data/json/items/armor/scarfs.json
msgid "cyan scarf"
msgid_plural "cyan scarfs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bufanda turquesa"
+msgstr[1] "bufandas turquesas"
+msgstr[2] "bufandas turquesas"
#. ~ Description for {'str': 'cyan scarf'}
#: data/json/items/armor/scarfs.json
@@ -67823,9 +68064,9 @@ msgstr ""
#: data/json/items/armor/sheath.json
msgid "axe ring holster"
msgid_plural "axe ring holsters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "aro para colgar hachas"
+msgstr[1] "aros para colgar hachas"
+msgstr[2] "aros para colgar hachas"
#. ~ Use action holster_prompt for {'str': 'axe ring holster'}.
#: data/json/items/armor/sheath.json
@@ -68146,9 +68387,9 @@ msgstr ""
#: data/json/items/armor/storage.json
msgid "hiking backpack"
msgid_plural "hiking backpacks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mochila de excursión"
+msgstr[1] "mochilas de excursión"
+msgstr[2] "mochilas de excursión"
#. ~ Description for {'str': 'hiking backpack'}
#: data/json/items/armor/storage.json
@@ -68189,9 +68430,9 @@ msgstr "Es una mochila pequeña de cuero. Buena capacidad y poca incomodidad."
#: data/json/items/armor/storage.json
msgid "large tactical backpack"
msgid_plural "large tactical backpacks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mochila táctica grande"
+msgstr[1] "mochilas tácticas grandes"
+msgstr[2] "mochilas tácticas grandes"
#. ~ Description for {'str': 'large tactical backpack'}
#: data/json/items/armor/storage.json
@@ -68217,9 +68458,9 @@ msgstr "Una cesta de plástico pensada para almacenar y transportar ropa."
#: data/json/items/armor/storage.json
msgid "high-volume rucksack"
msgid_plural "high-volume rucksacks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mochilón amplio"
+msgstr[1] "mochilones amplios"
+msgstr[2] "mochilones amplios"
#. ~ Description for {'str': 'high-volume rucksack'}
#: data/json/items/armor/storage.json
@@ -68248,9 +68489,9 @@ msgstr ""
#: data/json/items/armor/storage.json
msgid "box backpack"
msgid_plural "box backpacks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mochila caja"
+msgstr[1] "mochilas caja"
+msgstr[2] "mochilas caja"
#. ~ Description for {'str': 'box backpack'}
#: data/json/items/armor/storage.json
@@ -68274,9 +68515,9 @@ msgstr "Útil para llevar dinero, documentos, o contrabando."
#: data/json/items/armor/storage.json
msgid "violin case"
msgid_plural "violin cases"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "estuche de violín"
+msgstr[1] "estuches de violín"
+msgstr[2] "estuches de violín"
#. ~ Description for {'str': 'violin case'}
#: data/json/items/armor/storage.json
@@ -68290,9 +68531,9 @@ msgstr ""
#: data/json/items/armor/storage.json
msgid "daypack"
msgid_plural "daypacks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mochilita"
+msgstr[1] "mochilitas"
+msgstr[2] "mochilitas"
#. ~ Description for {'str': 'daypack'}
#: data/json/items/armor/storage.json
@@ -68388,9 +68629,9 @@ msgstr ""
#: data/json/items/armor/storage.json
msgid "hide bag"
msgid_plural "hide bags"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bolso de pellejo"
+msgstr[1] "bolsos de pellejo"
+msgstr[2] "bolsos de pellejo"
#. ~ Description for {'str': 'hide bag'}
#: data/json/items/armor/storage.json
@@ -68404,9 +68645,9 @@ msgstr ""
#: data/json/items/armor/storage.json
msgid "tainted hide bag"
msgid_plural "tainted hide bags"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bolso de pellejo contaminado"
+msgstr[1] "bolsos de pellejo contaminado"
+msgstr[2] "bolsos de pellejo contaminado"
#. ~ Description for {'str': 'tainted hide bag'}
#: data/json/items/armor/storage.json
@@ -68420,9 +68661,9 @@ msgstr ""
#: data/json/items/armor/storage.json
msgid "H&K operational briefcase (empty)"
msgid_plural "H&K operational briefcases (empty)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "maletín operativo H&K (vacío)"
+msgstr[1] "maletines operativos H&K (vacíos)"
+msgstr[2] "maletines operativos H&K (vacíos)"
#. ~ Description for {'str': 'H&K operational briefcase (empty)', 'str_pl':
#. 'H&K operational briefcases (empty)'}
@@ -68549,9 +68790,9 @@ msgstr ""
#: data/json/items/armor/storage.json
msgid "petpack"
msgid_plural "petpacks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mochila para perro"
+msgstr[1] "mochilas para perro"
+msgstr[2] "mochilas para perro"
#. ~ Description for {'str': 'petpack'}
#: data/json/items/armor/storage.json
@@ -68789,9 +69030,9 @@ msgstr ""
#: data/json/items/armor/storage.json
msgid "travelpack"
msgid_plural "travelpacks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bolso de viaje"
+msgstr[1] "bolsos de viaje"
+msgstr[2] "bolsos de viaje"
#. ~ Description for {'str': 'travelpack'}
#: data/json/items/armor/storage.json
@@ -68896,9 +69137,9 @@ msgstr ""
#: data/json/items/armor/suits_clothes.json
msgid "Hub 01 jumpsuit"
msgid_plural "Hub 01 jumpsuits"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mameluco Hub 01"
+msgstr[1] "mamelucos Hub 01"
+msgstr[2] "mamelucos Hub 01"
#. ~ Description for {'str': 'Hub 01 jumpsuit'}
#: data/json/items/armor/suits_clothes.json
@@ -68977,9 +69218,9 @@ msgstr ""
#: data/json/items/armor/suits_clothes.json
msgid "zentai"
msgid_plural "zentais"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zentai"
+msgstr[1] "zentais"
+msgstr[2] "zentais"
#. ~ Description for {'str': 'zentai'}
#: data/json/items/armor/suits_clothes.json
@@ -69483,9 +69724,9 @@ msgstr ""
#: data/json/items/armor/suits_protection.json
msgid "Hub 01 environmental suit"
msgid_plural "Hub 01 environmental suits"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "traje ambiental Hub 01"
+msgstr[1] "trajes ambientales Hub 01"
+msgstr[2] "trajes ambientales Hub 01"
#. ~ Description for {'str': 'Hub 01 environmental suit'}
#: data/json/items/armor/suits_protection.json
@@ -69623,9 +69864,9 @@ msgstr ""
#: data/json/items/armor/suits_protection.json
msgid "XL heavy survivor suit"
msgid_plural "XL heavy survivor suits"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "traje XL pesado de supervivencia"
+msgstr[1] "trajes XL pesados de supervivencia"
+msgstr[2] "trajes XL pesados de supervivencia"
#. ~ Description for {'str': 'XL heavy survivor suit'}
#: data/json/items/armor/suits_protection.json
@@ -69839,9 +70080,9 @@ msgstr "Un antiguao peto griego, hecho de bronce."
#: data/json/items/armor/torso_armor.json
msgid "lamellar cuirass"
msgid_plural "lamellar cuirasses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "coraza lamelar"
+msgstr[1] "corazas lamelar"
+msgstr[2] "corazas lamelar"
#. ~ Description for {'str': 'lamellar cuirass', 'str_pl': 'lamellar
#. cuirasses'}
@@ -69904,9 +70145,9 @@ msgstr ""
#: data/json/items/armor/torso_armor.json
msgid "hard chest guard"
msgid_plural "hard chest guards"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "protección dura para pecho"
+msgstr[1] "protecciones duras para pecho"
+msgstr[2] "protecciones duras para pecho"
#. ~ Description for {'str': 'hard chest guard'}
#: data/json/items/armor/torso_armor.json
@@ -69935,9 +70176,9 @@ msgstr ""
#: data/json/items/armor/torso_armor.json
msgid "scrap cuirass"
msgid_plural "scrap cuirasses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "coraza de chatarra"
+msgstr[1] "corazas de chatarra"
+msgstr[2] "corazas de chatarra"
#. ~ Description for {'str': 'scrap cuirass', 'str_pl': 'scrap cuirasses'}
#: data/json/items/armor/torso_armor.json
@@ -69984,9 +70225,9 @@ msgstr ""
#: data/json/items/armor/torso_armor.json
msgid "occult bone armor"
msgid_plural "occult bone armors"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "armadura mística de hueso"
+msgstr[1] "armaduras místicas de hueso"
+msgstr[2] "armaduras místicas de hueso"
#. ~ Description for {'str': 'occult bone armor'}
#: data/json/items/armor/torso_armor.json
@@ -70002,9 +70243,9 @@ msgstr ""
#: data/json/items/armor/torso_armor.json
msgid "lamé (foil)"
msgid_plural "lamés (foil)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lamé (florete)"
+msgstr[1] "lamé (floretes)"
+msgstr[2] "lamé (floretes)"
#. ~ Description for {'str': 'lamé (foil)', 'str_pl': 'lamés (foil)'}
#: data/json/items/armor/torso_armor.json
@@ -70020,9 +70261,9 @@ msgstr ""
#: data/json/items/armor/torso_armor.json
msgid "lamé (saber)"
msgid_plural "lamés (saber)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lamé (sable)"
+msgstr[1] "lamé (sables)"
+msgstr[2] "lamé (sables)"
#. ~ Description for {'str': 'lamé (saber)', 'str_pl': 'lamés (saber)'}
#: data/json/items/armor/torso_armor.json
@@ -70097,9 +70338,9 @@ msgstr ""
#: data/json/items/armor/torso_armor.json
msgid "underarm protector"
msgid_plural "underarm protectors"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "protector de axila"
+msgstr[1] "protectores de axila"
+msgstr[2] "protectores de axila"
#. ~ Description for {'str': 'underarm protector'}
#: data/json/items/armor/torso_armor.json
@@ -70113,9 +70354,9 @@ msgstr ""
#: data/json/items/armor/torso_armor.json
msgid "plastic chest protector"
msgid_plural "plastic chest protectors"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "protector plástico de torso"
+msgstr[1] "protectores plásticos de torso"
+msgstr[2] "protectores plásticos de torso"
#. ~ Description for {'str': 'plastic chest protector'}
#: data/json/items/armor/torso_armor.json
@@ -70397,9 +70638,9 @@ msgstr ""
#: data/json/items/armor/torso_clothes.json
msgid "leotard"
msgid_plural "leotard"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "leotardo"
+msgstr[1] "leotardo"
+msgstr[2] "leotardo"
#. ~ Description for {'str_sp': 'leotard'}
#: data/json/items/armor/torso_clothes.json
@@ -70655,9 +70896,9 @@ msgstr ""
#: data/json/items/armor/torso_clothes.json
msgid "tour t-shirt"
msgid_plural "tour t-shirts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "remera rockera"
+msgstr[1] "remeras rockeras"
+msgstr[2] "remeras rockeras"
#: data/json/items/armor/torso_clothes.json
msgid ""
@@ -71080,9 +71321,9 @@ msgstr ""
#: data/json/items/armor/undergarment.json
msgid "sleeveless underwear top"
msgid_plural "sleeveless underwear tops"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "camiseta sin mangas"
+msgstr[1] "camisetas sin mangas"
+msgstr[2] "camisetas sin mangas"
#. ~ Description for {'str': 'sleeveless underwear top'}
#: data/json/items/armor/undergarment.json
@@ -71109,9 +71350,9 @@ msgstr ""
#: data/json/items/armor/undergarment.json
msgid "thermal shirt"
msgid_plural "thermal shirts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "remera térmica"
+msgstr[1] "remeras térmicas"
+msgstr[2] "remeras térmicas"
#. ~ Description for {'str': 'thermal shirt'}
#: data/json/items/armor/undergarment.json
@@ -71217,9 +71458,9 @@ msgstr ""
#: data/json/items/armor/undergarment.json
msgid "unitard"
msgid_plural "unitards"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "unitard"
+msgstr[1] "unitards"
+msgstr[2] "unitards"
#. ~ Description for {'str': 'unitard'}
#: data/json/items/armor/undergarment.json
@@ -71235,9 +71476,9 @@ msgstr ""
#: data/json/items/book/archery.json
msgid "Lessons for the Novice Bowhunter"
msgid_plural "copies of Lessons for the Novice Bowhunter"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Lecciones para el Cazador con Arco Principiante"
+msgstr[1] "copias de Lecciones para el Cazador con Arco Principiante"
+msgstr[2] "copias de Lecciones para el Cazador con Arco Principiante"
#. ~ Description for {'str': 'Lessons for the Novice Bowhunter', 'str_pl':
#. 'copies of Lessons for the Novice Bowhunter'}
@@ -71253,9 +71494,9 @@ msgstr ""
#: data/json/items/book/archery.json
msgid "Archery for Kids"
msgid_plural "issues of Archery for Kids"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Arquería para Niños"
+msgstr[1] "fascículos de Arquería para Niños"
+msgstr[2] "fascículos de Arquería para Niños"
#. ~ Description for {'str': 'Archery for Kids', 'str_pl': 'issues of Archery
#. for Kids'}
@@ -71271,9 +71512,9 @@ msgstr ""
#: data/json/items/book/archery.json
msgid "Zen and the Art of Archery"
msgid_plural "copies of Zen and the Art of Archery"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "El Zen y el Arte de la Arquería"
+msgstr[1] "copias de El Zen y el Arte de la Arquería"
+msgstr[2] "copias de El Zen y el Arte de la Arquería"
#. ~ Description for {'str': 'Zen and the Art of Archery', 'str_pl': 'copies
#. of Zen and the Art of Archery'}
@@ -71304,9 +71545,9 @@ msgstr ""
#: data/json/items/book/barter.json
msgid "How to Succeed in Business"
msgid_plural "copies of How to Succeed in Business"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Cómo tener Éxito en los Negocios"
+msgstr[1] "copias de Cómo tener Éxito en los Negocios"
+msgstr[2] "copias de Cómo tener Éxito en los Negocios"
#. ~ Description for {'str': 'How to Succeed in Business', 'str_pl': 'copies
#. of How to Succeed in Business'}
@@ -71317,9 +71558,9 @@ msgstr "Es útil si quieres obtener un buen negocio cuando compras cosas."
#: data/json/items/book/barter.json
msgid "Advanced Economics"
msgid_plural "copies of Advanced Economics"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Economía Avanzada"
+msgstr[1] "copias de Economía Avanzada"
+msgstr[2] "copias de Economía Avanzada"
#. ~ Description for {'str': 'Advanced Economics', 'str_pl': 'copies of
#. Advanced Economics'}
@@ -71330,9 +71571,9 @@ msgstr "Un texto escolar sobre economía."
#: data/json/items/book/bashing.json
msgid "Batter Up!"
msgid_plural "issues of Batter Up!"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "¡Al Bate!"
+msgstr[1] "fascículos de ¡Al Bate!"
+msgstr[2] "fascículos de ¡Al Bate!"
#. ~ Description for {'str': 'Batter Up!', 'str_pl': 'issues of Batter Up!'}
#: data/json/items/book/bashing.json
@@ -71366,9 +71607,9 @@ msgstr ""
#: data/json/items/book/bloat.json
msgid "Mycenacean Hymns"
msgid_plural "copies of Mycenacean Hymns"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Hymnos Myceanos"
+msgstr[1] "copias de Hymnos Myceanos"
+msgstr[2] "copias de Hymnos Myceanos"
#. ~ Description for {'str': 'Mycenacean Hymns', 'str_pl': 'copies of
#. Mycenacean Hymns'}
@@ -71384,9 +71625,9 @@ msgstr ""
#: data/json/items/book/bloat.json
msgid "Eastern Orthodox Bible"
msgid_plural "copies of Eastern Orthodox Bible"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Biblia Ortodoxa de Oriente"
+msgstr[1] "copias de Biblia Ortodoxa de Oriente"
+msgstr[2] "copias de Biblia Ortodoxa de Oriente"
#. ~ Description for {'str': 'Eastern Orthodox Bible', 'str_pl': 'copies of
#. Eastern Orthodox Bible'}
@@ -71398,9 +71639,9 @@ msgstr ""
#: data/json/items/book/bloat.json
msgid "Gideon Bible"
msgid_plural "copies of Gideon Bible"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Biblia de Gedeón"
+msgstr[1] "copias de Biblia de Gedeón"
+msgstr[2] "copias de Biblia de Gedeón"
#. ~ Description for {'str': 'Gideon Bible', 'str_pl': 'copies of Gideon
#. Bible'}
@@ -71428,9 +71669,9 @@ msgstr "Una copia de un solo volumen del texto religioso central del Sijismo."
#: data/json/items/book/bloat.json
msgid "Hadith"
msgid_plural "copies of Hadith"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Hadiz"
+msgstr[1] "copias de Hadiz"
+msgstr[2] "copias de Hadiz"
#. ~ Description for {'str': 'Hadith', 'str_pl': 'copies of Hadith'}
#: data/json/items/book/bloat.json
@@ -71517,9 +71758,9 @@ msgstr ""
#: data/json/items/book/bloat.json
msgid "Quran"
msgid_plural "copies of Quran"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Corán"
+msgstr[1] "copias de Corán"
+msgstr[2] "copias de Corán"
#. ~ Description for {'str': 'Quran', 'str_pl': 'copies of Quran'}
#: data/json/items/book/bloat.json
@@ -71583,9 +71824,9 @@ msgstr ""
#: data/json/items/book/bloat.json
msgid "Talmud"
msgid_plural "copies of Talmud"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Talmud"
+msgstr[1] "copias de Talmud"
+msgstr[2] "copias de Talmud"
#. ~ Description for {'str': 'Talmud', 'str_pl': 'copies of Talmud'}
#: data/json/items/book/bloat.json
@@ -71600,9 +71841,9 @@ msgstr ""
#: data/json/items/book/bloat.json
msgid "Tanakh"
msgid_plural "copies of Tanakh"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Tanaj"
+msgstr[1] "copias de Tanaj"
+msgstr[2] "copias de Tanaj"
#. ~ Description for {'str': 'Tanakh', 'str_pl': 'copies of Tanakh'}
#: data/json/items/book/bloat.json
@@ -71615,9 +71856,9 @@ msgstr ""
#: data/json/items/book/bloat.json
msgid "The Tripitaka"
msgid_plural "copies of The Tripitaka"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "El Tripitaka"
+msgstr[1] "copias de El Tripitaka"
+msgstr[2] "copias de El Tripitaka"
#. ~ Description for {'str': 'The Tripitaka', 'str_pl': 'copies of The
#. Tripitaka'}
@@ -71666,9 +71907,9 @@ msgstr ""
#: data/json/items/book/bloat.json
msgid "The Satanic Bible"
msgid_plural "copies of The Satanic Bible"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "La Biblia Satánica"
+msgstr[1] "copias de La Biblia Satánica"
+msgstr[2] "copias de La Biblia Satánica"
#. ~ Description for {'str': 'The Satanic Bible', 'str_pl': 'copies of The
#. Satanic Bible'}
@@ -71701,9 +71942,9 @@ msgstr ""
#: data/json/items/book/bloat.json
msgid "priest's diary"
msgid_plural "priests' diaries"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "diario de cura"
+msgstr[1] "diarios de cura"
+msgstr[2] "diarios de cura"
#. ~ Description for {'str': "priest's diary", 'str_pl': "priests' diaries"}
#: data/json/items/book/bloat.json
@@ -71713,9 +71954,9 @@ msgstr "Un librito lleno con entradas diarias en latín."
#: data/json/items/book/bloat.json
msgid "The Hitchhiker's Guide to the Cataclysm"
msgid_plural "copies of The Hitchhiker's Guide to the Cataclysm"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Guía del Autoestopista Cataclísmico"
+msgstr[1] "copias de Guía del Autoestopista Cataclísmico"
+msgstr[2] "copias de Guía del Autoestopista Cataclísmico"
#. ~ Description for {'str': "The Hitchhiker's Guide to the Cataclysm",
#. 'str_pl': "copies of The Hitchhiker's Guide to the Cataclysm"}
@@ -71730,9 +71971,9 @@ msgstr ""
#: data/json/items/book/bloat.json
msgid "Murdered by the Grapevine"
msgid_plural "copies of Murdered by the Grapevine"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Asesinado por la Vid"
+msgstr[1] "copias de Asesinado por la Vid"
+msgstr[2] "copias de Asesinado por la Vid"
#. ~ Description for {'str': 'Murdered by the Grapevine', 'str_pl': 'copies of
#. Murdered by the Grapevine'}
@@ -71751,9 +71992,9 @@ msgstr ""
#: data/json/items/book/bloat.json
msgid "Come Fly the Treacherous Skies"
msgid_plural "copies of Come Fly the Treacherous Skies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Vení a Volar por los Cielos Traidores"
+msgstr[1] "copias de Vení a Volar por los Cielos Traidores"
+msgstr[2] "copias de Vení a Volar por los Cielos Traidores"
#. ~ Description for {'str': 'Come Fly the Treacherous Skies', 'str_pl':
#. 'copies of Come Fly the Treacherous Skies'}
@@ -71771,9 +72012,9 @@ msgstr ""
#: data/json/items/book/bloat.json
msgid "Lies, Damn Lies, and Rocket Science"
msgid_plural "copies of Lies, Damn Lies, and Rocket Science"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Mentiras, Malditas Mentiras y Ciencia Espacial"
+msgstr[1] "copias de Mentiras, Malditas Mentiras y Ciencia Espacial"
+msgstr[2] "copias de Mentiras, Malditas Mentiras y Ciencia Espacial"
#. ~ Description for {'str': 'Lies, Damn Lies, and Rocket Science', 'str_pl':
#. 'copies of Lies, Damn Lies, and Rocket Science'}
@@ -71792,9 +72033,9 @@ msgstr ""
#: data/json/items/book/bloat.json
msgid "Visions in Solitude"
msgid_plural "copies of Visions in Solitude"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Revelaciones en Soledad"
+msgstr[1] "copias de Revelaciones en Soledad"
+msgstr[2] "copias de Revelaciones en Soledad"
#. ~ Description for {'str': 'Visions in Solitude', 'str_pl': 'copies of
#. Visions in Solitude'}
@@ -71807,9 +72048,9 @@ msgstr ""
#: data/json/items/book/bloat.json
msgid "Zombie Survival Guide"
msgid_plural "copies of Zombie Survival Guide"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Guía de Supervivencia ante Zombis"
+msgstr[1] "copias de Guía de Supervivencia ante Zombis"
+msgstr[2] "copias de Guía de Supervivencia ante Zombis"
#. ~ Description for {'str': 'Zombie Survival Guide', 'str_pl': 'copies of
#. Zombie Survival Guide'}
@@ -71824,9 +72065,9 @@ msgstr ""
#: data/json/items/book/computer.json
msgid "SICP"
msgid_plural "copies of SICP"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "SICP"
+msgstr[1] "copias de SICP"
+msgstr[2] "copias de SICP"
#. ~ Description for {'str': 'SICP', 'str_pl': 'copies of SICP'}
#: data/json/items/book/computer.json
@@ -71841,9 +72082,9 @@ msgstr ""
#: data/json/items/book/computer.json
msgid "Computer Science 301"
msgid_plural "copies of Computer Science 301"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Ciencias de la Computación 3"
+msgstr[1] "copias de Ciencias de la Computación 3"
+msgstr[2] "copias de Ciencias de la Computación 3"
#. ~ Description for {'str': 'Computer Science 301', 'str_pl': 'copies of
#. Computer Science 301'}
@@ -71854,9 +72095,9 @@ msgstr "Un texto escolar sobre las ciencias de la computación."
#: data/json/items/book/computer.json
msgid "How to Browse the Web"
msgid_plural "copies of How to Browse the Web"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Cómo Navegar por la Web"
+msgstr[1] "copias de Cómo Navegar por la Web"
+msgstr[2] "copias de Cómo Navegar por la Web"
#. ~ Description for {'str': 'How to Browse the Web', 'str_pl': 'copies of How
#. to Browse the Web'}
@@ -71867,9 +72108,9 @@ msgstr "Información sobre computadoras para principiantes."
#: data/json/items/book/computer.json
msgid "Computer World"
msgid_plural "issues of Computer World"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Mundo Computadora"
+msgstr[1] "fascículos de Mundo Computadora"
+msgstr[2] "fascículos de Mundo Computadora"
#. ~ Description for {'str': 'Computer World', 'str_pl': 'issues of Computer
#. World'}
@@ -71883,9 +72124,9 @@ msgstr ""
#: data/json/items/book/computer.json
msgid "Computer Science 101"
msgid_plural "copies of Computer Science 101"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Ciencias de la Computación 1"
+msgstr[1] "copias de Ciencias de la Computación 1"
+msgstr[2] "copias de Ciencias de la Computación 1"
#. ~ Description for {'str': 'Computer Science 101', 'str_pl': 'copies of
#. Computer Science 101'}
@@ -71896,9 +72137,9 @@ msgstr "Un libro de texto sobre computadoras de nivel básico."
#: data/json/items/book/computer.json
msgid "Principles of Advanced Programming"
msgid_plural "copies of Principles of Advanced Programming"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Principios de Programación Avanzada"
+msgstr[1] "copias de Principios de Programación Avanzada"
+msgstr[2] "copias de Principios de Programación Avanzada"
#. ~ Description for {'str': 'Principles of Advanced Programming', 'str_pl':
#. 'copies of Principles of Advanced Programming'}
@@ -71913,9 +72154,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "Advanced Physical Chemistry"
msgid_plural "copies of Advanced Physical Chemistry"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Físico-química Avanzada"
+msgstr[1] "copias de Físico-química Avanzada"
+msgstr[2] "copias de Físico-química Avanzada"
#. ~ Description for {'str': 'Advanced Physical Chemistry', 'str_pl': 'copies
#. of Advanced Physical Chemistry'}
@@ -71930,9 +72171,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "The Homebrewer's Bible"
msgid_plural "copies of The Homebrewer's Bible"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "La Biblia del Cervecero"
+msgstr[1] "copias de La Biblia del Cervecero"
+msgstr[2] "copias de La Biblia del Cervecero"
#. ~ Description for {'str': "The Homebrewer's Bible", 'str_pl': "copies of
#. The Homebrewer's Bible"}
@@ -71948,9 +72189,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "Cooking on a Budget"
msgid_plural "copies of Cooking on a Budget"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Cocinando con Poca Plata"
+msgstr[1] "copias de Cocinando con Poca Plata"
+msgstr[2] "copias de Cocinando con Poca Plata"
#. ~ Description for {'str': 'Cooking on a Budget', 'str_pl': 'copies of
#. Cooking on a Budget'}
@@ -71964,9 +72205,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "To Serve Man"
msgid_plural "copies of To Serve Man"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Servir al Hombre"
+msgstr[1] "copias de Servir al Hombre"
+msgstr[2] "copias de Servir al Hombre"
#. ~ Description for {'str': 'To Serve Man', 'str_pl': 'copies of To Serve
#. Man'}
@@ -71977,9 +72218,9 @@ msgstr "Es... ¡un libro de recetas!"
#: data/json/items/book/cooking.json
msgid "Cucina Italiana"
msgid_plural "copies of Cucina Italiana"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Cucina Italiana"
+msgstr[1] "copias de Cucina Italiana"
+msgstr[2] "copias de Cucina Italiana"
#. ~ Description for {'str': 'Cucina Italiana', 'str_pl': 'copies of Cucina
#. Italiana'}
@@ -72033,9 +72274,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "Bon Appetit"
msgid_plural "issues of Bon Appetit"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Bon Appetit"
+msgstr[1] "fascículos de Bon Appetit"
+msgstr[2] "fascículos de Bon Appetit"
#. ~ Description for {'str': 'Bon Appetit', 'str_pl': 'issues of Bon Appetit'}
#: data/json/items/book/cooking.json
@@ -72048,9 +72289,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "Glamopolitan"
msgid_plural "issues of Glamopolitan"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Glamopolitan"
+msgstr[1] "fascículos de Glamopolitan"
+msgstr[2] "fascículos de Glamopolitan"
#. ~ Description for {'str': 'Glamopolitan', 'str_pl': 'issues of
#. Glamopolitan'}
@@ -72084,9 +72325,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "PE050 \"Alpha\": Preliminary Report"
msgid_plural "copies of PE050 \"Alpha\": Preliminary Report"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "PE050 \"Alpha\": Informe Preliminar"
+msgstr[1] "copias de PE050 \"Alpha\": Informe Preliminar"
+msgstr[2] "copias de PE050 \"Alpha\": Informe Preliminar"
#. ~ Description for {'str': 'PE050 "Alpha": Preliminary Report', 'str_pl':
#. 'copies of PE050 "Alpha": Preliminary Report'}
@@ -72123,9 +72364,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "PE065 \"Chimera\": Best Practices"
msgid_plural "copies of PE065 \"Chimera\": Best Practices"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "PE065 \"Chimera\": Mejores Prácticas"
+msgstr[1] "copias de PE065 \"Chimera\": Mejores Prácticas"
+msgstr[2] "copias de PE065 \"Chimera\": Mejores Prácticas"
#. ~ Description for {'str': 'PE065 "Chimera": Best Practices', 'str_pl':
#. 'copies of PE065 "Chimera": Best Practices'}
@@ -72222,9 +72463,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "PE023 \"Medical\": Application and Findings"
msgid_plural "copies of PE023 \"Medical\": Application and Findings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "PE023 \"Medicinal\": Aplicación y Descubrimientos"
+msgstr[1] "copias de PE023 \"Medicinal\": Aplicación y Descubrimientos"
+msgstr[2] "copias de PE023 \"Medicinal\": Aplicación y Descubrimientos"
#. ~ Description for {'str': 'PE023 "Medical": Application and Findings',
#. 'str_pl': 'copies of PE023 "Medical": Application and Findings'}
@@ -72240,9 +72481,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "PE070 \"Raptor\": Proposal"
msgid_plural "copies of PE070 \"Raptor\": Proposal"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "PE070 \"Raptor\": Propuesta"
+msgstr[1] "copias de PE070 \"Raptor\": Propuesta"
+msgstr[2] "copias de PE070 \"Raptor\": Propuesta"
#. ~ Description for {'str': 'PE070 "Raptor": Proposal', 'str_pl': 'copies of
#. PE070 "Raptor": Proposal'}
@@ -72259,9 +72500,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "Best Practices for Compound Delivery"
msgid_plural "copies of Best Practices for Compound Delivery"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Mejores Maneras de Suministrar un Compuesto"
+msgstr[1] "copias de Mejores Maneras de Suministrar un Compuesto"
+msgstr[2] "copias de Mejores Maneras de Suministrar un Compuesto"
#. ~ Description for {'str': 'Best Practices for Compound Delivery', 'str_pl':
#. 'copies of Best Practices for Compound Delivery'}
@@ -72282,9 +72523,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "CRC-Merck Handbook, 4th edition"
msgid_plural "copies of CRC-Merck Handbook, 4th edition"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Guía CRC-Merck, 4ta edición"
+msgstr[1] "copias de Guía CRC-Merck, 4ta edición"
+msgstr[2] "copias de Guía CRC-Merck, 4ta edición"
#. ~ Description for {'str': 'CRC-Merck Handbook, 4th edition', 'str_pl':
#. 'copies of CRC-Merck Handbook, 4th edition'}
@@ -72339,9 +72580,9 @@ msgstr "Un libro escolar sobre química."
#: data/json/items/book/cooking.json
msgid "The Vinegar Maker's Handbook"
msgid_plural "copies of Vinegar Maker's Handbook"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "La Guía para Hacer Vinagre"
+msgstr[1] "copias de La Guía para Hacer Vinagre"
+msgstr[2] "copias de La Guía para Hacer Vinagre"
#. ~ Description for {'str': "The Vinegar Maker's Handbook", 'str_pl': "copies
#. of Vinegar Maker's Handbook"}
@@ -72358,9 +72599,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "Drink the Harvest"
msgid_plural "copies of Drink the Harvest"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Tomarse la Cosecha"
+msgstr[1] "copias de Tomarse la Cosecha"
+msgstr[2] "copias de Tomarse la Cosecha"
#. ~ Description for {'str': 'Drink the Harvest', 'str_pl': 'copies of Drink
#. the Harvest'}
@@ -72375,9 +72616,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "Offal Holiday Cooking"
msgid_plural "copies of Offal Holiday Cooking"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Cocinando Achuras para las Fiestas"
+msgstr[1] "copias de Cocinando Achuras para las Fiestas"
+msgstr[2] "copias de Cocinando Achuras para las Fiestas"
#. ~ Description for {'str': 'Offal Holiday Cooking', 'str_pl': 'copies of
#. Offal Holiday Cooking'}
@@ -72393,9 +72634,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "Things to do with Milk"
msgid_plural "copies of Things to do with Milk"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Cosas para hacer con Leche"
+msgstr[1] "copias de Cosas para hacer con Leche"
+msgstr[2] "copias de Cosas para hacer con Leche"
#. ~ Description for {'str': 'Things to do with Milk', 'str_pl': 'copies of
#. Things to do with Milk'}
@@ -72409,9 +72650,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "Liver-Licious Recipes Your Kids Will Love"
msgid_plural "copies of Liver-Licious Recipes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Recetas Higadísimas Que Tus Chicos Amarán"
+msgstr[1] "copias de Recetas Higadísimas Que Tus Chicos Amarán"
+msgstr[2] "copias de Recetas Higadísimas Que Tus Chicos Amarán"
#. ~ Description for {'str': 'Liver-Licious Recipes Your Kids Will Love',
#. 'str_pl': 'copies of Liver-Licious Recipes'}
@@ -72428,9 +72669,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "Dainty Dishes Fit for a King"
msgid_plural "copies of Dainty Dishes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Platos Delicados"
+msgstr[1] "copias de Platos Delicados"
+msgstr[2] "copias de Platos Delicados"
#. ~ Description for {'str': 'Dainty Dishes Fit for a King', 'str_pl': 'copies
#. of Dainty Dishes'}
@@ -72447,9 +72688,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "Eat Your Way to a Fit Physique"
msgid_plural "copies of Eat Your Way"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Comé a Tu Manera"
+msgstr[1] "copias de Comé a Tu Manera"
+msgstr[2] "copias de Comé a Tu Manera"
#. ~ Description for {'str': 'Eat Your Way to a Fit Physique', 'str_pl':
#. 'copies of Eat Your Way'}
@@ -72464,9 +72705,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "Food Fashions for Young Moderns"
msgid_plural "copies of Food Fashions"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Moda de Cocina"
+msgstr[1] "copias de Moda de Cocina"
+msgstr[2] "copias de Moda de Cocina"
#. ~ Description for {'str': 'Food Fashions for Young Moderns', 'str_pl':
#. 'copies of Food Fashions'}
@@ -72485,9 +72726,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "Winemaking for Beginners"
msgid_plural "copies of Winemaking for Beginners"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Enología para Principiantes"
+msgstr[1] "copias de Enología para Principiantes"
+msgstr[2] "copias de Enología para Principiantes"
#. ~ Description for {'str': 'Winemaking for Beginners', 'str_pl': 'copies of
#. Winemaking for Beginners'}
@@ -72502,9 +72743,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "You Can Can at Home"
msgid_plural "copies of You Can Can at Home"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Podés Enlatar en Casa"
+msgstr[1] "copias de Podés Enlatar en Casa"
+msgstr[2] "copias de Podés Enlatar en Casa"
#. ~ Description for {'str': 'You Can Can at Home', 'str_pl': 'copies of You
#. Can Can at Home'}
@@ -72521,9 +72762,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "Can Sealer Instructions"
msgid_plural "copies of Can Sealer Instructions"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Instrucciones para Sellar Latas"
+msgstr[1] "copias de Instrucciones para Sellar Latas"
+msgstr[2] "copias de Instrucciones para Sellar Latas"
#. ~ Description for {'str': 'Can Sealer Instructions', 'str_pl': 'copies of
#. Can Sealer Instructions'}
@@ -72540,9 +72781,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "The Baker's Companion"
msgid_plural "copies of The Baker's Companion"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "El Compañero del Panadero"
+msgstr[1] "copias de El Compañero del Panadero"
+msgstr[2] "copias de El Compañero del Panadero"
#. ~ Description for {'str': "The Baker's Companion", 'str_pl': "copies of The
#. Baker's Companion"}
@@ -72556,9 +72797,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "Fermenting Culture"
msgid_plural "copies of Fermenting Culture"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Cultura de la Fermentación"
+msgstr[1] "copias de Cultura de la Fermentación"
+msgstr[2] "copias de Cultura de la Fermentación"
#. ~ Description for {'str': 'Fermenting Culture', 'str_pl': 'copies of
#. Fermenting Culture'}
@@ -72575,9 +72816,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "Out of the Holler and into the Home: A guide to home distilation. "
msgid_plural "copies of Out of the Holler"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Desde el Holler y al Hogar: Guía de Destilación Hogareña"
+msgstr[1] "copias de Desde el Holler"
+msgstr[2] "copias de Desde el Holler"
#. ~ Description for {'str': 'Out of the Holler and into the Home: A guide to
#. home distilation. ', 'str_pl': 'copies of Out of the Holler'}
@@ -72592,9 +72833,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "Sweets for your Sweet Child"
msgid_plural "copies of Sweets for Sweet"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Golosinas para Golosos"
+msgstr[1] "copias de Golosinas para Golosos"
+msgstr[2] "copias de Golosinas para Golosos"
#. ~ Description for {'str': 'Sweets for your Sweet Child', 'str_pl': 'copies
#. of Sweets for Sweet'}
@@ -72612,9 +72853,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "Pocket Survival Cookbook"
msgid_plural "copies of Pocket Survival Cookbook"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Guía de Bolsillo de Cocina de Supervivencia"
+msgstr[1] "copias de Guía de Bolsillo de Cocina de Supervivencia"
+msgstr[2] "copias de Guía de Bolsillo de Cocina de Supervivencia"
#. ~ Description for {'str': 'Pocket Survival Cookbook', 'str_pl': 'copies of
#. Pocket Survival Cookbook'}
@@ -72627,9 +72868,9 @@ msgstr ""
#: data/json/items/book/cooking.json
msgid "Tasting India"
msgid_plural "copies of Tasting India"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Sabores de India"
+msgstr[1] "copias de Sabores de India"
+msgstr[2] "copias de Sabores de India"
#. ~ Description for {'str': 'Tasting India', 'str_pl': 'copies of Tasting
#. India'}
@@ -72644,9 +72885,9 @@ msgstr ""
#: data/json/items/book/cutting.json
msgid "All About Swords"
msgid_plural "issues of All About Swords"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Todo Sobre Espadas"
+msgstr[1] "fascículos de Todo Sobre Espadas"
+msgstr[2] "fascículos de Todo Sobre Espadas"
#. ~ Description for {'str': 'All About Swords', 'str_pl': 'issues of All
#. About Swords'}
@@ -72679,9 +72920,9 @@ msgstr ""
#: data/json/items/book/cutting.json
msgid "Spetsnaz Knife Techniques"
msgid_plural "copies of Spetsnaz Knife Techniques"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Técnicas Spetsnaz para Cuchillo"
+msgstr[1] "copias de Técnicas Spetsnaz para Cuchillo"
+msgstr[2] "copias de Técnicas Spetsnaz para Cuchillo"
#. ~ Description for {'str': 'Spetsnaz Knife Techniques', 'str_pl': 'copies of
#. Spetsnaz Knife Techniques'}
@@ -72692,9 +72933,9 @@ msgstr "Un texto clásico soviético sobre el arte de atacar con una cuchilla."
#: data/json/items/book/dodge.json
msgid "Dance Dance Dance!"
msgid_plural "issues of Dance Dance Dance!"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "¡Baila Baila Baila!"
+msgstr[1] "copias de ¡Baila Baila Baila!"
+msgstr[2] "copias de ¡Baila Baila Baila!"
#. ~ Description for {'str': 'Dance Dance Dance!', 'str_pl': 'issues of Dance
#. Dance Dance!'}
@@ -72705,9 +72946,9 @@ msgstr "Aprendé los movimientos de los bailes de moda."
#: data/json/items/book/dodge.json
msgid "The Book of Dances"
msgid_plural "copies of The Book of Dances"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "El Libro de las Danzas"
+msgstr[1] "copias de El Libro de las Danzas"
+msgstr[2] "copias de El Libro de las Danzas"
#. ~ Description for {'str': 'The Book of Dances', 'str_pl': 'copies of The
#. Book of Dances'}
@@ -72724,9 +72965,9 @@ msgstr ""
#: data/json/items/book/dodge.json
msgid "Break a Leg!"
msgid_plural "copies of Break a Leg!"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "¡Mucha mierda!"
+msgstr[1] "copias de ¡Mucha mierda!"
+msgstr[2] "copias de ¡Mucha mierda!"
#. ~ Description for {'str': 'Break a Leg!', 'str_pl': 'copies of Break a
#. Leg!'}
@@ -72737,9 +72978,9 @@ msgstr "Es la Guía de Actuación y Arte Teatral para Niños."
#: data/json/items/book/driving.json
msgid "AAA Guide"
msgid_plural "copies of AAA Guide"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Guía AAA"
+msgstr[1] "copias de Guía AAA"
+msgstr[2] "copias de Guía AAA"
#. ~ Description for {'str': 'AAA Guide', 'str_pl': 'copies of AAA Guide'}
#: data/json/items/book/driving.json
@@ -72768,9 +73009,9 @@ msgstr "Muchos artículos sobre coches y técnicas de conducción."
#: data/json/items/book/driving.json
msgid "The Rules of the Road"
msgid_plural "copies of The Rules of the Road"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Reglas de Conducción"
+msgstr[1] "copias de Reglas de Conducción"
+msgstr[2] "copias de Reglas de Conducción"
#. ~ Description for {'str': 'The Rules of the Road', 'str_pl': 'copies of The
#. Rules of the Road'}
@@ -72798,9 +73039,9 @@ msgstr ""
#: data/json/items/book/electronics.json
msgid "Advanced Electronics"
msgid_plural "copies of Advanced Electronics"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Electrónica Avanzada"
+msgstr[1] "copias de Electrónica Avanzada"
+msgstr[2] "copias de Electrónica Avanzada"
#. ~ Description for {'str': 'Advanced Electronics', 'str_pl': 'copies of
#. Advanced Electronics'}
@@ -72811,9 +73052,9 @@ msgstr "Un texto escolar sobre diseño de circuitos."
#: data/json/items/book/electronics.json
msgid "Ham Radio Illustrated"
msgid_plural "issues of Ham Radio Illustrated"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Radio-aficionado Ilustrado"
+msgstr[1] "fascículos de Radio-aficionado Ilustrado"
+msgstr[2] "fascículos de Radio-aficionado Ilustrado"
#. ~ Description for {'str': 'Ham Radio Illustrated', 'str_pl': 'issues of Ham
#. Radio Illustrated'}
@@ -72829,9 +73070,9 @@ msgstr ""
#: data/json/items/book/electronics.json
msgid "What's a Transistor?"
msgid_plural "copies of What's a Transistor?"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "¿Qué es un Transistor?"
+msgstr[1] "copias de ¿Qué es un Transistor?"
+msgstr[2] "copias de ¿Qué es un Transistor?"
#. ~ Description for {'str': "What's a Transistor?", 'str_pl': "copies of
#. What's a Transistor?"}
@@ -72842,9 +73083,9 @@ msgstr "Un manual básico sobre electrónica y diseño de circuitos."
#: data/json/items/book/electronics.json
msgid "Amateur Home Radio for Enthusiasts"
msgid_plural "copies of Amateur Home Radio for Enthusiasts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Radio Amateur para Entusiastas"
+msgstr[1] "copias de Radio Amateur para Entusiastas"
+msgstr[2] "copias de Radio Amateur para Entusiastas"
#. ~ Description for {'str': 'Amateur Home Radio for Enthusiasts', 'str_pl':
#. 'copies of Amateur Home Radio for Enthusiasts'}
@@ -72877,9 +73118,9 @@ msgstr ""
#: data/json/items/book/electronics.json
msgid "Augmentative Tech Review"
msgid_plural "issues of Augmentative Tech Review"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Reseña de Mejoramiento Técnico"
+msgstr[1] "fascículos de Reseña de Mejoramiento Técnico"
+msgstr[2] "fascículos de Reseña de Mejoramiento Técnico"
#. ~ Description for {'str': 'Augmentative Tech Review', 'str_pl': 'issues of
#. Augmentative Tech Review'}
@@ -72954,9 +73195,9 @@ msgstr ""
#: data/json/items/book/electronics.json
msgid "Electronic Circuit Theory"
msgid_plural "copies of Electronic Circuit Theory"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Teoría del Circuito Electrónico"
+msgstr[1] "copias de Teoría del Circuito Electrónico"
+msgstr[2] "copias de Teoría del Circuito Electrónico"
#. ~ Description for {'str': 'Electronic Circuit Theory', 'str_pl': 'copies of
#. Electronic Circuit Theory'}
@@ -72970,9 +73211,9 @@ msgstr ""
#: data/json/items/book/electronics.json
msgid "Robots for Fun & Profit"
msgid_plural "copies of Robots for Fun & Profit"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Robots para Diversión y Beneficio"
+msgstr[1] "copias de Robots para Diversión y Beneficio"
+msgstr[2] "copias de Robots para Diversión y Beneficio"
#. ~ Description for {'str': 'Robots for Fun & Profit', 'str_pl': 'copies of
#. Robots for Fun & Profit'}
@@ -72985,16 +73226,16 @@ msgstr "Un libro raro sobre diseño de robots, con muchas guías paso a paso."
#: data/json/items/book/electronics.json
msgid "schematics"
msgid_plural "schematics"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "esquema"
+msgstr[1] "esquemas"
+msgstr[2] "esquemas"
#: data/json/items/book/electronics.json
msgid "nurse bot schematics"
msgid_plural "nurse bot schematics"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "esquema de enfermerobot"
+msgstr[1] "esquemas de enfermerobot"
+msgstr[2] "esquemas de enfermerobot"
#. ~ Description for {'str_sp': 'nurse bot schematics'}
#: data/json/items/book/electronics.json
@@ -73012,9 +73253,9 @@ msgstr ""
#: data/json/items/book/electronics.json
msgid "grocery bot schematics"
msgid_plural "grocery bot schematics"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "esquema de reposibot"
+msgstr[1] "esquemas de reposibot"
+msgstr[2] "esquemas de reposibot"
#. ~ Description for {'str_sp': 'grocery bot schematics'}
#: data/json/items/book/electronics.json
@@ -73031,9 +73272,9 @@ msgstr ""
#: data/json/items/book/electronics.json
msgid "police bot schematics"
msgid_plural "police bot schematics"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "esquema de policíabot"
+msgstr[1] "esquemas de policíabot"
+msgstr[2] "esquemas de policíabot"
#. ~ Description for {'str_sp': 'police bot schematics'}
#: data/json/items/book/electronics.json
@@ -73049,9 +73290,9 @@ msgstr ""
#: data/json/items/book/electronics.json
msgid "eyebot schematics"
msgid_plural "eyebot schematics"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "esquema de ojobot"
+msgstr[1] "esquemas de ojobot"
+msgstr[2] "esquemas de ojobot"
#. ~ Description for {'str_sp': 'eyebot schematics'}
#: data/json/items/book/electronics.json
@@ -73067,9 +73308,9 @@ msgstr ""
#: data/json/items/book/electronics.json
msgid "security bot schematics"
msgid_plural "security bot schematics"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "esquema de robot de seguridad"
+msgstr[1] "esquemas de robot de seguridad"
+msgstr[2] "esquemas de robot de seguridad"
#. ~ Description for {'str_sp': 'security bot schematics'}
#: data/json/items/book/electronics.json
@@ -73085,9 +73326,9 @@ msgstr ""
#: data/json/items/book/electronics.json
msgid "skitterbot schematics"
msgid_plural "skitterbot schematics"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "esquema de arañabot"
+msgstr[1] "esquemas de arañabot"
+msgstr[2] "esquemas de arañabot"
#. ~ Description for {'str_sp': 'skitterbot schematics'}
#: data/json/items/book/electronics.json
@@ -73103,9 +73344,9 @@ msgstr ""
#: data/json/items/book/electronics.json
msgid "cleaner bot schematics"
msgid_plural "cleaner bot schematics"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "esquema de robot de limpieza"
+msgstr[1] "esquemas de robot de limpieza"
+msgstr[2] "esquemas de robot de limpieza"
#. ~ Description for {'str_sp': 'cleaner bot schematics'}
#: data/json/items/book/electronics.json
@@ -73139,9 +73380,9 @@ msgstr ""
#: data/json/items/book/electronics.json
msgid "riot control bot schematics"
msgid_plural "riot control bot schematics"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "esquema de antidisturbot"
+msgstr[1] "esquemas de antidisturbot"
+msgstr[2] "esquemas de antidisturbot"
#. ~ Description for {'str_sp': 'riot control bot schematics'}
#: data/json/items/book/electronics.json
@@ -73157,9 +73398,9 @@ msgstr ""
#: data/json/items/book/electronics.json
msgid "lab defense bot schematics"
msgid_plural "lab defense bot schematics"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "esquema de robot defensor de laboratorio"
+msgstr[1] "esquemas de robot defensor de laboratorio"
+msgstr[2] "esquemas de robot defensor de laboratorio"
#. ~ Description for {'str_sp': 'lab defense bot schematics'}
#: data/json/items/book/electronics.json
@@ -73176,9 +73417,9 @@ msgstr ""
#: data/json/items/book/electronics.json
msgid "dispatch schematics"
msgid_plural "dispatch schematics"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "esquema de desplegador"
+msgstr[1] "esquemas de desplegador"
+msgstr[2] "esquemas de desplegador"
#. ~ Description for {'str_sp': 'dispatch schematics'}
#: data/json/items/book/electronics.json
@@ -73196,9 +73437,9 @@ msgstr ""
#: data/json/items/book/electronics.json
msgid "military dispatch schematics"
msgid_plural "military dispatch schematics"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "esquema de desplegador militar"
+msgstr[1] "esquemas de desplegador militar"
+msgstr[2] "esquemas de desplegador militar"
#. ~ Description for {'str_sp': 'military dispatch schematics'}
#: data/json/items/book/electronics.json
@@ -73216,9 +73457,9 @@ msgstr ""
#: data/json/items/book/electronics.json
msgid "anti-materiel turret schematics"
msgid_plural "anti-materiel turret schematics"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "esquema de torreta anti-material"
+msgstr[1] "esquemas de torreta anti-material"
+msgstr[2] "esquemas de torreta anti-material"
#. ~ Description for {'str_sp': 'anti-materiel turret schematics'}
#: data/json/items/book/electronics.json
@@ -73234,9 +73475,9 @@ msgstr ""
#: data/json/items/book/electronics.json
msgid "milspec searchlight schematics"
msgid_plural "milspec searchlight schematics"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "esquema de foco reflector milspec"
+msgstr[1] "esquemas de foco reflector milspec"
+msgstr[2] "esquemas de foco reflector milspec"
#. ~ Description for {'str_sp': 'milspec searchlight schematics'}
#: data/json/items/book/electronics.json
@@ -73267,9 +73508,9 @@ msgstr ""
#: data/json/items/book/fabrication.json
msgid "The Art of Glassblowing"
msgid_plural "copies of The Art of Glassblowing"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "El Arte de Soplar Vidrio"
+msgstr[1] "copias de El Arte de Soplar Vidrio"
+msgstr[2] "copias de El Arte de Soplar Vidrio"
#. ~ Description for {'str': 'The Art of Glassblowing', 'str_pl': 'copies of
#. The Art of Glassblowing'}
@@ -73284,9 +73525,9 @@ msgstr ""
#: data/json/items/book/fabrication.json
msgid "Antique Adornments"
msgid_plural "copies of Antique Adornments"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Adornos Antiguos"
+msgstr[1] "copias de Adornos Antiguos"
+msgstr[2] "copias de Adornos Antiguos"
#. ~ Description for {'str': 'Antique Adornments', 'str_pl': 'copies of
#. Antique Adornments'}
@@ -73301,9 +73542,9 @@ msgstr ""
#: data/json/items/book/fabrication.json
msgid "Crafty Crafter's Quarterly"
msgid_plural "Crafty Crafter's Quarterlies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Artista Artesano Trimestral"
+msgstr[1] "Artista Artesano Trimestrales"
+msgstr[2] "Artista Artesano Trimestrales"
#. ~ Description for {'str': "Crafty Crafter's Quarterly", 'str_pl': "Crafty
#. Crafter's Quarterlies"}
@@ -73318,9 +73559,9 @@ msgstr ""
#: data/json/items/book/fabrication.json
msgid "101 Crafts for Beginners"
msgid_plural "copies of 101 Crafts for Beginners"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "101 Fabricaciones para Principiantes"
+msgstr[1] "copias de 101 Fabricaciones para Principiantes"
+msgstr[2] "copias de 101 Fabricaciones para Principiantes"
#. ~ Description for {'str': '101 Crafts for Beginners', 'str_pl': 'copies of
#. 101 Crafts for Beginners'}
@@ -73335,9 +73576,9 @@ msgstr ""
#: data/json/items/book/fabrication.json
msgid "The Fletcher's Friend"
msgid_plural "copies of The Fletcher's Friend"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "El Amigo del Flechero"
+msgstr[1] "copias de El Amigo del Flechero"
+msgstr[2] "copias de El Amigo del Flechero"
#. ~ Description for {'str': "The Fletcher's Friend", 'str_pl': "copies of The
#. Fletcher's Friend"}
@@ -73356,9 +73597,9 @@ msgstr ""
#: data/json/items/book/fabrication.json
msgid "The Bowyer's Buddy"
msgid_plural "copies of The Bowyer's Buddy"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "El Compañero del Arquero"
+msgstr[1] "copias de El Compañero del Arquero"
+msgstr[2] "copias de El Compañero del Arquero"
#. ~ Description for {'str': "The Bowyer's Buddy", 'str_pl': "copies of The
#. Bowyer's Buddy"}
@@ -73375,9 +73616,9 @@ msgstr ""
#: data/json/items/book/fabrication.json
msgid "The Handloader's Helper"
msgid_plural "copies of The Handloader's Helper"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "El Ayudante del Cargador a Mano"
+msgstr[1] "copias de El Ayudante del Cargador a Mano"
+msgstr[2] "copias de El Ayudante del Cargador a Mano"
#. ~ Description for {'str': "The Handloader's Helper", 'str_pl': "copies of
#. The Handloader's Helper"}
@@ -73437,9 +73678,9 @@ msgstr ""
#: data/json/items/book/fabrication.json
msgid "The Streetfighter's Sidekick"
msgid_plural "copies of The Streetfighter's Sidekick"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "El Compañero del Luchador Callejero"
+msgstr[1] "copias de El Compañero del Luchador Callejero"
+msgstr[2] "copias de El Compañero del Luchador Callejero"
#. ~ Description for {'str': "The Streetfighter's Sidekick", 'str_pl': "copies
#. of The Streetfighter's Sidekick"}
@@ -73458,9 +73699,9 @@ msgstr ""
#: data/json/items/book/fabrication.json
msgid "The Art of Japanese Armormaking"
msgid_plural "copies of The Art of Japanese Armormaking"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "El Arte Japonés de la Fabricación de Armaduras"
+msgstr[1] "copias de El Arte Japonés de la Fabricación de Armaduras"
+msgstr[2] "copias de El Arte Japonés de la Fabricación de Armaduras"
#. ~ Description for {'str': 'The Art of Japanese Armormaking', 'str_pl':
#. 'copies of The Art of Japanese Armormaking'}
@@ -73475,9 +73716,9 @@ msgstr ""
#: data/json/items/book/fabrication.json
msgid "Arms and Armor of Imperial China"
msgid_plural "copies of Arms and Armor of Imperial China"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Armas y Armaduras de la China Imperial"
+msgstr[1] "copias de Armas y Armaduras de la China Imperial"
+msgstr[2] "copias de Armas y Armaduras de la China Imperial"
#. ~ Description for {'str': 'Arms and Armor of Imperial China', 'str_pl':
#. 'copies of Arms and Armor of Imperial China'}
@@ -73496,9 +73737,9 @@ msgstr ""
#: data/json/items/book/fabrication.json
msgid "Studies in Historic Armorsmithing"
msgid_plural "copies of Studies in Historic Armorsmithing"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Estudios sobre Fabricación Histórica de Armaduras"
+msgstr[1] "copias de Estudios sobre Fabricación Histórica de Armaduras"
+msgstr[2] "copias de Estudios sobre Fabricación Histórica de Armaduras"
#. ~ Description for {'str': 'Studies in Historic Armorsmithing', 'str_pl':
#. 'copies of Studies in Historic Armorsmithing'}
@@ -73513,9 +73754,9 @@ msgstr ""
#: data/json/items/book/fabrication.json
msgid "DIY Compendium"
msgid_plural "copies of DIY Compendium"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Compendio Hágalo Usted Mismo"
+msgstr[1] "copias de Compendio Hágalo Usted Mismo"
+msgstr[2] "copias de Compendio Hágalo Usted Mismo"
#. ~ Description for {'str': 'DIY Compendium', 'str_pl': 'copies of DIY
#. Compendium'}
@@ -73530,9 +73771,9 @@ msgstr ""
#: data/json/items/book/fabrication.json
msgid "A History of Firefighting"
msgid_plural "copies of A History of Firefighting"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Una Historia de los Bomberos"
+msgstr[1] "copias de Una Historia de los Bomberos"
+msgstr[2] "copias de Una Historia de los Bomberos"
#. ~ Description for {'str': 'A History of Firefighting', 'str_pl': 'copies of
#. A History of Firefighting'}
@@ -73549,9 +73790,9 @@ msgstr ""
#: data/json/items/book/fabrication.json
msgid "Art and Science of Chemical Warfare"
msgid_plural "copies of Art and Science of Chemical Warfare"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Arte y Ciencia de las Armas Químicas"
+msgstr[1] "copias de Arte y Ciencia de las Armas Químicas"
+msgstr[2] "copias de Arte y Ciencia de las Armas Químicas"
#. ~ Description for {'str': 'Art and Science of Chemical Warfare', 'str_pl':
#. 'copies of Art and Science of Chemical Warfare'}
@@ -73570,9 +73811,9 @@ msgstr ""
#: data/json/items/book/fabrication.json
msgid "The Swords of the Samurai"
msgid_plural "copies of The Swords of the Samurai"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Las Espadas del Samurai"
+msgstr[1] "copias de Las Espadas del Samurai"
+msgstr[2] "copias de Las Espadas del Samurai"
#. ~ Description for {'str': 'The Swords of the Samurai', 'str_pl': 'copies of
#. The Swords of the Samurai'}
@@ -73589,9 +73830,9 @@ msgstr ""
#: data/json/items/book/fabrication.json
msgid "The Historic Weaponsmith"
msgid_plural "copies of The Historic Weaponsmith"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Fabricación Histórica de Armas"
+msgstr[1] "copias de Fabricación Histórica de Armas"
+msgstr[2] "copias de Fabricación Histórica de Armas"
#. ~ Description for {'str': 'The Historic Weaponsmith', 'str_pl': 'copies of
#. The Historic Weaponsmith'}
@@ -73608,9 +73849,9 @@ msgstr ""
#: data/json/items/book/fabrication.json
msgid "Welding and Metallurgy"
msgid_plural "copies of Welding and Metallurgy"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Soldadura y Metalúrgica"
+msgstr[1] "copias de Soldadura y Metalúrgica"
+msgstr[2] "copias de Soldadura y Metalúrgica"
#. ~ Description for {'str': 'Welding and Metallurgy', 'str_pl': 'copies of
#. Welding and Metallurgy'}
@@ -73625,9 +73866,9 @@ msgstr ""
#: data/json/items/book/fabrication.json
msgid "101 Home Repairs"
msgid_plural "copies of 101 Home Repairs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "101 Reparaciones Hogareñas"
+msgstr[1] "copias de 101 Reparaciones Hogareñas"
+msgstr[2] "copias de 101 Reparaciones Hogareñas"
#. ~ Description for {'str': '101 Home Repairs', 'str_pl': 'copies of 101 Home
#. Repairs'}
@@ -73642,9 +73883,9 @@ msgstr ""
#: data/json/items/book/fabrication.json
msgid "The Complete Home Repair Guide"
msgid_plural "copies of The Complete Home Repair Guide"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "La Guía Completa de Reparación Hogareña"
+msgstr[1] "copias de La Guía Completa de Reparación Hogareña"
+msgstr[2] "copias de La Guía Completa de Reparación Hogareña"
#. ~ Description for {'str': 'The Complete Home Repair Guide', 'str_pl':
#. 'copies of The Complete Home Repair Guide'}
@@ -73673,9 +73914,9 @@ msgstr "Un periódico fascinante acerca de pajareras y cómo construirlas."
#: data/json/items/book/fabrication.json
msgid "Building for Beginners"
msgid_plural "copies of Building for Beginners"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Construcción para Principiantes"
+msgstr[1] "copias de Construcción para Principiantes"
+msgstr[2] "copias de Construcción para Principiantes"
#. ~ Description for {'str': 'Building for Beginners', 'str_pl': 'copies of
#. Building for Beginners'}
@@ -73690,9 +73931,9 @@ msgstr ""
#: data/json/items/book/fabrication.json
msgid "Engineering 301"
msgid_plural "copies of Engineering 301"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Ingeniería 3"
+msgstr[1] "copias de Ingeniería 3"
+msgstr[2] "copias de Ingeniería 3"
#. ~ Description for {'str': 'Engineering 301', 'str_pl': 'copies of
#. Engineering 301'}
@@ -73703,9 +73944,9 @@ msgstr "Un libro de texto sobre ingeniería civil y construcción."
#: data/json/items/book/fabrication.json
msgid "Machinery's Handbook"
msgid_plural "copies of Machinery's Handbook"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Guía de Maquinaria"
+msgstr[1] "copias de Guía de Maquinaria"
+msgstr[2] "copias de Guía de Maquinaria"
#. ~ Description for {'str': "Machinery's Handbook", 'str_pl': "copies of
#. Machinery's Handbook"}
@@ -73743,9 +73984,9 @@ msgstr ""
#: data/json/items/book/fabrication.json
msgid "Concrete Constructions"
msgid_plural "copies of Concrete Constructions"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Construcciones Concretas"
+msgstr[1] "copias de Construcciones Concretas"
+msgstr[2] "copias de Construcciones Concretas"
#. ~ Description for {'str': 'Concrete Constructions', 'str_pl': 'copies of
#. Concrete Constructions'}
@@ -73760,9 +74001,9 @@ msgstr ""
#: data/json/items/book/firstaid.json
msgid "Guide to Advanced Emergency Care"
msgid_plural "copies of Guide to Advanced Emergency Care"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Guía de Cuidado Médico Avanzado"
+msgstr[1] "copias de Guía de Cuidado Médico Avanzado"
+msgstr[2] "copias de Guía de Cuidado Médico Avanzado"
#. ~ Description for {'str': 'Guide to Advanced Emergency Care', 'str_pl':
#. 'copies of Guide to Advanced Emergency Care'}
@@ -73777,9 +74018,9 @@ msgstr ""
#: data/json/items/book/firstaid.json
msgid "Paramedics"
msgid_plural "issues of Paramedics"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Paramédicos"
+msgstr[1] "fascículos de Paramédicos"
+msgstr[2] "fascículos de Paramédicos"
#. ~ Description for {'str': 'Paramedics', 'str_pl': 'issues of Paramedics'}
#: data/json/items/book/firstaid.json
@@ -73789,9 +74030,9 @@ msgstr "Una revista educativa para los paramédicos."
#: data/json/items/book/firstaid.json
msgid "The Big Book of First Aid"
msgid_plural "copies of The Big Book of First Aid"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "El Gran Libro de Primeros Auxilios"
+msgstr[1] "copias de El Gran Libro de Primeros Auxilios"
+msgstr[2] "copias de El Gran Libro de Primeros Auxilios"
#. ~ Description for {'str': 'The Big Book of First Aid', 'str_pl': 'copies of
#. The Big Book of First Aid'}
@@ -73803,9 +74044,9 @@ msgstr ""
#: data/json/items/book/firstaid.json
msgid "Pocket Guide to First Aid"
msgid_plural "copies of Pocket Guide to First Aid"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Guía de Bolsillo de Primeros Auxilios"
+msgstr[1] "copias de Guía de Bolsillo de Primeros Auxilios"
+msgstr[2] "copias de Guía de Bolsillo de Primeros Auxilios"
#. ~ Description for {'str': 'Pocket Guide to First Aid', 'str_pl': 'copies of
#. Pocket Guide to First Aid'}
@@ -73822,9 +74063,9 @@ msgstr ""
#: data/json/items/book/firstaid.json
msgid "First Responder Handbook"
msgid_plural "copies of First Responder Handbook"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Instructivo de Primera Respuesta"
+msgstr[1] "copias de Instructivo de Primera Respuesta"
+msgstr[2] "copias de Instructivo de Primera Respuesta"
#. ~ Description for {'str': 'First Responder Handbook', 'str_pl': 'copies of
#. First Responder Handbook'}
@@ -73852,9 +74093,9 @@ msgstr "Es una guía ilustrada acerca de tu equipo de primeros auxilios."
#: data/json/items/book/firstaid.json
msgid "Physicians' Desk Reference"
msgid_plural "copies of Physicians' Desk Reference"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Referencia de Escritorio para Médicos"
+msgstr[1] "copias de Referencia de Escritorio para Médicos"
+msgstr[2] "copias de Referencia de Escritorio para Médicos"
#. ~ Description for {'str': "Physicians' Desk Reference", 'str_pl': "copies
#. of Physicians' Desk Reference"}
@@ -73879,9 +74120,9 @@ msgstr ""
#: data/json/items/book/firstaid.json
msgid "Merck Veterinary Manual"
msgid_plural "copies of Merck Veterinary Manual"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Manual Merck Veterinaria"
+msgstr[1] "copias de Manual Merck Veterinaria"
+msgstr[2] "copias de Manual Merck Veterinaria"
#. ~ Description for {'str': 'Merck Veterinary Manual', 'str_pl': 'copies of
#. Merck Veterinary Manual'}
@@ -73904,9 +74145,9 @@ msgstr ""
#: data/json/items/book/gun.json
msgid "Guns n Ammo"
msgid_plural "issues of Guns n Ammo"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Armas y Munición"
+msgstr[1] "fascículos de Armas y Munición"
+msgstr[2] "fascículos de Armas y Munición"
#. ~ Description for {'str': 'Guns n Ammo', 'str_pl': 'issues of Guns n Ammo'}
#: data/json/items/book/gun.json
@@ -73917,9 +74158,9 @@ msgstr ""
#: data/json/items/book/gun.json
msgid "The Gun Owner's Handbook"
msgid_plural "copies of The Gun Owner's Handbook"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "La Guía del Dueño de Arma"
+msgstr[1] "copias de La Guía del Dueño de Arma"
+msgstr[2] "copias de La Guía del Dueño de Arma"
#. ~ Description for {'str': "The Gun Owner's Handbook", 'str_pl': "copies of
#. The Gun Owner's Handbook"}
@@ -73934,9 +74175,9 @@ msgstr ""
#: data/json/items/book/gun.json
msgid "Pocket Guide to Firearm Safety"
msgid_plural "copies of Pocket Guide to Firearm Safety"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Guía de Bolsillo de Seguridad de Armas de Fuego"
+msgstr[1] "copias de Guía de Bolsillo de Seguridad de Armas de Fuego"
+msgstr[2] "copias de Guía de Bolsillo de Seguridad de Armas de Fuego"
#. ~ Description for {'str': 'Pocket Guide to Firearm Safety', 'str_pl':
#. 'copies of Pocket Guide to Firearm Safety'}
@@ -73990,9 +74231,9 @@ msgstr ""
#: data/json/items/book/lockpick.json
msgid "MIT Guide to Lock Picking"
msgid_plural "copies of MIT Guide to Lock Picking"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Guía MIT de Ganzúas"
+msgstr[1] "copias de Guía MIT de Ganzúas"
+msgstr[2] "copias de Guía MIT de Ganzúas"
#. ~ Description for {'str': 'MIT Guide to Lock Picking', 'str_pl': 'copies of
#. MIT Guide to Lock Picking'}
@@ -74007,9 +74248,9 @@ msgstr ""
#: data/json/items/book/maps.json
msgid "abstract map"
msgid_plural "abstract maps"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mapa abstracto"
+msgstr[1] "mapas abstractos"
+msgstr[2] "mapas abstractos"
#: data/json/items/book/maps.json
msgid "scientific operations map"
@@ -74123,9 +74364,9 @@ msgstr ""
#: data/json/items/book/maps.json
msgid "trail guide"
msgid_plural "trail guides"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "guía de sendas"
+msgstr[1] "guías de sendas"
+msgstr[2] "guías de sendas"
#. ~ Use action message for {'str': 'trail guide'}.
#: data/json/items/book/maps.json
@@ -74593,9 +74834,9 @@ msgstr ""
#: data/json/items/book/mechanics.json
msgid "Internal Combustion Fundamentals"
msgid_plural "copies of Internal Combustion Fundamentals"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Fundamentos de la Combustión Interna"
+msgstr[1] "copias de Fundamentos de la Combustión Interna"
+msgstr[2] "copias de Fundamentos de la Combustión Interna"
#. ~ Description for {'str': 'Internal Combustion Fundamentals', 'str_pl':
#. 'copies of Internal Combustion Fundamentals'}
@@ -74610,9 +74851,9 @@ msgstr ""
#: data/json/items/book/mechanics.json
msgid "army improvised field repairs manual"
msgid_plural "army improvised field repairs manuals"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "manual de reparaciones improvisadas"
+msgstr[1] "manuales de reparaciones improvisadas"
+msgstr[2] "manuales de reparaciones improvisadas"
#. ~ Description for {'str': 'army improvised field repairs manual'}
#: data/json/items/book/mechanics.json
@@ -74626,9 +74867,9 @@ msgstr ""
#: data/json/items/book/mechanics.json
msgid "Popular Mechanics"
msgid_plural "issues of Popular Mechanics"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Mecánica Popular"
+msgstr[1] "fascículos de Mecánica Popular"
+msgstr[2] "fascículos de Mecánica Popular"
#. ~ Description for {'str': 'Popular Mechanics', 'str_pl': 'issues of Popular
#. Mechanics'}
@@ -74643,9 +74884,9 @@ msgstr ""
#: data/json/items/book/mechanics.json
msgid "Under the Hood"
msgid_plural "copies of Under the Hood"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Debajo del Capó"
+msgstr[1] "copias de Debajo del Capó"
+msgstr[2] "copias de Debajo del Capó"
#. ~ Description for {'str': 'Under the Hood', 'str_pl': 'copies of Under the
#. Hood'}
@@ -74677,9 +74918,9 @@ msgstr ""
#: data/json/items/book/mechanics.json
msgid "Biodiesel: Renewable Fuel Resource"
msgid_plural "copies of Biodiesel: Renewable Fuel Resource"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Biodiésel: Fuente de Combustible Renovable"
+msgstr[1] "copias de Biodiésel: Fuente de Combustible Renovable"
+msgstr[2] "copias de Biodiésel: Fuente de Combustible Renovable"
#. ~ Description for {'str': 'Biodiesel: Renewable Fuel Resource', 'str_pl':
#. 'copies of Biodiesel: Renewable Fuel Resource'}
@@ -74690,9 +74931,9 @@ msgstr "Es un manual para estudiantes acerca del biodiésel."
#: data/json/items/book/mechanics.json
msgid "Mechanical Mastery"
msgid_plural "copies of Mechanical Mastery"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Maestría Mecánica"
+msgstr[1] "copias de Maestría Mecánica"
+msgstr[2] "copias de Maestría Mecánica"
#. ~ Description for {'str': 'Mechanical Mastery', 'str_pl': 'copies of
#. Mechanical Mastery'}
@@ -74723,9 +74964,9 @@ msgstr ""
#: data/json/items/book/melee.json
msgid "Close Quarter Fighting Manual"
msgid_plural "copies of Close Quarter Fighting Manual"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Manual de Lucha en Espacios Cerrados"
+msgstr[1] "copias de Manual de Lucha en Espacios Cerrados"
+msgstr[2] "copias de Manual de Lucha en Espacios Cerrados"
#. ~ Description for {'str': 'Close Quarter Fighting Manual', 'str_pl':
#. 'copies of Close Quarter Fighting Manual'}
@@ -74740,9 +74981,9 @@ msgstr ""
#: data/json/items/book/misc.json
msgid "paperback abstract"
msgid_plural "paperback abstracts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "reseña en rústica"
+msgstr[1] "reseñas en rústica"
+msgstr[2] "reseñas en rústica"
#. ~ Description for {'str': 'paperback abstract'}
#: data/json/items/book/misc.json
@@ -74764,9 +75005,9 @@ msgstr "Un comic de superheroes."
#: data/json/items/book/misc.json
msgid "King James Bible"
msgid_plural "copies of King James Bible"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Biblia del Rey Jacobo"
+msgstr[1] "copias de Biblia del Rey Jacobo"
+msgstr[2] "copias de Biblia del Rey Jacobo"
#. ~ Description for {'str': 'King James Bible', 'str_pl': 'copies of King
#. James Bible'}
@@ -75057,9 +75298,9 @@ msgstr ""
#: data/json/items/book/misc.json
msgid "Computer Gaming"
msgid_plural "issues of Computer Gaming"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Juegos de Computadora"
+msgstr[1] "fascículos de Juegos de Computadora"
+msgstr[2] "fascículos de Juegos de Computadora"
#. ~ Description for {'str': 'Computer Gaming', 'str_pl': 'issues of Computer
#. Gaming'}
@@ -75087,9 +75328,9 @@ msgstr ""
#: data/json/items/book/misc.json
msgid "Playboy"
msgid_plural "issues of Playboy"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Playboy"
+msgstr[1] "fascículos de Playboy"
+msgstr[2] "fascículos de Playboy"
#. ~ Description for {'str': 'Playboy', 'str_pl': 'issues of Playboy'}
#: data/json/items/book/misc.json
@@ -75128,9 +75369,9 @@ msgstr ""
#: data/json/items/book/misc.json
msgid "Rural Digest-Examiner"
msgid_plural "issues of Rural Digest-Examiner"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Compendio de Examinadores Rurales"
+msgstr[1] "fascículos de Compendio de Examinadores Rurales"
+msgstr[2] "fascículos de Compendio de Examinadores Rurales"
#. ~ Description for {'str': 'Rural Digest-Examiner', 'str_pl': 'issues of
#. Rural Digest-Examiner'}
@@ -76671,9 +76912,9 @@ msgstr "Es una copia de \"Pedro Simple\" de Frederick Marryat."
#: data/json/items/book/misc.json
msgid "collector's edition book"
msgid_plural "collector's edition books"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "libro edición de colección"
+msgstr[1] "libros edición de colección"
+msgstr[2] "libros edición de colección"
#. ~ Description for {'str': "collector's edition book"}
#: data/json/items/book/misc.json
@@ -76873,9 +77114,9 @@ msgstr ""
#: data/json/items/book/pistol.json
msgid "Tactical Handgun Digest"
msgid_plural "issues of Tactical Handgun Digest"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Compendio de Pistolas Tácticas"
+msgstr[1] "fascículos de Compendio de Pistolas Tácticas"
+msgstr[2] "fascículos de Compendio de Pistolas Tácticas"
#. ~ Description for {'str': 'Tactical Handgun Digest', 'str_pl': 'issues of
#. Tactical Handgun Digest'}
@@ -76908,9 +77149,9 @@ msgstr ""
#: data/json/items/book/rifle.json
msgid "Modern Rifleman"
msgid_plural "issues of Modern Rifleman"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Rifleros Modernos"
+msgstr[1] "fascículos de Rifleros Modernos"
+msgstr[2] "fascículos de Rifleros Modernos"
#. ~ Description for {'str': 'Modern Rifleman', 'str_pl': 'issues of Modern
#. Rifleman'}
@@ -76941,9 +77182,9 @@ msgstr ""
#: data/json/items/book/shotgun.json
msgid "Trap and Field"
msgid_plural "issues of Trap and Field"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Trampa y Campo"
+msgstr[1] "fascículos de Trampa y Campo"
+msgstr[2] "fascículos de Trampa y Campo"
#. ~ Description for {'str': 'Trap and Field', 'str_pl': 'issues of Trap and
#. Field'}
@@ -76958,9 +77199,9 @@ msgstr ""
#: data/json/items/book/shotgun.json
msgid "Shotguns: The Art and Science"
msgid_plural "copies of Shotguns: The Art and Science"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Escopetas: el Arte y la Ciencia"
+msgstr[1] "copias de Escopetas: el Arte y la Ciencia"
+msgstr[2] "copias de Escopetas: el Arte y la Ciencia"
#. ~ Description for {'str': 'Shotguns: The Art and Science', 'str_pl':
#. 'copies of Shotguns: The Art and Science'}
@@ -76975,9 +77216,9 @@ msgstr ""
#: data/json/items/book/smg.json
msgid "Submachine Gun Enthusiast"
msgid_plural "issues of Submachine Gun Enthusiast"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Entusiastas de los Subfusiles"
+msgstr[1] "fascículos de Entusiastas de los Subfusiles"
+msgstr[2] "fascículos de Entusiastas de los Subfusiles"
#. ~ Description for {'str': 'Submachine Gun Enthusiast', 'str_pl': 'issues of
#. Submachine Gun Enthusiast'}
@@ -76993,9 +77234,9 @@ msgstr ""
#: data/json/items/book/smg.json
msgid "The Submachine Gun Handbook"
msgid_plural "copies of The Submachine Gun Handbook"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "El Instructivo sobre Fusiles"
+msgstr[1] "copias de El Instructivo sobre Fusiles"
+msgstr[2] "copias de El Instructivo sobre Fusiles"
#. ~ Description for {'str': 'The Submachine Gun Handbook', 'str_pl': 'copies
#. of The Submachine Gun Handbook'}
@@ -77026,9 +77267,9 @@ msgstr ""
#: data/json/items/book/speech.json
msgid "Self-Esteem for Dummies"
msgid_plural "copies of Self-Esteem for Dummies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Autoestima para Tontos"
+msgstr[1] "copias de Autoestima para Tontos"
+msgstr[2] "copias de Autoestima para Tontos"
#. ~ Description for {'str': 'Self-Esteem for Dummies', 'str_pl': 'copies of
#. Self-Esteem for Dummies'}
@@ -77039,9 +77280,9 @@ msgstr "Lleno de consejos útiles para demostrar confianza en tus palabras."
#: data/json/items/book/speech.json
msgid "Principles of Effective Communication"
msgid_plural "copies of Principles of Effective Communication"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Principios de Comunicaciones Efectivas"
+msgstr[1] "copias de Principios de Comunicaciones Efectivas"
+msgstr[2] "copias de Principios de Comunicaciones Efectivas"
#. ~ Description for {'str': 'Principles of Effective Communication',
#. 'str_pl': 'copies of Principles of Effective Communication'}
@@ -77053,9 +77294,9 @@ msgstr ""
#: data/json/items/book/speech.json
msgid "Dungeon Master's Guide: 6th Edition"
msgid_plural "copies of Dungeon Master's Guide: 6th Edition"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Guía del Dungeon Master: 6ta edición"
+msgstr[1] "copias de Guía del Dungeon Master: 6ta edición"
+msgstr[2] "copias de Guía del Dungeon Master: 6ta edición"
#. ~ Description for {'str': "Dungeon Master's Guide: 6th Edition", 'str_pl':
#. "copies of Dungeon Master's Guide: 6th Edition"}
@@ -77123,9 +77364,9 @@ msgstr ""
#: data/json/items/book/survival.json
msgid "Through the Lens"
msgid_plural "copies of Through the Lens"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "A través de la Lente"
+msgstr[1] "copias de A través de la Lente"
+msgstr[2] "copias de A través de la Lente"
#. ~ Description for {'str': 'Through the Lens', 'str_pl': 'copies of Through
#. the Lens'}
@@ -77162,9 +77403,9 @@ msgstr ""
#: data/json/items/book/survival.json
msgid "Outdoor Adventures"
msgid_plural "issues of Outdoor Adventures"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Aventuras al Aire Libre"
+msgstr[1] "fascículos de Aventuras al Aire Libre"
+msgstr[2] "fascículos de Aventuras al Aire Libre"
#. ~ Description for {'str': 'Outdoor Adventures', 'str_pl': 'issues of
#. Outdoor Adventures'}
@@ -77195,9 +77436,9 @@ msgstr ""
#: data/json/items/book/survival.json
msgid "Pocket Survival Guide"
msgid_plural "copies of Pocket Survival Guide"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Guía de Bolsillo de Supervivencia"
+msgstr[1] "copias de Guía de Bolsillo de Supervivencia"
+msgstr[2] "copias de Guía de Bolsillo de Supervivencia"
#. ~ Description for {'str': 'Pocket Survival Guide', 'str_pl': 'copies of
#. Pocket Survival Guide'}
@@ -77214,9 +77455,9 @@ msgstr ""
#: data/json/items/book/survival.json
msgid "Autobiography of a Mountain Man"
msgid_plural "copies of Autobiography of a Mountain Man"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Autobiografía de los Montañistas"
+msgstr[1] "copias de Autobiografía de los Montañistas"
+msgstr[2] "copias de Autobiografía de los Montañistas"
#. ~ Description for {'str': 'Autobiography of a Mountain Man', 'str_pl':
#. 'copies of Autobiography of a Mountain Man'}
@@ -77233,9 +77474,9 @@ msgstr ""
#: data/json/items/book/survival.json
msgid "Outdoor Survival Guide"
msgid_plural "copies of Outdoor Survival Guide"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Guía de Supervivencia al Aire Libre"
+msgstr[1] "copias de Guía de Supervivencia al Aire Libre"
+msgstr[2] "copias de Guía de Supervivencia al Aire Libre"
#. ~ Description for {'str': 'Outdoor Survival Guide', 'str_pl': 'copies of
#. Outdoor Survival Guide'}
@@ -77250,9 +77491,9 @@ msgstr ""
#: data/json/items/book/survival.json
msgid "Natural Remedies of New England"
msgid_plural "copies of Natural Remedies of New England"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Remedios Naturales de New England"
+msgstr[1] "copias de Remedios Naturales de New England"
+msgstr[2] "copias de Remedios Naturales de New England"
#. ~ Description for {'str': 'Natural Remedies of New England', 'str_pl':
#. 'copies of Natural Remedies of New England'}
@@ -77267,9 +77508,9 @@ msgstr ""
#: data/json/items/book/swimming.json
msgid "Swim Planet"
msgid_plural "issues of Swim Planet"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Planeta Natación"
+msgstr[1] "fascículos de Planeta Natación"
+msgstr[2] "fascículos de Planeta Natación"
#. ~ Description for {'str': 'Swim Planet', 'str_pl': 'issues of Swim Planet'}
#: data/json/items/book/swimming.json
@@ -77279,9 +77520,9 @@ msgstr "El recurso líder en el mundo sobre deportes acuáticos."
#: data/json/items/book/swimming.json
msgid "Water Survival Training Field Manual"
msgid_plural "copies of Water Survival Training Field Manual"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Manual de Supervivencia en el Agua"
+msgstr[1] "copias de Manual de Supervivencia en el Agua"
+msgstr[2] "copias de Manual de Supervivencia en el Agua"
#. ~ Description for {'str': 'Water Survival Training Field Manual', 'str_pl':
#. 'copies of Water Survival Training Field Manual'}
@@ -77350,9 +77591,9 @@ msgstr ""
#: data/json/items/book/tailor.json
msgid "Sew What? Clothing!"
msgid_plural "copies of Sew What? Clothing!"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "¿Coser qué? ¡Ropa!"
+msgstr[1] "copias de ¿Coser qué? ¡Ropa!"
+msgstr[2] "copias de ¿Coser qué? ¡Ropa!"
#. ~ Description for {'str': 'Sew What? Clothing!', 'str_pl': 'copies of Sew
#. What? Clothing!'}
@@ -77381,9 +77622,9 @@ msgstr ""
#: data/json/items/book/tailor.json
msgid "Traditional Japanese Kimono"
msgid_plural "copies of Traditional Japanese Kimono"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Kimonos Tradicionales Japoneses"
+msgstr[1] "copias de Kimonos Tradicionales Japoneses"
+msgstr[2] "copias de Kimonos Tradicionales Japoneses"
#. ~ Description for {'str': 'Traditional Japanese Kimono', 'str_pl': 'copies
#. of Traditional Japanese Kimono'}
@@ -77396,9 +77637,9 @@ msgstr ""
#: data/json/items/book/tailor.json
msgid "Friendly, Humane Fashion"
msgid_plural "copies of Friendly, Humane Fashion"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Moda Humana, Amigable"
+msgstr[1] "copias de Moda Humana, Amigable"
+msgstr[2] "copias de Moda Humana, Amigable"
#. ~ Description for {'str': 'Friendly, Humane Fashion', 'str_pl': 'copies of
#. Friendly, Humane Fashion'}
@@ -77417,9 +77658,9 @@ msgstr ""
#: data/json/items/book/tailor.json
msgid "Sewing Techniques for Designers"
msgid_plural "copies of Sewing Techniques for Designers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Técnicas de Costura para Diseñadores"
+msgstr[1] "copias de Técnicas de Costura para Diseñadores"
+msgstr[2] "copias de Técnicas de Costura para Diseñadores"
#. ~ Description for {'str': 'Sewing Techniques for Designers', 'str_pl':
#. 'copies of Sewing Techniques for Designers'}
@@ -77434,9 +77675,9 @@ msgstr ""
#: data/json/items/book/throw.json
msgid "Diskobolus"
msgid_plural "issues of Diskobolus"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Diskobolos"
+msgstr[1] "copias de Diskobolos"
+msgstr[2] "copias de Diskobolos"
#. ~ Description for {'str': 'Diskobolus', 'str_pl': 'issues of Diskobolus'}
#: data/json/items/book/throw.json
@@ -77448,9 +77689,9 @@ msgstr ""
#: data/json/items/book/throw.json
msgid "The Complete Guide to Pitching"
msgid_plural "copies of The Complete Guide to Pitching"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Guía Completa para el Lanzador"
+msgstr[1] "copias de Guía Completa para el Lanzador"
+msgstr[2] "copias de Guía Completa para el Lanzador"
#. ~ Description for {'str': 'The Complete Guide to Pitching', 'str_pl':
#. 'copies of The Complete Guide to Pitching'}
@@ -77466,9 +77707,9 @@ msgstr ""
#: data/json/items/book/traps.json
msgid "How to Trap Anything"
msgid_plural "copies of How to Trap Anything"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Cómo Atrapar Cualquier Cosa"
+msgstr[1] "copias de Cómo Atrapar Cualquier Cosa"
+msgstr[2] "copias de Cómo Atrapar Cualquier Cosa"
#. ~ Description for {'str': 'How to Trap Anything', 'str_pl': 'copies of How
#. to Trap Anything'}
@@ -77482,9 +77723,9 @@ msgstr ""
#: data/json/items/book/traps.json
msgid "Trapper's Life"
msgid_plural "issues of Trapper's Life"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Vida de Trampero"
+msgstr[1] "copias de Vida de Trampero"
+msgstr[2] "copias de Vida de Trampero"
#. ~ Description for {'str': "Trapper's Life", 'str_pl': "issues of Trapper's
#. Life"}
@@ -77499,9 +77740,9 @@ msgstr ""
#: data/json/items/book/traps.json
msgid "The Modern Trapper"
msgid_plural "copies of The Modern Trapper"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "El Trampero Moderno"
+msgstr[1] "copias de El Trampero Moderno"
+msgstr[2] "copias de El Trampero Moderno"
#. ~ Description for {'str': 'The Modern Trapper', 'str_pl': 'copies of The
#. Modern Trapper'}
@@ -77514,9 +77755,9 @@ msgstr ""
#: data/json/items/book/traps.json
msgid "FM 20-32 Mine/Countermine Operations manual"
msgid_plural "copies of FM 20-32 Mine/Countermine Operations manual"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Manual de Mina/Contramina FM 20-32"
+msgstr[1] "copias de Manual de Mina/Contramina FM 20-32"
+msgstr[2] "copias de Manual de Mina/Contramina FM 20-32"
#. ~ Description for {'str': 'FM 20-32 Mine/Countermine Operations manual',
#. 'str_pl': 'copies of FM 20-32 Mine/Countermine Operations manual'}
@@ -77533,9 +77774,9 @@ msgstr ""
#: data/json/items/book/traps.json
msgid "The Compleat Trapper"
msgid_plural "copies of The Compleat Trapper"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "El Trampero Total"
+msgstr[1] "copias de El Trampero Total"
+msgstr[2] "copias de El Trampero Total"
#. ~ Description for {'//~': 'The spelling is intentionally archaic, as this
#. form is commonly used in the titles of books.', 'str': 'The Compleat
@@ -77586,9 +77827,9 @@ msgstr ""
#: data/json/items/book/unarmed.json
msgid "101 Wrestling Moves"
msgid_plural "copies of 101 Wrestling Moves"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "101 Movimientos de Lucha"
+msgstr[1] "copias de 101 Movimientos de Lucha"
+msgstr[2] "copias de 101 Movimientos de Lucha"
#. ~ Description for {'str': '101 Wrestling Moves', 'str_pl': 'copies of 101
#. Wrestling Moves'}
@@ -77604,9 +77845,9 @@ msgstr ""
#: data/json/items/classes/book.json
msgid "readable magazine"
msgid_plural "readable magazines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "revista legible"
+msgstr[1] "revistas legibles"
+msgstr[2] "revistas legibles"
#: data/json/items/classes/book.json
msgid "martial art manual"
@@ -77618,16 +77859,16 @@ msgstr[2] ""
#: data/json/items/classes/comestible.json
msgid "Spice"
msgid_plural "Spices"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Condimento"
+msgstr[1] "Condimentos"
+msgstr[2] "Condimentos"
#: data/json/items/classes/gun.json
msgid "base gun"
msgid_plural "base guns"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "arma básica"
+msgstr[1] "armas básicas"
+msgstr[2] "armas básicas"
#: data/json/items/classes/gun.json
msgid "base flamethrower"
@@ -77677,9 +77918,9 @@ msgstr[2] ""
#: data/json/items/classes/gun.json
msgid "base pistol"
msgid_plural "base pistols"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pistola básica"
+msgstr[1] "pistolas básicas"
+msgstr[2] "pistolas básicas"
#: data/json/items/classes/gun.json data/json/items/classes/range.json
#: data/json/items/gun/20x66mm.json data/json/items/gun/bio.json
@@ -77749,9 +77990,9 @@ msgstr[2] "rifles de acción manual"
#: data/json/items/classes/gun.json
msgid "semi-automatic rifle"
msgid_plural "semi-automatic rifles"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rifle semi-automático"
+msgstr[1] "rifles semi-automáticos"
+msgstr[2] "rifles semi-automáticos"
#: data/json/items/classes/gun.json
msgid "fully automatic rifle"
@@ -77829,9 +78070,9 @@ msgstr[2] ""
#: data/json/items/classes/gun.json data/mods/Generic_Guns/firearms/shot.json
msgid "pump action shotgun"
msgid_plural "pump action shotguns"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "escopeta de acción de bombeo"
+msgstr[1] "escopetas de acción de bombeo"
+msgstr[2] "escopetas de acción de bombeo"
#: data/json/items/classes/gun.json data/json/items/gun/20x66mm.json
#: data/mods/Magiclysm/items/enchanted_ranged.json
@@ -77954,9 +78195,9 @@ msgstr "tirar"
#: data/mods/No_Fungi/comestibles.json
msgid "marloss wine"
msgid_plural "marloss wine"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "vino de marloss"
+msgstr[1] "vino de marloss"
+msgstr[2] "vino de marloss"
#. ~ Description for {'str_sp': 'marloss wine'}
#: data/json/items/comestibles/alcohol.json
@@ -77966,9 +78207,9 @@ msgstr "Es un vino blanco viscoso, hecho con la fruta del marloss."
#: data/json/items/comestibles/alcohol.json
msgid "Riesling"
msgid_plural "Riesling"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Riesling"
+msgstr[1] "Riesling"
+msgstr[2] "Riesling"
#. ~ Description for {'str_sp': 'Riesling'}
#: data/json/items/comestibles/alcohol.json
@@ -77990,9 +78231,9 @@ msgstr "El vino más popular de Estados Unidos, y con razón."
#: data/json/items/comestibles/alcohol.json
msgid "Cabernet Sauvignon"
msgid_plural "Cabernet Sauvignon"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Cabernet Sauvignon"
+msgstr[1] "Cabernet Sauvignon"
+msgstr[2] "Cabernet Sauvignon"
#. ~ Description for {'str_sp': 'Cabernet Sauvignon'}
#: data/json/items/comestibles/alcohol.json
@@ -78022,9 +78263,9 @@ msgstr ""
#: data/json/items/comestibles/alcohol.json
msgid "marsala"
msgid_plural "marsala"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "marsala"
+msgstr[1] "marsala"
+msgstr[2] "marsala"
#. ~ Description for {'str_sp': 'marsala'}
#: data/json/items/comestibles/alcohol.json
@@ -78034,9 +78275,9 @@ msgstr "Es un vino servido comúnmente con platos de restoranes italianos."
#: data/json/items/comestibles/alcohol.json
msgid "vermouth"
msgid_plural "vermouth"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "vermú"
+msgstr[1] "vermú"
+msgstr[2] "vermú"
#. ~ Description for {'str_sp': 'vermouth'}
#: data/json/items/comestibles/alcohol.json
@@ -78050,9 +78291,9 @@ msgstr ""
#: data/json/items/comestibles/alcohol.json
msgid "barley wine"
msgid_plural "barley wine"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "vino de cebada"
+msgstr[1] "vino de cebada"
+msgstr[2] "vino de cebada"
#. ~ Description for {'str_sp': 'barley wine'}
#: data/json/items/comestibles/alcohol.json
@@ -78344,9 +78585,9 @@ msgstr ""
#: data/json/items/comestibles/alcohol.json
msgid "burdock wine"
msgid_plural "burdock wine"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "vino de bardana"
+msgstr[1] "vino de bardana"
+msgstr[2] "vino de bardana"
#. ~ Description for {'str_sp': 'burdock wine'}
#: data/json/items/comestibles/alcohol.json
@@ -78549,9 +78790,9 @@ msgstr "De los mejores whiskys."
#: data/json/items/comestibles/alcohol.json
msgid "single pot still Irish whiskey"
msgid_plural "single pot still Irish whiskey"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "whisky irlandés de alambique único"
+msgstr[1] "whisky irlandés de alambique único"
+msgstr[2] "whisky irlandés de alambique único"
#. ~ Description for {'str_sp': 'single pot still Irish whiskey'}
#: data/json/items/comestibles/alcohol.json
@@ -78562,9 +78803,9 @@ msgstr ""
#: data/json/items/comestibles/alcohol.json
msgid "cheap whiskey"
msgid_plural "cheap whiskey"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "whisky barato"
+msgstr[1] "whisky barato"
+msgstr[2] "whisky barato"
#. ~ Description for {'str_sp': 'cheap whiskey'}
#: data/json/items/comestibles/alcohol.json
@@ -78574,9 +78815,9 @@ msgstr "Es un whisky de mezcla muy barato."
#: data/json/items/comestibles/alcohol.json
msgid "Canadian whiskey"
msgid_plural "Canadian whiskey"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "whisky canadiense"
+msgstr[1] "whisky canadiense"
+msgstr[2] "whisky canadiense"
#. ~ Description for {'str_sp': 'Canadian whiskey'}
#: data/json/items/comestibles/alcohol.json
@@ -78586,9 +78827,9 @@ msgstr "Es un licor multigrano, hecho con pulpa de maíz y centeno."
#: data/json/items/comestibles/alcohol.json
msgid "sherry"
msgid_plural "sherry"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "jerez"
+msgstr[1] "jerez"
+msgstr[2] "jerez"
#. ~ Description for {'str_sp': 'sherry'}
#: data/json/items/comestibles/alcohol.json
@@ -78601,9 +78842,9 @@ msgstr ""
#: data/json/items/comestibles/alcohol.json
msgid "Bristol Cream"
msgid_plural "Bristol Cream"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Bristol Cream"
+msgstr[1] "Bristol Cream"
+msgstr[2] "Bristol Cream"
#. ~ Description for {'str_sp': 'Bristol Cream'}
#: data/json/items/comestibles/alcohol.json
@@ -78617,9 +78858,9 @@ msgstr ""
#: data/json/items/comestibles/alcohol.json
msgid "Madeira wine"
msgid_plural "Madeira wine"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "vino Madeira"
+msgstr[1] "vino Madeira"
+msgstr[2] "vino Madeira"
#. ~ Description for {'str_sp': 'Madeira wine'}
#: data/json/items/comestibles/alcohol.json
@@ -78631,9 +78872,9 @@ msgstr ""
#: data/json/items/comestibles/alcohol.json
msgid "fancy hobo"
msgid_plural "fancy hobo"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "indigente extravagante"
+msgstr[1] "indigentes extravagantes"
+msgstr[2] "indigentes extravagantes"
#. ~ Description for {'str_sp': 'fancy hobo'}
#: data/json/items/comestibles/alcohol.json
@@ -78643,9 +78884,9 @@ msgstr "Definitivamente, tiene el gusto de una bebida de indigentes."
#: data/json/items/comestibles/alcohol.json
msgid "kalimotxo"
msgid_plural "kalimotxo"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "jote"
+msgstr[1] "jotes"
+msgstr[2] "jotes"
#. ~ Description for {'str_sp': 'kalimotxo'}
#: data/json/items/comestibles/alcohol.json
@@ -78660,9 +78901,9 @@ msgstr ""
#: data/json/items/comestibles/alcohol.json
msgid "bee's knees"
msgid_plural "bee's knees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rodillas de abeja"
+msgstr[1] "rodillas de abeja"
+msgstr[2] "rodillas de abeja"
#. ~ Description for {'str_sp': "bee's knees"}
#: data/json/items/comestibles/alcohol.json
@@ -78688,9 +78929,9 @@ msgstr "Una bebida que se hace mezclando whisky con zumo de limón."
#: data/json/items/comestibles/alcohol.json
msgid "honeygold brew"
msgid_plural "honeygold brews"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "té mieldorado"
+msgstr[1] "tés mieldorados"
+msgstr[2] "tés mieldorados"
#. ~ Description for honeygold brew
#: data/json/items/comestibles/alcohol.json
@@ -78724,9 +78965,9 @@ msgstr ""
#: data/json/items/comestibles/alcohol.json
msgid "spiked eggnog"
msgid_plural "spiked eggnogs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "ponche de huevo con alcohol"
+msgstr[1] "ponches de huevo con alcohol"
+msgstr[2] "ponches de huevo con alcohol"
#. ~ Description for spiked eggnog
#: data/json/items/comestibles/alcohol.json
@@ -78742,9 +78983,9 @@ msgstr ""
#: data/json/items/comestibles/alcohol.json
msgid "martini"
msgid_plural "martinis"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "martini"
+msgstr[1] "martini"
+msgstr[2] "martini"
#. ~ Description for martini
#: data/json/items/comestibles/alcohol.json
@@ -78758,9 +78999,9 @@ msgstr ""
#: data/json/items/comestibles/bread.json
msgid "donut holes"
msgid_plural "donut holes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "timbit"
+msgstr[1] "timbits"
+msgstr[2] "timbits"
#. ~ Description for {'str_sp': 'donut holes'}
#: data/json/items/comestibles/bread.json
@@ -78775,9 +79016,9 @@ msgstr ""
#: data/json/items/comestibles/bread.json
msgid "juvenile sourdough starter"
msgid_plural "juvenile sourdough starters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "masa madre nueva"
+msgstr[1] "masas madre nuevas"
+msgstr[2] "masas madre nuevas"
#. ~ Use action msg for {'str': 'juvenile sourdough starter'}.
#: data/json/items/comestibles/bread.json
@@ -78853,9 +79094,9 @@ msgstr ""
#: data/json/items/comestibles/bread.json
msgid "sourdough bread"
msgid_plural "sourdough breads"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pan de masa madre"
+msgstr[1] "panes de masa madre"
+msgstr[2] "panes de masa madre"
#. ~ Description for sourdough bread
#: data/json/items/comestibles/bread.json
@@ -78869,9 +79110,9 @@ msgstr ""
#: data/json/items/comestibles/bread.json
msgid "flatbread"
msgid_plural "flatbreads"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pan sin levadura"
+msgstr[1] "panes sin levadura"
+msgstr[2] "panes sin levadura"
#. ~ Description for flatbread
#: data/json/items/comestibles/bread.json
@@ -78917,9 +79158,9 @@ msgstr "Pan de maíz saludable y atiborra."
#: data/json/items/comestibles/bread.json
msgid "johnnycake"
msgid_plural "johnnycakes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "juanqueque"
+msgstr[1] "juanqueques"
+msgstr[2] "juanqueques"
#. ~ Description for johnnycake
#: data/json/items/comestibles/bread.json
@@ -78929,9 +79170,9 @@ msgstr "Es un pedazo de pan frito denso y sabroso."
#: data/json/items/comestibles/bread.json
msgid "corn tortilla"
msgid_plural "corn tortillas"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tortilla de maíz"
+msgstr[1] "tortillas de maíz"
+msgstr[2] "tortillas de maíz"
#. ~ Description for corn tortilla
#: data/json/items/comestibles/bread.json
@@ -78941,9 +79182,9 @@ msgstr "Es una masa plana y redonda hecha de harina de maíz finamente molida."
#: data/json/items/comestibles/bread.json
msgid "hardtack"
msgid_plural "hardtacks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "galleta náutica"
+msgstr[1] "galletas náuticas"
+msgstr[2] "galletas náuticas"
#. ~ Description for hardtack
#: data/json/items/comestibles/bread.json
@@ -78988,9 +79229,9 @@ msgstr ""
#: data/json/items/comestibles/brewing.json
msgid "mycus wine must"
msgid_plural "mycus wine musts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mosto de vino de mycus"
+msgstr[1] "mostos de vino de mycus"
+msgstr[2] "mostos de vino de mycus"
#. ~ Description for mycus wine must
#: data/json/items/comestibles/brewing.json
@@ -79004,9 +79245,9 @@ msgstr ""
#: data/json/items/comestibles/brewing.json
msgid "whiskey wort"
msgid_plural "whiskey worts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mosto de whisky"
+msgstr[1] "mostos de whisky"
+msgstr[2] "mostos de whisky"
#. ~ Description for whiskey wort
#: data/json/items/comestibles/brewing.json
@@ -79033,9 +79274,9 @@ msgstr ""
#: data/json/items/comestibles/brewing.json
msgid "fermenting gin mash"
msgid_plural "fermenting gin mashes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pasta de gin fermentando"
+msgstr[1] "pastas de gin fermentando"
+msgstr[2] "pastas de gin fermentando"
#. ~ Description for {'str': 'fermenting gin mash', 'str_pl': 'fermenting gin
#. mashes'}
@@ -79047,9 +79288,9 @@ msgstr ""
#: data/json/items/comestibles/brewing.json
msgid "gin mash"
msgid_plural "gin mashes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pasta de gin"
+msgstr[1] "pastas de gin"
+msgstr[2] "pastas de gin"
#. ~ Description for {'str': 'gin mash', 'str_pl': 'gin mashes'}
#: data/json/items/comestibles/brewing.json
@@ -79063,9 +79304,9 @@ msgstr ""
#: data/json/items/comestibles/brewing.json
msgid "vodka wort"
msgid_plural "vodka worts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mosto de vodka"
+msgstr[1] "mostos de vodka"
+msgstr[2] "mostos de vodka"
#. ~ Description for vodka wort
#: data/json/items/comestibles/brewing.json
@@ -79092,9 +79333,9 @@ msgstr ""
#: data/json/items/comestibles/brewing.json
msgid "rum wort"
msgid_plural "rum worts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mosto de ron"
+msgstr[1] "mostos de ron"
+msgstr[2] "mostos de ron"
#. ~ Description for rum wort
#: data/json/items/comestibles/brewing.json
@@ -79148,9 +79389,9 @@ msgstr ""
#: data/json/items/comestibles/brewing.json
msgid "dandelion wine must"
msgid_plural "dandelion wine musts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mosto de vino de diente de león"
+msgstr[1] "mostos de vino de diente de león"
+msgstr[2] "mostos de vino de diente de león"
#. ~ Description for dandelion wine must
#: data/json/items/comestibles/brewing.json
@@ -79164,9 +79405,9 @@ msgstr ""
#: data/json/items/comestibles/brewing.json
msgid "burdock wine must"
msgid_plural "burdock wine musts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mosto de vino de bardana"
+msgstr[1] "mostos de vino de bardana"
+msgstr[2] "mostos de vino de bardana"
#. ~ Description for burdock wine must
#: data/json/items/comestibles/brewing.json
@@ -79180,9 +79421,9 @@ msgstr ""
#: data/json/items/comestibles/brewing.json
msgid "pine wine must"
msgid_plural "pine wine musts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mosto de retsina"
+msgstr[1] "mostos de retsina"
+msgstr[2] "mostos de retsina"
#. ~ Description for pine wine must
#: data/json/items/comestibles/brewing.json
@@ -79260,9 +79501,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "meat/fish"
msgid_plural "meat/fish"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "carne/pescado"
+msgstr[1] "carne/pescado"
+msgstr[2] "carne/pescado"
#: data/json/items/comestibles/carnivore.json
msgid "fillet of fish"
@@ -79291,9 +79532,9 @@ msgstr "Es un pescado cocinado recientemente. Muy nutritivo."
#: data/json/items/comestibles/carnivore.json
msgid "human stomach"
msgid_plural "human stomachs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "estómago humano"
+msgstr[1] "estómagos humanos"
+msgstr[2] "estómagos humanos"
#. ~ Description for human stomach
#: data/json/items/comestibles/carnivore.json
@@ -79303,9 +79544,9 @@ msgstr "Es el estómago de un humano. Es sorprendentemente duradero."
#: data/json/items/comestibles/carnivore.json
msgid "large human stomach"
msgid_plural "large human stomachs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "estómago humano grande"
+msgstr[1] "estómagos humanos grandes"
+msgstr[2] "estómagos humanos grandes"
#. ~ Description for large human stomach
#: data/json/items/comestibles/carnivore.json
@@ -79317,9 +79558,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "chunk of human fat"
msgid_plural "chunks of human fat"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pedazo de grasa humana"
+msgstr[1] "pedazos de grasa humana"
+msgstr[2] "pedazos de grasa humana"
#. ~ Description for {'str': 'chunk of human fat', 'str_pl': 'chunks of human
#. fat'}
@@ -79330,9 +79571,9 @@ msgstr "Está recién carneada de un cadáver humano."
#: data/json/items/comestibles/carnivore.json
msgid "human tallow"
msgid_plural "human tallows"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sebo humano"
+msgstr[1] "sebos humanos"
+msgstr[2] "sebos humanos"
#. ~ Description for human tallow
#: data/json/items/comestibles/carnivore.json
@@ -79348,9 +79589,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "human lard"
msgid_plural "human lards"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "manteca humana"
+msgstr[1] "mantecas humanas"
+msgstr[2] "mantecas humanas"
#. ~ Description for human lard
#: data/json/items/comestibles/carnivore.json
@@ -79378,9 +79619,9 @@ msgstr "Recién carneada de un cadáver humano."
#: data/json/items/comestibles/carnivore.json
msgid "cooked creep"
msgid_plural "cooked creeps"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "creep cocinado"
+msgstr[1] "creeps cocinados"
+msgstr[2] "creeps cocinados"
#. ~ Description for cooked creep
#: data/json/items/comestibles/carnivore.json
@@ -79407,9 +79648,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "scrap of meat"
msgid_plural "scraps of meat"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pedazo de carne"
+msgstr[1] "pedazos de carne"
+msgstr[2] "pedazos de carne"
#. ~ Description for {'str': 'scrap of meat', 'str_pl': 'scraps of meat'}
#: data/json/items/comestibles/carnivore.json
@@ -79423,9 +79664,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "chunk of mutant meat"
msgid_plural "chunks of mutant meat"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pedazo de carne mutante"
+msgstr[1] "pedazos de carne mutante"
+msgstr[2] "pedazos de carne mutante"
#. ~ Description for {'str': 'chunk of mutant meat', 'str_pl': 'chunks of
#. mutant meat'}
@@ -79439,9 +79680,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "scrap of mutant meat"
msgid_plural "scraps of mutant meat"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pedazo de carne mutante"
+msgstr[1] "pedazos de carne mutante"
+msgstr[2] "pedazos de carne mutante"
#. ~ Description for {'str': 'scrap of mutant meat', 'str_pl': 'scraps of
#. mutant meat'}
@@ -79455,9 +79696,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "mutant humanoid meat"
msgid_plural "mutant humanoid meats"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "carne de mutante humanoide"
+msgstr[1] "carnes de mutante humanoide"
+msgstr[2] "carnes de mutante humanoide"
#. ~ Description for mutant humanoid meat
#: data/json/items/comestibles/carnivore.json
@@ -79470,9 +79711,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "cooked cretin"
msgid_plural "cooked cretins"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cretino cocinado"
+msgstr[1] "cretinos cocinados"
+msgstr[2] "cretinos cocinados"
#. ~ Description for cooked cretin
#: data/json/items/comestibles/carnivore.json
@@ -79500,16 +79741,16 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "cooked scrap of meat"
msgid_plural "cooked scraps of meat"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pedazo de carne cocinada"
+msgstr[1] "pedazos de carne cocinada"
+msgstr[2] "pedazos de carne cocinada"
#: data/json/items/comestibles/carnivore.json
msgid "cooked mutant meat"
msgid_plural "cooked mutant meats"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "carne mutante cocinada"
+msgstr[1] "carnes mutantes cocinadas"
+msgstr[2] "carnes mutantes cocinadas"
#. ~ Description for cooked mutant meat
#: data/json/items/comestibles/carnivore.json
@@ -79521,16 +79762,16 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "cooked scrap of mutant meat"
msgid_plural "cooked scraps of mutant meat"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pedazo de carne mutante cocinada"
+msgstr[1] "pedazos de carne mutante cocinada"
+msgstr[2] "pedazos de carne mutante cocinada"
#: data/json/items/comestibles/carnivore.json
msgid "raw offal"
msgid_plural "raw offals"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "achura cruda"
+msgstr[1] "achuras crudas"
+msgstr[2] "achuras crudas"
#. ~ Description for raw offal
#: data/json/items/comestibles/carnivore.json
@@ -79597,9 +79838,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "stomach"
msgid_plural "stomachs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "estómago"
+msgstr[1] "estómagos"
+msgstr[2] "estómagos"
#. ~ Description for stomach
#: data/json/items/comestibles/carnivore.json
@@ -79610,9 +79851,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "large stomach"
msgid_plural "large stomachs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "estómago grande"
+msgstr[1] "estómagos grandes"
+msgstr[2] "estómagos grandes"
#. ~ Description for large stomach
#: data/json/items/comestibles/carnivore.json
@@ -79642,9 +79883,9 @@ msgstr[2] "cecinas de hombre"
#: data/json/items/comestibles/carnivore.json
msgid "monster jerky"
msgid_plural "monster jerky"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "charqui de monstruo"
+msgstr[1] "charqui de monstruo"
+msgstr[2] "charqui de monstruo"
#. ~ Description for {'str_sp': 'meat jerky'}
#: data/json/items/comestibles/carnivore.json
@@ -79680,9 +79921,9 @@ msgstr[2] "carnes ahumadas"
#: data/json/items/comestibles/carnivore.json
msgid "smoked sucker"
msgid_plural "smoked sucker"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cabrón ahumado"
+msgstr[1] "cabrón ahumado"
+msgstr[2] "cabrón ahumado"
#. ~ Conditional name for smoked meat when COMPONENT_ID matches mutant
#. ~ Conditional name for canned meat when COMPONENT_ID matches mutant
@@ -79695,9 +79936,9 @@ msgstr[2] ""
#, c-format
msgid "%s, mutant"
msgid_plural "%s, mutant"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "%s, mutante"
+msgstr[1] "%s, mutante"
+msgstr[2] "%s, mutante"
#. ~ Description for smoked meat
#: data/json/items/comestibles/carnivore.json
@@ -79727,9 +79968,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "piece of raw lung"
msgid_plural "pieces of raw lung"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pedazo de pulmón crudo"
+msgstr[1] "pedazos de pulmón crudo"
+msgstr[2] "pedazos de pulmón crudo"
#. ~ Description for {'str': 'piece of raw lung', 'str_pl': 'pieces of raw
#. lung'}
@@ -79746,9 +79987,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "raw liver"
msgid_plural "raw livers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hígado crudo"
+msgstr[1] "hígados crudos"
+msgstr[2] "hígados crudos"
#. ~ Description for raw liver
#: data/json/items/comestibles/carnivore.json
@@ -79764,9 +80005,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "raw brains"
msgid_plural "raw brains"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cerebro crudo"
+msgstr[1] "cerebros crudos"
+msgstr[2] "cerebros crudos"
#. ~ Description for {'str_sp': 'raw brains'}
#: data/json/items/comestibles/carnivore.json
@@ -79776,9 +80017,9 @@ msgstr "Es el cerebro de un animal. No vas a querer comerte esto crudo..."
#: data/json/items/comestibles/carnivore.json
msgid "raw kidney"
msgid_plural "raw kidneys"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "riñón crudo"
+msgstr[1] "riñones crudos"
+msgstr[2] "riñones crudos"
#. ~ Description for raw kidney
#: data/json/items/comestibles/carnivore.json
@@ -79792,9 +80033,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "raw sweetbread"
msgid_plural "raw sweetbreads"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "molleja cruda"
+msgstr[1] "mollejas crudas"
+msgstr[2] "mollejas crudas"
#. ~ Description for raw sweetbread
#: data/json/items/comestibles/carnivore.json
@@ -79891,9 +80132,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "chunk of mutant fat"
msgid_plural "chunks of mutant fat"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pedazo de grasa mutante"
+msgstr[1] "pedazos de grasa mutante"
+msgstr[2] "pedazos de grasa mutante"
#. ~ Description for {'str': 'chunk of mutant fat', 'str_pl': 'chunks of
#. mutant fat'}
@@ -79908,9 +80149,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "mutant tallow"
msgid_plural "mutant tallows"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sebo mutante"
+msgstr[1] "sebos mutantes"
+msgstr[2] "sebos mutantes"
#. ~ Description for mutant tallow
#: data/json/items/comestibles/carnivore.json
@@ -79926,9 +80167,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "mutant lard"
msgid_plural "mutant lards"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "manteca mutante"
+msgstr[1] "mantecas mutantes"
+msgstr[2] "mantecas mutantes"
#. ~ Description for mutant lard
#: data/json/items/comestibles/carnivore.json
@@ -79944,9 +80185,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "chunk of mutant humanoid fat"
msgid_plural "chunks of mutant humanoid fat"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pedazo de grasa mutante humanoide"
+msgstr[1] "pedazos de grasa mutante humanoide"
+msgstr[2] "pedazos de grasa mutante humanoide"
#. ~ Description for {'str': 'chunk of mutant humanoid fat', 'str_pl': 'chunks
#. of mutant humanoid fat'}
@@ -79957,9 +80198,9 @@ msgstr "Es grasa recién carneada de un humanoide muy mutado."
#: data/json/items/comestibles/carnivore.json
msgid "mutant humanoid tallow"
msgid_plural "mutant humanoid tallows"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sebo de mutante humanoide"
+msgstr[1] "sebos de mutante humanoide"
+msgstr[2] "sebos de mutante humanoide"
#. ~ Description for mutant humanoid tallow
#: data/json/items/comestibles/carnivore.json
@@ -79975,9 +80216,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "mutant humanoid lard"
msgid_plural "mutant humanoid lards"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "manteca de mutante humanoide"
+msgstr[1] "mantecas de mutante humanoide"
+msgstr[2] "mantecas de mutante humanoide"
#. ~ Description for mutant humanoid lard
#: data/json/items/comestibles/carnivore.json
@@ -80077,9 +80318,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "large boiled stomach"
msgid_plural "large boiled stomachs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "estómago grande hervido"
+msgstr[1] "estómagos grandes hervidos"
+msgstr[2] "estómagos grandes hervidos"
#. ~ Description for large boiled stomach
#: data/json/items/comestibles/carnivore.json
@@ -80092,9 +80333,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "boiled large human stomach"
msgid_plural "boiled large human stomachs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "estómago humano grande hervido"
+msgstr[1] "estómagos humanos grandes hervidos"
+msgstr[2] "estómagos humanos grandes hervidos"
#. ~ Description for {'str': 'boiled large human stomach'}
#: data/json/items/comestibles/carnivore.json
@@ -80108,9 +80349,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "boiled stomach"
msgid_plural "boiled stomachs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "estómago hervido"
+msgstr[1] "estómagos hervidos"
+msgstr[2] "estómagos hervidos"
#. ~ Description for {'str': 'boiled stomach'}
#: data/json/items/comestibles/carnivore.json
@@ -80124,9 +80365,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "boiled human stomach"
msgid_plural "boiled human stomachs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "estómago humano hervido"
+msgstr[1] "estómagos humanos hervidos"
+msgstr[2] "estómagos humanos hervidos"
#. ~ Description for {'str': 'boiled human stomach'}
#: data/json/items/comestibles/carnivore.json
@@ -80156,9 +80397,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "tainted hide"
msgid_plural "tainted hides"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pellejo contaminado"
+msgstr[1] "pellejos contaminados"
+msgstr[2] "pellejos contaminados"
#. ~ Description for tainted hide
#: data/json/items/comestibles/carnivore.json
@@ -80172,9 +80413,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "raw human skin"
msgid_plural "raw human skins"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pellejo humano crudo"
+msgstr[1] "pellejos humanos crudos"
+msgstr[2] "pellejos humanos crudos"
#. ~ Description for raw human skin
#: data/json/items/comestibles/carnivore.json
@@ -80207,9 +80448,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "tainted pelt"
msgid_plural "tainted pelts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pelaje contaminado"
+msgstr[1] "pelajes contaminados"
+msgstr[2] "pelajes contaminados"
#. ~ Description for tainted pelt
#: data/json/items/comestibles/carnivore.json
@@ -80225,9 +80466,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "raw human pelt"
msgid_plural "raw human pelts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pelaje humano crudo"
+msgstr[1] "pelajes humanos crudos"
+msgstr[2] "pelajes humanos crudos"
#. ~ Description for raw human pelt
#: data/json/items/comestibles/carnivore.json
@@ -80243,9 +80484,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "seeping heart"
msgid_plural "seeping hearts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "corazón con agujeritos"
+msgstr[1] "corazones con agujeritos"
+msgstr[2] "corazones con agujeritos"
#. ~ Description for seeping heart
#: data/json/items/comestibles/carnivore.json
@@ -80259,9 +80500,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "putrid heart"
msgid_plural "putrid hearts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "corazón pútrido"
+msgstr[1] "corazones pútridos"
+msgstr[2] "corazones pútridos"
#. ~ Description for putrid heart
#: data/json/items/comestibles/carnivore.json
@@ -80282,9 +80523,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "desiccated putrid heart"
msgid_plural "desiccated putrid hearts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "corazón pútrido disecado"
+msgstr[1] "corazones pútridos disecados"
+msgstr[2] "corazones pútridos disecados"
#. ~ Description for desiccated putrid heart
#: data/json/items/comestibles/carnivore.json
@@ -80300,9 +80541,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "alien fronds"
msgid_plural "alien fronds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "fronda alienígena"
+msgstr[1] "fronda alienígena"
+msgstr[2] "fronda alienígena"
#. ~ Description for {'str_sp': 'alien fronds'}
#: data/json/items/comestibles/carnivore.json
@@ -80319,9 +80560,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "leech flower"
msgid_plural "leech flowers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "flor chupasangre"
+msgstr[1] "flores chupasangre"
+msgstr[2] "flores chupasangre"
#. ~ Use action activation_message for leech flower.
#: data/json/items/comestibles/carnivore.json
@@ -80347,9 +80588,9 @@ msgstr ""
#: data/json/items/comestibles/carnivore.json
msgid "leech bark"
msgid_plural "scraps of leech bark"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "corteza de planta chupasangre"
+msgstr[1] "pedazos de corteza de planta chupasangre"
+msgstr[2] "pedazos de corteza de planta chupasangre"
#. ~ Description for {'str': 'leech bark', 'str_pl': 'scraps of leech bark'}
#: data/json/items/comestibles/carnivore.json
@@ -80378,9 +80619,9 @@ msgstr ""
#: data/json/items/comestibles/dairy.json
msgid "shelf stable milk"
msgid_plural "shelf stable milk"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "leche larga vida"
+msgstr[1] "leche larga vida"
+msgstr[2] "leche larga vida"
#. ~ Description for {'str_sp': 'shelf stable milk'}
#: data/json/items/comestibles/dairy.json
@@ -80396,9 +80637,9 @@ msgstr ""
#: data/json/items/comestibles/dairy.json
msgid "evaporated milk"
msgid_plural "evaporated milk"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "leche evaporada"
+msgstr[1] "leche evaporada"
+msgstr[2] "leche evaporada"
#. ~ Description for {'str_sp': 'evaporated milk'}
#: data/json/items/comestibles/dairy.json
@@ -80409,9 +80650,9 @@ msgstr ""
#: data/json/items/comestibles/dairy.json
msgid "yogurt"
msgid_plural "yogurts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "yogur"
+msgstr[1] "yogures"
+msgstr[2] "yogures"
#. ~ Description for yogurt
#: data/json/items/comestibles/dairy.json
@@ -80421,9 +80662,9 @@ msgstr "Delicioso producto lácteo fermentado. Tiene gusto a vainilla."
#: data/json/items/comestibles/dairy.json
msgid "butter"
msgid_plural "butter"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "manteca"
+msgstr[1] "manteca"
+msgstr[2] "manteca"
#. ~ Description for {'str_sp': 'butter'}
#: data/json/items/comestibles/dairy.json
@@ -80508,9 +80749,9 @@ msgstr "Un pedazo amarillo de queso procesado."
#: data/json/items/comestibles/dairy.json
msgid "quesadilla"
msgid_plural "quesadillas"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "quesadilla"
+msgstr[1] "quesadillas"
+msgstr[2] "quesadillas"
#. ~ Description for quesadilla
#: data/json/items/comestibles/dairy.json
@@ -80562,9 +80803,9 @@ msgstr "Exprimida de manzanas frescas. Sabrosa y nutritiva."
#: data/json/items/comestibles/drink.json
msgid "almond milk"
msgid_plural "almond milks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "leche de almendra"
+msgstr[1] "leche de almendra"
+msgstr[2] "leche de almendra"
#. ~ Description for {'str': 'almond milk'}
#: data/json/items/comestibles/drink.json
@@ -80578,9 +80819,9 @@ msgstr ""
#: data/json/items/comestibles/drink.json
msgid "soy milk"
msgid_plural "soy milks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "leche de soja"
+msgstr[1] "leche de soja"
+msgstr[2] "leche de soja"
#. ~ Description for soy milk
#: data/json/items/comestibles/drink.json
@@ -80673,9 +80914,9 @@ msgstr "Es una mezcla tradicional del sur asiático, de leche y té."
#: data/json/items/comestibles/drink.json
msgid "chamomile tea"
msgid_plural "chamomile tea"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "té de manzanliia"
+msgstr[1] "té de manzanliia"
+msgstr[2] "té de manzanliia"
#. ~ Description for {'str_sp': 'chamomile tea'}
#: data/json/items/comestibles/drink.json
@@ -80706,9 +80947,9 @@ msgstr ""
#: data/json/items/comestibles/drink.json
msgid "coffee substitute"
msgid_plural "coffee substitute"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sucedáneo de café"
+msgstr[1] "sucedáneo de café"
+msgstr[2] "sucedáneo de café"
#. ~ Description for {'str_sp': 'coffee substitute'}
#: data/json/items/comestibles/drink.json
@@ -80724,9 +80965,9 @@ msgstr ""
#: data/json/items/comestibles/drink.json
msgid "chicory brew"
msgid_plural "chicory brew"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "infusión de achicoria"
+msgstr[1] "infusión de achicoria"
+msgstr[2] "infusión de achicoria"
#. ~ Description for {'str_sp': 'chicory brew'}
#: data/json/items/comestibles/drink.json
@@ -80824,9 +81065,9 @@ msgstr ""
#: data/json/items/comestibles/drink.json
msgid "dandelion and burdock tea"
msgid_plural "dandelion and burdock tea"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "té de diente de león y bardana"
+msgstr[1] "té de diente de león y bardana"
+msgstr[2] "té de diente de león y bardana"
#. ~ Description for {'str_sp': 'dandelion and burdock tea'}
#: data/json/items/comestibles/drink.json
@@ -80841,9 +81082,9 @@ msgstr ""
#: data/json/items/comestibles/drink.json
msgid "eggnog"
msgid_plural "eggnogs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "ponche de huevo"
+msgstr[1] "ponche de huevo"
+msgstr[2] "ponche de huevo"
#. ~ Description for eggnog
#: data/json/items/comestibles/drink.json
@@ -80980,9 +81221,9 @@ msgstr ""
#: data/json/items/comestibles/drink.json
msgid "lotus tea"
msgid_plural "lotus tea"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "té de loto"
+msgstr[1] "té de loto"
+msgstr[2] "té de loto"
#. ~ Description for {'str_sp': 'lotus tea'}
#: data/json/items/comestibles/drink.json
@@ -81016,9 +81257,9 @@ msgstr ""
#: data/json/items/comestibles/drink.json
msgid "reconstituted milk"
msgid_plural "reconstituted milk"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "leche rehidratada"
+msgstr[1] "leche rehidratada"
+msgstr[2] "leche rehidratada"
#. ~ Description for {'str_sp': 'reconstituted milk'}
#: data/json/items/comestibles/drink.json
@@ -81179,9 +81420,9 @@ msgstr ""
#: data/json/items/comestibles/drink.json
msgid "spurge tea"
msgid_plural "spurge tea"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "té de euforbio"
+msgstr[1] "té de euforbio"
+msgstr[2] "té de euforbio"
#. ~ Description for {'str_sp': 'spurge tea'}
#: data/json/items/comestibles/drink.json
@@ -81195,9 +81436,9 @@ msgstr ""
#: data/json/items/comestibles/drink.json
msgid "rehydration drink"
msgid_plural "rehydration drinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bebida hidratante"
+msgstr[1] "bebida hidratante"
+msgstr[2] "bebida hidratante"
#. ~ Description for rehydration drink
#: data/json/items/comestibles/drink.json
@@ -81490,9 +81731,9 @@ msgstr ""
#: data/json/items/comestibles/drink_other.json
msgid "imitation peanutbutter"
msgid_plural "imitation peanutbutters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "imitación de mantequilla de maní"
+msgstr[1] "imitación de mantequilla de maní"
+msgstr[2] "imitación de mantequilla de maní"
#. ~ Description for imitation peanutbutter
#: data/json/items/comestibles/drink_other.json
@@ -81518,9 +81759,9 @@ msgstr ""
#: data/json/items/comestibles/drink_other.json
msgid "vegetable cooking oil"
msgid_plural "vegetable cooking oil"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "aceite vegetal de cocina"
+msgstr[1] "aceite vegetal de cocina"
+msgstr[2] "aceite vegetal de cocina"
#. ~ Description for {'str_sp': 'vegetable cooking oil'}
#: data/json/items/comestibles/drink_other.json
@@ -81600,9 +81841,9 @@ msgstr "Es un nutritivo huevo, puesto por algún pájaro."
#: data/json/items/comestibles/egg.json
msgid "chicken egg"
msgid_plural "chicken eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de gallina"
+msgstr[1] "huevos de gallina"
+msgstr[2] "huevos de gallina"
#: data/json/items/comestibles/egg.json
msgid "unfertilized bird egg"
@@ -81621,51 +81862,51 @@ msgstr ""
#: data/json/items/comestibles/egg.json
msgid "grouse egg"
msgid_plural "grouse eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de urogallo"
+msgstr[1] "huevos de urogallo"
+msgstr[2] "huevos de urogallo"
#: data/json/items/comestibles/egg.json
msgid "crow egg"
msgid_plural "crow eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de cuervo"
+msgstr[1] "huevos de cuervo"
+msgstr[2] "huevos de cuervo"
#: data/json/items/comestibles/egg.json
msgid "duck egg"
msgid_plural "duck eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de pato"
+msgstr[1] "huevos de pato"
+msgstr[2] "huevos de pato"
#: data/json/items/comestibles/egg.json
msgid "goose egg"
msgid_plural "goose eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de ganso"
+msgstr[1] "huevos de ganso"
+msgstr[2] "huevos de ganso"
#: data/json/items/comestibles/egg.json
msgid "turkey egg"
msgid_plural "turkey eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de pavo"
+msgstr[1] "huevos de pavo"
+msgstr[2] "huevos de pavo"
#: data/json/items/comestibles/egg.json
msgid "pheasant egg"
msgid_plural "pheasant eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de faisán"
+msgstr[1] "huevos de faisán"
+msgstr[2] "huevos de faisán"
#: data/json/items/comestibles/egg.json
msgid "cockatrice egg"
msgid_plural "cockatrice eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de cocatriz"
+msgstr[1] "huevos de cocatriz"
+msgstr[2] "huevos de cocatriz"
#: data/json/items/comestibles/egg.json
msgid "reptile egg"
@@ -81714,9 +81955,9 @@ msgstr ""
#: data/json/items/comestibles/egg.json
msgid "roach egg"
msgid_plural "roach eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de cucaracha"
+msgstr[1] "huevos de cucaracha"
+msgstr[2] "huevos de cucaracha"
#. ~ Description for roach egg
#: data/json/items/comestibles/egg.json
@@ -81728,9 +81969,9 @@ msgstr ""
#: data/json/items/comestibles/egg.json
msgid "insect egg"
msgid_plural "insect eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de insecto"
+msgstr[1] "huevos de insecto"
+msgstr[2] "huevos de insecto"
#. ~ Description for insect egg
#: data/json/items/comestibles/egg.json
@@ -81740,9 +81981,9 @@ msgstr ""
#: data/json/items/comestibles/egg.json
msgid "razorclaw roe"
msgid_plural "razorclaw roes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hueva de garrafilada"
+msgstr[1] "huevas de garrafilada"
+msgstr[2] "huevas de garrafilada"
#. ~ Description for razorclaw roe
#: data/json/items/comestibles/egg.json
@@ -81752,9 +81993,9 @@ msgstr "Son unos huevos de garrafilada. Una exquisitez postapocalíptica."
#: data/json/items/comestibles/egg.json
msgid "roe"
msgid_plural "roes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hueva"
+msgstr[1] "huevas"
+msgstr[2] "huevas"
#. ~ Description for roe
#: data/json/items/comestibles/egg.json
@@ -81801,9 +82042,9 @@ msgstr ""
#: data/json/items/comestibles/egg.json
msgid "pickled egg"
msgid_plural "pickled eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo al escabeche"
+msgstr[1] "huevos al escabeche"
+msgstr[2] "huevos al escabeche"
#. ~ Description for pickled egg
#: data/json/items/comestibles/egg.json
@@ -81813,13 +82054,61 @@ msgstr ""
"Es huevo al escabeche. Bastante salado, pero tiene buen sabor y dura mucho "
"tiempo."
-#: data/json/items/comestibles/frozen.json
-msgid "milkshake"
-msgid_plural "milkshakes"
+#: data/json/items/comestibles/egg.json
+msgid "salsify omelette"
+msgid_plural "salsify omelette"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str_sp': 'salsify omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A salsify omelette."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "wild veggetable omelette"
+msgid_plural "wild veggetable omelette"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+#. ~ Description for {'str_sp': 'wild veggetable omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with wild vegetables."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "mushroom omelette"
+msgid_plural "mushroom omelette"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str_sp': 'mushroom omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with mushrooms."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "spanish omelette"
+msgid_plural "spanish omelette"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str_sp': 'spanish omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A spanish omelette."
+msgstr ""
+
+#: data/json/items/comestibles/frozen.json
+msgid "milkshake"
+msgid_plural "milkshakes"
+msgstr[0] "licuado"
+msgstr[1] "licuados"
+msgstr[2] "licuados"
+
#. ~ Description for {'str': 'milkshake'}
#: data/json/items/comestibles/frozen.json
msgid ""
@@ -81832,9 +82121,9 @@ msgstr ""
#: data/json/items/comestibles/frozen.json
msgid "fast food milkshake"
msgid_plural "fast food milkshakes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "licuado de restaurant"
+msgstr[1] "licuados de restaurant"
+msgstr[2] "licuados de restaurant"
#. ~ Description for {'str': 'fast food milkshake'}
#: data/json/items/comestibles/frozen.json
@@ -81848,9 +82137,9 @@ msgstr ""
#: data/json/items/comestibles/frozen.json
msgid "deluxe milkshake"
msgid_plural "deluxe milkshakes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "licuado de lujo"
+msgstr[1] "licuados de lujo"
+msgstr[2] "licuados de lujo"
#. ~ Description for {'str': 'deluxe milkshake'}
#: data/json/items/comestibles/frozen.json
@@ -81864,9 +82153,9 @@ msgstr ""
#: data/json/items/comestibles/frozen.json
msgid "ice cream"
msgid_plural "ice cream scoops"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "helado"
+msgstr[1] "bolas de helado"
+msgstr[2] "bolas de helado"
#. ~ Description for {'str': 'ice cream', 'str_pl': 'ice cream scoops'}
#: data/json/items/comestibles/frozen.json
@@ -81878,9 +82167,9 @@ msgstr ""
#: data/json/items/comestibles/frozen.json
msgid "dairy dessert"
msgid_plural "dairy dessert scoops"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "postre lácteo"
+msgstr[1] "bolas de postre lácteo"
+msgstr[2] "bolas de postre lácteo"
#. ~ Description for {'str': 'dairy dessert', 'str_pl': 'dairy dessert
#. scoops'}
@@ -81911,9 +82200,9 @@ msgstr "Es helado con pedacitos de chocolate, u otro sabor mezclado."
#: data/json/items/comestibles/frozen.json
msgid "fruity ice cream"
msgid_plural "fruity ice cream scoops"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "helado frutal"
+msgstr[1] "bolas de helado frutal"
+msgstr[2] "bolas de helado frutal"
#. ~ Description for {'str': 'fruity ice cream', 'str_pl': 'fruity ice cream
#. scoops'}
@@ -81928,9 +82217,9 @@ msgstr ""
#: data/json/items/comestibles/frozen.json
msgid "frozen custard"
msgid_plural "frozen custard scoops"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "candy"
+msgstr[1] "bolas de candy"
+msgstr[2] "bolas de candy"
#. ~ Description for {'str': 'frozen custard', 'str_pl': 'frozen custard
#. scoops'}
@@ -81963,9 +82252,9 @@ msgstr ""
#: data/json/items/comestibles/frozen.json
msgid "sorbet"
msgid_plural "sorbet scoops"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sorbete"
+msgstr[1] "bolas de sorbete"
+msgstr[2] "bolas de sorbete"
#. ~ Description for {'str': 'sorbet', 'str_pl': 'sorbet scoops'}
#: data/json/items/comestibles/frozen.json
@@ -81975,9 +82264,9 @@ msgstr "Es un simple postre helado hecho con agua y jugo de fruto."
#: data/json/items/comestibles/frozen.json
msgid "gelato"
msgid_plural "gelato scoops"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "gelato"
+msgstr[1] "bolas de gelato"
+msgstr[2] "bolas de gelato"
#. ~ Description for {'str': 'gelato', 'str_pl': 'gelato scoops'}
#: data/json/items/comestibles/frozen.json
@@ -82053,9 +82342,9 @@ msgstr "Son rodajas de piña enlatados con agua. Bastante sabrosos."
#: data/json/items/comestibles/fruit_dishes.json
msgid "lemonade drink mix"
msgid_plural "lemonade drink mix"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bebida de limonada"
+msgstr[1] "bebida de limonada"
+msgstr[2] "bebida de limonada"
#. ~ Description for {'str_sp': 'lemonade drink mix'}
#: data/json/items/comestibles/fruit_dishes.json
@@ -82155,9 +82444,9 @@ msgstr ""
#: data/json/items/comestibles/irradiated_fruit.json
msgid "irradiated rose hips"
msgid_plural "irradiated rose hips"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "escaramujo irradiado"
+msgstr[1] "escaramujos irradiados"
+msgstr[2] "escaramujos irradiados"
#. ~ Description for {'str_sp': 'irradiated rose hips'}
#: data/json/items/comestibles/irradiated_fruit.json
@@ -82188,9 +82477,9 @@ msgstr ""
#: data/json/items/comestibles/irradiated_fruit.json
msgid "irradiated mulberry"
msgid_plural "irradiated mulberries"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mora irradiada"
+msgstr[1] "moras irradiadas"
+msgstr[2] "moras irradiadas"
#. ~ Description for {'str': 'irradiated mulberry', 'str_pl': 'irradiated
#. mulberries'}
@@ -82205,9 +82494,9 @@ msgstr ""
#: data/json/items/comestibles/irradiated_fruit.json
msgid "irradiated huckleberry"
msgid_plural "irradiated huckleberries"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "arándano agrio irradiado"
+msgstr[1] "arándanos agrios irradiados"
+msgstr[2] "arándanos agrios irradiados"
#. ~ Description for {'str': 'irradiated huckleberry', 'str_pl': 'irradiated
#. huckleberries'}
@@ -82581,9 +82870,9 @@ msgstr ""
#: data/json/items/comestibles/irradiated_fruit.json
msgid "irradiated apricot"
msgid_plural "irradiated apricots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "damasco irradiado"
+msgstr[1] "damascos irradiados"
+msgstr[2] "damascos irradiados"
#. ~ Description for irradiated apricot
#: data/json/items/comestibles/irradiated_fruit.json
@@ -82613,9 +82902,9 @@ msgstr ""
#: data/json/items/comestibles/irradiated_veggy.json
msgid "irradiated cabbage"
msgid_plural "irradiated cabbages"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "repollo irradiado"
+msgstr[1] "repollos irradiados"
+msgstr[2] "repollos irradiados"
#. ~ Description for irradiated cabbage
#: data/json/items/comestibles/irradiated_veggy.json
@@ -82726,9 +83015,9 @@ msgstr ""
#: data/json/items/comestibles/irradiated_veggy.json
msgid "irradiated pumpkin"
msgid_plural "irradiated pumpkins"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "calabaza irradiada"
+msgstr[1] "calabazas irradiadas"
+msgstr[2] "calabazas irradiadas"
#. ~ Description for irradiated pumpkin
#: data/json/items/comestibles/irradiated_veggy.json
@@ -82961,9 +83250,9 @@ msgstr "Una galleta para ir picando algo."
#: data/json/items/comestibles/junkfood.json
msgid "chocolate-covered pretzel"
msgid_plural "chocolate-covered pretzels"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pretzel con chocolate"
+msgstr[1] "pretzels con chocolate"
+msgstr[2] "pretzels con chocolate"
#. ~ Description for chocolate-covered pretzel
#: data/json/items/comestibles/junkfood.json
@@ -83040,9 +83329,9 @@ msgstr "Es un puñado de golosinas coloridas rellenas con chocolate."
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
msgid "chewy candy"
msgid_plural "chewy candy"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "caramelos masticables"
+msgstr[1] "caramelos masticables"
+msgstr[2] "caramelos masticables"
#. ~ Description for {'str_sp': 'chewy candy'}
#: data/json/items/comestibles/junkfood.json
@@ -83101,6 +83390,7 @@ msgstr ""
#: data/json/items/comestibles/junkfood.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cookie"
msgid_plural "cookies"
msgstr[0] "galleta"
@@ -83229,9 +83519,9 @@ msgstr ""
#: data/json/items/comestibles/junkfood.json
msgid "Necco wafers"
msgid_plural "Necco wafers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "galleta Necco"
+msgstr[1] "galletas Necco"
+msgstr[2] "galletas Necco"
#. ~ Description for {'str_sp': 'Necco wafers'}
#: data/json/items/comestibles/junkfood.json
@@ -83322,9 +83612,9 @@ msgstr ""
#: data/json/items/comestibles/junkfood.json
msgid "cheese nachos"
msgid_plural "cheese nachos"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "nachos de queso"
+msgstr[1] "nachos de queso"
+msgstr[2] "nachos de queso"
#. ~ Description for {'str_sp': 'cheese nachos'}
#: data/json/items/comestibles/junkfood.json
@@ -83338,9 +83628,9 @@ msgstr ""
#: data/json/items/comestibles/junkfood.json
msgid "meat nachos"
msgid_plural "meat nachos"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "nachos de carne"
+msgstr[1] "nachos de carne"
+msgstr[2] "nachos de carne"
#. ~ Conditional name for {'str_sp': 'meat nachos'} when FLAG matches
#. CANNIBALISM
@@ -83356,9 +83646,9 @@ msgstr[2] "nachos niño"
#: data/json/items/comestibles/junkfood.json
msgid "nachos con chupacabra"
msgid_plural "nachos con chupacabra"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "nachos con chupacabra"
+msgstr[1] "nachos con chupacabra"
+msgstr[2] "nachos con chupacabra"
#. ~ Description for {'str_sp': 'meat nachos'}
#: data/json/items/comestibles/junkfood.json
@@ -83372,9 +83662,9 @@ msgstr ""
#: data/json/items/comestibles/junkfood.json
msgid "meat nachos with cheese"
msgid_plural "meat nachos with cheese"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "nachos de carne con queso"
+msgstr[1] "nachos de carne con queso"
+msgstr[2] "nachos de carne con queso"
#. ~ Conditional name for {'str_sp': 'meat nachos with cheese'} when FLAG
#. matches CANNIBALISM
@@ -83390,9 +83680,9 @@ msgstr[2] "nachos niño con queso"
#: data/json/items/comestibles/junkfood.json
msgid "cheese and chupacabra nachos"
msgid_plural "cheese and chupacabra nachos"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "nachos de queso y chupacabra"
+msgstr[1] "nachos de queso y chupacabra"
+msgstr[2] "nachos de queso y chupacabra"
#. ~ Description for {'str_sp': 'meat nachos with cheese'}
#: data/json/items/comestibles/junkfood.json
@@ -83417,9 +83707,9 @@ msgstr "Cerdo seco y salado. Tiene buen sabor, pero comerlo te da sed."
#: data/json/items/comestibles/junkfood.json
msgid "microwave burrito"
msgid_plural "microwave burritos"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "burrito para microondas"
+msgstr[1] "burrito para microondas"
+msgstr[2] "burrito para microondas"
#. ~ Description for microwave burrito
#: data/json/items/comestibles/junkfood.json
@@ -83466,9 +83756,9 @@ msgstr ""
#: data/json/items/comestibles/junkfood.json
msgid "deep-fried chicken"
msgid_plural "deep-fried chickens"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pollo frito"
+msgstr[1] "pollos fritos"
+msgstr[2] "pollos fritos"
#. ~ Description for deep-fried chicken
#: data/json/items/comestibles/junkfood.json
@@ -83506,9 +83796,9 @@ msgstr ""
#: data/json/items/comestibles/junkfood.json
msgid "cooked corn dog"
msgid_plural "cooked corn dogs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "salchicha empanizada cocinada"
+msgstr[1] "salchichas empanizadas cocinadas"
+msgstr[2] "salchichas empanizadas cocinadas"
#. ~ Description for cooked corn dog
#: data/json/items/comestibles/junkfood.json
@@ -83522,9 +83812,9 @@ msgstr ""
#: data/json/items/comestibles/junkfood.json
msgid "homemade corn dog"
msgid_plural "homemade corn dogs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "salchicha empanizada casera"
+msgstr[1] "salchichas empanizadas caseras"
+msgstr[2] "salchichas empanizadas caseras"
#. ~ Description for homemade corn dog
#: data/json/items/comestibles/junkfood.json
@@ -83606,9 +83896,9 @@ msgstr "Son aros de cebolla fritos. Crujientes y deliciosos."
#: data/json/items/comestibles/junkfood.json
msgid "uncooked hot dog"
msgid_plural "uncooked hot dogs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pancho sin cocinar"
+msgstr[1] "panchos sin cocinar"
+msgstr[2] "panchos sin cocinar"
#. ~ Description for {'str': 'uncooked hot dog'}
#: data/json/items/comestibles/junkfood.json
@@ -83622,9 +83912,9 @@ msgstr ""
#: data/json/items/comestibles/junkfood.json
msgid "campfire hot dog"
msgid_plural "campfire hot dogs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "salchicha de fogata"
+msgstr[1] "salchichas de fogata"
+msgstr[2] "salchichas de fogata"
#. ~ Description for {'str': 'campfire hot dog'}
#: data/json/items/comestibles/junkfood.json
@@ -83638,9 +83928,9 @@ msgstr ""
#: data/json/items/comestibles/junkfood.json
msgid "cooked hot dog"
msgid_plural "cooked hot dogs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pancho cocinado"
+msgstr[1] "panchos cocinados"
+msgstr[2] "panchos cocinados"
#. ~ Description for {'str': 'cooked hot dog'}
#: data/json/items/comestibles/junkfood.json
@@ -83670,17 +83960,17 @@ msgstr ""
#: data/json/items/comestibles/meat_dishes.json
msgid "raw sausage"
msgid_plural "raw sausages"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "salchicha cruda"
+msgstr[1] "salchichas crudas"
+msgstr[2] "salchichas crudas"
#. ~ Conditional name for raw sausage when FLAG matches CANNIBALISM
#: data/json/items/comestibles/meat_dishes.json
msgid "raw Mannwurst"
msgid_plural "raw Mannwursts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Juannwurst cruda"
+msgstr[1] "Juannwurst crudas"
+msgstr[2] "Juannwurst crudas"
#. ~ Conditional name for raw sausage when COMPONENT_ID matches mutant
#. ~ Conditional name for smoked sausage when COMPONENT_ID matches mutant
@@ -83691,9 +83981,9 @@ msgstr[2] ""
#, c-format
msgid "sinister %s"
msgid_plural "sinister %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "siniestro %s"
+msgstr[1] "siniestros %s"
+msgstr[2] "siniestros %s"
#. ~ Description for raw sausage
#: data/json/items/comestibles/meat_dishes.json
@@ -83703,17 +83993,17 @@ msgstr "Es una salchicha grande y cruda, lista para ahumar o para cocinar."
#: data/json/items/comestibles/meat_dishes.json
msgid "smoked sausage"
msgid_plural "smoked sausages"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "salchicha ahumada"
+msgstr[1] "salchichas ahumadas"
+msgstr[2] "salchichas ahumadas"
#. ~ Conditional name for smoked sausage when FLAG matches CANNIBALISM
#: data/json/items/comestibles/meat_dishes.json
msgid "smoked Mannwurst"
msgid_plural "smoked Mannwursts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Juannwurst ahumada"
+msgstr[1] "Juannwurst ahumadas"
+msgstr[2] "Juannwurst ahumadas"
#. ~ Description for smoked sausage
#: data/json/items/comestibles/meat_dishes.json
@@ -83725,17 +84015,17 @@ msgstr ""
#: data/json/items/comestibles/meat_dishes.json
msgid "cooked sausage"
msgid_plural "cooked sausages"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "salchicha cocinada"
+msgstr[1] "salchichas cocinadas"
+msgstr[2] "salchichas cocinadas"
#. ~ Conditional name for cooked sausage when FLAG matches CANNIBALISM
#: data/json/items/comestibles/meat_dishes.json
msgid "cooked Mannwurst"
msgid_plural "cooked Mannwursts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Juannwurst cocinada"
+msgstr[1] "Juannwurst cocinadas"
+msgstr[2] "Juannwurst cocinadas"
#. ~ Description for cooked sausage
#: data/json/items/comestibles/meat_dishes.json
@@ -83791,17 +84081,17 @@ msgstr ""
#: data/json/items/comestibles/meat_dishes.json
msgid "bratwurst"
msgid_plural "bratwursts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bratwurst"
+msgstr[1] "bratwursts"
+msgstr[2] "bratwursts"
#. ~ Conditional name for {'str': 'bratwurst'} when FLAG matches CANNIBALISM
#: data/json/items/comestibles/meat_dishes.json
msgid "Mannbrat"
msgid_plural "Mannbrats"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Juannbrat"
+msgstr[1] "Juannbrats"
+msgstr[2] "Juannbrats"
#. ~ Conditional name for {'str': 'bratwurst'} when COMPONENT_ID matches
#. mutant
@@ -83809,9 +84099,9 @@ msgstr[2] ""
#, c-format
msgid "baleful %s"
msgid_plural "baleful %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "torvo %s"
+msgstr[1] "torvos %s"
+msgstr[2] "torvos %s"
#. ~ Description for {'str': 'bratwurst'}
#: data/json/items/comestibles/meat_dishes.json
@@ -83825,9 +84115,9 @@ msgstr ""
#: data/json/items/comestibles/meat_dishes.json
msgid "royal beef"
msgid_plural "royal beef"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "carne real"
+msgstr[1] "carnes reales"
+msgstr[2] "carnes reales"
#. ~ Description for {'str_sp': 'royal beef'}
#: data/json/items/comestibles/meat_dishes.json
@@ -83883,9 +84173,9 @@ msgstr ""
#: data/json/items/comestibles/meat_dishes.json
msgid "raw wasteland sausage"
msgid_plural "raw wasteland sausages"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "salchicha baldía cruda"
+msgstr[1] "salchichas baldías crudas"
+msgstr[2] "salchichas baldías crudas"
#. ~ Description for raw wasteland sausage
#: data/json/items/comestibles/meat_dishes.json
@@ -83926,9 +84216,9 @@ msgstr ""
#: data/json/items/comestibles/meat_dishes.json
msgid "glazed tenderloins"
msgid_plural "glazed tenderloins"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lomito glaseado"
+msgstr[1] "lomitos glaseados"
+msgstr[2] "lomitos glaseados"
#. ~ Conditional name for {'str_sp': 'glazed tenderloins'} when COMPONENT_ID
#. matches mutant
@@ -83936,9 +84226,9 @@ msgstr[2] ""
#, c-format
msgid "grisly %s"
msgid_plural "grisly %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "horripilante %s"
+msgstr[1] "horripilantes %s"
+msgstr[2] "horripilantes %s"
#. ~ Description for {'str_sp': 'glazed tenderloins'}
#: data/json/items/comestibles/meat_dishes.json
@@ -83954,27 +84244,27 @@ msgstr ""
#: data/json/items/comestibles/meat_dishes.json
msgid "currywurst"
msgid_plural "currywursts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "currywurst"
+msgstr[1] "currywursts"
+msgstr[2] "currywursts"
#. ~ Conditional name for currywurst when FLAG matches CANNIBALISM
#: data/json/items/comestibles/meat_dishes.json
#, c-format
msgid "cheapskate %s"
msgid_plural "cheapskate %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "miserable %s"
+msgstr[1] "miserables %s"
+msgstr[2] "miserables %s"
#. ~ Conditional name for currywurst when COMPONENT_ID matches mutant
#: data/json/items/comestibles/meat_dishes.json
#, c-format
msgid "bloodcurdling %s"
msgid_plural "bloodcurdling %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "espeluznante %s"
+msgstr[1] "espeluznantes %s"
+msgstr[2] "espeluznantes %s"
#. ~ Description for currywurst
#: data/json/items/comestibles/meat_dishes.json
@@ -83997,18 +84287,18 @@ msgstr[2] "áspics"
#, c-format
msgid "abomination %s"
msgid_plural "abomination %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "abominación %s"
+msgstr[1] "abominaciones %s"
+msgstr[2] "abominaciones %s"
#. ~ Conditional name for {'str': 'aspic'} when FLAG matches CANNIBALISM
#: data/json/items/comestibles/meat_dishes.json
#, c-format
msgid "amoral %s"
msgid_plural "amoral %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "amoral %s"
+msgstr[1] "amorales %s"
+msgstr[2] "amorales %s"
#. ~ Description for {'str': 'aspic'}
#: data/json/items/comestibles/meat_dishes.json
@@ -84102,9 +84392,9 @@ msgstr[2] "fiambres"
#, c-format
msgid "loathsome %s"
msgid_plural "loathsome %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "asqueroso %s"
+msgstr[1] "asquerosos %s"
+msgstr[2] "asquerosos %s"
#. ~ Description for lunch meat
#: data/json/items/comestibles/meat_dishes.json
@@ -84118,18 +84408,18 @@ msgstr ""
#: data/json/items/comestibles/meat_dishes.json
msgid "bologna"
msgid_plural "bologna"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bologna"
+msgstr[1] "bologna"
+msgstr[2] "bologna"
#. ~ Conditional name for {'str_sp': 'bologna'} when FLAG matches CANNIBALISM
#: data/json/items/comestibles/meat_dishes.json
#, c-format
msgid "brat %s"
msgid_plural "brat %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pibe %s"
+msgstr[1] "pibes %s"
+msgstr[2] "pibes %s"
#. ~ Conditional name for {'str_sp': 'bologna'} when COMPONENT_ID matches
#. mutant
@@ -84137,9 +84427,9 @@ msgstr[2] ""
#, c-format
msgid "bleak %s"
msgid_plural "bleak %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lúgubre %s"
+msgstr[1] "lúgubres %s"
+msgstr[2] "lúgubres %s"
#. ~ Description for {'str_sp': 'bologna'}
#: data/json/items/comestibles/meat_dishes.json
@@ -84173,9 +84463,9 @@ msgstr ""
#: data/json/items/comestibles/meat_dishes.json
msgid "SPAM"
msgid_plural "SPAM"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Viandada"
+msgstr[1] "Viandada"
+msgstr[2] "Viandada"
#. ~ Description for {'str_sp': 'SPAM'}
#: data/json/items/comestibles/meat_dishes.json
@@ -84191,9 +84481,9 @@ msgstr ""
#: data/json/items/comestibles/meat_dishes.json
msgid "holy SPAM of debugging"
msgid_plural "holy SPAMs of debugging"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "santa Viandada del debugging"
+msgstr[1] "santas Viandadas del debugging"
+msgstr[2] "santas Viandadas del debugging"
#. ~ Description for {'str': 'holy SPAM of debugging', 'str_pl': 'holy SPAMs
#. of debugging'}
@@ -84239,9 +84529,9 @@ msgstr[2] "salsas espesas de Mannwurst"
#, c-format
msgid "ghastly %s"
msgid_plural "ghastly %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "horroroso %s"
+msgstr[1] "horrorosos %s"
+msgstr[2] "horrorosos %s"
#. ~ Description for {'str': 'sausage gravy', 'str_pl': 'sausage gravies'}
#: data/json/items/comestibles/meat_dishes.json
@@ -84255,18 +84545,18 @@ msgstr ""
#: data/json/items/comestibles/meat_dishes.json
msgid "pemmican"
msgid_plural "pemmican"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pemmican"
+msgstr[1] "pemmican"
+msgstr[2] "pemmican"
#. ~ Conditional name for {'str_sp': 'pemmican'} when FLAG matches CANNIBALISM
#: data/json/items/comestibles/meat_dishes.json
#, c-format
msgid "prepper %s"
msgid_plural "prepper %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "survivalista %s"
+msgstr[1] "survivalistas %s"
+msgstr[2] "survivalistas %s"
#. ~ Conditional name for {'str_sp': 'pemmican'} when COMPONENT_ID matches
#. mutant
@@ -84274,9 +84564,9 @@ msgstr[2] ""
#, c-format
msgid "pernicious %s"
msgid_plural "pernicious %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pernicioso %s"
+msgstr[1] "perniciosos %s"
+msgstr[2] "perniciosos %s"
#. ~ Description for {'str_sp': 'pemmican'}
#: data/json/items/comestibles/meat_dishes.json
@@ -84309,9 +84599,9 @@ msgstr[2] "pastas instantáneas sabor vagabundo"
#, c-format
msgid "heinous %s"
msgid_plural "heinous %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cruel %s"
+msgstr[1] "crueles %s"
+msgstr[2] "crueles %s"
#. ~ Description for hamburger helper
#: data/json/items/comestibles/meat_dishes.json
@@ -84348,18 +84638,18 @@ msgstr[2] "chilis con carne"
#: data/json/items/comestibles/meat_dishes.json
msgid "chili con cabron"
msgid_plural "chilis con cabron"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "chili con cabrón"
+msgstr[1] "chilis con cabrón"
+msgstr[2] "chilis con cabrón"
#. ~ Conditional name for {'str': 'chili con carne', 'str_pl': 'chilis con
#. carne'} when COMPONENT_ID matches mutant
#: data/json/items/comestibles/meat_dishes.json
msgid "chili con chupacabra"
msgid_plural "chilis con chupacabra"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "chili con chupacabra"
+msgstr[1] "chilis con chupacabra"
+msgstr[2] "chilis con chupacabra"
#. ~ Description for {'str': 'chili con carne', 'str_pl': 'chilis con carne'}
#: data/json/items/comestibles/meat_dishes.json
@@ -84397,9 +84687,9 @@ msgstr "¡Ahora con el 95 por ciento menos de delfines!"
#: data/json/items/comestibles/meat_dishes.json
msgid "canned salmon"
msgid_plural "canned salmon"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lata de salmón"
+msgstr[1] "latas de salmón"
+msgstr[2] "latas de salmón"
#. ~ Description for {'str_sp': 'canned salmon'}
#: data/json/items/comestibles/meat_dishes.json
@@ -84421,9 +84711,9 @@ msgstr "Una pasta de pollo blanca y brillante."
#: data/json/items/comestibles/meat_dishes.json
msgid "pickled herring"
msgid_plural "pickled herring"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "arenque al escabeche"
+msgstr[1] "arenque al escabeche"
+msgstr[2] "arenque al escabeche"
#. ~ Description for {'str_sp': 'pickled herring'}
#: data/json/items/comestibles/meat_dishes.json
@@ -84454,17 +84744,17 @@ msgstr[2] "cremas de almejas"
#: data/json/items/comestibles/meat_dishes.json
msgid "meat chowder"
msgid_plural "meat chowders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "crema de carne"
+msgstr[1] "cremas de carne"
+msgstr[2] "cremas de carne"
#. ~ Conditional name for clam chowder when COMPONENT_ID matches mutant
#: data/json/items/comestibles/meat_dishes.json
msgid "monster chowder"
msgid_plural "monster chowders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "crema de monstruo"
+msgstr[1] "cremas de monstruo"
+msgstr[2] "cremas de monstruo"
#. ~ Description for clam chowder
#: data/json/items/comestibles/meat_dishes.json
@@ -84487,9 +84777,9 @@ msgstr[2] "alubias horneadas"
#: data/json/items/comestibles/meat_dishes.json
msgid "ork and beans"
msgid_plural "ork and beans"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "porco con porotos"
+msgstr[1] "porco con porotos"
+msgstr[2] "porco con porotos"
#. ~ Description for {'str_sp': 'baked beans'}
#: data/json/items/comestibles/meat_dishes.json
@@ -84508,9 +84798,9 @@ msgstr[2] "arroces fritos con carne"
#: data/json/items/comestibles/meat_dishes.json
msgid "mutant fried rice"
msgid_plural "mutant fried rice"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "arroz frito con carne mutante"
+msgstr[1] "arroz frito con carne mutante"
+msgstr[2] "arroz frito con carne mutante"
#. ~ Description for {'str_sp': 'meat fried rice'}
#: data/json/items/comestibles/meat_dishes.json
@@ -84529,9 +84819,9 @@ msgstr[2] "alubias con arroz deluxe"
#: data/json/items/comestibles/meat_dishes.json
msgid "\"deluxe\" beans and rice"
msgid_plural "\"deluxe\" beans and rice"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "porotos con arroz \"deluxe\""
+msgstr[1] "porotos con arroz \"deluxe\""
+msgstr[2] "porotos con arroz \"deluxe\""
#. ~ Description for {'str_sp': 'deluxe beans and rice'}
#: data/json/items/comestibles/meat_dishes.json
@@ -84553,18 +84843,18 @@ msgstr[2] "tartas de carne"
#: data/json/items/comestibles/meat_dishes.json
msgid "prick pie"
msgid_plural "prick pies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tarta de boludo"
+msgstr[1] "tartas de boludo"
+msgstr[2] "tartas de boludo"
#. ~ Conditional name for meat pie when COMPONENT_ID matches mutant
#: data/json/items/comestibles/meat_dishes.json
#, c-format
msgid "malignant %s"
msgid_plural "malignant %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "malicioso %s"
+msgstr[1] "maliciosos %s"
+msgstr[2] "maliciosos %s"
#. ~ Description for meat pie
#: data/json/items/comestibles/meat_dishes.json
@@ -84582,18 +84872,18 @@ msgstr[2] "pizzas de carne"
#: data/json/items/comestibles/meat_dishes.json
msgid "poser pizza"
msgid_plural "poser pizzas"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pizza de impostor"
+msgstr[1] "pizzas de impostor"
+msgstr[2] "pizzas de impostor"
#. ~ Conditional name for meat pizza when COMPONENT_ID matches mutant
#: data/json/items/comestibles/meat_dishes.json
#, c-format
msgid "miserable %s"
msgid_plural "miserable %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "miserable %s"
+msgstr[1] "miserables %s"
+msgstr[2] "miserables %s"
#. ~ Description for meat pizza
#: data/json/items/comestibles/meat_dishes.json
@@ -84607,9 +84897,9 @@ msgstr ""
#: data/json/items/comestibles/meat_dishes.json
msgid "supreme pizza"
msgid_plural "supreme pizzas"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pizza suprema"
+msgstr[1] "pizzas supremas"
+msgstr[2] "pizzas supremas"
#. ~ Description for supreme pizza
#: data/json/items/comestibles/meat_dishes.json
@@ -84628,9 +84918,9 @@ msgstr[2] "huevos revueltos deluxe"
#: data/json/items/comestibles/meat_dishes.json
msgid "\"deluxe\" scrambled eggs"
msgid_plural "\"deluxe\" scrambled eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevos revueltos \"deluxe\""
+msgstr[1] "huevos revueltos \"deluxe\""
+msgstr[2] "huevos revueltos \"deluxe\""
#. ~ Description for {'str_sp': 'deluxe scrambled eggs'}
#: data/json/items/comestibles/meat_dishes.json
@@ -84676,9 +84966,9 @@ msgstr[2] "rebanadas de carne salada"
#: data/json/items/comestibles/meat_dishes.json
msgid "salted simpleton slice"
msgid_plural "salted simpleton slices"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "feta de papanatas salada"
+msgstr[1] "fetas de papanatas salada"
+msgstr[2] "fetas de papanatas salada"
#. ~ Description for salted meat slice
#: data/json/items/comestibles/meat_dishes.json
@@ -84699,9 +84989,9 @@ msgstr[2] "espagueti a la boloñesa"
#: data/json/items/comestibles/meat_dishes.json
msgid "scoundrel spaghetti"
msgid_plural "scoundrel spaghettis"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "espagueti a la sinvergüenza"
+msgstr[1] "espagueti a la sinvergüenza"
+msgstr[2] "espagueti a la sinvergüenza"
#. ~ Conditional name for {'str_sp': 'spaghetti bolognese'} when COMPONENT_ID
#. matches mutant
@@ -84709,9 +84999,9 @@ msgstr[2] ""
#, c-format
msgid "gnarly %s"
msgid_plural "gnarly %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "nudoso %s"
+msgstr[1] "nudosos %s"
+msgstr[2] "nudosos %s"
#. ~ Description for {'str_sp': 'spaghetti bolognese'}
#: data/json/items/comestibles/meat_dishes.json
@@ -84730,18 +85020,18 @@ msgstr[2] "lasañas"
#, c-format
msgid "Luigi %s"
msgid_plural "Luigi %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Luigi %s"
+msgstr[1] "Luigi %s"
+msgstr[2] "Luigi %s"
#. ~ Conditional name for lasagne when COMPONENT_ID matches mutant
#: data/json/items/comestibles/meat_dishes.json
#, c-format
msgid "monster %s"
msgid_plural "monster %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "monstruoso %s"
+msgstr[1] "monstruosos %s"
+msgstr[2] "monstruosos %s"
#. ~ Description for lasagne
#: data/json/items/comestibles/meat_dishes.json
@@ -84755,9 +85045,9 @@ msgstr ""
#: data/json/items/comestibles/meat_dishes.json
msgid "fried SPAM"
msgid_plural "fried SPAM"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Viandada frita"
+msgstr[1] "Viandada frita"
+msgstr[2] "Viandada frita"
#. ~ Description for {'str_sp': 'fried SPAM'}
#: data/json/items/comestibles/meat_dishes.json
@@ -84776,18 +85066,18 @@ msgstr[2] "hamburguesas de queso"
#, c-format
msgid "chump %s"
msgid_plural "chump %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tonto %s"
+msgstr[1] "tontos %s"
+msgstr[2] "tontos %s"
#. ~ Conditional name for cheeseburger when COMPONENT_ID matches mutant
#: data/json/items/comestibles/meat_dishes.json
#, c-format
msgid "chilling %s"
msgid_plural "chilling %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "escalofriante %s"
+msgstr[1] "escalofriantes %s"
+msgstr[2] "escalofriantes %s"
#. ~ Description for cheeseburger
#: data/json/items/comestibles/meat_dishes.json
@@ -84809,18 +85099,18 @@ msgstr[2] "hamburguesas"
#: data/json/items/comestibles/meat_dishes.json
msgid "bobburger"
msgid_plural "bobburgers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "juanburguesa"
+msgstr[1] "juanburguesas"
+msgstr[2] "juanburguesas"
#. ~ Conditional name for hamburger when COMPONENT_ID matches mutant
#: data/json/items/comestibles/meat_dishes.json
#, c-format
msgid "horrible %s"
msgid_plural "horrible %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "horrible %s"
+msgstr[1] "horribles %s"
+msgstr[2] "horribles %s"
#. ~ Description for hamburger
#: data/json/items/comestibles/meat_dishes.json
@@ -84830,9 +85120,9 @@ msgstr "Un sandwich de carne picada con condimentos."
#: data/json/items/comestibles/meat_dishes.json
msgid "sloppy joe"
msgid_plural "sloppy joes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sloppy joe"
+msgstr[1] "sloppy joes"
+msgstr[2] "sloppy joes"
#. ~ Conditional name for sloppy joe when FLAG matches CANNIBALISM
#: data/json/items/comestibles/meat_dishes.json
@@ -84847,9 +85137,9 @@ msgstr[2] "mánguches"
#, c-format
msgid "suspicious %s"
msgid_plural "suspicious %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sospechoso %s"
+msgstr[1] "sospechosos %s"
+msgstr[2] "sospechosos %s"
#. ~ Description for sloppy joe
#: data/json/items/comestibles/meat_dishes.json
@@ -84872,18 +85162,18 @@ msgstr[2] "tacos"
#, c-format
msgid "tio %s"
msgid_plural "tio %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tío %s"
+msgstr[1] "tíos %s"
+msgstr[2] "tíos %s"
#. ~ Conditional name for taco when COMPONENT_ID matches mutant
#: data/json/items/comestibles/meat_dishes.json
#, c-format
msgid "terrifying %s"
msgid_plural "terrifying %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "aterrador %s"
+msgstr[1] "aterradores %s"
+msgstr[2] "aterradores %s"
#. ~ Description for taco
#: data/json/items/comestibles/meat_dishes.json
@@ -84905,9 +85195,9 @@ msgstr[2] "carnes en escabeche"
#: data/json/items/comestibles/meat_dishes.json
msgid "pickled punk"
msgid_plural "pickled punks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "punk al escabeche"
+msgstr[1] "punks al escabeche"
+msgstr[2] "punks al escabeche"
#. ~ Description for pickled meat
#: data/json/items/comestibles/meat_dishes.json
@@ -84928,9 +85218,9 @@ msgstr[2] "carnes deshidratadas"
#, c-format
msgid "%s, human"
msgid_plural "%s, human"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "%s, humano"
+msgstr[1] "%s, humanos"
+msgstr[2] "%s, humanos"
#. ~ Description for dehydrated meat
#: data/json/items/comestibles/meat_dishes.json
@@ -84958,9 +85248,9 @@ msgstr "Son trozos de carne rehidratados. Así se disfrutan mucho más."
#: data/json/items/comestibles/meat_dishes.json
msgid "haggis"
msgid_plural "haggises"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "haggis"
+msgstr[1] "haggises"
+msgstr[2] "haggises"
#. ~ Conditional name for {'str': 'haggis', 'str_pl': 'haggises'} when FLAG
#. matches CANNIBALISM
@@ -84970,9 +85260,9 @@ msgstr[2] ""
#, c-format
msgid "human %s"
msgid_plural "human %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "humano %s"
+msgstr[1] "humanos %s"
+msgstr[2] "humanos %s"
#. ~ Description for {'str': 'haggis', 'str_pl': 'haggises'}
#: data/json/items/comestibles/meat_dishes.json
@@ -85016,9 +85306,9 @@ msgstr[2] "temaki de carne"
#, c-format
msgid "troubling %s"
msgid_plural "troubling %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "inquietante %s"
+msgstr[1] "inquietantes %s"
+msgstr[2] "inquietantes %s"
#. ~ Description for {'str_sp': 'meat temaki'}
#: data/json/items/comestibles/meat_dishes.json
@@ -85069,9 +85359,9 @@ msgstr[2] "pelmenis"
#, c-format
msgid "perilous %s"
msgid_plural "perilous %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "arriesgado %s"
+msgstr[1] "arriesgados %s"
+msgstr[2] "arriesgados %s"
#. ~ Description for pelmeni
#: data/json/items/comestibles/meat_dishes.json
@@ -85085,17 +85375,17 @@ msgstr ""
#: data/json/items/comestibles/meat_dishes.json
msgid "homemade burrito"
msgid_plural "homemade burritos"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "burrito casero"
+msgstr[1] "burritos caseros"
+msgstr[2] "burritos caseros"
#. ~ Conditional name for homemade burrito when COMPONENT_ID matches mutant
#: data/json/items/comestibles/meat_dishes.json
msgid "bone-chilling burrito"
msgid_plural "bone-chilling burritos"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "burrito espeluznante"
+msgstr[1] "burritos espeluznantes"
+msgstr[2] "burritos espeluznantes"
#. ~ Description for homemade burrito
#: data/json/items/comestibles/meat_dishes.json
@@ -85129,9 +85419,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "melatonin tablet"
msgid_plural "melatonin tablets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pastilla de melatonina"
+msgstr[1] "pastillas de melatonina"
+msgstr[2] "pastillas de melatonina"
#. ~ Use action activation_message for melatonin tablet.
#: data/json/items/comestibles/med.json
@@ -85195,9 +85485,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "antibiotics"
msgid_plural "antibiotics"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "antibióticos"
+msgstr[1] "antibióticos"
+msgstr[2] "antibióticos"
#. ~ Description for {'str_sp': 'antibiotics'}
#: data/json/items/comestibles/med.json
@@ -85229,9 +85519,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "antiparasitic drug"
msgid_plural "antiparasitic drug"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "droga antiparasitaria"
+msgstr[1] "droga antiparasitaria"
+msgstr[2] "droga antiparasitaria"
#. ~ Description for {'str_sp': 'antiparasitic drug'}
#: data/json/items/comestibles/med.json
@@ -85280,9 +85570,9 @@ msgstr "Son vendas comunes de tela. Se usan para curar lastimaduras pequeñas."
#: data/json/items/comestibles/med.json
msgid "makeshift bandage"
msgid_plural "makeshift bandages"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "venda improvisada"
+msgstr[1] "vendas improvisadas"
+msgstr[2] "vendas improvisadas"
#. ~ Description for makeshift bandage
#: data/json/items/comestibles/med.json
@@ -85292,9 +85582,9 @@ msgstr "Es un venda común de tela. Mejor que nada."
#: data/json/items/comestibles/med.json
msgid "bleached makeshift bandage"
msgid_plural "bleached makeshift bandages"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "venda improvisada con lavandina"
+msgstr[1] "vendas improvisadas con lavandina"
+msgstr[2] "vendas improvisadas con lavandina"
#. ~ Description for {'str': 'bleached makeshift bandage'}
#: data/json/items/comestibles/med.json
@@ -85304,9 +85594,9 @@ msgstr "Es una venda común de tela. Es blanca... como las vendas de en serio."
#: data/json/items/comestibles/med.json
msgid "boiled makeshift bandage"
msgid_plural "boiled makeshift bandages"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "venda improvisada hervida"
+msgstr[1] "vendas improvisadas hervidas"
+msgstr[2] "vendas improvisadas hervidas"
#. ~ Description for {'str': 'boiled makeshift bandage'}
#: data/json/items/comestibles/med.json
@@ -85422,9 +85712,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "chloroform soaked rag"
msgid_plural "chloroform soaked rags"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "trapo empapado con cloroformo"
+msgstr[1] "trapos empapados con cloroformo"
+msgstr[2] "trapos empapados con cloroformo"
#. ~ Description for chloroform soaked rag
#: data/json/items/comestibles/med.json
@@ -85572,9 +85862,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "antiseptic"
msgid_plural "antiseptic"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "antiséptico"
+msgstr[1] "antiséptico"
+msgstr[2] "antiséptico"
#. ~ Description for {'str_sp': 'antiseptic'}
#: data/json/items/comestibles/med.json
@@ -85584,9 +85874,9 @@ msgstr "Un poderoso antiséptico comúnmente usado para heridas contaminadas."
#: data/json/items/comestibles/med.json
msgid "makeshift antiseptic"
msgid_plural "makeshift antiseptics"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "antiséptico improvisado"
+msgstr[1] "antisépticos improvisados"
+msgstr[2] "antisépticos improvisados"
#. ~ Description for makeshift antiseptic
#: data/json/items/comestibles/med.json
@@ -85902,6 +86192,7 @@ msgstr ""
#: data/json/items/comestibles/med.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "chewing gum"
msgid_plural "chewing gum"
msgstr[0] "chicle"
@@ -85958,9 +86249,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "potassium iodide tablet"
msgid_plural "potassium iodide tablets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pastilla de yoduro de potasio"
+msgstr[1] "pastillas de yoduro de potasio"
+msgstr[2] "pastillas de yoduro de potasio"
#. ~ Use action activation_message for potassium iodide tablet.
#: data/json/items/comestibles/med.json
@@ -85988,9 +86279,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "pink tab"
msgid_plural "pink tabs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartoncito rosa"
+msgstr[1] "cartoncitos rosas"
+msgstr[2] "cartoncitos rosas"
#. ~ Use action activation_message for pink tab.
#: data/json/items/comestibles/med.json
@@ -86065,9 +86356,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "mugwort oil"
msgid_plural "mugwort oils"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "aceite de abrótano"
+msgstr[1] "aceites de abrótano"
+msgstr[2] "aceites de abrótano"
#. ~ Description for mugwort oil
#: data/json/items/comestibles/med.json
@@ -86114,9 +86405,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "oxycodone"
msgid_plural "oxycodones"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "oxicodona"
+msgstr[1] "oxicodonas"
+msgstr[2] "oxicodonas"
#. ~ Use action activation_message for oxycodone.
#: data/json/items/comestibles/med.json
@@ -86135,9 +86426,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "Ambien"
msgid_plural "Ambien"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Ambien"
+msgstr[1] "Ambien"
+msgstr[2] "Ambien"
#. ~ Description for {'str_sp': 'Ambien'}
#: data/json/items/comestibles/med.json
@@ -86203,9 +86494,9 @@ msgstr "Jarabe para la tos hecho de amapola mutada. Te va a dar sueño."
#: data/json/items/comestibles/med.json
msgid "Prozac"
msgid_plural "Prozac"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Prozac"
+msgstr[1] "Prozac"
+msgstr[2] "Prozac"
#. ~ Description for {'str_sp': 'Prozac'}
#: data/json/items/comestibles/med.json
@@ -86223,9 +86514,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "Prussian blue tablet"
msgid_plural "Prussian blue tablets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pastilla de azul de Prusia"
+msgstr[1] "pastillas de azul de Prusia"
+msgstr[2] "pastillas de azul de Prusia"
#. ~ Use action activation_message for {'str': 'Prussian blue tablet'}.
#: data/json/items/comestibles/med.json
@@ -86278,9 +86569,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "Thorazine"
msgid_plural "Thorazine"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Torazina"
+msgstr[1] "Torazina"
+msgstr[2] "Torazina"
#. ~ Description for {'str_sp': 'Thorazine'}
#: data/json/items/comestibles/med.json
@@ -86296,9 +86587,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "thyme oil"
msgid_plural "thyme oils"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "aceite de tomillo"
+msgstr[1] "aceites de tomillo"
+msgstr[2] "aceites de tomillo"
#. ~ Description for thyme oil
#: data/json/items/comestibles/med.json
@@ -86355,9 +86646,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "gamma globulin shot"
msgid_plural "gamma globulin shots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "vacuna de gamma globulina"
+msgstr[1] "vacunas de gamma globulina"
+msgstr[2] "vacunas de gamma globulina"
#. ~ Description for gamma globulin shot
#: data/json/items/comestibles/med.json
@@ -86373,9 +86664,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "multivitamin"
msgid_plural "multivitamins"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "multivitaminas"
+msgstr[1] "multivitaminas"
+msgstr[2] "multivitaminas"
#. ~ Use action activation_message for multivitamin.
#. ~ Use action activation_message for calcium tablet.
@@ -86399,9 +86690,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "calcium tablet"
msgid_plural "calcium tablets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pastilla de calcio"
+msgstr[1] "pastillas de calcio"
+msgstr[2] "pastillas de calcio"
#. ~ Description for calcium tablet
#: data/json/items/comestibles/med.json
@@ -86416,9 +86707,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "bone meal tablet"
msgid_plural "bone meal tablets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pastilla de harina de hueso"
+msgstr[1] "pastillas de harina de hueso"
+msgstr[2] "pastillas de harina de hueso"
#. ~ Description for bone meal tablet
#: data/json/items/comestibles/med.json
@@ -86432,9 +86723,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "flavored bone meal tablet"
msgid_plural "flavored bone meal tablets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pastilla de harina de hueso con sabor"
+msgstr[1] "pastillas de harina de hueso con sabor"
+msgstr[2] "pastillas de harina de hueso con sabor"
#. ~ Description for flavored bone meal tablet
#: data/json/items/comestibles/med.json
@@ -86469,9 +86760,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "injectable vitamin B"
msgid_plural "injectable vitamin Bs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "vitamina B inyectable"
+msgstr[1] "vitamina B inyectable"
+msgstr[2] "vitamina B inyectable"
#. ~ Use action activation_message for injectable vitamin B.
#: data/json/items/comestibles/med.json
@@ -86490,9 +86781,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "injectable iron"
msgid_plural "injectable irons"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hierro inyectable"
+msgstr[1] "hierro inyectable"
+msgstr[2] "hierro inyectable"
#. ~ Use action activation_message for injectable iron.
#: data/json/items/comestibles/med.json
@@ -86545,9 +86836,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "antiseptic soaked rag"
msgid_plural "antiseptic soaked rags"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "trapo empapado de antiséptico"
+msgstr[1] "trapos empapados de antiséptico"
+msgstr[2] "trapos empapados de antiséptico"
#. ~ Description for {'str': 'antiseptic soaked rag'}
#: data/json/items/comestibles/med.json
@@ -86561,9 +86852,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "antiseptic soaked cotton balls"
msgid_plural "antiseptic soaked cotton balls"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "algodón empapado de antiséptico"
+msgstr[1] "algodón empapado de antiséptico"
+msgstr[2] "algodón empapado de antiséptico"
#. ~ Description for {'str_sp': 'antiseptic soaked cotton balls'}
#: data/json/items/comestibles/med.json
@@ -86596,9 +86887,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "heartburn medicine"
msgid_plural "heartburn medicines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "antiácido"
+msgstr[1] "antiácidos"
+msgstr[2] "antiácidos"
#. ~ Use action activation_message for heartburn medicine.
#: data/json/items/comestibles/med.json
@@ -86619,9 +86910,9 @@ msgstr ""
#: data/mods/Aftershock/items/comestibles/comestibles.json
msgid "Panaceus"
msgid_plural "Panaceii"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Panacea"
+msgstr[1] "Panaceas"
+msgstr[2] "Panaceas"
#. ~ Use action activation_message for {'str': 'Panaceus', 'str_pl':
#. 'Panaceii'}.
@@ -86648,9 +86939,9 @@ msgstr ""
#: data/json/items/comestibles/med.json
msgid "cattail jelly"
msgid_plural "cattail jellies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "gelatina de junco"
+msgstr[1] "gelatinas de junco"
+msgstr[2] "gelatinas de junco"
#. ~ Description for {'str': 'cattail jelly', 'str_pl': 'cattail jellies'}
#: data/json/items/comestibles/med.json
@@ -86708,9 +86999,9 @@ msgstr "Una caja pequeña MRE, no deberías ver esto."
#: data/json/items/comestibles/mre.json
msgid "MRE entree"
msgid_plural "MRE entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MRE entrada"
+msgstr[1] "MRE entrada"
+msgstr[2] "MRE entrada"
#. ~ Description for {'str': 'MRE entree'}
#: data/json/items/comestibles/mre.json
@@ -86774,9 +87065,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "MRE - BBQ Beef"
msgid_plural "MREs - BBQ Beef"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MRE - Parrillada de vaca"
+msgstr[1] "MREs - Parrillada de vaca"
+msgstr[2] "MREs - Parrillada de vaca"
#. ~ Description for {'str': 'MRE - BBQ Beef', 'str_pl': 'MREs - BBQ Beef'}
#: data/json/items/comestibles/mre.json
@@ -86832,9 +87123,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "MRE - Chicken Chunks"
msgid_plural "MREs - Chicken Chunks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MRE - Pollo Trozado"
+msgstr[1] "MREs - Pollo Trozado"
+msgstr[2] "MREs - Pollo Trozado"
#. ~ Description for {'str': 'MRE - Chicken Chunks', 'str_pl': 'MREs - Chicken
#. Chunks'}
@@ -86852,9 +87143,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "MRE - Beef Taco"
msgid_plural "MREs - Beef Taco"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MRE - Taco de Carne"
+msgstr[1] "MREs - Taco de Carne"
+msgstr[2] "MREs - Taco de Carne"
#. ~ Description for {'str': 'MRE - Beef Taco', 'str_pl': 'MREs - Beef Taco'}
#: data/json/items/comestibles/mre.json
@@ -86871,9 +87162,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "MRE - Beef Brisket"
msgid_plural "MREs - Beef Brisket"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MRE - Costilla de Vaca"
+msgstr[1] "MREs - Costilla de Vaca"
+msgstr[2] "MREs - Costilla de Vaca"
#. ~ Description for {'str': 'MRE - Beef Brisket', 'str_pl': 'MREs - Beef
#. Brisket'}
@@ -86891,9 +87182,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "MRE - Meatballs & Marinara"
msgid_plural "MREs - Meatballs & Marinara"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MRE - Albóndigas con marinera"
+msgstr[1] "MREs - Albóndigas con marinera"
+msgstr[2] "MREs - Albóndigas con marinera"
#. ~ Description for {'str': 'MRE - Meatballs & Marinara', 'str_pl': 'MREs -
#. Meatballs & Marinara'}
@@ -86930,9 +87221,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "MRE - Chili & Macaroni"
msgid_plural "MREs - Chili & Macaroni"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MRE - Macarrones con chili"
+msgstr[1] "MREs - Macarrones con chili"
+msgstr[2] "MREs - Macarrones con chili"
#. ~ Description for {'str': 'MRE - Chili & Macaroni', 'str_pl': 'MREs - Chili
#. & Macaroni'}
@@ -86970,9 +87261,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "MRE - Macaroni Marinara"
msgid_plural "MREs - Macaroni Marinara"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MRE - Macarrones con Marinera"
+msgstr[1] "MREs - Macarrones con Marinera"
+msgstr[2] "MREs - Macarrones con Marinera"
#. ~ Description for {'str': 'MRE - Macaroni Marinara', 'str_pl': 'MREs -
#. Macaroni Marinara'}
@@ -86990,9 +87281,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "MRE - Cheese Tortellini"
msgid_plural "MREs - Cheese Tortellini"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MRE - Capelettini de Queso"
+msgstr[1] "MREs - Capelettini de Queso"
+msgstr[2] "MREs - Capelettini de Queso"
#. ~ Description for {'str': 'MRE - Cheese Tortellini', 'str_pl': 'MREs -
#. Cheese Tortellini'}
@@ -87030,9 +87321,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "MRE - Mexican Chicken Stew"
msgid_plural "MREs - Mexican Chicken Stew"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MRE - Estofado Mexicano de Pollo"
+msgstr[1] "MREs - Estofado Mexicano de Pollo"
+msgstr[2] "MREs - Estofado Mexicano de Pollo"
#. ~ Description for {'str': 'MRE - Mexican Chicken Stew', 'str_pl': 'MREs -
#. Mexican Chicken Stew'}
@@ -87050,9 +87341,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "MRE - Chicken Burrito Bowl"
msgid_plural "MREs - Chicken Burrito Bowl"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MRE - Burrito de Pollo"
+msgstr[1] "MREs - Burrito de Pollo"
+msgstr[2] "MREs - Burrito de Pollo"
#. ~ Description for {'str': 'MRE - Chicken Burrito Bowl', 'str_pl': 'MREs -
#. Chicken Burrito Bowl'}
@@ -87109,9 +87400,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "MRE - Pepper Jack Beef"
msgid_plural "MREs - Pepper Jack Beef"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MRE - Carne con Queso Jack"
+msgstr[1] "MREs - Carne con Queso Jack"
+msgstr[2] "MREs - Carne con Queso Jack"
#. ~ Description for {'str': 'MRE - Pepper Jack Beef', 'str_pl': 'MREs -
#. Pepper Jack Beef'}
@@ -87129,9 +87420,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "MRE - Hash Browns & Bacon"
msgid_plural "MREs - Hash Browns & Bacon"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MRE - Hash Browns y Panceta"
+msgstr[1] "MREs - Hash Browns y Panceta"
+msgstr[2] "MREs - Hash Browns y Panceta"
#. ~ Description for {'str': 'MRE - Hash Browns & Bacon', 'str_pl': 'MREs -
#. Hash Browns & Bacon'}
@@ -87169,9 +87460,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "MRE - Asian Beef & Vegetables"
msgid_plural "MREs - Asian Beef & Vegetables"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MRE - Carne de Asia con Verduras"
+msgstr[1] "MREs - Carne de Asia con Verduras"
+msgstr[2] "MREs - Carne de Asia con Verduras"
#. ~ Description for {'str': 'MRE - Asian Beef & Vegetables', 'str_pl': 'MREs
#. - Asian Beef & Vegetables'}
@@ -87189,9 +87480,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "MRE - Chicken Pesto & Pasta"
msgid_plural "MREs - Chicken Pesto & Pasta"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MRE - Pasta con Pesto y Pollo"
+msgstr[1] "MREs - Pasta con Pesto y Pollo"
+msgstr[2] "MREs - Pasta con Pesto y Pollo"
#. ~ Description for {'str': 'MRE - Chicken Pesto & Pasta', 'str_pl': 'MREs -
#. Chicken Pesto & Pasta'}
@@ -87209,9 +87500,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "MRE - Southwest Beef & Beans"
msgid_plural "MREs - Southwest Beef & Beans"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MRE - Carne del Suroeste con Porotos"
+msgstr[1] "MREs - Carne del Suroeste con Porotos"
+msgstr[2] "MREs - Carne del Suroeste con Porotos"
#. ~ Description for {'str': 'MRE - Southwest Beef & Beans', 'str_pl': 'MREs -
#. Southwest Beef & Beans'}
@@ -87229,9 +87520,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "MRE - Frankfurters & Beans"
msgid_plural "MREs - Frankfurters & Beans"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MRE - Salchichas de Frankfurt con porotos"
+msgstr[1] "MREs - Salchichas de Frankfurt con porotos"
+msgstr[2] "MREs - Salchichas de Frankfurt con porotos"
#. ~ Description for {'str': 'MRE - Frankfurters & Beans', 'str_pl': 'MREs -
#. Frankfurters & Beans'}
@@ -87248,9 +87539,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "chili & beans entree"
msgid_plural "chili & beans entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de porotos con chili"
+msgstr[1] "entradas de porotos con chili"
+msgstr[2] "entradas de porotos con chili"
#. ~ Description for chili & beans entree
#: data/json/items/comestibles/mre.json
@@ -87265,9 +87556,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "BBQ beef entree"
msgid_plural "BBQ beef entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de parrillada de vaca"
+msgstr[1] "entradas de parrillada de vaca"
+msgstr[2] "entradas de parrillada de vaca"
#. ~ Description for {'str': 'BBQ beef entree'}
#: data/json/items/comestibles/mre.json
@@ -87282,9 +87573,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "chicken noodle entree"
msgid_plural "chicken noodle entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de pollo y fideos"
+msgstr[1] "entradas de pollo y fideos"
+msgstr[2] "entradas de pollo y fideos"
#. ~ Description for chicken noodle entree
#: data/json/items/comestibles/mre.json
@@ -87299,9 +87590,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "spaghetti entree"
msgid_plural "spaghetti entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de espagueti"
+msgstr[1] "entradas de espagueti"
+msgstr[2] "entradas de espagueti"
#. ~ Description for spaghetti entree
#: data/json/items/comestibles/mre.json
@@ -87316,9 +87607,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "chicken chunks entree"
msgid_plural "chicken chunks entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de pollo trozado"
+msgstr[1] "entradas de pollo trozado"
+msgstr[2] "entradas de pollo trozado"
#. ~ Description for chicken chunks entree
#: data/json/items/comestibles/mre.json
@@ -87333,9 +87624,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "beef taco entree"
msgid_plural "beef taco entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de taco de carne"
+msgstr[1] "entradas de taco de carne"
+msgstr[2] "entradas de taco de carne"
#. ~ Description for {'str': 'beef taco entree'}
#: data/json/items/comestibles/mre.json
@@ -87350,9 +87641,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "beef brisket entree"
msgid_plural "beef brisket entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de costilla de vaca"
+msgstr[1] "entradas de costilla de vaca"
+msgstr[2] "entradas de costilla de vaca"
#. ~ Description for {'str': 'beef brisket entree'}
#: data/json/items/comestibles/mre.json
@@ -87367,9 +87658,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "meatballs & marinara entree"
msgid_plural "meatballs & marinara entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de albóndigas con marinera"
+msgstr[1] "entradas de albóndigas con marinera"
+msgstr[2] "entradas de albóndigas con marinera"
#. ~ Description for meatballs & marinara entree
#: data/json/items/comestibles/mre.json
@@ -87384,9 +87675,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "beef stew entree"
msgid_plural "beef stew entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de estofado de carne"
+msgstr[1] "entradas de estofado de carne"
+msgstr[2] "entradas de estofado de carne"
#. ~ Description for {'str': 'beef stew entree'}
#: data/json/items/comestibles/mre.json
@@ -87401,9 +87692,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "chili & macaroni entree"
msgid_plural "chili & macaroni entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de macarrones con chili"
+msgstr[1] "entradas de macarrones con chili"
+msgstr[2] "entradas de macarrones con chili"
#. ~ Description for chili & macaroni entree
#: data/json/items/comestibles/mre.json
@@ -87418,9 +87709,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "vegetarian taco entree"
msgid_plural "vegetarian taco entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de taco vegetariano"
+msgstr[1] "entradas de taco vegetariano"
+msgstr[2] "entradas de taco vegetariano"
#. ~ Description for vegetarian taco entree
#: data/json/items/comestibles/mre.json
@@ -87435,9 +87726,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "macaroni & marinara entree"
msgid_plural "macaroni & marinara entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de macarrones con marinera"
+msgstr[1] "entradas de macarrones con marinera"
+msgstr[2] "entradas de macarrones con marinera"
#. ~ Description for macaroni & marinara entree
#: data/json/items/comestibles/mre.json
@@ -87452,9 +87743,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "cheese tortellini entree"
msgid_plural "cheese tortellini entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de capelettini de queso"
+msgstr[1] "entradas de capelettini de queso"
+msgstr[2] "entradas de capelettini de queso"
#. ~ Description for cheese tortellini entree
#: data/json/items/comestibles/mre.json
@@ -87469,9 +87760,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "mushroom fettuccine entree"
msgid_plural "mushroom fettuccine entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de fetuchini con champiñones"
+msgstr[1] "entradas de fetuchini con champiñones"
+msgstr[2] "entradas de fetuchini con champiñones"
#. ~ Description for mushroom fettuccine entree
#: data/json/items/comestibles/mre.json
@@ -87486,9 +87777,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "Mexican chicken stew entree"
msgid_plural "Mexican chicken stew entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de estofado mexicano de pollo"
+msgstr[1] "entradas de estofado mexicano de pollo"
+msgstr[2] "entradas de estofado mexicano de pollo"
#. ~ Description for {'str': 'Mexican chicken stew entree'}
#: data/json/items/comestibles/mre.json
@@ -87503,9 +87794,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "chicken burrito bowl entree"
msgid_plural "chicken burrito bowl entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de burrito de pollo"
+msgstr[1] "entradas de burrito de pollo"
+msgstr[2] "entradas de burrito de pollo"
#. ~ Description for chicken burrito bowl entree
#: data/json/items/comestibles/mre.json
@@ -87520,9 +87811,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "maple sausage entree"
msgid_plural "maple sausage entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de salchicha de arce"
+msgstr[1] "entradas de salchicha de arce"
+msgstr[2] "entradas de salchicha de arce"
#. ~ Description for maple sausage entree
#: data/json/items/comestibles/mre.json
@@ -87537,9 +87828,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "ravioli entree"
msgid_plural "ravioli entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de ravioles"
+msgstr[1] "entradas de ravioles"
+msgstr[2] "entradas de ravioles"
#. ~ Description for ravioli entree
#: data/json/items/comestibles/mre.json
@@ -87554,9 +87845,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "pepper jack beef entree"
msgid_plural "pepper jack beef entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de carne con queso Jack"
+msgstr[1] "entradas de carne con queso Jack"
+msgstr[2] "entradas de carne con queso Jack"
#. ~ Description for pepper jack beef entree
#: data/json/items/comestibles/mre.json
@@ -87571,9 +87862,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "hash browns & bacon entree"
msgid_plural "hash browns & bacon entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de hash browns y panceta"
+msgstr[1] "entradas de hash browns y panceta"
+msgstr[2] "entradas de hash browns y panceta"
#. ~ Description for hash browns & bacon entree
#: data/json/items/comestibles/mre.json
@@ -87588,9 +87879,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "lemon pepper tuna entree"
msgid_plural "lemon pepper tuna entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de atún con pimienta y limón"
+msgstr[1] "entradas de atún con pimienta y limón"
+msgstr[2] "entradas de atún con pimienta y limón"
#. ~ Description for lemon pepper tuna entree
#: data/json/items/comestibles/mre.json
@@ -87605,9 +87896,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "asian beef & vegetables entree"
msgid_plural "asian beef & vegetables entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de carne de asia con verduras"
+msgstr[1] "entradas de carne de asia con verduras"
+msgstr[2] "entradas de carne de asia con verduras"
#. ~ Description for {'str': 'asian beef & vegetables entree'}
#: data/json/items/comestibles/mre.json
@@ -87622,9 +87913,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "chicken pesto & pasta entree"
msgid_plural "chicken pesto & pasta entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de pasta con pesto y pollo"
+msgstr[1] "entradas de pasta con pesto y pollo"
+msgstr[2] "entradas de pasta con pesto y pollo"
#. ~ Description for chicken pesto & pasta entree
#: data/json/items/comestibles/mre.json
@@ -87639,9 +87930,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "southwest beef & beans entree"
msgid_plural "southwest beef & beans entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de carne del suroeste con porotos"
+msgstr[1] "entradas de carne del suroeste con porotos"
+msgstr[2] "entradas de carne del suroeste con porotos"
#. ~ Description for southwest beef & beans entree
#: data/json/items/comestibles/mre.json
@@ -87656,9 +87947,9 @@ msgstr ""
#: data/json/items/comestibles/mre.json
msgid "frankfurters & beans entree"
msgid_plural "frankfurters & beans entrees"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "entrada de salchicha de Frankfurt con porotos"
+msgstr[1] "entradas de salchicha de Frankfurt con porotos"
+msgstr[2] "entradas de salchicha de Frankfurt con porotos"
#. ~ Description for frankfurters & beans entree
#: data/json/items/comestibles/mre.json
@@ -87674,9 +87965,9 @@ msgstr ""
#: data/json/items/comestibles/mushroom.json
msgid "cooked mushroom"
msgid_plural "cooked mushrooms"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hongo cocinado"
+msgstr[1] "hongos cocinados"
+msgstr[2] "hongos cocinados"
#. ~ Description for cooked mushroom
#: data/json/items/comestibles/mushroom.json
@@ -87757,9 +88048,9 @@ msgstr ""
#: data/json/items/comestibles/mutagen.json
msgid "abstract mutagen flavor"
msgid_plural "abstract mutagen flavors"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sabor abstracto de mutágeno"
+msgstr[1] "sabores abstractos de mutágeno"
+msgstr[2] "sabores abstractos de mutágeno"
#. ~ Description for {'str': 'abstract mutagen flavor'}
#: data/json/items/comestibles/mutagen.json
@@ -87770,9 +88061,9 @@ msgstr ""
#: data/json/items/comestibles/mutagen.json
msgid "abstract iv mutagen flavor"
msgid_plural "abstract iv mutagen flavors"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sabor abstracto de mutágeno iv"
+msgstr[1] "sabores abstractos de mutágeno iv"
+msgstr[2] "sabores abstractos de mutágeno iv"
#. ~ Description for {'str': 'abstract iv mutagen flavor'}
#: data/json/items/comestibles/mutagen.json
@@ -87793,9 +88084,9 @@ msgstr[2] "sueros mutágeno"
#: data/json/items/comestibles/mutagen.json
msgid "alpha serum"
msgid_plural "alpha serum"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "suero alfa"
+msgstr[1] "suero alfa"
+msgstr[2] "suero alfa"
#. ~ Description for {'str_sp': 'alpha serum'}
#: data/json/items/comestibles/mutagen.json
@@ -87858,9 +88149,9 @@ msgstr ""
#: data/json/items/comestibles/mutagen.json
msgid "cephalopod serum"
msgid_plural "cephalopod serums"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "suero de cefalópodo"
+msgstr[1] "sueros de cefalópodo"
+msgstr[2] "sueros de cefalópodo"
#. ~ Description for cephalopod serum
#: data/json/items/comestibles/mutagen.json
@@ -87939,9 +88230,9 @@ msgstr ""
#: data/json/items/comestibles/mutagen.json
msgid "insect serum"
msgid_plural "insect serums"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "suero de insecto"
+msgstr[1] "sueros de insecto"
+msgstr[2] "sueros de insecto"
#. ~ Description for insect serum
#: data/json/items/comestibles/mutagen.json
@@ -87987,9 +88278,9 @@ msgstr ""
#: data/json/items/comestibles/mutagen.json
msgid "medical serum"
msgid_plural "medical serums"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "suero médico"
+msgstr[1] "sueros médicos"
+msgstr[2] "sueros médicos"
#. ~ Description for medical serum
#: data/json/items/comestibles/mutagen.json
@@ -88052,9 +88343,9 @@ msgstr ""
#: data/json/items/comestibles/mutagen.json
msgid "slime serum"
msgid_plural "slime serums"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "suero de slime"
+msgstr[1] "sueros de slime"
+msgstr[2] "sueros de slime"
#. ~ Description for slime serum
#: data/json/items/comestibles/mutagen.json
@@ -88085,9 +88376,9 @@ msgstr ""
#: data/json/items/comestibles/mutagen.json
msgid "troglobite serum"
msgid_plural "troglobite serums"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "suero de troglobio"
+msgstr[1] "sueros de troglobio"
+msgstr[2] "sueros de troglobio"
#. ~ Description for troglobite serum
#: data/json/items/comestibles/mutagen.json
@@ -88101,9 +88392,9 @@ msgstr ""
#: data/json/items/comestibles/mutagen.json
msgid "ursine serum"
msgid_plural "ursine serums"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "suero de osuno"
+msgstr[1] "sueros de osuno"
+msgstr[2] "sueros de osuno"
#. ~ Description for ursine serum
#: data/json/items/comestibles/mutagen.json
@@ -88117,9 +88408,9 @@ msgstr ""
#: data/json/items/comestibles/mutagen.json
msgid "mouse serum"
msgid_plural "mouse serums"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "suero de ratón"
+msgstr[1] "sueros de ratón"
+msgstr[2] "sueros de ratón"
#. ~ Description for mouse serum
#: data/json/items/comestibles/mutagen.json
@@ -88140,9 +88431,9 @@ msgstr[2] "mutágenos"
#: data/json/items/comestibles/mutagen.json
msgid "congealed blood"
msgid_plural "congealed bloods"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sangre coagulada"
+msgstr[1] "sangre coagulada"
+msgstr[2] "sangre coagulada"
#. ~ Description for congealed blood
#: data/json/items/comestibles/mutagen.json
@@ -88156,9 +88447,9 @@ msgstr ""
#: data/json/items/comestibles/mutagen.json
msgid "alpha mutagen"
msgid_plural "alpha mutagen"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mutágeno alfa"
+msgstr[1] "mutágeno alfa"
+msgstr[2] "mutágeno alfa"
#. ~ Description for {'str_sp': 'alpha mutagen'}
#. ~ Description for chimera mutagen
@@ -88213,9 +88504,9 @@ msgstr[2] "mutágenos elf-a"
#: data/json/items/comestibles/mutagen.json
msgid "feline mutagen"
msgid_plural "feline mutagens"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mutágeno de felino"
+msgstr[1] "mutágenos de felino"
+msgstr[2] "mutágenos de felino"
#: data/json/items/comestibles/mutagen.json
msgid "fish mutagen"
@@ -88262,9 +88553,9 @@ msgstr[2] "mutágenos de plantas"
#: data/json/items/comestibles/mutagen.json
msgid "raptor mutagen"
msgid_plural "raptor mutagens"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mutágeno de raptor"
+msgstr[1] "mutágenos de raptor"
+msgstr[2] "mutágenos de raptor"
#: data/json/items/comestibles/mutagen.json
msgid "rat mutagen"
@@ -88276,9 +88567,9 @@ msgstr[2] "mutágenos de rata"
#: data/json/items/comestibles/mutagen.json
msgid "slime mutagen"
msgid_plural "slime mutagens"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mutágeno de slime"
+msgstr[1] "mutágenos de slime"
+msgstr[2] "mutágenos de slime"
#: data/json/items/comestibles/mutagen.json
msgid "spider mutagen"
@@ -88290,9 +88581,9 @@ msgstr[2] "mutágenos de araña"
#: data/json/items/comestibles/mutagen.json
msgid "troglobite mutagen"
msgid_plural "troglobite mutagens"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mutágeno de troglobio"
+msgstr[1] "mutágenos de troglobio"
+msgstr[2] "mutágenos de troglobio"
#: data/json/items/comestibles/mutagen.json
msgid "ursine mutagen"
@@ -88304,9 +88595,9 @@ msgstr[2] "mutágenos de osuno"
#: data/json/items/comestibles/mutagen.json
msgid "mouse mutagen"
msgid_plural "mouse mutagens"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mutágeno de ratón"
+msgstr[1] "mutágenos de ratón"
+msgstr[2] "mutágenos de ratón"
#: data/json/items/comestibles/mutagen.json
msgid "purifier"
@@ -88342,9 +88633,9 @@ msgstr ""
#: data/json/items/comestibles/mutagen.json
msgid "purifier smart shot"
msgid_plural "purifier smart shots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "dosis de purificante inteligente"
+msgstr[1] "dosis de purificante inteligente"
+msgstr[2] "dosis de purificante inteligente"
#. ~ Description for purifier smart shot
#: data/json/items/comestibles/mutagen.json
@@ -88446,9 +88737,9 @@ msgstr "Es un puñado de frutos secos sabrosos y crujientes de una piña."
#: data/json/items/comestibles/nuts.json
msgid "junipers"
msgid_plural "junipers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "enebros"
+msgstr[1] "enebros"
+msgstr[2] "enebros"
#. ~ Description for {'str_sp': 'junipers'}
#: data/json/items/comestibles/nuts.json
@@ -88462,9 +88753,9 @@ msgstr ""
#: data/json/items/comestibles/nuts.json
msgid "pistachios"
msgid_plural "pistachios"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pistachos"
+msgstr[1] "pistachos"
+msgstr[2] "pistachos"
#. ~ Description for {'str_sp': 'pistachios'}
#: data/json/items/comestibles/nuts.json
@@ -88474,9 +88765,9 @@ msgstr ""
#: data/json/items/comestibles/nuts.json
msgid "roasted pistachios"
msgid_plural "roasted pistachios"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pistachos tostados"
+msgstr[1] "pistachos tostados"
+msgstr[2] "pistachos tostados"
#. ~ Description for {'str_sp': 'roasted pistachios'}
#: data/json/items/comestibles/nuts.json
@@ -88486,9 +88777,9 @@ msgstr "Es un puñado de frutos secos tostados del árbol del pistacho."
#: data/json/items/comestibles/nuts.json
msgid "almonds"
msgid_plural "almonds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "almendras"
+msgstr[1] "almendras"
+msgstr[2] "almendras"
#. ~ Description for {'str_sp': 'almonds'}
#: data/json/items/comestibles/nuts.json
@@ -88498,9 +88789,9 @@ msgstr ""
#: data/json/items/comestibles/nuts.json
msgid "almond pulp"
msgid_plural "almond pulp"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulpa de almendra"
+msgstr[1] "pulpa de almendra"
+msgstr[2] "pulpa de almendra"
#. ~ Description for {'str_sp': 'almond pulp'}
#: data/json/items/comestibles/nuts.json
@@ -88513,9 +88804,9 @@ msgstr ""
#: data/json/items/comestibles/nuts.json
msgid "roasted almonds"
msgid_plural "roasted almonds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "almendras tostadas"
+msgstr[1] "almendras tostadas"
+msgstr[2] "almendras tostadas"
#. ~ Description for {'str_sp': 'roasted almonds'}
#: data/json/items/comestibles/nuts.json
@@ -88525,9 +88816,9 @@ msgstr "Es un puñado de frutos secos tostados del almendro."
#: data/json/items/comestibles/nuts.json
msgid "cashews"
msgid_plural "cashews"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "castañas de cajú"
+msgstr[1] "castañas de cajú"
+msgstr[2] "castañas de cajú"
#. ~ Description for {'str_sp': 'cashews'}
#: data/json/items/comestibles/nuts.json
@@ -88537,9 +88828,9 @@ msgstr "Es un puñado de castañas de cajú saladas."
#: data/json/items/comestibles/nuts.json
msgid "pecans"
msgid_plural "pecans"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "nueces de pacana"
+msgstr[1] "nueces de pacana"
+msgstr[2] "nueces de pacana"
#. ~ Description for {'str_sp': 'pecans'}
#: data/json/items/comestibles/nuts.json
@@ -88549,9 +88840,9 @@ msgstr ""
#: data/json/items/comestibles/nuts.json
msgid "roasted pecans"
msgid_plural "roasted pecans"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "nueces de pacana tostadas"
+msgstr[1] "nueces de pacana tostadas"
+msgstr[2] "nueces de pacana tostadas"
#. ~ Description for {'str_sp': 'roasted pecans'}
#: data/json/items/comestibles/nuts.json
@@ -88561,9 +88852,9 @@ msgstr "Es un puñado de frutos secos tostados del árbol del pacano."
#: data/json/items/comestibles/nuts.json
msgid "peanuts"
msgid_plural "peanuts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "maníes"
+msgstr[1] "maníes"
+msgstr[2] "maníes"
#. ~ Description for {'str_sp': 'peanuts'}
#: data/json/items/comestibles/nuts.json
@@ -88573,9 +88864,9 @@ msgstr ""
#: data/json/items/comestibles/nuts.json
msgid "beech nuts"
msgid_plural "beech nuts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hayucos"
+msgstr[1] "hayucos"
+msgstr[2] "hayucos"
#. ~ Description for {'str_sp': 'beech nuts'}
#: data/json/items/comestibles/nuts.json
@@ -88585,9 +88876,9 @@ msgstr "Es un puñado de frutos secos y puntiagudos del haya."
#: data/json/items/comestibles/nuts.json
msgid "walnuts"
msgid_plural "walnuts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "nueces"
+msgstr[1] "nueces"
+msgstr[2] "nueces"
#. ~ Description for {'str_sp': 'walnuts'}
#: data/json/items/comestibles/nuts.json
@@ -88597,9 +88888,9 @@ msgstr ""
#: data/json/items/comestibles/nuts.json
msgid "roasted walnuts"
msgid_plural "roasted walnuts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "nueces tostadas"
+msgstr[1] "nueces tostadas"
+msgstr[2] "nueces tostadas"
#. ~ Description for {'str_sp': 'roasted walnuts'}
#: data/json/items/comestibles/nuts.json
@@ -88609,9 +88900,9 @@ msgstr "Es un puñado de frutos secos tostados del nogal."
#: data/json/items/comestibles/nuts.json
msgid "chestnuts"
msgid_plural "chestnuts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "castañas"
+msgstr[1] "castañas"
+msgstr[2] "castañas"
#. ~ Description for {'str_sp': 'chestnuts'}
#: data/json/items/comestibles/nuts.json
@@ -88621,9 +88912,9 @@ msgstr ""
#: data/json/items/comestibles/nuts.json
msgid "roasted chestnuts"
msgid_plural "roasted chestnuts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "castañas tostadas"
+msgstr[1] "castañas tostadas"
+msgstr[2] "castañas tostadas"
#. ~ Description for {'str_sp': 'roasted chestnuts'}
#: data/json/items/comestibles/nuts.json
@@ -88633,9 +88924,9 @@ msgstr "Es un puñado de frutos secos tostados del castaño."
#: data/json/items/comestibles/nuts.json
msgid "hazelnuts"
msgid_plural "hazelnuts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "avellanas"
+msgstr[1] "avellanas"
+msgstr[2] "avellanas"
#. ~ Description for {'str_sp': 'hazelnuts'}
#: data/json/items/comestibles/nuts.json
@@ -88645,9 +88936,9 @@ msgstr ""
#: data/json/items/comestibles/nuts.json
msgid "roasted edamame"
msgid_plural "roasted edamame"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "edamame tostado"
+msgstr[1] "edamame tostado"
+msgstr[2] "edamame tostado"
#. ~ Description for {'str_sp': 'roasted edamame'}
#: data/json/items/comestibles/nuts.json
@@ -88657,9 +88948,9 @@ msgstr "Es edamame tostado, algo para picar saludable para el corazón."
#: data/json/items/comestibles/nuts.json
msgid "roasted soy nuts"
msgid_plural "roasted soy nuts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "porotos de soja tostados"
+msgstr[1] "porotos de soja tostados"
+msgstr[2] "porotos de soja tostados"
#. ~ Description for {'str_sp': 'roasted soy nuts'}
#: data/json/items/comestibles/nuts.json
@@ -88669,9 +88960,9 @@ msgstr "Son porotos de soja tostados."
#: data/json/items/comestibles/nuts.json
msgid "roasted hazelnuts"
msgid_plural "roasted hazelnuts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "avellanas tostadas"
+msgstr[1] "avellanas tostadas"
+msgstr[2] "avellanas tostadas"
#. ~ Description for {'str_sp': 'roasted hazelnuts'}
#: data/json/items/comestibles/nuts.json
@@ -88693,9 +88984,9 @@ msgstr ""
#: data/json/items/comestibles/nuts.json
msgid "roasted hickory nuts"
msgid_plural "roasted hickory nuts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "nueces hickory tostadas"
+msgstr[1] "nueces hickory tostadas"
+msgstr[2] "nueces hickory tostadas"
#. ~ Description for {'str_sp': 'roasted hickory nuts'}
#: data/json/items/comestibles/nuts.json
@@ -88705,9 +88996,9 @@ msgstr "Es un puñado de nueces tostadas de un nogal americano o hickory."
#: data/json/items/comestibles/nuts.json
msgid "hickory nut ambrosia"
msgid_plural "hickory nut ambrosias"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "ambrosía de nuez hickory"
+msgstr[1] "ambrosías de nuez hickory"
+msgstr[2] "ambrosías de nuez hickory"
#. ~ Description for hickory nut ambrosia
#: data/json/items/comestibles/nuts.json
@@ -88776,9 +89067,9 @@ msgstr ""
#: data/json/items/comestibles/offal_dishes.json
msgid "liver & onions"
msgid_plural "liver & onions"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hígado con cebollas"
+msgstr[1] "hígado con cebollas"
+msgstr[2] "hígado con cebollas"
#. ~ Description for {'str_sp': 'liver & onions'}
#: data/json/items/comestibles/offal_dishes.json
@@ -88788,9 +89079,9 @@ msgstr "Es la clásica manera de hacer hígado."
#: data/json/items/comestibles/offal_dishes.json
msgid "fried liver"
msgid_plural "fried livers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hígado frito"
+msgstr[1] "hígados fritos"
+msgstr[2] "hígados fritos"
#. ~ Description for fried liver
#. ~ Description for deep-fried tripe
@@ -88801,9 +89092,9 @@ msgstr "¡No hay nada más sabroso que algo bien frito!"
#: data/json/items/comestibles/offal_dishes.json
msgid "humble pie"
msgid_plural "humble pies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tarta humillada"
+msgstr[1] "tartas humilladas"
+msgstr[2] "tartas humilladas"
#. ~ Description for humble pie
#: data/json/items/comestibles/offal_dishes.json
@@ -88817,9 +89108,9 @@ msgstr ""
#: data/json/items/comestibles/offal_dishes.json
msgid "stewed tripe"
msgid_plural "stewed tripes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "guiso de tripa"
+msgstr[1] "guisos de tripa"
+msgstr[2] "guisos de tripa"
#. ~ Description for stewed tripe
#: data/json/items/comestibles/offal_dishes.json
@@ -88833,16 +89124,16 @@ msgstr ""
#: data/json/items/comestibles/offal_dishes.json
msgid "deep-fried tripe"
msgid_plural "deep-fried tripes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tripa frita"
+msgstr[1] "tripas fritas"
+msgstr[2] "tripas fritas"
#: data/json/items/comestibles/offal_dishes.json
msgid "leverpostej"
msgid_plural "leverpostej"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "leverpostej"
+msgstr[1] "leverpostej"
+msgstr[2] "leverpostej"
#. ~ Description for {'str_sp': 'leverpostej'}
#: data/json/items/comestibles/offal_dishes.json
@@ -88855,9 +89146,9 @@ msgstr ""
#: data/json/items/comestibles/offal_dishes.json
msgid "cooked brains"
msgid_plural "cooked brains"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cerebro cocinado"
+msgstr[1] "cerebros cocinados"
+msgstr[2] "cerebros cocinados"
#. ~ Description for {'str_sp': 'cooked brains'}
#: data/json/items/comestibles/offal_dishes.json
@@ -88872,9 +89163,9 @@ msgstr ""
#: data/json/items/comestibles/offal_dishes.json
msgid "fried brain"
msgid_plural "fried brains"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cerebro frito"
+msgstr[1] "cerebros fritos"
+msgstr[2] "cerebros fritos"
#. ~ Description for fried brain
#: data/json/items/comestibles/offal_dishes.json
@@ -88884,9 +89175,9 @@ msgstr "No sé qué esperabas. Está frito."
#: data/json/items/comestibles/offal_dishes.json
msgid "cooked kidney"
msgid_plural "cooked kidneys"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "riñón cocinado"
+msgstr[1] "riñones cocinados"
+msgstr[2] "riñones cocinados"
#. ~ Description for cooked kidney
#: data/json/items/comestibles/offal_dishes.json
@@ -88896,9 +89187,9 @@ msgstr "No, esto no son alubias."
#: data/json/items/comestibles/offal_dishes.json
msgid "deviled kidney"
msgid_plural "deviled kidneys"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "riñón relleno"
+msgstr[1] "riñones rellenos"
+msgstr[2] "riñones rellenos"
#. ~ Description for deviled kidney
#: data/json/items/comestibles/offal_dishes.json
@@ -88908,9 +89199,9 @@ msgstr "Es una deliciosa manera de preparar riñón."
#: data/json/items/comestibles/offal_dishes.json
msgid "cooked sweetbread"
msgid_plural "cooked sweetbreads"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "molleja cocinada"
+msgstr[1] "mollejas cocinadas"
+msgstr[2] "mollejas cocinadas"
#. ~ Description for cooked sweetbread
#: data/json/items/comestibles/offal_dishes.json
@@ -88920,9 +89211,9 @@ msgstr "Comúnmente, es una exquisitez, pero le falta un poco de... algo."
#: data/json/items/comestibles/offal_dishes.json
msgid "grilled sweetbread"
msgid_plural "grilled sweetbreads"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "molleja asada"
+msgstr[1] "mollejas asadas"
+msgstr[2] "mollejas asadas"
#. ~ Description for grilled sweetbread
#: data/json/items/comestibles/offal_dishes.json
@@ -88932,9 +89223,9 @@ msgstr "¡Muy deliciosa!"
#: data/json/items/comestibles/offal_dishes.json
msgid "cooked liver"
msgid_plural "cooked livers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hígado cocinado"
+msgstr[1] "hígados cocinados"
+msgstr[2] "hígados cocinados"
#. ~ Description for cooked liver
#: data/json/items/comestibles/offal_dishes.json
@@ -88950,9 +89241,9 @@ msgstr ""
#: data/json/items/comestibles/offal_dishes.json
msgid "canned liver"
msgid_plural "canned livers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hígado enlatado"
+msgstr[1] "hígados enlatados"
+msgstr[2] "hígados enlatados"
#. ~ Description for canned liver
#: data/json/items/comestibles/offal_dishes.json
@@ -88981,9 +89272,9 @@ msgstr ""
#: data/json/items/comestibles/offal_dishes.json
msgid "lung provence"
msgid_plural "lung provences"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hígado a la provenzal"
+msgstr[1] "hígados a la provenzal"
+msgstr[2] "hígados a la provenzal"
#. ~ Description for lung provence
#: data/json/items/comestibles/offal_dishes.json
@@ -89007,9 +89298,9 @@ msgstr "Es una comida alemana que se hace con pulmón."
#: data/json/items/comestibles/offal_dishes.json
msgid "scrambled eggs and brain"
msgid_plural "scrambled eggs and brains"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevos revueltos con cerebro"
+msgstr[1] "huevos revueltos con cerebro"
+msgstr[2] "huevos revueltos con cerebro"
#. ~ Description for scrambled eggs and brain
#: data/json/items/comestibles/offal_dishes.json
@@ -89036,9 +89327,9 @@ msgstr ""
#: data/json/items/comestibles/offal_dishes.json
msgid "homemade hot dog"
msgid_plural "homemade hot dogs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pancho casero"
+msgstr[1] "panchos caseros"
+msgstr[2] "panchos caseros"
#: data/json/items/comestibles/offal_dishes.json
msgid "fried offal"
@@ -89076,9 +89367,9 @@ msgstr ""
#: data/json/items/comestibles/other.json
msgid "diet pill"
msgid_plural "diet pills"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pastilla dietética"
+msgstr[1] "pastillas dietéticas"
+msgstr[2] "pastillas dietéticas"
#. ~ Description for diet pill
#: data/json/items/comestibles/other.json
@@ -89213,9 +89504,9 @@ msgstr ""
#: data/json/items/comestibles/other.json
msgid "yeast"
msgid_plural "yeast"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "levadura"
+msgstr[1] "levadura"
+msgstr[2] "levadura"
#. ~ Description for {'str_sp': 'yeast'}
#: data/json/items/comestibles/other.json
@@ -89228,9 +89519,9 @@ msgstr ""
#: data/json/items/comestibles/other.json
msgid "bone meal"
msgid_plural "bone meal"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "harina de hueso"
+msgstr[1] "harina de hueso"
+msgstr[2] "harina de hueso"
#. ~ Description for {'str_sp': 'bone meal'}
#: data/json/items/comestibles/other.json
@@ -89242,9 +89533,9 @@ msgstr ""
#: data/json/items/comestibles/other.json
msgid "tainted bone meal"
msgid_plural "tainted bone meal"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "harina de hueso contaminado"
+msgstr[1] "harina de hueso contaminado"
+msgstr[2] "harina de hueso contaminado"
#. ~ Description for {'str_sp': 'tainted bone meal'}
#: data/json/items/comestibles/other.json
@@ -89269,9 +89560,9 @@ msgstr ""
#: data/json/items/comestibles/other.json
msgid "cardboard"
msgid_plural "cardboards"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartón"
+msgstr[1] "cartones"
+msgstr[2] "cartones"
#. ~ Description for cardboard
#: data/json/items/comestibles/other.json
@@ -89343,16 +89634,16 @@ msgstr ""
#: data/json/items/comestibles/other.json
msgid "fried tofu"
msgid_plural "fried tofu"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tofu frito"
+msgstr[1] "tofu frito"
+msgstr[2] "tofu frito"
#: data/json/items/comestibles/other.json
msgid "dehydrated tofu"
msgid_plural "dehydrated tofu"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tofu deshidratado"
+msgstr[1] "tofu deshidratado"
+msgstr[2] "tofu deshidratado"
#. ~ Description for {'str_sp': 'dehydrated tofu'}
#: data/json/items/comestibles/other.json
@@ -89362,9 +89653,9 @@ msgstr "Es tofu deshidratado, sellado y muy firme para que dure mucho tiempo."
#: data/json/items/comestibles/other.json
msgid "soybeans"
msgid_plural "soybeans"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "porotos de soja"
+msgstr[1] "porotos de soja"
+msgstr[2] "porotos de soja"
#. ~ Description for {'str_sp': 'soybeans'}
#: data/json/items/comestibles/other.json
@@ -89378,9 +89669,9 @@ msgstr ""
#: data/json/items/comestibles/other.json
msgid "raw edamame"
msgid_plural "raw edamames"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "edamame crudo"
+msgstr[1] "edamames crudos"
+msgstr[2] "edamames crudos"
#. ~ Description for raw edamame
#: data/json/items/comestibles/other.json
@@ -89394,9 +89685,9 @@ msgstr ""
#: data/json/items/comestibles/other.json
msgid "dried lentils"
msgid_plural "dried lentils"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lentejas deshidratadas"
+msgstr[1] "lentejas deshidratadas"
+msgstr[2] "lentejas deshidratadas"
#. ~ Description for {'str_sp': 'dried lentils'}
#: data/json/items/comestibles/other.json
@@ -89409,9 +89700,9 @@ msgstr ""
#: data/json/items/comestibles/other.json
msgid "Foodplace's delicious food™"
msgid_plural "Foodplace's delicious food™"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "deliciosa comida™ de Foodplace"
+msgstr[1] "deliciosa comida™ de Foodplace"
+msgstr[2] "deliciosa comida™ de Foodplace"
#. ~ Description for {'str_sp': "Foodplace's delicious food™"}
#: data/json/items/comestibles/other.json
@@ -89425,9 +89716,9 @@ msgstr ""
#: data/json/items/comestibles/other.json
msgid "cooked lentils"
msgid_plural "cooked lentils"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lentejas cocinadas"
+msgstr[1] "lentejas cocinadas"
+msgstr[2] "lentejas cocinadas"
#. ~ Description for {'str_sp': 'cooked lentils'}
#: data/json/items/comestibles/other.json
@@ -89453,9 +89744,9 @@ msgstr ""
#: data/json/items/comestibles/other.json
msgid "Kentucky coffee grounds"
msgid_plural "Kentucky coffee grounds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "café Kentucky molido"
+msgstr[1] "café Kentucky molido"
+msgstr[2] "café Kentucky molido"
#. ~ Description for {'str_sp': 'Kentucky coffee grounds'}
#: data/json/items/comestibles/other.json
@@ -89501,9 +89792,9 @@ msgstr ""
#: data/json/items/comestibles/other.json
msgid "embalmed human brain"
msgid_plural "embalmed human brains"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cerebro humano embalsamado"
+msgstr[1] "cerebros humanos embalsamados"
+msgstr[2] "cerebros humanos embalsamados"
#. ~ Description for {'str': 'embalmed human brain'}
#: data/json/items/comestibles/other.json
@@ -89593,9 +89884,9 @@ msgstr ""
#: data/json/items/comestibles/other.json
msgid "nectar"
msgid_plural "nectars"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "néctar"
+msgstr[1] "néctares"
+msgstr[2] "néctares"
#. ~ Description for {'str': 'nectar'}
#: data/json/items/comestibles/other.json
@@ -89613,9 +89904,9 @@ msgstr[2] "bebidas de proteína"
#: data/json/items/comestibles/protein.json
msgid "soylent green drink"
msgid_plural "soylent green drinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bebida de soylent verde"
+msgstr[1] "bebidas de soylent verde"
+msgstr[2] "bebidas de soylent verde"
#. ~ Conditional name for protein drink when COMPONENT_ID matches mutant
#. ~ Conditional name for {'str_sp': 'protein powder'} when COMPONENT_ID
@@ -89627,9 +89918,9 @@ msgstr[2] ""
#, c-format
msgid "perturbing %s"
msgid_plural "perturbing %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "perturbador %s"
+msgstr[1] "perturbadores %s"
+msgstr[2] "perturbadores %s"
#. ~ Description for protein drink
#: data/json/items/comestibles/protein.json
@@ -89643,18 +89934,18 @@ msgstr ""
#: data/json/items/comestibles/protein.json
msgid "protein powder"
msgid_plural "protein powder"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "polvo de proteína"
+msgstr[1] "polvo de proteína"
+msgstr[2] "polvo de proteína"
#. ~ Conditional name for {'str_sp': 'protein powder'} when FLAG matches
#. CANNIBALISM
#: data/json/items/comestibles/protein.json
msgid "soylent green powder"
msgid_plural "soylent green powder"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "polvo de soylent verde"
+msgstr[1] "polvo de soylent verde"
+msgstr[2] "polvo de soylent verde"
#. ~ Description for {'str_sp': 'protein powder'}
#: data/json/items/comestibles/protein.json
@@ -89668,9 +89959,9 @@ msgstr ""
#: data/json/items/comestibles/protein.json
msgid "protein ration"
msgid_plural "protein rations"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "ración de proteína"
+msgstr[1] "raciones de proteína"
+msgstr[2] "raciones de proteína"
#. ~ Description for {'str': 'protein ration'}
#: data/json/items/comestibles/protein.json
@@ -89696,17 +89987,17 @@ msgstr ""
#: data/json/items/comestibles/protein.json
msgid "protein shake"
msgid_plural "protein shakes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "licuado de proteína"
+msgstr[1] "licuados de proteína"
+msgstr[2] "licuados de proteína"
#. ~ Conditional name for protein shake when FLAG matches CANNIBALISM
#: data/json/items/comestibles/protein.json
msgid "soylent green shake"
msgid_plural "soylent green shakes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "licuado de soylent verde"
+msgstr[1] "licuados de soylent verde"
+msgstr[2] "licuados de soylent verde"
#. ~ Description for protein shake
#: data/json/items/comestibles/protein.json
@@ -89720,18 +90011,18 @@ msgstr ""
#: data/json/items/comestibles/protein.json
msgid "fortified protein shake"
msgid_plural "fortified protein shakes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "licuado de proteína fortificado"
+msgstr[1] "licuados de proteína fortificados"
+msgstr[2] "licuados de proteína fortificados"
#. ~ Conditional name for fortified protein shake when FLAG matches
#. CANNIBALISM
#: data/json/items/comestibles/protein.json
msgid "fortified soylent green shake"
msgid_plural "fortified soylent green shakes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "licuado de soylent verde fortificado"
+msgstr[1] "licuados de soylent verde fortificados"
+msgstr[2] "licuados de soylent verde fortificados"
#. ~ Description for fortified protein shake
#: data/json/items/comestibles/protein.json
@@ -89800,9 +90091,9 @@ msgstr "Cítrico muy agrio. Se puede comer si quieres."
#: data/json/items/comestibles/raw_fruit.json
msgid "blueberries"
msgid_plural "blueberries"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "moras"
+msgstr[1] "moras"
+msgstr[2] "moras"
#. ~ Description for {'str_sp': 'blueberries'}
#: data/json/items/comestibles/raw_fruit.json
@@ -89812,9 +90103,9 @@ msgstr "Son azules, pero eso no significa que sean de la realeza."
#: data/json/items/comestibles/raw_fruit.json
msgid "strawberries"
msgid_plural "strawberries"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "frutillas"
+msgstr[1] "frutillas"
+msgstr[2] "frutillas"
#. ~ Description for {'str_sp': 'strawberries'}
#: data/json/items/comestibles/raw_fruit.json
@@ -89824,9 +90115,9 @@ msgstr "Es una baya sabrosa y jugosa. A menudo crece silvestre en los campos."
#: data/json/items/comestibles/raw_fruit.json
msgid "cranberries"
msgid_plural "cranberries"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "arándanos"
+msgstr[1] "arándanos"
+msgstr[2] "arándanos"
#. ~ Description for {'str_sp': 'cranberries'}
#: data/json/items/comestibles/raw_fruit.json
@@ -89836,9 +90127,9 @@ msgstr "Arándanos rojos y agrios. Buenos para la salud."
#: data/json/items/comestibles/raw_fruit.json
msgid "raspberries"
msgid_plural "raspberries"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "frambuesas"
+msgstr[1] "frambuesas"
+msgstr[2] "frambuesas"
#. ~ Description for {'str_sp': 'raspberries'}
#: data/json/items/comestibles/raw_fruit.json
@@ -89848,9 +90139,9 @@ msgstr "Una frambuesa roja y dulce."
#: data/json/items/comestibles/raw_fruit.json
msgid "huckleberries"
msgid_plural "huckleberries"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "arándanos agrios"
+msgstr[1] "arándanos agrios"
+msgstr[2] "arándanos agrios"
#. ~ Description for {'str_sp': 'huckleberries'}
#: data/json/items/comestibles/raw_fruit.json
@@ -89860,9 +90151,9 @@ msgstr "Son arándanos agrios, a menudo confundidos con las moras azules."
#: data/json/items/comestibles/raw_fruit.json
msgid "mulberries"
msgid_plural "mulberries"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "moras"
+msgstr[1] "moras"
+msgstr[2] "moras"
#. ~ Description for {'str_sp': 'mulberries'}
#: data/json/items/comestibles/raw_fruit.json
@@ -89876,9 +90167,9 @@ msgstr ""
#: data/json/items/comestibles/raw_fruit.json
msgid "elderberries"
msgid_plural "elderberries"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bayas del saúco"
+msgstr[1] "bayas del saúco"
+msgstr[2] "bayas del saúco"
#. ~ Description for {'str_sp': 'elderberries'}
#: data/json/items/comestibles/raw_fruit.json
@@ -89890,9 +90181,9 @@ msgstr ""
#: data/json/items/comestibles/raw_fruit.json
msgid "rose hips"
msgid_plural "rose hips"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "escaramujos"
+msgstr[1] "escaramujos"
+msgstr[2] "escaramujos"
#. ~ Description for {'str_sp': 'rose hips'}
#: data/json/items/comestibles/raw_fruit.json
@@ -89942,9 +90233,9 @@ msgstr "Una fruta cítrica, cuyo gusto va desde lo agrio hasta lo semidulce."
#: data/json/items/comestibles/raw_fruit.json
msgid "cherries"
msgid_plural "cherries"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cerezas"
+msgstr[1] "cerezas"
+msgstr[2] "cerezas"
#. ~ Description for {'str_sp': 'cherries'}
#: data/json/items/comestibles/raw_fruit.json
@@ -89969,9 +90260,9 @@ msgstr ""
#: data/json/items/comestibles/raw_fruit.json
msgid "grapes"
msgid_plural "grapes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "uvas"
+msgstr[1] "uvas"
+msgstr[2] "uvas"
#. ~ Description for {'str_sp': 'grapes'}
#: data/json/items/comestibles/raw_fruit.json
@@ -90044,9 +90335,9 @@ msgstr "Una fruta grande y muy dulce."
#: data/json/items/comestibles/raw_fruit.json
msgid "blackberries"
msgid_plural "blackberries"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zarzamoras"
+msgstr[1] "zarzamoras"
+msgstr[2] "zarzamoras"
#. ~ Description for {'str_sp': 'blackberries'}
#: data/json/items/comestibles/raw_fruit.json
@@ -90109,9 +90400,9 @@ msgstr ""
#: data/json/items/comestibles/raw_fruit.json
msgid "apricots"
msgid_plural "apricots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "damascos"
+msgstr[1] "damascos"
+msgstr[2] "damascos"
#. ~ Description for {'str_sp': 'apricots'}
#: data/json/items/comestibles/raw_fruit.json
@@ -90121,9 +90412,9 @@ msgstr "Una fruta de cáscara suave, parecida al melocotón."
#: data/json/items/comestibles/raw_fruit.json
msgid "cholla bud"
msgid_plural "cholla buds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "capullo de choya"
+msgstr[1] "capullos de choya"
+msgstr[2] "capullos de choya"
#. ~ Description for cholla bud
#: data/json/items/comestibles/raw_fruit.json
@@ -90137,9 +90428,9 @@ msgstr ""
#: data/json/items/comestibles/raw_fruit.json
msgid "cactus pad"
msgid_plural "cactus pads"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "nopal"
+msgstr[1] "nopales"
+msgstr[2] "nopales"
#. ~ Description for cactus pad
#: data/json/items/comestibles/raw_fruit.json
@@ -90167,9 +90458,9 @@ msgstr ""
#: data/json/items/comestibles/seed.json
msgid "bee balm"
msgid_plural "bee balms"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "monarda"
+msgstr[1] "monardas"
+msgstr[2] "monardas"
#. ~ Description for {'str': 'bee balm'}
#: data/json/items/comestibles/raw_veggy.json
@@ -90213,9 +90504,9 @@ msgstr ""
#: data/json/items/comestibles/seed.json
msgid "cabbage"
msgid_plural "cabbages"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "repollo"
+msgstr[1] "repollos"
+msgstr[2] "repollos"
#. ~ Description for cabbage
#: data/json/items/comestibles/raw_veggy.json
@@ -90264,9 +90555,9 @@ msgstr "Una raíz vegetal saludable. ¡Rica en vitamina A!"
#: data/json/items/comestibles/raw_veggy.json
msgid "cattail rhizome"
msgid_plural "cattail rhizomes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rizoma de junco"
+msgstr[1] "rizomas de junco"
+msgstr[2] "rizomas de junco"
#. ~ Description for {'str': 'cattail rhizome'}
#: data/json/items/comestibles/raw_veggy.json
@@ -90282,9 +90573,9 @@ msgstr ""
#: data/json/items/comestibles/raw_veggy.json
msgid "cattail stalk"
msgid_plural "cattail stalks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tallo de junco"
+msgstr[1] "tallos de junco"
+msgstr[2] "tallos de junco"
#. ~ Description for {'str': 'cattail stalk'}
#: data/json/items/comestibles/raw_veggy.json
@@ -90343,9 +90634,9 @@ msgstr ""
#: data/json/items/comestibles/seed.json
msgid "chili pepper"
msgid_plural "chili peppers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "ají"
+msgstr[1] "ajíes"
+msgstr[2] "ajíes"
#. ~ Description for chili pepper
#: data/json/items/comestibles/raw_veggy.json
@@ -90385,9 +90676,9 @@ msgstr ""
#: data/json/items/comestibles/seed.json
msgid "salsify"
msgid_plural "salsify"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "salsifí"
+msgstr[1] "salsifí"
+msgstr[2] "salsifí"
#. ~ Description for {'str_sp': 'salsify'}
#: data/json/items/comestibles/raw_veggy.json
@@ -90411,9 +90702,9 @@ msgstr ""
#: data/json/items/comestibles/seed.json
msgid "wild root"
msgid_plural "wild roots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "raíz silvestre"
+msgstr[1] "raíces silvestres"
+msgstr[2] "raíces silvestres"
#. ~ Description for {'str': 'wild root'}
#: data/json/items/comestibles/raw_veggy.json
@@ -90428,9 +90719,9 @@ msgstr ""
#: data/json/items/comestibles/seed.json
msgid "dogbane"
msgid_plural "dogbanes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "apocino"
+msgstr[1] "apocinos"
+msgstr[2] "apocinos"
#. ~ Description for dogbane
#: data/json/items/comestibles/raw_veggy.json
@@ -90441,9 +90732,9 @@ msgstr "Un tallo de apocino. Es muy fibroso y levemente venenoso."
#: data/json/items/comestibles/raw_veggy.json
msgid "garlic bulb"
msgid_plural "garlic bulbs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cabeza de ajo"
+msgstr[1] "cabezas de ajo"
+msgstr[2] "cabezas de ajo"
#. ~ Description for garlic bulb
#: data/json/items/comestibles/raw_veggy.json
@@ -90471,9 +90762,9 @@ msgstr ""
#: data/json/items/comestibles/raw_veggy.json
msgid "horseradish root"
msgid_plural "horseradish roots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "raíz de rábano"
+msgstr[1] "raíces de rábano"
+msgstr[2] "raíces de rábano"
#. ~ Description for {'str': 'horseradish root'}
#: data/json/items/comestibles/raw_veggy.json
@@ -90501,9 +90792,9 @@ msgstr "Una planta fresca de lechuga arrepollada."
#: data/json/items/comestibles/seed.json
msgid "mugwort"
msgid_plural "mugworts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "abrótano"
+msgstr[1] "abrótanos"
+msgstr[2] "abrótanos"
#. ~ Description for mugwort
#: data/json/items/comestibles/raw_veggy.json
@@ -90530,9 +90821,9 @@ msgstr ""
#: data/json/items/comestibles/raw_veggy.json
msgid "fungal fluid sac"
msgid_plural "fungal fluid sacs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bolsa de fluido fúngico"
+msgstr[1] "bolsas de fluido fúngico"
+msgstr[2] "bolsas de fluido fúngico"
#. ~ Description for fungal fluid sac
#: data/json/items/comestibles/raw_veggy.json
@@ -90546,9 +90837,9 @@ msgstr ""
#: data/json/items/comestibles/raw_veggy.json
msgid "raw popcorn"
msgid_plural "raw popcorn"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "maíz pisingallo"
+msgstr[1] "maíces pisingallo"
+msgstr[2] "maíces pisingallo"
#. ~ Description for {'str_sp': 'raw popcorn'}
#: data/json/items/comestibles/raw_veggy.json
@@ -90577,9 +90868,9 @@ msgstr ""
#: data/json/items/comestibles/seed.json
msgid "pumpkin"
msgid_plural "pumpkins"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "calabaza"
+msgstr[1] "calabazas"
+msgstr[2] "calabazas"
#. ~ Description for pumpkin
#: data/json/items/comestibles/raw_veggy.json
@@ -90593,9 +90884,9 @@ msgstr ""
#: data/json/items/comestibles/raw_veggy.json
msgid "horseradish greens"
msgid_plural "horseradish greens"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hojas de rábano"
+msgstr[1] "hojas de rábano"
+msgstr[2] "hojas de rábano"
#. ~ Description for {'str_sp': 'horseradish greens'}
#: data/json/items/comestibles/raw_veggy.json
@@ -90609,9 +90900,9 @@ msgstr ""
#: data/json/items/comestibles/raw_veggy.json
msgid "dandelions"
msgid_plural "dandelions"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "diente de león"
+msgstr[1] "diente de león"
+msgstr[2] "diente de león"
#. ~ Description for {'str_sp': 'dandelions'}
#: data/json/items/comestibles/raw_veggy.json
@@ -90625,9 +90916,9 @@ msgstr ""
#: data/json/items/comestibles/raw_veggy.json
msgid "burdocks"
msgid_plural "burdocks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bardana"
+msgstr[1] "bardana"
+msgstr[2] "bardana"
#. ~ Description for {'str_sp': 'burdocks'}
#: data/json/items/comestibles/raw_veggy.json
@@ -90718,9 +91009,9 @@ msgstr ""
#: data/json/items/comestibles/raw_veggy.json
msgid "alien fungus chunk"
msgid_plural "alien fungus chunks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pedazo de hongo alienígena"
+msgstr[1] "pedazos de hongos alienígena"
+msgstr[2] "pedazos de hongos alienígena"
#. ~ Description for {'str': 'alien fungus chunk'}
#: data/json/items/comestibles/raw_veggy.json
@@ -90764,9 +91055,9 @@ msgstr "Un sabroso zapallito de verano."
#: data/json/items/comestibles/seed.json
msgid "canola"
msgid_plural "canolas"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "canola"
+msgstr[1] "canolas"
+msgstr[2] "canolas"
#. ~ Description for canola
#: data/json/items/comestibles/raw_veggy.json
@@ -90795,9 +91086,9 @@ msgstr ""
#: data/json/items/comestibles/seed.json
msgid "raw lentils"
msgid_plural "raw lentils"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lentejas crudas"
+msgstr[1] "lentejas crudas"
+msgstr[2] "lentejas crudas"
#. ~ Description for {'str_sp': 'raw lentils'}
#: data/json/items/comestibles/raw_veggy.json
@@ -90807,9 +91098,9 @@ msgstr "Son lentejas crudas, sin cocinar. Deberían ser cocinadas."
#: data/json/items/comestibles/raw_veggy.json
msgid "fiddleheads"
msgid_plural "fiddleheads"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "brotes de helecho"
+msgstr[1] "brotes de helecho"
+msgstr[2] "brotes de helecho"
#. ~ Description for {'str_sp': 'fiddleheads'}
#: data/json/items/comestibles/raw_veggy.json
@@ -90850,9 +91141,9 @@ msgstr[2] "sandwiches de lujo"
#: data/json/items/comestibles/sandwich.json
msgid "\"deluxe\" sandwich"
msgid_plural "\"deluxe\" sandwiches"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sánguche \"de lujo\""
+msgstr[1] "sánguches \"de lujo\""
+msgstr[2] "sánguches \"de lujo\""
#. ~ Description for {'str': 'deluxe sandwich', 'str_pl': 'deluxe sandwiches'}
#: data/json/items/comestibles/sandwich.json
@@ -90905,9 +91196,9 @@ msgstr "Es un delicioso sandwich de mermelada."
#: data/json/items/comestibles/sandwich.json
msgid "fairy bread"
msgid_plural "fairy bread"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pan de hadas"
+msgstr[1] "panes de hadas"
+msgstr[2] "panes de hadas"
#. ~ Description for {'str_sp': 'fairy bread'}
#: data/json/items/comestibles/sandwich.json
@@ -90984,9 +91275,9 @@ msgstr[2] "sandwiches de vago"
#, c-format
msgid "mutant %s"
msgid_plural "mutant %s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mutante %s"
+msgstr[1] "mutantes %s"
+msgstr[2] "mutantes %s"
#. ~ Description for {'str': 'meat sandwich', 'str_pl': 'meat sandwiches'}
#: data/json/items/comestibles/sandwich.json
@@ -91074,9 +91365,9 @@ msgstr "Es un delicioso sandwich de pescado."
#: data/json/items/comestibles/sandwich.json
msgid "fish and spinach bagel"
msgid_plural "fish and spinach bagels"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rosca de espinaca y pescado"
+msgstr[1] "roscas de espinaca y pescado"
+msgstr[2] "roscas de espinaca y pescado"
#. ~ Description for {'str': 'fish and spinach bagel'}
#: data/json/items/comestibles/sandwich.json
@@ -91086,9 +91377,9 @@ msgstr "Es una deliciosa rosca de pescado con espinaca y huevos."
#: data/json/items/comestibles/sandwich.json
msgid "BLT"
msgid_plural "BLTs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sánguche BLT"
+msgstr[1] "sánguches BLT"
+msgstr[2] "sánguches BLT"
#. ~ Description for {'str': 'BLT'}
#: data/json/items/comestibles/sandwich.json
@@ -91107,9 +91398,9 @@ msgstr[2] "semillas"
#: data/json/items/comestibles/seed.json
msgid "fruit seeds"
msgid_plural "fruit seeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "semillas de fruta"
+msgstr[1] "semillas de fruta"
+msgstr[2] "semillas de fruta"
#: data/json/items/comestibles/seed.json
msgid "mushroom spores"
@@ -91190,9 +91481,9 @@ msgstr "arándano"
#: data/json/items/comestibles/seed.json
msgid "huckleberry seeds"
msgid_plural "huckleberry seeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "semillas de arándano agrio"
+msgstr[1] "semillas de arándano agrio"
+msgstr[2] "semillas de arándano agrio"
#. ~ Description for {'str_sp': 'huckleberry seeds'}
#: data/json/items/comestibles/seed.json
@@ -91206,9 +91497,9 @@ msgstr "arándano agrio"
#: data/json/items/comestibles/seed.json
msgid "mulberry seeds"
msgid_plural "mulberry seeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "semillas de mora"
+msgstr[1] "semillas de mora"
+msgstr[2] "semillas de mora"
#. ~ Description for {'str_sp': 'mulberry seeds'}
#: data/json/items/comestibles/seed.json
@@ -91222,9 +91513,9 @@ msgstr "mora"
#: data/json/items/comestibles/seed.json
msgid "elderberry seeds"
msgid_plural "elderberry seeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "semillas de bayas del saúco"
+msgstr[1] "semillas de bayas del saúco"
+msgstr[2] "semillas de bayas del saúco"
#. ~ Description for {'str_sp': 'elderberry seeds'}
#: data/json/items/comestibles/seed.json
@@ -91321,9 +91612,9 @@ msgstr "tabaco"
#: data/json/items/comestibles/seed.json
msgid "barley seeds"
msgid_plural "barley seeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "semillas de cebada"
+msgstr[1] "semillas de cebada"
+msgstr[2] "semillas de cebada"
#. ~ Description for {'str_sp': 'barley seeds'}
#: data/json/items/comestibles/seed.json
@@ -91333,9 +91624,9 @@ msgstr "Algunas semillas de cebada."
#: data/json/items/comestibles/seed.json
msgid "sugar beet seeds"
msgid_plural "sugar beet seeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "semillas de remolacha azucarera"
+msgstr[1] "semillas de remolacha azucarera"
+msgstr[2] "semillas de remolacha azucarera"
#. ~ Description for {'str_sp': 'sugar beet seeds'}
#: data/json/items/comestibles/seed.json
@@ -91451,9 +91742,9 @@ msgstr "ajo"
#: data/json/items/comestibles/seed.json
msgid "cattail seeds"
msgid_plural "cattail seeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "semillas de junco"
+msgstr[1] "semillas de junco"
+msgstr[2] "semillas de junco"
#. ~ Description for {'str_sp': 'cattail seeds'}
#: data/json/items/comestibles/seed.json
@@ -91467,9 +91758,9 @@ msgstr "junco"
#: data/json/items/comestibles/seed.json
msgid "dahlia seeds"
msgid_plural "dahlia seeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "semillas de dalia"
+msgstr[1] "semillas de dalia"
+msgstr[2] "semillas de dalia"
#. ~ Description for {'str_sp': 'dahlia seeds'}
#: data/json/items/comestibles/seed.json
@@ -91479,9 +91770,9 @@ msgstr "Son unas semillas de dalia."
#: data/json/items/comestibles/seed.json
msgid "salsify seeds"
msgid_plural "salsify seeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "semillas de salsifí"
+msgstr[1] "semillas de salsifí"
+msgstr[2] "semillas de salsifí"
#. ~ Description for {'str_sp': 'salsify seeds'}
#: data/json/items/comestibles/seed.json
@@ -91491,9 +91782,9 @@ msgstr "Son unas semillas de salsifí."
#: data/json/items/comestibles/seed.json
msgid "chicory seeds"
msgid_plural "chicory seeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "semillas de achicoria"
+msgstr[1] "semillas de achicoria"
+msgstr[2] "semillas de achicoria"
#. ~ Description for {'str_sp': 'chicory seeds'}
#: data/json/items/comestibles/seed.json
@@ -91503,9 +91794,9 @@ msgstr "Son unas semillas de achicoria."
#: data/json/items/comestibles/seed.json
msgid "wild root seeds"
msgid_plural "wild root seeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "semillas de raíces silvestres"
+msgstr[1] "semillas de raíces silvestres"
+msgstr[2] "semillas de raíces silvestres"
#. ~ Description for {'str_sp': 'wild root seeds'}
#: data/json/items/comestibles/seed.json
@@ -91515,9 +91806,9 @@ msgstr "Son unas semillas de una flor blanca."
#: data/json/items/comestibles/seed.json
msgid "decorative plant seeds"
msgid_plural "decorative plant seeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "semillas de planta decorativa"
+msgstr[1] "semillas de planta decorativa"
+msgstr[2] "semillas de planta decorativa"
#. ~ Description for {'str_sp': 'decorative plant seeds'}
#: data/json/items/comestibles/seed.json
@@ -91535,9 +91826,9 @@ msgstr "planta decorativa"
#: data/json/items/comestibles/seed.json
msgid "cactus seeds"
msgid_plural "cactus seeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "semillas de cactus"
+msgstr[1] "semillas de cactus"
+msgstr[2] "semillas de cactus"
#. ~ Description for {'str_sp': 'cactus seeds'}
#: data/json/items/comestibles/seed.json
@@ -91552,9 +91843,9 @@ msgstr "cactus"
#: data/json/items/comestibles/seed.json
msgid "garlic clove"
msgid_plural "garlic cloves"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "diente de ajo"
+msgstr[1] "dientes de ajo"
+msgstr[2] "dientes de ajo"
#. ~ Description for {'str': 'garlic clove'}
#: data/json/items/comestibles/seed.json
@@ -91661,9 +91952,9 @@ msgstr "Algunas semillas de hongos."
#: data/json/items/comestibles/seed.json data/mods/No_Fungi/comestibles.json
msgid "Marloss seed"
msgid_plural "Marloss seeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "semilla de Marloss"
+msgstr[1] "semillas de Marloss"
+msgstr[2] "semillas de Marloss"
#. ~ Description for {'str': 'Marloss seed'}
#: data/json/items/comestibles/seed.json
@@ -91679,9 +91970,9 @@ msgstr ""
#: data/json/items/comestibles/seed.json
msgid "bean seeds"
msgid_plural "bean seeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "porotos semillas"
+msgstr[1] "porotos semillas"
+msgstr[2] "porotos semillas"
#. ~ Description for {'str_sp': 'bean seeds'}
#: data/json/items/comestibles/seed.json
@@ -91695,9 +91986,9 @@ msgstr "alubias"
#: data/json/items/comestibles/seed.json
msgid "soybean seeds"
msgid_plural "soybean seeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "porotos semilla de soja"
+msgstr[1] "porotos semilla de soja"
+msgstr[2] "porotos semilla de soja"
#. ~ Description for {'str_sp': 'soybean seeds'}
#: data/json/items/comestibles/seed.json
@@ -91733,9 +92024,9 @@ msgstr "Son unas semillas de tomillo."
#: data/json/items/comestibles/spice.json
msgid "thyme"
msgid_plural "thymes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tomillo"
+msgstr[1] "tomillos"
+msgstr[2] "tomillos"
#: data/json/items/comestibles/seed.json
msgid "canola seeds"
@@ -91870,9 +92161,9 @@ msgstr "Son unas semillas de diente de león."
#: data/json/items/comestibles/seed.json
msgid "burdock seeds"
msgid_plural "burdock seeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "semillas de bardana"
+msgstr[1] "semillas de bardana"
+msgstr[2] "semillas de bardana"
#. ~ Description for {'str_sp': 'burdock seeds'}
#: data/json/items/comestibles/seed.json
@@ -91993,9 +92284,9 @@ msgstr ""
#: data/json/items/comestibles/seed.json
msgid "Kentucky coffee pod"
msgid_plural "Kentucky coffee pods"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "vaina de café Kentucky"
+msgstr[1] "vainas de café Kentucky"
+msgstr[2] "vainas de café Kentucky"
#. ~ Description for {'str': 'Kentucky coffee pod'}
#: data/json/items/comestibles/seed.json
@@ -92035,9 +92326,9 @@ msgstr ""
#: data/json/items/comestibles/seed.json
msgid "chamomile seeds"
msgid_plural "chamomile seeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "semillas de manzanilla"
+msgstr[1] "semillas de manzanilla"
+msgstr[2] "semillas de manzanilla"
#. ~ Description for {'str_sp': 'chamomile seeds'}
#: data/json/items/comestibles/seed.json
@@ -92047,9 +92338,9 @@ msgstr "Son unas semillas de manzanilla."
#: data/json/items/comestibles/seed.json
msgid "popcorn seeds"
msgid_plural "popcorn seeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "semillas de maíz pisingallo"
+msgstr[1] "semillas de maíz pisingallo"
+msgstr[2] "semillas de maíz pisingallo"
#. ~ Description for {'str_sp': 'popcorn seeds'}
#: data/json/items/comestibles/seed.json
@@ -92059,9 +92350,9 @@ msgstr "Son unas semillas de maíz pisingallo."
#: data/json/items/comestibles/seed.json
msgid "horseradish seeds"
msgid_plural "horseradish seeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "semillas de rábano"
+msgstr[1] "semillas de rábano"
+msgstr[2] "semillas de rábano"
#. ~ Description for {'str_sp': 'horseradish seeds'}
#: data/json/items/comestibles/seed.json
@@ -92071,9 +92362,9 @@ msgstr "Son unas semillas de rábano."
#: data/json/items/comestibles/seed.json
msgid "mustard seeds"
msgid_plural "mustard seeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "semillas de mostaza"
+msgstr[1] "semillas de mostaza"
+msgstr[2] "semillas de mostaza"
#. ~ Description for {'str_sp': 'mustard seeds'}
#: data/json/items/comestibles/seed.json
@@ -92174,9 +92465,9 @@ msgstr[2] "currys con carne"
#: data/json/items/comestibles/soup.json
msgid "creature curry"
msgid_plural "creature curries"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "curry de criatura"
+msgstr[1] "currys de criatura"
+msgstr[2] "currys de criatura"
#. ~ Description for {'str': 'curry with meat', 'str_pl': 'curries with meat'}
#: data/json/items/comestibles/soup.json
@@ -92195,9 +92486,9 @@ msgstr[2] "sopas de los bosques"
#: data/json/items/comestibles/soup.json
msgid "Mirkwood soup"
msgid_plural "Mirkwood soups"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sopa de Bosque negro"
+msgstr[1] "sopas de Bosque negro"
+msgstr[2] "sopas de Bosque negro"
#. ~ Description for woods soup
#: data/json/items/comestibles/soup.json
@@ -92263,9 +92554,9 @@ msgstr "Una sopa con pedazos de pollo y pelotas de masa. No está mal."
#: data/json/items/comestibles/soup.json
msgid "cullen skink"
msgid_plural "cullen skinks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cullen skink"
+msgstr[1] "cullen skinks"
+msgstr[2] "cullen skinks"
#. ~ Description for cullen skink
#: data/json/items/comestibles/soup.json
@@ -92390,9 +92681,9 @@ msgstr ""
#: data/json/items/comestibles/spice.json
msgid "sprinkles"
msgid_plural "sprinkles"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "confites"
+msgstr[1] "confites"
+msgstr[2] "confites"
#. ~ Description for {'str_sp': 'sprinkles'}
#: data/json/items/comestibles/spice.json
@@ -92443,9 +92734,9 @@ msgstr "Es un tallo de tomillo. Tiene un olor delicioso."
#: data/json/items/comestibles/spice.json
msgid "mustard powder"
msgid_plural "mustard powder"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "polvo de mostaza"
+msgstr[1] "polvo de mostaza"
+msgstr[2] "polvo de mostaza"
#. ~ Description for {'str_sp': 'mustard powder'}
#: data/json/items/comestibles/spice.json
@@ -92456,9 +92747,9 @@ msgstr ""
#: data/json/items/comestibles/veggy_dishes.json
msgid "cooked cattail stalk"
msgid_plural "cooked cattail stalks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tallo de junco cocinado"
+msgstr[1] "tallos de junco cocinados"
+msgstr[2] "tallos de junco cocinados"
#. ~ Description for {'str': 'cooked cattail stalk'}
#: data/json/items/comestibles/veggy_dishes.json
@@ -92545,9 +92836,9 @@ msgstr ""
#: data/json/items/comestibles/veggy_dishes.json
msgid "cooked burdock greens"
msgid_plural "cooked burdock greens"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hojas verdes de bardana cocinadas"
+msgstr[1] "hojas verdes de bardana cocinadas"
+msgstr[2] "hojas verdes de bardana cocinadas"
#. ~ Description for {'str_sp': 'cooked burdock greens'}
#: data/json/items/comestibles/veggy_dishes.json
@@ -92557,9 +92848,9 @@ msgstr "Son hojas cocinadas de bardana. Sabrosas y nutritivas."
#: data/json/items/comestibles/veggy_dishes.json
msgid "fried burdocks"
msgid_plural "fried burdocks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bardana frita"
+msgstr[1] "bardana frita"
+msgstr[2] "bardana frita"
#. ~ Description for {'str_sp': 'fried burdocks'}
#: data/json/items/comestibles/veggy_dishes.json
@@ -92573,9 +92864,9 @@ msgstr ""
#: data/json/items/comestibles/veggy_dishes.json
msgid "fried dandelions and burdocks"
msgid_plural "fried dandelions burdocks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "dientes de león y bardana fritos"
+msgstr[1] "dientes de león y bardana fritos"
+msgstr[2] "dientes de león y bardana fritos"
#. ~ Description for {'str': 'fried dandelions and burdocks', 'str_pl': 'fried
#. dandelions burdocks'}
@@ -92649,9 +92940,9 @@ msgstr "Maíz enlatado en agua. ¡A comer!"
#: data/json/items/comestibles/veggy_dishes.json
msgid "hominy"
msgid_plural "hominy"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "maíz precocido"
+msgstr[1] "maíz precocido"
+msgstr[2] "maíz precocido"
#. ~ Description for {'str_sp': 'hominy'}
#: data/json/items/comestibles/veggy_dishes.json
@@ -92665,9 +92956,9 @@ msgstr ""
#: data/json/items/comestibles/veggy_dishes.json
msgid "cornmeal"
msgid_plural "cornmeal"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "harina de maíz"
+msgstr[1] "harina de maíz"
+msgstr[2] "harina de maíz"
#. ~ Description for {'str_sp': 'cornmeal'}
#: data/json/items/comestibles/veggy_dishes.json
@@ -92745,9 +93036,9 @@ msgstr ""
#: data/json/items/comestibles/veggy_dishes.json
msgid "tofu fried rice"
msgid_plural "tofu fried rice"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "arroz frito con tofu"
+msgstr[1] "arroz frito con tofu"
+msgstr[2] "arroz frito con tofu"
#. ~ Description for {'str_sp': 'tofu fried rice'}
#: data/json/items/comestibles/veggy_dishes.json
@@ -92757,9 +93048,9 @@ msgstr "Es delicioso arroz frito con tofu y verduras. Sabroso y muy rendidor."
#: data/json/items/comestibles/veggy_dishes.json
msgid "tofu stirfry"
msgid_plural "tofu stirfry"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tofu salteado"
+msgstr[1] "tofu salteado"
+msgstr[2] "tofu salteado"
#. ~ Description for {'str_sp': 'tofu stirfry'}
#: data/json/items/comestibles/veggy_dishes.json
@@ -92801,9 +93092,9 @@ msgstr "Una deliciosa patata al horno. ¿Tienes crema agria para agregarle?"
#: data/json/items/comestibles/veggy_dishes.json
msgid "mashed pumpkin"
msgid_plural "mashed pumpkins"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "puré de calabaza"
+msgstr[1] "puré de calabaza"
+msgstr[2] "puré de calabaza"
#. ~ Description for mashed pumpkin
#: data/json/items/comestibles/veggy_dishes.json
@@ -92816,9 +93107,9 @@ msgstr ""
#: data/json/items/comestibles/veggy_dishes.json
msgid "vegetable pie"
msgid_plural "vegetable pies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tarta de verdura"
+msgstr[1] "tartas de verdura"
+msgstr[2] "tartas de verdura"
#. ~ Description for vegetable pie
#: data/json/items/comestibles/veggy_dishes.json
@@ -92844,9 +93135,9 @@ msgstr ""
#: data/json/items/comestibles/veggy_dishes.json
msgid "pesto"
msgid_plural "pesto"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pesto"
+msgstr[1] "pesto"
+msgstr[2] "pesto"
#. ~ Description for {'str_sp': 'pesto'}
#: data/json/items/comestibles/veggy_dishes.json
@@ -93005,9 +93296,9 @@ msgstr ""
#: data/json/items/comestibles/veggy_dishes.json
msgid "insta-salad"
msgid_plural "insta-salads"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "ensalada instantánea"
+msgstr[1] "ensaladas instantáneas"
+msgstr[2] "ensaladas instantáneas"
#. ~ Description for insta-salad
#: data/json/items/comestibles/veggy_dishes.json
@@ -93037,9 +93328,9 @@ msgstr ""
#: data/json/items/comestibles/veggy_dishes.json
msgid "roasted salsify"
msgid_plural "roasted salsifies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "salsifí tostado"
+msgstr[1] "salsifíes tostados"
+msgstr[2] "salsifíes tostados"
#. ~ Description for {'str': 'roasted salsify', 'str_pl': 'roasted salsifies'}
#: data/json/items/comestibles/veggy_dishes.json
@@ -93099,9 +93390,9 @@ msgstr ""
#: data/json/items/comestibles/veggy_dishes.json
msgid "dehydrated alien fungus chunk"
msgid_plural "dehydrated alien fungus chunks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pedazo de hongo alienígena deshidratado"
+msgstr[1] "pedazos de hongo alienígena deshidratados"
+msgstr[2] "pedazos de hongo alienígena deshidratados"
#. ~ Description for dehydrated alien fungus chunk
#: data/json/items/comestibles/veggy_dishes.json
@@ -93132,9 +93423,9 @@ msgstr ""
#: data/json/items/comestibles/veggy_dishes.json
msgid "nopalito"
msgid_plural "nopalitos"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "nopalito"
+msgstr[1] "nopalitos"
+msgstr[2] "nopalitos"
#. ~ Description for nopalito
#: data/json/items/comestibles/veggy_dishes.json
@@ -93144,9 +93435,9 @@ msgstr "Es una versión con menos espinas de los nopales de cactus."
#: data/json/items/comestibles/veggy_dishes.json
msgid "boiled fiddleheads"
msgid_plural "boiled fiddleheads"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "brotes de helecho hervidos"
+msgstr[1] "brotes de helecho hervidos"
+msgstr[2] "brotes de helecho hervidos"
#. ~ Description for {'str_sp': 'boiled fiddleheads'}
#: data/json/items/comestibles/veggy_dishes.json
@@ -93158,9 +93449,9 @@ msgstr ""
#: data/json/items/comestibles/veggy_dishes.json
msgid "sauteed fiddleheads"
msgid_plural "sauteed fiddleheads"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "brotes de helecho salteados"
+msgstr[1] "brotes de helecho salteados"
+msgstr[2] "brotes de helecho salteados"
#. ~ Description for {'str_sp': 'sauteed fiddleheads'}
#: data/json/items/comestibles/veggy_dishes.json
@@ -93205,9 +93496,9 @@ msgstr ""
#: data/json/items/comestibles/wheat.json
msgid "raw spaghetti pasta"
msgid_plural "raw spaghetti pasta"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "espagueti crudo"
+msgstr[1] "espagueti crudo"
+msgstr[2] "espagueti crudo"
#. ~ Description for {'str_sp': 'raw spaghetti pasta'}
#: data/json/items/comestibles/wheat.json
@@ -93221,9 +93512,9 @@ msgstr ""
#: data/json/items/comestibles/wheat.json
msgid "raw lasagne pasta"
msgid_plural "raw lasagne pasta"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lasaña cruda"
+msgstr[1] "lasaña cruda"
+msgstr[2] "lasaña cruda"
#. ~ Description for {'str_sp': 'raw lasagne pasta'}
#: data/json/items/comestibles/wheat.json
@@ -93287,9 +93578,9 @@ msgstr "Harina blanca enriquecida, útil para hornear."
#: data/json/items/comestibles/wheat.json
msgid "oatmeal"
msgid_plural "oatmeal"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "avena"
+msgstr[1] "avena"
+msgstr[2] "avena"
#. ~ Description for {'str_sp': 'oatmeal'}
#: data/json/items/comestibles/wheat.json
@@ -93308,9 +93599,9 @@ msgstr "Avena cruda."
#: data/json/items/comestibles/wheat.json
msgid "cooked oatmeal"
msgid_plural "cooked oatmeal"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "avena cocinada"
+msgstr[1] "avena cocinada"
+msgstr[2] "avena cocinada"
#. ~ Description for {'str_sp': 'cooked oatmeal'}
#: data/json/items/comestibles/wheat.json
@@ -93324,9 +93615,9 @@ msgstr ""
#: data/json/items/comestibles/wheat.json
msgid "deluxe cooked oatmeal"
msgid_plural "deluxe cooked oatmeal"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "avena de lujo cocinada"
+msgstr[1] "avena de lujo cocinada"
+msgstr[2] "avena de lujo cocinada"
#. ~ Description for {'str_sp': 'deluxe cooked oatmeal'}
#: data/json/items/comestibles/wheat.json
@@ -93412,6 +93703,7 @@ msgstr ""
#: data/json/items/comestibles/wheat.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cracker"
msgid_plural "crackers"
msgstr[0] "galletitas"
@@ -93438,9 +93730,9 @@ msgstr "Una deliciosa tarta horneada con relleno de fruta."
#: data/json/items/comestibles/wheat.json
msgid "cheese pizza"
msgid_plural "cheese pizzas"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pizza de mozzarella"
+msgstr[1] "pizzas de mozzarella"
+msgstr[2] "pizzas de mozzarella"
#. ~ Description for cheese pizza
#: data/json/items/comestibles/wheat.json
@@ -93450,9 +93742,9 @@ msgstr "Una deliciosa pizza con queso derretido arriba."
#: data/json/items/comestibles/wheat.json
msgid "granola"
msgid_plural "granola"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "granola"
+msgstr[1] "granola"
+msgstr[2] "granola"
#. ~ Description for {'str_sp': 'granola'}
#: data/json/items/comestibles/wheat.json
@@ -93466,9 +93758,9 @@ msgstr ""
#: data/json/items/comestibles/wheat.json
msgid "maple pie"
msgid_plural "maple pies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tarta de arce"
+msgstr[1] "tartas de arce"
+msgstr[2] "tartas de arce"
#. ~ Description for maple pie
#: data/json/items/comestibles/wheat.json
@@ -93490,9 +93782,9 @@ msgstr "Llamados fideos ramen. Se pueden comer crudos."
#: data/json/items/comestibles/wheat.json
msgid "cloutie dumpling"
msgid_plural "cloutie dumplings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cloutie dumpling"
+msgstr[1] "cloutie dumplings"
+msgstr[2] "cloutie dumplings"
#. ~ Description for cloutie dumpling
#: data/json/items/comestibles/wheat.json
@@ -93520,9 +93812,9 @@ msgstr ""
#: data/json/items/comestibles/wheat.json
msgid "sponge cake"
msgid_plural "sponge cakes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bizcochuelo"
+msgstr[1] "bizcochuelos"
+msgstr[2] "bizcochuelos"
#. ~ Description for sponge cake
#: data/json/items/comestibles/wheat.json
@@ -93532,9 +93824,9 @@ msgstr "Es una torta simple y esponjosa, típica del proletariado."
#: data/json/items/comestibles/wheat.json
msgid "space cake"
msgid_plural "space cakes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "torta loca"
+msgstr[1] "tortas locas"
+msgstr[2] "tortas locas"
#. ~ Description for space cake
#: data/json/items/comestibles/wheat.json
@@ -93544,9 +93836,9 @@ msgstr "El destino de esta torta es llevarte en un excelente viaje."
#: data/json/items/comestibles/wheat.json
msgid "brownie"
msgid_plural "brownies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "brownie"
+msgstr[1] "brownies"
+msgstr[2] "brownies"
#. ~ Description for brownie
#: data/json/items/comestibles/wheat.json
@@ -93556,9 +93848,9 @@ msgstr "Es un brownie con mucho chocolate, igualito al que hacía tu abuela."
#: data/json/items/comestibles/wheat.json
msgid "'special' brownie"
msgid_plural "'special' brownies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "brownie 'especial'"
+msgstr[1] "brownies 'especiales'"
+msgstr[2] "brownies 'especiales'"
#. ~ Description for {'str': "'special' brownie"}
#: data/json/items/comestibles/wheat.json
@@ -93959,9 +94251,9 @@ msgstr ""
#: data/mods/Modular_Turrets/items.json
msgid "inactive riot control turret"
msgid_plural "inactive riot control turrets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "torreta antidisturbios inactiva"
+msgstr[1] "torretas antidisturbios inactivas"
+msgstr[2] "torretas antidisturbios inactivas"
#. ~ Description for {'str': 'inactive riot control turret'}
#: data/json/items/corpses/inactive_bots.json
@@ -94256,9 +94548,9 @@ msgstr ""
#: data/json/items/corpses/inactive_bots.json
msgid "inactive miner bot"
msgid_plural "inactive miner bots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "minerobot inactivo"
+msgstr[1] "minerobots inactivos"
+msgstr[2] "minerobots inactivos"
#. ~ Use action friendly_msg for {'str': 'inactive miner bot'}.
#: data/json/items/corpses/inactive_bots.json
@@ -94308,9 +94600,9 @@ msgstr ""
#: data/mods/Aftershock/items/inactiverobot.json
msgid "inactive skitterbot"
msgid_plural "inactive skitterbots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "arañabot inactivo"
+msgstr[1] "arañabots inactivos"
+msgstr[2] "arañabots inactivos"
#. ~ Use action friendly_msg for {'str': 'inactive skitterbot'}.
#: data/json/items/corpses/inactive_bots.json
@@ -95803,9 +96095,9 @@ msgstr ""
#: data/json/items/generic/dining_kitchen.json
msgid "canning pot"
msgid_plural "canning pots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "olla de conservería"
+msgstr[1] "ollas de conservería"
+msgstr[2] "ollas de conservería"
#. ~ Description for {'str': 'canning pot'}
#: data/json/items/generic/dining_kitchen.json
@@ -96032,9 +96324,9 @@ msgstr ""
#: data/json/items/generic/spares.json
msgid "spare parts"
msgid_plural "spare parts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "partes de repuesto"
+msgstr[1] "partes de repuesto"
+msgstr[2] "partes de repuesto"
#. ~ Description for {'str_sp': 'spare parts'}
#: data/json/items/generic/spares.json
@@ -96364,9 +96656,9 @@ msgstr ""
#: data/json/items/generic/string.json
msgid "fibrous stalk"
msgid_plural "fibrous stalks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tallo fibroso"
+msgstr[1] "tallos fibrosos"
+msgstr[2] "tallos fibrosos"
#. ~ Description for fibrous stalk
#: data/json/items/generic/string.json
@@ -96513,9 +96805,9 @@ msgstr ""
#: data/json/items/gun/22.json
msgid "Mossberg Brownie"
msgid_plural "Mossberg Brownie"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Mossberg Brownie"
+msgstr[1] "Mossberg Brownie"
+msgstr[2] "Mossberg Brownie"
#: data/json/items/gun/22.json
msgid ""
@@ -96530,9 +96822,9 @@ msgstr ""
#: data/json/items/gun/22.json
msgid "pipe rifle: .22"
msgid_plural "pipe rifles: .22"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rifle de caño: .22"
+msgstr[1] "rifles de caño: .22"
+msgstr[2] "rifles de caño: .22"
#: data/json/items/gun/22.json data/json/items/gun/223.json
#: data/json/items/gun/3006.json data/json/items/gun/38.json
@@ -96936,9 +97228,9 @@ msgstr ""
#: data/json/items/gun/300.json
msgid "Weatherby Mark V"
msgid_plural "Weatherby Mark V"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Weatherby Mark V"
+msgstr[1] "Weatherby Mark V"
+msgstr[2] "Weatherby Mark V"
#: data/json/items/gun/300.json
msgid ""
@@ -97356,9 +97648,9 @@ msgstr ""
#: data/json/items/gun/32.json
msgid "Walther PPK"
msgid_plural "Walther PPK"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Walther PPK"
+msgstr[1] "Walther PPK"
+msgstr[2] "Walther PPK"
#: data/json/items/gun/32.json
msgid ""
@@ -97385,9 +97677,9 @@ msgstr ""
#: data/json/items/gun/357sig.json
msgid "SIG P226"
msgid_plural "SIG P226s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "SIG P226"
+msgstr[1] "SIG P226"
+msgstr[2] "SIG P226"
#: data/json/items/gun/357sig.json
msgid ""
@@ -97426,9 +97718,9 @@ msgstr ""
#: data/json/items/gun/36paper.json
msgid "Colt M1861 Navy"
msgid_plural "Colt M1861 Navy"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Colt M1861 Navy"
+msgstr[1] "Colt M1861 Navy"
+msgstr[2] "Colt M1861 Navy"
#: data/json/items/gun/36paper.json
msgid ""
@@ -97495,9 +97787,9 @@ msgstr[2] ""
#: data/json/items/gun/38.json
msgid "Ruger LCR .38"
msgid_plural "Ruger LCR .38"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Ruger LCR .38"
+msgstr[1] "Ruger LCR .38"
+msgstr[2] "Ruger LCR .38"
#: data/json/items/gun/38.json
msgid ""
@@ -97733,9 +98025,9 @@ msgstr ""
#: data/json/items/gun/40.json
msgid "handmade six-shooter"
msgid_plural "handmade six-shooters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "seis-tiros casero"
+msgstr[1] "seis-tiros caseros"
+msgstr[2] "seis-tiros caseros"
#: data/json/items/gun/40.json
msgid ""
@@ -97809,9 +98101,9 @@ msgstr ""
#: data/json/items/gun/40x46mm.json
msgid "tube 40mm launcher"
msgid_plural "tube 40mm launchers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cañolanzador 40mm"
+msgstr[1] "cañolanzadores 40mm"
+msgstr[2] "cañolanzadores 40mm"
#: data/json/items/gun/40x46mm.json
msgid ""
@@ -97996,9 +98288,9 @@ msgstr ""
#: data/json/items/gun/44.json
msgid "Henry Big Boy .44"
msgid_plural "Henry Big Boy .44"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Henry Big Boy .44"
+msgstr[1] "Henry Big Boy .44"
+msgstr[2] "Henry Big Boy .44"
#: data/json/items/gun/44.json
msgid ""
@@ -98020,9 +98312,9 @@ msgstr[2] ""
#: data/json/items/gun/44.json
msgid "Ruger Redhawk"
msgid_plural "Ruger Redhawk"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Ruger Redhawk"
+msgstr[1] "Ruger Redhawk"
+msgstr[2] "Ruger Redhawk"
#: data/json/items/gun/44.json
msgid ""
@@ -98170,9 +98462,9 @@ msgstr ""
#: data/json/items/gun/45.json
msgid "pipe rifle: .45"
msgid_plural "pipe rifles: .45"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rifle de caño: .45"
+msgstr[1] "rifles de caño: .45"
+msgstr[2] "rifles de caño: .45"
#: data/json/items/gun/45.json
msgid "Luty SMG: .45"
@@ -98193,9 +98485,9 @@ msgstr ""
#: data/json/items/gun/45.json
msgid "homemade hand cannon"
msgid_plural "homemade hand cannons"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cañón de mano casero"
+msgstr[1] "cañones de mano caseros"
+msgstr[2] "cañones de mano caseros"
#: data/json/items/gun/45.json
msgid ""
@@ -98227,9 +98519,9 @@ msgstr ""
#: data/json/items/gun/45.json
msgid "USP .45"
msgid_plural "USP .45s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "USP .45"
+msgstr[1] "USP .45"
+msgstr[2] "USP .45"
#: data/json/items/gun/45.json
msgid "MK 23 MOD 0"
@@ -98366,9 +98658,9 @@ msgstr ""
#: data/json/items/gun/45colt.json
msgid "Bond Arms Derringer"
msgid_plural "Bond Arms Derringers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Revólver Bond Arms"
+msgstr[1] "Revólveres Bond Arms"
+msgstr[2] "Revólveres Bond Arms"
#: data/json/items/gun/45colt.json
msgid ""
@@ -98444,9 +98736,9 @@ msgstr ""
#: data/json/items/gun/50.json
msgid "Barrett M107A1"
msgid_plural "Barrett M107A1"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Barrett M107A1"
+msgstr[1] "Barrett M107A1"
+msgstr[2] "Barrett M107A1"
#: data/json/items/gun/50.json
msgid ""
@@ -98472,9 +98764,9 @@ msgstr ""
#: data/json/items/gun/50.json
msgid ".50 caliber rifle"
msgid_plural ".50 caliber rifles"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rifle calibre .50"
+msgstr[1] "rifles calibre .50"
+msgstr[2] "rifles calibre .50"
#: data/json/items/gun/50.json
msgid ""
@@ -98605,9 +98897,9 @@ msgstr ""
#: data/json/items/gun/57.json
msgid "FN Five-Seven"
msgid_plural "FN Five-Sevens"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "FN Five-Seven"
+msgstr[1] "FN Five-Seven"
+msgstr[2] "FN Five-Seven"
#: data/json/items/gun/57.json
msgid ""
@@ -98848,9 +99140,9 @@ msgstr ""
#: data/json/items/gun/762R.json
msgid "Mosin-Nagant 1891/30"
msgid_plural "Mosin-Nagant 1891/30"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Mosin-Nagant 1891/30"
+msgstr[1] "Mosin-Nagant 1891/30"
+msgstr[2] "Mosin-Nagant 1891/30"
#: data/json/items/gun/762R.json
msgid ""
@@ -98962,9 +99254,9 @@ msgstr ""
#: data/json/items/gun/8x40mm.json
msgid "RM11B scout rifle"
msgid_plural "RM11B scout rifles"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rifle scout RM11B"
+msgstr[1] "rifles scout RM11B"
+msgstr[2] "rifles scout RM11B"
#: data/json/items/gun/8x40mm.json
msgid ""
@@ -99123,9 +99415,9 @@ msgstr ""
#: data/json/items/gun/9mm.json
msgid "Cx4 Storm"
msgid_plural "Cx4 Storms"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Cx4 Storm"
+msgstr[1] "Cx4 Storm"
+msgstr[2] "Cx4 Storm"
#: data/json/items/gun/9mm.json
msgid ""
@@ -99243,9 +99535,9 @@ msgstr ""
#: data/json/items/gun/9mm.json
msgid "Kel-Tec SUB-2000"
msgid_plural "Kel-Tec SUB-2000"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Kel-Tec SUB-2000"
+msgstr[1] "Kel-Tec SUB-2000"
+msgstr[2] "Kel-Tec SUB-2000"
#: data/json/items/gun/9mm.json
msgid ""
@@ -99288,9 +99580,9 @@ msgstr ""
#: data/json/items/gun/9mm.json
msgid "pipe rifle: 9x19mm"
msgid_plural "pipe rifles: 9x19mm"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rifle de caño: 9x19mm"
+msgstr[1] "rifles de caño: 9x19mm"
+msgstr[2] "rifles de caño: 9x19mm"
#: data/json/items/gun/9mm.json
msgid "Luty SMG: 9x19mm"
@@ -99311,9 +99603,9 @@ msgstr ""
#: data/json/items/gun/9mm.json
msgid "STEN"
msgid_plural "STENs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "STEN"
+msgstr[1] "STEN"
+msgstr[2] "STEN"
#: data/json/items/gun/9mm.json
msgid ""
@@ -99549,9 +99841,9 @@ msgstr ""
#: data/json/items/gun/9x18.json
msgid "Skorpion Vz. 82"
msgid_plural "Skorpion Vz. 82s"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Skorpion Vz. 82"
+msgstr[1] "Skorpion Vz. 82"
+msgstr[2] "Skorpion Vz. 82"
#: data/json/items/gun/9x18.json
msgid ""
@@ -99667,9 +99959,9 @@ msgstr ""
#: data/json/items/gun/combination.json
msgid "pipe combination gun"
msgid_plural "pipe combination guns"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pistola de caño combinada"
+msgstr[1] "pistolas de caño combinadas"
+msgstr[2] "pistolas de caño combinadas"
#: data/json/items/gun/combination.json
msgid ""
@@ -99833,9 +100125,9 @@ msgstr ""
#: data/json/items/gun/flintlock.json
msgid "flintlock carbine"
msgid_plural "flintlock carbines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "carabina de chispa"
+msgstr[1] "carabinas de chispa"
+msgstr[2] "carabinas de chispa"
#: data/json/items/gun/flintlock.json
msgid ""
@@ -99850,9 +100142,9 @@ msgstr ""
#: data/json/items/gun/flintlock.json
msgid "handmade double-barrel flintlock"
msgid_plural "handmade double-barrel flintlocks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "carabina de chispa de doble caño"
+msgstr[1] "carabinas de chispa de doble caño"
+msgstr[2] "carabinas de chispa de doble caño"
#: data/json/items/gun/flintlock.json
msgid ""
@@ -99914,9 +100206,9 @@ msgstr ""
#: data/json/items/gun/metal_rail.json
msgid "heavy rail rifle"
msgid_plural "heavy rail rifles"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rifle pesado de riel"
+msgstr[1] "rifles pesados de riel"
+msgstr[2] "rifles pesados de riel"
#: data/json/items/gun/metal_rail.json
msgid ""
@@ -100150,9 +100442,9 @@ msgstr ""
#: data/json/items/gun/shot.json
msgid "Kel-Tec KSG"
msgid_plural "Kel-Tec KSG"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Kel-Tec KSG"
+msgstr[1] "Kel-Tec KSG"
+msgstr[2] "Kel-Tec KSG"
#: data/json/items/gun/shot.json
msgid ""
@@ -100641,9 +100933,9 @@ msgstr ""
#: data/json/items/gunmod/accessories.json
msgid "arrow rest"
msgid_plural "arrow rests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "apoyo para flechas"
+msgstr[1] "apoyos para flechas"
+msgstr[2] "apoyos para flechas"
#: data/json/items/gunmod/accessories.json
msgid ""
@@ -100696,9 +100988,9 @@ msgstr ""
#: data/json/items/gunmod/accessories.json
msgid "bow dampening kit"
msgid_plural "bow dampening kits"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "equipo de amortiguación de arco"
+msgstr[1] "equipos de amortiguación de arco"
+msgstr[2] "equipos de amortiguación de arco"
#: data/json/items/gunmod/accessories.json
msgid ""
@@ -100764,9 +101056,9 @@ msgstr ""
#: data/json/items/gunmod/barrel.json
msgid "shortened barrel"
msgid_plural "shortened barrels"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cañón recortado"
+msgstr[1] "cañones recortados"
+msgstr[2] "cañones recortados"
#: data/json/items/gunmod/barrel.json
msgid ""
@@ -100786,9 +101078,9 @@ msgstr "cañón"
#: data/json/items/gunmod/barrel.json
msgid "upstest"
msgid_plural "upstests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "upstest"
+msgstr[1] "upstests"
+msgstr[2] "upstests"
#: data/json/items/gunmod/barrel.json
msgid ""
@@ -100819,9 +101111,9 @@ msgstr "bajocañón"
#: data/json/items/gunmod/brass_catcher.json
msgid "brass catcher"
msgid_plural "brass catchers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "recolector de latón"
+msgstr[1] "recolectores de latón"
+msgstr[2] "recolectores de latón"
#: data/json/items/gunmod/brass_catcher.json
msgid ""
@@ -100875,9 +101167,9 @@ msgstr ""
#: data/json/items/gunmod/grip.json
msgid "lightweight replacement furniture"
msgid_plural "lightweight replacement furnitures"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "accesorio liviano de reemplazo"
+msgstr[1] "accesorios livianos de reemplazo"
+msgstr[2] "accesorios livianos de reemplazo"
#: data/json/items/gunmod/grip.json
msgid ""
@@ -101022,9 +101314,9 @@ msgstr ""
#: data/json/items/gunmod/mechanism.json
msgid "match trigger"
msgid_plural "match triggers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "gatillo balanceado"
+msgstr[1] "gatillos balanceados"
+msgstr[2] "gatillos balanceados"
#: data/json/items/gunmod/mechanism.json
msgid ""
@@ -101041,9 +101333,9 @@ msgstr "mecanismo"
#: data/json/items/gunmod/mechanism.json
msgid "drop-in auto sear"
msgid_plural "drop-in auto sears"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sear para automático"
+msgstr[1] "sears para automático"
+msgstr[2] "sears para automático"
#: data/json/items/gunmod/mechanism.json
msgid ""
@@ -101056,9 +101348,9 @@ msgstr ""
#: data/json/items/gunmod/mechanism.json
msgid "lightning link"
msgid_plural "lightning links"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "unión ráfaga"
+msgstr[1] "uniones ráfaga"
+msgstr[2] "uniones ráfaga"
#: data/json/items/gunmod/mechanism.json
msgid ""
@@ -101232,9 +101524,9 @@ msgstr "bocacha"
#: data/json/items/gunmod/muzzle.json
msgid "muzzle brake"
msgid_plural "muzzle brakes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "freno de boca"
+msgstr[1] "frenos de boca"
+msgstr[2] "frenos de boca"
#: data/json/items/gunmod/muzzle.json
msgid ""
@@ -101318,9 +101610,9 @@ msgstr ""
#: data/json/items/gunmod/muzzle.json
msgid "RK6S34 suppressor"
msgid_plural "RK6S34 suppressors"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "silenciador RK6S34"
+msgstr[1] "silenciadores RK6S34"
+msgstr[2] "silenciadores RK6S34"
#: data/json/items/gunmod/muzzle.json
msgid ""
@@ -101335,9 +101627,9 @@ msgstr ""
#: data/json/items/gunmod/muzzle.json
msgid "shotgun suppressor"
msgid_plural "shotgun suppressors"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "silenciador de escopeta"
+msgstr[1] "silenciadores de escopeta"
+msgstr[2] "silenciadores de escopeta"
#: data/json/items/gunmod/muzzle.json
msgid ""
@@ -101382,9 +101674,9 @@ msgstr ""
#: data/json/items/gunmod/muzzle.json
msgid "compact suppressor"
msgid_plural "compact suppressors"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "silenciador compacto"
+msgstr[1] "silenciadores compactos"
+msgstr[2] "silenciadores compactos"
#: data/json/items/gunmod/muzzle.json
msgid ""
@@ -101397,9 +101689,9 @@ msgstr ""
#: data/json/items/gunmod/rail.json data/mods/No_Hope/Items/gunmods.json
msgid "rail-mounted crossbow"
msgid_plural "rail-mounted crossbows"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "ballesta montable de riel"
+msgstr[1] "ballestas montables de riel"
+msgstr[2] "ballestas montables de riel"
#: data/json/items/gunmod/rail.json data/mods/No_Hope/Items/gunmods.json
msgid ""
@@ -101463,9 +101755,9 @@ msgstr ""
#: data/json/items/gunmod/rail.json
msgid "offset sight rail"
msgid_plural "offset sight rails"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "ranura para mirilla de compensación"
+msgstr[1] "ranuras para mirilla de compensación"
+msgstr[2] "ranuras para mirilla de compensación"
#: data/json/items/gunmod/rail.json
msgid "An additional rail set at 45° for attaching a secondary optic."
@@ -101537,9 +101829,9 @@ msgstr ""
#: data/json/items/gunmod/sights.json
msgid "five pin bow sight"
msgid_plural "five pin bow sights"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mirilla de cinco pines para arco"
+msgstr[1] "mirillas de cinco pines para arco"
+msgstr[2] "mirillas de cinco pines para arco"
#: data/json/items/gunmod/sights.json
msgid ""
@@ -101559,9 +101851,9 @@ msgstr "miras"
#: data/json/items/gunmod/sights.json
msgid "single pin bow sight"
msgid_plural "single pin bow sights"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mirilla de un pin para arco"
+msgstr[1] "mirillas de un pin para arco"
+msgstr[2] "mirillas de un pin para arco"
#: data/json/items/gunmod/sights.json
msgid ""
@@ -101720,9 +102012,9 @@ msgstr ""
#: data/json/items/gunmod/sights.json
msgid "telescopic sight"
msgid_plural "telescopic sights"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mira telescópica"
+msgstr[1] "miras telescópicas"
+msgstr[2] "miras telescópicas"
#: data/json/items/gunmod/sights.json
msgid ""
@@ -101734,9 +102026,9 @@ msgstr ""
#: data/json/items/gunmod/sights.json
msgid "telescopic pistol sight"
msgid_plural "telescopic pistol sights"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mira telescópica de pistola"
+msgstr[1] "miras telescópicas de pistola"
+msgstr[2] "miras telescópicas de pistola"
#: data/json/items/gunmod/sights.json
msgid ""
@@ -101768,9 +102060,9 @@ msgstr "honda"
#: data/json/items/gunmod/stock.json
msgid "adjustable stock"
msgid_plural "adjustable stocks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "culata ajustable"
+msgstr[1] "culatas ajustables"
+msgstr[2] "culatas ajustables"
#: data/json/items/gunmod/stock.json
msgid "An adjustable replacement stock improving both recoil and accuracy."
@@ -101838,9 +102130,9 @@ msgstr "Un reemplazo diseñado para absorber el retroceso percibido."
#: data/json/items/gunmod/stock.json
msgid "cheek pad"
msgid_plural "cheek pads"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "almohadilla de mejilla"
+msgstr[1] "almohadillas de mejilla"
+msgstr[2] "almohadillas de mejilla"
#: data/json/items/gunmod/stock.json
msgid ""
@@ -101919,9 +102211,9 @@ msgstr ""
#: data/json/items/gunmod/underbarrel.json
msgid "pipe combination gun shotgun"
msgid_plural "pipe combination gun shotguns"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "escopeta de caño combinada"
+msgstr[1] "escopetas de caño combinadas"
+msgstr[2] "escopetas de caño combinadas"
#: data/json/items/gunmod/underbarrel.json
msgid ""
@@ -101934,9 +102226,9 @@ msgstr ""
#: data/json/items/gunmod/underbarrel.json
msgid "forward grip"
msgid_plural "forward grips"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mango vertical"
+msgstr[1] "mangos verticales"
+msgstr[2] "mangos verticales"
#: data/json/items/gunmod/underbarrel.json
msgid ""
@@ -101964,9 +102256,9 @@ msgstr ""
#: data/json/items/gunmod/underbarrel.json
msgid "integrated bayonet"
msgid_plural "integrated bayonets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bayoneta integrada"
+msgstr[1] "bayonetas integradas"
+msgstr[2] "bayonetas integradas"
#: data/json/items/gunmod/underbarrel.json
msgid "This is the bayonet integrated in the firearm."
@@ -102187,9 +102479,9 @@ msgstr ""
#: data/json/items/gunmod/underbarrel.json
msgid "40mm pipe launcher"
msgid_plural "40mm pipe launchers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "caño lanzador 40mm"
+msgstr[1] "caños lanzadores 40mm"
+msgstr[2] "caños lanzadores 40mm"
#: data/json/items/gunmod/underbarrel.json
msgid ""
@@ -102248,9 +102540,9 @@ msgstr ""
#: data/json/items/gunmod/underbarrel.json
msgid "underslung shotgun"
msgid_plural "underslung shotguns"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "escopeta colgante"
+msgstr[1] "escopetas colgantes"
+msgstr[2] "escopetas colgantes"
#: data/json/items/gunmod/underbarrel.json
msgid ""
@@ -105451,9 +105743,9 @@ msgstr ""
#: data/json/items/melee/bludgeons.json
msgid "L-stick (off)"
msgid_plural "L-sticks (off)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Palo-L (apag.)"
+msgstr[1] "Palos-L (apag.)"
+msgstr[2] "Palos-L (apag.)"
#. ~ Use action msg for {'str': 'L-stick (off)', 'str_pl': 'L-sticks (off)'}.
#: data/json/items/melee/bludgeons.json
@@ -106338,9 +106630,9 @@ msgstr ""
#: data/json/items/melee/spears_and_polearms.json
msgid "homemade halfpike"
msgid_plural "homemade halfpikes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "espontón casero"
+msgstr[1] "espontones caseros"
+msgstr[2] "espontones caseros"
#. ~ Description for {'str': 'homemade halfpike'}
#: data/json/items/melee/spears_and_polearms.json
@@ -106367,9 +106659,9 @@ msgstr ""
#: data/json/items/melee/spears_and_polearms.json
msgid "pipe spear"
msgid_plural "pipe spears"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "caño lanza"
+msgstr[1] "caños lanza"
+msgstr[2] "caños lanza"
#. ~ Description for {'str': 'pipe spear'}
#: data/json/items/melee/spears_and_polearms.json
@@ -106473,6 +106765,22 @@ msgid ""
"likely evolved."
msgstr ""
+#: data/json/items/melee/spears_and_polearms.json
+msgid "makeshift glaive"
+msgid_plural "makeshift glaives"
+msgstr[0] "guja improvisada"
+msgstr[1] "gujas improvisadas"
+msgstr[2] "gujas improvisadas"
+
+#. ~ Description for {'str': 'makeshift glaive'}
+#: data/json/items/melee/spears_and_polearms.json
+msgid ""
+"This is a large blade attached to a long stick. It could do a considerable "
+"amount of damage."
+msgstr ""
+"Es una gran cuchilla unida a un palo largo. Puede causar un daño "
+"considerable."
+
#: data/json/items/melee/spears_and_polearms.json
msgid "glaive"
msgid_plural "glaives"
@@ -106772,9 +107080,9 @@ msgstr ""
#: data/json/items/melee/swords_and_blades.json
msgid "folding knife"
msgid_plural "folding knives"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cuchillo plegable"
+msgstr[1] "cuchillos plegables"
+msgstr[2] "cuchillos plegables"
#. ~ Description for {'str': 'folding knife', 'str_pl': 'folding knives'}
#: data/json/items/melee/swords_and_blades.json
@@ -108002,9 +108310,9 @@ msgstr ""
#: data/mods/No_Hope/Items/swords_and_blades.json
msgid "electric chainsaw lajatang (off)"
msgid_plural "electric chainsaw lajatangs (off)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "motosierra lajatang eléctrica (apag.)"
+msgstr[1] "motosierras lajatang eléctricas (apag.)"
+msgstr[2] "motosierras lajatang eléctricas (apag.)"
#. ~ Description for {'str': 'electric chainsaw lajatang (off)', 'str_pl':
#. 'electric chainsaw lajatangs (off)'}
@@ -108024,9 +108332,9 @@ msgstr ""
#: data/mods/No_Hope/Items/swords_and_blades.json
msgid "electric chainsaw lajatang (on)"
msgid_plural "electric chainsaw lajatangs (on)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "motosierra lajatang eléctrica (enc.)"
+msgstr[1] "motosierras lajatang eléctricas (enc.)"
+msgstr[2] "motosierras lajatang eléctricas (enc.)"
#. ~ Description for {'str': 'electric chainsaw lajatang (on)', 'str_pl':
#. 'electric chainsaw lajatangs (on)'}
@@ -108181,9 +108489,9 @@ msgstr ""
#: data/json/items/melee/swords_and_blades.json
msgid "electric combat chainsaw (on)"
msgid_plural "electric combat chainsaws (on)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "motosierra eléctrica de combate (enc.)"
+msgstr[1] "motosierras eléctricas de combate (enc.)"
+msgstr[2] "motosierras eléctricas de combate (enc.)"
#. ~ Description for {'str': 'electric combat chainsaw (on)', 'str_pl':
#. 'electric combat chainsaws (on)'}
@@ -108370,9 +108678,9 @@ msgstr ""
#: data/json/items/ranged/archery.json
msgid "crude wooden arrow"
msgid_plural "crude wooden arrows"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "flecha rudimentaria de madera"
+msgstr[1] "flechas rudimentarias de madera"
+msgstr[2] "flechas rudimentarias de madera"
#. ~ Description for {'str': 'crude wooden arrow'}
#: data/json/items/ranged/archery.json
@@ -108386,9 +108694,9 @@ msgstr ""
#: data/json/items/ranged/archery.json
msgid "wooden bodkin arrow"
msgid_plural "wooden bodkin arrows"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "flecha bodkin de madera"
+msgstr[1] "flechas bodkin de madera"
+msgstr[2] "flechas bodkin de madera"
#. ~ Description for {'str': 'wooden bodkin arrow'}
#: data/json/items/ranged/archery.json
@@ -108402,9 +108710,9 @@ msgstr ""
#: data/json/items/ranged/archery.json
msgid "wooden rubber blunt arrow"
msgid_plural "wooden rubber blunt arrows"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "flecha de madera con punta de goma"
+msgstr[1] "flechas de madera con punta de goma"
+msgstr[2] "flechas de madera con punta de goma"
#. ~ Description for {'str': 'wooden rubber blunt arrow'}
#: data/json/items/ranged/archery.json
@@ -108419,9 +108727,9 @@ msgstr ""
#: data/json/items/ranged/archery.json
msgid "simple wooden small game arrow"
msgid_plural "simple wooden small game arrows"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "flecha simple de caza menor de madera"
+msgstr[1] "flechas simples de caza menor de madera"
+msgstr[2] "flechas simples de caza menor de madera"
#. ~ Description for {'str': 'simple wooden small game arrow'}
#: data/json/items/ranged/archery.json
@@ -108437,9 +108745,9 @@ msgstr ""
#: data/json/items/ranged/archery.json
msgid "wooden broadhead arrow"
msgid_plural "wooden broadhead arrows"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "flecha de madera de punta ancha"
+msgstr[1] "flechas de madera de punta ancha"
+msgstr[2] "flechas de madera de punta ancha"
#. ~ Description for {'str': 'wooden broadhead arrow'}
#: data/json/items/ranged/archery.json
@@ -108471,9 +108779,9 @@ msgstr ""
#: data/json/items/ranged/archery.json
msgid "wooden small game arrow"
msgid_plural "wooden small game arrows"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "flecha de caza menor de madera"
+msgstr[1] "flechas de caza menor de madera"
+msgstr[2] "flechas de caza menor de madera"
#. ~ Description for {'str': 'wooden small game arrow'}
#: data/json/items/ranged/archery.json
@@ -108505,9 +108813,9 @@ msgstr ""
#: data/json/items/ranged/archery.json
msgid "simple metal arrow"
msgid_plural "simple metal arrows"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "flecha común de metal"
+msgstr[1] "flechas comunes de metal"
+msgstr[2] "flechas comunes de metal"
#. ~ Description for {'str': 'simple metal arrow'}
#: data/json/items/ranged/archery.json
@@ -108521,9 +108829,9 @@ msgstr ""
#: data/json/items/ranged/archery.json
msgid "aluminum broadhead arrow"
msgid_plural "aluminum broadhead arrows"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "flecha de aluminio de punta ancha"
+msgstr[1] "flechas de aluminio de punta ancha"
+msgstr[2] "flechas de aluminio de punta ancha"
#. ~ Description for {'str': 'aluminum broadhead arrow'}
#: data/json/items/ranged/archery.json
@@ -108538,9 +108846,9 @@ msgstr ""
#: data/json/items/ranged/archery.json
msgid "aluminum field point arrow"
msgid_plural "aluminum field point arrows"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "flecha de aluminio con punta de campo"
+msgstr[1] "flechas de aluminio con punta de campo"
+msgstr[2] "flechas de aluminio con punta de campo"
#. ~ Description for {'str': 'aluminum field point arrow'}
#: data/json/items/ranged/archery.json
@@ -108554,9 +108862,9 @@ msgstr ""
#: data/json/items/ranged/archery.json
msgid "aluminum small game arrow"
msgid_plural "aluminum small game arrows"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "flecha de aluminio de caza menor"
+msgstr[1] "flechas de aluminio de caza menor"
+msgstr[2] "flechas de aluminio de caza menor"
#. ~ Description for {'str': 'aluminum small game arrow'}
#: data/json/items/ranged/archery.json
@@ -108572,9 +108880,9 @@ msgstr ""
#: data/json/items/ranged/archery.json
msgid "carbon fiber hunting arrow"
msgid_plural "carbon fiber hunting arrows"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "flecha de fibra de carbono de caza"
+msgstr[1] "flechas de fibra de carbono de caza"
+msgstr[2] "flechas de fibra de carbono de caza"
#. ~ Description for {'str': 'carbon fiber hunting arrow'}
#: data/json/items/ranged/archery.json
@@ -108590,9 +108898,9 @@ msgstr ""
#: data/json/items/ranged/archery.json
msgid "explosive arrow"
msgid_plural "explosive arrows"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "flecha explosiva"
+msgstr[1] "flechas explosivas"
+msgstr[2] "flechas explosivas"
#. ~ Description for {'str': 'explosive arrow'}
#: data/json/items/ranged/archery.json
@@ -108691,9 +108999,9 @@ msgstr ""
#: data/json/items/ranged/archery.json
msgid "compound bow (high)"
msgid_plural "compound bows (high)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "arco de poleas (alta)"
+msgstr[1] "arcos de poleas (alta)"
+msgstr[2] "arcos de poleas (alta)"
#: data/json/items/ranged/archery.json
msgid ""
@@ -108799,9 +109107,9 @@ msgstr ""
#: data/json/items/ranged/crossbows.json
msgid "crude wooden bolt"
msgid_plural "crude wooden bolts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "perno rudimentario de madera"
+msgstr[1] "pernos rudimentarios de madera"
+msgstr[2] "pernos rudimentarios de madera"
#. ~ Description for {'str': 'crude wooden bolt'}
#: data/json/items/ranged/crossbows.json
@@ -108831,9 +109139,9 @@ msgstr ""
#: data/json/items/ranged/crossbows.json
msgid "simple wooden small game bolt"
msgid_plural "simple wooden small game bolts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "perno simple de caza menor de madera"
+msgstr[1] "pernos simples de caza menor de madera"
+msgstr[2] "pernos simples de caza menor de madera"
#. ~ Description for {'str': 'simple wooden small game bolt'}
#: data/json/items/ranged/crossbows.json
@@ -108865,9 +109173,9 @@ msgstr ""
#: data/json/items/ranged/crossbows.json
msgid "wooden broadhead bolt"
msgid_plural "wooden broadhead bolts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "perno de madera de punta ancha"
+msgstr[1] "pernos de madera de punta ancha"
+msgstr[2] "pernos de madera de punta ancha"
#. ~ Description for {'str': 'wooden broadhead bolt'}
#: data/json/items/ranged/crossbows.json
@@ -108882,9 +109190,9 @@ msgstr ""
#: data/json/items/ranged/crossbows.json
msgid "wooden bodkin bolt"
msgid_plural "wooden bodkin bolts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "perno bodkin de madera"
+msgstr[1] "pernos bodkin de madera"
+msgstr[2] "pernos bodkin de madera"
#. ~ Description for {'str': 'wooden bodkin bolt'}
#: data/json/items/ranged/crossbows.json
@@ -108898,9 +109206,9 @@ msgstr ""
#: data/json/items/ranged/crossbows.json
msgid "wooden small game bolt"
msgid_plural "wooden small game bolts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "perno de caza menor de madera"
+msgstr[1] "pernos de caza menor de madera"
+msgstr[2] "pernos de caza menor de madera"
#. ~ Description for {'str': 'wooden small game bolt'}
#: data/json/items/ranged/crossbows.json
@@ -108916,9 +109224,9 @@ msgstr ""
#: data/json/items/ranged/crossbows.json
msgid "simple metal bolt"
msgid_plural "simple metal bolts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "perno simple de metal"
+msgstr[1] "pernos simples de metal"
+msgstr[2] "pernos simples de metal"
#. ~ Description for {'str': 'simple metal bolt'}
#: data/json/items/ranged/crossbows.json
@@ -108932,9 +109240,9 @@ msgstr ""
#: data/json/items/ranged/crossbows.json
msgid "aluminum broadhead bolt"
msgid_plural "aluminum broadhead bolts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "perno de aluminio de punta ancha"
+msgstr[1] "pernos de aluminio de punta ancha"
+msgstr[2] "pernos de aluminio de punta ancha"
#. ~ Description for {'str': 'aluminum broadhead bolt'}
#: data/json/items/ranged/crossbows.json
@@ -108948,9 +109256,9 @@ msgstr ""
#: data/json/items/ranged/crossbows.json
msgid "aluminum field point bolt"
msgid_plural "aluminum field point bolts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "perno de aluminio con punta de campo"
+msgstr[1] "pernos de aluminio con punta de campo"
+msgstr[2] "pernos de aluminio con punta de campo"
#. ~ Description for {'str': 'aluminum field point bolt'}
#: data/json/items/ranged/crossbows.json
@@ -108964,9 +109272,9 @@ msgstr ""
#: data/json/items/ranged/crossbows.json
msgid "aluminum small game bolt"
msgid_plural "aluminum small game bolts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "perno de aluminio de caza menor"
+msgstr[1] "pernos de aluminio de caza menor"
+msgstr[2] "pernos de aluminio de caza menor"
#. ~ Description for {'str': 'aluminum small game bolt'}
#: data/json/items/ranged/crossbows.json
@@ -108982,9 +109290,9 @@ msgstr ""
#: data/json/items/ranged/crossbows.json
msgid "carbon fiber hunting bolt"
msgid_plural "carbon fiber hunting bolts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "perno de fibra de carbono de caza"
+msgstr[1] "pernos de fibra de carbono de caza"
+msgstr[2] "pernos de fibra de carbono de caza"
#. ~ Description for {'str': 'carbon fiber hunting bolt'}
#: data/json/items/ranged/crossbows.json
@@ -109018,9 +109326,9 @@ msgstr ""
#: data/json/items/ranged/crossbows.json
msgid "bullet crossbow"
msgid_plural "bullet crossbows"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "ballesta para piedras"
+msgstr[1] "ballestas para piedras"
+msgstr[2] "ballestas para piedras"
#: data/json/items/ranged/crossbows.json
msgid ""
@@ -109138,9 +109446,9 @@ msgstr ""
#: data/json/items/ranged/pneumatic.json
msgid "BB gun"
msgid_plural "BB guns"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rifle de balines"
+msgstr[1] "rifles de balines"
+msgstr[2] "rifles de balines"
#: data/json/items/ranged/pneumatic.json
msgid ""
@@ -109223,9 +109531,9 @@ msgstr ""
#: data/json/items/ranged/slings.json
msgid "brace slingshot"
msgid_plural "brace slingshots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "gomera con soporte"
+msgstr[1] "gomeras con soporte"
+msgstr[2] "gomeras con soporte"
#: data/json/items/ranged/slings.json
msgid ""
@@ -109358,9 +109666,9 @@ msgstr ""
#: data/json/items/ranged/throwing.json
msgid "bolas"
msgid_plural "bolases"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "boleadoras"
+msgstr[1] "boleadoras"
+msgstr[2] "boleadoras"
#. ~ Description for {'str': 'bolas', 'str_pl': 'bolases'}
#: data/json/items/ranged/throwing.json
@@ -109403,9 +109711,9 @@ msgstr "Un frisbee de plástico hecho para juegos al aire libre."
#: data/json/items/ranged/throwing.json
msgid "net"
msgid_plural "nets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "red"
+msgstr[1] "redes"
+msgstr[2] "redes"
#. ~ Description for {'str': 'net'}
#: data/json/items/ranged/throwing.json
@@ -109463,9 +109771,9 @@ msgstr ""
#: data/json/items/ranged/throwing.json
msgid "throwing stick"
msgid_plural "throwing sticks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "palo arrojadizo"
+msgstr[1] "palos arrojadizos"
+msgstr[2] "palos arrojadizos"
#. ~ Description for {'str': 'throwing stick'}
#: data/json/items/ranged/throwing.json
@@ -109509,9 +109817,9 @@ msgstr ""
#: data/json/items/resources/chemicals.json
msgid "potassium alum"
msgid_plural "potassium alums"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "alumbre potásico"
+msgstr[1] "alumbre potásico"
+msgstr[2] "alumbre potásico"
#. ~ Description for {'str': 'potassium alum'}
#: data/json/items/resources/chemicals.json
@@ -109530,9 +109838,9 @@ msgstr ""
#: data/json/items/resources/chemicals.json
msgid "cloth dye powder"
msgid_plural "cloth dye powders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "polvo para teñir lana"
+msgstr[1] "polvo para teñir lana"
+msgstr[2] "polvo para teñir lana"
#. ~ Description for {'str': 'cloth dye powder'}
#: data/json/items/resources/chemicals.json
@@ -109546,9 +109854,9 @@ msgstr ""
#: data/json/items/resources/fasteners.json
msgid "steel buckle"
msgid_plural "steel buckles"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hebilla de acero"
+msgstr[1] "hebillas de acero"
+msgstr[2] "hebillas de acero"
#. ~ Description for {'str': 'steel buckle'}
#: data/json/items/resources/fasteners.json
@@ -109558,9 +109866,9 @@ msgstr "Es una hebilla de acero, como la que tienen los cinturones."
#: data/json/items/resources/fasteners.json
msgid "plastic button"
msgid_plural "plastic buttons"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "botón plástico"
+msgstr[1] "botones plásticos"
+msgstr[2] "botones plásticos"
#. ~ Description for {'str': 'plastic button'}
#: data/json/items/resources/fasteners.json
@@ -109570,9 +109878,9 @@ msgstr "Es un botón de plástico, como el que se usa en mucha ropa."
#: data/json/items/resources/fasteners.json
msgid "steel button"
msgid_plural "steel buttons"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "botón de acero"
+msgstr[1] "botones de acero"
+msgstr[2] "botones de acero"
#. ~ Description for {'str': 'steel button'}
#: data/json/items/resources/fasteners.json
@@ -109582,9 +109890,9 @@ msgstr "Es un botón de acero, como el que se usa en mucha ropa."
#: data/json/items/resources/fasteners.json
msgid "wooden button"
msgid_plural "wooden buttons"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "botón de madera"
+msgstr[1] "botones de madera"
+msgstr[2] "botones de madera"
#. ~ Description for {'str': 'wooden button'}
#: data/json/items/resources/fasteners.json
@@ -109595,9 +109903,9 @@ msgstr ""
#: data/json/items/resources/fasteners.json
msgid "steel snap fastener"
msgid_plural "steel snap fasteners"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "broche metálico de acero"
+msgstr[1] "broches metálicos de acero"
+msgstr[2] "broches metálicos de acero"
#. ~ Description for {'str': 'steel snap fastener'}
#: data/json/items/resources/fasteners.json
@@ -109608,9 +109916,9 @@ msgstr ""
#: data/json/items/resources/fasteners.json
msgid "touch fastener"
msgid_plural "touch fasteners"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cierre abrojo"
+msgstr[1] "cierres abrojo"
+msgstr[2] "cierres abrojo"
#. ~ Description for {'str': 'touch fastener'}
#: data/json/items/resources/fasteners.json
@@ -109624,9 +109932,9 @@ msgstr ""
#: data/json/items/resources/fasteners.json
msgid "long plastic zipper"
msgid_plural "long plastic zippers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cierre grande de plástico"
+msgstr[1] "cierres grandes de plástico"
+msgstr[2] "cierres grandes de plástico"
#. ~ Description for {'str': 'long plastic zipper'}
#: data/json/items/resources/fasteners.json
@@ -109636,9 +109944,9 @@ msgstr "Es un cierre grande de plástico, como el que se usa en mucha ropa."
#: data/json/items/resources/fasteners.json
msgid "short plastic zipper"
msgid_plural "short plastic zippers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cierre chico de plástico"
+msgstr[1] "cierres chicos de plástico"
+msgstr[2] "cierres chicos de plástico"
#. ~ Description for {'str': 'short plastic zipper'}
#: data/json/items/resources/fasteners.json
@@ -109968,9 +110276,9 @@ msgstr[2] "platino"
#: data/json/items/resources/metal.json
msgid "zinc"
msgid_plural "zinc"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zinc"
+msgstr[1] "zinc"
+msgstr[2] "zinc"
#. ~ Description for {'str_sp': 'zinc'}
#: data/json/items/resources/metal.json
@@ -110036,9 +110344,9 @@ msgstr ""
#: data/json/items/resources/metal.json
msgid "small metal sheet"
msgid_plural "small metal sheets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lámina pequeña de metal"
+msgstr[1] "láminas pequeñas de metal"
+msgstr[2] "láminas pequeñas de metal"
#. ~ Description for {'str': 'small metal sheet'}
#: data/json/items/resources/metal.json
@@ -110076,9 +110384,9 @@ msgstr "Es un pedazo pesado de acero, útil para fabricar algunas cosas."
#: data/json/items/resources/metal.json
msgid "door hinge"
msgid_plural "door hinges"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bisagra de puerta"
+msgstr[1] "bisagras de puerta"
+msgstr[2] "bisagras de puerta"
#. ~ Description for {'str': 'door hinge'}
#: data/json/items/resources/metal.json
@@ -110215,9 +110523,9 @@ msgstr ""
#: data/json/items/resources/misc.json
msgid "fuse"
msgid_plural "fuse"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mecha"
+msgstr[1] "mecha"
+msgstr[2] "mecha"
#. ~ Description for {'str_sp': 'fuse'}
#: data/json/items/resources/misc.json
@@ -110349,9 +110657,9 @@ msgstr ""
#: data/json/items/resources/tailoring.json
msgid "cotton scraps"
msgid_plural "cotton scraps"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pedazos de algodón"
+msgstr[1] "pedazos de algodón"
+msgstr[2] "pedazos de algodón"
#. ~ Description for {'str_sp': 'cotton scraps'}
#: data/json/items/resources/tailoring.json
@@ -110367,9 +110675,9 @@ msgstr ""
#: data/json/items/resources/tailoring.json
msgid "faux fur scraps"
msgid_plural "faux fur scraps"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pedazos de piel artificial"
+msgstr[1] "pedazos de piel artificial"
+msgstr[2] "pedazos de piel artificial"
#. ~ Description for {'str_sp': 'faux fur scraps'}
#: data/json/items/resources/tailoring.json
@@ -110383,9 +110691,9 @@ msgstr ""
#: data/json/items/resources/tailoring.json
msgid "felt scraps"
msgid_plural "felt scraps"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "trozos de fieltro"
+msgstr[1] "trozos de fieltro"
+msgstr[2] "trozos de fieltro"
#. ~ Description for {'str_sp': 'felt scraps'}
#: data/json/items/resources/tailoring.json
@@ -110401,9 +110709,9 @@ msgstr ""
#: data/json/items/resources/tailoring.json
msgid "fur scraps"
msgid_plural "fur scraps"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pedazos de piel"
+msgstr[1] "pedazos de piel"
+msgstr[2] "pedazos de piel"
#. ~ Description for {'str_sp': 'fur scraps'}
#: data/json/items/resources/tailoring.json
@@ -110417,9 +110725,9 @@ msgstr ""
#: data/json/items/resources/tailoring.json
msgid "Kevlar scraps"
msgid_plural "Kevlar scraps"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pedazos de Kevlar"
+msgstr[1] "pedazos de Kevlar"
+msgstr[2] "pedazos de Kevlar"
#. ~ Description for {'str_sp': 'Kevlar scraps'}
#: data/json/items/resources/tailoring.json
@@ -110437,9 +110745,9 @@ msgstr ""
#: data/json/items/resources/tailoring.json
msgid "leather scraps"
msgid_plural "leather scraps"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pedazos de cuero"
+msgstr[1] "pedazos de cuero"
+msgstr[2] "pedazos de cuero"
#. ~ Description for {'str_sp': 'leather scraps'}
#: data/json/items/resources/tailoring.json
@@ -110453,9 +110761,9 @@ msgstr ""
#: data/json/items/resources/tailoring.json
msgid "neoprene scraps"
msgid_plural "neoprene scraps"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pedazos de neopreno"
+msgstr[1] "pedazos de neopreno"
+msgstr[2] "pedazos de neopreno"
#. ~ Description for {'str_sp': 'neoprene scraps'}
#: data/json/items/resources/tailoring.json
@@ -110469,9 +110777,9 @@ msgstr ""
#: data/json/items/resources/tailoring.json
msgid "synthetic fabric scraps"
msgid_plural "synthetic fabric scraps"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pedazos de tela sintética"
+msgstr[1] "pedazos de tela sintética"
+msgstr[2] "pedazos de tela sintética"
#. ~ Description for {'str_sp': 'synthetic fabric scraps'}
#: data/json/items/resources/tailoring.json
@@ -110485,9 +110793,9 @@ msgstr ""
#: data/json/items/resources/tailoring.json
msgid "Nomex scraps"
msgid_plural "Nomex scraps"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "trozos de Nomex"
+msgstr[1] "trozos de Nomex"
+msgstr[2] "trozos de Nomex"
#. ~ Description for {'str_sp': 'Nomex scraps'}
#: data/json/items/resources/tailoring.json
@@ -110505,9 +110813,9 @@ msgstr ""
#: data/json/items/resources/tailoring.json
msgid "cotton sheet"
msgid_plural "cotton sheets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tela de algodón"
+msgstr[1] "telas de algodón"
+msgstr[2] "telas de algodón"
#. ~ Description for {'str': 'cotton sheet'}
#: data/json/items/resources/tailoring.json
@@ -110517,9 +110825,9 @@ msgstr "Es una tela de algodón, ideal para hacer ropa."
#: data/json/items/resources/tailoring.json
msgid "patchwork cotton clothing parts"
msgid_plural "patchwork cotton clothing parts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "retazos de ropa de algodón"
+msgstr[1] "retazos de ropa de algodón"
+msgstr[2] "retazos de ropa de algodón"
#. ~ Description for {'str_sp': 'patchwork cotton clothing parts'}
#: data/json/items/resources/tailoring.json
@@ -110535,9 +110843,9 @@ msgstr ""
#: data/json/items/resources/tailoring.json
msgid "faux fur sheet"
msgid_plural "faux fur sheets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tela de piel artificial"
+msgstr[1] "telas de piel artificial"
+msgstr[2] "telas de piel artificial"
#. ~ Description for {'str': 'faux fur sheet'}
#: data/json/items/resources/tailoring.json
@@ -110547,9 +110855,9 @@ msgstr "Es una tela colorida de piel artificial, ideal para hacer ropa."
#: data/json/items/resources/tailoring.json
msgid "patchwork faux fur clothing parts"
msgid_plural "patchwork faux fur clothing parts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "retazos de ropa de piel artificial"
+msgstr[1] "retazos de ropa de piel artificial"
+msgstr[2] "retazos de ropa de piel artificial"
#. ~ Description for {'str_sp': 'patchwork faux fur clothing parts'}
#: data/json/items/resources/tailoring.json
@@ -110565,9 +110873,9 @@ msgstr ""
#: data/json/items/resources/tailoring.json
msgid "felt sheet"
msgid_plural "felt sheets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tela de fieltro"
+msgstr[1] "telas de fieltro"
+msgstr[2] "telas de fieltro"
#. ~ Description for {'str': 'felt sheet'}
#: data/json/items/resources/tailoring.json
@@ -110595,9 +110903,9 @@ msgstr ""
#: data/json/items/resources/tailoring.json
msgid "Kevlar sheet"
msgid_plural "Kevlar sheets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tela de Kevlar"
+msgstr[1] "telas de Kevlar"
+msgstr[2] "telas de Kevlar"
#. ~ Description for {'str': 'Kevlar sheet'}
#: data/json/items/resources/tailoring.json
@@ -110611,9 +110919,9 @@ msgstr ""
#: data/json/items/resources/tailoring.json
msgid "neoprene sheet"
msgid_plural "neoprene sheets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tela de neopreno"
+msgstr[1] "telas de neopreno"
+msgstr[2] "telas de neopreno"
#. ~ Description for {'str': 'neoprene sheet'}
#: data/json/items/resources/tailoring.json
@@ -110646,9 +110954,9 @@ msgstr ""
#: data/json/items/resources/tailoring.json
msgid "Nomex sheet"
msgid_plural "Nomex sheets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tela de Nomex"
+msgstr[1] "telas de Nomex"
+msgstr[2] "telas de Nomex"
#. ~ Description for {'str': 'Nomex sheet'}
#: data/json/items/resources/tailoring.json
@@ -110661,9 +110969,9 @@ msgstr ""
#: data/json/items/resources/tailoring.json
msgid "patchwork Nomex clothing parts"
msgid_plural "patchwork Nomex clothing parts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "retazos de ropa de Nomex"
+msgstr[1] "retazos de ropa de Nomex"
+msgstr[2] "retazos de ropa de Nomex"
#. ~ Description for {'str_sp': 'patchwork Nomex clothing parts'}
#: data/json/items/resources/tailoring.json
@@ -110679,9 +110987,9 @@ msgstr ""
#: data/json/items/resources/tailoring.json
msgid "synthetic fabric sheet"
msgid_plural "synthetic fabric sheets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tela sintética"
+msgstr[1] "telas sintética"
+msgstr[2] "telas sintética"
#. ~ Description for {'str': 'synthetic fabric sheet'}
#: data/json/items/resources/tailoring.json
@@ -110691,9 +110999,9 @@ msgstr "Es una tela sintética, ideal para hacer ropa."
#: data/json/items/resources/tailoring.json
msgid "patchwork synthetic fabric clothing parts"
msgid_plural "patchwork synthetic fabric clothing parts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "retazos de ropa de tela sintética"
+msgstr[1] "retazos de ropa de tela sintética"
+msgstr[2] "retazos de ropa de tela sintética"
#. ~ Description for {'str_sp': 'patchwork synthetic fabric clothing parts'}
#: data/json/items/resources/tailoring.json
@@ -110709,9 +111017,9 @@ msgstr ""
#: data/json/items/resources/tailoring.json
msgid "Kevlar thread"
msgid_plural "Kevlar threads"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hilo de Kevlar"
+msgstr[1] "hilos de Kevlar"
+msgstr[2] "hilos de Kevlar"
#. ~ Description for {'str': 'Kevlar thread'}
#: data/json/items/resources/tailoring.json
@@ -110729,9 +111037,9 @@ msgstr ""
#: data/json/items/resources/tailoring.json
msgid "Nomex thread"
msgid_plural "Nomex threads"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hilo de Nomex"
+msgstr[1] "hilos de Nomex"
+msgstr[2] "hilos de Nomex"
#. ~ Description for {'str': 'Nomex thread'}
#: data/json/items/resources/tailoring.json
@@ -111285,9 +111593,9 @@ msgstr ""
#: data/json/items/tool/cooking.json
msgid "sealed jar of eggs"
msgid_plural "sealed jars of eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "frasco sellado con huevos"
+msgstr[1] "frascos sellados con huevos"
+msgstr[2] "frascos sellados con huevos"
#. ~ Use action menu_text for {'str': 'sealed jar of eggs', 'str_pl': 'sealed
#. jars of eggs'}.
@@ -111322,9 +111630,9 @@ msgstr ""
#: data/json/items/tool/cooking.json
msgid "sealed jar of pickles"
msgid_plural "sealed jars of pickles"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "frasco sellado con pickles"
+msgstr[1] "frascos sellados con pickles"
+msgstr[2] "frascos sellados con pickles"
#. ~ Description for {'str': 'sealed jar of pickles', 'str_pl': 'sealed jars
#. of pickles'}
@@ -111518,9 +111826,9 @@ msgstr ""
#: data/json/items/tool/cooking.json
msgid "fermenting pickle jar"
msgid_plural "fermenting pickle jars"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "frasco de pickles fermentando"
+msgstr[1] "frascos de pickles fermentando"
+msgstr[2] "frascos de pickles fermentando"
#. ~ Use action msg for {'str': 'fermenting pickle jar'}.
#. ~ Use action msg for {'str': 'fermenting sauerkraut jar'}.
@@ -111566,9 +111874,9 @@ msgstr ""
#: data/json/items/tool/cooking.json
msgid "pressure cooker"
msgid_plural "pressure cookers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "olla a presión"
+msgstr[1] "ollas a presión"
+msgstr[2] "ollas a presión"
#. ~ Description for {'str': 'pressure cooker'}
#: data/json/items/tool/cooking.json
@@ -111990,9 +112298,9 @@ msgstr ""
#: data/json/items/tool/electronics.json
msgid "e-ink tablet PC"
msgid_plural "e-ink tablet PCs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lector electrónico"
+msgstr[1] "lectores electrónicos"
+msgstr[2] "lectores electrónicos"
#. ~ Description for {'str': 'e-ink tablet PC'}
#: data/json/items/tool/electronics.json
@@ -113657,7 +113965,7 @@ msgstr "Enciendes el encendedor de un golpe."
#. ~ Use action need_charges_msg for {'str': 'refillable lighter'}.
#: data/json/items/tool/fire.json src/activity_actor.cpp src/explosion.cpp
-#: src/gates.cpp
+#: src/gates.cpp src/iuse.cpp
msgid "Nothing happens."
msgstr "No pasa nada."
@@ -115162,9 +115470,9 @@ msgstr ""
#: data/json/items/tool/metalworking.json
msgid "bronze anvil"
msgid_plural "bronze anvils"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "yunque de bronce"
+msgstr[1] "yunques de bronce"
+msgstr[2] "yunques de bronce"
#. ~ Description for {'str': 'bronze anvil'}
#: data/json/items/tool/metalworking.json
@@ -115350,9 +115658,9 @@ msgstr ""
#: data/json/items/tool/metalworking.json
msgid "chainmail sheet"
msgid_plural "chainmail sheets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "plancha de cota de malla"
+msgstr[1] "planchas de cota de malla"
+msgstr[2] "planchas de cota de malla"
#. ~ Description for {'str': 'chainmail sheet'}
#: data/json/items/tool/metalworking.json
@@ -115796,22 +116104,6 @@ msgid ""
"from uncertain sources like a river may be dirty."
msgstr ""
-#: data/json/items/tool/misc.json
-msgid "makeshift glaive"
-msgid_plural "makeshift glaives"
-msgstr[0] "guja improvisada"
-msgstr[1] "gujas improvisadas"
-msgstr[2] "gujas improvisadas"
-
-#. ~ Description for {'str': 'makeshift glaive'}
-#: data/json/items/tool/misc.json
-msgid ""
-"This is a large blade attached to a long stick. It could do a considerable "
-"amount of damage."
-msgstr ""
-"Es una gran cuchilla unida a un palo largo. Puede causar un daño "
-"considerable."
-
#: data/json/items/tool/misc.json
msgid "mind splicer kit"
msgid_plural "mind splicer kits"
@@ -116864,9 +117156,9 @@ msgstr ""
#: data/json/items/tool/science.json
msgid "basic laboratory analysis kit"
msgid_plural "basic laboratory analysis kits"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "equipo básico de análisis de laboratorio"
+msgstr[1] "equipos básicos de análisis de laboratorio"
+msgstr[2] "equipos básicos de análisis de laboratorio"
#. ~ Description for {'str': 'basic laboratory analysis kit'}
#: data/json/items/tool/science.json
@@ -116919,9 +117211,9 @@ msgstr ""
#: data/json/items/tool/science.json
msgid "pH meter"
msgid_plural "pH meters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "medidor de pH"
+msgstr[1] "medidores de pH"
+msgstr[2] "medidores de pH"
#. ~ Description for {'str': 'pH meter'}
#: data/json/items/tool/science.json
@@ -118437,9 +118729,9 @@ msgstr ""
#: data/json/items/tool/workshop.json
msgid "electric kiln"
msgid_plural "electric kilns"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "fosas de carbonización eléctricas"
+msgstr[1] "fosa de carbonización eléctrica"
+msgstr[2] "fosa de carbonización eléctrica"
#. ~ Description for {'str': 'electric kiln'}
#: data/json/items/tool/workshop.json
@@ -119381,9 +119673,9 @@ msgstr ""
#: data/json/items/vehicle/cargo.json
msgid "cargo lock set"
msgid_plural "cargo lock sets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bloqueo para puerta de carga"
+msgstr[1] "bloqueos para puerta de carga"
+msgstr[2] "bloqueos para puerta de carga"
#. ~ Description for {'str': 'cargo lock set'}
#: data/json/items/vehicle/cargo.json
@@ -119452,9 +119744,9 @@ msgstr ""
#: data/json/items/vehicle/cargo.json
msgid "livestock carrier"
msgid_plural "livestock carriers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "transportador de ganado"
+msgstr[1] "transportadores de ganado"
+msgstr[2] "transportadores de ganado"
#. ~ Description for {'str': 'livestock carrier'}
#: data/json/items/vehicle/cargo.json
@@ -119598,9 +119890,9 @@ msgstr ""
#: data/json/vehicleparts/vehicle_parts.json
msgid "electronics control unit"
msgid_plural "electronics control units"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "unidad electrónica de control"
+msgstr[1] "unidades electrónicas de control"
+msgstr[2] "unidades electrónicas de control"
#: data/json/items/vehicle/controls.json
#: data/json/vehicleparts/vehicle_parts.json
@@ -119657,30 +119949,30 @@ msgstr ""
#: data/json/items/vehicle/engine.json
msgid "internal combustion engine"
msgid_plural "internal combustion engines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "motor de combustión interna"
+msgstr[1] "motores de combustión interna"
+msgstr[2] "motores de combustión interna"
#: data/json/items/vehicle/engine.json
msgid "base diesel engine"
msgid_plural "base diesel engines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "motor diésel"
+msgstr[1] "motores diésel"
+msgstr[2] "motores diésel"
#: data/json/items/vehicle/engine.json
msgid "base gasoline engine"
msgid_plural "base gasoline engines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "motor a nafta"
+msgstr[1] "motores a nafta"
+msgstr[2] "motores a nafta"
#: data/json/items/vehicle/engine.json
msgid "base steam engine"
msgid_plural "base steam engines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "motor de vapor"
+msgstr[1] "motores de vapor"
+msgstr[2] "motores de vapor"
#: data/json/items/vehicle/engine.json
msgid "1-cylinder engine"
@@ -119697,9 +119989,9 @@ msgstr "Un motor de combustión de 4 tiempos, de un solo cilindro."
#: data/json/items/vehicle/engine.json
msgid "large 1-cylinder engine"
msgid_plural "large 1-cylinder engines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "motor grande de 1 cilindro"
+msgstr[1] "motores grandes de 1 cilindro"
+msgstr[2] "motores grandes de 1 cilindro"
#. ~ Description for {'str': 'large 1-cylinder engine'}
#: data/json/items/vehicle/engine.json
@@ -119812,9 +120104,9 @@ msgstr ""
#: data/json/items/vehicle/engine.json
msgid "V12 diesel engine"
msgid_plural "V12 diesel engines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "motor diésel V12"
+msgstr[1] "motores diésel V12"
+msgstr[2] "motores diésel V12"
#. ~ Description for {'str': 'V12 diesel engine'}
#: data/json/items/vehicle/engine.json
@@ -119828,9 +120120,9 @@ msgstr ""
#: data/json/items/vehicle/engine.json
msgid "makeshift steam engine"
msgid_plural "makeshift steam engines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "motor de vapor improvisado"
+msgstr[1] "motores de vapor improvisado"
+msgstr[2] "motores de vapor improvisado"
#. ~ Description for {'str': 'makeshift steam engine'}
#: data/json/items/vehicle/engine.json
@@ -119847,9 +120139,9 @@ msgstr ""
#: data/json/items/vehicle/engine.json
msgid "small steam engine"
msgid_plural "small steam engines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "motor chico de vapor"
+msgstr[1] "motores chico de vapor"
+msgstr[2] "motores chico de vapor"
#. ~ Description for {'str': 'small steam engine'}
#: data/json/items/vehicle/engine.json
@@ -119866,9 +120158,9 @@ msgstr ""
#: data/json/items/vehicle/engine.json
msgid "medium steam engine"
msgid_plural "medium steam engines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "motor mediano de vapor"
+msgstr[1] "motores mediano de vapor"
+msgstr[2] "motores mediano de vapor"
#. ~ Description for {'str': 'medium steam engine'}
#: data/json/items/vehicle/engine.json
@@ -119917,9 +120209,9 @@ msgstr ""
#: data/json/items/vehicle/engine.json
msgid "large engine block"
msgid_plural "large engine blocks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bloque grande de motor"
+msgstr[1] "bloques grandes de motor"
+msgstr[2] "bloques grandes de motor"
#. ~ Description for {'str': 'large engine block'}
#: data/json/items/vehicle/engine.json
@@ -119949,9 +120241,9 @@ msgstr ""
#: data/json/items/vehicle/engine.json
msgid "small engine block"
msgid_plural "small engine blocks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bloque chico de motor"
+msgstr[1] "bloques chicos de motor"
+msgstr[2] "bloques chicos de motor"
#. ~ Description for {'str': 'small engine block'}
#: data/json/items/vehicle/engine.json
@@ -119965,9 +120257,9 @@ msgstr ""
#: data/json/items/vehicle/engine.json
msgid "tiny engine block"
msgid_plural "tiny engine blocks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bloque pequeño de motor"
+msgstr[1] "bloques pequeños de motor"
+msgstr[2] "bloques pequeños de motor"
#. ~ Description for {'str': 'tiny engine block'}
#: data/json/items/vehicle/engine.json
@@ -119981,9 +120273,9 @@ msgstr ""
#: data/json/items/vehicle/engine.json
msgid "1350 hp gas turbine engine"
msgid_plural "1350 hp gas turbine engines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "motor de turbina de gas 1350 cv"
+msgstr[1] "motores de turbina de gas 1350 cv"
+msgstr[2] "motores de turbina de gas 1350 cv"
#. ~ Description for {'str': '1350 hp gas turbine engine'}
#: data/json/items/vehicle/engine.json
@@ -119996,9 +120288,9 @@ msgstr ""
#: data/json/items/vehicle/engine.json
msgid "1900 hp gas turbine engine"
msgid_plural "1900 hp gas turbine engines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "motor de turbina de gas 1900 cv"
+msgstr[1] "motores de turbina de gas 1900 cv"
+msgstr[2] "motores de turbina de gas 1900 cv"
#. ~ Description for {'str': '1900 hp gas turbine engine'}
#: data/json/items/vehicle/engine.json
@@ -120011,9 +120303,9 @@ msgstr ""
#: data/json/items/vehicle/engine.json
msgid "6000 hp gas turbine engine"
msgid_plural "6000 hp gas turbine engines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "motor de turbina de gas 6000 cv"
+msgstr[1] "motores de turbina de gas 6000 cv"
+msgstr[2] "motores de turbina de gas 6000 cv"
#. ~ Description for {'str': '6000 hp gas turbine engine'}
#: data/json/items/vehicle/engine.json
@@ -120059,9 +120351,9 @@ msgstr ""
#: data/json/vehicleparts/engineering.json
msgid "pallet lifter"
msgid_plural "pallet lifters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "zorra hidráulica"
+msgstr[1] "zorras hidráulicas"
+msgstr[2] "zorras hidráulicas"
#. ~ Description for {'str': 'pallet lifter'}
#: data/json/items/vehicle/engineering.json
@@ -120076,9 +120368,9 @@ msgstr ""
#: data/json/vehicleparts/engineering.json
msgid "rockwheel"
msgid_plural "rockwheels"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "disco de zanjadora"
+msgstr[1] "discos de zanjadora"
+msgstr[2] "discos de zanjadora"
#. ~ Description for {'str': 'rockwheel'}
#: data/json/items/vehicle/engineering.json
@@ -120089,9 +120381,9 @@ msgstr ""
#: data/json/items/vehicle/engineering.json
msgid "airjack"
msgid_plural "airjacks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "gato de aire"
+msgstr[1] "gatos de aire"
+msgstr[2] "gatos de aire"
#. ~ Description for {'str': 'airjack'}
#. ~ Description for {'str': 'air jack system'}
@@ -120108,9 +120400,9 @@ msgstr ""
#: data/json/vehicleparts/engineering.json
msgid "motorcycle kickstand"
msgid_plural "motorcycle kickstands"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pie para moto"
+msgstr[1] "pies para moto"
+msgstr[2] "pies para moto"
#. ~ Description for {'str': 'motorcycle kickstand'}
#: data/json/items/vehicle/engineering.json
@@ -120361,9 +120653,9 @@ msgstr ""
#: data/json/items/vehicle/lights.json
msgid "wide-angle car headlight"
msgid_plural "wide-angle car headlights"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "luz delantera amplia"
+msgstr[1] "luces delanteras amplias"
+msgstr[2] "luces delanteras amplias"
#. ~ Description for {'str': 'wide-angle car headlight'}
#: data/json/items/vehicle/lights.json
@@ -120391,9 +120683,9 @@ msgstr ""
#: data/json/items/vehicle/lights.json data/json/vehicleparts/lights.json
msgid "reinforced wide-angle headlight"
msgid_plural "reinforced wide-angle headlights"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "luz delantera amplia reforzada"
+msgstr[1] "luces delanteras amplias reforzadas"
+msgstr[2] "luces delanteras amplias reforzadas"
#. ~ Description for {'str': 'reinforced wide-angle headlight'}
#: data/json/items/vehicle/lights.json
@@ -120498,9 +120790,9 @@ msgstr "Los pedales con los piñones de una bicicleta."
#: data/json/vehicleparts/vehicle_parts.json
msgid "wind turbine"
msgid_plural "wind turbines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "turbina de viento"
+msgstr[1] "turbinas de viento"
+msgstr[2] "turbinas de viento"
#. ~ Description for {'str': 'wind turbine'}
#: data/json/items/vehicle/mills.json
@@ -120686,9 +120978,9 @@ msgstr ""
#: data/json/items/vehicle/noise.json
msgid "chime loudspeakers"
msgid_plural "chime loudspeakers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "carillón"
+msgstr[1] "carillones"
+msgstr[2] "carillones"
#. ~ Description for {'str_sp': 'chime loudspeakers'}
#: data/json/items/vehicle/noise.json
@@ -120969,9 +121261,9 @@ msgstr ""
#: data/json/items/vehicle/rigs.json
msgid "vehicle kiln"
msgid_plural "vehicle kilns"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "fosa de carbonización para vehículo"
+msgstr[1] "fosas de carbonización para vehículo"
+msgstr[2] "fosas de carbonización para vehículo"
#. ~ Description for {'str': 'vehicle kiln'}
#: data/json/items/vehicle/rigs.json
@@ -121213,9 +121505,9 @@ msgstr "Es una simple mesa de madera."
#: data/json/vehicleparts/vehicle_parts.json
msgid "turret mount"
msgid_plural "turret mounts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "montura para torreta"
+msgstr[1] "monturas para torreta"
+msgstr[2] "monturas para torreta"
#. ~ Description for {'str': 'turret mount'}
#: data/json/items/vehicle/turrets.json
@@ -125078,9 +125370,9 @@ msgstr ""
#: data/json/monsters/fungus.json data/mods/Limit Fungal Growth/modinfo.json
msgid "fungal child"
msgid_plural "fungal children"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "chico fúngico"
+msgstr[1] "chicos fúngicos"
+msgstr[2] "chicos fúngicos"
#. ~ Description for {'str': 'fungal child', 'str_pl': 'fungal children'}
#: data/json/monsters/fungus.json
@@ -128146,13 +128438,6 @@ msgstr ""
"pálido por su vida subterránea. Se mueve en manada por debajo del suelo y su"
" nombre es por su hábito de infestar las cloacas."
-#: data/json/monsters/slimes.json
-msgid "blob"
-msgid_plural "blobs"
-msgstr[0] "masa"
-msgstr[1] "masas"
-msgstr[2] "masas"
-
#. ~ Description for {'str': 'blob'}
#: data/json/monsters/slimes.json
msgid ""
@@ -128915,13 +129200,6 @@ msgid ""
"envelope of scar tissue."
msgstr ""
-#: data/json/monsters/zed-classic.json data/json/npcs/talk_tags.json
-msgid "zombie"
-msgid_plural "zombies"
-msgstr[0] "zombi"
-msgstr[1] "zombis"
-msgstr[2] "zombis"
-
#. ~ Description for {'str': 'zombie'}
#: data/json/monsters/zed-classic.json
msgid ""
@@ -140012,7 +140290,8 @@ msgid "I'll kill you if you don't."
msgstr "Te mataré si no lo haces."
#: data/json/npcs/TALK_COMMON_OTHER.json
-#: data/json/npcs/TALK_TRUE_FOODPERSON.json src/iuse.cpp
+#: data/json/npcs/TALK_TRUE_FOODPERSON.json
+#: data/mods/smart_house_remotes/main.lua src/iuse.cpp
msgid "Nevermind."
msgstr "Olvidate."
@@ -148264,10 +148543,6 @@ msgstr "monstruo"
msgid "demon"
msgstr "demonio"
-#: data/json/npcs/talk_tags.json
-msgid "horror"
-msgstr "horror"
-
#: data/json/npcs/talk_tags.json
msgid "indescribable beast"
msgstr "bestia indescifrable"
@@ -157773,9 +158048,9 @@ msgstr ""
#: data/json/npcs/refugee_center/surface_refugees/NPC_Dana_Nunez.json
msgid "Dana's sourdough bread"
msgid_plural "Dana's sourdough breads"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pan de masa madre de Dana"
+msgstr[1] "panes de masa madre de Dana"
+msgstr[2] "panes de masa madre de Dana"
#. ~ Description for {'str': "Dana's sourdough bread"}
#: data/json/npcs/refugee_center/surface_refugees/NPC_Dana_Nunez.json
@@ -162562,6 +162837,16 @@ msgid ""
"coming no further. Go away."
msgstr ""
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"I was sent here by the traders at the refugee center. They told me to "
+"deliver this hard drive to you."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "The traders also mentioned you were looking for help."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "Wait! What??"
msgstr ""
@@ -162598,6 +162883,20 @@ msgstr ""
msgid "Alright, I'm leaving."
msgstr ""
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"Understood. Please drop the drive on the box embedded beneath the intercom."
+" You are welcome to leave afterwards."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "[Do as the Intercom Says]"
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "Didn't bring the hard drive now, let me return with it."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "No. Now leave."
msgstr ""
@@ -164771,9 +165070,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "leaf spring"
msgid_plural "leaf springs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "elástico"
+msgstr[1] "elásticos"
+msgstr[2] "elásticos"
#. ~ Description for {'str': 'leaf spring'}
#: data/json/obsoletion/items.json
@@ -164847,9 +165146,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "rapid blowback"
msgid_plural "rapid blowbacks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "blowback rápido"
+msgstr[1] "blowbacks rápidos"
+msgstr[2] "blowbacks rápidos"
#: data/json/obsoletion/items.json
msgid ""
@@ -165114,9 +165413,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "homemade laser pistol"
msgid_plural "homemade laser pistols"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pistola láser casera"
+msgstr[1] "pistolas láser caseras"
+msgstr[2] "pistolas láser caseras"
#: data/json/obsoletion/items.json
msgid ""
@@ -165305,9 +165604,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "spurge"
msgid_plural "spurges"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "euforbio"
+msgstr[1] "euforbios"
+msgstr[2] "euforbios"
#. ~ Description for {'str': 'spurge'}
#: data/json/obsoletion/items.json
@@ -165317,9 +165616,9 @@ msgstr "Es un tallo de euforbio con algunos pétalos."
#: data/json/obsoletion/items.json
msgid "spurge bud"
msgid_plural "spurge buds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "capullo de euforbio"
+msgstr[1] "capullos de euforbio"
+msgstr[2] "capullos de euforbio"
#. ~ Description for {'str': 'spurge bud'}
#: data/json/obsoletion/items.json
@@ -165338,9 +165637,9 @@ msgstr "Es un tallo de rudbeckia con algunos pétalos."
#: data/json/obsoletion/items.json
msgid "black eyed susan bud"
msgid_plural "black eyed susan buds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "capullo de rudbeckia"
+msgstr[1] "capullos de rudbeckia"
+msgstr[2] "capullos de rudbeckia"
#. ~ Description for {'str': 'black eyed susan bud'}
#: data/json/obsoletion/items.json
@@ -165359,9 +165658,9 @@ msgstr "Es un tallo de lirio con algunos pétalos."
#: data/json/obsoletion/items.json
msgid "lily bud"
msgid_plural "lily buds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "capullo de lirio"
+msgstr[1] "capullos de lirio"
+msgstr[2] "capullos de lirio"
#. ~ Description for {'str': 'lily bud'}
#: data/json/obsoletion/items.json
@@ -165526,9 +165825,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "40x46mm"
msgid_plural "40x46mms"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "40x46mm"
+msgstr[1] "40x46mm"
+msgstr[2] "40x46mm"
#. ~ Description for {'str': '40x46mm'}
#: data/json/obsoletion/items.json
@@ -165558,9 +165857,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "40mm smoke cover"
msgid_plural "40mm smoke covers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "40mm fumígena"
+msgstr[1] "40mm fumígenas"
+msgstr[2] "40mm fumígenas"
#. ~ Description for {'str': '40mm smoke cover'}
#: data/json/obsoletion/items.json
@@ -165570,9 +165869,9 @@ msgstr "Es una granada de 40mm diseñada para crear una cortina de humo."
#: data/json/obsoletion/items.json
msgid "40mm slug"
msgid_plural "40mm slugs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "posta 40mm"
+msgstr[1] "postas 40mm"
+msgstr[2] "postas 40mm"
#. ~ Description for {'str': '40mm slug'}
#: data/json/obsoletion/items.json
@@ -165587,9 +165886,9 @@ msgstr ""
#: data/mods/No_Hope/Items/books.json
msgid "chicken walker schematics"
msgid_plural "chicken walker schematics"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "esquema de mecha-gallina"
+msgstr[1] "esquemas de mecha-gallina"
+msgstr[2] "esquemas de mecha-gallina"
#. ~ Description for {'str_sp': 'chicken walker schematics'}
#: data/json/obsoletion/items.json data/mods/Aftershock/items/books.json
@@ -165692,9 +165991,9 @@ msgstr ""
#: data/mods/No_Hope/Items/tools.json
msgid "inactive tank drone"
msgid_plural "inactive tank drones"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "dron tanque inactivo"
+msgstr[1] "drones tanques inactivos"
+msgstr[2] "drones tanques inactivos"
#. ~ Use action friendly_msg for {'str': 'inactive tank drone'}.
#. ~ Use action friendly_msg for inactive tank drone.
@@ -165734,9 +166033,9 @@ msgstr ""
#: data/mods/No_Hope/Items/generic.json
msgid "broken chickenbot"
msgid_plural "broken chickenbots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "gallinabot rota"
+msgstr[1] "gallinabots rotas"
+msgstr[2] "gallinabots rotas"
#. ~ Use action friendly_msg for {'str': 'broken chickenbot'}.
#. ~ Use action friendly_msg for {'str': 'inactive chicken walker'}.
@@ -165779,9 +166078,9 @@ msgstr ""
#: data/mods/No_Hope/Items/tools.json
msgid "inactive tripod"
msgid_plural "inactive tripods"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "trípode inactivo"
+msgstr[1] "trípodes inactivos"
+msgstr[2] "trípodes inactivos"
#. ~ Use action friendly_msg for {'str': 'inactive tripod'}.
#. ~ Use action friendly_msg for inactive tripod.
@@ -165860,9 +166159,9 @@ msgstr ""
#: data/mods/No_Hope/Items/generic.json
msgid "tripod chassis"
msgid_plural "tripod chassis"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "chasis de trípode"
+msgstr[1] "chasis de trípode"
+msgstr[2] "chasis de trípode"
#. ~ Description for {'str_sp': 'tripod chassis'}
#: data/json/obsoletion/items.json data/mods/Aftershock/items/robotparts.json
@@ -165878,9 +166177,9 @@ msgstr ""
#: data/mods/No_Hope/Items/generic.json
msgid "chicken walker chassis"
msgid_plural "chicken walker chassis"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "chasis de mecha-gallina"
+msgstr[1] "chasis de mecha-gallina"
+msgstr[2] "chasis de mecha-gallina"
#. ~ Description for {'str_sp': 'chicken walker chassis'}
#: data/json/obsoletion/items.json data/mods/Aftershock/items/robotparts.json
@@ -165896,9 +166195,9 @@ msgstr ""
#: data/mods/No_Hope/Items/generic.json
msgid "Beagle chassis"
msgid_plural "Beagle chassis"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "chasis de Beagle"
+msgstr[1] "chasis de Beagle"
+msgstr[2] "chasis de Beagle"
#. ~ Description for {'str_sp': 'Beagle chassis'}
#: data/json/obsoletion/items.json data/mods/Aftershock/items/robotparts.json
@@ -165930,9 +166229,9 @@ msgstr ""
#: data/mods/No_Hope/Items/generic.json
msgid "set of spidery legs"
msgid_plural "sets of spidery legs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "grupo de piernas arácnidas"
+msgstr[1] "grupos de piernas arácnidas"
+msgstr[2] "grupos de piernas arácnidas"
#. ~ Description for {'str': 'set of spidery legs', 'str_pl': 'sets of spidery
#. legs'}
@@ -166466,9 +166765,9 @@ msgstr ""
#: data/json/obsoletion/items.json data/mods/No_Hope/Items/gunmods.json
msgid "LW barrel extension"
msgid_plural "LW barrel extensions"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "extensor de cañón LW"
+msgstr[1] "extensores de cañón LW"
+msgstr[2] "extensores de cañón LW"
#: data/json/obsoletion/items.json data/mods/No_Hope/Items/gunmods.json
msgid ""
@@ -166481,9 +166780,9 @@ msgstr ""
#: data/json/obsoletion/items.json data/mods/No_Hope/Items/gunmods.json
msgid "LW heavy duty barrel"
msgid_plural "LW heavy duty barrels"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cañón reforzado LW"
+msgstr[1] "cañones reforzados LW"
+msgstr[2] "cañones reforzados LW"
#: data/json/obsoletion/items.json
msgid ""
@@ -166612,9 +166911,9 @@ msgstr ""
#: data/json/obsoletion/items.json data/mods/Aftershock/items/armor.json
msgid "quantum solar backpack (unfolded)"
msgid_plural "quantum solar backpacks (unfolded)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mochila solar de quántum (desplegada)"
+msgstr[1] "mochilas solares de quántum (desplegadas)"
+msgstr[2] "mochilas solares de quántum (desplegadas)"
#. ~ Description for {'str': 'quantum solar backpack (unfolded)', 'str_pl':
#. 'quantum solar backpacks (unfolded)'}
@@ -166716,9 +167015,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "238-NK: Practicality Enhancement"
msgid_plural "copies of 238-NK: Practicality Enhancement"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "238-NK: Mejoría Práctica"
+msgstr[1] "copias de 238-NK: Mejoría Práctica"
+msgstr[2] "copias de 238-NK: Mejoría Práctica"
#. ~ Description for {'str': '238-NK: Practicality Enhancement', 'str_pl':
#. 'copies of 238-NK: Practicality Enhancement'}
@@ -166755,9 +167054,9 @@ msgstr ""
#: data/json/obsoletion/items.json data/mods/No_Hope/Ammo/ammo.json
msgid "scrap shotcanister"
msgid_plural "scrap shotcanisters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bote de metralla con chatarra"
+msgstr[1] "botes de metralla con chatarra"
+msgstr[2] "botes de metralla con chatarra"
#. ~ Description for {'str': 'scrap shotcanister'}
#: data/json/obsoletion/items.json data/mods/No_Hope/Ammo/ammo.json
@@ -166771,9 +167070,9 @@ msgstr ""
#: data/json/obsoletion/items.json data/mods/No_Hope/Ammo/ammo.json
msgid "pebble shotcanister"
msgid_plural "pebble shotcanisters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bote de metralla con piedritas"
+msgstr[1] "botes de metralla con piedritas"
+msgstr[2] "botes de metralla con piedritas"
#. ~ Description for {'str': 'pebble shotcanister'}
#: data/json/obsoletion/items.json data/mods/No_Hope/Ammo/ammo.json
@@ -166789,9 +167088,9 @@ msgstr ""
#: data/json/obsoletion/items.json data/mods/No_Hope/Ammo/ammo.json
msgid "flechette shotcanister"
msgid_plural "flechette shotcanisters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bote de metralla con dardos perforantes"
+msgstr[1] "botes de metralla con dardos perforantes"
+msgstr[2] "botes de metralla con dardos perforantes"
#. ~ Description for {'str': 'flechette shotcanister'}
#: data/json/obsoletion/items.json data/mods/No_Hope/Ammo/ammo.json
@@ -166806,9 +167105,9 @@ msgstr ""
#: data/json/obsoletion/items.json data/mods/No_Hope/Ammo/ammo.json
msgid "bearing shotcanister"
msgid_plural "bearing shotcanisters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bote de metralla con rulemanes"
+msgstr[1] "botes de metralla con rulemanes"
+msgstr[2] "botes de metralla con rulemanes"
#. ~ Description for {'str': 'bearing shotcanister'}
#: data/json/obsoletion/items.json data/mods/No_Hope/Ammo/ammo.json
@@ -167511,9 +167810,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "score card"
msgid_plural "score cards"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tarjeta de resultado"
+msgstr[1] "tarjetas de resultado"
+msgstr[2] "tarjetas de resultado"
#. ~ Description for {'str': 'score card'}
#: data/json/obsoletion/items.json
@@ -167537,9 +167836,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "empty ballistic vest"
msgid_plural "empty ballistic vests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "chaleco de balística vacío"
+msgstr[1] "chalecos de balística vacíos"
+msgstr[2] "chalecos de balística vacíos"
#. ~ Description for {'str': 'empty ballistic vest'}
#: data/json/obsoletion/items.json
@@ -167554,9 +167853,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "ESAPI ballistic vest"
msgid_plural "ESAPI ballistic vests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "chaleco de balística ESAPI"
+msgstr[1] "chalecos de balística ESAPI"
+msgstr[2] "chalecos de balística ESAPI"
#. ~ Description for {'str': 'ESAPI ballistic vest'}
#: data/json/obsoletion/items.json
@@ -167691,23 +167990,23 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "broken M249 autonomous CROWS II"
msgid_plural "broken M249 autonomous CROWS II turrets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "torreta M249 autónoma CROWS II rota"
+msgstr[1] "torretas M249 autónomas CROWS II rotas"
+msgstr[2] "torretas M249 autónomas CROWS II rotas"
#: data/json/obsoletion/items.json
msgid "broken M240 autonomous CROWS II"
msgid_plural "broken M240 autonomous CROWS II turrets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "torreta M240 autónoma CROWS II rota"
+msgstr[1] "torretas M240 autónomas CROWS II rotas"
+msgstr[2] "torretas M240 autónomas CROWS II rotas"
#: data/json/obsoletion/items.json
msgid "broken M2 autonomous CROWS II"
msgid_plural "broken M2 autonomous CROWS II turrets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "torreta M2 autónoma CROWS II rota"
+msgstr[1] "torretas M2 autónomas CROWS II rotas"
+msgstr[2] "torretas M2 autónomas CROWS II rotas"
#: data/json/obsoletion/items.json
#: data/mods/Generic_Guns/robots/inactive_bots.json
@@ -167732,9 +168031,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid ".22 CB"
msgid_plural ".22 CBs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".22 CB"
+msgstr[1] ".22 CB"
+msgstr[2] ".22 CB"
#. ~ Description for {'str': '.22 CB'}
#: data/json/obsoletion/items.json
@@ -167837,9 +168136,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "rubber sole"
msgid_plural "rubber soles"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "suela de goma"
+msgstr[1] "suelas de goma"
+msgstr[2] "suelas de goma"
#. ~ Description for {'str': 'rubber sole'}
#: data/json/obsoletion/items.json
@@ -167851,16 +168150,16 @@ msgstr "Es una suela hecha de goma, comúnmente usado en botas."
#: data/json/obsoletion/items.json
msgid "tÖttchen"
msgid_plural "tÖttchens"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tÖttchen"
+msgstr[1] "tÖttchen"
+msgstr[2] "tÖttchen"
#: data/json/obsoletion/items.json
msgid "glycerol"
msgid_plural "glycerol"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "glicerol"
+msgstr[1] "glicerol"
+msgstr[2] "glicerol"
#. ~ Description for {'str_sp': 'glycerol'}
#: data/json/obsoletion/items.json
@@ -167889,9 +168188,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "acrylamide"
msgid_plural "acrylamide"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "acrilamida"
+msgstr[1] "acrilamida"
+msgstr[2] "acrilamida"
#. ~ Description for {'str_sp': 'acrylamide'}
#: data/json/obsoletion/items.json
@@ -167905,9 +168204,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "butchery refuse"
msgid_plural "butchery refuse"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "desechos"
+msgstr[1] "desechos"
+msgstr[2] "desechos"
#. ~ Description for {'str_sp': 'butchery refuse'}
#: data/json/obsoletion/items.json
@@ -167925,9 +168224,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "microwave generator"
msgid_plural "microwave generators"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "generador de microondas"
+msgstr[1] "generadores de microondas"
+msgstr[2] "generadores de microondas"
#. ~ Description for {'str': 'microwave generator'}
#: data/json/obsoletion/items.json
@@ -168080,9 +168379,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "curdling milk"
msgid_plural "curdling milks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "leche cuajando"
+msgstr[1] "leches cuajando"
+msgstr[2] "leches cuajando"
#. ~ Description for curdling milk
#: data/json/obsoletion/items.json
@@ -168094,9 +168393,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "curdled milk"
msgid_plural "curdled milks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "leche cuajada"
+msgstr[1] "leche cuajada"
+msgstr[2] "leche cuajada"
#. ~ Description for curdled milk
#: data/json/obsoletion/items.json
@@ -168108,9 +168407,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "buttermilk"
msgid_plural "buttermilk"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "suero de manteca"
+msgstr[1] "suero de manteca"
+msgstr[2] "suero de manteca"
#. ~ Description for {'str_sp': 'buttermilk'}
#: data/json/obsoletion/items.json
@@ -168124,9 +168423,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "heavy cream"
msgid_plural "heavy cream"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "crema de leche"
+msgstr[1] "crema de leche"
+msgstr[2] "crema de leche"
#. ~ Description for {'str_sp': 'heavy cream'}
#: data/json/obsoletion/items.json
@@ -168178,9 +168477,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "5x50mm flechette, reloaded"
msgid_plural "5x50mm flechette, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "5x50mm dardos perforantes, recargada"
+msgstr[1] "5x50mm dardos perforantes, recargadas"
+msgstr[2] "5x50mm dardos perforantes, recargadas"
#. ~ Description for {'str': '5x50mm flechette, reloaded'}
#: data/json/obsoletion/items.json
@@ -168196,37 +168495,37 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "9x19mm JHP, reloaded"
msgid_plural "9x19mm JHP, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "9x19mm JHP, recargada"
+msgstr[1] "9x19mm JHP, recargadas"
+msgstr[2] "9x19mm JHP, recargadas"
#: data/json/obsoletion/items.json
msgid "9x19mm FMJ, reloaded"
msgid_plural "9x19mm FMJ, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "9x19mm FMJ, recargada"
+msgstr[1] "9x19mm FMJ, recargadas"
+msgstr[2] "9x19mm FMJ, recargadas"
#: data/json/obsoletion/items.json
msgid "9x19mm +P, reloaded"
msgid_plural "9x19mm +P, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "9x19mm +P, recargada"
+msgstr[1] "9x19mm +P, recargadas"
+msgstr[2] "9x19mm +P, recargadas"
#: data/json/obsoletion/items.json
msgid "9x19mm +P+, reloaded"
msgid_plural "9x19mm +P+, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "9x19mm +P+, recargada"
+msgstr[1] "9x19mm +P+, recargadas"
+msgstr[2] "9x19mm +P+, recargadas"
#: data/json/obsoletion/items.json
msgid "9x18mm, reloaded"
msgid_plural "9x18mm, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "9x18mm, recargada"
+msgstr[1] "9x18mm, recargadas"
+msgstr[2] "9x18mm, recargadas"
#. ~ Description for {'str': '9x18mm, reloaded'}
#: data/json/obsoletion/items.json
@@ -168242,9 +168541,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "9x18mm +P+, reloaded"
msgid_plural "9x18mm +P+, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "9x18mm +P+, recargada"
+msgstr[1] "9x18mm +P+, recargadas"
+msgstr[2] "9x18mm +P+, recargadas"
#. ~ Description for {'str': '9x18mm +P+, reloaded'}
#: data/json/obsoletion/items.json
@@ -168260,9 +168559,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "9x18mm FMJ, reloaded"
msgid_plural "9x18mm FMJ, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "9x18mm FMJ, recargada"
+msgstr[1] "9x18mm FMJ, recargadas"
+msgstr[2] "9x18mm FMJ, recargadas"
#. ~ Description for {'str': '9x18mm FMJ, reloaded'}
#: data/json/obsoletion/items.json
@@ -168279,16 +168578,16 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "10mm Auto FMJ, reloaded"
msgid_plural "10mm Auto FMJ, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "10mm Auto FMJ, recargada"
+msgstr[1] "10mm Auto FMJ, recargada"
+msgstr[2] "10mm Auto FMJ, recargada"
#: data/json/obsoletion/items.json
msgid ".22 LR, reloaded"
msgid_plural ".22 LR, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".22 LR, recargada"
+msgstr[1] ".22 LR, recargadas"
+msgstr[2] ".22 LR, recargadas"
#: data/json/obsoletion/items.json
msgid ".22 CPHP, reloaded"
@@ -168300,107 +168599,107 @@ msgstr[2] ""
#: data/json/obsoletion/items.json
msgid ".32 ACP, reloaded"
msgid_plural ".32 ACP, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".32 ACP, recargada"
+msgstr[1] ".32 ACP, recargadas"
+msgstr[2] ".32 ACP, recargadas"
#: data/json/obsoletion/items.json
msgid ".38 FMJ, reloaded"
msgid_plural ".38 FMJ, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".38 FMJ, recargada"
+msgstr[1] ".38 FMJ, recargadas"
+msgstr[2] ".38 FMJ, recargadas"
#: data/json/obsoletion/items.json
msgid ".38 Special, reloaded"
msgid_plural ".38 Special, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".38 Special, recargada"
+msgstr[1] ".38 Special, recargadas"
+msgstr[2] ".38 Special, recargadas"
#: data/json/obsoletion/items.json
msgid ".38 Super FMJ, reloaded"
msgid_plural ".38 Super FMJ, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".38 Super FMJ, recargada"
+msgstr[1] ".38 Super FMJ, recargadas"
+msgstr[2] ".38 Super FMJ, recargadas"
#: data/json/obsoletion/items.json
msgid ".38 Super, reloaded"
msgid_plural ".38 Super, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".38 Super, recargada"
+msgstr[1] ".38 Super, recargadas"
+msgstr[2] ".38 Super, recargadas"
#: data/json/obsoletion/items.json
msgid ".40 S&W FMJ, reloaded"
msgid_plural ".40 S&W FMJ, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".40 S&W FMJ, recargada"
+msgstr[1] ".40 S&W FMJ, recargadas"
+msgstr[2] ".40 S&W FMJ, recargadas"
#: data/json/obsoletion/items.json
msgid ".40 S&W JHP, reloaded"
msgid_plural ".40 S&W JHP, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".40 S&W JHP, recargada"
+msgstr[1] ".40 S&W JHP, recargadas"
+msgstr[2] ".40 S&W JHP, recargadas"
#: data/json/obsoletion/items.json
msgid ".44 Magnum FMJ, reloaded"
msgid_plural ".44 Magnum FMJ, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".44 Magnum FMJ, recargada"
+msgstr[1] ".44 Magnum FMJ, recargadas"
+msgstr[2] ".44 Magnum FMJ, recargadas"
#: data/json/obsoletion/items.json
msgid ".44 Magnum, reloaded"
msgid_plural ".44 Magnum, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".44 Magnum, recargada"
+msgstr[1] ".44 Magnum, recargadas"
+msgstr[2] ".44 Magnum, recargadas"
#: data/json/obsoletion/items.json
msgid ".45 FMJ, reloaded"
msgid_plural ".45 FMJ, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".45 FMJ, recargada"
+msgstr[1] ".45 FMJ, recargadas"
+msgstr[2] ".45 FMJ, recargadas"
#: data/json/obsoletion/items.json
msgid ".45 ACP JHP, reloaded"
msgid_plural ".45 ACP JHP, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".45 ACP JHP, recargada"
+msgstr[1] ".45 ACP JHP, recargadas"
+msgstr[2] ".45 ACP JHP, recargadas"
#: data/json/obsoletion/items.json
msgid ".45 ACP +P, reloaded"
msgid_plural ".45 ACP +P, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".45 ACP +P, recargada"
+msgstr[1] ".45 ACP +P, recargadas"
+msgstr[2] ".45 ACP +P, recargadas"
#: data/json/obsoletion/items.json
msgid ".45 Colt JHP, reloaded"
msgid_plural ".45 Colt JHP, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".45 Colt JHP, recargada"
+msgstr[1] ".45 Colt JHP, recargadas"
+msgstr[2] ".45 Colt JHP, recargadas"
#: data/json/obsoletion/items.json
msgid "4.6x30mm, reloaded"
msgid_plural "4.6x30mm, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "4.6x30mm, recargada"
+msgstr[1] "4.6x30mm, recargadas"
+msgstr[2] "4.6x30mm, recargadas"
#: data/json/obsoletion/items.json
msgid ".50 BMG tracer, reloaded"
msgid_plural ".50 BMG tracer, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".50 BMG trazadora, recargada"
+msgstr[1] ".50 BMG trazadoras, recargadas"
+msgstr[2] ".50 BMG trazadoras, recargadas"
#. ~ Description for {'str': '.50 BMG tracer, reloaded'}
#: data/json/obsoletion/items.json
@@ -168416,9 +168715,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid ".50 BMG Match, reloaded"
msgid_plural ".50 BMG Match, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".50 BMG Match, recargada"
+msgstr[1] ".50 BMG Match, recargadas"
+msgstr[2] ".50 BMG Match, recargadas"
#. ~ Description for {'str': '.50 BMG Match, reloaded'}
#: data/json/obsoletion/items.json
@@ -168438,9 +168737,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid ".50 BMG AP, reloaded"
msgid_plural ".50 BMG AP, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".50 BMG AP, recargada"
+msgstr[1] ".50 BMG AP, recargadas"
+msgstr[2] ".50 BMG AP, recargadas"
#. ~ Description for {'str': '.50 BMG AP, reloaded'}
#: data/json/obsoletion/items.json
@@ -168455,9 +168754,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "5.7x28mm, reloaded"
msgid_plural "5.7x28mm, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "5.7x28mm, recargada"
+msgstr[1] "5.7x28mm, recargadas"
+msgstr[2] "5.7x28mm, recargadas"
#: data/json/obsoletion/items.json
msgid "5.56x45mm '.223 Remington', reloaded"
@@ -168483,16 +168782,16 @@ msgstr[2] ""
#: data/json/obsoletion/items.json
msgid ".270 Winchester JSP, reloaded"
msgid_plural ".270 Winchester JSP, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".270 Winchester JSP, recargada"
+msgstr[1] ".270 Winchester JSP, recargadas"
+msgstr[2] ".270 Winchester JSP, recargadas"
#: data/json/obsoletion/items.json
msgid ".300 Winchester Magnum, reloaded"
msgid_plural ".300 Winchester Magnum, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".300 Winchester Magnum, recargada"
+msgstr[1] ".300 Winchester Magnum, recargadas"
+msgstr[2] ".300 Winchester Magnum, recargadas"
#. ~ Description for {'str': '.300 Winchester Magnum, reloaded'}
#: data/json/obsoletion/items.json
@@ -168508,9 +168807,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid ".300 AAC Blackout, reloaded"
msgid_plural ".300 AAC Blackout, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".300 AAC Blackout, recargada"
+msgstr[1] ".300 AAC Blackout, recargadas"
+msgstr[2] ".300 AAC Blackout, recargadas"
#. ~ Description for {'str': '.300 AAC Blackout, reloaded'}
#: data/json/obsoletion/items.json
@@ -168537,86 +168836,86 @@ msgstr[2] ""
#: data/json/obsoletion/items.json
msgid "7.62x51mm, reloaded"
msgid_plural "7.62x51mm, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "7.62x51mm, recargada"
+msgstr[1] "7.62x51mm, recargadas"
+msgstr[2] "7.62x51mm, recargadas"
#: data/json/obsoletion/items.json
msgid "7.62x51mm incendiary, reloaded"
msgid_plural "7.62x51mm incendiary, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "7.62x51mm incendiaria, recargada"
+msgstr[1] "7.62x51mm incendiarias, recargadas"
+msgstr[2] "7.62x51mm incendiarias, recargadas"
#: data/json/obsoletion/items.json
msgid ".357 Magnum FMJ, reloaded"
msgid_plural ".357 Magnum FMJ, reloaded"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".357 Magnum FMJ, recargada"
+msgstr[1] ".357 Magnum FMJ, recargada"
+msgstr[2] ".357 Magnum FMJ, recargada"
#: data/json/obsoletion/items.json
msgid ".357 Magnum JHP, reloaded"
msgid_plural ".357 Magnum JHP, reloaded"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".357 Magnum JHP, recargada"
+msgstr[1] ".357 Magnum JHP, recargada"
+msgstr[2] ".357 Magnum JHP, recargada"
#: data/json/obsoletion/items.json
msgid ".357 SIG FMJ, reloaded"
msgid_plural ".357 SIG FMJ, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".357 SIG FMJ, recargada"
+msgstr[1] ".357 SIG FMJ, recargadas"
+msgstr[2] ".357 SIG FMJ, recargadas"
#: data/json/obsoletion/items.json
msgid ".357 SIG JHP, reloaded"
msgid_plural ".357 SIG JHP, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".357 SIG JHP, recargada"
+msgstr[1] ".357 SIG JHP, recargadas"
+msgstr[2] ".357 SIG JHP, recargadas"
#: data/json/obsoletion/items.json
msgid ".380 ACP FMJ, reloaded"
msgid_plural ".380 ACP FMJ, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".380 ACP FMJ, recargada"
+msgstr[1] ".380 ACP FMJ, recargadas"
+msgstr[2] ".380 ACP FMJ, recargadas"
#: data/json/obsoletion/items.json
msgid ".380 ACP JHP, reloaded"
msgid_plural ".380 ACP JHP, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".380 ACP JHP, recargada"
+msgstr[1] ".380 ACP JHP, recargadas"
+msgstr[2] ".380 ACP JHP, recargadas"
#: data/json/obsoletion/items.json
msgid ".380 ACP +P, reloaded"
msgid_plural ".380 ACP +P, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".380 ACP +P, recargada"
+msgstr[1] ".380 ACP +P, recargadas"
+msgstr[2] ".380 ACP +P, recargadas"
#: data/json/obsoletion/items.json
msgid ".410 000 shot, reloaded"
msgid_plural ".410 000 shot, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho .410 000, recargado"
+msgstr[1] "cartuchos .410 000, recargados"
+msgstr[2] "cartuchos .410 000, recargados"
#: data/json/obsoletion/items.json
msgid ".454 Casull, reloaded"
msgid_plural ".454 Casull, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".454 Casull, recargada"
+msgstr[1] ".454 Casull, recargadas"
+msgstr[2] ".454 Casull, recargadas"
#: data/json/obsoletion/items.json
msgid ".460 Rowland FMJ, reloaded"
msgid_plural ".460 Rowland FMJ, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".460 Rowland FMJ, recargada"
+msgstr[1] ".460 Rowland FMJ, recargadas"
+msgstr[2] ".460 Rowland FMJ, recargadas"
#. ~ Description for {'str': '.460 Rowland FMJ, reloaded'}
#: data/json/obsoletion/items.json
@@ -168630,23 +168929,23 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid ".460 Rowland, reloaded"
msgid_plural ".460 Rowland, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".460 Rowland, recargada"
+msgstr[1] ".460 Rowland, recargadas"
+msgstr[2] ".460 Rowland, recargadas"
#: data/json/obsoletion/items.json
msgid ".500 S&W Magnum, reloaded"
msgid_plural ".500 S&W Magnum, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".500 S&W Magnum, recargada"
+msgstr[1] ".500 S&W Magnum, recargadas"
+msgstr[2] ".500 S&W Magnum, recargadas"
#: data/json/obsoletion/items.json
msgid "5.45x39mm, reloaded"
msgid_plural "5.45x39mm, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "5.45x39mm, recargada"
+msgstr[1] "5.45x39mm, recargadas"
+msgstr[2] "5.45x39mm, recargadas"
#. ~ Description for {'str': '5.45x39mm, reloaded'}
#: data/json/obsoletion/items.json
@@ -168662,9 +168961,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "5.45x39mm AP, reloaded"
msgid_plural "5.45x39mm AP, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "5.45x39mm AP, recargada"
+msgstr[1] "5.45x39mm AP, recargadas"
+msgstr[2] "5.45x39mm AP, recargadas"
#. ~ Description for {'str': '5.45x39mm AP, reloaded'}
#: data/json/obsoletion/items.json
@@ -168678,16 +168977,16 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid ".700 NX, reloaded"
msgid_plural ".700 NX, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".700 NX, recargada"
+msgstr[1] ".700 NX, recargadas"
+msgstr[2] ".700 NX, recargadas"
#: data/json/obsoletion/items.json
msgid "7.62x39mm M43, reloaded"
msgid_plural "7.62x39mm M43, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "7.62x39mm M43, recargada"
+msgstr[1] "7.62x39mm M43, recargadas"
+msgstr[2] "7.62x39mm M43, recargadas"
#. ~ Description for {'str': '7.62x39mm M43, reloaded'}
#: data/json/obsoletion/items.json
@@ -168705,51 +169004,51 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "7.62x39mm M67, reloaded"
msgid_plural "7.62x39mm M67, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "7.62x39mm M67, recargada"
+msgstr[1] "7.62x39mm M67, recargadas"
+msgstr[2] "7.62x39mm M67, recargadas"
#: data/json/obsoletion/items.json
msgid "7.62x54mmR, reloaded"
msgid_plural "7.62x54mmR, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "7.62x54mmR, recargada"
+msgstr[1] "7.62x54mmR, recargadas"
+msgstr[2] "7.62x54mmR, recargadas"
#: data/json/obsoletion/items.json
msgid "7.62x25mm, reloaded"
msgid_plural "7.62x25mm, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "7.62x25mm, recargada"
+msgstr[1] "7.62x25mm, recargadas"
+msgstr[2] "7.62x25mm, recargadas"
#: data/json/obsoletion/items.json
msgid ".30-06 Springfield, reloaded"
msgid_plural ".30-06 Springfield, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".30-06 Springfield, recargada"
+msgstr[1] ".30-06 Springfield, recargadas"
+msgstr[2] ".30-06 Springfield, recargadas"
#: data/json/obsoletion/items.json
msgid ".30-06 incendiary, reloaded"
msgid_plural ".30-06 incendiary, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".30-06 incendiaria, recargada"
+msgstr[1] ".30-06 incendiarias, recargadas"
+msgstr[2] ".30-06 incendiarias, recargadas"
#: data/json/obsoletion/items.json
msgid ".30-06 M2 AP, reloaded"
msgid_plural ".30-06 M2 AP, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".30-06 M2 AP, recargada"
+msgstr[1] ".30-06 M2 AP, recargadas"
+msgstr[2] ".30-06 M2 AP, recargadas"
#: data/json/obsoletion/items.json
msgid ".45-70 SP, reloaded"
msgid_plural ".45-70 SP, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".45-70 SP, recargada"
+msgstr[1] ".45-70 SP, recargadas"
+msgstr[2] ".45-70 SP, recargadas"
#. ~ Description for {'str': '.45-70 SP, reloaded'}
#: data/json/obsoletion/items.json
@@ -168765,9 +169064,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid ".45-70 +P penetrator, reloaded"
msgid_plural ".45-70 +P penetrator, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".45-70 +P perforante, recargada"
+msgstr[1] ".45-70 +P perforante, recargadas"
+msgstr[2] ".45-70 +P perforante, recargadas"
#. ~ Description for {'str': '.45-70 +P penetrator, reloaded'}
#: data/json/obsoletion/items.json
@@ -168785,9 +169084,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid ".45-70 LFN cowboy, reloaded"
msgid_plural ".45-70 LFN cowboy, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] ".45-70 LFN cowboy, recargada"
+msgstr[1] ".45-70 LFN cowboy, recargadas"
+msgstr[2] ".45-70 LFN cowboy, recargadas"
#. ~ Description for {'str': '.45-70 LFN cowboy, reloaded'}
#: data/json/obsoletion/items.json
@@ -168804,37 +169103,37 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "birdshot, reloaded"
msgid_plural "birdshot, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "perdigones pequeños, recargado"
+msgstr[1] "perdigones pequeños, recargados"
+msgstr[2] "perdigones pequeños, recargados"
#: data/json/obsoletion/items.json
msgid "dragon's breath shell, reloaded"
msgid_plural "dragon's breath shell, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho aliento de dragón, recargado"
+msgstr[1] "cartuchos aliento de dragón, recargados"
+msgstr[2] "cartuchos aliento de dragón, recargados"
#: data/json/obsoletion/items.json
msgid "00 shot, reloaded"
msgid_plural "00 shot, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho 00, recargado"
+msgstr[1] "cartuchos 00, recargados"
+msgstr[2] "cartuchos 00, recargados"
#: data/json/obsoletion/items.json
msgid "flechette shell, reloaded"
msgid_plural "flechette shell, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho de dardos perforantes, recargado"
+msgstr[1] "cartuchos de dardos perforantes, recargados"
+msgstr[2] "cartuchos de dardos perforantes, recargados"
#: data/json/obsoletion/items.json
msgid "shotgun slug, reloaded"
msgid_plural "shotgun slug, reloadeds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "posta de escopeta, recargada"
+msgstr[1] "postas de escopeta, recargadas"
+msgstr[2] "postas de escopeta, recargadas"
#: data/json/obsoletion/items.json
msgid "flu shot"
@@ -169023,9 +169322,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "Lycra scraps"
msgid_plural "Lycra scraps"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pedazos de licra"
+msgstr[1] "pedazos de licra"
+msgstr[2] "pedazos de licra"
#. ~ Description for {'str_sp': 'Lycra scraps'}
#: data/json/obsoletion/items.json
@@ -169039,9 +169338,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "Lycra sheet"
msgid_plural "Lycra sheets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tela de licra"
+msgstr[1] "telas de licra"
+msgstr[2] "telas de licra"
#. ~ Description for {'str': 'Lycra sheet'}
#: data/json/obsoletion/items.json
@@ -169055,9 +169354,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "patchwork Lycra clothing parts"
msgid_plural "patchwork Lycra clothing parts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "retazos de ropa de licra"
+msgstr[1] "retazos de ropa de licra"
+msgstr[2] "retazos de ropa de licra"
#. ~ Description for {'str_sp': 'patchwork Lycra clothing parts'}
#: data/json/obsoletion/items.json
@@ -169085,9 +169384,9 @@ msgstr ""
#: data/json/obsoletion/items.json
msgid "set of spectrometry cuvettes"
msgid_plural "sets of spectrometry cuvettes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "equipo de cuvettes de espectrometría"
+msgstr[1] "equipos de cuvettes de espectrometría"
+msgstr[2] "equipos de cuvettes de espectrometría"
#. ~ Description for {'str': 'set of spectrometry cuvettes', 'str_pl': 'sets
#. of spectrometry cuvettes'}
@@ -191141,9 +191440,9 @@ msgstr "Centro de Despacho de Robots"
#: data/mods/Aftershock/items/ammo_type.json
msgid "acidic bore"
msgid_plural "acidic bores"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "ácido bórico"
+msgstr[1] "ácido bórico"
+msgstr[2] "ácido bórico"
#. ~ Description for {'str': 'acidic bore'}
#: data/mods/Aftershock/items/ammo.json
@@ -191172,9 +191471,9 @@ msgstr ""
#: data/mods/Aftershock/items/armor.json
msgid "bag of holding"
msgid_plural "bags of holding"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bolsa de almacenamiento"
+msgstr[1] "bolsas de almacenamiento"
+msgstr[2] "bolsas de almacenamiento"
#. ~ Description for {'str': 'bag of holding', 'str_pl': 'bags of holding'}
#: data/mods/Aftershock/items/armor.json
@@ -191229,9 +191528,9 @@ msgstr ""
#: data/mods/Aftershock/items/armor.json
msgid "sentinel-lx cloak"
msgid_plural "sentinel-lx cloaks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "capa sentinel-lx"
+msgstr[1] "capas sentinel-lx"
+msgstr[2] "capas sentinel-lx"
#. ~ Description for {'str': 'sentinel-lx cloak'}
#: data/mods/Aftershock/items/armor.json
@@ -191302,9 +191601,9 @@ msgstr ""
#: data/mods/Aftershock/items/armor.json
msgid "Uplifted SWAT armor"
msgid_plural "Uplifted SWAT armors"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "armadura SWAT ciclópea"
+msgstr[1] "armaduras SWAT ciclópeas"
+msgstr[2] "armaduras SWAT ciclópeas"
#. ~ Description for {'str': 'Uplifted SWAT armor'}
#: data/mods/Aftershock/items/armor.json
@@ -191320,9 +191619,9 @@ msgstr ""
#: data/mods/Aftershock/items/armor.json
msgid "empty XL ballistic vest"
msgid_plural "empty XL ballistic vests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "chaleco XL de balística vacío"
+msgstr[1] "chalecos XL de balística vacíos"
+msgstr[2] "chalecos XL de balística vacíos"
#. ~ Description for {'str': 'empty XL ballistic vest'}
#: data/mods/Aftershock/items/armor.json
@@ -191337,9 +191636,9 @@ msgstr ""
#: data/mods/Aftershock/items/armor.json
msgid "XL ESAPI ballistic vest"
msgid_plural "XL ESAPI ballistic vests"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "chaleco XL de balística ESAPI"
+msgstr[1] "chalecos XL de balística ESAPI"
+msgstr[2] "chalecos XL de balística ESAPI"
#. ~ Description for {'str': 'XL ESAPI ballistic vest'}
#: data/mods/Aftershock/items/armor.json
@@ -191349,9 +191648,9 @@ msgstr "Es armadura balística de gran tamaño con placas ESAPI de cerámica."
#: data/mods/Aftershock/items/armor.json
msgid "pair of XL combat boots"
msgid_plural "pair of XL combat boots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de botas XL de combate"
+msgstr[1] "pares de botas XL de combate"
+msgstr[2] "pares de botas XL de combate"
#. ~ Description for {'str_sp': 'pair of XL combat boots'}
#: data/mods/Aftershock/items/armor.json
@@ -191361,9 +191660,9 @@ msgstr "Son unas botas tácticas grandes de combate reforzadas. Muy duraderas."
#: data/mods/Aftershock/items/armor.json
msgid "pair of XL tactical gloves"
msgid_plural "pair of XL tactical gloves"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de guantes XL tácticos"
+msgstr[1] "pares de guantes XL tácticos"
+msgstr[2] "pares de guantes XL tácticos"
#. ~ Description for {'str_sp': 'pair of XL tactical gloves'}
#: data/mods/Aftershock/items/armor.json
@@ -191377,9 +191676,9 @@ msgstr ""
#: data/mods/Aftershock/items/armor.json
msgid "pair of Killophant gloves"
msgid_plural "pair of Killophant gloves"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de guantes Asesifante"
+msgstr[1] "pares de guantes Asesifante"
+msgstr[2] "pares de guantes Asesifante"
#. ~ Description for {'str_sp': 'pair of Killophant gloves'}
#: data/mods/Aftershock/items/armor.json
@@ -191579,9 +191878,9 @@ msgstr ""
#: data/mods/Aftershock/items/books.json
msgid "USMC M1014 technical manual"
msgid_plural "USMC M1014 technical manuals"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "manual técnico de USMC M1014"
+msgstr[1] "manuales técnicos de USMC M1014"
+msgstr[2] "manuales técnicos de USMC M1014"
#. ~ Description for {'str': 'USMC M1014 technical manual'}
#: data/mods/Aftershock/items/books.json
@@ -191599,9 +191898,9 @@ msgstr ""
#: data/mods/Aftershock/items/books.json
msgid "Black Powder to Berettas"
msgid_plural "copies of Black Powder to Berettas"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "copia de Pólvora Negra para Berettas"
+msgstr[1] "copias de Pólvora Negra para Berettas"
+msgstr[2] "copias de Pólvora Negra para Berettas"
#. ~ Description for {'str': 'Black Powder to Berettas', 'str_pl': 'copies of
#. Black Powder to Berettas'}
@@ -191642,9 +191941,9 @@ msgstr ""
#: data/mods/Aftershock/items/books.json
msgid "Jane's Flamethrowers and Firestarters"
msgid_plural "copies of Jane's Flamethrowers and Firestarters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "copia de Lanzallamas y Enciendefuegos de Jane"
+msgstr[1] "copias de Lanzallamas y Enciendefuegos de Jane"
+msgstr[2] "copias de Lanzallamas y Enciendefuegos de Jane"
#. ~ Description for {'str': "Jane's Flamethrowers and Firestarters",
#. 'str_pl': "copies of Jane's Flamethrowers and Firestarters"}
@@ -191663,9 +191962,9 @@ msgstr ""
#: data/mods/Aftershock/items/books.json
msgid "Nuclear Physics Made Easy"
msgid_plural "copies of Nuclear Physics Made Easy"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Física Nuclear para Principiantes"
+msgstr[1] "copias de Física Nuclear para Principiantes"
+msgstr[2] "copias de Física Nuclear para Principiantes"
#. ~ Description for {'str': 'Nuclear Physics Made Easy', 'str_pl': 'copies of
#. Nuclear Physics Made Easy'}
@@ -191695,9 +191994,9 @@ msgstr ""
#: data/mods/Aftershock/items/books.json
msgid "Dr Moreau and You"
msgid_plural "copies of Dr Moreau and You"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Dr. Moreau y vos"
+msgstr[1] "copias de Dr. Moreau y vos"
+msgstr[2] "copias de Dr. Moreau y vos"
#. ~ Description for {'str': 'Dr Moreau and You', 'str_pl': 'copies of Dr
#. Moreau and You'}
@@ -191716,9 +192015,9 @@ msgstr ""
#: data/mods/Aftershock/items/books.json
msgid "Millyficent's Diary"
msgid_plural "copies of Millyficent's Diary"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Diario de Millyficent"
+msgstr[1] "copias de Diario de Millyficent"
+msgstr[2] "copias de Diario de Millyficent"
#. ~ Description for {'str': "Millyficent's Diary", 'str_pl': "copies of
#. Millyficent's Diary"}
@@ -191822,9 +192121,9 @@ msgstr ""
#: data/mods/Aftershock/items/cbms.json
msgid "Wind Turbine CBM"
msgid_plural "Wind Turbine CBMs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MCB Turbina de Viento"
+msgstr[1] "MCB Turbina de Viento"
+msgstr[2] "MCB Turbina de Viento"
#. ~ Description for {'str': 'Wind Turbine CBM'}
#. ~ Description for {'str': 'Wind Turbines'}
@@ -191874,9 +192173,9 @@ msgstr ""
#: data/mods/Aftershock/items/comestibles/cheap_food.json
msgid "nutriment"
msgid_plural "nutriments"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "nutriente"
+msgstr[1] "nutrientes"
+msgstr[2] "nutrientes"
#. ~ Description for nutriment
#: data/mods/Aftershock/items/comestibles.json
@@ -191895,9 +192194,9 @@ msgstr ""
#: data/mods/Aftershock/items/comestibles/cheap_food.json
msgid "nutriment water"
msgid_plural "nutriment waters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "agua nutriente"
+msgstr[1] "aguas nutrientes"
+msgstr[2] "aguas nutrientes"
#. ~ Description for nutriment water
#: data/mods/Aftershock/items/comestibles.json
@@ -191912,9 +192211,9 @@ msgstr ""
#: data/mods/Aftershock/items/comestibles.json
msgid "sundew"
msgid_plural "sundews"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rocío de sol"
+msgstr[1] "rocíos de sol"
+msgstr[2] "rocíos de sol"
#. ~ Description for sundew
#: data/mods/Aftershock/items/comestibles.json
@@ -191931,9 +192230,9 @@ msgstr ""
#: data/mods/Aftershock/items/comestibles/comestibles.json
msgid "sungel"
msgid_plural "sungels"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "gel del sol"
+msgstr[1] "geles del sol"
+msgstr[2] "geles del sol"
#. ~ Use action activation_message for sungel.
#: data/mods/Aftershock/items/comestibles.json
@@ -191960,9 +192259,9 @@ msgstr ""
#: data/mods/Aftershock/items/obsolete.json
msgid "sunesthesia"
msgid_plural "sunesthesias"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "solnestesia"
+msgstr[1] "solnestesias"
+msgstr[2] "solnestesias"
#. ~ Use action activation_message for sunesthesia.
#: data/mods/Aftershock/items/comestibles.json
@@ -192017,9 +192316,9 @@ msgstr ""
#: data/mods/Modular_Turrets/corpses.json
msgid "broken utility robot"
msgid_plural "broken utility robots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "utilitaribot roto"
+msgstr[1] "utilitaribots rotos"
+msgstr[2] "utilitaribots rotos"
#. ~ Description for broken utility robot
#: data/mods/Aftershock/items/corpses.json
@@ -192055,9 +192354,9 @@ msgstr[2] ""
#: data/mods/Aftershock/items/corpses.json
msgid "broken butler-bot"
msgid_plural "broken butler-bots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mayordobot roto"
+msgstr[1] "mayordobots rotos"
+msgstr[2] "mayordobots rotos"
#. ~ Description for broken butler-bot
#: data/mods/Aftershock/items/corpses.json
@@ -192103,9 +192402,9 @@ msgstr ""
#: data/mods/Aftershock/items/corpses.json
msgid "broken rat snatcher"
msgid_plural "broken rat snatchers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cazaratas roto"
+msgstr[1] "cazaratas rotos"
+msgstr[2] "cazaratas rotos"
#. ~ Description for broken rat snatcher
#: data/mods/Aftershock/items/corpses.json
@@ -192119,9 +192418,9 @@ msgstr ""
#: data/mods/Aftershock/items/corpses.json
msgid "broken grab-bot"
msgid_plural "broken grab-bots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "agarrabot roto"
+msgstr[1] "agarrabots rotos"
+msgstr[2] "agarrabots rotos"
#. ~ Description for broken grab-bot
#: data/mods/Aftershock/items/corpses.json
@@ -192135,9 +192434,9 @@ msgstr ""
#: data/mods/Aftershock/items/corpses.json
msgid "broken pest hunter"
msgid_plural "broken pest hunters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cazapestes roto"
+msgstr[1] "cazapestes rotos"
+msgstr[2] "cazapestes rotos"
#. ~ Description for broken pest hunter
#: data/mods/Aftershock/items/corpses.json
@@ -192207,9 +192506,9 @@ msgstr ""
#: data/mods/Aftershock/items/corpses.json
msgid "broken floating heater"
msgid_plural "broken floating heaters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "calentador flotante roto"
+msgstr[1] "calentadores flotantes rotos"
+msgstr[2] "calentadores flotantes rotos"
#. ~ Description for broken floating heater
#: data/mods/Aftershock/items/corpses.json
@@ -192242,9 +192541,9 @@ msgstr ""
#: data/mods/Aftershock/items/corpses.json
msgid "broken disarmed advanced bot"
msgid_plural "broken disarmed advanced bots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "robot avanzado desarmado y roto"
+msgstr[1] "robots avanzados desarmados y rotos"
+msgstr[2] "robots avanzados desarmados y rotos"
#. ~ Description for broken disarmed advanced bot
#: data/mods/Aftershock/items/corpses.json
@@ -192292,16 +192591,16 @@ msgstr[2] "robots militares desarmados y rotos"
#: data/mods/Modular_Turrets/corpses.json
msgid "broken disarmed defense bot"
msgid_plural "broken disarmed defense bots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "defensibot desarmado roto"
+msgstr[1] "defensibots desarmados rotos"
+msgstr[2] "defensibots desarmados rotos"
#: data/mods/Aftershock/items/corpses.json
msgid "broken medical bot"
msgid_plural "broken medical bots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "medicobot roto"
+msgstr[1] "medicobots rotos"
+msgstr[2] "medicobots rotos"
#. ~ Description for broken medical bot
#: data/mods/Aftershock/items/corpses.json
@@ -192478,9 +192777,9 @@ msgstr ""
#: data/mods/Aftershock/items/inactiverobot.json
msgid "inactive bee-bot"
msgid_plural "inactive bee-bots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "abejabot inactivo"
+msgstr[1] "abejabots inactivos"
+msgstr[2] "abejabots inactivos"
#. ~ Description for inactive bee-bot
#: data/mods/Aftershock/items/inactiverobot.json
@@ -192564,9 +192863,9 @@ msgstr ""
#: data/mods/Aftershock/items/inactiverobot.json
msgid "inactive floating heater"
msgid_plural "inactive floating heaters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "calentador flotante inactivo"
+msgstr[1] "calentadores flotantes inactivos"
+msgstr[2] "calentadores flotantes inactivos"
#. ~ Description for inactive floating heater
#: data/mods/Aftershock/items/inactiverobot.json
@@ -192617,9 +192916,9 @@ msgstr ""
#: data/mods/Aftershock/items/inactiverobot.json
msgid "inactive pest hunter"
msgid_plural "inactive pest hunters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cazapestes inactivo"
+msgstr[1] "cazapestes inactivos"
+msgstr[2] "cazapestes inactivos"
#. ~ Description for inactive pest hunter
#: data/mods/Aftershock/items/inactiverobot.json
@@ -192649,9 +192948,9 @@ msgstr ""
msgctxt "container"
msgid "basin"
msgid_plural "basins"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bol"
+msgstr[1] "bols"
+msgstr[2] "bols"
#. ~ Description for {'ctxt': 'container', 'str': 'basin'}
#: data/mods/Aftershock/items/items.json
@@ -192780,9 +193079,9 @@ msgstr "Es un pequeño perdigón de metal plateado, todavía tibio."
#: data/mods/Aftershock/items/items.json
msgid "nuclear fuel pellet"
msgid_plural "nuclear fuel pellets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "perdigón de combustible nuclear"
+msgstr[1] "perdigones de combustible nuclear"
+msgstr[2] "perdigones de combustible nuclear"
#. ~ Description for {'str': 'nuclear fuel pellet'}
#: data/mods/Aftershock/items/items.json
@@ -192792,9 +193091,9 @@ msgstr "Es un pequeño perdigón de material fisible. Manejar con cuidado."
#: data/mods/Aftershock/items/items.json
msgid "hazardous waste drum"
msgid_plural "hazardous waste drums"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "tambor de residuos peligrosos"
+msgstr[1] "tambores de residuos peligrosos"
+msgstr[2] "tambores de residuos peligrosos"
#. ~ Description for {'str': 'hazardous waste drum'}
#: data/mods/Aftershock/items/items.json
@@ -192827,9 +193126,9 @@ msgstr[2] ""
#: data/mods/Aftershock/items/items.json
msgid "titanium"
msgid_plural "titanium"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "titanio"
+msgstr[1] "titanio"
+msgstr[2] "titanio"
#. ~ Description for {'str_sp': 'titanium'}
#: data/mods/Aftershock/items/items.json
@@ -192880,9 +193179,9 @@ msgstr ""
#: data/mods/Aftershock/items/items.json
msgid "titanium watch"
msgid_plural "titanium watches"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "reloj de titanio"
+msgstr[1] "relojes de titanio"
+msgstr[2] "relojes de titanio"
#. ~ Description for {'str': 'titanium watch', 'str_pl': 'titanium watches'}
#: data/mods/Aftershock/items/items.json
@@ -192896,9 +193195,9 @@ msgstr ""
#: data/mods/Aftershock/items/items.json
msgid "titanium ring"
msgid_plural "titanium rings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "anillo de titanio"
+msgstr[1] "anillos de titanio"
+msgstr[2] "anillos de titanio"
#. ~ Description for {'str': 'titanium ring'}
#: data/mods/Aftershock/items/items.json
@@ -192920,9 +193219,9 @@ msgstr ""
#: data/mods/Aftershock/items/mutagen.json
msgid "mi-go serum"
msgid_plural "mi-go serums"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "suero de mi-go"
+msgstr[1] "sueros de mi-go"
+msgstr[2] "sueros de mi-go"
#. ~ Description for mi-go serum
#: data/mods/Aftershock/items/mutagen.json
@@ -192936,9 +193235,9 @@ msgstr ""
#: data/mods/Aftershock/items/mutagen.json
msgid "mi-go mutagen"
msgid_plural "mi-go mutagens"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mutágeno de mi-go"
+msgstr[1] "mutágenos de mi-go"
+msgstr[2] "mutágenos de mi-go"
#. ~ Description for mi-go mutagen
#: data/mods/Aftershock/items/mutagen.json
@@ -192951,9 +193250,9 @@ msgstr ""
#: data/mods/Aftershock/items/mutagen.json
msgid "mastodon serum"
msgid_plural "mastodon serums"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "suero de mastodonte"
+msgstr[1] "sueros de mastodonte"
+msgstr[2] "sueros de mastodonte"
#. ~ Description for {'str': 'mastodon serum'}
#. ~ Description for {'str': 'stego serum'}
@@ -192970,9 +193269,9 @@ msgstr ""
#: data/mods/Aftershock/items/mutagen.json
msgid "mastodon mutagen"
msgid_plural "mastodon mutagens"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mutágeno de mastodonte"
+msgstr[1] "mutágenos de mastodonte"
+msgstr[2] "mutágenos de mastodonte"
#. ~ Description for {'str': 'mastodon mutagen'}
#. ~ Description for {'str': 'stego mutagen'}
@@ -193032,9 +193331,9 @@ msgstr ""
#: data/mods/Aftershock/items/obsolete.json
msgid "dough"
msgid_plural "doughs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "masa"
+msgstr[1] "masas"
+msgstr[2] "masas"
#. ~ Description for dough
#: data/mods/Aftershock/items/obsolete.json
@@ -193049,9 +193348,9 @@ msgstr ""
#: data/mods/Aftershock/items/obsolete.json
msgid "hazardous environment suit"
msgid_plural "hazardous environment suits"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "traje para ambientes peligrosos"
+msgstr[1] "trajes para ambientes peligrosos"
+msgstr[2] "trajes para ambientes peligrosos"
#. ~ Description for hazardous environment suit
#: data/mods/Aftershock/items/obsolete.json
@@ -193109,9 +193408,9 @@ msgstr ""
#: data/mods/Aftershock/items/obsolete.json
msgid "boot quiver"
msgid_plural "boot quivers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "aljaba bota"
+msgstr[1] "aljabas bota"
+msgstr[2] "aljabas bota"
#. ~ Description for {'str': 'boot quiver'}
#: data/mods/Aftershock/items/obsolete.json
@@ -193127,9 +193426,9 @@ msgstr ""
#: data/mods/Aftershock/items/obsolete.json
msgid "quilt"
msgid_plural "quilts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colcha"
+msgstr[1] "colchas"
+msgstr[2] "colchas"
#. ~ Description for quilt
#: data/mods/Aftershock/items/obsolete.json
@@ -193143,9 +193442,9 @@ msgstr ""
#: data/mods/Aftershock/items/obsolete.json
msgid "patchwork quilt"
msgid_plural "patchwork quilts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "colcha de retazos"
+msgstr[1] "colchas de retazos"
+msgstr[2] "colchas de retazos"
#. ~ Description for patchwork quilt
#: data/mods/Aftershock/items/obsolete.json
@@ -193155,9 +193454,9 @@ msgstr "Es una enorme colcha hecha de pedazos de lana. Muy, muy abrigada."
#: data/mods/Aftershock/items/obsolete.json
msgid "survivor utility belt (holster)"
msgid_plural "survivor utility belts (holster)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cinturón de herramientas de supervivencia (funda)"
+msgstr[1] "cinturones de herramientas de supervivencia (funda)"
+msgstr[2] "cinturones de herramientas de supervivencia (funda)"
#. ~ Description for {'str': 'survivor utility belt (holster)', 'str_pl':
#. 'survivor utility belts (holster)'}
@@ -193175,16 +193474,16 @@ msgstr ""
#: data/mods/Aftershock/items/obsolete.json
msgid "survivor utility belt (sheath)"
msgid_plural "survivor utility belts (sheath)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cinturón de herramientas de supervivencia (vaina)"
+msgstr[1] "cinturones de herramientas de supervivencia (vaina)"
+msgstr[2] "cinturones de herramientas de supervivencia (vaina)"
#: data/mods/Aftershock/items/obsolete.json
msgid "brigandine"
msgid_plural "brigandines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "brigantina"
+msgstr[1] "brigantinas"
+msgstr[2] "brigantinas"
#. ~ Description for {'str': 'brigandine'}
#: data/mods/Aftershock/items/obsolete.json
@@ -193201,9 +193500,9 @@ msgstr ""
#: data/mods/Aftershock/items/obsolete.json
msgid "MBR vest (titanium)"
msgid_plural "MBR vests (titanium)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "chaleco MBR (titanio)"
+msgstr[1] "chalecos MBR (titanio)"
+msgstr[2] "chalecos MBR (titanio)"
#. ~ Description for {'str': 'MBR vest (titanium)', 'str_pl': 'MBR vests
#. (titanium)'}
@@ -193219,9 +193518,9 @@ msgstr ""
#: data/mods/Aftershock/items/obsolete.json
msgid "crafted brigandine"
msgid_plural "crafted brigandines"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "brigantina artesanal"
+msgstr[1] "brigantinas artesanales"
+msgstr[2] "brigantinas artesanales"
#. ~ Description for crafted brigandine
#: data/mods/Aftershock/items/obsolete.json
@@ -193746,9 +194045,9 @@ msgstr ""
#: data/mods/Aftershock/items/weapons.json
msgid "shoddy laser rifle"
msgid_plural "shoddy laser rifles"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "rifle láser de mala calidad"
+msgstr[1] "rifles láser de mala calidad"
+msgstr[2] "rifles láser de mala calidad"
#: data/mods/Aftershock/items/weapons.json
msgid ""
@@ -194386,9 +194685,9 @@ msgstr[2] "eyectaplasma integrales"
#: data/mods/Modular_Turrets/roboguns.json
msgid "integral railgun"
msgid_plural "integral railguns"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cañón de riel integral"
+msgstr[1] "cañones de riel integrales"
+msgstr[2] "cañones de riel integrales"
#: data/mods/Aftershock/items/gun/grenade.json
msgid "40mm EMP grenade"
@@ -195115,6 +195414,14 @@ msgid ""
"constant jet of warm air to heat an enclosed space."
msgstr ""
+#: data/mods/Aftershock/mobs/species.json
+msgid "intelligent animal"
+msgid_plural "intelligent animals"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'intelligent animal'}
#: data/mods/Aftershock/mobs/species.json
msgid "an intelligent animal created by man before the Cataclysm"
msgstr ""
@@ -198791,9 +199098,9 @@ msgstr ""
#: data/mods/CRT_EXPANSION/items/crt_ammo.json
msgid "pulse round"
msgid_plural "pulse rounds"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho de pulso"
+msgstr[1] "cartuchos de pulso"
+msgstr[2] "cartuchos de pulso"
#. ~ Description for pulse round
#: data/mods/CRT_EXPANSION/items/crt_ammo.json
@@ -200783,9 +201090,9 @@ msgstr ""
#: data/mods/CRT_EXPANSION/mutations/vamp_mut_cat.json
msgid "vampire mutagen"
msgid_plural "vampire mutagens"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mutágeno de vampiro"
+msgstr[1] "mutágenos de vampiro"
+msgstr[2] "mutágenos de vampiro"
#. ~ Description for vampire mutagen
#. ~ Description for wendigo mutagen
@@ -200797,9 +201104,9 @@ msgstr "Es un cóctel de mutágeno con una etiqueta que dice 'C.R.I.T R&D'."
#: data/mods/CRT_EXPANSION/mutations/vamp_mut_cat.json
msgid "vampire serum"
msgid_plural "vampire serums"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "suero de vampiro"
+msgstr[1] "sueros de vampiro"
+msgstr[2] "sueros de vampiro"
#. ~ Description for vampire serum
#: data/mods/CRT_EXPANSION/mutations/vamp_mut_cat.json
@@ -200883,16 +201190,16 @@ msgstr "Reclamado por la naturaleza."
#: data/mods/CRT_EXPANSION/mutations/wendigo_mut_cat.json
msgid "wendigo mutagen"
msgid_plural "wendigo mutagens"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mutágeno de wendigo"
+msgstr[1] "mutágenos de wendigo"
+msgstr[2] "mutágenos de wendigo"
#: data/mods/CRT_EXPANSION/mutations/wendigo_mut_cat.json
msgid "wendigo serum"
msgid_plural "wendigo serums"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "suero de wendigo"
+msgstr[1] "sueros de wendigo"
+msgstr[2] "sueros de wendigo"
#. ~ Description for wendigo serum
#: data/mods/CRT_EXPANSION/mutations/wendigo_mut_cat.json
@@ -201474,9 +201781,9 @@ msgstr ""
#: data/mods/CrazyCataclysm/crazy_comestibles.json
msgid "SpOreos"
msgid_plural "SpOreos"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "EspOreos"
+msgstr[1] "EspOreos"
+msgstr[2] "EspOreos"
#. ~ Description for {'str_sp': 'SpOreos'}
#: data/mods/CrazyCataclysm/crazy_comestibles.json
@@ -201545,9 +201852,9 @@ msgstr ""
#: data/mods/CrazyCataclysm/crazy_items.json
msgid "Ionic Overload Generator"
msgid_plural "Ionic Overload Generators"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Generador de Sobrecarga Iónica"
+msgstr[1] "Generadores de Sobrecarga Iónica"
+msgstr[2] "Generadores de Sobrecarga Iónica"
#: data/mods/CrazyCataclysm/crazy_items.json
msgid ""
@@ -203898,9 +204205,9 @@ msgstr ""
#: data/mods/DinoMod/items/egg.json
msgid "dinosaur egg"
msgid_plural "dinosaur eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de dinosaurio"
+msgstr[1] "huevos de dinosaurio"
+msgstr[2] "huevos de dinosaurio"
#. ~ Description for dinosaur egg
#: data/mods/DinoMod/items/egg.json
@@ -203958,9 +204265,9 @@ msgstr[2] ""
#: data/mods/DinoMod/items/egg.json
msgid "dilophosaurus egg"
msgid_plural "dilophosaurus eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de dilophosaurus"
+msgstr[1] "huevos de dilophosaurus"
+msgstr[2] "huevos de dilophosaurus"
#: data/mods/DinoMod/items/egg.json
msgid "ceratosaurus egg"
@@ -203972,9 +204279,9 @@ msgstr[2] ""
#: data/mods/DinoMod/items/egg.json
msgid "spinosaurus egg"
msgid_plural "spinosaurus eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de spinosaurus"
+msgstr[1] "huevos de spinosaurus"
+msgstr[2] "huevos de spinosaurus"
#: data/mods/DinoMod/items/egg.json
msgid "torvosaurus egg"
@@ -203986,9 +204293,9 @@ msgstr[2] ""
#: data/mods/DinoMod/items/egg.json
msgid "allosaurus egg"
msgid_plural "allosaurus eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de allosaurus"
+msgstr[1] "huevos de allosaurus"
+msgstr[2] "huevos de allosaurus"
#: data/mods/DinoMod/items/egg.json
msgid "acrocanthosaurus egg"
@@ -204056,23 +204363,23 @@ msgstr[2] ""
#: data/mods/DinoMod/items/egg.json
msgid "tyrannosaurus egg"
msgid_plural "tyrannosaurus eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de tyrannosaurus"
+msgstr[1] "huevos de tyrannosaurus"
+msgstr[2] "huevos de tyrannosaurus"
#: data/mods/DinoMod/items/egg.json
msgid "compsognathus egg"
msgid_plural "compsognathus eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de compsognathus"
+msgstr[1] "huevos de compsognathus"
+msgstr[2] "huevos de compsognathus"
#: data/mods/DinoMod/items/egg.json
msgid "gallimimus egg"
msgid_plural "gallimimus eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de gallimimus"
+msgstr[1] "huevos de gallimimus"
+msgstr[2] "huevos de gallimimus"
#: data/mods/DinoMod/items/egg.json
msgid "struthiomimus egg"
@@ -204119,23 +204426,23 @@ msgstr[2] ""
#: data/mods/DinoMod/items/egg.json
msgid "velociraptor egg"
msgid_plural "velociraptor eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de velociraptor"
+msgstr[1] "huevos de velociraptor"
+msgstr[2] "huevos de velociraptor"
#: data/mods/DinoMod/items/egg.json
msgid "deinonychus egg"
msgid_plural "deinonychus eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de deinonychus"
+msgstr[1] "huevos de deinonychus"
+msgstr[2] "huevos de deinonychus"
#: data/mods/DinoMod/items/egg.json
msgid "utahraptor egg"
msgid_plural "utahraptor eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de utahraptor"
+msgstr[1] "huevos de utahraptor"
+msgstr[2] "huevos de utahraptor"
#: data/mods/DinoMod/items/egg.json
msgid "dromaeosaurus egg"
@@ -204154,9 +204461,9 @@ msgstr[2] ""
#: data/mods/DinoMod/items/egg.json
msgid "eoraptor egg"
msgid_plural "eoraptor eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de eoraptor"
+msgstr[1] "huevos de eoraptor"
+msgstr[2] "huevos de eoraptor"
#: data/mods/DinoMod/items/egg.json
msgid "sarahsaurus egg"
@@ -204252,9 +204559,9 @@ msgstr[2] ""
#: data/mods/DinoMod/items/egg.json
msgid "stegosaurus egg"
msgid_plural "stegosaurus eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de stegosaurus"
+msgstr[1] "huevos de stegosaurus"
+msgstr[2] "huevos de stegosaurus"
#: data/mods/DinoMod/items/egg.json
msgid "hesperosaurus egg"
@@ -204322,9 +204629,9 @@ msgstr[2] ""
#: data/mods/DinoMod/items/egg.json
msgid "ankylosaurus egg"
msgid_plural "ankylosaurus eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de ankylosaurus"
+msgstr[1] "huevos de ankylosaurus"
+msgstr[2] "huevos de ankylosaurus"
#: data/mods/DinoMod/items/egg.json
msgid "euoplocephalus egg"
@@ -204406,9 +204713,9 @@ msgstr[2] ""
#: data/mods/DinoMod/items/egg.json
msgid "parasaurolophus egg"
msgid_plural "parasaurolophus eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de parasaurolophus"
+msgstr[1] "huevos de parasaurolophus"
+msgstr[2] "huevos de parasaurolophus"
#: data/mods/DinoMod/items/egg.json
msgid "lambeosaurus egg"
@@ -204441,9 +204748,9 @@ msgstr[2] ""
#: data/mods/DinoMod/items/egg.json
msgid "pachycephalosaurus egg"
msgid_plural "pachycephalosaurus eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de pachycephalosaurus"
+msgstr[1] "huevos de pachycephalosaurus"
+msgstr[2] "huevos de pachycephalosaurus"
#: data/mods/DinoMod/items/egg.json
msgid "aquilops egg"
@@ -204532,9 +204839,9 @@ msgstr[2] ""
#: data/mods/DinoMod/items/egg.json
msgid "triceratops egg"
msgid_plural "triceratops eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de triceratops"
+msgstr[1] "huevos de triceratops"
+msgstr[2] "huevos de triceratops"
#: data/mods/DinoMod/items/egg.json
msgid "nanosaurus egg"
@@ -204560,9 +204867,9 @@ msgstr[2] ""
#: data/mods/DinoMod/items/egg.json
msgid "dimorphodon egg"
msgid_plural "dimorphodon eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de dimorphodon"
+msgstr[1] "huevos de dimorphodon"
+msgstr[2] "huevos de dimorphodon"
#: data/mods/DinoMod/items/egg.json
msgid "pteranodon egg"
@@ -205404,6 +205711,14 @@ msgstr ""
msgid "DinoLab Operating Theater Access Control"
msgstr ""
+#: data/mods/DinoMod/monsters/dinosaur.json
+msgid "dinosaur"
+msgid_plural "dinosaurs"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'dinosaur'}
#: data/mods/DinoMod/monsters/dinosaur.json
msgid "a dinosaur"
msgstr ""
@@ -214861,9 +215176,9 @@ msgstr "Es un conjunto de 52 cartas francesas, hechas para jugar al póquer."
#: data/mods/Fuji_Structures/items/items_games.json
msgid "deck of Sorcery cards"
msgid_plural "decks of Sorcery cards"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mazo de cartas Hechicería"
+msgstr[1] "mazos de cartas Hechicería"
+msgstr[2] "mazos de cartas Hechicería"
#. ~ Description for {'str': 'deck of Sorcery cards', 'str_pl': 'decks of
#. Sorcery cards'}
@@ -214878,9 +215193,9 @@ msgstr ""
#: data/mods/Fuji_Structures/items/items_games.json
msgid "Picturesque"
msgid_plural "sets of Picturesque"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Pintoresco"
+msgstr[1] "colección de Pintoresco"
+msgstr[2] "colección de Pintoresco"
#. ~ Description for {'str': 'Picturesque', 'str_pl': 'sets of Picturesque'}
#: data/mods/Fuji_Structures/items/items_games.json
@@ -214893,9 +215208,9 @@ msgstr ""
#: data/mods/Fuji_Structures/items/items_games.json
msgid "Capitalism"
msgid_plural "sets of Capitalism"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Capitalismo"
+msgstr[1] "colección de Capitalismo"
+msgstr[2] "colección de Capitalismo"
#. ~ Description for {'str': 'Capitalism', 'str_pl': 'sets of Capitalism'}
#: data/mods/Fuji_Structures/items/items_games.json
@@ -214909,9 +215224,9 @@ msgstr ""
#: data/mods/Fuji_Structures/items/items_games.json
msgid "Blobs and Bandits"
msgid_plural "sets of Blobs and Bandits"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Blobos y Bandidos"
+msgstr[1] "colección de Blobos y Bandidos"
+msgstr[2] "colección de Blobos y Bandidos"
#. ~ Description for {'str': 'Blobs and Bandits', 'str_pl': 'sets of Blobs and
#. Bandits'}
@@ -214926,9 +215241,9 @@ msgstr ""
#: data/mods/Fuji_Structures/items/items_games.json
msgid "Battlehammer"
msgid_plural "sets of Battlehammer"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Battlehammer"
+msgstr[1] "colección de Battlehammer"
+msgstr[2] "colección de Battlehammer"
#. ~ Description for {'str': 'Battlehammer', 'str_pl': 'sets of Battlehammer'}
#: data/mods/Fuji_Structures/items/items_games.json
@@ -214940,9 +215255,9 @@ msgstr ""
#: data/mods/Fuji_Structures/items/items_games.json
msgid "Battlehammer 20k"
msgid_plural "sets of Battlehammer 20k"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Battlehammer 20k"
+msgstr[1] "colección de Battlehammer 20k"
+msgstr[2] "colección de Battlehammer 20k"
#. ~ Description for {'str': 'Battlehammer 20k', 'str_pl': 'sets of
#. Battlehammer 20k'}
@@ -214957,9 +215272,9 @@ msgstr ""
#: data/mods/Fuji_Structures/items/items_games.json
msgid "Settlers of the Ranch"
msgid_plural "sets of Settlers of the Ranch"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Colonizadores de Rancho"
+msgstr[1] "colección de Colonizadores de Rancho"
+msgstr[2] "colección de Colonizadores de Rancho"
#. ~ Description for {'str': 'Settlers of the Ranch', 'str_pl': 'sets of
#. Settlers of the Ranch'}
@@ -214973,9 +215288,9 @@ msgstr ""
#: data/mods/Fuji_Structures/items/items_games.json
msgid "Warships"
msgid_plural "sets of Warships"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Buques de Guerra"
+msgstr[1] "colección de Buques de Guerra"
+msgstr[2] "colección de Buques de Guerra"
#. ~ Description for {'str': 'Warships', 'str_pl': 'sets of Warships'}
#: data/mods/Fuji_Structures/items/items_games.json
@@ -214989,9 +215304,9 @@ msgstr ""
#: data/mods/Fuji_Structures/items/items_games.json
msgid "Murder Mystery"
msgid_plural "sets of Murder Mystery"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Asesinato Misterioso"
+msgstr[1] "colección de Asesinato Misterioso"
+msgstr[2] "colección de Asesinato Misterioso"
#. ~ Description for {'str': 'Murder Mystery', 'str_pl': 'sets of Murder
#. Mystery'}
@@ -215526,73 +215841,73 @@ msgstr ""
#: data/mods/Generic_Guns/ammo/obsolete.json
msgid "pistol ammo, ball (reloaded)"
msgid_plural "pistol ammo, ball (reloaded)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "munición de pistola, bola (recargada)"
+msgstr[1] "munición de pistola, bola (recargada)"
+msgstr[2] "munición de pistola, bola (recargada)"
#: data/mods/Generic_Guns/ammo/obsolete.json
msgid "pistol ammo, JHP (reloaded)"
msgid_plural "pistol ammo, JHP (reloaded)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "munición de pistola, JHP (recargada)"
+msgstr[1] "munición de pistola, JHP (recargada)"
+msgstr[2] "munición de pistola, JHP (recargada)"
#: data/mods/Generic_Guns/ammo/obsolete.json
msgid "tiny pistol ammo, ball (reloaded)"
msgid_plural "tiny pistol ammo, ball (reloaded)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "munición de pistola pequeña, bola (recargada)"
+msgstr[1] "munición de pistola pequeña, bola (recargada)"
+msgstr[2] "munición de pistola pequeña, bola (recargada)"
#: data/mods/Generic_Guns/ammo/obsolete.json
msgid "tiny pistol ammo, JHP (reloaded)"
msgid_plural "tiny pistol ammo, JHP (reloaded)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "munición de pistola pequeña, JHP (recargada)"
+msgstr[1] "munición de pistola pequeña, JHP (recargada)"
+msgstr[2] "munición de pistola pequeña, JHP (recargada)"
#: data/mods/Generic_Guns/ammo/obsolete.json
msgid "magnum ammo, ball (reloaded)"
msgid_plural "magnum ammo, ball (reloaded)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "munición de magnum, bola (recargada)"
+msgstr[1] "munición de magnum, bola (recargada)"
+msgstr[2] "munición de magnum, bola (recargada)"
#: data/mods/Generic_Guns/ammo/obsolete.json
msgid "magnum ammo, JHP (reloaded)"
msgid_plural "magnum ammo, JHP (reloaded)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "munición de magnum, JHP (recargada)"
+msgstr[1] "munición de magnum, JHP (recargada)"
+msgstr[2] "munición de magnum, JHP (recargada)"
#: data/mods/Generic_Guns/ammo/obsolete.json
msgid "shotshell, buckshot (reloaded)"
msgid_plural "shotshell, buckshot (reloaded)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho, perdigones grandes (recargado)"
+msgstr[1] "cartucho, perdigones grandes (recargado)"
+msgstr[2] "cartucho, perdigones grandes (recargado)"
#: data/mods/Generic_Guns/ammo/obsolete.json
msgid "shotshell, birdshot (reloaded)"
msgid_plural "shotshell, birdshot (reloaded)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho, perdigones pequeños (recargado)"
+msgstr[1] "cartucho, perdigones pequeños (recargado)"
+msgstr[2] "cartucho, perdigones pequeños (recargado)"
#: data/mods/Generic_Guns/ammo/obsolete.json
msgid "shotshell, slug (reloaded)"
msgid_plural "shotshell, slug (reloaded)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho, posta (recargado)"
+msgstr[1] "cartucho, posta (recargado)"
+msgstr[2] "cartucho, posta (recargado)"
#: data/mods/Generic_Guns/ammo/obsolete.json
#: data/mods/Generic_Guns/ammo/shot.json
msgid "shotshell, junk"
msgid_plural "shotshell, junk"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho, chatarra"
+msgstr[1] "cartucho, chatarra"
+msgstr[2] "cartucho, chatarra"
#: data/mods/Generic_Guns/ammo/obsolete.json
#: data/mods/Generic_Guns/ammo/shot.json
@@ -215619,16 +215934,16 @@ msgstr ""
#: data/mods/Generic_Guns/ammo/obsolete.json
msgid "shotshell, pyrotechnical (reloaded)"
msgid_plural "shotshell, pyrotechnical (reloaded)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho, pirotecnia (recargado)"
+msgstr[1] "cartucho, pirotecnia (recargado)"
+msgstr[2] "cartucho, pirotecnia (recargado)"
#: data/mods/Generic_Guns/ammo/obsolete.json
msgid "rifle ammo, AP"
msgid_plural "rifle ammo, AP"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "munición de rifle, AP"
+msgstr[1] "munición de rifle, AP"
+msgstr[2] "munición de rifle, AP"
#. ~ Description for {'str_sp': 'rifle ammo, AP'}
#: data/mods/Generic_Guns/ammo/obsolete.json
@@ -215648,30 +215963,30 @@ msgstr ""
#: data/mods/Generic_Guns/ammo/obsolete.json
msgid "rifle ammo, ball (reloaded)"
msgid_plural "rifle ammo, ball (reloaded)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "munición de rifle, bola (recargada)"
+msgstr[1] "munición de rifle, bola (recargada)"
+msgstr[2] "munición de rifle, bola (recargada)"
#: data/mods/Generic_Guns/ammo/obsolete.json
msgid "rifle ammo, AP (reloaded)"
msgid_plural "rifle ammo, AP (reloaded)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "munición de rifle, AP (recargada)"
+msgstr[1] "munición de rifle, AP (recargada)"
+msgstr[2] "munición de rifle, AP (recargada)"
#: data/mods/Generic_Guns/ammo/obsolete.json
msgid "rifle ammo, AP (black powder)"
msgid_plural "rifle ammo, AP (black powder)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "munición de rifle, AP (pólvora)"
+msgstr[1] "munición de rifle, AP (pólvora)"
+msgstr[2] "munición de rifle, AP (pólvora)"
#: data/mods/Generic_Guns/ammo/obsolete.json
msgid "huge rifle ammo, AP"
msgid_plural "huge rifle ammo, AP"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "munición de rifle grande, AP"
+msgstr[1] "munición de rifle grande, AP"
+msgstr[2] "munición de rifle grande, AP"
#. ~ Description for {'str_sp': 'huge rifle ammo, AP'}
#: data/mods/Generic_Guns/ammo/obsolete.json
@@ -215690,16 +216005,16 @@ msgstr ""
#: data/mods/Generic_Guns/ammo/obsolete.json
msgid "huge rifle ammo, ball (reloaded)"
msgid_plural "huge rifle ammo, ball (reloaded)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "munición de rifle grande, bola (recargada)"
+msgstr[1] "munición de rifle grande, bola (recargada)"
+msgstr[2] "munición de rifle grande, bola (recargada)"
#: data/mods/Generic_Guns/ammo/obsolete.json
msgid "huge rifle ammo, AP (reloaded)"
msgid_plural "huge rifle ammo, AP (reloaded)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "munición de rifle grande, AP (recargada)"
+msgstr[1] "munición de rifle grande, AP (recargada)"
+msgstr[2] "munición de rifle grande, AP (recargada)"
#: data/mods/Generic_Guns/ammo/pistol.json
msgid "9mm, FMJ"
@@ -216046,9 +216361,9 @@ msgstr[2] ""
#: data/mods/Generic_Guns/ammo/rocket.json
msgid "rocket, antipersonnel"
msgid_plural "rocket, antipersonnel"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "misil, antipersonal"
+msgstr[1] "misil, antipersonal"
+msgstr[2] "misil, antipersonal"
#. ~ Description for {'str_sp': 'rocket, antipersonnel'}
#: data/mods/Generic_Guns/ammo/rocket.json
@@ -216062,9 +216377,9 @@ msgstr ""
#: data/mods/Generic_Guns/ammo/rocket.json
msgid "rocket, multipurpose"
msgid_plural "rocket, multipurpose"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "misil, multipropósito"
+msgstr[1] "misil, multipropósito"
+msgstr[2] "misil, multipropósito"
#. ~ Description for {'str_sp': 'rocket, multipurpose'}
#: data/mods/Generic_Guns/ammo/rocket.json
@@ -216080,9 +216395,9 @@ msgstr ""
#: data/mods/Generic_Guns/ammo/rocket.json
msgid "rocket, smoke"
msgid_plural "rocket, smoke"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "misil, humo"
+msgstr[1] "misil, humo"
+msgstr[2] "misil, humo"
#. ~ Description for {'str_sp': 'rocket, smoke'}
#: data/mods/Generic_Guns/ammo/rocket.json
@@ -216098,23 +216413,23 @@ msgstr ""
#: data/mods/Generic_Guns/ammo/shot.json
msgid "shotshell, buckshot"
msgid_plural "shotshell, buckshot"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho, perdigones grandes"
+msgstr[1] "cartucho, perdigones grandes"
+msgstr[2] "cartucho, perdigones grandes"
#: data/mods/Generic_Guns/ammo/shot.json
msgid "shotshell, beanbag"
msgid_plural "shotshell, beanbag"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho, no letal"
+msgstr[1] "cartucho, no letal"
+msgstr[2] "cartucho, no letal"
#: data/mods/Generic_Guns/ammo/shot.json
msgid "shotshell, birdshot"
msgid_plural "shotshell, birdshot"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho, perdigones pequeños"
+msgstr[1] "cartucho, perdigones pequeños"
+msgstr[2] "cartucho, perdigones pequeños"
#. ~ Description for {'str_sp': 'shotshell, birdshot'}
#: data/mods/Generic_Guns/ammo/shot.json
@@ -216128,9 +216443,9 @@ msgstr ""
#: data/mods/Generic_Guns/ammo/shot.json
msgid "shotshell, slug"
msgid_plural "shotshell, slug"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho, posta"
+msgstr[1] "cartucho, posta"
+msgstr[2] "cartucho, posta"
#. ~ Description for {'str_sp': 'shotshell, slug'}
#: data/mods/Generic_Guns/ammo/shot.json
@@ -216147,9 +216462,9 @@ msgstr ""
#: data/mods/Generic_Guns/ammo/shot.json
msgid "shotshell, pyrotechnical"
msgid_plural "shotshell, pyrotechnical"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho, pirotecnia"
+msgstr[1] "cartucho, pirotecnia"
+msgstr[2] "cartucho, pirotecnia"
#. ~ Description for {'str_sp': 'shotshell, pyrotechnical'}
#: data/mods/Generic_Guns/ammo/shot.json
@@ -216165,9 +216480,9 @@ msgstr ""
#: data/mods/Generic_Guns/ammo/shot.json
msgid "shotshell, buckshot (black powder)"
msgid_plural "shotshell, buckshot (black powder)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho, perdigones grandes (pólvora)"
+msgstr[1] "cartucho, perdigones grandes (pólvora)"
+msgstr[2] "cartucho, perdigones grandes (pólvora)"
#. ~ Description for {'str_sp': 'shotshell, buckshot (black powder)'}
#: data/mods/Generic_Guns/ammo/shot.json
@@ -216180,9 +216495,9 @@ msgstr ""
#: data/mods/Generic_Guns/ammo/shot.json
msgid "shotshell, birdshot (black powder)"
msgid_plural "shotshell, birdshot (black powder)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho, perdigones pequeños (pólvora)"
+msgstr[1] "cartucho, perdigones pequeños (pólvora)"
+msgstr[2] "cartucho, perdigones pequeños (pólvora)"
#. ~ Description for {'str_sp': 'shotshell, birdshot (black powder)'}
#: data/mods/Generic_Guns/ammo/shot.json
@@ -216195,9 +216510,9 @@ msgstr ""
#: data/mods/Generic_Guns/ammo/shot.json
msgid "shotshell, slug (black powder)"
msgid_plural "shotshell, slug (black powder)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho, posta (pólvora)"
+msgstr[1] "cartucho, posta (pólvora)"
+msgstr[2] "cartucho, posta (pólvora)"
#. ~ Description for {'str_sp': 'shotshell, slug (black powder)'}
#: data/mods/Generic_Guns/ammo/shot.json
@@ -216211,9 +216526,9 @@ msgstr ""
#: data/mods/Generic_Guns/ammo/shot.json
msgid "shotshell, pyrotechnical (black powder)"
msgid_plural "shotshell, pyrotechnical (black powder)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho, pirotecnia (pólvora)"
+msgstr[1] "cartucho, pirotecnia (pólvora)"
+msgstr[2] "cartucho, pirotecnia (pólvora)"
#. ~ Description for {'str_sp': 'shotshell, pyrotechnical (black powder)'}
#: data/mods/Generic_Guns/ammo/shot.json
@@ -216227,9 +216542,9 @@ msgstr ""
#: data/mods/Generic_Guns/ammo/shot.json
msgid "shotshell, flechette (black powder)"
msgid_plural "shotshell, flechette (black powder)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho, dardos perforantes (pólvora)"
+msgstr[1] "cartucho, dardos perforantes (pólvora)"
+msgstr[2] "cartucho, dardos perforantes (pólvora)"
#. ~ Description for {'str_sp': 'shotshell, flechette (black powder)'}
#: data/mods/Generic_Guns/ammo/shot.json
@@ -216243,9 +216558,9 @@ msgstr ""
#: data/mods/Generic_Guns/ammo/shot.json
msgid "shotshell, junk (black powder)"
msgid_plural "shotshell, junk (black powder)"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cartucho, chatarra (pólvora)"
+msgstr[1] "cartucho, chatarra (pólvora)"
+msgstr[2] "cartucho, chatarra (pólvora)"
#. ~ Description for {'str_sp': 'shotshell, junk (black powder)'}
#: data/mods/Generic_Guns/ammo/shot.json
@@ -216579,9 +216894,9 @@ msgstr ""
#: data/mods/Generic_Guns/firearms/pistol.json
msgid "submachine gun"
msgid_plural "submachine guns"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "subfusil"
+msgstr[1] "subfusiles"
+msgstr[2] "subfusiles"
#: data/mods/Generic_Guns/firearms/pistol.json
#: data/mods/Generic_Guns/firearms/sniper.json
@@ -217811,9 +218126,9 @@ msgstr ""
#: data/mods/Magiclysm/bionics.json data/mods/Magiclysm/items/bionics.json
msgid "Blood Power Generator CBM"
msgid_plural "Blood Power Generator CBMs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "MCB Generador de Energía a Sangre"
+msgstr[1] "MCB Generador de Energía a Sangre"
+msgstr[2] "MCB Generador de Energía a Sangre"
#. ~ Description for {'str': 'Blood Power Generator CBM'}
#: data/mods/Magiclysm/bionics.json
@@ -218337,6 +218652,11 @@ msgstr ""
msgid "RUNES"
msgstr ""
+#. ~ Crafting recipes subcategory of 'ENCHANTED' category
+#: data/mods/Magiclysm/qualities.json
+msgid "ENCHANTING"
+msgstr ""
+
#: data/mods/Magiclysm/qualities.json
msgid "mana focusing"
msgstr ""
@@ -218472,6 +218792,27 @@ msgctxt "start_name"
msgid "Wizard's Retreat Vacation"
msgstr ""
+#: data/mods/Magiclysm/species.json
+msgid "magical beast"
+msgid_plural "magical beasts"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "dragon"
+msgid_plural "dragons"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "lizardfolk"
+msgid_plural "lizardfolk"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/Magiclysm/start_locations.json
msgid "Wizard's Secret Basement Study"
msgstr ""
@@ -218648,6 +218989,42 @@ msgid ""
"lights."
msgstr ""
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Bless"
+msgstr ""
+
+#. ~ Description for {'str': 'Bless'}
+#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "A spell of blessing that gives you energy and boosts your abilities."
+msgstr ""
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Holy Blade"
+msgstr ""
+
+#. ~ Description for Holy Blade
+#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
+#. Holy Blade'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "This blade of light will cut through any evil it makes contact with!"
+msgstr ""
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Spiritual Armor"
+msgstr ""
+
+#. ~ Description for Spiritual Armor
+#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
+#. of Spiritual Armor'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid ""
+"Evil will not make it through your defenses if your faith is strong enough!"
+msgstr ""
+
#: data/mods/Magiclysm/Spells/biomancer.json
msgid "Cure Light Wounds"
msgstr ""
@@ -220111,17 +220488,6 @@ msgid ""
"harmless."
msgstr ""
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Bless"
-msgstr ""
-
-#. ~ Description for {'str': 'Bless'}
-#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "A spell of blessing that gives you energy and boosts your abilities."
-msgstr ""
-
#: data/mods/Magiclysm/Spells/technomancer.json
#: data/mods/Magiclysm/effects/effects.json
msgid "Invisibility"
@@ -220139,31 +220505,6 @@ msgstr ""
msgid "To the outside world, your body fades away and you cease to exist!"
msgstr ""
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Holy Blade"
-msgstr ""
-
-#. ~ Description for Holy Blade
-#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
-#. Holy Blade'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "This blade of light will cut through any evil it makes contact with!"
-msgstr ""
-
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Spiritual Armor"
-msgstr ""
-
-#. ~ Description for Spiritual Armor
-#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
-#. of Spiritual Armor'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid ""
-"Evil will not make it through your defenses if your faith is strong enough!"
-msgstr ""
-
#: data/mods/Magiclysm/Spells/technomancer.json
msgid "Lamp"
msgstr ""
@@ -220697,9 +221038,9 @@ msgstr ""
#: data/mods/Magiclysm/items/alchemy_items.json
msgid "copper infusion bracelet"
msgid_plural "copper infusion bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de cobre de infusión"
+msgstr[1] "pulseras de cobre de infusión"
+msgstr[2] "pulseras de cobre de infusión"
#. ~ Description for {'str': 'copper infusion bracelet'}
#. ~ Description for {'str': 'silver infusion bracelet'}
@@ -220714,16 +221055,16 @@ msgstr ""
#: data/mods/Magiclysm/items/alchemy_items.json
msgid "silver infusion bracelet"
msgid_plural "silver infusion bracelets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pulsera de plata de infusión"
+msgstr[1] "pulseras de plata de infusión"
+msgstr[2] "pulseras de plata de infusión"
#: data/mods/Magiclysm/items/alchemy_items.json
msgid "copper circlet"
msgid_plural "copper circlets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "diadema de cobre"
+msgstr[1] "diademas de cobre"
+msgstr[2] "diademas de cobre"
#. ~ Description for {'str': 'copper circlet'}
#: data/mods/Magiclysm/items/alchemy_items.json
@@ -220751,9 +221092,9 @@ msgstr ""
#: data/mods/Magiclysm/items/alchemy_items.json
msgid "potion starter"
msgid_plural "potion starters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "poción de inicio"
+msgstr[1] "pociones de inicio"
+msgstr[2] "pociones de inicio"
#. ~ Description for potion starter
#: data/mods/Magiclysm/items/alchemy_items.json
@@ -220767,9 +221108,9 @@ msgstr ""
#: data/mods/Magiclysm/items/alchemy_items.json
msgid "superior potion starter"
msgid_plural "superior potion starters"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "poción superior de inicio"
+msgstr[1] "pociones superior de inicio"
+msgstr[2] "pociones superior de inicio"
#. ~ Description for superior potion starter
#: data/mods/Magiclysm/items/alchemy_items.json
@@ -220783,9 +221124,9 @@ msgstr ""
#: data/mods/Magiclysm/items/alchemy_items.json
msgid "large adrenal gland"
msgid_plural "large adrenal glands"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "glándula suprarrenal grande"
+msgstr[1] "glándulas suprarrenales grandes"
+msgstr[2] "glándulas suprarrenales grandes"
#. ~ Description for {'str': 'large adrenal gland'}
#: data/mods/Magiclysm/items/alchemy_items.json
@@ -220875,9 +221216,9 @@ msgstr ""
#: data/mods/Magiclysm/items/alchemy_items.json
msgid "dragon essence"
msgid_plural "dragon essences"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "esencia de dragón"
+msgstr[1] "esencias de dragón"
+msgstr[2] "esencias de dragón"
#. ~ Description for dragon essence
#: data/mods/Magiclysm/items/alchemy_items.json
@@ -220949,9 +221290,9 @@ msgstr ""
#: data/mods/Magiclysm/items/ammo_types.json
msgid "alumentum"
msgid_plural "alumentum"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "alumentum"
+msgstr[1] "alumentum"
+msgstr[2] "alumentum"
#. ~ Description for {'str_sp': 'alumentum'}
#: data/mods/Magiclysm/items/alchemy_items.json
@@ -220983,17 +221324,17 @@ msgstr ""
#: data/mods/Magiclysm/items/fuel.json
msgid "dragon blood"
msgid_plural "dragon blood"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sangre de dragón"
+msgstr[1] "sangre de dragón"
+msgstr[2] "sangre de dragón"
#: data/mods/Magiclysm/items/ammo_types.json
#: data/mods/Magiclysm/items/fuel.json
msgid "tainted blood"
msgid_plural "tainted blood"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sangre contaminada"
+msgstr[1] "sangre contaminada"
+msgstr[2] "sangre contaminada"
#: data/mods/Magiclysm/items/ammo_types.json
#: data/mods/Magiclysm/items/fuel.json
@@ -221007,9 +221348,9 @@ msgstr[2] ""
#: data/mods/Magiclysm/items/archery.json
msgid "orichalcum arrow"
msgid_plural "orichalcum arrows"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "flecha de oricalco"
+msgstr[1] "flechas de oricalco"
+msgstr[2] "flechas de oricalco"
#: data/mods/Magiclysm/items/ammo_types.json
msgid "mercury"
@@ -221043,9 +221384,9 @@ msgstr ""
#: data/mods/Magiclysm/items/armor.json
msgid "pair of demon chitin arm guards"
msgid_plural "pairs of demon chitin arm guards"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de mangas de quitina demoníaca"
+msgstr[1] "pares de mangas de quitina demoníaca"
+msgstr[2] "pares de mangas de quitina demoníaca"
#. ~ Description for {'str': 'pair of demon chitin arm guards', 'str_pl':
#. 'pairs of demon chitin arm guards'}
@@ -221061,9 +221402,9 @@ msgstr ""
#: data/mods/Magiclysm/items/armor.json
msgid "demon chitin armor"
msgid_plural "demon chitin armors"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "armadura de quitina demoníaca"
+msgstr[1] "armaduras de quitina demoníaca"
+msgstr[2] "armaduras de quitina demoníaca"
#. ~ Description for {'str': 'demon chitin armor'}
#: data/mods/Magiclysm/items/armor.json
@@ -221078,9 +221419,9 @@ msgstr ""
#: data/mods/Magiclysm/items/armor.json
msgid "demon chitin helmet"
msgid_plural "demon chitin helmets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "casco de quitina demoníaca"
+msgstr[1] "cascos de quitina demoníaca"
+msgstr[2] "cascos de quitina demoníaca"
#. ~ Description for {'str': 'demon chitin helmet'}
#: data/mods/Magiclysm/items/armor.json
@@ -221095,9 +221436,9 @@ msgstr ""
#: data/mods/Magiclysm/items/armor.json
msgid "pair of demon chitin gauntlets"
msgid_plural "pairs of demon chitin gauntlets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de guantes de quitina demoníaca"
+msgstr[1] "pares de guantes de quitina demoníaca"
+msgstr[2] "pares de guantes de quitina demoníaca"
#. ~ Description for {'str': 'pair of demon chitin gauntlets', 'str_pl':
#. 'pairs of demon chitin gauntlets'}
@@ -221113,9 +221454,9 @@ msgstr ""
#: data/mods/Magiclysm/items/armor.json
msgid "pair of demon chitin boots"
msgid_plural "pairs of demon chitin boots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de botas de quitina demoníaca"
+msgstr[1] "pares de botas de quitina demoníaca"
+msgstr[2] "pares de botas de quitina demoníaca"
#. ~ Description for {'str': 'pair of demon chitin boots', 'str_pl': 'pairs of
#. demon chitin boots'}
@@ -221203,9 +221544,9 @@ msgstr ""
#: data/mods/Magiclysm/items/black_dragon_items.json
msgid "raw black dragon hide"
msgid_plural "raw black dragon hides"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pellejo crudo de dragón negro"
+msgstr[1] "pellejos crudos de dragón negro"
+msgstr[2] "pellejos crudos de dragón negro"
#. ~ Description for raw black dragon hide
#: data/mods/Magiclysm/items/black_dragon_items.json
@@ -221260,9 +221601,9 @@ msgstr ""
#: data/mods/Magiclysm/items/black_dragon_items.json
msgid "pair of black dragonscale boots"
msgid_plural "pairs of black dragonscale boots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de botas negras de escamas de dragón"
+msgstr[1] "pares de botas negras de escamas de dragón"
+msgstr[2] "pares de botas negras de escamas de dragón"
#. ~ Description for {'str': 'pair of black dragonscale boots', 'str_pl':
#. 'pairs of black dragonscale boots'}
@@ -221292,9 +221633,9 @@ msgstr ""
#: data/mods/Magiclysm/items/black_dragon_items.json
msgid "black dragonscale helmet"
msgid_plural "black dragonscale helmets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "casco negro de escamas de dragón"
+msgstr[1] "cascos negros de escamas de dragón"
+msgstr[2] "cascos negros de escamas de dragón"
#. ~ Description for black dragonscale helmet
#: data/mods/Magiclysm/items/black_dragon_items.json
@@ -221308,9 +221649,9 @@ msgstr ""
#: data/mods/Magiclysm/items/black_dragon_items.json
msgid "black dragonhide helmet"
msgid_plural "black dragonhide helmets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "casco negro de pellejo de dragón"
+msgstr[1] "cascos negros de pellejo de dragón"
+msgstr[2] "cascos negros de pellejo de dragón"
#. ~ Description for black dragonhide helmet
#: data/mods/Magiclysm/items/black_dragon_items.json
@@ -221324,9 +221665,9 @@ msgstr ""
#: data/mods/Magiclysm/items/black_dragon_items.json
msgid "black dragonscale armor"
msgid_plural "black dragonscale armors"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "armadura negra de escamas de dragón"
+msgstr[1] "armaduras negras de escamas de dragón"
+msgstr[2] "armaduras negras de escamas de dragón"
#. ~ Description for black dragonscale armor
#: data/mods/Magiclysm/items/black_dragon_items.json
@@ -221342,9 +221683,9 @@ msgstr ""
#: data/mods/Magiclysm/items/black_dragon_items.json
msgid "black dragonhide armor"
msgid_plural "black dragonhide armors"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "armadura negra de pellejo de dragón"
+msgstr[1] "armaduras negras de pellejo de dragón"
+msgstr[2] "armaduras negras de pellejo de dragón"
#. ~ Description for black dragonhide armor
#: data/mods/Magiclysm/items/black_dragon_items.json
@@ -221375,16 +221716,16 @@ msgstr "Es un par de guantes resistentes hechos de escamas negras de dragón."
#: data/mods/Magiclysm/items/black_dragon_items.json
msgid "pair of black dragonhide gloves"
msgid_plural "pairs of black dragonhide gloves"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de guantes negros de pellejo de dragón"
+msgstr[1] "pares de guantes negros de pellejo de dragón"
+msgstr[2] "pares de guantes negros de pellejo de dragón"
#: data/mods/Magiclysm/items/black_dragon_items.json
msgid "pair of XL black dragonscale boots"
msgid_plural "pairs of XL black dragonscale boots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de botas XL negras de escamas de dragón"
+msgstr[1] "pares de botas XL negras de escamas de dragón"
+msgstr[2] "pares de botas XL negras de escamas de dragón"
#. ~ Description for {'str': 'pair of XL black dragonscale boots', 'str_pl':
#. 'pairs of XL black dragonscale boots'}
@@ -221400,9 +221741,9 @@ msgstr ""
#: data/mods/Magiclysm/items/black_dragon_items.json
msgid "pair of XL black dragonhide boots"
msgid_plural "pairs of XL black dragonhide boots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de botas XL negras de pellejo de dragón"
+msgstr[1] "pares de botas XL negras de pellejo de dragón"
+msgstr[2] "pares de botas XL negras de pellejo de dragón"
#. ~ Description for {'str': 'pair of XL black dragonhide boots', 'str_pl':
#. 'pairs of XL black dragonhide boots'}
@@ -221418,9 +221759,9 @@ msgstr ""
#: data/mods/Magiclysm/items/black_dragon_items.json
msgid "pair of XL black dragonscale gauntlets"
msgid_plural "pairs of XL black dragonscale gauntlets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de guantes negros XL de escamas de dragón"
+msgstr[1] "pares de guantes negros XL de escamas de dragón"
+msgstr[2] "pares de guantes negros XL de escamas de dragón"
#. ~ Description for {'str': 'pair of XL black dragonscale gauntlets',
#. 'str_pl': 'pairs of XL black dragonscale gauntlets'}
@@ -221435,9 +221776,9 @@ msgstr ""
#: data/mods/Magiclysm/items/black_dragon_items.json
msgid "pair of XL black dragonhide gloves"
msgid_plural "pairs of XL black dragonhide gloves"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de guantes negros XL de pellejo de dragón"
+msgstr[1] "pares de guantes negros XL de pellejo de dragón"
+msgstr[2] "pares de guantes negros XL de pellejo de dragón"
#. ~ Description for {'str': 'pair of XL black dragonhide gloves', 'str_pl':
#. 'pairs of XL black dragonhide gloves'}
@@ -221455,9 +221796,9 @@ msgstr ""
#: data/mods/Magiclysm/items/black_dragon_items.json
msgid "XL black dragonscale helmet"
msgid_plural "XL black dragonscale helmets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "casco negro XL de escamas de dragón"
+msgstr[1] "cascos negros XL de escamas de dragón"
+msgstr[2] "cascos negros XL de escamas de dragón"
#. ~ Description for {'str': 'XL black dragonscale helmet'}
#: data/mods/Magiclysm/items/black_dragon_items.json
@@ -221473,9 +221814,9 @@ msgstr ""
#: data/mods/Magiclysm/items/black_dragon_items.json
msgid "XL black dragonhide helmet"
msgid_plural "XL black dragonhide helmets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "casco negro XL de pellejo de dragón"
+msgstr[1] "cascos negros XL de pellejo de dragón"
+msgstr[2] "cascos negros XL de pellejo de dragón"
#. ~ Description for {'str': 'XL black dragonhide helmet'}
#: data/mods/Magiclysm/items/black_dragon_items.json
@@ -221491,9 +221832,9 @@ msgstr ""
#: data/mods/Magiclysm/items/black_dragon_items.json
msgid "XL black dragonscale armor"
msgid_plural "XL black dragonscale armors"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "armadura negra XL de escamas de dragón"
+msgstr[1] "armaduras negras XL de escamas de dragón"
+msgstr[2] "armaduras negras XL de escamas de dragón"
#. ~ Description for {'str': 'XL black dragonscale armor'}
#: data/mods/Magiclysm/items/black_dragon_items.json
@@ -221509,9 +221850,9 @@ msgstr ""
#: data/mods/Magiclysm/items/black_dragon_items.json
msgid "XL black dragonhide armor"
msgid_plural "XL black dragonhide armors"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "armadura negra XL de pellejo de dragón"
+msgstr[1] "armaduras negras XL de pellejo de dragón"
+msgstr[2] "armaduras negras XL de pellejo de dragón"
#. ~ Description for {'str': 'XL black dragonhide armor'}
#: data/mods/Magiclysm/items/black_dragon_items.json
@@ -221670,9 +222011,9 @@ msgstr ""
#: data/mods/Magiclysm/items/cast_spell_items.json
msgid "zombie voodoo doll"
msgid_plural "zombie voodoo dolls"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "muñeco vudú zombi"
+msgstr[1] "muñecos vudú zombi"
+msgstr[2] "muñecos vudú zombi"
#. ~ Description for zombie voodoo doll
#: data/mods/Magiclysm/items/cast_spell_items.json
@@ -221689,9 +222030,9 @@ msgstr ""
#: data/mods/Magiclysm/items/cast_spell_items.json
msgid "ossified voodoo doll"
msgid_plural "ossified voodoo dolls"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "muñeco vudú osificado"
+msgstr[1] "muñecos vudú osificado"
+msgstr[2] "muñecos vudú osificado"
#. ~ Description for ossified voodoo doll
#: data/mods/Magiclysm/items/cast_spell_items.json
@@ -221709,9 +222050,9 @@ msgstr ""
#: data/mods/Magiclysm/items/cast_spell_items.json
msgid "cougar voodoo doll"
msgid_plural "cougar voodoo dolls"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "muñeco vudú puma"
+msgstr[1] "muñecos vudú puma"
+msgstr[2] "muñecos vudú puma"
#. ~ Description for cougar voodoo doll
#: data/mods/Magiclysm/items/cast_spell_items.json
@@ -221728,9 +222069,9 @@ msgstr ""
#: data/mods/Magiclysm/items/cast_spell_items.json
msgid "potion of Twisted Restoration"
msgid_plural "potions of Twisted Restoration"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "poción Restoración Retorcida"
+msgstr[1] "pociones Restoración Retorcida"
+msgstr[2] "pociones Restoración Retorcida"
#. ~ Description for {'str': 'potion of Twisted Restoration', 'str_pl':
#. 'potions of Twisted Restoration'}
@@ -221747,9 +222088,9 @@ msgstr ""
#: data/mods/Magiclysm/items/cast_spell_items.json
msgid "potion of Improved Twisted Restoration"
msgid_plural "potions of Improved Twisted Restoration"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "poción Restoración Retorcida Mejorada"
+msgstr[1] "pociones Restoración Retorcida Mejorada"
+msgstr[2] "pociones Restoración Retorcida Mejorada"
#. ~ Description for {'str': 'potion of Improved Twisted Restoration',
#. 'str_pl': 'potions of Improved Twisted Restoration'}
@@ -221895,9 +222236,9 @@ msgstr ""
#: data/mods/Magiclysm/items/comestibles.json
msgid "owlbear egg"
msgid_plural "owlbear eggs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "huevo de oso lechuza"
+msgstr[1] "huevos de oso lechuza"
+msgstr[2] "huevos de oso lechuza"
#. ~ Description for owlbear egg
#: data/mods/Magiclysm/items/comestibles.json
@@ -221917,9 +222258,9 @@ msgstr ""
#: data/mods/Magiclysm/items/comestibles.json
msgid "owlbear egg yolk"
msgid_plural "owlbear egg yolks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "yema de huevo de oso lechuza"
+msgstr[1] "yemas de huevo de oso lechuza"
+msgstr[2] "yemas de huevo de oso lechuza"
#. ~ Description for owlbear egg yolk
#: data/mods/Magiclysm/items/comestibles.json
@@ -221929,9 +222270,9 @@ msgstr "Es el líquido interior de un huevo de oso lechuza. Buena comida."
#: data/mods/Magiclysm/items/comestibles.json
msgid "hairball"
msgid_plural "hairballs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bola de pelo"
+msgstr[1] "bolas de pelo"
+msgstr[2] "bolas de pelo"
#. ~ Description for {'str': 'hairball'}
#: data/mods/Magiclysm/items/comestibles.json
@@ -221944,9 +222285,9 @@ msgstr ""
#: data/mods/Magiclysm/items/comestibles.json
msgid "dragon meat"
msgid_plural "dragon meat"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "carne de dragón"
+msgstr[1] "carne de dragón"
+msgstr[2] "carne de dragón"
#. ~ Description for {'str_sp': 'dragon meat'}
#: data/mods/Magiclysm/items/comestibles.json
@@ -221962,9 +222303,9 @@ msgstr ""
#: data/mods/Magiclysm/items/comestibles.json
msgid "scream mushroom"
msgid_plural "scream mushrooms"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "grithongo"
+msgstr[1] "grithongos"
+msgstr[2] "grithongos"
#. ~ Description for scream mushroom
#: data/mods/Magiclysm/items/comestibles.json
@@ -221977,9 +222318,9 @@ msgstr ""
#: data/mods/Magiclysm/items/comestibles.json
msgid "purified meat"
msgid_plural "purified meats"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "carne purificada"
+msgstr[1] "carnes purificadas"
+msgstr[2] "carnes purificadas"
#. ~ Description for purified meat
#: data/mods/Magiclysm/items/comestibles.json
@@ -221993,9 +222334,9 @@ msgstr ""
#: data/mods/Magiclysm/items/comestibles.json
msgid "impure meat"
msgid_plural "impure meats"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "carne impura"
+msgstr[1] "carnes impuras"
+msgstr[2] "carnes impuras"
#. ~ Description for impure meat
#: data/mods/Magiclysm/items/comestibles.json
@@ -222067,16 +222408,16 @@ msgstr ""
#: data/mods/Magiclysm/items/enchanted.json
msgid "belt of strength +2"
msgid_plural "belts of strength +2"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cinturón de fuerza +2"
+msgstr[1] "cinturones de fuerza +2"
+msgstr[2] "cinturones de fuerza +2"
#: data/mods/Magiclysm/items/enchanted.json
msgid "belt of haste"
msgid_plural "belts of haste"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cinturón de apuro"
+msgstr[1] "cinturones de apuro"
+msgstr[2] "cinturones de apuro"
#: data/mods/Magiclysm/items/enchanted.json
msgid "lesser staff of the magi"
@@ -222096,9 +222437,9 @@ msgstr ""
#: data/mods/Magiclysm/items/enchanted.json
msgid "wizard hat"
msgid_plural "wizard hats"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "sombrero de mago"
+msgstr[1] "sombreros de mago"
+msgstr[2] "sombreros de mago"
#. ~ Description for wizard hat
#: data/mods/Magiclysm/items/enchanted.json
@@ -222193,9 +222534,9 @@ msgstr ""
#: data/mods/Magiclysm/items/enchanted_belts.json
msgid "technomancer's toolbelt"
msgid_plural "technomancer's toolbelts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cinturón de herramientas de tecnomante"
+msgstr[1] "cinturones de herramientas de tecnomante"
+msgstr[2] "cinturones de herramientas de tecnomante"
#. ~ Description for {'str': "technomancer's toolbelt"}
#: data/mods/Magiclysm/items/enchanted_belts.json
@@ -222255,9 +222596,9 @@ msgstr ""
#: data/mods/Magiclysm/items/enchanted_boots.json
msgid "seven league boots"
msgid_plural "pairs of seven league boots"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de botas de siete leguas"
+msgstr[1] "pares de botas de siete leguas"
+msgstr[2] "pares de botas de siete leguas"
#. ~ Description for {'str': 'seven league boots', 'str_pl': 'pairs of seven
#. league boots'}
@@ -222276,9 +222617,9 @@ msgstr ""
#: data/mods/Magiclysm/items/enchanted_boots.json
msgid "boots of haste"
msgid_plural "pairs of boots of haste"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de botas de apuro"
+msgstr[1] "pares de botas de apuro"
+msgstr[2] "pares de botas de apuro"
#: data/mods/Magiclysm/items/enchanted_boots.json
msgid "escape boots"
@@ -222298,9 +222639,9 @@ msgstr ""
#: data/mods/Magiclysm/items/enchanted_boots.json
msgid "boots of grounding"
msgid_plural "pairs of boots of grounding"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de botas aislantes"
+msgstr[1] "pares de botas aislantes"
+msgstr[2] "pares de botas aislantes"
#. ~ Description for {'str': 'boots of grounding', 'str_pl': 'pairs of boots
#. of grounding'}
@@ -222569,6 +222910,20 @@ msgstr[0] "maza +2s"
msgstr[1] "mazas +2s"
msgstr[2] "mazas +2s"
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "heavy sledge hammer +1"
+msgid_plural "heavy sledge hammers +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "heavy sledge hammer +2"
+msgid_plural "heavy sledge hammers +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "warhammer +1"
msgid_plural "warhammer +1s"
@@ -222808,6 +223163,7 @@ msgstr[1] ""
msgstr[2] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +1"
msgid_plural "crowbar +1s"
msgstr[0] ""
@@ -222815,6 +223171,7 @@ msgstr[1] ""
msgstr[2] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +2"
msgid_plural "crowbar +2s"
msgstr[0] ""
@@ -222878,6 +223235,7 @@ msgstr[1] ""
msgstr[2] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +1"
msgid_plural "hunting knife +1s"
msgstr[0] ""
@@ -222885,6 +223243,7 @@ msgstr[1] ""
msgstr[2] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +2"
msgid_plural "hunting knife +2s"
msgstr[0] ""
@@ -223087,6 +223446,20 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +1"
+msgid_plural "lucerne hammers +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +2"
+msgid_plural "lucerne hammers +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "Biomancer spear"
msgid_plural "Biomancer spears"
@@ -223306,9 +223679,9 @@ msgstr ""
#: data/mods/Magiclysm/items/enchanted_misc.json
msgid "endless flask"
msgid_plural "endless flasks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "frasco sin fin"
+msgstr[1] "frascos sin fin"
+msgstr[2] "frascos sin fin"
#. ~ Use action msg for {'str': 'endless flask'}.
#: data/mods/Magiclysm/items/enchanted_misc.json
@@ -224035,6 +224408,90 @@ msgid ""
"turns into the item pictured on the front, in this case a crowbar."
msgstr ""
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +1"
+msgid_plural "bottle jacks +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +2"
+msgid_plural "bottle jacks +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +1"
+msgid_plural "scalpels +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +2"
+msgid_plural "scalpels +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +1"
+msgid_plural "butcher knives +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +2"
+msgid_plural "butcher knives +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +1"
+msgid_plural "meat cleavers +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +2"
+msgid_plural "meat cleavers +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +1"
+msgid_plural "carving knives +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +2"
+msgid_plural "carving knives +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +1"
+msgid_plural "butchering kits +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +2"
+msgid_plural "butchering kits +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/Magiclysm/items/enchanted_unarmed.json
msgid "cestus +1"
msgid_plural "cestus +1s"
@@ -224535,9 +224992,9 @@ msgstr[2] ""
#: data/mods/Magiclysm/items/ethereal_items.json
msgid "pair of magical armored stone gauntlets"
msgid_plural "pairs of magical armored stone gauntlets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "par de guantes mágicos de piedra"
+msgstr[1] "pares de guantes mágicos de piedra"
+msgstr[2] "pares de guantes mágicos de piedra"
#. ~ Description for {'str': 'pair of magical armored stone gauntlets',
#. 'str_pl': 'pairs of magical armored stone gauntlets'}
@@ -224564,9 +225021,9 @@ msgstr ""
#: data/mods/Magiclysm/items/ethereal_items.json
msgid "magic lamp"
msgid_plural "magic lamps"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lámpara mágica"
+msgstr[1] "lámparas mágicas"
+msgstr[2] "lámparas mágicas"
#. ~ Description for magic lamp
#: data/mods/Magiclysm/items/ethereal_items.json
@@ -224576,9 +225033,9 @@ msgstr "Es una fuente de luz mágica que ilumina un área pequeña."
#: data/mods/Magiclysm/items/ethereal_items.json
msgid "magic light"
msgid_plural "magic lights"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "luz mágica"
+msgstr[1] "luces mágicas"
+msgstr[2] "luces mágicas"
#. ~ Description for magic light
#: data/mods/Magiclysm/items/ethereal_items.json
@@ -224588,9 +225045,9 @@ msgstr "Es una pequeña luz mágica que podés usar para leer."
#: data/mods/Magiclysm/items/ethereal_items.json
msgid "large shield of magical ice"
msgid_plural "large shields of magical ice"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "escudo grande de hielo mágico"
+msgstr[1] "escudos grandes de hielo mágico"
+msgstr[2] "escudos grandes de hielo mágico"
#. ~ Description for {'str': 'large shield of magical ice', 'str_pl': 'large
#. shields of magical ice'}
@@ -224603,9 +225060,9 @@ msgstr ""
#: data/mods/Magiclysm/items/ethereal_items.json
msgid "slick icy coatings"
msgid_plural "slick icy coatings"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "coberturas de hielo resbaladizo"
+msgstr[1] "coberturas de hielo resbaladizo"
+msgstr[2] "coberturas de hielo resbaladizo"
#. ~ Description for {'str_sp': 'slick icy coatings'}
#: data/mods/Magiclysm/items/ethereal_items.json
@@ -224663,9 +225120,9 @@ msgstr ""
#: data/mods/Magiclysm/items/ethereal_items.json
msgid "flesh pouch"
msgid_plural "flesh pouches"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "bolsa de carne"
+msgstr[1] "bolsas de carne"
+msgstr[2] "bolsas de carne"
#. ~ Description for {'str': 'flesh pouch', 'str_pl': 'flesh pouches'}
#: data/mods/Magiclysm/items/ethereal_items.json
@@ -224762,9 +225219,9 @@ msgstr ""
#: data/mods/Magiclysm/items/ethereal_items.json
msgid "acid resistance aura"
msgid_plural "acid resistance auras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "aura de resistencia al ácido"
+msgstr[1] "auras de resistencia al ácido"
+msgstr[2] "auras de resistencia al ácido"
#. ~ Description for {'str': 'acid resistance aura'}
#. ~ Description for greater acid resistance aura
@@ -224775,16 +225232,16 @@ msgstr "Es una capa envolvente e invisible que protege contra el ácido."
#: data/mods/Magiclysm/items/ethereal_items.json
msgid "greater acid resistance aura"
msgid_plural "greater acid resistance auras"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "aura de gran resistencia al ácido"
+msgstr[1] "auras de gran resistencia al ácido"
+msgstr[2] "auras de gran resistencia al ácido"
#: data/mods/Magiclysm/items/ethereal_items.json
msgid "frost armor"
msgid_plural "frost armor"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "armadura de escarcha"
+msgstr[1] "armaduras de escarcha"
+msgstr[2] "armaduras de escarcha"
#. ~ Description for {'str_sp': 'frost armor'}
#: data/mods/Magiclysm/items/ethereal_items.json
@@ -224794,9 +225251,9 @@ msgstr "Es una fina capa de hielo mágico que cubre el cuerpo entero."
#: data/mods/Magiclysm/items/ethereal_items.json
msgid "stoneskin coating"
msgid_plural "stoneskin coating"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cobertura de piedra"
+msgstr[1] "cobertura de piedra"
+msgstr[2] "cobertura de piedra"
#. ~ Description for {'str_sp': 'stoneskin coating'}
#: data/mods/Magiclysm/items/ethereal_items.json
@@ -224810,9 +225267,9 @@ msgstr ""
#: data/mods/Magiclysm/items/ethereal_items.json
msgid "overcharge burn"
msgid_plural "overcharge burns"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "quemadura de sobrecarga"
+msgstr[1] "quemaduras de sobrecarga"
+msgstr[2] "quemaduras de sobrecarga"
#. ~ Description for {'str': 'overcharge burn'}
#: data/mods/Magiclysm/items/ethereal_items.json
@@ -224822,9 +225279,9 @@ msgstr "Ay, ¡esto es muy elegante! Pero ya va a pasar, ¿no?"
#: data/mods/Magiclysm/items/ethereal_items.json
msgid "aura of protection"
msgid_plural "auras of protection"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "aura de protección"
+msgstr[1] "auras de protección"
+msgstr[2] "auras de protección"
#. ~ Description for {'str': 'aura of protection', 'str_pl': 'auras of
#. protection'}
@@ -224866,9 +225323,9 @@ msgstr ""
#: data/mods/Magiclysm/items/mana_crystals.json
msgid "crystallized mana"
msgid_plural "crystallized mana"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "maná cristalizado"
+msgstr[1] "maná cristalizado"
+msgstr[2] "maná cristalizado"
#. ~ Description for {'str_sp': 'crystallized mana'}
#: data/mods/Magiclysm/items/mana_crystals.json
@@ -225002,9 +225459,9 @@ msgstr ""
#: data/mods/Magiclysm/items/metals.json
msgid "lump of orichalcum"
msgid_plural "lumps of orichalcum"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "conglomerado de oricalco"
+msgstr[1] "conglomerados de oricalco"
+msgstr[2] "conglomerados de oricalco"
#. ~ Description for {'str': 'lump of orichalcum', 'str_pl': 'lumps of
#. orichalcum'}
@@ -225018,9 +225475,9 @@ msgstr ""
#: data/mods/Magiclysm/items/metals.json
msgid "sliver of orichalcum"
msgid_plural "slivers of orichalcum"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pedacito de oricalco"
+msgstr[1] "pedacitos de oricalco"
+msgstr[2] "pedacitos de oricalco"
#. ~ Description for {'str': 'sliver of orichalcum', 'str_pl': 'slivers of
#. orichalcum'}
@@ -225049,9 +225506,9 @@ msgstr ""
#: data/mods/Magiclysm/items/metals.json
msgid "liquid mercury"
msgid_plural "liquid mercury"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "mercurio líquido"
+msgstr[1] "mercurio líquido"
+msgstr[2] "mercurio líquido"
#. ~ Description for {'str_sp': 'liquid mercury'}
#: data/mods/Magiclysm/items/metals.json
@@ -225063,9 +225520,9 @@ msgstr ""
#: data/mods/Magiclysm/items/mutagen.json
msgid "concentrated mana serum"
msgid_plural "concentrated mana serums"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "suero concentrado de maná"
+msgstr[1] "sueros concentrados de maná"
+msgstr[2] "sueros concentrados de maná"
#. ~ Description for concentrated mana serum
#: data/mods/Magiclysm/items/mutagen.json
@@ -225109,9 +225566,9 @@ msgstr ""
#: data/mods/Magiclysm/items/recipe_books.json
msgid "Black Dragons: Swamp Ruins"
msgid_plural "copies of Black Dragons: Swamp Ruins"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Dragones Negros: Ruinas de Pantano"
+msgstr[1] "copias de Dragones Negros: Ruinas de Pantano"
+msgstr[2] "copias de Dragones Negros: Ruinas de Pantano"
#. ~ Description for {'str': 'Black Dragons: Swamp Ruins', 'str_pl': 'copies
#. of Black Dragons: Swamp Ruins'}
@@ -225130,9 +225587,9 @@ msgstr ""
#: data/mods/Magiclysm/items/recipe_books.json
msgid "A Beginner's Guide to Alchemy"
msgid_plural "copies of A Beginner's Guide to Alchemy"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Guía de Principiante en Alquimia"
+msgstr[1] "copias de Guía de Principiante en Alquimia"
+msgstr[2] "copias de Guía de Principiante en Alquimia"
#. ~ Description for {'str': "A Beginner's Guide to Alchemy", 'str_pl':
#. "copies of A Beginner's Guide to Alchemy"}
@@ -225145,9 +225602,9 @@ msgstr ""
#: data/mods/Magiclysm/items/recipe_books.json
msgid "A Soulbinder's Guide to Necromancy"
msgid_plural "copies of A Soulbinder's Guide to Necromancy"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Guía de Vinculación de Almas en Necromancia"
+msgstr[1] "copias de Guía de Vinculación de Almas en Necromancia"
+msgstr[2] "copias de Guía de Vinculación de Almas en Necromancia"
#. ~ Description for {'str': "A Soulbinder's Guide to Necromancy", 'str_pl':
#. "copies of A Soulbinder's Guide to Necromancy"}
@@ -225162,9 +225619,9 @@ msgstr ""
#: data/mods/Magiclysm/items/recipe_books.json
msgid "Magitek Illustrated"
msgid_plural "copies of Magitek Illustrated"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Magitek Ilustrado"
+msgstr[1] "copias de Magitek Ilustrado"
+msgstr[2] "copias de Magitek Ilustrado"
#. ~ Description for {'str': 'Magitek Illustrated', 'str_pl': 'copies of
#. Magitek Illustrated'}
@@ -225183,9 +225640,9 @@ msgstr ""
#: data/mods/Magiclysm/items/recipe_books.json
msgid "The Weapons of Asgard and Beyond"
msgid_plural "copies of The Weapons of Asgard and Beyond"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Armas de Asgard y más"
+msgstr[1] "copias de Armas de Asgard y más"
+msgstr[2] "copias de Armas de Asgard y más"
#. ~ Description for {'str': 'The Weapons of Asgard and Beyond', 'str_pl':
#. 'copies of The Weapons of Asgard and Beyond'}
@@ -225202,9 +225659,9 @@ msgstr ""
#: data/mods/Magiclysm/items/recipe_books.json
msgid "Cooking with Poison"
msgid_plural "copies of Cooking with Poison"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Cocinando con Veneno"
+msgstr[1] "copias de Cocinando con Veneno"
+msgstr[2] "copias de Cocinando con Veneno"
#. ~ Description for {'str': 'Cooking with Poison', 'str_pl': 'copies of
#. Cooking with Poison'}
@@ -225219,9 +225676,9 @@ msgstr ""
#: data/mods/Magiclysm/items/recipe_books.json
msgid "Metals of Legend"
msgid_plural "copies of Metals of Legend"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Metales Legendarios"
+msgstr[1] "copias de Metales Legendarios"
+msgstr[2] "copias de Metales Legendarios"
#. ~ Description for {'str': 'Metals of Legend', 'str_pl': 'copies of Metals
#. of Legend'}
@@ -225238,9 +225695,9 @@ msgstr ""
#: data/mods/Magiclysm/items/recipe_books.json
msgid "Protection from Magical Beasts"
msgid_plural "copies of Protection from Magical Beasts"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Protección contra Bestias Mágicas"
+msgstr[1] "copias de Protección contra Bestias Mágicas"
+msgstr[2] "copias de Protección contra Bestias Mágicas"
#. ~ Description for {'str': 'Protection from Magical Beasts', 'str_pl':
#. 'copies of Protection from Magical Beasts'}
@@ -225254,6 +225711,21 @@ msgstr ""
"fuego de un dragón en la tapa. Adentro, tiene muchas maneras de convertir la"
" piel y el pellejo de un monstruo en equipo de protección."
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid "Enchanter's Guidebook"
+msgid_plural "copies of Enchanter's Guidebooks"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': "Enchanter's Guidebook", 'str_pl': "copies of
+#. Enchanter's Guidebooks"}
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid ""
+"A hefty textbook on the theory and practice of magically strengthening "
+"weapons and tools."
+msgstr ""
+
#: data/mods/Magiclysm/items/spell_scrolls.json
msgid "Spell Scroll"
msgid_plural "Spell Scrolls"
@@ -226338,9 +226810,9 @@ msgstr ""
#: data/mods/Magiclysm/items/tools.json
msgid "cauldron of purification"
msgid_plural "cauldrons of purification"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "caldera de purificación"
+msgstr[1] "calderas de purificación"
+msgstr[2] "calderas de purificación"
#. ~ Description for {'str': 'cauldron of purification', 'str_pl': 'cauldrons
#. of purification'}
@@ -226458,6 +226930,13 @@ msgid ""
"much more expensive."
msgstr ""
+#: data/mods/Magiclysm/monsters/demon_spider.json
+msgid "demon spider"
+msgid_plural "demon spiders"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid "demon spiderling"
msgid_plural "demon spiderlings"
@@ -226474,13 +226953,6 @@ msgid ""
"with venom."
msgstr ""
-#: data/mods/Magiclysm/monsters/demon_spider.json
-msgid "demon spider"
-msgid_plural "demon spiders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
#. ~ Description for demon spider
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid ""
@@ -227633,9 +228105,9 @@ msgstr ""
#: data/mods/Magiclysm/vehicles/summoned_vehicles.json
msgid "mana core power"
msgid_plural "mana core powers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "núcleo de energía de maná"
+msgstr[1] "núcleos de energía de maná"
+msgstr[2] "núcleos de energía de maná"
#. ~ Description for mana core power
#: data/mods/Magiclysm/vehicles/summoned_vehicles.json
@@ -227780,9 +228252,9 @@ msgstr[2] "torretas antidisturbios rotas"
#: data/mods/Modular_Turrets/corpses.json
msgid "broken 5.56mm turret"
msgid_plural "broken 5.56mm turrets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "torreta 5.56mm rota"
+msgstr[1] "torretas 5.56mm rotas"
+msgstr[2] "torretas 5.56mm rotas"
#. ~ Description for broken 5.56mm turret
#: data/mods/Modular_Turrets/corpses.json
@@ -227826,9 +228298,9 @@ msgstr ""
#: data/mods/Modular_Turrets/corpses.json
msgid "broken 40mm turret"
msgid_plural "broken 40mm turrets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "torreta 40mm rota"
+msgstr[1] "torretas 40mm rotas"
+msgstr[2] "torretas 40mm rotas"
#. ~ Description for broken 40mm turret
#: data/mods/Modular_Turrets/corpses.json
@@ -227967,9 +228439,9 @@ msgstr ""
#: data/mods/Modular_Turrets/corpses.json
msgid "broken EMP turret"
msgid_plural "broken EMP turrets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "torreta PEM rota"
+msgstr[1] "torretas PEM rotas"
+msgstr[2] "torretas PEM rotas"
#. ~ Description for broken EMP turret
#: data/mods/Modular_Turrets/corpses.json
@@ -227983,9 +228455,9 @@ msgstr ""
#: data/mods/Modular_Turrets/corpses.json
msgid "broken gaurdin gnome"
msgid_plural "broken gaurdin gnomes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "guardgnomo de jardín roto"
+msgstr[1] "guardgnomos de jardín rotos"
+msgstr[2] "guardgnomos de jardín rotos"
#. ~ Description for broken gaurdin gnome
#: data/mods/Modular_Turrets/corpses.json
@@ -227995,9 +228467,9 @@ msgstr "Es un gnomo de jardín roto y completamente inofensivo."
#: data/mods/Modular_Turrets/corpses.json
msgid "broken hack"
msgid_plural "broken hacks"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "hack roto"
+msgstr[1] "hacks rotos"
+msgstr[2] "hacks rotos"
#. ~ Description for broken eyebot
#: data/mods/Modular_Turrets/corpses.json
@@ -228183,9 +228655,9 @@ msgstr[2] "armas 9mm integrales"
#: data/mods/Modular_Turrets/roboguns.json
msgid "integral 5.56mm firearm"
msgid_plural "integral 5.56mm firearms"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "arma 5.56mm integral"
+msgstr[1] "armas 5.56mm integrales"
+msgstr[2] "armas 5.56mm integrales"
#: data/mods/Modular_Turrets/items.json
#: data/mods/Modular_Turrets/roboguns.json
@@ -228206,25 +228678,25 @@ msgstr[2] "escopetas integrales"
#: data/mods/Modular_Turrets/roboguns.json
msgid "integral beanbag launcher"
msgid_plural "integral beanbag launchers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lanzacartuchos no letal integral"
+msgstr[1] "lanzacartuchos no letales integrales"
+msgstr[2] "lanzacartuchos no letales integrales"
#: data/mods/Modular_Turrets/items.json
#: data/mods/Modular_Turrets/roboguns.json
msgid "integral teargas launcher"
msgid_plural "integral teargas launchers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lanzagas lacrimógeno integral"
+msgstr[1] "lanzagas lacrimógeno integrales"
+msgstr[2] "lanzagas lacrimógeno integrales"
#: data/mods/Modular_Turrets/items.json
#: data/mods/Modular_Turrets/roboguns.json
msgid "integral flamethrower"
msgid_plural "integral flamethrowers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "lanzallamas integral"
+msgstr[1] "lanzallamas integrales"
+msgstr[2] "lanzallamas integrales"
#: data/mods/Modular_Turrets/items.json
msgid "integral flechette firearm"
@@ -228236,16 +228708,16 @@ msgstr[2] "armas de dardos perforantes integrales"
#: data/mods/Modular_Turrets/items.json
msgid "integral 8x40mm firearm"
msgid_plural "integral 8x40mm firearms"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "arma 8x40mm integral"
+msgstr[1] "armas 8x40mm integrales"
+msgstr[2] "armas 8x40mm integrales"
#: data/mods/Modular_Turrets/items.json
msgid "integral 50 caliber firearm"
msgid_plural "integral 50 caliber firearms"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "arma calibre 50 integral"
+msgstr[1] "armas calibre 50 integrales"
+msgstr[2] "armas calibre 50 integrales"
#: data/mods/Modular_Turrets/items.json
#: data/mods/Modular_Turrets/roboguns.json
@@ -228350,9 +228822,9 @@ msgstr ""
#: data/mods/Modular_Turrets/items.json
msgid "inactive shotgun defense turret"
msgid_plural "inactive shotgun defense turrets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "torreta defensiva de escopeta inactiva"
+msgstr[1] "torretas defensivas de escopeta inactivas"
+msgstr[2] "torretas defensivas de escopeta inactivas"
#. ~ Description for inactive shotgun defense turret
#: data/mods/Modular_Turrets/items.json
@@ -228401,9 +228873,9 @@ msgstr ""
#: data/mods/Modular_Turrets/items.json
msgid "inactive 5.56mm military turret"
msgid_plural "inactive 5.56mm military turrets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "torreta militar 5.56mm inactiva"
+msgstr[1] "torretas militares 5.56mm inactivas"
+msgstr[2] "torretas militares 5.56mm inactivas"
#. ~ Description for inactive 5.56mm military turret
#: data/mods/Modular_Turrets/items.json
@@ -228522,9 +228994,9 @@ msgstr ""
#: data/mods/Modular_Turrets/items.json
msgid "inactive military flamethrower turret"
msgid_plural "inactive military flamethrower turrets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "torreta lanzallamas militar inactiva"
+msgstr[1] "torretas lanzallamas militares inactivas"
+msgstr[2] "torretas lanzallamas militares inactivas"
#. ~ Description for inactive military flamethrower turret
#: data/mods/Modular_Turrets/items.json
@@ -228542,9 +229014,9 @@ msgstr ""
#: data/mods/Modular_Turrets/items.json
msgid "inactive advanced laser turret"
msgid_plural "inactive advanced laser turrets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "torreta láser avanzada inactiva"
+msgstr[1] "torretas láser avanzadas inactivas"
+msgstr[2] "torretas láser avanzadas inactivas"
#. ~ Description for inactive advanced laser turret
#: data/mods/Modular_Turrets/items.json
@@ -228610,9 +229082,9 @@ msgstr ""
#: data/mods/Modular_Turrets/items.json
msgid "inactive advanced EMP turret"
msgid_plural "inactive advanced EMP turrets"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "torreta avanzada PEM inactiva"
+msgstr[1] "torretas avanzadas PEM inactivas"
+msgstr[2] "torretas avanzadas PEM inactivas"
#. ~ Description for inactive advanced EMP turret
#: data/mods/Modular_Turrets/items.json
@@ -228652,9 +229124,9 @@ msgstr ""
#: data/mods/Modular_Turrets/items.json
msgid "gaurdin gnome"
msgid_plural "gaurdin gnomes"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "guardgnomos de jardín"
+msgstr[1] "guardgnomos de jardín"
+msgstr[2] "guardgnomos de jardín"
#. ~ Description for gaurdin gnome
#: data/mods/Modular_Turrets/items.json
@@ -229119,9 +229591,9 @@ msgstr[2] "ametralladoras calibre 50 integrales"
#: data/mods/Modular_Turrets/roboguns.json
msgid "integral needle gun"
msgid_plural "integral needle guns"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "arma de clavos integral"
+msgstr[1] "armas de clavos integrales"
+msgstr[2] "armas de clavos integrales"
#: data/mods/Modular_Turrets/roboguns.json
msgid "integral 8mm firearm"
@@ -229176,9 +229648,9 @@ msgstr ""
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
msgid "necco corpse"
msgid_plural "necco corpses"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "cadáver de necco"
+msgstr[1] "cadáveres de necco"
+msgstr[2] "cadáveres de necco"
#. ~ Description for necco corpse
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
@@ -229293,9 +229765,9 @@ msgstr ""
#: data/mods/My_Sweet_Cataclysm/sweet_items.json
msgid "SugarKin flyer"
msgid_plural "SugarKin flyers"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "folleto SugarKin"
+msgstr[1] "folletos SugarKin"
+msgstr[2] "folletos SugarKin"
#. ~ Description for {'str': 'SugarKin flyer'}
#: data/mods/My_Sweet_Cataclysm/sweet_items.json
@@ -229327,9 +229799,9 @@ msgstr ""
#: data/mods/My_Sweet_Cataclysm/sweet_med.json
msgid "caramel ointment"
msgid_plural "caramel ointments"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "pomada de caramelo"
+msgstr[1] "pomadas de caramelo"
+msgstr[2] "pomadas de caramelo"
#. ~ Description for caramel ointment
#: data/mods/My_Sweet_Cataclysm/sweet_med.json
@@ -229652,10 +230124,24 @@ msgid ""
"human candy! Are you a real monster? Will you be able to devour it all?\""
msgstr ""
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "marshmallow"
+msgid_plural "marshmallows"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "shlop."
msgstr ""
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "gummy"
+msgid_plural "gummies"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "pop."
msgstr ""
@@ -232160,6 +232646,15 @@ msgid ""
"city size set to 1 and spacing set to 8."
msgstr ""
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "SaveLoad Lua Test"
+msgstr ""
+
+#. ~ Description for SaveLoad Lua Test
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "Mod for testing Lua save/load API."
+msgstr ""
+
#: data/mods/sees_player_hitbutton/modinfo.json
msgid "sees-player icon, HitButton_iso"
msgstr ""
@@ -232182,6 +232677,79 @@ msgid ""
"retrodays tileset."
msgstr ""
+#: data/mods/smart_house_remotes/item.json
+msgid "smart house remote"
+msgid_plural "smart house remotes"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'smart house remote'}
+#: data/mods/smart_house_remotes/item.json
+msgid ""
+"A small remote with lcd display used to control garage doors and window "
+"curtains. Completely useless now, unless you manage to restore power to the"
+" house."
+msgstr ""
+
+#: data/mods/smart_house_remotes/iuse.json
+msgid "Control doors and shutters"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Open curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Close curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Raise garage door"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Lower garage door"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's not enough grid charge.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Low Current At Endpoint"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when player is too far away from the area.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Signal"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's nothing to activate.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Endpoints Available"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "The remote beeps quietly."
+msgstr ""
+
+#. ~ Title of the menu prompting player to select what to activate with the
+#. remote.
+#. Typically it's doors, garage doors or window curtains.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Select endpoint"
+msgstr ""
+
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Smart House Remotes"
+msgstr ""
+
+#. ~ Description for Smart House Remotes
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Add remotes for controlling garage doors and window curtains."
+msgstr ""
+
#: data/mods/speedydex/modinfo.json
msgid "SpeedyDex"
msgstr ""
@@ -233701,6 +234269,14 @@ msgstr "Alternar Modo Debug"
msgid "Debug Menu"
msgstr "Modo Debug"
+#: data/raw/keybindings/keybindings.json
+msgid "Lua Console"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Reload Lua Code"
+msgstr ""
+
#: data/raw/keybindings/keybindings.json
msgid "View Scentmap"
msgstr "Ver Mapa de Olor"
@@ -234256,6 +234832,26 @@ msgstr ""
msgid "Add new page"
msgstr ""
+#: data/raw/keybindings/keybindings.json
+msgid "Edit command"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History up"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History down"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the top"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the bottom"
+msgstr ""
+
#: data/raw/keybindings/messages.json
msgid "Toggle wide display"
msgstr ""
@@ -234414,7 +235010,31 @@ msgstr "Establecer modos de torreta"
#: src/achievement.cpp
#, c-format
-msgid "Attain %s skill level of %i (%i/%i)."
+msgid "Kill at least %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Don't kill even a single %s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Kill no more than %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+msgid " (failed)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Attain skill level of %i in %s (%i/%i)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Stay at or below skill level of %i in %s (%i/%i)"
msgstr ""
#: src/achievement.cpp
@@ -240132,6 +240752,30 @@ msgstr "aábcdeéfghiíjklmnñoópqrstuúüvwxyz"
msgid "に坂索トし荷測のンおク妙免イロコヤ梅棋厚れ表幌"
msgstr "に坂索トし荷測のンおク妙免イロコヤ梅棋厚れ表幌"
+#: src/catalua_console.cpp
+msgid "Press Ctrl+S to run script, press Esc to cancel"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press arrow keys to navigate text input"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to add new line"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to enter/edit command, Esc to quit"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Up/Down arrows to select from history"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press PgUp/PgDn/Home/End to scroll output window"
+msgstr ""
+
#: src/character.cpp src/debug_menu.cpp src/game.cpp src/iuse.cpp
#: src/npctrade.cpp
msgid "You"
@@ -245050,6 +245694,10 @@ msgstr "Información..."
msgid "Change [b]attery charge"
msgstr ""
+#: src/debug_menu.cpp
+msgid "Export [j]son template"
+msgstr ""
+
#: src/debug_menu.cpp
msgid "Vehicle…"
msgstr ""
@@ -245166,6 +245814,10 @@ msgstr "Salir a menú principal"
msgid "Player…"
msgstr "Jugador..."
+#: src/debug_menu.cpp
+msgid "Lua console"
+msgstr ""
+
#: src/debug_menu.cpp
msgid ""
"Debug Functions - Manipulate the fabric of reality!\n"
@@ -246039,6 +246691,10 @@ msgstr "Ahí no hay un vehículo."
msgid "By how much? (in kJ, negative to discharge)"
msgstr ""
+#: src/debug_menu.cpp
+msgid "JSON template written to debug.log"
+msgstr ""
+
#: src/dependency_tree.cpp
msgid "Missing Dependency(ies): "
msgstr ""
@@ -250497,21 +251153,19 @@ msgstr ""
#: src/game.cpp
#, c-format
-msgid "Stepping into that %1$s looks risky, but you enter anyway."
+msgid "Stepping into that %1$s looks risky. %2$s"
msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Run into it if you wish to enter "
-"anyway."
+msgid "But you enter anyway."
msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Crouch and move into it if you wish to"
-" enter anyway."
+msgid "Run into it if you wish to enter anyway."
+msgstr ""
+
+#: src/game.cpp
+msgid "Crouch and move into it if you wish to enter anyway."
msgstr ""
#: src/game.cpp
@@ -258668,6 +259322,11 @@ msgstr "¡Te sacan el/a %s de la mano!"
msgid "You try to feed the %s some %s, but it vanishes!"
msgstr "Intentás darle al/a %s de comer un poco de %s, ¡pero desaparece!"
+#: src/iuse.cpp
+#, c-format
+msgid "You reach for the %s, but it recoils away from you!"
+msgstr ""
+
#: src/iuse.cpp
msgid "You want to feed it the dog food, but it bites your fingers!"
msgstr "Querés darle la comida para perros, pero ¡te muerde los dedos!"
@@ -264632,6 +265291,11 @@ msgstr ""
msgid "Create World"
msgstr "Crear Mundo"
+#. ~ Marker for worlds that need Lua in game builds without Lua
+#: src/main_menu.cpp src/worldfactory.cpp
+msgid "Needs Lua!"
+msgstr ""
+
#: src/main_menu.cpp
msgid "Bugs? Suggestions? Use links in MOTD to report them."
msgstr "¿Bugs? ¿Sugerencias? Usa los links del MOTD para reportar."
@@ -264870,6 +265534,17 @@ msgstr ""
msgid "Unable to make graphics directory. Check permissions."
msgstr ""
+#: src/main_menu.cpp
+msgid ""
+"You are running x32 build of the game on a x64 operating system. This means"
+" the game will NOT be able to access all memory, and you may experience "
+"random out-of-memory crashes. Consider obtaining a x64 build of the game to"
+" avoid that, but if you *really* want to be running x32 build of the game "
+"for some reason (or don't have a choice), you may want to lower your memory "
+"usage by disabling tileset, soundpack and mods and increasing autosave "
+"frequency."
+msgstr ""
+
#: src/main_menu.cpp
msgid "Really quit?"
msgstr "¿Seguro que quiere salir?"
@@ -264900,6 +265575,13 @@ msgstr "¿Seguro que quieres borrar %s?"
msgid "Sorry, something went wrong."
msgstr "Perdón, algo no funcionó."
+#. ~ Error when attempting to load a world whose mods depend on Lua
+#. ~ on game build that doesn't have Lua. %s = world name.
+#: src/main_menu.cpp
+#, c-format
+msgid "%s needs game build with Lua support!"
+msgstr ""
+
#. ~ %s = world name
#: src/main_menu.cpp
#, c-format
@@ -268654,6 +269336,15 @@ msgstr[2] ""
msgid "Mod version"
msgstr "Mod versión"
+#: src/mod_manager_ui.cpp
+#, c-format
+msgid "%s: API version %s\n"
+msgstr ""
+
+#: src/mod_manager_ui.cpp
+msgid "Needs Lua"
+msgstr ""
+
#: src/mod_manager_ui.cpp
msgid "Mod info path"
msgstr ""
@@ -271674,13 +272365,6 @@ msgstr ""
msgid "Focus trends towards:"
msgstr "Enfocar las tendencias hacia:"
-#: src/mtype.cpp
-msgid "human"
-msgid_plural "humans"
-msgstr[0] "humano"
-msgstr[1] "humanos"
-msgstr[2] "humanos"
-
#: src/mutation.cpp
#, c-format
msgid "Your %s is pushed off!"
@@ -274332,6 +275016,14 @@ msgstr ""
msgid "Messages related to SDL, tiles, tilesets and sound."
msgstr ""
+#: src/options.cpp
+msgid "Lua"
+msgstr ""
+
+#: src/options.cpp
+msgid "Messages from Lua scripts."
+msgstr ""
+
#: src/options.cpp
msgid "General"
msgstr "General"
@@ -275541,6 +276233,16 @@ msgstr ""
"Es la cantidad de tiempo que dura la pausa entre los frames de una "
"animación, medido en ms."
+#: src/options.cpp
+msgid "Draw bullets as lines"
+msgstr ""
+
+#: src/options.cpp
+msgid ""
+"If true, bullets are drawn as lines of images, and the animation lasts only "
+"one frame."
+msgstr ""
+
#: src/options.cpp
msgid "Blinking effects speed"
msgstr ""
@@ -275619,64 +276321,77 @@ msgid "Font height"
msgstr "Altura de fuente de texto"
#: src/options.cpp
-msgid "Set the font height. Requires restart."
+msgid "Set the font height. Requires restart."
msgstr ""
+"Establece la altura de la fuente de texto. Requiere reiniciar el juego."
#: src/options.cpp
msgid "Font size"
msgstr "Tamaño de fuente de texto"
#: src/options.cpp
-msgid "Set the font size. Requires restart."
-msgstr ""
+msgid "Set the font size. Requires restart."
+msgstr "Establece el tamaño de fuente de texto. Requiere reiniciar el juego."
#: src/options.cpp
msgid "Map font width"
msgstr "Anchura de fuente de texto del mapa"
#: src/options.cpp
-msgid "Set the map font width. Requires restart."
+msgid "Set the map font width. Requires restart."
msgstr ""
+"Establece la anchura de la fuente de texto del mapa. Requiere reiniciar el "
+"juego."
#: src/options.cpp
msgid "Map font height"
msgstr "Altura de fuente de texto del mapa"
#: src/options.cpp
-msgid "Set the map font height. Requires restart."
+msgid "Set the map font height. Requires restart."
msgstr ""
+"Establece la altura de la fuente de texto del mapa. Requiere reiniciar el "
+"juego."
#: src/options.cpp
msgid "Map font size"
msgstr "Tamaño de fuente de texto del mapa"
#: src/options.cpp
-msgid "Set the map font size. Requires restart."
+msgid "Set the map font size. Requires restart."
msgstr ""
+"Establece el tamaño de fuente de texto del mapa. Requiere reiniciar el "
+"juego."
#: src/options.cpp
msgid "Overmap font width"
msgstr "Anchura de fuente de texto sobre el mapa"
#: src/options.cpp
-msgid "Set the overmap font width. Requires restart."
+msgid "Set the overmap font width. Requires restart."
msgstr ""
+"Establece la anchura de la fuente de texto sobre el mapa. Requiere reiniciar"
+" el juego."
#: src/options.cpp
msgid "Overmap font height"
msgstr "Altura de fuente de texto sobre el mapa"
#: src/options.cpp
-msgid "Set the overmap font height. Requires restart."
+msgid "Set the overmap font height. Requires restart."
msgstr ""
+"Establece la altura de la fuente de texto sobre el mapa. Requiere reiniciar "
+"el juego."
#: src/options.cpp
msgid "Overmap font size"
msgstr "Tamaño de fuente de texto sobre el mapa"
#: src/options.cpp
-msgid "Set the overmap font size. Requires restart."
+msgid "Set the overmap font size. Requires restart."
msgstr ""
+"Establece el tamaño de fuente de texto sobre el mapa. Requiere reiniciar el "
+"juego."
#: src/options.cpp
msgid "Enable ASCII art in item descriptions"
@@ -283486,6 +284201,11 @@ msgstr ""
msgid " [%s]"
msgstr ""
+#. ~ Tag for mods that use Lua in game builds without Lua.
+#: src/worldfactory.cpp
+msgid "(Needs Lua) "
+msgstr ""
+
#: src/worldfactory.cpp
msgid "N/A"
msgstr "N/D"
diff --git a/lang/po/fr.po b/lang/po/fr.po
index dec457e2125a..6b8d44f9d14d 100644
--- a/lang/po/fr.po
+++ b/lang/po/fr.po
@@ -1,12 +1,12 @@
#
# Translators:
-# Coolthulhu , 2022
+# Coolthulhu , 2023
#
msgid ""
msgstr ""
"Project-Id-Version: cataclysm-bn\n"
-"POT-Creation-Date: 2023-08-03 04:45+0000\n"
-"Last-Translator: Coolthulhu , 2022\n"
+"POT-Creation-Date: 2023-09-15 13:27+0000\n"
+"Last-Translator: Coolthulhu , 2023\n"
"Language-Team: French (https://app.transifex.com/bn-team/teams/113585/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1516,10 +1516,18 @@ msgstr ""
msgid "[Combat] One Down, Billions to Go…"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] The Undertaker"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Rude Awakening"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] Pacifist"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Decamate"
msgstr ""
@@ -4003,10 +4011,25 @@ msgstr ""
#: data/json/bionics.json data/json/items/bionics.json
msgid ""
"Installed within you is a perpetual generator powered by nonsensoleum. When"
-" activated it's power gen doubles. If you are seeing this, you'd better be "
+" activated its power gen doubles. If you are seeing this, you'd better be "
"debugging."
msgstr ""
+#: data/json/bionics.json data/json/items/bionics.json
+msgid "Debug Fuel Cell CBM"
+msgid_plural "Debug Fuel Cell CBMs"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'Debug Fuel Cell CBM'}
+#: data/json/bionics.json data/json/items/bionics.json
+msgid ""
+"The power of the sun, in the palm of my hand! Installed within you is a "
+"perpetual generator powered by nonsensoleum. When activated its power gen "
+"doubles. If you are seeing this, you'd better be debugging."
+msgstr ""
+
#: data/json/body_parts.json
msgid "appendix"
msgstr "appendice"
@@ -8241,6 +8264,17 @@ msgstr ""
msgid "You're winded."
msgstr ""
+#: data/json/effects.json
+msgid "Bronchospasms"
+msgstr ""
+
+#. ~ Description of effect 'Bronchospasms'.
+#: data/json/effects.json
+msgid ""
+"Something in the air is making it harder to breathe, aggravating your "
+"asthma. Increases the chance of suffering an asthma attack."
+msgstr ""
+
#: data/json/effects.json
msgid "The ceiling collapses on you!"
msgstr "Le plafond s'effondre sur vous!"
@@ -22799,34 +22833,98 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+#: data/json/species.json
+msgid "mammal"
+msgid_plural "mammals"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'mammal'}
#: data/json/species.json
msgid "a mammal"
msgstr ""
+#: data/json/species.json
+msgid "amphibian"
+msgid_plural "amphibians"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'amphibian'}
#: data/json/species.json
msgid "an amphibian"
msgstr ""
+#: data/json/species.json
+msgid "bird"
+msgid_plural "birds"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'bird'}
#: data/json/species.json
msgid "a bird"
msgstr ""
+#: data/json/species.json
+msgid "reptile"
+msgid_plural "reptiles"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'reptile'}
#: data/json/species.json
msgid "a reptile"
msgstr ""
+#: data/json/species.json
+msgid "fish"
+msgid_plural "fish"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str_sp': 'fish'}
#: data/json/species.json
msgid "a fish"
msgstr ""
+#: data/json/species.json
+msgid "mutant"
+msgid_plural "mutants"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'mutant'}
#: data/json/species.json
msgid "a mutant"
msgstr ""
+#: data/json/species.json
+msgid "nether creature"
+msgid_plural "nether creatures"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'nether creature'}
#: data/json/species.json
msgid "a nether creature"
msgstr ""
+#: data/json/species.json data/json/monsters/slimes.json
+msgid "blob"
+msgid_plural "blobs"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'blob'}
#: data/json/species.json
msgid "a blob"
msgstr ""
@@ -22835,30 +22933,86 @@ msgstr ""
msgid "plop."
msgstr ""
+#: data/json/species.json
+msgid "fungus"
+msgid_plural "fungi"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'fungus', 'str_pl': 'fungi'}
#: data/json/species.json
msgid "a fungus"
msgstr ""
+#: data/json/species.json
+msgid "leech plant"
+msgid_plural "leech plants"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'leech plant'}
#: data/json/species.json
msgid "a leech plant"
msgstr ""
+#: data/json/species.json
+msgid "insect"
+msgid_plural "insects"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'insect'}
#: data/json/species.json
msgid "an insect"
msgstr ""
+#: data/json/species.json
+msgid "spider"
+msgid_plural "spiders"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'spider'}
#: data/json/species.json
msgid "a spider"
msgstr ""
+#: data/json/species.json
+msgid "plant"
+msgid_plural "plants"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'plant'}
#: data/json/species.json
msgid "a plant"
msgstr ""
+#: data/json/species.json
+msgid "mollusk"
+msgid_plural "mollusks"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'mollusk'}
#: data/json/species.json
msgid "a mollusk"
msgstr ""
+#: data/json/species.json
+msgid "worm"
+msgid_plural "worms"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'worm'}
#: data/json/species.json
msgid "a worm"
msgstr ""
@@ -22867,6 +23021,15 @@ msgstr ""
msgid "rustle."
msgstr ""
+#: data/json/species.json data/json/monsters/zed-classic.json
+#: data/json/npcs/talk_tags.json
+msgid "zombie"
+msgid_plural "zombies"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'zombie'}
#: data/json/species.json
msgid "a zombie"
msgstr ""
@@ -22875,6 +23038,14 @@ msgstr ""
msgid "shuffling."
msgstr ""
+#: data/json/species.json
+msgid "robot"
+msgid_plural "robots"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'robot'}
#: data/json/species.json
msgid "a robot"
msgstr ""
@@ -22883,18 +23054,56 @@ msgstr ""
msgid "mechanical whirring."
msgstr ""
+#: data/json/species.json data/json/npcs/talk_tags.json
+msgid "horror"
+msgid_plural "horrors"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'horror'}
#: data/json/species.json
msgid "a horror"
msgstr ""
+#: data/json/species.json
+msgid "abberation"
+msgid_plural "abberations"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'abberation'}
#: data/json/species.json
msgid "an aberration"
msgstr ""
+#: data/json/species.json
+msgid "hallucination"
+msgid_plural "hallucinations"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/json/species.json src/mtype.cpp
+msgid "human"
+msgid_plural "humans"
+msgstr[0] "humain"
+msgstr[1] "humains"
+msgstr[2] "humains"
+
+#. ~ Description for {'str': 'human'}
#: data/json/species.json
msgid "a human"
msgstr ""
+#: data/json/species.json
+msgid "unknown species"
+msgid_plural "unknown species"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/json/speech.json data/mods/Aftershock/speech.json
#: data/mods/CrazyCataclysm/crazy_speech.json
msgid "\"Hello?\""
@@ -49955,11 +50164,9 @@ msgstr[2] "20x66mm flechettes, fait main"
#. flechettes, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless flechette rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless flechette rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
-"Une cartouche de contrebande qui copie le modèle Rivtech des 20x66mm "
-"fléchettes. Étant sans étui on ne peut les désassembler ou les recharger."
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm buckshot, handmade"
@@ -49971,11 +50178,9 @@ msgstr[2] ""
#. ~ Description for {'str': '20x66mm buckshot, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless buckshot rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless buckshot rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
-"Une cartouche de contrebande qui copie le modèle Rivtech des 20x66mm "
-"chevrotine. Étant sans étui on ne peut les désassembler ou les recharger."
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm slug, handmade"
@@ -49988,11 +50193,9 @@ msgstr[2] "cartouches de 20x66mm, fait main"
#. slugs, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless solid projectile "
-"rounds. Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless solid projectile rounds. "
+"Being caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
-"Une cartouche de contrebande qui copie le modèle Rivtech des 20x66mm balle. "
-"Étant sans étui on ne peut les désassembler ou les recharger."
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm explosive"
@@ -51804,20 +52007,60 @@ msgstr ""
" et cacher les mouvements de troupes."
#: data/json/items/ammo/8x40mm.json
-msgid "bootleg 8x40mm JHP"
-msgid_plural "bootleg 8x40mm JHPs"
+msgid "8x40mm JHP, handmade"
+msgid_plural "8x40mm JHP, handmades"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
-#. ~ Description for {'str': 'bootleg 8x40mm JHP'}
+#. ~ Description for {'str': '8x40mm JHP, handmade'}
#: data/json/items/ammo/8x40mm.json
msgid ""
-"Bootleg duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
+"Handmade duplicates of Rivtech 8x40mm JHP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm caseless, handmade"
+msgid_plural "8x40mm caseless, handmades"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': '8x40mm caseless, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
"rounds, these cannot be disassembled or reloaded."
msgstr ""
-"Duplication de contrebande de balles 8x40mm sans étui. Étant des balles sans"
-" étui, elles ne peuvent pas être désassemblées ou rechargées."
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm HVP, handmade"
+msgid_plural "8x40mm HVP, handmades"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': '8x40mm HVP, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm HVP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm tracer, handmade"
+msgid_plural "8x40mm tracer, handmades"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': '8x40mm tracer, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm tracer rounds. Being caseless rounds,"
+" these cannot be disassembled or reloaded."
+msgstr ""
#. ~ Description for {'str_sp': '8x40mm caseless'}
#: data/json/items/ammo/8x40mm.json
@@ -52235,49 +52478,49 @@ msgstr ""
"aucun dégât."
#: data/json/items/ammo/rpg.json
-msgid "PG-7VL 93mm rocket"
-msgid_plural "PG-7VL 93mm rockets"
+msgid "PG-7VL RPG-7 rocket"
+msgid_plural "PG-7VL RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
-#. ~ Description for PG-7VL 93mm rocket
+#. ~ Description for PG-7VL RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "93mm single-stage high-explosive ammunition for the RPG-7."
msgstr "Munition 93mm hautement explosive pour RPG-7."
#: data/json/items/ammo/rpg.json
-msgid "PG-7VR 64mm/105mm rocket"
-msgid_plural "PG-7VR 64mm/105mm rockets"
+msgid "PG-7VR RPG-7 rocket"
+msgid_plural "PG-7VR RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
-#. ~ Description for PG-7VR 64mm/105mm rocket
+#. ~ Description for PG-7VR RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "64mm/105mm high-explosive tandem ammunition for the RPG-7."
msgstr "Munition couplée 64mm/105mm hautement explosive pour RPG-7."
#: data/json/items/ammo/rpg.json
-msgid "TBG-7V 105mm rocket"
-msgid_plural "TBG-7V 105mm rockets"
+msgid "TBG-7V RPG-7 rocket"
+msgid_plural "TBG-7V RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
-#. ~ Description for TBG-7V 105mm rocket
+#. ~ Description for TBG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "105mm thermobaric ammunition for the RPG-7."
msgstr "munition thermobarique 105mm pour le RPG-7"
#: data/json/items/ammo/rpg.json
-msgid "OG-7V 40mm rocket"
-msgid_plural "OG-7V 40mm rockets"
+msgid "OG-7V RPG-7 rocket"
+msgid_plural "OG-7V RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
-#. ~ Description for OG-7V 40mm rocket
+#. ~ Description for OG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid ""
"40mm high-explosive fragmentation antipersonnel ammunition for the RPG-7."
@@ -77196,6 +77439,54 @@ msgid ""
"A pickled egg. Rather salty, but tastes good and lasts for a long time."
msgstr ""
+#: data/json/items/comestibles/egg.json
+msgid "salsify omelette"
+msgid_plural "salsify omelette"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str_sp': 'salsify omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A salsify omelette."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "wild veggetable omelette"
+msgid_plural "wild veggetable omelette"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str_sp': 'wild veggetable omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with wild vegetables."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "mushroom omelette"
+msgid_plural "mushroom omelette"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str_sp': 'mushroom omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with mushrooms."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "spanish omelette"
+msgid_plural "spanish omelette"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str_sp': 'spanish omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A spanish omelette."
+msgstr ""
+
#: data/json/items/comestibles/frozen.json
msgid "milkshake"
msgid_plural "milkshakes"
@@ -78455,6 +78746,7 @@ msgstr ""
#: data/json/items/comestibles/junkfood.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cookie"
msgid_plural "cookies"
msgstr[0] ""
@@ -81192,6 +81484,7 @@ msgstr ""
#: data/json/items/comestibles/med.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "chewing gum"
msgid_plural "chewing gum"
msgstr[0] "chewing gum"
@@ -88261,6 +88554,7 @@ msgstr "Des gaufres aux fruits avec du sirop d'érable."
#: data/json/items/comestibles/wheat.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cracker"
msgid_plural "crackers"
msgstr[0] ""
@@ -100698,6 +100992,22 @@ msgid ""
"likely evolved."
msgstr ""
+#: data/json/items/melee/spears_and_polearms.json
+msgid "makeshift glaive"
+msgid_plural "makeshift glaives"
+msgstr[0] "glaive de fortune"
+msgstr[1] "glaives de fortune"
+msgstr[2] "glaives de fortune"
+
+#. ~ Description for {'str': 'makeshift glaive'}
+#: data/json/items/melee/spears_and_polearms.json
+msgid ""
+"This is a large blade attached to a long stick. It could do a considerable "
+"amount of damage."
+msgstr ""
+"Une large lame attachée à un long bâton. Cela peux faire des dégâts "
+"considérables."
+
#: data/json/items/melee/spears_and_polearms.json
msgid "glaive"
msgid_plural "glaives"
@@ -107483,7 +107793,7 @@ msgstr ""
#. ~ Use action need_charges_msg for {'str': 'refillable lighter'}.
#: data/json/items/tool/fire.json src/activity_actor.cpp src/explosion.cpp
-#: src/gates.cpp
+#: src/gates.cpp src/iuse.cpp
msgid "Nothing happens."
msgstr "Rien ne se passe."
@@ -109560,22 +109870,6 @@ msgid ""
"from uncertain sources like a river may be dirty."
msgstr ""
-#: data/json/items/tool/misc.json
-msgid "makeshift glaive"
-msgid_plural "makeshift glaives"
-msgstr[0] "glaive de fortune"
-msgstr[1] "glaives de fortune"
-msgstr[2] "glaives de fortune"
-
-#. ~ Description for {'str': 'makeshift glaive'}
-#: data/json/items/tool/misc.json
-msgid ""
-"This is a large blade attached to a long stick. It could do a considerable "
-"amount of damage."
-msgstr ""
-"Une large lame attachée à un long bâton. Cela peux faire des dégâts "
-"considérables."
-
#: data/json/items/tool/misc.json
msgid "mind splicer kit"
msgid_plural "mind splicer kits"
@@ -121358,13 +121652,6 @@ msgstr ""
"vivre sous terre. Il grouille sous le sol et son nom est dû au fait qu'on le"
" rencontre souvent dans les égouts."
-#: data/json/monsters/slimes.json
-msgid "blob"
-msgid_plural "blobs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
#. ~ Description for {'str': 'blob'}
#: data/json/monsters/slimes.json
msgid ""
@@ -122065,13 +122352,6 @@ msgid ""
"envelope of scar tissue."
msgstr ""
-#: data/json/monsters/zed-classic.json data/json/npcs/talk_tags.json
-msgid "zombie"
-msgid_plural "zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
#. ~ Description for {'str': 'zombie'}
#: data/json/monsters/zed-classic.json
msgid ""
@@ -132672,7 +132952,8 @@ msgid "I'll kill you if you don't."
msgstr "Je vous tue si vous n'obéissez pas."
#: data/json/npcs/TALK_COMMON_OTHER.json
-#: data/json/npcs/TALK_TRUE_FOODPERSON.json src/iuse.cpp
+#: data/json/npcs/TALK_TRUE_FOODPERSON.json
+#: data/mods/smart_house_remotes/main.lua src/iuse.cpp
msgid "Nevermind."
msgstr ""
@@ -140736,10 +141017,6 @@ msgstr ""
msgid "demon"
msgstr ""
-#: data/json/npcs/talk_tags.json
-msgid "horror"
-msgstr ""
-
#: data/json/npcs/talk_tags.json
msgid "indescribable beast"
msgstr ""
@@ -154084,6 +154361,16 @@ msgid ""
"coming no further. Go away."
msgstr ""
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"I was sent here by the traders at the refugee center. They told me to "
+"deliver this hard drive to you."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "The traders also mentioned you were looking for help."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "Wait! What??"
msgstr ""
@@ -154120,6 +154407,20 @@ msgstr ""
msgid "Alright, I'm leaving."
msgstr ""
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"Understood. Please drop the drive on the box embedded beneath the intercom."
+" You are welcome to leave afterwards."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "[Do as the Intercom Says]"
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "Didn't bring the hard drive now, let me return with it."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "No. Now leave."
msgstr ""
@@ -184865,6 +185166,14 @@ msgid ""
"constant jet of warm air to heat an enclosed space."
msgstr ""
+#: data/mods/Aftershock/mobs/species.json
+msgid "intelligent animal"
+msgid_plural "intelligent animals"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'intelligent animal'}
#: data/mods/Aftershock/mobs/species.json
msgid "an intelligent animal created by man before the Cataclysm"
msgstr ""
@@ -195030,6 +195339,14 @@ msgstr ""
msgid "DinoLab Operating Theater Access Control"
msgstr ""
+#: data/mods/DinoMod/monsters/dinosaur.json
+msgid "dinosaur"
+msgid_plural "dinosaurs"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'dinosaur'}
#: data/mods/DinoMod/monsters/dinosaur.json
msgid "a dinosaur"
msgstr ""
@@ -207813,6 +208130,11 @@ msgstr ""
msgid "RUNES"
msgstr ""
+#. ~ Crafting recipes subcategory of 'ENCHANTED' category
+#: data/mods/Magiclysm/qualities.json
+msgid "ENCHANTING"
+msgstr ""
+
#: data/mods/Magiclysm/qualities.json
msgid "mana focusing"
msgstr ""
@@ -207940,6 +208262,27 @@ msgctxt "start_name"
msgid "Wizard's Retreat Vacation"
msgstr ""
+#: data/mods/Magiclysm/species.json
+msgid "magical beast"
+msgid_plural "magical beasts"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "dragon"
+msgid_plural "dragons"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "lizardfolk"
+msgid_plural "lizardfolk"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/Magiclysm/start_locations.json
msgid "Wizard's Secret Basement Study"
msgstr ""
@@ -208116,6 +208459,42 @@ msgid ""
"lights."
msgstr ""
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Bless"
+msgstr ""
+
+#. ~ Description for {'str': 'Bless'}
+#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "A spell of blessing that gives you energy and boosts your abilities."
+msgstr ""
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Holy Blade"
+msgstr ""
+
+#. ~ Description for Holy Blade
+#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
+#. Holy Blade'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "This blade of light will cut through any evil it makes contact with!"
+msgstr ""
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Spiritual Armor"
+msgstr ""
+
+#. ~ Description for Spiritual Armor
+#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
+#. of Spiritual Armor'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid ""
+"Evil will not make it through your defenses if your faith is strong enough!"
+msgstr ""
+
#: data/mods/Magiclysm/Spells/biomancer.json
msgid "Cure Light Wounds"
msgstr ""
@@ -209579,17 +209958,6 @@ msgid ""
"harmless."
msgstr ""
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Bless"
-msgstr ""
-
-#. ~ Description for {'str': 'Bless'}
-#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "A spell of blessing that gives you energy and boosts your abilities."
-msgstr ""
-
#: data/mods/Magiclysm/Spells/technomancer.json
#: data/mods/Magiclysm/effects/effects.json
msgid "Invisibility"
@@ -209607,31 +209975,6 @@ msgstr ""
msgid "To the outside world, your body fades away and you cease to exist!"
msgstr ""
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Holy Blade"
-msgstr ""
-
-#. ~ Description for Holy Blade
-#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
-#. Holy Blade'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "This blade of light will cut through any evil it makes contact with!"
-msgstr ""
-
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Spiritual Armor"
-msgstr ""
-
-#. ~ Description for Spiritual Armor
-#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
-#. of Spiritual Armor'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid ""
-"Evil will not make it through your defenses if your faith is strong enough!"
-msgstr ""
-
#: data/mods/Magiclysm/Spells/technomancer.json
msgid "Lamp"
msgstr ""
@@ -211907,6 +212250,20 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "heavy sledge hammer +1"
+msgid_plural "heavy sledge hammers +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "heavy sledge hammer +2"
+msgid_plural "heavy sledge hammers +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "warhammer +1"
msgid_plural "warhammer +1s"
@@ -212146,6 +212503,7 @@ msgstr[1] ""
msgstr[2] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +1"
msgid_plural "crowbar +1s"
msgstr[0] ""
@@ -212153,6 +212511,7 @@ msgstr[1] ""
msgstr[2] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +2"
msgid_plural "crowbar +2s"
msgstr[0] ""
@@ -212216,6 +212575,7 @@ msgstr[1] ""
msgstr[2] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +1"
msgid_plural "hunting knife +1s"
msgstr[0] ""
@@ -212223,6 +212583,7 @@ msgstr[1] ""
msgstr[2] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +2"
msgid_plural "hunting knife +2s"
msgstr[0] ""
@@ -212425,6 +212786,20 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +1"
+msgid_plural "lucerne hammers +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +2"
+msgid_plural "lucerne hammers +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "Biomancer spear"
msgid_plural "Biomancer spears"
@@ -213372,6 +213747,90 @@ msgid ""
"turns into the item pictured on the front, in this case a crowbar."
msgstr ""
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +1"
+msgid_plural "bottle jacks +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +2"
+msgid_plural "bottle jacks +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +1"
+msgid_plural "scalpels +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +2"
+msgid_plural "scalpels +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +1"
+msgid_plural "butcher knives +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +2"
+msgid_plural "butcher knives +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +1"
+msgid_plural "meat cleavers +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +2"
+msgid_plural "meat cleavers +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +1"
+msgid_plural "carving knives +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +2"
+msgid_plural "carving knives +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +1"
+msgid_plural "butchering kits +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +2"
+msgid_plural "butchering kits +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/Magiclysm/items/enchanted_unarmed.json
msgid "cestus +1"
msgid_plural "cestus +1s"
@@ -214541,6 +215000,21 @@ msgid ""
"protective equipment inside."
msgstr ""
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid "Enchanter's Guidebook"
+msgid_plural "copies of Enchanter's Guidebooks"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': "Enchanter's Guidebook", 'str_pl': "copies of
+#. Enchanter's Guidebooks"}
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid ""
+"A hefty textbook on the theory and practice of magically strengthening "
+"weapons and tools."
+msgstr ""
+
#: data/mods/Magiclysm/items/spell_scrolls.json
msgid "Spell Scroll"
msgid_plural "Spell Scrolls"
@@ -215742,6 +216216,13 @@ msgid ""
"much more expensive."
msgstr ""
+#: data/mods/Magiclysm/monsters/demon_spider.json
+msgid "demon spider"
+msgid_plural "demon spiders"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid "demon spiderling"
msgid_plural "demon spiderlings"
@@ -215758,13 +216239,6 @@ msgid ""
"with venom."
msgstr ""
-#: data/mods/Magiclysm/monsters/demon_spider.json
-msgid "demon spider"
-msgid_plural "demon spiders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
#. ~ Description for demon spider
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid ""
@@ -218722,10 +219196,24 @@ msgid ""
"human candy! Are you a real monster? Will you be able to devour it all?\""
msgstr ""
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "marshmallow"
+msgid_plural "marshmallows"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "shlop."
msgstr ""
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "gummy"
+msgid_plural "gummies"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "pop."
msgstr ""
@@ -221173,6 +221661,15 @@ msgid ""
"city size set to 1 and spacing set to 8."
msgstr ""
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "SaveLoad Lua Test"
+msgstr ""
+
+#. ~ Description for SaveLoad Lua Test
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "Mod for testing Lua save/load API."
+msgstr ""
+
#: data/mods/sees_player_hitbutton/modinfo.json
msgid "sees-player icon, HitButton_iso"
msgstr ""
@@ -221195,6 +221692,79 @@ msgid ""
"retrodays tileset."
msgstr ""
+#: data/mods/smart_house_remotes/item.json
+msgid "smart house remote"
+msgid_plural "smart house remotes"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'smart house remote'}
+#: data/mods/smart_house_remotes/item.json
+msgid ""
+"A small remote with lcd display used to control garage doors and window "
+"curtains. Completely useless now, unless you manage to restore power to the"
+" house."
+msgstr ""
+
+#: data/mods/smart_house_remotes/iuse.json
+msgid "Control doors and shutters"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Open curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Close curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Raise garage door"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Lower garage door"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's not enough grid charge.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Low Current At Endpoint"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when player is too far away from the area.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Signal"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's nothing to activate.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Endpoints Available"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "The remote beeps quietly."
+msgstr ""
+
+#. ~ Title of the menu prompting player to select what to activate with the
+#. remote.
+#. Typically it's doors, garage doors or window curtains.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Select endpoint"
+msgstr ""
+
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Smart House Remotes"
+msgstr ""
+
+#. ~ Description for Smart House Remotes
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Add remotes for controlling garage doors and window curtains."
+msgstr ""
+
#: data/mods/speedydex/modinfo.json
msgid "SpeedyDex"
msgstr ""
@@ -222621,6 +223191,14 @@ msgstr "Basculer mode déboguage"
msgid "Debug Menu"
msgstr "Menu déboguage"
+#: data/raw/keybindings/keybindings.json
+msgid "Lua Console"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Reload Lua Code"
+msgstr ""
+
#: data/raw/keybindings/keybindings.json
msgid "View Scentmap"
msgstr "Voir la carte du pistage"
@@ -223176,6 +223754,26 @@ msgstr ""
msgid "Add new page"
msgstr ""
+#: data/raw/keybindings/keybindings.json
+msgid "Edit command"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History up"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History down"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the top"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the bottom"
+msgstr ""
+
#: data/raw/keybindings/messages.json
msgid "Toggle wide display"
msgstr ""
@@ -223334,7 +223932,31 @@ msgstr "Configurer modes de ciblage de la tourelle"
#: src/achievement.cpp
#, c-format
-msgid "Attain %s skill level of %i (%i/%i)."
+msgid "Kill at least %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Don't kill even a single %s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Kill no more than %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+msgid " (failed)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Attain skill level of %i in %s (%i/%i)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Stay at or below skill level of %i in %s (%i/%i)"
msgstr ""
#: src/achievement.cpp
@@ -228994,6 +229616,30 @@ msgstr ""
msgid "に坂索トし荷測のンおク妙免イロコヤ梅棋厚れ表幌"
msgstr ""
+#: src/catalua_console.cpp
+msgid "Press Ctrl+S to run script, press Esc to cancel"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press arrow keys to navigate text input"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to add new line"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to enter/edit command, Esc to quit"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Up/Down arrows to select from history"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press PgUp/PgDn/Home/End to scroll output window"
+msgstr ""
+
#: src/character.cpp src/debug_menu.cpp src/game.cpp src/iuse.cpp
#: src/npctrade.cpp
msgid "You"
@@ -233846,6 +234492,10 @@ msgstr ""
msgid "Change [b]attery charge"
msgstr ""
+#: src/debug_menu.cpp
+msgid "Export [j]son template"
+msgstr ""
+
#: src/debug_menu.cpp
msgid "Vehicle…"
msgstr ""
@@ -233962,6 +234612,10 @@ msgstr ""
msgid "Player…"
msgstr ""
+#: src/debug_menu.cpp
+msgid "Lua console"
+msgstr ""
+
#: src/debug_menu.cpp
msgid ""
"Debug Functions - Manipulate the fabric of reality!\n"
@@ -234831,6 +235485,10 @@ msgstr "Il n'y a pas de véhicule ici."
msgid "By how much? (in kJ, negative to discharge)"
msgstr ""
+#: src/debug_menu.cpp
+msgid "JSON template written to debug.log"
+msgstr ""
+
#: src/dependency_tree.cpp
msgid "Missing Dependency(ies): "
msgstr ""
@@ -239225,21 +239883,19 @@ msgstr ""
#: src/game.cpp
#, c-format
-msgid "Stepping into that %1$s looks risky, but you enter anyway."
+msgid "Stepping into that %1$s looks risky. %2$s"
msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Run into it if you wish to enter "
-"anyway."
+msgid "But you enter anyway."
msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Crouch and move into it if you wish to"
-" enter anyway."
+msgid "Run into it if you wish to enter anyway."
+msgstr ""
+
+#: src/game.cpp
+msgid "Crouch and move into it if you wish to enter anyway."
msgstr ""
#: src/game.cpp
@@ -247252,6 +247908,11 @@ msgstr ""
msgid "You try to feed the %s some %s, but it vanishes!"
msgstr ""
+#: src/iuse.cpp
+#, c-format
+msgid "You reach for the %s, but it recoils away from you!"
+msgstr ""
+
#: src/iuse.cpp
msgid "You want to feed it the dog food, but it bites your fingers!"
msgstr "Vous essayez de nourrir le chien mais il vous mord les doigts!"
@@ -253148,6 +253809,11 @@ msgstr ""
msgid "Create World"
msgstr "Créer un monde"
+#. ~ Marker for worlds that need Lua in game builds without Lua
+#: src/main_menu.cpp src/worldfactory.cpp
+msgid "Needs Lua!"
+msgstr ""
+
#: src/main_menu.cpp
msgid "Bugs? Suggestions? Use links in MOTD to report them."
msgstr ""
@@ -253380,6 +254046,17 @@ msgstr ""
msgid "Unable to make graphics directory. Check permissions."
msgstr ""
+#: src/main_menu.cpp
+msgid ""
+"You are running x32 build of the game on a x64 operating system. This means"
+" the game will NOT be able to access all memory, and you may experience "
+"random out-of-memory crashes. Consider obtaining a x64 build of the game to"
+" avoid that, but if you *really* want to be running x32 build of the game "
+"for some reason (or don't have a choice), you may want to lower your memory "
+"usage by disabling tileset, soundpack and mods and increasing autosave "
+"frequency."
+msgstr ""
+
#: src/main_menu.cpp
msgid "Really quit?"
msgstr "Vraiment quitter?"
@@ -253410,6 +254087,13 @@ msgstr "Êtes-vous sûr de vouloir supprimer %s?"
msgid "Sorry, something went wrong."
msgstr "Désolé, il y a eu un problème."
+#. ~ Error when attempting to load a world whose mods depend on Lua
+#. ~ on game build that doesn't have Lua. %s = world name.
+#: src/main_menu.cpp
+#, c-format
+msgid "%s needs game build with Lua support!"
+msgstr ""
+
#. ~ %s = world name
#: src/main_menu.cpp
#, c-format
@@ -257140,6 +257824,15 @@ msgstr[2] ""
msgid "Mod version"
msgstr "Version du mod"
+#: src/mod_manager_ui.cpp
+#, c-format
+msgid "%s: API version %s\n"
+msgstr ""
+
+#: src/mod_manager_ui.cpp
+msgid "Needs Lua"
+msgstr ""
+
#: src/mod_manager_ui.cpp
msgid "Mod info path"
msgstr ""
@@ -260100,13 +260793,6 @@ msgstr ""
msgid "Focus trends towards:"
msgstr ""
-#: src/mtype.cpp
-msgid "human"
-msgid_plural "humans"
-msgstr[0] "humain"
-msgstr[1] "humains"
-msgstr[2] "humains"
-
#: src/mutation.cpp
#, c-format
msgid "Your %s is pushed off!"
@@ -262737,6 +263423,14 @@ msgstr ""
msgid "Messages related to SDL, tiles, tilesets and sound."
msgstr ""
+#: src/options.cpp
+msgid "Lua"
+msgstr ""
+
+#: src/options.cpp
+msgid "Messages from Lua scripts."
+msgstr ""
+
#: src/options.cpp
msgid "General"
msgstr "Général"
@@ -263867,6 +264561,16 @@ msgstr "Vitesse d'animation"
msgid "The amount of time to pause between animation frames in ms."
msgstr "Temps de pause entre chaque image d'animation en ms."
+#: src/options.cpp
+msgid "Draw bullets as lines"
+msgstr ""
+
+#: src/options.cpp
+msgid ""
+"If true, bullets are drawn as lines of images, and the animation lasts only "
+"one frame."
+msgstr ""
+
#: src/options.cpp
msgid "Blinking effects speed"
msgstr ""
@@ -263941,7 +264645,7 @@ msgid "Font height"
msgstr ""
#: src/options.cpp
-msgid "Set the font height. Requires restart."
+msgid "Set the font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -263949,7 +264653,7 @@ msgid "Font size"
msgstr ""
#: src/options.cpp
-msgid "Set the font size. Requires restart."
+msgid "Set the font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -263957,7 +264661,7 @@ msgid "Map font width"
msgstr ""
#: src/options.cpp
-msgid "Set the map font width. Requires restart."
+msgid "Set the map font width. Requires restart."
msgstr ""
#: src/options.cpp
@@ -263965,7 +264669,7 @@ msgid "Map font height"
msgstr ""
#: src/options.cpp
-msgid "Set the map font height. Requires restart."
+msgid "Set the map font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -263973,7 +264677,7 @@ msgid "Map font size"
msgstr ""
#: src/options.cpp
-msgid "Set the map font size. Requires restart."
+msgid "Set the map font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -263981,7 +264685,7 @@ msgid "Overmap font width"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font width. Requires restart."
+msgid "Set the overmap font width. Requires restart."
msgstr ""
#: src/options.cpp
@@ -263989,7 +264693,7 @@ msgid "Overmap font height"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font height. Requires restart."
+msgid "Set the overmap font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -263997,7 +264701,7 @@ msgid "Overmap font size"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font size. Requires restart."
+msgid "Set the overmap font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -271741,6 +272445,11 @@ msgstr ""
msgid " [%s]"
msgstr ""
+#. ~ Tag for mods that use Lua in game builds without Lua.
+#: src/worldfactory.cpp
+msgid "(Needs Lua) "
+msgstr ""
+
#: src/worldfactory.cpp
msgid "N/A"
msgstr "aucun"
diff --git a/lang/po/hu.po b/lang/po/hu.po
index 9e677586fd27..d9eb7e61f5b7 100644
--- a/lang/po/hu.po
+++ b/lang/po/hu.po
@@ -1,13 +1,13 @@
#
# Translators:
-# Coolthulhu , 2023
# Péter Bodrog, 2023
+# Coolthulhu , 2023
#
msgid ""
msgstr ""
"Project-Id-Version: cataclysm-bn\n"
-"POT-Creation-Date: 2023-08-03 04:45+0000\n"
-"Last-Translator: Péter Bodrog, 2023\n"
+"POT-Creation-Date: 2023-09-15 13:27+0000\n"
+"Last-Translator: Coolthulhu , 2023\n"
"Language-Team: Hungarian (https://app.transifex.com/bn-team/teams/113585/hu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1568,10 +1568,18 @@ msgstr ""
msgid "[Combat] One Down, Billions to Go…"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] The Undertaker"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Rude Awakening"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] Pacifist"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Decamate"
msgstr ""
@@ -4230,10 +4238,24 @@ msgstr ""
#: data/json/bionics.json data/json/items/bionics.json
msgid ""
"Installed within you is a perpetual generator powered by nonsensoleum. When"
-" activated it's power gen doubles. If you are seeing this, you'd better be "
+" activated its power gen doubles. If you are seeing this, you'd better be "
"debugging."
msgstr ""
+#: data/json/bionics.json data/json/items/bionics.json
+msgid "Debug Fuel Cell CBM"
+msgid_plural "Debug Fuel Cell CBMs"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'Debug Fuel Cell CBM'}
+#: data/json/bionics.json data/json/items/bionics.json
+msgid ""
+"The power of the sun, in the palm of my hand! Installed within you is a "
+"perpetual generator powered by nonsensoleum. When activated its power gen "
+"doubles. If you are seeing this, you'd better be debugging."
+msgstr ""
+
#: data/json/body_parts.json
msgid "appendix"
msgstr "vakbeled"
@@ -8531,6 +8553,17 @@ msgstr ""
msgid "You're winded."
msgstr "Kifulladtál."
+#: data/json/effects.json
+msgid "Bronchospasms"
+msgstr ""
+
+#. ~ Description of effect 'Bronchospasms'.
+#: data/json/effects.json
+msgid ""
+"Something in the air is making it harder to breathe, aggravating your "
+"asthma. Increases the chance of suffering an asthma attack."
+msgstr ""
+
#: data/json/effects.json
msgid "The ceiling collapses on you!"
msgstr "Rád szakad a mennyezet!"
@@ -23420,34 +23453,90 @@ msgid_plural "seeing this is a bug"
msgstr[0] ""
msgstr[1] ""
+#: data/json/species.json
+msgid "mammal"
+msgid_plural "mammals"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'mammal'}
#: data/json/species.json
msgid "a mammal"
msgstr ""
+#: data/json/species.json
+msgid "amphibian"
+msgid_plural "amphibians"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'amphibian'}
#: data/json/species.json
msgid "an amphibian"
msgstr ""
+#: data/json/species.json
+msgid "bird"
+msgid_plural "birds"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'bird'}
#: data/json/species.json
msgid "a bird"
msgstr ""
+#: data/json/species.json
+msgid "reptile"
+msgid_plural "reptiles"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'reptile'}
#: data/json/species.json
msgid "a reptile"
msgstr ""
+#: data/json/species.json
+msgid "fish"
+msgid_plural "fish"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'fish'}
#: data/json/species.json
msgid "a fish"
msgstr ""
+#: data/json/species.json
+msgid "mutant"
+msgid_plural "mutants"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'mutant'}
#: data/json/species.json
msgid "a mutant"
msgstr ""
+#: data/json/species.json
+msgid "nether creature"
+msgid_plural "nether creatures"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'nether creature'}
#: data/json/species.json
msgid "a nether creature"
msgstr ""
+#: data/json/species.json data/json/monsters/slimes.json
+msgid "blob"
+msgid_plural "blobs"
+msgstr[0] "blob"
+msgstr[1] "blob"
+
+#. ~ Description for {'str': 'blob'}
#: data/json/species.json
msgid "a blob"
msgstr ""
@@ -23456,30 +23545,79 @@ msgstr ""
msgid "plop."
msgstr ""
+#: data/json/species.json
+msgid "fungus"
+msgid_plural "fungi"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'fungus', 'str_pl': 'fungi'}
#: data/json/species.json
msgid "a fungus"
msgstr ""
+#: data/json/species.json
+msgid "leech plant"
+msgid_plural "leech plants"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'leech plant'}
#: data/json/species.json
msgid "a leech plant"
msgstr ""
+#: data/json/species.json
+msgid "insect"
+msgid_plural "insects"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'insect'}
#: data/json/species.json
msgid "an insect"
msgstr ""
+#: data/json/species.json
+msgid "spider"
+msgid_plural "spiders"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'spider'}
#: data/json/species.json
msgid "a spider"
msgstr ""
+#: data/json/species.json
+msgid "plant"
+msgid_plural "plants"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'plant'}
#: data/json/species.json
msgid "a plant"
msgstr ""
+#: data/json/species.json
+msgid "mollusk"
+msgid_plural "mollusks"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'mollusk'}
#: data/json/species.json
msgid "a mollusk"
msgstr ""
+#: data/json/species.json
+msgid "worm"
+msgid_plural "worms"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'worm'}
#: data/json/species.json
msgid "a worm"
msgstr ""
@@ -23488,6 +23626,14 @@ msgstr ""
msgid "rustle."
msgstr ""
+#: data/json/species.json data/json/monsters/zed-classic.json
+#: data/json/npcs/talk_tags.json
+msgid "zombie"
+msgid_plural "zombies"
+msgstr[0] "zombi"
+msgstr[1] "zombi"
+
+#. ~ Description for {'str': 'zombie'}
#: data/json/species.json
msgid "a zombie"
msgstr ""
@@ -23496,6 +23642,13 @@ msgstr ""
msgid "shuffling."
msgstr ""
+#: data/json/species.json
+msgid "robot"
+msgid_plural "robots"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'robot'}
#: data/json/species.json
msgid "a robot"
msgstr ""
@@ -23504,18 +23657,51 @@ msgstr ""
msgid "mechanical whirring."
msgstr ""
+#: data/json/species.json data/json/npcs/talk_tags.json
+msgid "horror"
+msgid_plural "horrors"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'horror'}
#: data/json/species.json
msgid "a horror"
msgstr ""
+#: data/json/species.json
+msgid "abberation"
+msgid_plural "abberations"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'abberation'}
#: data/json/species.json
msgid "an aberration"
msgstr ""
+#: data/json/species.json
+msgid "hallucination"
+msgid_plural "hallucinations"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/json/species.json src/mtype.cpp
+msgid "human"
+msgid_plural "humans"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'human'}
#: data/json/species.json
msgid "a human"
msgstr ""
+#: data/json/species.json
+msgid "unknown species"
+msgid_plural "unknown species"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/json/speech.json data/mods/Aftershock/speech.json
#: data/mods/CrazyCataclysm/crazy_speech.json
msgid "\"Hello?\""
@@ -50126,12 +50312,9 @@ msgstr[1] "20x66mm nyilacska, kézi öntésű"
#. flechettes, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless flechette rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless flechette rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
-"A Rivtech 20x66 mm-es hüvely nélküli páncéltörő nyilacskás lőszerének kézi "
-"gyártású kalózmásolata. Mivel hüvely nélküli lőszerről van szó, ezeket sem "
-"szétszerelni, sem újratölteni nem lehet."
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm buckshot, handmade"
@@ -50142,12 +50325,9 @@ msgstr[1] ""
#. ~ Description for {'str': '20x66mm buckshot, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless buckshot rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless buckshot rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
-"A Rivtech 20x66 mm-es hüvely nélküli lőszerének kézi gyártású kalózmásolata."
-" Mivel hüvely nélküli lőszerről van szó, ezeket sem szétszerelni, sem "
-"újratölteni nem lehet."
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm slug, handmade"
@@ -50159,12 +50339,9 @@ msgstr[1] "20x66mm dumdum golyó, kézi öntésű"
#. slugs, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless solid projectile "
-"rounds. Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless solid projectile rounds. "
+"Being caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
-"A Rivtech 20x66 mm-es hüvely nélküli dumdum lőszerének kézi gyártású "
-"kalózmásolata. Mivel hüvely nélküli lőszerről van szó, ezeket sem "
-"szétszerelni, sem újratölteni nem lehet."
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm explosive"
@@ -51890,20 +52067,56 @@ msgstr ""
"rakétarendszerhez."
#: data/json/items/ammo/8x40mm.json
-msgid "bootleg 8x40mm JHP"
-msgid_plural "bootleg 8x40mm JHPs"
+msgid "8x40mm JHP, handmade"
+msgid_plural "8x40mm JHP, handmades"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': '8x40mm JHP, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm JHP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm caseless, handmade"
+msgid_plural "8x40mm caseless, handmades"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for {'str': 'bootleg 8x40mm JHP'}
+#. ~ Description for {'str': '8x40mm caseless, handmade'}
#: data/json/items/ammo/8x40mm.json
msgid ""
-"Bootleg duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
+"Handmade duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
"rounds, these cannot be disassembled or reloaded."
msgstr ""
-"A Rivtech 8x40mm-es hüvely nélküli lőszer kalózmásolata. Mivel hüvely "
-"nélküli lőszerről van szó, ezeket sem szétszerelni, sem újratölteni nem "
-"lehet."
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm HVP, handmade"
+msgid_plural "8x40mm HVP, handmades"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': '8x40mm HVP, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm HVP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm tracer, handmade"
+msgid_plural "8x40mm tracer, handmades"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': '8x40mm tracer, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm tracer rounds. Being caseless rounds,"
+" these cannot be disassembled or reloaded."
+msgstr ""
#. ~ Description for {'str_sp': '8x40mm caseless'}
#: data/json/items/ammo/8x40mm.json
@@ -52298,45 +52511,45 @@ msgid "A tube of small paintballs. They deal virtually no damage."
msgstr "Doboznyi apró paintball, szinte semmit sem sebez."
#: data/json/items/ammo/rpg.json
-msgid "PG-7VL 93mm rocket"
-msgid_plural "PG-7VL 93mm rockets"
+msgid "PG-7VL RPG-7 rocket"
+msgid_plural "PG-7VL RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for PG-7VL 93mm rocket
+#. ~ Description for PG-7VL RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "93mm single-stage high-explosive ammunition for the RPG-7."
msgstr "93 mm-es, egylépcsős robbanó muníció az RPG-7-hez."
#: data/json/items/ammo/rpg.json
-msgid "PG-7VR 64mm/105mm rocket"
-msgid_plural "PG-7VR 64mm/105mm rockets"
+msgid "PG-7VR RPG-7 rocket"
+msgid_plural "PG-7VR RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for PG-7VR 64mm/105mm rocket
+#. ~ Description for PG-7VR RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "64mm/105mm high-explosive tandem ammunition for the RPG-7."
msgstr "64mm/105mm-es, kétlépcsős robbanó muníció az RPG-7-hez."
#: data/json/items/ammo/rpg.json
-msgid "TBG-7V 105mm rocket"
-msgid_plural "TBG-7V 105mm rockets"
+msgid "TBG-7V RPG-7 rocket"
+msgid_plural "TBG-7V RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for TBG-7V 105mm rocket
+#. ~ Description for TBG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "105mm thermobaric ammunition for the RPG-7."
msgstr "105mm-es termobárikus muníció az RPG-7-hez."
#: data/json/items/ammo/rpg.json
-msgid "OG-7V 40mm rocket"
-msgid_plural "OG-7V 40mm rockets"
+msgid "OG-7V RPG-7 rocket"
+msgid_plural "OG-7V RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for OG-7V 40mm rocket
+#. ~ Description for OG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid ""
"40mm high-explosive fragmentation antipersonnel ammunition for the RPG-7."
@@ -75858,6 +76071,50 @@ msgid ""
"A pickled egg. Rather salty, but tastes good and lasts for a long time."
msgstr "Kovászos tojás. Savanyú de finom, és szinte örökké tart."
+#: data/json/items/comestibles/egg.json
+msgid "salsify omelette"
+msgid_plural "salsify omelette"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'salsify omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A salsify omelette."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "wild veggetable omelette"
+msgid_plural "wild veggetable omelette"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'wild veggetable omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with wild vegetables."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "mushroom omelette"
+msgid_plural "mushroom omelette"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'mushroom omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with mushrooms."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "spanish omelette"
+msgid_plural "spanish omelette"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'spanish omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A spanish omelette."
+msgstr ""
+
#: data/json/items/comestibles/frozen.json
msgid "milkshake"
msgid_plural "milkshakes"
@@ -77063,6 +77320,7 @@ msgstr ""
#: data/json/items/comestibles/junkfood.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cookie"
msgid_plural "cookies"
msgstr[0] ""
@@ -79603,6 +79861,7 @@ msgstr ""
#: data/json/items/comestibles/med.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "chewing gum"
msgid_plural "chewing gum"
msgstr[0] "rágógumi"
@@ -86306,6 +86565,7 @@ msgstr ""
#: data/json/items/comestibles/wheat.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cracker"
msgid_plural "crackers"
msgstr[0] ""
@@ -98499,6 +98759,21 @@ msgid ""
"likely evolved."
msgstr ""
+#: data/json/items/melee/spears_and_polearms.json
+msgid "makeshift glaive"
+msgid_plural "makeshift glaives"
+msgstr[0] "hevenyészett pallos"
+msgstr[1] "hevenyészett pallos"
+
+#. ~ Description for {'str': 'makeshift glaive'}
+#: data/json/items/melee/spears_and_polearms.json
+msgid ""
+"This is a large blade attached to a long stick. It could do a considerable "
+"amount of damage."
+msgstr ""
+"Ez egy hosszú bot végére szerelt nagyméretű penge. Jelentős mértékű sebzést "
+"okoz."
+
#: data/json/items/melee/spears_and_polearms.json
msgid "glaive"
msgid_plural "glaives"
@@ -98634,8 +98909,8 @@ msgstr ""
msgctxt "weapon"
msgid "pike"
msgid_plural "pikes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "csuka"
+msgstr[1] "csuka"
#. ~ Description for {'ctxt': 'weapon', 'str': 'pike'}
#: data/json/items/melee/spears_and_polearms.json
@@ -105219,7 +105494,7 @@ msgstr "Csattintasz egyet az öngyújtóval."
#. ~ Use action need_charges_msg for {'str': 'refillable lighter'}.
#: data/json/items/tool/fire.json src/activity_actor.cpp src/explosion.cpp
-#: src/gates.cpp
+#: src/gates.cpp src/iuse.cpp
msgid "Nothing happens."
msgstr "Semmi sem történik."
@@ -107233,21 +107508,6 @@ msgid ""
"from uncertain sources like a river may be dirty."
msgstr ""
-#: data/json/items/tool/misc.json
-msgid "makeshift glaive"
-msgid_plural "makeshift glaives"
-msgstr[0] "hevenyészett pallos"
-msgstr[1] "hevenyészett pallos"
-
-#. ~ Description for {'str': 'makeshift glaive'}
-#: data/json/items/tool/misc.json
-msgid ""
-"This is a large blade attached to a long stick. It could do a considerable "
-"amount of damage."
-msgstr ""
-"Ez egy hosszú bot végére szerelt nagyméretű penge. Jelentős mértékű sebzést "
-"okoz."
-
#: data/json/items/tool/misc.json
msgid "mind splicer kit"
msgid_plural "mind splicer kits"
@@ -118828,12 +119088,6 @@ msgstr ""
"halványsárgává fakult. A föld alatt rajzik és arról ismeretes, hogy "
"kifejezetten a csatornákban él és szaporodik."
-#: data/json/monsters/slimes.json
-msgid "blob"
-msgid_plural "blobs"
-msgstr[0] "blob"
-msgstr[1] "blob"
-
#. ~ Description for {'str': 'blob'}
#: data/json/monsters/slimes.json
msgid ""
@@ -119557,12 +119811,6 @@ msgid ""
"envelope of scar tissue."
msgstr "Eltorzult emberi test, bőre egy nagy darab, kérges hegszövetté vált."
-#: data/json/monsters/zed-classic.json data/json/npcs/talk_tags.json
-msgid "zombie"
-msgid_plural "zombies"
-msgstr[0] "zombi"
-msgstr[1] "zombi"
-
#. ~ Description for {'str': 'zombie'}
#: data/json/monsters/zed-classic.json
msgid ""
@@ -130552,7 +130800,8 @@ msgid "I'll kill you if you don't."
msgstr "Mert kinyírlak, ha nem."
#: data/json/npcs/TALK_COMMON_OTHER.json
-#: data/json/npcs/TALK_TRUE_FOODPERSON.json src/iuse.cpp
+#: data/json/npcs/TALK_TRUE_FOODPERSON.json
+#: data/mods/smart_house_remotes/main.lua src/iuse.cpp
msgid "Nevermind."
msgstr "Mindegy."
@@ -138693,10 +138942,6 @@ msgstr ""
msgid "demon"
msgstr "démon"
-#: data/json/npcs/talk_tags.json
-msgid "horror"
-msgstr ""
-
#: data/json/npcs/talk_tags.json
msgid "indescribable beast"
msgstr ""
@@ -152197,6 +152442,16 @@ msgid ""
"coming no further. Go away."
msgstr ""
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"I was sent here by the traders at the refugee center. They told me to "
+"deliver this hard drive to you."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "The traders also mentioned you were looking for help."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "Wait! What??"
msgstr ""
@@ -152233,6 +152488,20 @@ msgstr ""
msgid "Alright, I'm leaving."
msgstr ""
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"Understood. Please drop the drive on the box embedded beneath the intercom."
+" You are welcome to leave afterwards."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "[Do as the Intercom Says]"
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "Didn't bring the hard drive now, let me return with it."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "No. Now leave."
msgstr ""
@@ -183222,6 +183491,13 @@ msgid ""
"constant jet of warm air to heat an enclosed space."
msgstr ""
+#: data/mods/Aftershock/mobs/species.json
+msgid "intelligent animal"
+msgid_plural "intelligent animals"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'intelligent animal'}
#: data/mods/Aftershock/mobs/species.json
msgid "an intelligent animal created by man before the Cataclysm"
msgstr ""
@@ -193164,6 +193440,13 @@ msgstr ""
msgid "DinoLab Operating Theater Access Control"
msgstr ""
+#: data/mods/DinoMod/monsters/dinosaur.json
+msgid "dinosaur"
+msgid_plural "dinosaurs"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'dinosaur'}
#: data/mods/DinoMod/monsters/dinosaur.json
msgid "a dinosaur"
msgstr ""
@@ -205206,6 +205489,11 @@ msgstr ""
msgid "RUNES"
msgstr ""
+#. ~ Crafting recipes subcategory of 'ENCHANTED' category
+#: data/mods/Magiclysm/qualities.json
+msgid "ENCHANTING"
+msgstr ""
+
#: data/mods/Magiclysm/qualities.json
msgid "mana focusing"
msgstr ""
@@ -205333,6 +205621,24 @@ msgctxt "start_name"
msgid "Wizard's Retreat Vacation"
msgstr ""
+#: data/mods/Magiclysm/species.json
+msgid "magical beast"
+msgid_plural "magical beasts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "dragon"
+msgid_plural "dragons"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "lizardfolk"
+msgid_plural "lizardfolk"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/start_locations.json
msgid "Wizard's Secret Basement Study"
msgstr ""
@@ -205509,6 +205815,42 @@ msgid ""
"lights."
msgstr ""
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Bless"
+msgstr ""
+
+#. ~ Description for {'str': 'Bless'}
+#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "A spell of blessing that gives you energy and boosts your abilities."
+msgstr ""
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Holy Blade"
+msgstr ""
+
+#. ~ Description for Holy Blade
+#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
+#. Holy Blade'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "This blade of light will cut through any evil it makes contact with!"
+msgstr ""
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Spiritual Armor"
+msgstr ""
+
+#. ~ Description for Spiritual Armor
+#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
+#. of Spiritual Armor'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid ""
+"Evil will not make it through your defenses if your faith is strong enough!"
+msgstr ""
+
#: data/mods/Magiclysm/Spells/biomancer.json
msgid "Cure Light Wounds"
msgstr ""
@@ -206972,17 +207314,6 @@ msgid ""
"harmless."
msgstr ""
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Bless"
-msgstr ""
-
-#. ~ Description for {'str': 'Bless'}
-#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "A spell of blessing that gives you energy and boosts your abilities."
-msgstr ""
-
#: data/mods/Magiclysm/Spells/technomancer.json
#: data/mods/Magiclysm/effects/effects.json
msgid "Invisibility"
@@ -207000,31 +207331,6 @@ msgstr ""
msgid "To the outside world, your body fades away and you cease to exist!"
msgstr ""
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Holy Blade"
-msgstr ""
-
-#. ~ Description for Holy Blade
-#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
-#. Holy Blade'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "This blade of light will cut through any evil it makes contact with!"
-msgstr ""
-
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Spiritual Armor"
-msgstr ""
-
-#. ~ Description for Spiritual Armor
-#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
-#. of Spiritual Armor'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid ""
-"Evil will not make it through your defenses if your faith is strong enough!"
-msgstr ""
-
#: data/mods/Magiclysm/Spells/technomancer.json
msgid "Lamp"
msgstr ""
@@ -209170,6 +209476,18 @@ msgid_plural "sledge hammer +2s"
msgstr[0] ""
msgstr[1] ""
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "heavy sledge hammer +1"
+msgid_plural "heavy sledge hammers +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "heavy sledge hammer +2"
+msgid_plural "heavy sledge hammers +2"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "warhammer +1"
msgid_plural "warhammer +1s"
@@ -209375,12 +209693,14 @@ msgstr[0] ""
msgstr[1] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +1"
msgid_plural "crowbar +1s"
msgstr[0] ""
msgstr[1] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +2"
msgid_plural "crowbar +2s"
msgstr[0] ""
@@ -209435,12 +209755,14 @@ msgstr[0] ""
msgstr[1] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +1"
msgid_plural "hunting knife +1s"
msgstr[0] ""
msgstr[1] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +2"
msgid_plural "hunting knife +2s"
msgstr[0] ""
@@ -209614,6 +209936,18 @@ msgid_plural "dao +2s"
msgstr[0] ""
msgstr[1] ""
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +1"
+msgid_plural "lucerne hammers +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +2"
+msgid_plural "lucerne hammers +2"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "Biomancer spear"
msgid_plural "Biomancer spears"
@@ -210502,6 +210836,78 @@ msgid ""
"turns into the item pictured on the front, in this case a crowbar."
msgstr ""
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +1"
+msgid_plural "bottle jacks +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +2"
+msgid_plural "bottle jacks +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +1"
+msgid_plural "scalpels +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +2"
+msgid_plural "scalpels +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +1"
+msgid_plural "butcher knives +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +2"
+msgid_plural "butcher knives +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +1"
+msgid_plural "meat cleavers +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +2"
+msgid_plural "meat cleavers +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +1"
+msgid_plural "carving knives +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +2"
+msgid_plural "carving knives +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +1"
+msgid_plural "butchering kits +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +2"
+msgid_plural "butchering kits +2"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/items/enchanted_unarmed.json
msgid "cestus +1"
msgid_plural "cestus +1s"
@@ -211578,6 +211984,20 @@ msgid ""
"protective equipment inside."
msgstr ""
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid "Enchanter's Guidebook"
+msgid_plural "copies of Enchanter's Guidebooks"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': "Enchanter's Guidebook", 'str_pl': "copies of
+#. Enchanter's Guidebooks"}
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid ""
+"A hefty textbook on the theory and practice of magically strengthening "
+"weapons and tools."
+msgstr ""
+
#: data/mods/Magiclysm/items/spell_scrolls.json
msgid "Spell Scroll"
msgid_plural "Spell Scrolls"
@@ -212653,6 +213073,12 @@ msgid ""
"much more expensive."
msgstr ""
+#: data/mods/Magiclysm/monsters/demon_spider.json
+msgid "demon spider"
+msgid_plural "demon spiders"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid "demon spiderling"
msgid_plural "demon spiderlings"
@@ -212668,12 +213094,6 @@ msgid ""
"with venom."
msgstr ""
-#: data/mods/Magiclysm/monsters/demon_spider.json
-msgid "demon spider"
-msgid_plural "demon spiders"
-msgstr[0] ""
-msgstr[1] ""
-
#. ~ Description for demon spider
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid ""
@@ -215665,10 +216085,22 @@ msgid ""
"human candy! Are you a real monster? Will you be able to devour it all?\""
msgstr ""
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "marshmallow"
+msgid_plural "marshmallows"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "shlop."
msgstr ""
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "gummy"
+msgid_plural "gummies"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "pop."
msgstr ""
@@ -218098,6 +218530,15 @@ msgid ""
"city size set to 1 and spacing set to 8."
msgstr ""
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "SaveLoad Lua Test"
+msgstr ""
+
+#. ~ Description for SaveLoad Lua Test
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "Mod for testing Lua save/load API."
+msgstr ""
+
#: data/mods/sees_player_hitbutton/modinfo.json
msgid "sees-player icon, HitButton_iso"
msgstr ""
@@ -218120,6 +218561,78 @@ msgid ""
"retrodays tileset."
msgstr ""
+#: data/mods/smart_house_remotes/item.json
+msgid "smart house remote"
+msgid_plural "smart house remotes"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'smart house remote'}
+#: data/mods/smart_house_remotes/item.json
+msgid ""
+"A small remote with lcd display used to control garage doors and window "
+"curtains. Completely useless now, unless you manage to restore power to the"
+" house."
+msgstr ""
+
+#: data/mods/smart_house_remotes/iuse.json
+msgid "Control doors and shutters"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Open curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Close curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Raise garage door"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Lower garage door"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's not enough grid charge.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Low Current At Endpoint"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when player is too far away from the area.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Signal"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's nothing to activate.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Endpoints Available"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "The remote beeps quietly."
+msgstr ""
+
+#. ~ Title of the menu prompting player to select what to activate with the
+#. remote.
+#. Typically it's doors, garage doors or window curtains.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Select endpoint"
+msgstr ""
+
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Smart House Remotes"
+msgstr ""
+
+#. ~ Description for Smart House Remotes
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Add remotes for controlling garage doors and window curtains."
+msgstr ""
+
#: data/mods/speedydex/modinfo.json
msgid "SpeedyDex"
msgstr ""
@@ -219635,6 +220148,14 @@ msgstr "Debug mód ki/be"
msgid "Debug Menu"
msgstr "Debug menü"
+#: data/raw/keybindings/keybindings.json
+msgid "Lua Console"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Reload Lua Code"
+msgstr ""
+
#: data/raw/keybindings/keybindings.json
msgid "View Scentmap"
msgstr "Szagtérkép megtekintése"
@@ -220190,6 +220711,26 @@ msgstr ""
msgid "Add new page"
msgstr ""
+#: data/raw/keybindings/keybindings.json
+msgid "Edit command"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History up"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History down"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the top"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the bottom"
+msgstr ""
+
#: data/raw/keybindings/messages.json
msgid "Toggle wide display"
msgstr ""
@@ -220348,7 +220889,31 @@ msgstr "Lövegtornyok célzási módja"
#: src/achievement.cpp
#, c-format
-msgid "Attain %s skill level of %i (%i/%i)."
+msgid "Kill at least %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Don't kill even a single %s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Kill no more than %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+msgid " (failed)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Attain skill level of %i in %s (%i/%i)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Stay at or below skill level of %i in %s (%i/%i)"
msgstr ""
#: src/achievement.cpp
@@ -226043,6 +226608,30 @@ msgstr "abcdefghijklmnopqrstuvwxyz"
msgid "に坂索トし荷測のンおク妙免イロコヤ梅棋厚れ表幌"
msgstr "に坂索トし荷測のンおク妙免イロコヤ梅棋厚れ表幌"
+#: src/catalua_console.cpp
+msgid "Press Ctrl+S to run script, press Esc to cancel"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press arrow keys to navigate text input"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to add new line"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to enter/edit command, Esc to quit"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Up/Down arrows to select from history"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press PgUp/PgDn/Home/End to scroll output window"
+msgstr ""
+
#: src/character.cpp src/debug_menu.cpp src/game.cpp src/iuse.cpp
#: src/npctrade.cpp
msgid "You"
@@ -230992,6 +231581,10 @@ msgstr ""
msgid "Change [b]attery charge"
msgstr ""
+#: src/debug_menu.cpp
+msgid "Export [j]son template"
+msgstr ""
+
#: src/debug_menu.cpp
msgid "Vehicle…"
msgstr ""
@@ -231108,6 +231701,10 @@ msgstr ""
msgid "Player…"
msgstr ""
+#: src/debug_menu.cpp
+msgid "Lua console"
+msgstr ""
+
#: src/debug_menu.cpp
msgid ""
"Debug Functions - Manipulate the fabric of reality!\n"
@@ -231974,6 +232571,10 @@ msgstr ""
msgid "By how much? (in kJ, negative to discharge)"
msgstr ""
+#: src/debug_menu.cpp
+msgid "JSON template written to debug.log"
+msgstr ""
+
#: src/dependency_tree.cpp
msgid "Missing Dependency(ies): "
msgstr ""
@@ -236398,21 +236999,19 @@ msgstr ""
#: src/game.cpp
#, c-format
-msgid "Stepping into that %1$s looks risky, but you enter anyway."
+msgid "Stepping into that %1$s looks risky. %2$s"
msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Run into it if you wish to enter "
-"anyway."
+msgid "But you enter anyway."
msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Crouch and move into it if you wish to"
-" enter anyway."
+msgid "Run into it if you wish to enter anyway."
+msgstr ""
+
+#: src/game.cpp
+msgid "Crouch and move into it if you wish to enter anyway."
msgstr ""
#: src/game.cpp
@@ -244513,6 +245112,11 @@ msgstr ""
msgid "You try to feed the %s some %s, but it vanishes!"
msgstr ""
+#: src/iuse.cpp
+#, c-format
+msgid "You reach for the %s, but it recoils away from you!"
+msgstr ""
+
#: src/iuse.cpp
msgid "You want to feed it the dog food, but it bites your fingers!"
msgstr ""
@@ -250387,6 +250991,11 @@ msgstr ""
msgid "Create World"
msgstr "Új világ"
+#. ~ Marker for worlds that need Lua in game builds without Lua
+#: src/main_menu.cpp src/worldfactory.cpp
+msgid "Needs Lua!"
+msgstr ""
+
#: src/main_menu.cpp
msgid "Bugs? Suggestions? Use links in MOTD to report them."
msgstr ""
@@ -250619,6 +251228,17 @@ msgstr ""
msgid "Unable to make graphics directory. Check permissions."
msgstr ""
+#: src/main_menu.cpp
+msgid ""
+"You are running x32 build of the game on a x64 operating system. This means"
+" the game will NOT be able to access all memory, and you may experience "
+"random out-of-memory crashes. Consider obtaining a x64 build of the game to"
+" avoid that, but if you *really* want to be running x32 build of the game "
+"for some reason (or don't have a choice), you may want to lower your memory "
+"usage by disabling tileset, soundpack and mods and increasing autosave "
+"frequency."
+msgstr ""
+
#: src/main_menu.cpp
msgid "Really quit?"
msgstr "Biztos kilépsz?"
@@ -250649,6 +251269,13 @@ msgstr "Biztosan törlöd ezt: %s?"
msgid "Sorry, something went wrong."
msgstr "Valami nem sikerült."
+#. ~ Error when attempting to load a world whose mods depend on Lua
+#. ~ on game build that doesn't have Lua. %s = world name.
+#: src/main_menu.cpp
+#, c-format
+msgid "%s needs game build with Lua support!"
+msgstr ""
+
#. ~ %s = world name
#: src/main_menu.cpp
#, c-format
@@ -254362,6 +254989,15 @@ msgstr[1] ""
msgid "Mod version"
msgstr "Modverzió"
+#: src/mod_manager_ui.cpp
+#, c-format
+msgid "%s: API version %s\n"
+msgstr ""
+
+#: src/mod_manager_ui.cpp
+msgid "Needs Lua"
+msgstr ""
+
#: src/mod_manager_ui.cpp
msgid "Mod info path"
msgstr ""
@@ -257330,12 +257966,6 @@ msgstr ""
msgid "Focus trends towards:"
msgstr "Fókusz tendencia:"
-#: src/mtype.cpp
-msgid "human"
-msgid_plural "humans"
-msgstr[0] ""
-msgstr[1] ""
-
#: src/mutation.cpp
#, c-format
msgid "Your %s is pushed off!"
@@ -259974,6 +260604,14 @@ msgstr ""
msgid "Messages related to SDL, tiles, tilesets and sound."
msgstr ""
+#: src/options.cpp
+msgid "Lua"
+msgstr ""
+
+#: src/options.cpp
+msgid "Messages from Lua scripts."
+msgstr ""
+
#: src/options.cpp
msgid "General"
msgstr "Általános"
@@ -261155,6 +261793,16 @@ msgstr "Animáció késleltetése"
msgid "The amount of time to pause between animation frames in ms."
msgstr "Az animációs képkockák közötti idő ms-ban."
+#: src/options.cpp
+msgid "Draw bullets as lines"
+msgstr ""
+
+#: src/options.cpp
+msgid ""
+"If true, bullets are drawn as lines of images, and the animation lasts only "
+"one frame."
+msgstr ""
+
#: src/options.cpp
msgid "Blinking effects speed"
msgstr ""
@@ -261232,64 +261880,64 @@ msgid "Font height"
msgstr "Betű magassága"
#: src/options.cpp
-msgid "Set the font height. Requires restart."
-msgstr ""
+msgid "Set the font height. Requires restart."
+msgstr "Beállítja a betű magasságát. Újraindítást igényel."
#: src/options.cpp
msgid "Font size"
msgstr "Betűméret"
#: src/options.cpp
-msgid "Set the font size. Requires restart."
-msgstr ""
+msgid "Set the font size. Requires restart."
+msgstr "Beállítja a betű méretét. Újraindítást igényel."
#: src/options.cpp
msgid "Map font width"
msgstr "Térkép betű szélessége"
#: src/options.cpp
-msgid "Set the map font width. Requires restart."
-msgstr ""
+msgid "Set the map font width. Requires restart."
+msgstr "Beállítja a térkép betű szélességét. Újraindítást igényel."
#: src/options.cpp
msgid "Map font height"
msgstr "Térkép betű magassága"
#: src/options.cpp
-msgid "Set the map font height. Requires restart."
-msgstr ""
+msgid "Set the map font height. Requires restart."
+msgstr "Beállítja a térkép betű magasságát. Újraindítást igényel."
#: src/options.cpp
msgid "Map font size"
msgstr "Térkép betűméret"
#: src/options.cpp
-msgid "Set the map font size. Requires restart."
-msgstr ""
+msgid "Set the map font size. Requires restart."
+msgstr "Beállítja a térkép betű méretét. Újraindítást igényel."
#: src/options.cpp
msgid "Overmap font width"
msgstr "Nagytérkép betű szélessége"
#: src/options.cpp
-msgid "Set the overmap font width. Requires restart."
-msgstr ""
+msgid "Set the overmap font width. Requires restart."
+msgstr "Beállítja a nagytérkép betű szélességét. Újraindítást igényel."
#: src/options.cpp
msgid "Overmap font height"
msgstr "Nagytérkép betű magassága"
#: src/options.cpp
-msgid "Set the overmap font height. Requires restart."
-msgstr ""
+msgid "Set the overmap font height. Requires restart."
+msgstr "Beállítja a nagytérkép betű magasságát. Újraindítást igényel."
#: src/options.cpp
msgid "Overmap font size"
msgstr "Nagytérkép betűméret"
#: src/options.cpp
-msgid "Set the overmap font size. Requires restart."
-msgstr ""
+msgid "Set the overmap font size. Requires restart."
+msgstr "Beállítja a nagytérkép betű méretét. Újraindítást igényel."
#: src/options.cpp
msgid "Enable ASCII art in item descriptions"
@@ -268998,6 +269646,11 @@ msgstr ""
msgid " [%s]"
msgstr ""
+#. ~ Tag for mods that use Lua in game builds without Lua.
+#: src/worldfactory.cpp
+msgid "(Needs Lua) "
+msgstr ""
+
#: src/worldfactory.cpp
msgid "N/A"
msgstr "N/A"
diff --git a/lang/po/id.po b/lang/po/id.po
index 318ef1f231b4..bc5dddf1e68e 100644
--- a/lang/po/id.po
+++ b/lang/po/id.po
@@ -2,7 +2,7 @@
msgid ""
msgstr ""
"Project-Id-Version: cataclysm-bn\n"
-"POT-Creation-Date: 2023-08-03 04:45+0000\n"
+"POT-Creation-Date: 2023-09-15 13:27+0000\n"
"Language-Team: Indonesian (https://app.transifex.com/bn-team/teams/113585/id/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1486,10 +1486,18 @@ msgstr ""
msgid "[Combat] One Down, Billions to Go…"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] The Undertaker"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Rude Awakening"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] Pacifist"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Decamate"
msgstr ""
@@ -3829,10 +3837,23 @@ msgstr ""
#: data/json/bionics.json data/json/items/bionics.json
msgid ""
"Installed within you is a perpetual generator powered by nonsensoleum. When"
-" activated it's power gen doubles. If you are seeing this, you'd better be "
+" activated its power gen doubles. If you are seeing this, you'd better be "
"debugging."
msgstr ""
+#: data/json/bionics.json data/json/items/bionics.json
+msgid "Debug Fuel Cell CBM"
+msgid_plural "Debug Fuel Cell CBMs"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'Debug Fuel Cell CBM'}
+#: data/json/bionics.json data/json/items/bionics.json
+msgid ""
+"The power of the sun, in the palm of my hand! Installed within you is a "
+"perpetual generator powered by nonsensoleum. When activated its power gen "
+"doubles. If you are seeing this, you'd better be debugging."
+msgstr ""
+
#: data/json/body_parts.json
msgid "appendix"
msgstr ""
@@ -7971,6 +7992,17 @@ msgstr ""
msgid "You're winded."
msgstr ""
+#: data/json/effects.json
+msgid "Bronchospasms"
+msgstr ""
+
+#. ~ Description of effect 'Bronchospasms'.
+#: data/json/effects.json
+msgid ""
+"Something in the air is making it harder to breathe, aggravating your "
+"asthma. Increases the chance of suffering an asthma attack."
+msgstr ""
+
#: data/json/effects.json
msgid "The ceiling collapses on you!"
msgstr ""
@@ -21819,34 +21851,82 @@ msgid "seeing this is a bug"
msgid_plural "seeing this is a bug"
msgstr[0] ""
+#: data/json/species.json
+msgid "mammal"
+msgid_plural "mammals"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'mammal'}
#: data/json/species.json
msgid "a mammal"
msgstr ""
+#: data/json/species.json
+msgid "amphibian"
+msgid_plural "amphibians"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'amphibian'}
#: data/json/species.json
msgid "an amphibian"
msgstr ""
+#: data/json/species.json
+msgid "bird"
+msgid_plural "birds"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'bird'}
#: data/json/species.json
msgid "a bird"
msgstr ""
+#: data/json/species.json
+msgid "reptile"
+msgid_plural "reptiles"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'reptile'}
#: data/json/species.json
msgid "a reptile"
msgstr ""
+#: data/json/species.json
+msgid "fish"
+msgid_plural "fish"
+msgstr[0] ""
+
+#. ~ Description for {'str_sp': 'fish'}
#: data/json/species.json
msgid "a fish"
msgstr ""
+#: data/json/species.json
+msgid "mutant"
+msgid_plural "mutants"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'mutant'}
#: data/json/species.json
msgid "a mutant"
msgstr ""
+#: data/json/species.json
+msgid "nether creature"
+msgid_plural "nether creatures"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'nether creature'}
#: data/json/species.json
msgid "a nether creature"
msgstr ""
+#: data/json/species.json data/json/monsters/slimes.json
+msgid "blob"
+msgid_plural "blobs"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'blob'}
#: data/json/species.json
msgid "a blob"
msgstr ""
@@ -21855,30 +21935,72 @@ msgstr ""
msgid "plop."
msgstr ""
+#: data/json/species.json
+msgid "fungus"
+msgid_plural "fungi"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'fungus', 'str_pl': 'fungi'}
#: data/json/species.json
msgid "a fungus"
msgstr ""
+#: data/json/species.json
+msgid "leech plant"
+msgid_plural "leech plants"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'leech plant'}
#: data/json/species.json
msgid "a leech plant"
msgstr ""
+#: data/json/species.json
+msgid "insect"
+msgid_plural "insects"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'insect'}
#: data/json/species.json
msgid "an insect"
msgstr ""
+#: data/json/species.json
+msgid "spider"
+msgid_plural "spiders"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'spider'}
#: data/json/species.json
msgid "a spider"
msgstr ""
+#: data/json/species.json
+msgid "plant"
+msgid_plural "plants"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'plant'}
#: data/json/species.json
msgid "a plant"
msgstr ""
+#: data/json/species.json
+msgid "mollusk"
+msgid_plural "mollusks"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'mollusk'}
#: data/json/species.json
msgid "a mollusk"
msgstr ""
+#: data/json/species.json
+msgid "worm"
+msgid_plural "worms"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'worm'}
#: data/json/species.json
msgid "a worm"
msgstr ""
@@ -21887,6 +22009,13 @@ msgstr ""
msgid "rustle."
msgstr ""
+#: data/json/species.json data/json/monsters/zed-classic.json
+#: data/json/npcs/talk_tags.json
+msgid "zombie"
+msgid_plural "zombies"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'zombie'}
#: data/json/species.json
msgid "a zombie"
msgstr ""
@@ -21895,6 +22024,12 @@ msgstr ""
msgid "shuffling."
msgstr ""
+#: data/json/species.json
+msgid "robot"
+msgid_plural "robots"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'robot'}
#: data/json/species.json
msgid "a robot"
msgstr ""
@@ -21903,18 +22038,46 @@ msgstr ""
msgid "mechanical whirring."
msgstr ""
+#: data/json/species.json data/json/npcs/talk_tags.json
+msgid "horror"
+msgid_plural "horrors"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'horror'}
#: data/json/species.json
msgid "a horror"
msgstr ""
+#: data/json/species.json
+msgid "abberation"
+msgid_plural "abberations"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'abberation'}
#: data/json/species.json
msgid "an aberration"
msgstr ""
+#: data/json/species.json
+msgid "hallucination"
+msgid_plural "hallucinations"
+msgstr[0] ""
+
+#: data/json/species.json src/mtype.cpp
+msgid "human"
+msgid_plural "humans"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'human'}
#: data/json/species.json
msgid "a human"
msgstr ""
+#: data/json/species.json
+msgid "unknown species"
+msgid_plural "unknown species"
+msgstr[0] ""
+
#: data/json/speech.json data/mods/Aftershock/speech.json
#: data/mods/CrazyCataclysm/crazy_speech.json
msgid "\"Hello?\""
@@ -46615,8 +46778,8 @@ msgstr[0] ""
#. flechettes, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless flechette rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless flechette rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
#: data/json/items/ammo/20x66mm.json
@@ -46627,8 +46790,8 @@ msgstr[0] ""
#. ~ Description for {'str': '20x66mm buckshot, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless buckshot rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless buckshot rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
#: data/json/items/ammo/20x66mm.json
@@ -46640,8 +46803,8 @@ msgstr[0] ""
#. slugs, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless solid projectile "
-"rounds. Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless solid projectile rounds. "
+"Being caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
#: data/json/items/ammo/20x66mm.json
@@ -47991,17 +48154,53 @@ msgid ""
msgstr ""
#: data/json/items/ammo/8x40mm.json
-msgid "bootleg 8x40mm JHP"
-msgid_plural "bootleg 8x40mm JHPs"
+msgid "8x40mm JHP, handmade"
+msgid_plural "8x40mm JHP, handmades"
msgstr[0] ""
-#. ~ Description for {'str': 'bootleg 8x40mm JHP'}
+#. ~ Description for {'str': '8x40mm JHP, handmade'}
#: data/json/items/ammo/8x40mm.json
msgid ""
-"Bootleg duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
+"Handmade duplicates of Rivtech 8x40mm JHP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm caseless, handmade"
+msgid_plural "8x40mm caseless, handmades"
+msgstr[0] ""
+
+#. ~ Description for {'str': '8x40mm caseless, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
"rounds, these cannot be disassembled or reloaded."
msgstr ""
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm HVP, handmade"
+msgid_plural "8x40mm HVP, handmades"
+msgstr[0] ""
+
+#. ~ Description for {'str': '8x40mm HVP, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm HVP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm tracer, handmade"
+msgid_plural "8x40mm tracer, handmades"
+msgstr[0] ""
+
+#. ~ Description for {'str': '8x40mm tracer, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm tracer rounds. Being caseless rounds,"
+" these cannot be disassembled or reloaded."
+msgstr ""
+
#. ~ Description for {'str_sp': '8x40mm caseless'}
#: data/json/items/ammo/8x40mm.json
msgid ""
@@ -48309,41 +48508,41 @@ msgid "A tube of small paintballs. They deal virtually no damage."
msgstr ""
#: data/json/items/ammo/rpg.json
-msgid "PG-7VL 93mm rocket"
-msgid_plural "PG-7VL 93mm rockets"
+msgid "PG-7VL RPG-7 rocket"
+msgid_plural "PG-7VL RPG-7 rockets"
msgstr[0] ""
-#. ~ Description for PG-7VL 93mm rocket
+#. ~ Description for PG-7VL RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "93mm single-stage high-explosive ammunition for the RPG-7."
msgstr ""
#: data/json/items/ammo/rpg.json
-msgid "PG-7VR 64mm/105mm rocket"
-msgid_plural "PG-7VR 64mm/105mm rockets"
+msgid "PG-7VR RPG-7 rocket"
+msgid_plural "PG-7VR RPG-7 rockets"
msgstr[0] ""
-#. ~ Description for PG-7VR 64mm/105mm rocket
+#. ~ Description for PG-7VR RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "64mm/105mm high-explosive tandem ammunition for the RPG-7."
msgstr ""
#: data/json/items/ammo/rpg.json
-msgid "TBG-7V 105mm rocket"
-msgid_plural "TBG-7V 105mm rockets"
+msgid "TBG-7V RPG-7 rocket"
+msgid_plural "TBG-7V RPG-7 rockets"
msgstr[0] ""
-#. ~ Description for TBG-7V 105mm rocket
+#. ~ Description for TBG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "105mm thermobaric ammunition for the RPG-7."
msgstr ""
#: data/json/items/ammo/rpg.json
-msgid "OG-7V 40mm rocket"
-msgid_plural "OG-7V 40mm rockets"
+msgid "OG-7V RPG-7 rocket"
+msgid_plural "OG-7V RPG-7 rockets"
msgstr[0] ""
-#. ~ Description for OG-7V 40mm rocket
+#. ~ Description for OG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid ""
"40mm high-explosive fragmentation antipersonnel ammunition for the RPG-7."
@@ -68758,6 +68957,46 @@ msgid ""
"A pickled egg. Rather salty, but tastes good and lasts for a long time."
msgstr ""
+#: data/json/items/comestibles/egg.json
+msgid "salsify omelette"
+msgid_plural "salsify omelette"
+msgstr[0] ""
+
+#. ~ Description for {'str_sp': 'salsify omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A salsify omelette."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "wild veggetable omelette"
+msgid_plural "wild veggetable omelette"
+msgstr[0] ""
+
+#. ~ Description for {'str_sp': 'wild veggetable omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with wild vegetables."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "mushroom omelette"
+msgid_plural "mushroom omelette"
+msgstr[0] ""
+
+#. ~ Description for {'str_sp': 'mushroom omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with mushrooms."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "spanish omelette"
+msgid_plural "spanish omelette"
+msgstr[0] ""
+
+#. ~ Description for {'str_sp': 'spanish omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A spanish omelette."
+msgstr ""
+
#: data/json/items/comestibles/frozen.json
msgid "milkshake"
msgid_plural "milkshakes"
@@ -69752,6 +69991,7 @@ msgstr ""
#: data/json/items/comestibles/junkfood.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cookie"
msgid_plural "cookies"
msgstr[0] ""
@@ -71949,6 +72189,7 @@ msgstr ""
#: data/json/items/comestibles/med.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "chewing gum"
msgid_plural "chewing gum"
msgstr[0] ""
@@ -77749,6 +77990,7 @@ msgstr ""
#: data/json/items/comestibles/wheat.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cracker"
msgid_plural "crackers"
msgstr[0] ""
@@ -88303,6 +88545,18 @@ msgid ""
"likely evolved."
msgstr ""
+#: data/json/items/melee/spears_and_polearms.json
+msgid "makeshift glaive"
+msgid_plural "makeshift glaives"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'makeshift glaive'}
+#: data/json/items/melee/spears_and_polearms.json
+msgid ""
+"This is a large blade attached to a long stick. It could do a considerable "
+"amount of damage."
+msgstr ""
+
#: data/json/items/melee/spears_and_polearms.json
msgid "glaive"
msgid_plural "glaives"
@@ -93919,7 +94173,7 @@ msgstr ""
#. ~ Use action need_charges_msg for {'str': 'refillable lighter'}.
#: data/json/items/tool/fire.json src/activity_actor.cpp src/explosion.cpp
-#: src/gates.cpp
+#: src/gates.cpp src/iuse.cpp
msgid "Nothing happens."
msgstr ""
@@ -95649,18 +95903,6 @@ msgid ""
"from uncertain sources like a river may be dirty."
msgstr ""
-#: data/json/items/tool/misc.json
-msgid "makeshift glaive"
-msgid_plural "makeshift glaives"
-msgstr[0] ""
-
-#. ~ Description for {'str': 'makeshift glaive'}
-#: data/json/items/tool/misc.json
-msgid ""
-"This is a large blade attached to a long stick. It could do a considerable "
-"amount of damage."
-msgstr ""
-
#: data/json/items/tool/misc.json
msgid "mind splicer kit"
msgid_plural "mind splicer kits"
@@ -105725,11 +105967,6 @@ msgid ""
"of infesting sewer lines."
msgstr ""
-#: data/json/monsters/slimes.json
-msgid "blob"
-msgid_plural "blobs"
-msgstr[0] ""
-
#. ~ Description for {'str': 'blob'}
#: data/json/monsters/slimes.json
msgid ""
@@ -106322,11 +106559,6 @@ msgid ""
"envelope of scar tissue."
msgstr ""
-#: data/json/monsters/zed-classic.json data/json/npcs/talk_tags.json
-msgid "zombie"
-msgid_plural "zombies"
-msgstr[0] ""
-
#. ~ Description for {'str': 'zombie'}
#: data/json/monsters/zed-classic.json
msgid ""
@@ -116365,7 +116597,8 @@ msgid "I'll kill you if you don't."
msgstr ""
#: data/json/npcs/TALK_COMMON_OTHER.json
-#: data/json/npcs/TALK_TRUE_FOODPERSON.json src/iuse.cpp
+#: data/json/npcs/TALK_TRUE_FOODPERSON.json
+#: data/mods/smart_house_remotes/main.lua src/iuse.cpp
msgid "Nevermind."
msgstr ""
@@ -124169,10 +124402,6 @@ msgstr ""
msgid "demon"
msgstr ""
-#: data/json/npcs/talk_tags.json
-msgid "horror"
-msgstr ""
-
#: data/json/npcs/talk_tags.json
msgid "indescribable beast"
msgstr ""
@@ -137499,6 +137728,16 @@ msgid ""
"coming no further. Go away."
msgstr ""
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"I was sent here by the traders at the refugee center. They told me to "
+"deliver this hard drive to you."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "The traders also mentioned you were looking for help."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "Wait! What??"
msgstr ""
@@ -137535,6 +137774,20 @@ msgstr ""
msgid "Alright, I'm leaving."
msgstr ""
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"Understood. Please drop the drive on the box embedded beneath the intercom."
+" You are welcome to leave afterwards."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "[Do as the Intercom Says]"
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "Didn't bring the hard drive now, let me return with it."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "No. Now leave."
msgstr ""
@@ -166757,6 +167010,12 @@ msgid ""
"constant jet of warm air to heat an enclosed space."
msgstr ""
+#: data/mods/Aftershock/mobs/species.json
+msgid "intelligent animal"
+msgid_plural "intelligent animals"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'intelligent animal'}
#: data/mods/Aftershock/mobs/species.json
msgid "an intelligent animal created by man before the Cataclysm"
msgstr ""
@@ -176376,6 +176635,12 @@ msgstr ""
msgid "DinoLab Operating Theater Access Control"
msgstr ""
+#: data/mods/DinoMod/monsters/dinosaur.json
+msgid "dinosaur"
+msgid_plural "dinosaurs"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'dinosaur'}
#: data/mods/DinoMod/monsters/dinosaur.json
msgid "a dinosaur"
msgstr ""
@@ -187576,6 +187841,11 @@ msgstr ""
msgid "RUNES"
msgstr ""
+#. ~ Crafting recipes subcategory of 'ENCHANTED' category
+#: data/mods/Magiclysm/qualities.json
+msgid "ENCHANTING"
+msgstr ""
+
#: data/mods/Magiclysm/qualities.json
msgid "mana focusing"
msgstr ""
@@ -187703,6 +187973,21 @@ msgctxt "start_name"
msgid "Wizard's Retreat Vacation"
msgstr ""
+#: data/mods/Magiclysm/species.json
+msgid "magical beast"
+msgid_plural "magical beasts"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "dragon"
+msgid_plural "dragons"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "lizardfolk"
+msgid_plural "lizardfolk"
+msgstr[0] ""
+
#: data/mods/Magiclysm/start_locations.json
msgid "Wizard's Secret Basement Study"
msgstr ""
@@ -187879,6 +188164,42 @@ msgid ""
"lights."
msgstr ""
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Bless"
+msgstr ""
+
+#. ~ Description for {'str': 'Bless'}
+#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "A spell of blessing that gives you energy and boosts your abilities."
+msgstr ""
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Holy Blade"
+msgstr ""
+
+#. ~ Description for Holy Blade
+#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
+#. Holy Blade'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "This blade of light will cut through any evil it makes contact with!"
+msgstr ""
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Spiritual Armor"
+msgstr ""
+
+#. ~ Description for Spiritual Armor
+#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
+#. of Spiritual Armor'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid ""
+"Evil will not make it through your defenses if your faith is strong enough!"
+msgstr ""
+
#: data/mods/Magiclysm/Spells/biomancer.json
msgid "Cure Light Wounds"
msgstr ""
@@ -189342,17 +189663,6 @@ msgid ""
"harmless."
msgstr ""
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Bless"
-msgstr ""
-
-#. ~ Description for {'str': 'Bless'}
-#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "A spell of blessing that gives you energy and boosts your abilities."
-msgstr ""
-
#: data/mods/Magiclysm/Spells/technomancer.json
#: data/mods/Magiclysm/effects/effects.json
msgid "Invisibility"
@@ -189370,31 +189680,6 @@ msgstr ""
msgid "To the outside world, your body fades away and you cease to exist!"
msgstr ""
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Holy Blade"
-msgstr ""
-
-#. ~ Description for Holy Blade
-#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
-#. Holy Blade'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "This blade of light will cut through any evil it makes contact with!"
-msgstr ""
-
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Spiritual Armor"
-msgstr ""
-
-#. ~ Description for Spiritual Armor
-#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
-#. of Spiritual Armor'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid ""
-"Evil will not make it through your defenses if your faith is strong enough!"
-msgstr ""
-
#: data/mods/Magiclysm/Spells/technomancer.json
msgid "Lamp"
msgstr ""
@@ -191410,6 +191695,16 @@ msgid "sledge hammer +2"
msgid_plural "sledge hammer +2s"
msgstr[0] ""
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "heavy sledge hammer +1"
+msgid_plural "heavy sledge hammers +1"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "heavy sledge hammer +2"
+msgid_plural "heavy sledge hammers +2"
+msgstr[0] ""
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "warhammer +1"
msgid_plural "warhammer +1s"
@@ -191581,11 +191876,13 @@ msgid_plural "cavalry sabre +2s"
msgstr[0] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +1"
msgid_plural "crowbar +1s"
msgstr[0] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +2"
msgid_plural "crowbar +2s"
msgstr[0] ""
@@ -191631,11 +191928,13 @@ msgid_plural "combat knife +2s"
msgstr[0] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +1"
msgid_plural "hunting knife +1s"
msgstr[0] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +2"
msgid_plural "hunting knife +2s"
msgstr[0] ""
@@ -191780,6 +192079,16 @@ msgid "dao +2"
msgid_plural "dao +2s"
msgstr[0] ""
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +1"
+msgid_plural "lucerne hammers +1"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +2"
+msgid_plural "lucerne hammers +2"
+msgstr[0] ""
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "Biomancer spear"
msgid_plural "Biomancer spears"
@@ -192609,6 +192918,66 @@ msgid ""
"turns into the item pictured on the front, in this case a crowbar."
msgstr ""
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +1"
+msgid_plural "bottle jacks +1"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +2"
+msgid_plural "bottle jacks +2"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +1"
+msgid_plural "scalpels +1"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +2"
+msgid_plural "scalpels +2"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +1"
+msgid_plural "butcher knives +1"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +2"
+msgid_plural "butcher knives +2"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +1"
+msgid_plural "meat cleavers +1"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +2"
+msgid_plural "meat cleavers +2"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +1"
+msgid_plural "carving knives +1"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +2"
+msgid_plural "carving knives +2"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +1"
+msgid_plural "butchering kits +1"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +2"
+msgid_plural "butchering kits +2"
+msgstr[0] ""
+
#: data/mods/Magiclysm/items/enchanted_unarmed.json
msgid "cestus +1"
msgid_plural "cestus +1s"
@@ -193592,6 +193961,19 @@ msgid ""
"protective equipment inside."
msgstr ""
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid "Enchanter's Guidebook"
+msgid_plural "copies of Enchanter's Guidebooks"
+msgstr[0] ""
+
+#. ~ Description for {'str': "Enchanter's Guidebook", 'str_pl': "copies of
+#. Enchanter's Guidebooks"}
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid ""
+"A hefty textbook on the theory and practice of magically strengthening "
+"weapons and tools."
+msgstr ""
+
#: data/mods/Magiclysm/items/spell_scrolls.json
msgid "Spell Scroll"
msgid_plural "Spell Scrolls"
@@ -194541,6 +194923,11 @@ msgid ""
"much more expensive."
msgstr ""
+#: data/mods/Magiclysm/monsters/demon_spider.json
+msgid "demon spider"
+msgid_plural "demon spiders"
+msgstr[0] ""
+
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid "demon spiderling"
msgid_plural "demon spiderlings"
@@ -194555,11 +194942,6 @@ msgid ""
"with venom."
msgstr ""
-#: data/mods/Magiclysm/monsters/demon_spider.json
-msgid "demon spider"
-msgid_plural "demon spiders"
-msgstr[0] ""
-
#. ~ Description for demon spider
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid ""
@@ -197253,10 +197635,20 @@ msgid ""
"human candy! Are you a real monster? Will you be able to devour it all?\""
msgstr ""
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "marshmallow"
+msgid_plural "marshmallows"
+msgstr[0] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "shlop."
msgstr ""
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "gummy"
+msgid_plural "gummies"
+msgstr[0] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "pop."
msgstr ""
@@ -199520,6 +199912,15 @@ msgid ""
"city size set to 1 and spacing set to 8."
msgstr ""
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "SaveLoad Lua Test"
+msgstr ""
+
+#. ~ Description for SaveLoad Lua Test
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "Mod for testing Lua save/load API."
+msgstr ""
+
#: data/mods/sees_player_hitbutton/modinfo.json
msgid "sees-player icon, HitButton_iso"
msgstr ""
@@ -199542,6 +199943,77 @@ msgid ""
"retrodays tileset."
msgstr ""
+#: data/mods/smart_house_remotes/item.json
+msgid "smart house remote"
+msgid_plural "smart house remotes"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'smart house remote'}
+#: data/mods/smart_house_remotes/item.json
+msgid ""
+"A small remote with lcd display used to control garage doors and window "
+"curtains. Completely useless now, unless you manage to restore power to the"
+" house."
+msgstr ""
+
+#: data/mods/smart_house_remotes/iuse.json
+msgid "Control doors and shutters"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Open curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Close curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Raise garage door"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Lower garage door"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's not enough grid charge.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Low Current At Endpoint"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when player is too far away from the area.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Signal"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's nothing to activate.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Endpoints Available"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "The remote beeps quietly."
+msgstr ""
+
+#. ~ Title of the menu prompting player to select what to activate with the
+#. remote.
+#. Typically it's doors, garage doors or window curtains.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Select endpoint"
+msgstr ""
+
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Smart House Remotes"
+msgstr ""
+
+#. ~ Description for Smart House Remotes
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Add remotes for controlling garage doors and window curtains."
+msgstr ""
+
#: data/mods/speedydex/modinfo.json
msgid "SpeedyDex"
msgstr ""
@@ -200968,6 +201440,14 @@ msgstr ""
msgid "Debug Menu"
msgstr ""
+#: data/raw/keybindings/keybindings.json
+msgid "Lua Console"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Reload Lua Code"
+msgstr ""
+
#: data/raw/keybindings/keybindings.json
msgid "View Scentmap"
msgstr ""
@@ -201523,6 +202003,26 @@ msgstr ""
msgid "Add new page"
msgstr ""
+#: data/raw/keybindings/keybindings.json
+msgid "Edit command"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History up"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History down"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the top"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the bottom"
+msgstr ""
+
#: data/raw/keybindings/messages.json
msgid "Toggle wide display"
msgstr ""
@@ -201681,7 +202181,31 @@ msgstr ""
#: src/achievement.cpp
#, c-format
-msgid "Attain %s skill level of %i (%i/%i)."
+msgid "Kill at least %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Don't kill even a single %s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Kill no more than %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+msgid " (failed)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Attain skill level of %i in %s (%i/%i)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Stay at or below skill level of %i in %s (%i/%i)"
msgstr ""
#: src/achievement.cpp
@@ -207184,6 +207708,30 @@ msgstr ""
msgid "に坂索トし荷測のンおク妙免イロコヤ梅棋厚れ表幌"
msgstr ""
+#: src/catalua_console.cpp
+msgid "Press Ctrl+S to run script, press Esc to cancel"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press arrow keys to navigate text input"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to add new line"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to enter/edit command, Esc to quit"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Up/Down arrows to select from history"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press PgUp/PgDn/Home/End to scroll output window"
+msgstr ""
+
#: src/character.cpp src/debug_menu.cpp src/game.cpp src/iuse.cpp
#: src/npctrade.cpp
msgid "You"
@@ -211972,6 +212520,10 @@ msgstr ""
msgid "Change [b]attery charge"
msgstr ""
+#: src/debug_menu.cpp
+msgid "Export [j]son template"
+msgstr ""
+
#: src/debug_menu.cpp
msgid "Vehicle…"
msgstr ""
@@ -212088,6 +212640,10 @@ msgstr ""
msgid "Player…"
msgstr ""
+#: src/debug_menu.cpp
+msgid "Lua console"
+msgstr ""
+
#: src/debug_menu.cpp
msgid ""
"Debug Functions - Manipulate the fabric of reality!\n"
@@ -212953,6 +213509,10 @@ msgstr ""
msgid "By how much? (in kJ, negative to discharge)"
msgstr ""
+#: src/debug_menu.cpp
+msgid "JSON template written to debug.log"
+msgstr ""
+
#: src/dependency_tree.cpp
msgid "Missing Dependency(ies): "
msgstr ""
@@ -217314,21 +217874,19 @@ msgstr ""
#: src/game.cpp
#, c-format
-msgid "Stepping into that %1$s looks risky, but you enter anyway."
+msgid "Stepping into that %1$s looks risky. %2$s"
msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Run into it if you wish to enter "
-"anyway."
+msgid "But you enter anyway."
msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Crouch and move into it if you wish to"
-" enter anyway."
+msgid "Run into it if you wish to enter anyway."
+msgstr ""
+
+#: src/game.cpp
+msgid "Crouch and move into it if you wish to enter anyway."
msgstr ""
#: src/game.cpp
@@ -225220,6 +225778,11 @@ msgstr ""
msgid "You try to feed the %s some %s, but it vanishes!"
msgstr ""
+#: src/iuse.cpp
+#, c-format
+msgid "You reach for the %s, but it recoils away from you!"
+msgstr ""
+
#: src/iuse.cpp
msgid "You want to feed it the dog food, but it bites your fingers!"
msgstr ""
@@ -231066,6 +231629,11 @@ msgstr ""
msgid "Create World"
msgstr ""
+#. ~ Marker for worlds that need Lua in game builds without Lua
+#: src/main_menu.cpp src/worldfactory.cpp
+msgid "Needs Lua!"
+msgstr ""
+
#: src/main_menu.cpp
msgid "Bugs? Suggestions? Use links in MOTD to report them."
msgstr ""
@@ -231296,6 +231864,17 @@ msgstr ""
msgid "Unable to make graphics directory. Check permissions."
msgstr ""
+#: src/main_menu.cpp
+msgid ""
+"You are running x32 build of the game on a x64 operating system. This means"
+" the game will NOT be able to access all memory, and you may experience "
+"random out-of-memory crashes. Consider obtaining a x64 build of the game to"
+" avoid that, but if you *really* want to be running x32 build of the game "
+"for some reason (or don't have a choice), you may want to lower your memory "
+"usage by disabling tileset, soundpack and mods and increasing autosave "
+"frequency."
+msgstr ""
+
#: src/main_menu.cpp
msgid "Really quit?"
msgstr ""
@@ -231326,6 +231905,13 @@ msgstr ""
msgid "Sorry, something went wrong."
msgstr ""
+#. ~ Error when attempting to load a world whose mods depend on Lua
+#. ~ on game build that doesn't have Lua. %s = world name.
+#: src/main_menu.cpp
+#, c-format
+msgid "%s needs game build with Lua support!"
+msgstr ""
+
#. ~ %s = world name
#: src/main_menu.cpp
#, c-format
@@ -235025,6 +235611,15 @@ msgstr[0] ""
msgid "Mod version"
msgstr ""
+#: src/mod_manager_ui.cpp
+#, c-format
+msgid "%s: API version %s\n"
+msgstr ""
+
+#: src/mod_manager_ui.cpp
+msgid "Needs Lua"
+msgstr ""
+
#: src/mod_manager_ui.cpp
msgid "Mod info path"
msgstr ""
@@ -237981,11 +238576,6 @@ msgstr ""
msgid "Focus trends towards:"
msgstr ""
-#: src/mtype.cpp
-msgid "human"
-msgid_plural "humans"
-msgstr[0] ""
-
#: src/mutation.cpp
#, c-format
msgid "Your %s is pushed off!"
@@ -240570,6 +241160,14 @@ msgstr ""
msgid "Messages related to SDL, tiles, tilesets and sound."
msgstr ""
+#: src/options.cpp
+msgid "Lua"
+msgstr ""
+
+#: src/options.cpp
+msgid "Messages from Lua scripts."
+msgstr ""
+
#: src/options.cpp
msgid "General"
msgstr ""
@@ -241642,6 +242240,16 @@ msgstr ""
msgid "The amount of time to pause between animation frames in ms."
msgstr ""
+#: src/options.cpp
+msgid "Draw bullets as lines"
+msgstr ""
+
+#: src/options.cpp
+msgid ""
+"If true, bullets are drawn as lines of images, and the animation lasts only "
+"one frame."
+msgstr ""
+
#: src/options.cpp
msgid "Blinking effects speed"
msgstr ""
@@ -241716,7 +242324,7 @@ msgid "Font height"
msgstr ""
#: src/options.cpp
-msgid "Set the font height. Requires restart."
+msgid "Set the font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -241724,7 +242332,7 @@ msgid "Font size"
msgstr ""
#: src/options.cpp
-msgid "Set the font size. Requires restart."
+msgid "Set the font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -241732,7 +242340,7 @@ msgid "Map font width"
msgstr ""
#: src/options.cpp
-msgid "Set the map font width. Requires restart."
+msgid "Set the map font width. Requires restart."
msgstr ""
#: src/options.cpp
@@ -241740,7 +242348,7 @@ msgid "Map font height"
msgstr ""
#: src/options.cpp
-msgid "Set the map font height. Requires restart."
+msgid "Set the map font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -241748,7 +242356,7 @@ msgid "Map font size"
msgstr ""
#: src/options.cpp
-msgid "Set the map font size. Requires restart."
+msgid "Set the map font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -241756,7 +242364,7 @@ msgid "Overmap font width"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font width. Requires restart."
+msgid "Set the overmap font width. Requires restart."
msgstr ""
#: src/options.cpp
@@ -241764,7 +242372,7 @@ msgid "Overmap font height"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font height. Requires restart."
+msgid "Set the overmap font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -241772,7 +242380,7 @@ msgid "Overmap font size"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font size. Requires restart."
+msgid "Set the overmap font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -249304,6 +249912,11 @@ msgstr ""
msgid " [%s]"
msgstr ""
+#. ~ Tag for mods that use Lua in game builds without Lua.
+#: src/worldfactory.cpp
+msgid "(Needs Lua) "
+msgstr ""
+
#: src/worldfactory.cpp
msgid "N/A"
msgstr ""
diff --git a/lang/po/is.po b/lang/po/is.po
index 578d211051f2..a54efe58fdb0 100644
--- a/lang/po/is.po
+++ b/lang/po/is.po
@@ -1,12 +1,12 @@
#
# Translators:
-# Coolthulhu , 2020
+# Coolthulhu , 2023
#
msgid ""
msgstr ""
"Project-Id-Version: cataclysm-bn\n"
-"POT-Creation-Date: 2023-08-03 04:45+0000\n"
-"Last-Translator: Coolthulhu , 2020\n"
+"POT-Creation-Date: 2023-09-15 13:27+0000\n"
+"Last-Translator: Coolthulhu , 2023\n"
"Language-Team: Icelandic (https://app.transifex.com/bn-team/teams/113585/is/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1490,10 +1490,18 @@ msgstr ""
msgid "[Combat] One Down, Billions to Go…"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] The Undertaker"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Rude Awakening"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] Pacifist"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Decamate"
msgstr ""
@@ -3856,10 +3864,24 @@ msgstr ""
#: data/json/bionics.json data/json/items/bionics.json
msgid ""
"Installed within you is a perpetual generator powered by nonsensoleum. When"
-" activated it's power gen doubles. If you are seeing this, you'd better be "
+" activated its power gen doubles. If you are seeing this, you'd better be "
"debugging."
msgstr ""
+#: data/json/bionics.json data/json/items/bionics.json
+msgid "Debug Fuel Cell CBM"
+msgid_plural "Debug Fuel Cell CBMs"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'Debug Fuel Cell CBM'}
+#: data/json/bionics.json data/json/items/bionics.json
+msgid ""
+"The power of the sun, in the palm of my hand! Installed within you is a "
+"perpetual generator powered by nonsensoleum. When activated its power gen "
+"doubles. If you are seeing this, you'd better be debugging."
+msgstr ""
+
#: data/json/body_parts.json
msgid "appendix"
msgstr ""
@@ -7998,6 +8020,17 @@ msgstr ""
msgid "You're winded."
msgstr ""
+#: data/json/effects.json
+msgid "Bronchospasms"
+msgstr ""
+
+#. ~ Description of effect 'Bronchospasms'.
+#: data/json/effects.json
+msgid ""
+"Something in the air is making it harder to breathe, aggravating your "
+"asthma. Increases the chance of suffering an asthma attack."
+msgstr ""
+
#: data/json/effects.json
msgid "The ceiling collapses on you!"
msgstr ""
@@ -21873,34 +21906,90 @@ msgid_plural "seeing this is a bug"
msgstr[0] ""
msgstr[1] ""
+#: data/json/species.json
+msgid "mammal"
+msgid_plural "mammals"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'mammal'}
#: data/json/species.json
msgid "a mammal"
msgstr ""
+#: data/json/species.json
+msgid "amphibian"
+msgid_plural "amphibians"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'amphibian'}
#: data/json/species.json
msgid "an amphibian"
msgstr ""
+#: data/json/species.json
+msgid "bird"
+msgid_plural "birds"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'bird'}
#: data/json/species.json
msgid "a bird"
msgstr ""
+#: data/json/species.json
+msgid "reptile"
+msgid_plural "reptiles"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'reptile'}
#: data/json/species.json
msgid "a reptile"
msgstr ""
+#: data/json/species.json
+msgid "fish"
+msgid_plural "fish"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'fish'}
#: data/json/species.json
msgid "a fish"
msgstr ""
+#: data/json/species.json
+msgid "mutant"
+msgid_plural "mutants"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'mutant'}
#: data/json/species.json
msgid "a mutant"
msgstr ""
+#: data/json/species.json
+msgid "nether creature"
+msgid_plural "nether creatures"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'nether creature'}
#: data/json/species.json
msgid "a nether creature"
msgstr ""
+#: data/json/species.json data/json/monsters/slimes.json
+msgid "blob"
+msgid_plural "blobs"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'blob'}
#: data/json/species.json
msgid "a blob"
msgstr ""
@@ -21909,30 +21998,79 @@ msgstr ""
msgid "plop."
msgstr ""
+#: data/json/species.json
+msgid "fungus"
+msgid_plural "fungi"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'fungus', 'str_pl': 'fungi'}
#: data/json/species.json
msgid "a fungus"
msgstr "sveppur"
+#: data/json/species.json
+msgid "leech plant"
+msgid_plural "leech plants"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'leech plant'}
#: data/json/species.json
msgid "a leech plant"
msgstr ""
+#: data/json/species.json
+msgid "insect"
+msgid_plural "insects"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'insect'}
#: data/json/species.json
msgid "an insect"
msgstr "skordýr"
+#: data/json/species.json
+msgid "spider"
+msgid_plural "spiders"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'spider'}
#: data/json/species.json
msgid "a spider"
msgstr ""
+#: data/json/species.json
+msgid "plant"
+msgid_plural "plants"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'plant'}
#: data/json/species.json
msgid "a plant"
msgstr ""
+#: data/json/species.json
+msgid "mollusk"
+msgid_plural "mollusks"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'mollusk'}
#: data/json/species.json
msgid "a mollusk"
msgstr ""
+#: data/json/species.json
+msgid "worm"
+msgid_plural "worms"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'worm'}
#: data/json/species.json
msgid "a worm"
msgstr ""
@@ -21941,6 +22079,14 @@ msgstr ""
msgid "rustle."
msgstr ""
+#: data/json/species.json data/json/monsters/zed-classic.json
+#: data/json/npcs/talk_tags.json
+msgid "zombie"
+msgid_plural "zombies"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'zombie'}
#: data/json/species.json
msgid "a zombie"
msgstr "uppvakningur"
@@ -21949,6 +22095,13 @@ msgstr "uppvakningur"
msgid "shuffling."
msgstr ""
+#: data/json/species.json
+msgid "robot"
+msgid_plural "robots"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'robot'}
#: data/json/species.json
msgid "a robot"
msgstr ""
@@ -21957,18 +22110,51 @@ msgstr ""
msgid "mechanical whirring."
msgstr ""
+#: data/json/species.json data/json/npcs/talk_tags.json
+msgid "horror"
+msgid_plural "horrors"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'horror'}
#: data/json/species.json
msgid "a horror"
msgstr ""
+#: data/json/species.json
+msgid "abberation"
+msgid_plural "abberations"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'abberation'}
#: data/json/species.json
msgid "an aberration"
msgstr ""
+#: data/json/species.json
+msgid "hallucination"
+msgid_plural "hallucinations"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/json/species.json src/mtype.cpp
+msgid "human"
+msgid_plural "humans"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'human'}
#: data/json/species.json
msgid "a human"
msgstr ""
+#: data/json/species.json
+msgid "unknown species"
+msgid_plural "unknown species"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/json/speech.json data/mods/Aftershock/speech.json
#: data/mods/CrazyCataclysm/crazy_speech.json
msgid "\"Hello?\""
@@ -47549,8 +47735,8 @@ msgstr[1] ""
#. flechettes, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless flechette rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless flechette rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
#: data/json/items/ammo/20x66mm.json
@@ -47562,8 +47748,8 @@ msgstr[1] ""
#. ~ Description for {'str': '20x66mm buckshot, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless buckshot rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless buckshot rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
#: data/json/items/ammo/20x66mm.json
@@ -47576,8 +47762,8 @@ msgstr[1] ""
#. slugs, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless solid projectile "
-"rounds. Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless solid projectile rounds. "
+"Being caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
#: data/json/items/ammo/20x66mm.json
@@ -49048,18 +49234,57 @@ msgid ""
msgstr ""
#: data/json/items/ammo/8x40mm.json
-msgid "bootleg 8x40mm JHP"
-msgid_plural "bootleg 8x40mm JHPs"
+msgid "8x40mm JHP, handmade"
+msgid_plural "8x40mm JHP, handmades"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': '8x40mm JHP, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm JHP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm caseless, handmade"
+msgid_plural "8x40mm caseless, handmades"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for {'str': 'bootleg 8x40mm JHP'}
+#. ~ Description for {'str': '8x40mm caseless, handmade'}
#: data/json/items/ammo/8x40mm.json
msgid ""
-"Bootleg duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
+"Handmade duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
"rounds, these cannot be disassembled or reloaded."
msgstr ""
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm HVP, handmade"
+msgid_plural "8x40mm HVP, handmades"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': '8x40mm HVP, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm HVP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm tracer, handmade"
+msgid_plural "8x40mm tracer, handmades"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': '8x40mm tracer, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm tracer rounds. Being caseless rounds,"
+" these cannot be disassembled or reloaded."
+msgstr ""
+
#. ~ Description for {'str_sp': '8x40mm caseless'}
#: data/json/items/ammo/8x40mm.json
msgid ""
@@ -49395,45 +49620,45 @@ msgid "A tube of small paintballs. They deal virtually no damage."
msgstr ""
#: data/json/items/ammo/rpg.json
-msgid "PG-7VL 93mm rocket"
-msgid_plural "PG-7VL 93mm rockets"
+msgid "PG-7VL RPG-7 rocket"
+msgid_plural "PG-7VL RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for PG-7VL 93mm rocket
+#. ~ Description for PG-7VL RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "93mm single-stage high-explosive ammunition for the RPG-7."
msgstr ""
#: data/json/items/ammo/rpg.json
-msgid "PG-7VR 64mm/105mm rocket"
-msgid_plural "PG-7VR 64mm/105mm rockets"
+msgid "PG-7VR RPG-7 rocket"
+msgid_plural "PG-7VR RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for PG-7VR 64mm/105mm rocket
+#. ~ Description for PG-7VR RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "64mm/105mm high-explosive tandem ammunition for the RPG-7."
msgstr ""
#: data/json/items/ammo/rpg.json
-msgid "TBG-7V 105mm rocket"
-msgid_plural "TBG-7V 105mm rockets"
+msgid "TBG-7V RPG-7 rocket"
+msgid_plural "TBG-7V RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for TBG-7V 105mm rocket
+#. ~ Description for TBG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "105mm thermobaric ammunition for the RPG-7."
msgstr ""
#: data/json/items/ammo/rpg.json
-msgid "OG-7V 40mm rocket"
-msgid_plural "OG-7V 40mm rockets"
+msgid "OG-7V RPG-7 rocket"
+msgid_plural "OG-7V RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
-#. ~ Description for OG-7V 40mm rocket
+#. ~ Description for OG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid ""
"40mm high-explosive fragmentation antipersonnel ammunition for the RPG-7."
@@ -71461,6 +71686,50 @@ msgid ""
"A pickled egg. Rather salty, but tastes good and lasts for a long time."
msgstr ""
+#: data/json/items/comestibles/egg.json
+msgid "salsify omelette"
+msgid_plural "salsify omelette"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'salsify omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A salsify omelette."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "wild veggetable omelette"
+msgid_plural "wild veggetable omelette"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'wild veggetable omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with wild vegetables."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "mushroom omelette"
+msgid_plural "mushroom omelette"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'mushroom omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with mushrooms."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "spanish omelette"
+msgid_plural "spanish omelette"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str_sp': 'spanish omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A spanish omelette."
+msgstr ""
+
#: data/json/items/comestibles/frozen.json
msgid "milkshake"
msgid_plural "milkshakes"
@@ -72537,6 +72806,7 @@ msgstr ""
#: data/json/items/comestibles/junkfood.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cookie"
msgid_plural "cookies"
msgstr[0] ""
@@ -74941,6 +75211,7 @@ msgstr ""
#: data/json/items/comestibles/med.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "chewing gum"
msgid_plural "chewing gum"
msgstr[0] ""
@@ -81255,6 +81526,7 @@ msgstr ""
#: data/json/items/comestibles/wheat.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cracker"
msgid_plural "crackers"
msgstr[0] ""
@@ -92637,6 +92909,19 @@ msgid ""
"likely evolved."
msgstr ""
+#: data/json/items/melee/spears_and_polearms.json
+msgid "makeshift glaive"
+msgid_plural "makeshift glaives"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'makeshift glaive'}
+#: data/json/items/melee/spears_and_polearms.json
+msgid ""
+"This is a large blade attached to a long stick. It could do a considerable "
+"amount of damage."
+msgstr ""
+
#: data/json/items/melee/spears_and_polearms.json
msgid "glaive"
msgid_plural "glaives"
@@ -98679,7 +98964,7 @@ msgstr ""
#. ~ Use action need_charges_msg for {'str': 'refillable lighter'}.
#: data/json/items/tool/fire.json src/activity_actor.cpp src/explosion.cpp
-#: src/gates.cpp
+#: src/gates.cpp src/iuse.cpp
msgid "Nothing happens."
msgstr ""
@@ -100523,19 +100808,6 @@ msgid ""
"from uncertain sources like a river may be dirty."
msgstr ""
-#: data/json/items/tool/misc.json
-msgid "makeshift glaive"
-msgid_plural "makeshift glaives"
-msgstr[0] ""
-msgstr[1] ""
-
-#. ~ Description for {'str': 'makeshift glaive'}
-#: data/json/items/tool/misc.json
-msgid ""
-"This is a large blade attached to a long stick. It could do a considerable "
-"amount of damage."
-msgstr ""
-
#: data/json/items/tool/misc.json
msgid "mind splicer kit"
msgid_plural "mind splicer kits"
@@ -111267,12 +111539,6 @@ msgid ""
"of infesting sewer lines."
msgstr ""
-#: data/json/monsters/slimes.json
-msgid "blob"
-msgid_plural "blobs"
-msgstr[0] ""
-msgstr[1] ""
-
#. ~ Description for {'str': 'blob'}
#: data/json/monsters/slimes.json
msgid ""
@@ -111915,12 +112181,6 @@ msgid ""
"envelope of scar tissue."
msgstr ""
-#: data/json/monsters/zed-classic.json data/json/npcs/talk_tags.json
-msgid "zombie"
-msgid_plural "zombies"
-msgstr[0] ""
-msgstr[1] ""
-
#. ~ Description for {'str': 'zombie'}
#: data/json/monsters/zed-classic.json
msgid ""
@@ -122065,7 +122325,8 @@ msgid "I'll kill you if you don't."
msgstr ""
#: data/json/npcs/TALK_COMMON_OTHER.json
-#: data/json/npcs/TALK_TRUE_FOODPERSON.json src/iuse.cpp
+#: data/json/npcs/TALK_TRUE_FOODPERSON.json
+#: data/mods/smart_house_remotes/main.lua src/iuse.cpp
msgid "Nevermind."
msgstr ""
@@ -129869,10 +130130,6 @@ msgstr ""
msgid "demon"
msgstr ""
-#: data/json/npcs/talk_tags.json
-msgid "horror"
-msgstr ""
-
#: data/json/npcs/talk_tags.json
msgid "indescribable beast"
msgstr ""
@@ -143202,6 +143459,16 @@ msgid ""
"coming no further. Go away."
msgstr ""
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"I was sent here by the traders at the refugee center. They told me to "
+"deliver this hard drive to you."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "The traders also mentioned you were looking for help."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "Wait! What??"
msgstr ""
@@ -143238,6 +143505,20 @@ msgstr ""
msgid "Alright, I'm leaving."
msgstr ""
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"Understood. Please drop the drive on the box embedded beneath the intercom."
+" You are welcome to leave afterwards."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "[Do as the Intercom Says]"
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "Didn't bring the hard drive now, let me return with it."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "No. Now leave."
msgstr ""
@@ -173005,6 +173286,13 @@ msgid ""
"constant jet of warm air to heat an enclosed space."
msgstr ""
+#: data/mods/Aftershock/mobs/species.json
+msgid "intelligent animal"
+msgid_plural "intelligent animals"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'intelligent animal'}
#: data/mods/Aftershock/mobs/species.json
msgid "an intelligent animal created by man before the Cataclysm"
msgstr ""
@@ -182890,6 +183178,13 @@ msgstr ""
msgid "DinoLab Operating Theater Access Control"
msgstr ""
+#: data/mods/DinoMod/monsters/dinosaur.json
+msgid "dinosaur"
+msgid_plural "dinosaurs"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'dinosaur'}
#: data/mods/DinoMod/monsters/dinosaur.json
msgid "a dinosaur"
msgstr ""
@@ -194880,6 +195175,11 @@ msgstr ""
msgid "RUNES"
msgstr ""
+#. ~ Crafting recipes subcategory of 'ENCHANTED' category
+#: data/mods/Magiclysm/qualities.json
+msgid "ENCHANTING"
+msgstr ""
+
#: data/mods/Magiclysm/qualities.json
msgid "mana focusing"
msgstr ""
@@ -195007,6 +195307,24 @@ msgctxt "start_name"
msgid "Wizard's Retreat Vacation"
msgstr ""
+#: data/mods/Magiclysm/species.json
+msgid "magical beast"
+msgid_plural "magical beasts"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "dragon"
+msgid_plural "dragons"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "lizardfolk"
+msgid_plural "lizardfolk"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/start_locations.json
msgid "Wizard's Secret Basement Study"
msgstr ""
@@ -195183,6 +195501,42 @@ msgid ""
"lights."
msgstr ""
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Bless"
+msgstr ""
+
+#. ~ Description for {'str': 'Bless'}
+#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "A spell of blessing that gives you energy and boosts your abilities."
+msgstr ""
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Holy Blade"
+msgstr ""
+
+#. ~ Description for Holy Blade
+#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
+#. Holy Blade'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "This blade of light will cut through any evil it makes contact with!"
+msgstr ""
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Spiritual Armor"
+msgstr ""
+
+#. ~ Description for Spiritual Armor
+#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
+#. of Spiritual Armor'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid ""
+"Evil will not make it through your defenses if your faith is strong enough!"
+msgstr ""
+
#: data/mods/Magiclysm/Spells/biomancer.json
msgid "Cure Light Wounds"
msgstr ""
@@ -196646,17 +197000,6 @@ msgid ""
"harmless."
msgstr ""
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Bless"
-msgstr ""
-
-#. ~ Description for {'str': 'Bless'}
-#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "A spell of blessing that gives you energy and boosts your abilities."
-msgstr ""
-
#: data/mods/Magiclysm/Spells/technomancer.json
#: data/mods/Magiclysm/effects/effects.json
msgid "Invisibility"
@@ -196674,31 +197017,6 @@ msgstr ""
msgid "To the outside world, your body fades away and you cease to exist!"
msgstr ""
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Holy Blade"
-msgstr ""
-
-#. ~ Description for Holy Blade
-#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
-#. Holy Blade'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "This blade of light will cut through any evil it makes contact with!"
-msgstr ""
-
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Spiritual Armor"
-msgstr ""
-
-#. ~ Description for Spiritual Armor
-#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
-#. of Spiritual Armor'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid ""
-"Evil will not make it through your defenses if your faith is strong enough!"
-msgstr ""
-
#: data/mods/Magiclysm/Spells/technomancer.json
msgid "Lamp"
msgstr ""
@@ -198844,6 +199162,18 @@ msgid_plural "sledge hammer +2s"
msgstr[0] ""
msgstr[1] ""
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "heavy sledge hammer +1"
+msgid_plural "heavy sledge hammers +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "heavy sledge hammer +2"
+msgid_plural "heavy sledge hammers +2"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "warhammer +1"
msgid_plural "warhammer +1s"
@@ -199049,12 +199379,14 @@ msgstr[0] ""
msgstr[1] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +1"
msgid_plural "crowbar +1s"
msgstr[0] ""
msgstr[1] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +2"
msgid_plural "crowbar +2s"
msgstr[0] ""
@@ -199109,12 +199441,14 @@ msgstr[0] ""
msgstr[1] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +1"
msgid_plural "hunting knife +1s"
msgstr[0] ""
msgstr[1] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +2"
msgid_plural "hunting knife +2s"
msgstr[0] ""
@@ -199288,6 +199622,18 @@ msgid_plural "dao +2s"
msgstr[0] ""
msgstr[1] ""
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +1"
+msgid_plural "lucerne hammers +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +2"
+msgid_plural "lucerne hammers +2"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "Biomancer spear"
msgid_plural "Biomancer spears"
@@ -200176,6 +200522,78 @@ msgid ""
"turns into the item pictured on the front, in this case a crowbar."
msgstr ""
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +1"
+msgid_plural "bottle jacks +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +2"
+msgid_plural "bottle jacks +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +1"
+msgid_plural "scalpels +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +2"
+msgid_plural "scalpels +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +1"
+msgid_plural "butcher knives +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +2"
+msgid_plural "butcher knives +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +1"
+msgid_plural "meat cleavers +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +2"
+msgid_plural "meat cleavers +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +1"
+msgid_plural "carving knives +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +2"
+msgid_plural "carving knives +2"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +1"
+msgid_plural "butchering kits +1"
+msgstr[0] ""
+msgstr[1] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +2"
+msgid_plural "butchering kits +2"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/items/enchanted_unarmed.json
msgid "cestus +1"
msgid_plural "cestus +1s"
@@ -201250,6 +201668,20 @@ msgid ""
"protective equipment inside."
msgstr ""
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid "Enchanter's Guidebook"
+msgid_plural "copies of Enchanter's Guidebooks"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': "Enchanter's Guidebook", 'str_pl': "copies of
+#. Enchanter's Guidebooks"}
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid ""
+"A hefty textbook on the theory and practice of magically strengthening "
+"weapons and tools."
+msgstr ""
+
#: data/mods/Magiclysm/items/spell_scrolls.json
msgid "Spell Scroll"
msgid_plural "Spell Scrolls"
@@ -202325,6 +202757,12 @@ msgid ""
"much more expensive."
msgstr ""
+#: data/mods/Magiclysm/monsters/demon_spider.json
+msgid "demon spider"
+msgid_plural "demon spiders"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid "demon spiderling"
msgid_plural "demon spiderlings"
@@ -202340,12 +202778,6 @@ msgid ""
"with venom."
msgstr ""
-#: data/mods/Magiclysm/monsters/demon_spider.json
-msgid "demon spider"
-msgid_plural "demon spiders"
-msgstr[0] ""
-msgstr[1] ""
-
#. ~ Description for demon spider
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid ""
@@ -205171,10 +205603,22 @@ msgid ""
"human candy! Are you a real monster? Will you be able to devour it all?\""
msgstr ""
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "marshmallow"
+msgid_plural "marshmallows"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "shlop."
msgstr ""
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "gummy"
+msgid_plural "gummies"
+msgstr[0] ""
+msgstr[1] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "pop."
msgstr ""
@@ -207496,6 +207940,15 @@ msgid ""
"city size set to 1 and spacing set to 8."
msgstr ""
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "SaveLoad Lua Test"
+msgstr ""
+
+#. ~ Description for SaveLoad Lua Test
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "Mod for testing Lua save/load API."
+msgstr ""
+
#: data/mods/sees_player_hitbutton/modinfo.json
msgid "sees-player icon, HitButton_iso"
msgstr ""
@@ -207518,6 +207971,78 @@ msgid ""
"retrodays tileset."
msgstr ""
+#: data/mods/smart_house_remotes/item.json
+msgid "smart house remote"
+msgid_plural "smart house remotes"
+msgstr[0] ""
+msgstr[1] ""
+
+#. ~ Description for {'str': 'smart house remote'}
+#: data/mods/smart_house_remotes/item.json
+msgid ""
+"A small remote with lcd display used to control garage doors and window "
+"curtains. Completely useless now, unless you manage to restore power to the"
+" house."
+msgstr ""
+
+#: data/mods/smart_house_remotes/iuse.json
+msgid "Control doors and shutters"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Open curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Close curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Raise garage door"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Lower garage door"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's not enough grid charge.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Low Current At Endpoint"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when player is too far away from the area.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Signal"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's nothing to activate.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Endpoints Available"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "The remote beeps quietly."
+msgstr ""
+
+#. ~ Title of the menu prompting player to select what to activate with the
+#. remote.
+#. Typically it's doors, garage doors or window curtains.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Select endpoint"
+msgstr ""
+
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Smart House Remotes"
+msgstr ""
+
+#. ~ Description for Smart House Remotes
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Add remotes for controlling garage doors and window curtains."
+msgstr ""
+
#: data/mods/speedydex/modinfo.json
msgid "SpeedyDex"
msgstr ""
@@ -208944,6 +209469,14 @@ msgstr ""
msgid "Debug Menu"
msgstr ""
+#: data/raw/keybindings/keybindings.json
+msgid "Lua Console"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Reload Lua Code"
+msgstr ""
+
#: data/raw/keybindings/keybindings.json
msgid "View Scentmap"
msgstr ""
@@ -209499,6 +210032,26 @@ msgstr ""
msgid "Add new page"
msgstr ""
+#: data/raw/keybindings/keybindings.json
+msgid "Edit command"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History up"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History down"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the top"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the bottom"
+msgstr ""
+
#: data/raw/keybindings/messages.json
msgid "Toggle wide display"
msgstr ""
@@ -209657,7 +210210,31 @@ msgstr ""
#: src/achievement.cpp
#, c-format
-msgid "Attain %s skill level of %i (%i/%i)."
+msgid "Kill at least %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Don't kill even a single %s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Kill no more than %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+msgid " (failed)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Attain skill level of %i in %s (%i/%i)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Stay at or below skill level of %i in %s (%i/%i)"
msgstr ""
#: src/achievement.cpp
@@ -215199,6 +215776,30 @@ msgstr ""
msgid "に坂索トし荷測のンおク妙免イロコヤ梅棋厚れ表幌"
msgstr ""
+#: src/catalua_console.cpp
+msgid "Press Ctrl+S to run script, press Esc to cancel"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press arrow keys to navigate text input"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to add new line"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to enter/edit command, Esc to quit"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Up/Down arrows to select from history"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press PgUp/PgDn/Home/End to scroll output window"
+msgstr ""
+
#: src/character.cpp src/debug_menu.cpp src/game.cpp src/iuse.cpp
#: src/npctrade.cpp
msgid "You"
@@ -220000,6 +220601,10 @@ msgstr ""
msgid "Change [b]attery charge"
msgstr ""
+#: src/debug_menu.cpp
+msgid "Export [j]son template"
+msgstr ""
+
#: src/debug_menu.cpp
msgid "Vehicle…"
msgstr ""
@@ -220116,6 +220721,10 @@ msgstr ""
msgid "Player…"
msgstr ""
+#: src/debug_menu.cpp
+msgid "Lua console"
+msgstr ""
+
#: src/debug_menu.cpp
msgid ""
"Debug Functions - Manipulate the fabric of reality!\n"
@@ -220982,6 +221591,10 @@ msgstr ""
msgid "By how much? (in kJ, negative to discharge)"
msgstr ""
+#: src/debug_menu.cpp
+msgid "JSON template written to debug.log"
+msgstr ""
+
#: src/dependency_tree.cpp
msgid "Missing Dependency(ies): "
msgstr ""
@@ -225348,21 +225961,19 @@ msgstr ""
#: src/game.cpp
#, c-format
-msgid "Stepping into that %1$s looks risky, but you enter anyway."
+msgid "Stepping into that %1$s looks risky. %2$s"
msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Run into it if you wish to enter "
-"anyway."
+msgid "But you enter anyway."
msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Crouch and move into it if you wish to"
-" enter anyway."
+msgid "Run into it if you wish to enter anyway."
+msgstr ""
+
+#: src/game.cpp
+msgid "Crouch and move into it if you wish to enter anyway."
msgstr ""
#: src/game.cpp
@@ -233279,6 +233890,11 @@ msgstr ""
msgid "You try to feed the %s some %s, but it vanishes!"
msgstr ""
+#: src/iuse.cpp
+#, c-format
+msgid "You reach for the %s, but it recoils away from you!"
+msgstr ""
+
#: src/iuse.cpp
msgid "You want to feed it the dog food, but it bites your fingers!"
msgstr ""
@@ -239137,6 +239753,11 @@ msgstr ""
msgid "Create World"
msgstr ""
+#. ~ Marker for worlds that need Lua in game builds without Lua
+#: src/main_menu.cpp src/worldfactory.cpp
+msgid "Needs Lua!"
+msgstr ""
+
#: src/main_menu.cpp
msgid "Bugs? Suggestions? Use links in MOTD to report them."
msgstr ""
@@ -239367,6 +239988,17 @@ msgstr ""
msgid "Unable to make graphics directory. Check permissions."
msgstr ""
+#: src/main_menu.cpp
+msgid ""
+"You are running x32 build of the game on a x64 operating system. This means"
+" the game will NOT be able to access all memory, and you may experience "
+"random out-of-memory crashes. Consider obtaining a x64 build of the game to"
+" avoid that, but if you *really* want to be running x32 build of the game "
+"for some reason (or don't have a choice), you may want to lower your memory "
+"usage by disabling tileset, soundpack and mods and increasing autosave "
+"frequency."
+msgstr ""
+
#: src/main_menu.cpp
msgid "Really quit?"
msgstr ""
@@ -239397,6 +240029,13 @@ msgstr ""
msgid "Sorry, something went wrong."
msgstr ""
+#. ~ Error when attempting to load a world whose mods depend on Lua
+#. ~ on game build that doesn't have Lua. %s = world name.
+#: src/main_menu.cpp
+#, c-format
+msgid "%s needs game build with Lua support!"
+msgstr ""
+
#. ~ %s = world name
#: src/main_menu.cpp
#, c-format
@@ -243108,6 +243747,15 @@ msgstr[1] ""
msgid "Mod version"
msgstr ""
+#: src/mod_manager_ui.cpp
+#, c-format
+msgid "%s: API version %s\n"
+msgstr ""
+
+#: src/mod_manager_ui.cpp
+msgid "Needs Lua"
+msgstr ""
+
#: src/mod_manager_ui.cpp
msgid "Mod info path"
msgstr ""
@@ -246065,12 +246713,6 @@ msgstr ""
msgid "Focus trends towards:"
msgstr ""
-#: src/mtype.cpp
-msgid "human"
-msgid_plural "humans"
-msgstr[0] ""
-msgstr[1] ""
-
#: src/mutation.cpp
#, c-format
msgid "Your %s is pushed off!"
@@ -248666,6 +249308,14 @@ msgstr ""
msgid "Messages related to SDL, tiles, tilesets and sound."
msgstr ""
+#: src/options.cpp
+msgid "Lua"
+msgstr ""
+
+#: src/options.cpp
+msgid "Messages from Lua scripts."
+msgstr ""
+
#: src/options.cpp
msgid "General"
msgstr "Almennt"
@@ -249738,6 +250388,16 @@ msgstr ""
msgid "The amount of time to pause between animation frames in ms."
msgstr ""
+#: src/options.cpp
+msgid "Draw bullets as lines"
+msgstr ""
+
+#: src/options.cpp
+msgid ""
+"If true, bullets are drawn as lines of images, and the animation lasts only "
+"one frame."
+msgstr ""
+
#: src/options.cpp
msgid "Blinking effects speed"
msgstr ""
@@ -249812,7 +250472,7 @@ msgid "Font height"
msgstr ""
#: src/options.cpp
-msgid "Set the font height. Requires restart."
+msgid "Set the font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -249820,7 +250480,7 @@ msgid "Font size"
msgstr ""
#: src/options.cpp
-msgid "Set the font size. Requires restart."
+msgid "Set the font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -249828,7 +250488,7 @@ msgid "Map font width"
msgstr ""
#: src/options.cpp
-msgid "Set the map font width. Requires restart."
+msgid "Set the map font width. Requires restart."
msgstr ""
#: src/options.cpp
@@ -249836,7 +250496,7 @@ msgid "Map font height"
msgstr ""
#: src/options.cpp
-msgid "Set the map font height. Requires restart."
+msgid "Set the map font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -249844,7 +250504,7 @@ msgid "Map font size"
msgstr ""
#: src/options.cpp
-msgid "Set the map font size. Requires restart."
+msgid "Set the map font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -249852,7 +250512,7 @@ msgid "Overmap font width"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font width. Requires restart."
+msgid "Set the overmap font width. Requires restart."
msgstr ""
#: src/options.cpp
@@ -249860,7 +250520,7 @@ msgid "Overmap font height"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font height. Requires restart."
+msgid "Set the overmap font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -249868,7 +250528,7 @@ msgid "Overmap font size"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font size. Requires restart."
+msgid "Set the overmap font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -257417,6 +258077,11 @@ msgstr ""
msgid " [%s]"
msgstr ""
+#. ~ Tag for mods that use Lua in game builds without Lua.
+#: src/worldfactory.cpp
+msgid "(Needs Lua) "
+msgstr ""
+
#: src/worldfactory.cpp
msgid "N/A"
msgstr ""
diff --git a/lang/po/it_IT.po b/lang/po/it_IT.po
index 7b33a3814e05..1e20a34aa011 100644
--- a/lang/po/it_IT.po
+++ b/lang/po/it_IT.po
@@ -1,12 +1,12 @@
#
# Translators:
-# Coolthulhu , 2022
+# Coolthulhu , 2023
#
msgid ""
msgstr ""
"Project-Id-Version: cataclysm-bn\n"
-"POT-Creation-Date: 2023-08-03 04:45+0000\n"
-"Last-Translator: Coolthulhu , 2022\n"
+"POT-Creation-Date: 2023-09-15 13:27+0000\n"
+"Last-Translator: Coolthulhu , 2023\n"
"Language-Team: Italian (Italy) (https://app.transifex.com/bn-team/teams/113585/it_IT/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1514,10 +1514,18 @@ msgstr ""
msgid "[Combat] One Down, Billions to Go…"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] The Undertaker"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Rude Awakening"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] Pacifist"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Decamate"
msgstr ""
@@ -3931,10 +3939,25 @@ msgstr ""
#: data/json/bionics.json data/json/items/bionics.json
msgid ""
"Installed within you is a perpetual generator powered by nonsensoleum. When"
-" activated it's power gen doubles. If you are seeing this, you'd better be "
+" activated its power gen doubles. If you are seeing this, you'd better be "
"debugging."
msgstr ""
+#: data/json/bionics.json data/json/items/bionics.json
+msgid "Debug Fuel Cell CBM"
+msgid_plural "Debug Fuel Cell CBMs"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'Debug Fuel Cell CBM'}
+#: data/json/bionics.json data/json/items/bionics.json
+msgid ""
+"The power of the sun, in the palm of my hand! Installed within you is a "
+"perpetual generator powered by nonsensoleum. When activated its power gen "
+"doubles. If you are seeing this, you'd better be debugging."
+msgstr ""
+
#: data/json/body_parts.json
msgid "appendix"
msgstr "appendice"
@@ -8088,6 +8111,17 @@ msgstr ""
msgid "You're winded."
msgstr ""
+#: data/json/effects.json
+msgid "Bronchospasms"
+msgstr ""
+
+#. ~ Description of effect 'Bronchospasms'.
+#: data/json/effects.json
+msgid ""
+"Something in the air is making it harder to breathe, aggravating your "
+"asthma. Increases the chance of suffering an asthma attack."
+msgstr ""
+
#: data/json/effects.json
msgid "The ceiling collapses on you!"
msgstr "Il tetto collassa su di te!"
@@ -22359,34 +22393,98 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+#: data/json/species.json
+msgid "mammal"
+msgid_plural "mammals"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'mammal'}
#: data/json/species.json
msgid "a mammal"
msgstr ""
+#: data/json/species.json
+msgid "amphibian"
+msgid_plural "amphibians"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'amphibian'}
#: data/json/species.json
msgid "an amphibian"
msgstr ""
+#: data/json/species.json
+msgid "bird"
+msgid_plural "birds"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'bird'}
#: data/json/species.json
msgid "a bird"
msgstr ""
+#: data/json/species.json
+msgid "reptile"
+msgid_plural "reptiles"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'reptile'}
#: data/json/species.json
msgid "a reptile"
msgstr ""
+#: data/json/species.json
+msgid "fish"
+msgid_plural "fish"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str_sp': 'fish'}
#: data/json/species.json
msgid "a fish"
msgstr ""
+#: data/json/species.json
+msgid "mutant"
+msgid_plural "mutants"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'mutant'}
#: data/json/species.json
msgid "a mutant"
msgstr ""
+#: data/json/species.json
+msgid "nether creature"
+msgid_plural "nether creatures"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'nether creature'}
#: data/json/species.json
msgid "a nether creature"
msgstr ""
+#: data/json/species.json data/json/monsters/slimes.json
+msgid "blob"
+msgid_plural "blobs"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'blob'}
#: data/json/species.json
msgid "a blob"
msgstr ""
@@ -22395,30 +22493,86 @@ msgstr ""
msgid "plop."
msgstr ""
+#: data/json/species.json
+msgid "fungus"
+msgid_plural "fungi"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'fungus', 'str_pl': 'fungi'}
#: data/json/species.json
msgid "a fungus"
msgstr ""
+#: data/json/species.json
+msgid "leech plant"
+msgid_plural "leech plants"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'leech plant'}
#: data/json/species.json
msgid "a leech plant"
msgstr ""
+#: data/json/species.json
+msgid "insect"
+msgid_plural "insects"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'insect'}
#: data/json/species.json
msgid "an insect"
msgstr ""
+#: data/json/species.json
+msgid "spider"
+msgid_plural "spiders"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'spider'}
#: data/json/species.json
msgid "a spider"
msgstr ""
+#: data/json/species.json
+msgid "plant"
+msgid_plural "plants"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'plant'}
#: data/json/species.json
msgid "a plant"
msgstr ""
+#: data/json/species.json
+msgid "mollusk"
+msgid_plural "mollusks"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'mollusk'}
#: data/json/species.json
msgid "a mollusk"
msgstr ""
+#: data/json/species.json
+msgid "worm"
+msgid_plural "worms"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'worm'}
#: data/json/species.json
msgid "a worm"
msgstr ""
@@ -22427,6 +22581,15 @@ msgstr ""
msgid "rustle."
msgstr ""
+#: data/json/species.json data/json/monsters/zed-classic.json
+#: data/json/npcs/talk_tags.json
+msgid "zombie"
+msgid_plural "zombies"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'zombie'}
#: data/json/species.json
msgid "a zombie"
msgstr ""
@@ -22435,6 +22598,14 @@ msgstr ""
msgid "shuffling."
msgstr ""
+#: data/json/species.json
+msgid "robot"
+msgid_plural "robots"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'robot'}
#: data/json/species.json
msgid "a robot"
msgstr ""
@@ -22443,18 +22614,56 @@ msgstr ""
msgid "mechanical whirring."
msgstr ""
+#: data/json/species.json data/json/npcs/talk_tags.json
+msgid "horror"
+msgid_plural "horrors"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'horror'}
#: data/json/species.json
msgid "a horror"
msgstr ""
+#: data/json/species.json
+msgid "abberation"
+msgid_plural "abberations"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'abberation'}
#: data/json/species.json
msgid "an aberration"
msgstr ""
+#: data/json/species.json
+msgid "hallucination"
+msgid_plural "hallucinations"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/json/species.json src/mtype.cpp
+msgid "human"
+msgid_plural "humans"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'human'}
#: data/json/species.json
msgid "a human"
msgstr ""
+#: data/json/species.json
+msgid "unknown species"
+msgid_plural "unknown species"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/json/speech.json data/mods/Aftershock/speech.json
#: data/mods/CrazyCataclysm/crazy_speech.json
msgid "\"Hello?\""
@@ -49184,11 +49393,9 @@ msgstr[2] "20x66mm flechette, fatte a mano"
#. flechettes, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless flechette rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless flechette rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
-"Proiettili a flèchette fatti a mano illegali duplicati dei 20x66mm Rivtech "
-"caseless.Essendo caseless non possono essere disassemblati o ricaricati."
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm buckshot, handmade"
@@ -49200,11 +49407,9 @@ msgstr[2] ""
#. ~ Description for {'str': '20x66mm buckshot, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless buckshot rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless buckshot rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
-"Duplicato fatto a mano ed illegale dei pallettoni caseless della Rivtech da "
-"20x66mm. Essendo caseless, non possono essere disassemblati o riutilizzati."
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm slug, handmade"
@@ -49217,12 +49422,9 @@ msgstr[2] "20x66mm pallettone, fatti a mano"
#. slugs, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless solid projectile "
-"rounds. Being caseless rounds, these cannot be disassembled or reloaded."
+"Handmade duplicates of Rivtech 20x66mm caseless solid projectile rounds. "
+"Being caseless rounds, these cannot be disassembled or reloaded."
msgstr ""
-"Duplicati clandestini dei proiettili Rivtech 20x66mm senza bossolo. Essendo "
-"proiettili senza bossolo, questi non possono essere disassemblati o "
-"riutilizzati."
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm explosive"
@@ -51089,20 +51291,60 @@ msgstr ""
"movimenti delle truppe."
#: data/json/items/ammo/8x40mm.json
-msgid "bootleg 8x40mm JHP"
-msgid_plural "bootleg 8x40mm JHPs"
+msgid "8x40mm JHP, handmade"
+msgid_plural "8x40mm JHP, handmades"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
-#. ~ Description for {'str': 'bootleg 8x40mm JHP'}
+#. ~ Description for {'str': '8x40mm JHP, handmade'}
#: data/json/items/ammo/8x40mm.json
msgid ""
-"Bootleg duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
+"Handmade duplicates of Rivtech 8x40mm JHP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm caseless, handmade"
+msgid_plural "8x40mm caseless, handmades"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': '8x40mm caseless, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
"rounds, these cannot be disassembled or reloaded."
msgstr ""
-"Duplicato pirata dei proiettili 8x40mm senza capsula. Essendo proiettili "
-"senza capsula, questi non possono essere disassemblati o ricaricati."
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm HVP, handmade"
+msgid_plural "8x40mm HVP, handmades"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': '8x40mm HVP, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm HVP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm tracer, handmade"
+msgid_plural "8x40mm tracer, handmades"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': '8x40mm tracer, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm tracer rounds. Being caseless rounds,"
+" these cannot be disassembled or reloaded."
+msgstr ""
#. ~ Description for {'str_sp': '8x40mm caseless'}
#: data/json/items/ammo/8x40mm.json
@@ -51528,49 +51770,49 @@ msgstr ""
"allo zero."
#: data/json/items/ammo/rpg.json
-msgid "PG-7VL 93mm rocket"
-msgid_plural "PG-7VL 93mm rockets"
+msgid "PG-7VL RPG-7 rocket"
+msgid_plural "PG-7VL RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
-#. ~ Description for PG-7VL 93mm rocket
+#. ~ Description for PG-7VL RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "93mm single-stage high-explosive ammunition for the RPG-7."
msgstr "Munizione 93mm HE altamente esplosiva a stage singolo per RPG-7."
#: data/json/items/ammo/rpg.json
-msgid "PG-7VR 64mm/105mm rocket"
-msgid_plural "PG-7VR 64mm/105mm rockets"
+msgid "PG-7VR RPG-7 rocket"
+msgid_plural "PG-7VR RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
-#. ~ Description for PG-7VR 64mm/105mm rocket
+#. ~ Description for PG-7VR RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "64mm/105mm high-explosive tandem ammunition for the RPG-7."
msgstr "Razzo da 64mm/105mm a doppia detonazione per RPG-7. "
#: data/json/items/ammo/rpg.json
-msgid "TBG-7V 105mm rocket"
-msgid_plural "TBG-7V 105mm rockets"
+msgid "TBG-7V RPG-7 rocket"
+msgid_plural "TBG-7V RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
-#. ~ Description for TBG-7V 105mm rocket
+#. ~ Description for TBG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "105mm thermobaric ammunition for the RPG-7."
msgstr "Razzo da 105mm ad esplosione termobarica per RPG-7."
#: data/json/items/ammo/rpg.json
-msgid "OG-7V 40mm rocket"
-msgid_plural "OG-7V 40mm rockets"
+msgid "OG-7V RPG-7 rocket"
+msgid_plural "OG-7V RPG-7 rockets"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
-#. ~ Description for OG-7V 40mm rocket
+#. ~ Description for OG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid ""
"40mm high-explosive fragmentation antipersonnel ammunition for the RPG-7."
@@ -75865,6 +76107,54 @@ msgid ""
"A pickled egg. Rather salty, but tastes good and lasts for a long time."
msgstr ""
+#: data/json/items/comestibles/egg.json
+msgid "salsify omelette"
+msgid_plural "salsify omelette"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str_sp': 'salsify omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A salsify omelette."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "wild veggetable omelette"
+msgid_plural "wild veggetable omelette"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str_sp': 'wild veggetable omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with wild vegetables."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "mushroom omelette"
+msgid_plural "mushroom omelette"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str_sp': 'mushroom omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with mushrooms."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "spanish omelette"
+msgid_plural "spanish omelette"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str_sp': 'spanish omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A spanish omelette."
+msgstr ""
+
#: data/json/items/comestibles/frozen.json
msgid "milkshake"
msgid_plural "milkshakes"
@@ -77104,6 +77394,7 @@ msgstr ""
#: data/json/items/comestibles/junkfood.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cookie"
msgid_plural "cookies"
msgstr[0] ""
@@ -79749,6 +80040,7 @@ msgstr ""
#: data/json/items/comestibles/med.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "chewing gum"
msgid_plural "chewing gum"
msgstr[0] ""
@@ -86663,6 +86955,7 @@ msgstr ""
#: data/json/items/comestibles/wheat.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cracker"
msgid_plural "crackers"
msgstr[0] ""
@@ -98889,6 +99182,20 @@ msgid ""
"likely evolved."
msgstr ""
+#: data/json/items/melee/spears_and_polearms.json
+msgid "makeshift glaive"
+msgid_plural "makeshift glaives"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'makeshift glaive'}
+#: data/json/items/melee/spears_and_polearms.json
+msgid ""
+"This is a large blade attached to a long stick. It could do a considerable "
+"amount of damage."
+msgstr ""
+
#: data/json/items/melee/spears_and_polearms.json
msgid "glaive"
msgid_plural "glaives"
@@ -105567,7 +105874,7 @@ msgstr ""
#. ~ Use action need_charges_msg for {'str': 'refillable lighter'}.
#: data/json/items/tool/fire.json src/activity_actor.cpp src/explosion.cpp
-#: src/gates.cpp
+#: src/gates.cpp src/iuse.cpp
msgid "Nothing happens."
msgstr "Non accade nulla."
@@ -107546,20 +107853,6 @@ msgid ""
"from uncertain sources like a river may be dirty."
msgstr ""
-#: data/json/items/tool/misc.json
-msgid "makeshift glaive"
-msgid_plural "makeshift glaives"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
-#. ~ Description for {'str': 'makeshift glaive'}
-#: data/json/items/tool/misc.json
-msgid ""
-"This is a large blade attached to a long stick. It could do a considerable "
-"amount of damage."
-msgstr ""
-
#: data/json/items/tool/misc.json
msgid "mind splicer kit"
msgid_plural "mind splicer kits"
@@ -118991,13 +119284,6 @@ msgid ""
"of infesting sewer lines."
msgstr ""
-#: data/json/monsters/slimes.json
-msgid "blob"
-msgid_plural "blobs"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
#. ~ Description for {'str': 'blob'}
#: data/json/monsters/slimes.json
msgid ""
@@ -119680,13 +119966,6 @@ msgid ""
"envelope of scar tissue."
msgstr ""
-#: data/json/monsters/zed-classic.json data/json/npcs/talk_tags.json
-msgid "zombie"
-msgid_plural "zombies"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
#. ~ Description for {'str': 'zombie'}
#: data/json/monsters/zed-classic.json
msgid ""
@@ -129983,7 +130262,8 @@ msgid "I'll kill you if you don't."
msgstr ""
#: data/json/npcs/TALK_COMMON_OTHER.json
-#: data/json/npcs/TALK_TRUE_FOODPERSON.json src/iuse.cpp
+#: data/json/npcs/TALK_TRUE_FOODPERSON.json
+#: data/mods/smart_house_remotes/main.lua src/iuse.cpp
msgid "Nevermind."
msgstr ""
@@ -137792,10 +138072,6 @@ msgstr ""
msgid "demon"
msgstr ""
-#: data/json/npcs/talk_tags.json
-msgid "horror"
-msgstr ""
-
#: data/json/npcs/talk_tags.json
msgid "indescribable beast"
msgstr ""
@@ -151135,6 +151411,16 @@ msgid ""
"coming no further. Go away."
msgstr ""
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"I was sent here by the traders at the refugee center. They told me to "
+"deliver this hard drive to you."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "The traders also mentioned you were looking for help."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "Wait! What??"
msgstr ""
@@ -151171,6 +151457,20 @@ msgstr ""
msgid "Alright, I'm leaving."
msgstr ""
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"Understood. Please drop the drive on the box embedded beneath the intercom."
+" You are welcome to leave afterwards."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "[Do as the Intercom Says]"
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "Didn't bring the hard drive now, let me return with it."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "No. Now leave."
msgstr ""
@@ -181650,6 +181950,14 @@ msgid ""
"constant jet of warm air to heat an enclosed space."
msgstr ""
+#: data/mods/Aftershock/mobs/species.json
+msgid "intelligent animal"
+msgid_plural "intelligent animals"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'intelligent animal'}
#: data/mods/Aftershock/mobs/species.json
msgid "an intelligent animal created by man before the Cataclysm"
msgstr ""
@@ -191816,6 +192124,14 @@ msgstr ""
msgid "DinoLab Operating Theater Access Control"
msgstr ""
+#: data/mods/DinoMod/monsters/dinosaur.json
+msgid "dinosaur"
+msgid_plural "dinosaurs"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'dinosaur'}
#: data/mods/DinoMod/monsters/dinosaur.json
msgid "a dinosaur"
msgstr ""
@@ -204600,6 +204916,11 @@ msgstr ""
msgid "RUNES"
msgstr ""
+#. ~ Crafting recipes subcategory of 'ENCHANTED' category
+#: data/mods/Magiclysm/qualities.json
+msgid "ENCHANTING"
+msgstr ""
+
#: data/mods/Magiclysm/qualities.json
msgid "mana focusing"
msgstr ""
@@ -204727,6 +205048,27 @@ msgctxt "start_name"
msgid "Wizard's Retreat Vacation"
msgstr ""
+#: data/mods/Magiclysm/species.json
+msgid "magical beast"
+msgid_plural "magical beasts"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "dragon"
+msgid_plural "dragons"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "lizardfolk"
+msgid_plural "lizardfolk"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/Magiclysm/start_locations.json
msgid "Wizard's Secret Basement Study"
msgstr ""
@@ -204903,6 +205245,42 @@ msgid ""
"lights."
msgstr ""
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Bless"
+msgstr ""
+
+#. ~ Description for {'str': 'Bless'}
+#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "A spell of blessing that gives you energy and boosts your abilities."
+msgstr ""
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Holy Blade"
+msgstr ""
+
+#. ~ Description for Holy Blade
+#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
+#. Holy Blade'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "This blade of light will cut through any evil it makes contact with!"
+msgstr ""
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Spiritual Armor"
+msgstr ""
+
+#. ~ Description for Spiritual Armor
+#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
+#. of Spiritual Armor'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid ""
+"Evil will not make it through your defenses if your faith is strong enough!"
+msgstr ""
+
#: data/mods/Magiclysm/Spells/biomancer.json
msgid "Cure Light Wounds"
msgstr ""
@@ -206366,17 +206744,6 @@ msgid ""
"harmless."
msgstr ""
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Bless"
-msgstr ""
-
-#. ~ Description for {'str': 'Bless'}
-#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "A spell of blessing that gives you energy and boosts your abilities."
-msgstr ""
-
#: data/mods/Magiclysm/Spells/technomancer.json
#: data/mods/Magiclysm/effects/effects.json
msgid "Invisibility"
@@ -206394,31 +206761,6 @@ msgstr ""
msgid "To the outside world, your body fades away and you cease to exist!"
msgstr ""
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Holy Blade"
-msgstr ""
-
-#. ~ Description for Holy Blade
-#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
-#. Holy Blade'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "This blade of light will cut through any evil it makes contact with!"
-msgstr ""
-
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Spiritual Armor"
-msgstr ""
-
-#. ~ Description for Spiritual Armor
-#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
-#. of Spiritual Armor'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid ""
-"Evil will not make it through your defenses if your faith is strong enough!"
-msgstr ""
-
#: data/mods/Magiclysm/Spells/technomancer.json
msgid "Lamp"
msgstr ""
@@ -208697,6 +209039,20 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "heavy sledge hammer +1"
+msgid_plural "heavy sledge hammers +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "heavy sledge hammer +2"
+msgid_plural "heavy sledge hammers +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "warhammer +1"
msgid_plural "warhammer +1s"
@@ -208936,6 +209292,7 @@ msgstr[1] ""
msgstr[2] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +1"
msgid_plural "crowbar +1s"
msgstr[0] ""
@@ -208943,6 +209300,7 @@ msgstr[1] ""
msgstr[2] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +2"
msgid_plural "crowbar +2s"
msgstr[0] ""
@@ -209006,6 +209364,7 @@ msgstr[1] ""
msgstr[2] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +1"
msgid_plural "hunting knife +1s"
msgstr[0] ""
@@ -209013,6 +209372,7 @@ msgstr[1] ""
msgstr[2] ""
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +2"
msgid_plural "hunting knife +2s"
msgstr[0] ""
@@ -209215,6 +209575,20 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +1"
+msgid_plural "lucerne hammers +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +2"
+msgid_plural "lucerne hammers +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "Biomancer spear"
msgid_plural "Biomancer spears"
@@ -210162,6 +210536,90 @@ msgid ""
"turns into the item pictured on the front, in this case a crowbar."
msgstr ""
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +1"
+msgid_plural "bottle jacks +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +2"
+msgid_plural "bottle jacks +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +1"
+msgid_plural "scalpels +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +2"
+msgid_plural "scalpels +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +1"
+msgid_plural "butcher knives +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +2"
+msgid_plural "butcher knives +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +1"
+msgid_plural "meat cleavers +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +2"
+msgid_plural "meat cleavers +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +1"
+msgid_plural "carving knives +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +2"
+msgid_plural "carving knives +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +1"
+msgid_plural "butchering kits +1"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +2"
+msgid_plural "butchering kits +2"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/Magiclysm/items/enchanted_unarmed.json
msgid "cestus +1"
msgid_plural "cestus +1s"
@@ -211332,6 +211790,21 @@ msgid ""
"protective equipment inside."
msgstr ""
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid "Enchanter's Guidebook"
+msgid_plural "copies of Enchanter's Guidebooks"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': "Enchanter's Guidebook", 'str_pl': "copies of
+#. Enchanter's Guidebooks"}
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid ""
+"A hefty textbook on the theory and practice of magically strengthening "
+"weapons and tools."
+msgstr ""
+
#: data/mods/Magiclysm/items/spell_scrolls.json
msgid "Spell Scroll"
msgid_plural "Spell Scrolls"
@@ -212533,6 +213006,13 @@ msgid ""
"much more expensive."
msgstr ""
+#: data/mods/Magiclysm/monsters/demon_spider.json
+msgid "demon spider"
+msgid_plural "demon spiders"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid "demon spiderling"
msgid_plural "demon spiderlings"
@@ -212549,13 +213029,6 @@ msgid ""
"with venom."
msgstr ""
-#: data/mods/Magiclysm/monsters/demon_spider.json
-msgid "demon spider"
-msgid_plural "demon spiders"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
#. ~ Description for demon spider
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid ""
@@ -215513,10 +215986,24 @@ msgid ""
"human candy! Are you a real monster? Will you be able to devour it all?\""
msgstr ""
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "marshmallow"
+msgid_plural "marshmallows"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "shlop."
msgstr ""
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "gummy"
+msgid_plural "gummies"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "pop."
msgstr ""
@@ -217915,6 +218402,15 @@ msgid ""
"city size set to 1 and spacing set to 8."
msgstr ""
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "SaveLoad Lua Test"
+msgstr ""
+
+#. ~ Description for SaveLoad Lua Test
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "Mod for testing Lua save/load API."
+msgstr ""
+
#: data/mods/sees_player_hitbutton/modinfo.json
msgid "sees-player icon, HitButton_iso"
msgstr ""
@@ -217937,6 +218433,79 @@ msgid ""
"retrodays tileset."
msgstr ""
+#: data/mods/smart_house_remotes/item.json
+msgid "smart house remote"
+msgid_plural "smart house remotes"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#. ~ Description for {'str': 'smart house remote'}
+#: data/mods/smart_house_remotes/item.json
+msgid ""
+"A small remote with lcd display used to control garage doors and window "
+"curtains. Completely useless now, unless you manage to restore power to the"
+" house."
+msgstr ""
+
+#: data/mods/smart_house_remotes/iuse.json
+msgid "Control doors and shutters"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Open curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Close curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Raise garage door"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Lower garage door"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's not enough grid charge.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Low Current At Endpoint"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when player is too far away from the area.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Signal"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's nothing to activate.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Endpoints Available"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "The remote beeps quietly."
+msgstr ""
+
+#. ~ Title of the menu prompting player to select what to activate with the
+#. remote.
+#. Typically it's doors, garage doors or window curtains.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Select endpoint"
+msgstr ""
+
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Smart House Remotes"
+msgstr ""
+
+#. ~ Description for Smart House Remotes
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Add remotes for controlling garage doors and window curtains."
+msgstr ""
+
#: data/mods/speedydex/modinfo.json
msgid "SpeedyDex"
msgstr ""
@@ -219363,6 +219932,14 @@ msgstr ""
msgid "Debug Menu"
msgstr "Menu di debug"
+#: data/raw/keybindings/keybindings.json
+msgid "Lua Console"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Reload Lua Code"
+msgstr ""
+
#: data/raw/keybindings/keybindings.json
msgid "View Scentmap"
msgstr "Visualizza la mappa dell'odore"
@@ -219918,6 +220495,26 @@ msgstr ""
msgid "Add new page"
msgstr ""
+#: data/raw/keybindings/keybindings.json
+msgid "Edit command"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History up"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History down"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the top"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the bottom"
+msgstr ""
+
#: data/raw/keybindings/messages.json
msgid "Toggle wide display"
msgstr ""
@@ -220076,7 +220673,31 @@ msgstr ""
#: src/achievement.cpp
#, c-format
-msgid "Attain %s skill level of %i (%i/%i)."
+msgid "Kill at least %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Don't kill even a single %s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Kill no more than %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+msgid " (failed)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Attain skill level of %i in %s (%i/%i)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Stay at or below skill level of %i in %s (%i/%i)"
msgstr ""
#: src/achievement.cpp
@@ -225677,6 +226298,30 @@ msgstr ""
msgid "に坂索トし荷測のンおク妙免イロコヤ梅棋厚れ表幌"
msgstr ""
+#: src/catalua_console.cpp
+msgid "Press Ctrl+S to run script, press Esc to cancel"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press arrow keys to navigate text input"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to add new line"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to enter/edit command, Esc to quit"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Up/Down arrows to select from history"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press PgUp/PgDn/Home/End to scroll output window"
+msgstr ""
+
#: src/character.cpp src/debug_menu.cpp src/game.cpp src/iuse.cpp
#: src/npctrade.cpp
msgid "You"
@@ -230508,6 +231153,10 @@ msgstr ""
msgid "Change [b]attery charge"
msgstr ""
+#: src/debug_menu.cpp
+msgid "Export [j]son template"
+msgstr ""
+
#: src/debug_menu.cpp
msgid "Vehicle…"
msgstr ""
@@ -230624,6 +231273,10 @@ msgstr ""
msgid "Player…"
msgstr ""
+#: src/debug_menu.cpp
+msgid "Lua console"
+msgstr ""
+
#: src/debug_menu.cpp
msgid ""
"Debug Functions - Manipulate the fabric of reality!\n"
@@ -231491,6 +232144,10 @@ msgstr "Non ci sono veicoli in quella direzione."
msgid "By how much? (in kJ, negative to discharge)"
msgstr ""
+#: src/debug_menu.cpp
+msgid "JSON template written to debug.log"
+msgstr ""
+
#: src/dependency_tree.cpp
msgid "Missing Dependency(ies): "
msgstr ""
@@ -235868,21 +236525,19 @@ msgstr ""
#: src/game.cpp
#, c-format
-msgid "Stepping into that %1$s looks risky, but you enter anyway."
+msgid "Stepping into that %1$s looks risky. %2$s"
msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Run into it if you wish to enter "
-"anyway."
+msgid "But you enter anyway."
msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Crouch and move into it if you wish to"
-" enter anyway."
+msgid "Run into it if you wish to enter anyway."
+msgstr ""
+
+#: src/game.cpp
+msgid "Crouch and move into it if you wish to enter anyway."
msgstr ""
#: src/game.cpp
@@ -243838,6 +244493,11 @@ msgstr ""
msgid "You try to feed the %s some %s, but it vanishes!"
msgstr ""
+#: src/iuse.cpp
+#, c-format
+msgid "You reach for the %s, but it recoils away from you!"
+msgstr ""
+
#: src/iuse.cpp
msgid "You want to feed it the dog food, but it bites your fingers!"
msgstr ""
@@ -249711,6 +250371,11 @@ msgstr ""
msgid "Create World"
msgstr ""
+#. ~ Marker for worlds that need Lua in game builds without Lua
+#: src/main_menu.cpp src/worldfactory.cpp
+msgid "Needs Lua!"
+msgstr ""
+
#: src/main_menu.cpp
msgid "Bugs? Suggestions? Use links in MOTD to report them."
msgstr ""
@@ -249941,6 +250606,17 @@ msgstr ""
msgid "Unable to make graphics directory. Check permissions."
msgstr ""
+#: src/main_menu.cpp
+msgid ""
+"You are running x32 build of the game on a x64 operating system. This means"
+" the game will NOT be able to access all memory, and you may experience "
+"random out-of-memory crashes. Consider obtaining a x64 build of the game to"
+" avoid that, but if you *really* want to be running x32 build of the game "
+"for some reason (or don't have a choice), you may want to lower your memory "
+"usage by disabling tileset, soundpack and mods and increasing autosave "
+"frequency."
+msgstr ""
+
#: src/main_menu.cpp
msgid "Really quit?"
msgstr ""
@@ -249971,6 +250647,13 @@ msgstr ""
msgid "Sorry, something went wrong."
msgstr ""
+#. ~ Error when attempting to load a world whose mods depend on Lua
+#. ~ on game build that doesn't have Lua. %s = world name.
+#: src/main_menu.cpp
+#, c-format
+msgid "%s needs game build with Lua support!"
+msgstr ""
+
#. ~ %s = world name
#: src/main_menu.cpp
#, c-format
@@ -253694,6 +254377,15 @@ msgstr[2] ""
msgid "Mod version"
msgstr ""
+#: src/mod_manager_ui.cpp
+#, c-format
+msgid "%s: API version %s\n"
+msgstr ""
+
+#: src/mod_manager_ui.cpp
+msgid "Needs Lua"
+msgstr ""
+
#: src/mod_manager_ui.cpp
msgid "Mod info path"
msgstr ""
@@ -256652,13 +257344,6 @@ msgstr ""
msgid "Focus trends towards:"
msgstr ""
-#: src/mtype.cpp
-msgid "human"
-msgid_plural "humans"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
-
#: src/mutation.cpp
#, c-format
msgid "Your %s is pushed off!"
@@ -259280,6 +259965,14 @@ msgstr ""
msgid "Messages related to SDL, tiles, tilesets and sound."
msgstr ""
+#: src/options.cpp
+msgid "Lua"
+msgstr ""
+
+#: src/options.cpp
+msgid "Messages from Lua scripts."
+msgstr ""
+
#: src/options.cpp
msgid "General"
msgstr "Generali"
@@ -260391,6 +261084,16 @@ msgstr "Ritardo animazioni"
msgid "The amount of time to pause between animation frames in ms."
msgstr "Tempo in millisecondi che trascorre tra un'animazione e l'altra."
+#: src/options.cpp
+msgid "Draw bullets as lines"
+msgstr ""
+
+#: src/options.cpp
+msgid ""
+"If true, bullets are drawn as lines of images, and the animation lasts only "
+"one frame."
+msgstr ""
+
#: src/options.cpp
msgid "Blinking effects speed"
msgstr ""
@@ -260465,7 +261168,7 @@ msgid "Font height"
msgstr ""
#: src/options.cpp
-msgid "Set the font height. Requires restart."
+msgid "Set the font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -260473,7 +261176,7 @@ msgid "Font size"
msgstr ""
#: src/options.cpp
-msgid "Set the font size. Requires restart."
+msgid "Set the font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -260481,7 +261184,7 @@ msgid "Map font width"
msgstr ""
#: src/options.cpp
-msgid "Set the map font width. Requires restart."
+msgid "Set the map font width. Requires restart."
msgstr ""
#: src/options.cpp
@@ -260489,7 +261192,7 @@ msgid "Map font height"
msgstr ""
#: src/options.cpp
-msgid "Set the map font height. Requires restart."
+msgid "Set the map font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -260497,7 +261200,7 @@ msgid "Map font size"
msgstr ""
#: src/options.cpp
-msgid "Set the map font size. Requires restart."
+msgid "Set the map font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -260505,7 +261208,7 @@ msgid "Overmap font width"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font width. Requires restart."
+msgid "Set the overmap font width. Requires restart."
msgstr ""
#: src/options.cpp
@@ -260513,7 +261216,7 @@ msgid "Overmap font height"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font height. Requires restart."
+msgid "Set the overmap font height. Requires restart."
msgstr ""
#: src/options.cpp
@@ -260521,7 +261224,7 @@ msgid "Overmap font size"
msgstr ""
#: src/options.cpp
-msgid "Set the overmap font size. Requires restart."
+msgid "Set the overmap font size. Requires restart."
msgstr ""
#: src/options.cpp
@@ -268110,6 +268813,11 @@ msgstr ""
msgid " [%s]"
msgstr ""
+#. ~ Tag for mods that use Lua in game builds without Lua.
+#: src/worldfactory.cpp
+msgid "(Needs Lua) "
+msgstr ""
+
#: src/worldfactory.cpp
msgid "N/A"
msgstr "Nessuna"
diff --git a/lang/po/ja.po b/lang/po/ja.po
index 6e97ded95edd..c07952fc8cce 100644
--- a/lang/po/ja.po
+++ b/lang/po/ja.po
@@ -1,15 +1,16 @@
#
# Translators:
-# くりやまたいせい, 2022
-# O M, 2022
+# くりやまたいせい, 2023
+# O M, 2023
# Coolthulhu , 2023
# Pigmentblue15, 2023
+# Olanti , 2023
#
msgid ""
msgstr ""
"Project-Id-Version: cataclysm-bn\n"
-"POT-Creation-Date: 2023-08-03 04:45+0000\n"
-"Last-Translator: Pigmentblue15, 2023\n"
+"POT-Creation-Date: 2023-09-15 13:27+0000\n"
+"Last-Translator: Olanti , 2023\n"
"Language-Team: Japanese (https://app.transifex.com/bn-team/teams/113585/ja/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1670,10 +1671,18 @@ msgstr ""
msgid "[Combat] One Down, Billions to Go…"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] The Undertaker"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Rude Awakening"
msgstr ""
+#: data/json/achievements.json
+msgid "[Combat] Pacifist"
+msgstr ""
+
#: data/json/achievements.json
msgid "[Combat] Decamate"
msgstr ""
@@ -4078,10 +4087,23 @@ msgstr ""
#: data/json/bionics.json data/json/items/bionics.json
msgid ""
"Installed within you is a perpetual generator powered by nonsensoleum. When"
-" activated it's power gen doubles. If you are seeing this, you'd better be "
+" activated its power gen doubles. If you are seeing this, you'd better be "
"debugging."
msgstr ""
+#: data/json/bionics.json data/json/items/bionics.json
+msgid "Debug Fuel Cell CBM"
+msgid_plural "Debug Fuel Cell CBMs"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'Debug Fuel Cell CBM'}
+#: data/json/bionics.json data/json/items/bionics.json
+msgid ""
+"The power of the sun, in the palm of my hand! Installed within you is a "
+"perpetual generator powered by nonsensoleum. When activated its power gen "
+"doubles. If you are seeing this, you'd better be debugging."
+msgstr ""
+
#: data/json/body_parts.json
msgid "appendix"
msgstr "追加部位"
@@ -8230,6 +8252,17 @@ msgstr "呼吸ができません...喘息の発作です!"
msgid "You're winded."
msgstr "息切れしています。"
+#: data/json/effects.json
+msgid "Bronchospasms"
+msgstr ""
+
+#. ~ Description of effect 'Bronchospasms'.
+#: data/json/effects.json
+msgid ""
+"Something in the air is making it harder to breathe, aggravating your "
+"asthma. Increases the chance of suffering an asthma attack."
+msgstr ""
+
#: data/json/effects.json
msgid "The ceiling collapses on you!"
msgstr "天井が崩れてきました!"
@@ -22655,34 +22688,82 @@ msgid "seeing this is a bug"
msgid_plural "seeing this is a bug"
msgstr[0] "このアイテムが見えている場合はバグが発生しています"
+#: data/json/species.json
+msgid "mammal"
+msgid_plural "mammals"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'mammal'}
#: data/json/species.json
msgid "a mammal"
msgstr "哺乳類"
+#: data/json/species.json
+msgid "amphibian"
+msgid_plural "amphibians"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'amphibian'}
#: data/json/species.json
msgid "an amphibian"
msgstr "両生類"
+#: data/json/species.json
+msgid "bird"
+msgid_plural "birds"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'bird'}
#: data/json/species.json
msgid "a bird"
msgstr "鳥類"
+#: data/json/species.json
+msgid "reptile"
+msgid_plural "reptiles"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'reptile'}
#: data/json/species.json
msgid "a reptile"
msgstr "爬虫類"
+#: data/json/species.json
+msgid "fish"
+msgid_plural "fish"
+msgstr[0] ""
+
+#. ~ Description for {'str_sp': 'fish'}
#: data/json/species.json
msgid "a fish"
msgstr "魚類"
+#: data/json/species.json
+msgid "mutant"
+msgid_plural "mutants"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'mutant'}
#: data/json/species.json
msgid "a mutant"
msgstr "変異体"
+#: data/json/species.json
+msgid "nether creature"
+msgid_plural "nether creatures"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'nether creature'}
#: data/json/species.json
msgid "a nether creature"
msgstr "異界生物"
+#: data/json/species.json data/json/monsters/slimes.json
+msgid "blob"
+msgid_plural "blobs"
+msgstr[0] "ブロブ"
+
+#. ~ Description for {'str': 'blob'}
#: data/json/species.json
msgid "a blob"
msgstr "ブロブ"
@@ -22691,30 +22772,72 @@ msgstr "ブロブ"
msgid "plop."
msgstr "ペタッ。"
+#: data/json/species.json
+msgid "fungus"
+msgid_plural "fungi"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'fungus', 'str_pl': 'fungi'}
#: data/json/species.json
msgid "a fungus"
msgstr "真菌"
+#: data/json/species.json
+msgid "leech plant"
+msgid_plural "leech plants"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'leech plant'}
#: data/json/species.json
msgid "a leech plant"
msgstr "異界植物"
+#: data/json/species.json
+msgid "insect"
+msgid_plural "insects"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'insect'}
#: data/json/species.json
msgid "an insect"
msgstr "虫"
+#: data/json/species.json
+msgid "spider"
+msgid_plural "spiders"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'spider'}
#: data/json/species.json
msgid "a spider"
msgstr "クモ類"
+#: data/json/species.json
+msgid "plant"
+msgid_plural "plants"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'plant'}
#: data/json/species.json
msgid "a plant"
msgstr "植物"
+#: data/json/species.json
+msgid "mollusk"
+msgid_plural "mollusks"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'mollusk'}
#: data/json/species.json
msgid "a mollusk"
msgstr "軟体動物"
+#: data/json/species.json
+msgid "worm"
+msgid_plural "worms"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'worm'}
#: data/json/species.json
msgid "a worm"
msgstr "ワーム"
@@ -22723,6 +22846,13 @@ msgstr "ワーム"
msgid "rustle."
msgstr "ガサッ。"
+#: data/json/species.json data/json/monsters/zed-classic.json
+#: data/json/npcs/talk_tags.json
+msgid "zombie"
+msgid_plural "zombies"
+msgstr[0] "ゾンビ"
+
+#. ~ Description for {'str': 'zombie'}
#: data/json/species.json
msgid "a zombie"
msgstr "ゾンビ"
@@ -22731,6 +22861,12 @@ msgstr "ゾンビ"
msgid "shuffling."
msgstr "[何かを引きずるような音]"
+#: data/json/species.json
+msgid "robot"
+msgid_plural "robots"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'robot'}
#: data/json/species.json
msgid "a robot"
msgstr "ロボット"
@@ -22739,18 +22875,46 @@ msgstr "ロボット"
msgid "mechanical whirring."
msgstr "[唸るような機械音]"
+#: data/json/species.json data/json/npcs/talk_tags.json
+msgid "horror"
+msgid_plural "horrors"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'horror'}
#: data/json/species.json
msgid "a horror"
msgstr "怪物"
+#: data/json/species.json
+msgid "abberation"
+msgid_plural "abberations"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'abberation'}
#: data/json/species.json
msgid "an aberration"
msgstr "異形"
+#: data/json/species.json
+msgid "hallucination"
+msgid_plural "hallucinations"
+msgstr[0] ""
+
+#: data/json/species.json src/mtype.cpp
+msgid "human"
+msgid_plural "humans"
+msgstr[0] "人間"
+
+#. ~ Description for {'str': 'human'}
#: data/json/species.json
msgid "a human"
msgstr "人間"
+#: data/json/species.json
+msgid "unknown species"
+msgid_plural "unknown species"
+msgstr[0] ""
+
#: data/json/speech.json data/mods/Aftershock/speech.json
#: data/mods/CrazyCataclysm/crazy_speech.json
msgid "\"Hello?\""
@@ -47744,9 +47908,9 @@ msgstr[0] "弾薬(20x66mm/手製矢弾)"
#. flechettes, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless flechette rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
-msgstr "矢弾仕様のRivtech社製20x66mmケースレス弾を非公式に手作りしたものです。ケースレスの弾薬は分解、再利用ができません。"
+"Handmade duplicates of Rivtech 20x66mm caseless flechette rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
+msgstr ""
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm buckshot, handmade"
@@ -47756,9 +47920,9 @@ msgstr[0] "弾薬(20x66mm/手製散弾)"
#. ~ Description for {'str': '20x66mm buckshot, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless buckshot rounds."
-" Being caseless rounds, these cannot be disassembled or reloaded."
-msgstr "散弾仕様のRivtech社製20x66mmケースレス弾を非公式に手作りしたものです。ケースレスの弾薬は分解、再利用ができません。"
+"Handmade duplicates of Rivtech 20x66mm caseless buckshot rounds. Being "
+"caseless rounds, these cannot be disassembled or reloaded."
+msgstr ""
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm slug, handmade"
@@ -47769,9 +47933,9 @@ msgstr[0] "弾薬(20x66mm/手製単発弾)"
#. slugs, handmade'}
#: data/json/items/ammo/20x66mm.json
msgid ""
-"Handcrafted bootleg duplicates of Rivtech 20x66mm caseless solid projectile "
-"rounds. Being caseless rounds, these cannot be disassembled or reloaded."
-msgstr "単発弾仕様のRivtech社製20x66mmケースレス弾を非公式に手作りしたものです。ケースレスの弾薬は分解、再利用ができません。"
+"Handmade duplicates of Rivtech 20x66mm caseless solid projectile rounds. "
+"Being caseless rounds, these cannot be disassembled or reloaded."
+msgstr ""
#: data/json/items/ammo/20x66mm.json
msgid "20x66mm explosive"
@@ -49174,16 +49338,52 @@ msgid ""
msgstr "カールグスタフM3無反動砲用の84x246mm煙幕弾です。一般的には合図や標的の指示、そして部隊移動の援護に使用します。"
#: data/json/items/ammo/8x40mm.json
-msgid "bootleg 8x40mm JHP"
-msgid_plural "bootleg 8x40mm JHPs"
-msgstr[0] "弾薬(8x40mm/JHP/非正規)"
+msgid "8x40mm JHP, handmade"
+msgid_plural "8x40mm JHP, handmades"
+msgstr[0] ""
-#. ~ Description for {'str': 'bootleg 8x40mm JHP'}
+#. ~ Description for {'str': '8x40mm JHP, handmade'}
#: data/json/items/ammo/8x40mm.json
msgid ""
-"Bootleg duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
+"Handmade duplicates of Rivtech 8x40mm JHP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm caseless, handmade"
+msgid_plural "8x40mm caseless, handmades"
+msgstr[0] ""
+
+#. ~ Description for {'str': '8x40mm caseless, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm caseless rounds. Being caseless "
"rounds, these cannot be disassembled or reloaded."
-msgstr "Rivtech社製8x40mmケースレス弾の非正規コピー品です。ケースレスの弾薬は分解、再利用ができません。"
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm HVP, handmade"
+msgid_plural "8x40mm HVP, handmades"
+msgstr[0] ""
+
+#. ~ Description for {'str': '8x40mm HVP, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm HVP rounds. Being caseless rounds, "
+"these cannot be disassembled or reloaded."
+msgstr ""
+
+#: data/json/items/ammo/8x40mm.json
+msgid "8x40mm tracer, handmade"
+msgid_plural "8x40mm tracer, handmades"
+msgstr[0] ""
+
+#. ~ Description for {'str': '8x40mm tracer, handmade'}
+#: data/json/items/ammo/8x40mm.json
+msgid ""
+"Handmade duplicates of Rivtech 8x40mm tracer rounds. Being caseless rounds,"
+" these cannot be disassembled or reloaded."
+msgstr ""
#. ~ Description for {'str_sp': '8x40mm caseless'}
#: data/json/items/ammo/8x40mm.json
@@ -49496,41 +49696,41 @@ msgid "A tube of small paintballs. They deal virtually no damage."
msgstr "小型のペイントボールです。この玉はほとんどダメージを与えられません。"
#: data/json/items/ammo/rpg.json
-msgid "PG-7VL 93mm rocket"
-msgid_plural "PG-7VL 93mm rockets"
-msgstr[0] "弾頭(PG-7VL 93mm)"
+msgid "PG-7VL RPG-7 rocket"
+msgid_plural "PG-7VL RPG-7 rockets"
+msgstr[0] ""
-#. ~ Description for PG-7VL 93mm rocket
+#. ~ Description for PG-7VL RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "93mm single-stage high-explosive ammunition for the RPG-7."
msgstr "RPG-7用の93mm単段式榴弾です。"
#: data/json/items/ammo/rpg.json
-msgid "PG-7VR 64mm/105mm rocket"
-msgid_plural "PG-7VR 64mm/105mm rockets"
-msgstr[0] "弾頭(PG-7VR 64mm/105mm)"
+msgid "PG-7VR RPG-7 rocket"
+msgid_plural "PG-7VR RPG-7 rockets"
+msgstr[0] ""
-#. ~ Description for PG-7VR 64mm/105mm rocket
+#. ~ Description for PG-7VR RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "64mm/105mm high-explosive tandem ammunition for the RPG-7."
msgstr "RPG-7用の64mm/105mmタンデム式榴弾です。"
#: data/json/items/ammo/rpg.json
-msgid "TBG-7V 105mm rocket"
-msgid_plural "TBG-7V 105mm rockets"
-msgstr[0] "弾頭(TBG-7V 105mm)"
+msgid "TBG-7V RPG-7 rocket"
+msgid_plural "TBG-7V RPG-7 rockets"
+msgstr[0] ""
-#. ~ Description for TBG-7V 105mm rocket
+#. ~ Description for TBG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid "105mm thermobaric ammunition for the RPG-7."
msgstr "RPG-7用の105mm燃料気化榴弾です。"
#: data/json/items/ammo/rpg.json
-msgid "OG-7V 40mm rocket"
-msgid_plural "OG-7V 40mm rockets"
-msgstr[0] "弾頭(OG-7V 40mm)"
+msgid "OG-7V RPG-7 rocket"
+msgid_plural "OG-7V RPG-7 rockets"
+msgstr[0] ""
-#. ~ Description for OG-7V 40mm rocket
+#. ~ Description for OG-7V RPG-7 rocket
#: data/json/items/ammo/rpg.json
msgid ""
"40mm high-explosive fragmentation antipersonnel ammunition for the RPG-7."
@@ -70177,6 +70377,46 @@ msgid ""
"A pickled egg. Rather salty, but tastes good and lasts for a long time."
msgstr "卵の酢漬けです。少々塩辛いですが美味しく食べられ、長持ちします。"
+#: data/json/items/comestibles/egg.json
+msgid "salsify omelette"
+msgid_plural "salsify omelette"
+msgstr[0] ""
+
+#. ~ Description for {'str_sp': 'salsify omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A salsify omelette."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "wild veggetable omelette"
+msgid_plural "wild veggetable omelette"
+msgstr[0] ""
+
+#. ~ Description for {'str_sp': 'wild veggetable omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with wild vegetables."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "mushroom omelette"
+msgid_plural "mushroom omelette"
+msgstr[0] ""
+
+#. ~ Description for {'str_sp': 'mushroom omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "An omelette made with mushrooms."
+msgstr ""
+
+#: data/json/items/comestibles/egg.json
+msgid "spanish omelette"
+msgid_plural "spanish omelette"
+msgstr[0] ""
+
+#. ~ Description for {'str_sp': 'spanish omelette'}
+#: data/json/items/comestibles/egg.json
+msgid "A spanish omelette."
+msgstr ""
+
#: data/json/items/comestibles/frozen.json
msgid "milkshake"
msgid_plural "milkshakes"
@@ -71173,6 +71413,7 @@ msgstr "甘みがある乾燥したクラッカーです。そのまま食べる
#: data/json/items/comestibles/junkfood.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cookie"
msgid_plural "cookies"
msgstr[0] "クッキー"
@@ -73384,6 +73625,7 @@ msgstr "滅菌処理済の生理食塩水が原料の点眼薬です。ドライ
#: data/json/items/comestibles/med.json
#: data/mods/My_Sweet_Cataclysm/sweet_comestibles.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "chewing gum"
msgid_plural "chewing gum"
msgstr[0] "チューインガム"
@@ -79282,6 +79524,7 @@ msgstr "本物のメープルシロップを使用した、カリカリで美味
#: data/json/items/comestibles/wheat.json
#: data/mods/My_Sweet_Cataclysm/sweet_monsters.json
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "cracker"
msgid_plural "crackers"
msgstr[0] "クラッカー"
@@ -90154,6 +90397,18 @@ msgid ""
"likely evolved."
msgstr "湾曲した片刃をもつ武器です。外見は元々の用途であった農業用の鎌に似ています。"
+#: data/json/items/melee/spears_and_polearms.json
+msgid "makeshift glaive"
+msgid_plural "makeshift glaives"
+msgstr[0] "簡易ハルバード"
+
+#. ~ Description for {'str': 'makeshift glaive'}
+#: data/json/items/melee/spears_and_polearms.json
+msgid ""
+"This is a large blade attached to a long stick. It could do a considerable "
+"amount of damage."
+msgstr "長い棒に大型の刃を取り付けた武器です。かなりの攻撃力があります。"
+
#: data/json/items/melee/spears_and_polearms.json
msgid "glaive"
msgid_plural "glaives"
@@ -95889,7 +96144,7 @@ msgstr "ライターの火を着けました。"
#. ~ Use action need_charges_msg for {'str': 'refillable lighter'}.
#: data/json/items/tool/fire.json src/activity_actor.cpp src/explosion.cpp
-#: src/gates.cpp
+#: src/gates.cpp src/iuse.cpp
msgid "Nothing happens."
msgstr "何も起きませんでした。"
@@ -97643,18 +97898,6 @@ msgid ""
msgstr ""
"清潔かどうか判別できない水に一端を漬けてしばらく待てば、二層式のろ過システムによって浄水された状態で飲むことができます。川などの飲料に適さない水源から水を採取する時に役に立ちます。"
-#: data/json/items/tool/misc.json
-msgid "makeshift glaive"
-msgid_plural "makeshift glaives"
-msgstr[0] "簡易ハルバード"
-
-#. ~ Description for {'str': 'makeshift glaive'}
-#: data/json/items/tool/misc.json
-msgid ""
-"This is a large blade attached to a long stick. It could do a considerable "
-"amount of damage."
-msgstr "長い棒に大型の刃を取り付けた武器です。かなりの攻撃力があります。"
-
#: data/json/items/tool/misc.json
msgid "mind splicer kit"
msgid_plural "mind splicer kits"
@@ -107885,11 +108128,6 @@ msgid ""
"of infesting sewer lines."
msgstr "地下生活を続けるうちに淡黄色に変色した、メクラヘビの変異体の一種です。地下に群れで生活し、下水道を住処にしています。"
-#: data/json/monsters/slimes.json
-msgid "blob"
-msgid_plural "blobs"
-msgstr[0] "ブロブ"
-
#. ~ Description for {'str': 'blob'}
#: data/json/monsters/slimes.json
msgid ""
@@ -108495,11 +108733,6 @@ msgid ""
"envelope of scar tissue."
msgstr "歪んだ人間の皮膚が分厚く変化し、傷跡が硬く覆われています。"
-#: data/json/monsters/zed-classic.json data/json/npcs/talk_tags.json
-msgid "zombie"
-msgid_plural "zombies"
-msgstr[0] "ゾンビ"
-
#. ~ Description for {'str': 'zombie'}
#: data/json/monsters/zed-classic.json
msgid ""
@@ -118772,7 +119005,8 @@ msgid "I'll kill you if you don't."
msgstr "言う通りにしなければ殺す。"
#: data/json/npcs/TALK_COMMON_OTHER.json
-#: data/json/npcs/TALK_TRUE_FOODPERSON.json src/iuse.cpp
+#: data/json/npcs/TALK_TRUE_FOODPERSON.json
+#: data/mods/smart_house_remotes/main.lua src/iuse.cpp
msgid "Nevermind."
msgstr "なんでもない。"
@@ -126716,10 +126950,6 @@ msgstr "化け物"
msgid "demon"
msgstr "悪魔"
-#: data/json/npcs/talk_tags.json
-msgid "horror"
-msgstr "怪物"
-
#: data/json/npcs/talk_tags.json
msgid "indescribable beast"
msgstr "名状しがたい獣"
@@ -140528,6 +140758,16 @@ msgid ""
"coming no further. Go away."
msgstr "動くな。どうやってここに入ったのか知らないが、それ以上近づくな。帰ってくれ。"
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"I was sent here by the traders at the refugee center. They told me to "
+"deliver this hard drive to you."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "The traders also mentioned you were looking for help."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "Wait! What??"
msgstr "待って!何だって??"
@@ -140564,6 +140804,20 @@ msgstr "その、防護装備っていうのは?"
msgid "Alright, I'm leaving."
msgstr "わかった、もう行くよ。"
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid ""
+"Understood. Please drop the drive on the box embedded beneath the intercom."
+" You are welcome to leave afterwards."
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "[Do as the Intercom Says]"
+msgstr ""
+
+#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
+msgid "Didn't bring the hard drive now, let me return with it."
+msgstr ""
+
#: data/json/npcs/robofac/NPC_ROBOFAC_INTERCOM.json
msgid "No. Now leave."
msgstr "嫌だ。さっさと出て行け。"
@@ -170696,6 +170950,12 @@ msgid ""
"constant jet of warm air to heat an enclosed space."
msgstr "浮遊するヒーターに改造した監視ロボットです。暖気を噴出し続けて密閉された空間を暖めます。"
+#: data/mods/Aftershock/mobs/species.json
+msgid "intelligent animal"
+msgid_plural "intelligent animals"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'intelligent animal'}
#: data/mods/Aftershock/mobs/species.json
msgid "an intelligent animal created by man before the Cataclysm"
msgstr "大変動以前に人の手で創造された知性生物です。"
@@ -180444,6 +180704,12 @@ msgstr ""
msgid "DinoLab Operating Theater Access Control"
msgstr ""
+#: data/mods/DinoMod/monsters/dinosaur.json
+msgid "dinosaur"
+msgid_plural "dinosaurs"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'dinosaur'}
#: data/mods/DinoMod/monsters/dinosaur.json
msgid "a dinosaur"
msgstr "恐竜"
@@ -191822,6 +192088,11 @@ msgstr "ポーション"
msgid "RUNES"
msgstr "ルーン"
+#. ~ Crafting recipes subcategory of 'ENCHANTED' category
+#: data/mods/Magiclysm/qualities.json
+msgid "ENCHANTING"
+msgstr ""
+
#: data/mods/Magiclysm/qualities.json
msgid "mana focusing"
msgstr "マナ集中"
@@ -191957,6 +192228,21 @@ msgctxt "start_name"
msgid "Wizard's Retreat Vacation"
msgstr "魔法使いの隠れ家"
+#: data/mods/Magiclysm/species.json
+msgid "magical beast"
+msgid_plural "magical beasts"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "dragon"
+msgid_plural "dragons"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/species.json
+msgid "lizardfolk"
+msgid_plural "lizardfolk"
+msgstr[0] ""
+
#: data/mods/Magiclysm/start_locations.json
msgid "Wizard's Secret Basement Study"
msgstr "魔法使いの秘匿研究室"
@@ -192133,6 +192419,42 @@ msgid ""
"lights."
msgstr "湿地の大気から鬼火を呼び出し、敵を惑わせます。より経験を積むと、一度の詠唱で複数の鬼火を呼び出せるようになります。"
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Bless"
+msgstr "ブレス"
+
+#. ~ Description for {'str': 'Bless'}
+#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "A spell of blessing that gives you energy and boosts your abilities."
+msgstr "身体に力を与え、能力を向上させる祝福の呪文です。"
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Holy Blade"
+msgstr "ホーリー・ブレード"
+
+#. ~ Description for Holy Blade
+#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
+#. Holy Blade'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid "This blade of light will cut through any evil it makes contact with!"
+msgstr "光の剣が接触したあらゆる敵を切り裂きます!"
+
+#: data/mods/Magiclysm/Spells/animist.json
+msgid "Spiritual Armor"
+msgstr "スピリチュアル・アーマー"
+
+#. ~ Description for Spiritual Armor
+#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
+#. of Spiritual Armor'}
+#: data/mods/Magiclysm/Spells/animist.json
+#: data/mods/Magiclysm/items/spell_scrolls.json
+msgid ""
+"Evil will not make it through your defenses if your faith is strong enough!"
+msgstr "信仰が十分に強ければ、悪がこの鎧を打ち破ることはありません!"
+
#: data/mods/Magiclysm/Spells/biomancer.json
msgid "Cure Light Wounds"
msgstr "キュア・ライト・ウーンズ"
@@ -193604,17 +193926,6 @@ msgid ""
"harmless."
msgstr "分厚い霧の壁を広範囲に出現させます。敵が霧に触れると強烈な気圧が発生して地面に押し付けられますが、仲間は問題なく通り抜けられます。"
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Bless"
-msgstr "ブレス"
-
-#. ~ Description for {'str': 'Bless'}
-#. ~ Description for {'str': 'Scroll of Bless', 'str_pl': 'Scrolls of Bless'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "A spell of blessing that gives you energy and boosts your abilities."
-msgstr "身体に力を与え、能力を向上させる祝福の呪文です。"
-
#: data/mods/Magiclysm/Spells/technomancer.json
#: data/mods/Magiclysm/effects/effects.json
msgid "Invisibility"
@@ -193632,31 +193943,6 @@ msgstr "他者から自分が視認できなくなる魔法の力場を発生さ
msgid "To the outside world, your body fades away and you cease to exist!"
msgstr "姿が消え、外の世界から視認できなくなりました!"
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Holy Blade"
-msgstr "ホーリー・ブレード"
-
-#. ~ Description for Holy Blade
-#. ~ Description for {'str': 'Scroll of Holy Blade', 'str_pl': 'Scrolls of
-#. Holy Blade'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid "This blade of light will cut through any evil it makes contact with!"
-msgstr "光の剣が接触したあらゆる敵を切り裂きます!"
-
-#: data/mods/Magiclysm/Spells/technomancer.json
-msgid "Spiritual Armor"
-msgstr "スピリチュアル・アーマー"
-
-#. ~ Description for Spiritual Armor
-#. ~ Description for {'str': 'Scroll of Spiritual Armor', 'str_pl': 'Scrolls
-#. of Spiritual Armor'}
-#: data/mods/Magiclysm/Spells/technomancer.json
-#: data/mods/Magiclysm/items/spell_scrolls.json
-msgid ""
-"Evil will not make it through your defenses if your faith is strong enough!"
-msgstr "信仰が十分に強ければ、悪がこの鎧を打ち破ることはありません!"
-
#: data/mods/Magiclysm/Spells/technomancer.json
msgid "Lamp"
msgstr "ランプ"
@@ -195702,6 +195988,16 @@ msgid "sledge hammer +2"
msgid_plural "sledge hammer +2s"
msgstr[0] "スレッジハンマー+2"
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "heavy sledge hammer +1"
+msgid_plural "heavy sledge hammers +1"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "heavy sledge hammer +2"
+msgid_plural "heavy sledge hammers +2"
+msgstr[0] ""
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "warhammer +1"
msgid_plural "warhammer +1s"
@@ -195873,11 +196169,13 @@ msgid_plural "cavalry sabre +2s"
msgstr[0] "騎兵刀+2"
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +1"
msgid_plural "crowbar +1s"
msgstr[0] "バール+1"
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "crowbar +2"
msgid_plural "crowbar +2s"
msgstr[0] "バール+2"
@@ -195923,11 +196221,13 @@ msgid_plural "combat knife +2s"
msgstr[0] "コンバットナイフ+2"
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +1"
msgid_plural "hunting knife +1s"
msgstr[0] "狩猟用ナイフ+1"
#: data/mods/Magiclysm/items/enchanted_melee.json
+#: data/mods/Magiclysm/items/enchanted_tools.json
msgid "hunting knife +2"
msgid_plural "hunting knife +2s"
msgstr[0] "狩猟用ナイフ+2"
@@ -196072,6 +196372,16 @@ msgid "dao +2"
msgid_plural "dao +2s"
msgstr[0] "中国刀+2"
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +1"
+msgid_plural "lucerne hammers +1"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_melee.json
+msgid "lucerne hammer +2"
+msgid_plural "lucerne hammers +2"
+msgstr[0] ""
+
#: data/mods/Magiclysm/items/enchanted_melee.json
msgid "Biomancer spear"
msgid_plural "Biomancer spears"
@@ -196905,6 +197215,66 @@ msgid ""
"turns into the item pictured on the front, in this case a crowbar."
msgstr "裏面に刻まれた呪文を読み上げると表面に描かれた物に変化する、大きな銀貨です。この硬貨にはバールが描かれています。"
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +1"
+msgid_plural "bottle jacks +1"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "bottle jack +2"
+msgid_plural "bottle jacks +2"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +1"
+msgid_plural "scalpels +1"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "scalpel +2"
+msgid_plural "scalpels +2"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +1"
+msgid_plural "butcher knives +1"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butcher knife +2"
+msgid_plural "butcher knives +2"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +1"
+msgid_plural "meat cleavers +1"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "meat cleaver +2"
+msgid_plural "meat cleavers +2"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +1"
+msgid_plural "carving knives +1"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "carving knife +2"
+msgid_plural "carving knives +2"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +1"
+msgid_plural "butchering kits +1"
+msgstr[0] ""
+
+#: data/mods/Magiclysm/items/enchanted_tools.json
+msgid "butchering kit +2"
+msgid_plural "butchering kits +2"
+msgstr[0] ""
+
#: data/mods/Magiclysm/items/enchanted_unarmed.json
msgid "cestus +1"
msgid_plural "cestus +1s"
@@ -197898,6 +198268,19 @@ msgid ""
msgstr ""
"ドラゴンの吐く炎を押しとどめる盾の絵が表紙に書かれた、革装丁の本です。モンスターの皮革を加工して身体を保護する防具を作る様々な方法が掲載されています。"
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid "Enchanter's Guidebook"
+msgid_plural "copies of Enchanter's Guidebooks"
+msgstr[0] ""
+
+#. ~ Description for {'str': "Enchanter's Guidebook", 'str_pl': "copies of
+#. Enchanter's Guidebooks"}
+#: data/mods/Magiclysm/items/recipe_books.json
+msgid ""
+"A hefty textbook on the theory and practice of magically strengthening "
+"weapons and tools."
+msgstr ""
+
#: data/mods/Magiclysm/items/spell_scrolls.json
msgid "Spell Scroll"
msgid_plural "Spell Scrolls"
@@ -198854,6 +199237,11 @@ msgid ""
"much more expensive."
msgstr "オリハルコン製のフレームです。鋼鉄よりもはるかに頑丈ですが、価格も桁違いです。"
+#: data/mods/Magiclysm/monsters/demon_spider.json
+msgid "demon spider"
+msgid_plural "demon spiders"
+msgstr[0] "デーモンスパイダー"
+
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid "demon spiderling"
msgid_plural "demon spiderlings"
@@ -198869,11 +199257,6 @@ msgid ""
msgstr ""
"既に小型犬ほどのサイズですが、これでも非常に若いデーモンスパイダーです。全身が赤いためデーモンと呼ばれています。こんな化け物を大変動以前には見た事がありません。非常に素早く動き、大きな牙からは毒が滴っています。"
-#: data/mods/Magiclysm/monsters/demon_spider.json
-msgid "demon spider"
-msgid_plural "demon spiders"
-msgstr[0] "デーモンスパイダー"
-
#. ~ Description for demon spider
#: data/mods/Magiclysm/monsters/demon_spider.json
msgid ""
@@ -201660,10 +202043,20 @@ msgid ""
msgstr ""
"キャンディーか何かのチラシです。恐ろしげにこちらを見つめる、滑らかな飴で作られた人間が描かれています。「シュガーキン(砂糖の血族)は史上初の等身大ヒューマンキャンディーです!君は真のモンスターか?これを食べ尽くすことが出来るか?」"
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "marshmallow"
+msgid_plural "marshmallows"
+msgstr[0] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "shlop."
msgstr "フカッ。"
+#: data/mods/My_Sweet_Cataclysm/sweet_species.json
+msgid "gummy"
+msgid_plural "gummies"
+msgstr[0] ""
+
#: data/mods/My_Sweet_Cataclysm/sweet_species.json
msgid "pop."
msgstr "ポフッ。"
@@ -203969,6 +204362,15 @@ msgid ""
"city size set to 1 and spacing set to 8."
msgstr "田舎で遊びましょう。農場、森林、村以外の構造物が生成されません。推奨される街のサイズは1、街の間隔は8です。"
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "SaveLoad Lua Test"
+msgstr ""
+
+#. ~ Description for SaveLoad Lua Test
+#: data/mods/saveload_lua_test/modinfo.json
+msgid "Mod for testing Lua save/load API."
+msgstr ""
+
#: data/mods/sees_player_hitbutton/modinfo.json
msgid "sees-player icon, HitButton_iso"
msgstr "追加 - 目視アイコン(HitButton_iso)"
@@ -203991,6 +204393,77 @@ msgid ""
"retrodays tileset."
msgstr "モンスターがプレイヤーを目視した際に態度を示すアイコンを表示します。retrodays tileset用のデザインです。"
+#: data/mods/smart_house_remotes/item.json
+msgid "smart house remote"
+msgid_plural "smart house remotes"
+msgstr[0] ""
+
+#. ~ Description for {'str': 'smart house remote'}
+#: data/mods/smart_house_remotes/item.json
+msgid ""
+"A small remote with lcd display used to control garage doors and window "
+"curtains. Completely useless now, unless you manage to restore power to the"
+" house."
+msgstr ""
+
+#: data/mods/smart_house_remotes/iuse.json
+msgid "Control doors and shutters"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Open curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Close curtains"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Raise garage door"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "Lower garage door"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's not enough grid charge.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Low Current At Endpoint"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when player is too far away from the area.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Signal"
+msgstr ""
+
+#. ~ Message on the remote, stylized as calculator led display.
+#. Shown when there's nothing to activate.
+#: data/mods/smart_house_remotes/main.lua
+msgid "No Endpoints Available"
+msgstr ""
+
+#: data/mods/smart_house_remotes/main.lua
+msgid "The remote beeps quietly."
+msgstr ""
+
+#. ~ Title of the menu prompting player to select what to activate with the
+#. remote.
+#. Typically it's doors, garage doors or window curtains.
+#: data/mods/smart_house_remotes/main.lua
+msgid "Select endpoint"
+msgstr ""
+
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Smart House Remotes"
+msgstr ""
+
+#. ~ Description for Smart House Remotes
+#: data/mods/smart_house_remotes/modinfo.json
+msgid "Add remotes for controlling garage doors and window curtains."
+msgstr ""
+
#: data/mods/speedydex/modinfo.json
msgid "SpeedyDex"
msgstr "変更 - 器用と連動した速度"
@@ -205417,6 +205890,14 @@ msgstr "切替/デバッグモード"
msgid "Debug Menu"
msgstr "デバッグメニュー"
+#: data/raw/keybindings/keybindings.json
+msgid "Lua Console"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Reload Lua Code"
+msgstr ""
+
#: data/raw/keybindings/keybindings.json
msgid "View Scentmap"
msgstr "匂いマップ"
@@ -205972,6 +206453,26 @@ msgstr "日記を.txtに出力"
msgid "Add new page"
msgstr "新規ページ追加"
+#: data/raw/keybindings/keybindings.json
+msgid "Edit command"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History up"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "History down"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the top"
+msgstr ""
+
+#: data/raw/keybindings/keybindings.json
+msgid "Scroll to the bottom"
+msgstr ""
+
#: data/raw/keybindings/messages.json
msgid "Toggle wide display"
msgstr ""
@@ -206130,7 +206631,31 @@ msgstr "設定/タレット照準モード"
#: src/achievement.cpp
#, c-format
-msgid "Attain %s skill level of %i (%i/%i)."
+msgid "Kill at least %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Don't kill even a single %s"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Kill no more than %i %s%s"
+msgstr ""
+
+#: src/achievement.cpp
+msgid " (failed)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Attain skill level of %i in %s (%i/%i)"
+msgstr ""
+
+#: src/achievement.cpp
+#, c-format
+msgid "Stay at or below skill level of %i in %s (%i/%i)"
msgstr ""
#: src/achievement.cpp
@@ -211706,6 +212231,30 @@ msgstr "アイウエオカキクケコサシスセソタチツテトナニヌネ
msgid "に坂索トし荷測のンおク妙免イロコヤ梅棋厚れ表幌"
msgstr "に坂索トし荷測のンおク妙免イロコヤ梅棋厚れ表幌"
+#: src/catalua_console.cpp
+msgid "Press Ctrl+S to run script, press Esc to cancel"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press arrow keys to navigate text input"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to add new line"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Enter to enter/edit command, Esc to quit"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press Up/Down arrows to select from history"
+msgstr ""
+
+#: src/catalua_console.cpp
+msgid "Press PgUp/PgDn/Home/End to scroll output window"
+msgstr ""
+
#: src/character.cpp src/debug_menu.cpp src/game.cpp src/iuse.cpp
#: src/npctrade.cpp
msgid "You"
@@ -216573,6 +217122,10 @@ msgstr "情報..."
msgid "Change [b]attery charge"
msgstr ""
+#: src/debug_menu.cpp
+msgid "Export [j]son template"
+msgstr ""
+
#: src/debug_menu.cpp
msgid "Vehicle…"
msgstr "車両..."
@@ -216689,6 +217242,10 @@ msgstr "ゲーム終了"
msgid "Player…"
msgstr "プレイヤー..."
+#: src/debug_menu.cpp
+msgid "Lua console"
+msgstr ""
+
#: src/debug_menu.cpp
msgid ""
"Debug Functions - Manipulate the fabric of reality!\n"
@@ -217558,6 +218115,10 @@ msgstr "そこには車両が存在しません。"
msgid "By how much? (in kJ, negative to discharge)"
msgstr "バッテリー残量を設定(単位:kJ、マイナスで減少)"
+#: src/debug_menu.cpp
+msgid "JSON template written to debug.log"
+msgstr ""
+
#: src/dependency_tree.cpp
msgid "Missing Dependency(ies): "
msgstr ""
@@ -222232,22 +222793,20 @@ msgstr "騎乗中は車両に搭乗できません。"
#: src/game.cpp
#, c-format
-msgid "Stepping into that %1$s looks risky, but you enter anyway."
+msgid "Stepping into that %1$s looks risky. %2$s"
msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Run into it if you wish to enter "
-"anyway."
-msgstr "%1$sへ進入するのは危険です。それでも移動したい場合は駆け足で進んでください。"
+msgid "But you enter anyway."
+msgstr ""
#: src/game.cpp
-#, c-format
-msgid ""
-"Stepping into that %1$s looks risky. Crouch and move into it if you wish to"
-" enter anyway."
-msgstr "%1$sへ進入するのは危険です。それでも移動したい場合は、屈んだ状態で進んでください。"
+msgid "Run into it if you wish to enter anyway."
+msgstr ""
+
+#: src/game.cpp
+msgid "Crouch and move into it if you wish to enter anyway."
+msgstr ""
#: src/game.cpp
msgid "You cannot pass obstacles whilst mounted."
@@ -230186,6 +230745,11 @@ msgstr "%sは差し出されたものを叩き落としました!"
msgid "You try to feed the %s some %s, but it vanishes!"
msgstr "%sに%sを与えようとすると、消えてしまいました!"
+#: src/iuse.cpp
+#, c-format
+msgid "You reach for the %s, but it recoils away from you!"
+msgstr ""
+
#: src/iuse.cpp
msgid "You want to feed it the dog food, but it bites your fingers!"
msgstr "ドッグフードを与えようとしましたが、指を噛まれました!"
@@ -232029,7 +232593,7 @@ msgstr "は横になった状態で"
#: src/iuse.cpp
msgid " looks